phimaker
Persitent homology of images and (co)kernels.
Overview
Phimaker is a Rust library implementing the algorithm introduced in [1] for computing persistent homology for kernels, images and cokernels. Python bindings are provided via PyO3. The Python package requires Python 3.12 or newer.
See CHANGELOG.md for changes since the last release and API migration notes.
Install via
pip install phimaker
Development environment and source builds
Install Rust through rustup, uv, and Lefthook. A native C linker is also required (for example, the build tools for your operating system).
This checkout currently resolves LoPhat 0.14.0 from ../lophat. Clone
LoPhat alongside Phimaker and check out
v0.14.0 or a compatible newer revision before building. See
the local dependency notes.
Run the following commands from the repository root:
rustup toolchain install stable
rustup toolchain install nightly --component rustfmt
uv python pin 3.12
uv sync --locked --group test
lefthook install
uv creates .venv, installs the development and test tools, and builds the
Python extension from source. Python 3.12 or newer is required; pin another
supported version if desired. The Git pre-commit hooks run nightly
rustfmt, Tombi, and Ruff, and stage their formatting changes. You can also run
them manually with lefthook run pre-commit.
Rebuild the extension and its generated type stubs after Rust or docstring changes, then run the Python tests:
uv run --no-sync maturin develop --locked --generate-stubs
uv run --no-sync python -m pytest
Build a distributable wheel into dist/ with:
uv run --no-sync maturin build --locked --release --generate-stubs --out dist
For the Rust library without Python bindings, use:
cargo build --locked --release --no-default-features
cargo test --locked --no-default-features
Persistence diagrams
DiagramEnsemble exposes the diagrams as domain, codomain, image,
kernel, cokernel, and relative in both Rust and Python.
Each diagram is a mapping from a generator's birth index to its death index.
In Rust, the shared lophat::utils::PersistenceDiagram wraps a HashMap<usize, ExtendedUsize>, with
ExtendedUsize::Finite(index) for finite deaths and ExtendedUsize::Infinity
for essential classes. Both types are re-exported from phimaker::diagrams.
Birth and death indices refer to filtration columns.
In Python, diagrams are dictionaries with integer keys and integer or None
values. For example, diagrams.codomain == {0: None, 1: 2} describes an essential
class born at index 0 and a class born at index 1 that dies at index 2.
Use diagram[birth] to look up a death and diagram.items() to iterate over
intervals. The former .paired and .unpaired attributes have been removed.
domain_representatives, codomain_representatives, image_representatives,
kernel_representatives, cokernel_representatives, and relative_representatives
are optional. Python's sixpack_from_inclusion and sixpack default to
get_representatives=False, which leaves all six attributes as None and
skips representative extraction and map solving. Pass get_representatives=True to obtain
maps from each birth index to a cycle support, or a relative chain pair.
Dictionary keys identify intervals. For sixpack_from_inclusion, all generator
supports use the original codomain indices; domain, kernel, and image cycles
use only selected domain generators. Ordinary non-kernel representatives have
maximum support index equal to birth, as does the second relative component.
Kernel cycles and first relative components use strictly earlier domain indices.
For sixpack, keys and diagram endpoints remain cylinder interval identifiers,
but supports refer to the original input complexes:
| Representatives | Support coordinates |
|---|---|
| Domain and kernel | Original domain indices |
| Image, codomain, and cokernel | Original codomain indices |
Relative pair (a, b) |
Original domain indices in a, original codomain indices in b |
Image cycles are mapped into the codomain using the input chain map. Cokernel
cycles are interpreted modulo codomain boundaries and images of domain cycles.
Relative pairs satisfy boundary(a) = 0 and boundary(b) = f(a); their degrees
are one less than, and equal to, the feature's degree. Either component may be
empty, and b need not be a codomain cycle. For an inclusion, a = boundary(b),
and b uses only generators outside the domain. For the edge relative to its endpoints:
from phimaker import sixpack_from_inclusion
diagrams = sixpack_from_inclusion(
[[], [], [0, 1]],
[0, 0, 1],
[0, 1],
get_representatives=True,
)
assert diagrams.relative == {2: None}
assert diagrams.relative_representatives == {2: ([0, 1], [2])}
Rust stores ordinary representatives as Option<HashMap<usize, Vec<usize>>>
and relative pairs as Option<HashMap<usize, (Vec<usize>, Vec<usize>)>>. Python
exposes dictionaries of lists or tuples of two lists, or None. Each requested map has exactly
its diagram's birth keys. A requested empty diagram has Some of an empty map
in Rust and {} in Python; when extraction is skipped it still has None.
Rust callers supply get_representatives immediately after the input matrices
and map or domain indices in sixpack and sixpack_from_inclusion, or as the
argument to all_diagrams. Pass false for diagrams only or
true for cycles, relative pairs, and maps. Nonempty domain, codomain, and relative decompositions must
retain V only when requesting representatives; the computation entry points
retain these matrices automatically. This flag skips representative extraction, map solving,
and their allocations; it does not change which matrices the reductions retain.
For example, an external edge creates a kernel class at index 4, and a domain edge kills it at index 5. Its representative is a domain cycle that bounds in the codomain:
from phimaker import sixpack_from_inclusion
diagrams = sixpack_from_inclusion(
[[], [], [], [0, 1], [0, 2], [1, 2]],
[0, 0, 0, 1, 1, 1],
[1, 2, 5],
get_representatives=True,
)
assert diagrams.kernel == {4: 5}
assert diagrams.kernel_representatives == {4: [1, 2]}
For a cokernel example, let two parallel edges join the same vertices, with only the second edge in the domain. The codomain loop represents an essential cokernel feature:
diagrams = sixpack_from_inclusion(
[[], [], [0, 1], [0, 1]],
[0, 0, 1, 1],
[0, 1, 3],
get_representatives=True,
)
assert diagrams.cokernel == {3: None}
assert diagrams.cokernel_representatives == {3: [2, 3]}
Persistence maps
Setting get_representatives=True also computes five maps in the stored cycle
bases: kernel_to_domain, domain_to_image, image_to_codomain,
domain_to_codomain, and codomain_to_cokernel. Each is
Option<HashMap<usize, Vec<usize>>> in Rust and a dictionary or None in Python.
All five are None when extraction is skipped.
Each dictionary has exactly its source diagram's birth keys. The value is a sorted list of target births with coefficient one over F2; an empty list denotes zero. A requested map with an empty source is an empty dictionary. For example, a younger vertex included in an edge maps to two codomain features, while both codomain features project to the same cokernel feature:
diagrams = sixpack_from_inclusion(
[[], [], [0, 1]],
[0, 0, 1],
[1],
get_representatives=True,
)
assert diagrams.kernel_to_domain == {}
assert diagrams.domain_to_image == {1: [1]}
assert diagrams.image_to_codomain == {1: [0, 1]}
assert diagrams.domain_to_codomain == {1: [0, 1]}
assert diagrams.codomain_to_cokernel == {0: [0], 1: [0]}
Coefficients use the stored representative bases and identify intervals in
the diagrams, rather than the generator indices in their supports. Every nonzero coefficient satisfies
target_birth <= source_birth < target_death <= source_death, with infinite
deaths allowed. At an index, evaluate a map using only source and target
intervals alive there. Compose these evaluated maps; ordinary multiplication of
complete coefficient tables can retain entries between disjoint intervals.
For sixpack, use metadata.times to evaluate at actual filtration times;
finite intervals with equal birth and death times are omitted from the returned data.
Maps are computed from the complete diagrams, including intervals of zero
duration in actual filtration time. Before returning, sixpack removes these
intervals and their representative entries and restricts all map rows and columns
to the remaining intervals. Interval identifiers and cylinder metadata are not
renumbered. Neither diagrams nor representative dictionaries
need to be supplied separately to a map-computation function.
References
[1] Cohen-Steiner, D., Edelsbrunner, H., Harer, J. and Morozov, D., 2009, January. Persistent homology for kernels, images, and cokernels. In Proceedings of the twentieth annual ACM-SIAM symposium on Discrete algorithms (pp. 1011-1020). Society for Industrial and Applied Mathematics.
API documentation
Install the Python documentation dependencies into the project environment, rebuild the extension, and generate the HTML reference:
uv sync --locked --group test --group docs
uv run --no-sync maturin develop --locked --generate-stubs
uv run --no-sync python docs/build.py
Open docs/_build/html/index.html in a browser. Sphinx reads the installed
extension's docstrings, so rebuild the extension after changing them. The build
script treats warnings as errors. The equivalent Sphinx command is:
uv run --no-sync python -m sphinx -W --keep-going -b html docs docs/_build/html
Run cargo doc --locked --no-default-features --no-deps --open to build and open
the Rust API reference at target/doc/phimaker/index.html. The public
functions document input assumptions and index coordinates, with runnable Rust
examples. Inline /// comments supply Rust documentation, while separate
feature-gated #[doc = python_doc!(...)] attributes supply Python docstrings.
Shared classes retain Rust comments for rustdoc and rust-analyzer; Python builds
strip those comments so only Python usage documentation appears in help().
Use help(phimaker.sixpack_from_inclusion) or help(phimaker.sixpack) after
building/installing the extension for Python examples.
The inclusion API takes boundary columns, degrees, and domain column indices.
It uses filtration indices only. The general-map API sixpack takes timed
complexes and returns mapping-cylinder metadata alongside its diagrams; use
that metadata to interpret the returned indices. Inclusion entry points validate
index ranges, degree-list length, triangularity, degree lowering, and domain
closure, and normalize row supports and domain indices. The boundary must square
to zero; that algebraic condition remains a caller precondition.
Rust sixpack_from_inclusion and sixpack borrow their inputs and return
Result<_, InclusionError>. The decomposition entry points return the same
structured errors. Python exports retain the names sixpack_from_inclusion and
sixpack; their wrappers release the GIL during computation and convert
structural errors to ValueError. Upstream reduction and serialization panics
are not converted to these validation errors.
Boundary supports and domain indices can be in any order, and repeated indices
are treated as repeated listings of the same element, not summed modulo two.
The Rust library is built as an rlib alongside the Python extension.
For reduced matrices, use all_decompositions or all_decompositions_slow.
Their codomain result d_cod retains both R and V in original input generator
coordinates. For a finite codomain feature (birth, death), R column death
gives its representative cycle; for an essential feature, use V column birth.
Both diagram extraction modes read codomain pairs directly in these coordinates.
The relative result d_rel retains R and V in local quotient coordinates.
Translate local index i to original codomain indices with
metadata.dom_first_permutation.inverse_map(i + metadata.sz_domain).
Relative finite features use R death columns and essential features use V birth
columns. Both reductions preserve the generator order without anti-transposition.
Retaining V adds memory use and increases the slow-mode file sizes.
Python convenience functions expose representative maps on the returned
DiagramEnsemble when called with get_representatives=True.
Tests
Run cargo test --locked for the pure Rust suite. For Python, build the current
extension and run pytest as described in tests/README.md.
That document records each fixture's intent, including slow-mode serialization
regressions and executable documentation examples.
The Cargo dependency uses LoPhat version 0.14.0.
Building with python-module also enables lophat/python-module, providing
conversion of diagrams to dictionaries and infinite deaths to None.
CI and releases
Every push, pull request, and manual workflow dispatch runs the Rust tests and
builds and tests Python wheels on native Linux and Windows x64/ARM64 runners and
macOS ARM64. The matrix selects stable CPython versions allowed by
requires-python, including supported free-threaded variants where available.
Each wheel includes generated type stubs and is installed before pytest runs.
DiagramEnsemble and CylinderMetadata are importable from phimaker for typed
results.
Publishing a GitHub release runs these checks again and publishes the tested wheels to PyPI and the crate to crates.io. See docs/releasing.md for credentials, platform coverage, and the release procedure.
Metadata
Release files for phimaker 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
Total release size: 15.0 MB
Release files / phimaker-0.5.0-cp315-cp315t-win_arm64.whl
| Download URL | phimaker-0.5.0-cp315-cp315t-win_arm64.whl |
|---|---|
| Size | 387.1 kB |
| Tags | CPython 3.15 CPython 3.15 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
b164bb0e9e49f50f09168ee59523430352cf054fabc547be2d7bf3a6a56091d4
|
|
BLAKE2b-256 checksum How to use checksums |
7e6ac59eeb09cdffa2455f48d180770679254cf017c212f6a32c139ecf40f32e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315t-win_amd64.whl
| Download URL | phimaker-0.5.0-cp315-cp315t-win_amd64.whl |
|---|---|
| Size | 399.6 kB |
| Tags | CPython 3.15 CPython 3.15 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6d85b6faab9a78d2c5b61891d43e498077d02056eebf5e1c6c8ca3e08f60cc28
|
|
BLAKE2b-256 checksum How to use checksums |
de13506eed1c0fded8cde73aaa0cedf9ffbda0fa504c3b5db5748cc6103b1c02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | phimaker-0.5.0-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 593.4 kB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
e1bc7734d6cfa51dd09a332f8a07fbc598e3c8cd4fa73c19812306ca7cc177e2
|
|
BLAKE2b-256 checksum How to use checksums |
cd85fadd6d8f8a75709e0f6ee9b507b6998a451259d1da428a567f29ba679c82
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | phimaker-0.5.0-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 586.4 kB |
| Tags | CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
3e7384817da1361ca5969434e5f707712e155e0533372c7bced45dd62c644fb6
|
|
BLAKE2b-256 checksum How to use checksums |
12cb651022f912198156777d1f3220ebdab6b3f14d2da1fbe5aa86b24a925936
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315t-macosx_11_0_arm64.whl
| Download URL | phimaker-0.5.0-cp315-cp315t-macosx_11_0_arm64.whl |
|---|---|
| Size | 533.6 kB |
| Tags | CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
116739ccdade4b09b65e09a6c0d8d0cfdf7f22e42b72b12bb8d493154dd6a8a0
|
|
BLAKE2b-256 checksum How to use checksums |
767c55f67e43e7691e1c413dd7bf1aa40a0f552bb27565aa9a32dfe400c12db8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315-win_arm64.whl
| Download URL | phimaker-0.5.0-cp315-cp315-win_arm64.whl |
|---|---|
| Size | 388.1 kB |
| Tags | CPython 3.15 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
0dd95b7e30e2f97f8f12f511b2b3bd77587a940115e4a8a38b28e9261ec94889
|
|
BLAKE2b-256 checksum How to use checksums |
2cf452267f6ee6ea11b24d1350563fbe1eef46ac52f7ba0f373e0ecbf0187dfb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315-win_amd64.whl
| Download URL | phimaker-0.5.0-cp315-cp315-win_amd64.whl |
|---|---|
| Size | 403.7 kB |
| Tags | CPython 3.15 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ad604c2a6ade160c2c9121ca19b87f41cd7dee27eb5aa30e8dc10a0fdbe99495
|
|
BLAKE2b-256 checksum How to use checksums |
01568746244050417725ea8da1b0d3861b7340ad21c23b3a2b89708212a0f79a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | phimaker-0.5.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 593.8 kB |
| Tags | CPython 3.15 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
4d02ce563d7058fe54becd7570f7aa7672c4077409ea8604165361a12a1773e3
|
|
BLAKE2b-256 checksum How to use checksums |
f6a1f6749a20a364b744e1f9f2f1d8dec3df16c203660c7e5639c25da1ca50bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | phimaker-0.5.0-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 587.4 kB |
| Tags | CPython 3.15 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
387fccb32a10516345e0531249296efe4cdf59ef529e58c1912b196ef40a9851
|
|
BLAKE2b-256 checksum How to use checksums |
62140922e80c5ec0bf22f758311442381b163d0a6bac8a6449cfd662b9efbf58
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp315-cp315-macosx_11_0_arm64.whl
| Download URL | phimaker-0.5.0-cp315-cp315-macosx_11_0_arm64.whl |
|---|---|
| Size | 535.8 kB |
| Tags | CPython 3.15 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
08188109051f7f1a776065d505708f9c03956a3b9dfd80e59a834c3f776345ee
|
|
BLAKE2b-256 checksum How to use checksums |
9b17db3b0b86d5dfbed940919ce579220cc4ad9b3852b7956bfd5e8905074806
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314t-win_arm64.whl
| Download URL | phimaker-0.5.0-cp314-cp314t-win_arm64.whl |
|---|---|
| Size | 386.8 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows ARM64 |
|
SHA-256 checksum How to use checksums |
03bd7ec37bb6853f5324cc08982403ac56608de995f0a2b037e0e2af755a233d
|
|
BLAKE2b-256 checksum How to use checksums |
d6f8c32ddfe412fc678779cf84cc6b5f4a778603983886cb45ad62c40fde683c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314t-win_amd64.whl
| Download URL | phimaker-0.5.0-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 399.3 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
950b8e6c3e873142de2c59817ec42a3526a615d7b7675f2a778fd6f56b1ca0af
|
|
BLAKE2b-256 checksum How to use checksums |
70a62e07bc638387dd9f12af9e1ecc6e74ae368c8179107c2b5a36b24d19368f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | phimaker-0.5.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 592.1 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
a87e27f89e6820e34ce32d8af8adfef6acb215eed18dad92c4a9c2d83b6645fb
|
|
BLAKE2b-256 checksum How to use checksums |
050b30658da5ed8fc5fb2e1277d544d7683e8c1ac60d2e70bd353cd25fd7899f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | phimaker-0.5.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 587.2 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
24d0c7448a931d7868b2740d69237dcc7c72048cee896fbe9b06e1c0e42a158b
|
|
BLAKE2b-256 checksum How to use checksums |
9c59697f0fad8f99a10dcc73d38d6ca21766c2b31cb31c90e067261f6b942753
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | phimaker-0.5.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 533.6 kB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
5c6d799d217b6f1970e10f70fc5468acc0dbf9d51c84d919cf7eb9fcb6b66bcd
|
|
BLAKE2b-256 checksum How to use checksums |
0ad1719294db9973eaa2df922f43fe65ca616715b8555b44f2d395ea69604c84
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314-win_arm64.whl
| Download URL | phimaker-0.5.0-cp314-cp314-win_arm64.whl |
|---|---|
| Size | 388.1 kB |
| Tags | CPython 3.14 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
082a00544d5629981b7a6fc0f749bf1969cf581b8fbea4547dbae4125688832f
|
|
BLAKE2b-256 checksum How to use checksums |
4026559751726a9c8531d129345bb746f0717118aca7154899963f226eb76ff9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314-win_amd64.whl
| Download URL | phimaker-0.5.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 403.2 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5d4108b14406a5d562f8940476f0a747b7ff05db74e072198d85a122b3a25907
|
|
BLAKE2b-256 checksum How to use checksums |
57f74171baef079e74f59435593abe782e78ca6a0ada9e4fb175c26800435bcf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | phimaker-0.5.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 594.0 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
fa2435a70c1835749ca1916f09f19d0b69b28cdb9943f8e95865b62859655832
|
|
BLAKE2b-256 checksum How to use checksums |
327b93329056cddcb625179c00696d15872597a5bf617bf6c5069c4bee56c706
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | phimaker-0.5.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 589.5 kB |
| Tags | CPython 3.14 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
e7ecc8f139545996a57a1f4fa9bc588a7d9ea9a7d1e87e1ab2562cca7b1b481a
|
|
BLAKE2b-256 checksum How to use checksums |
c1b99f2240655da94b1f67303ad43a67add5d7ae50d136468e95cdf24ddf4e79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | phimaker-0.5.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 536.0 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c5bd826ca411f1a603281f9756bc188ddc95ce234136024780d9fda239e334de
|
|
BLAKE2b-256 checksum How to use checksums |
8efee648eca06dbddaccb2b9fbead2dd3c6af6b8800a16a97cc549f737697078
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp313-cp313-win_arm64.whl
| Download URL | phimaker-0.5.0-cp313-cp313-win_arm64.whl |
|---|---|
| Size | 387.2 kB |
| Tags | CPython 3.13 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
864dcbe7d7ba6078f5bc8b647e644608818d4fc378badf4bc7d450f612a29e38
|
|
BLAKE2b-256 checksum How to use checksums |
5c33eb7c8ce8c50d10c9f5edb5bebf450f8610c46b585d97091a7021c181c692
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp313-cp313-win_amd64.whl
| Download URL | phimaker-0.5.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 401.6 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
699268b8e54ef3177419672708e424eeaac28bd1520d8fae8c647562df61479a
|
|
BLAKE2b-256 checksum How to use checksums |
923dc1023cbac001a5e7d25bdfd122316d9eb536b1d4ded3a9ffa36e7086191b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | phimaker-0.5.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 594.0 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
fb2d0d2d292bdfa419134d84e33b32679e1895c7c74eb0e4eac736291aece61d
|
|
BLAKE2b-256 checksum How to use checksums |
f79e3460f3f5507b06fe7e82a7d6e39ef0496ba88bf11e1411995a0824b37ee7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | phimaker-0.5.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 586.4 kB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
4d0edfe821009805bab0173a09d8c226b9073a9fcd8ae205fa8d355c03c1b499
|
|
BLAKE2b-256 checksum How to use checksums |
d686159ceeef605d89a01502b9c0ceaf5118f9c92e81af9a57ea1fc2148dea79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | phimaker-0.5.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 533.1 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f693e357bf9af99e90c9b9a4272aed6b1944c208c2151291ec8db172e0511eac
|
|
BLAKE2b-256 checksum How to use checksums |
ee436710fc7369aedae626372444c13034c267569d6140e0789102d48a5cd580
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp312-cp312-win_arm64.whl
| Download URL | phimaker-0.5.0-cp312-cp312-win_arm64.whl |
|---|---|
| Size | 388.3 kB |
| Tags | CPython 3.12 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
35ffd2e53c8d8b58228325094a10dd5dace7d9eee936b8bf70cded7861da74c2
|
|
BLAKE2b-256 checksum How to use checksums |
94b15509d9cf378bce1e743767c272fa9c83b658ae1c9f97092f8e8dcc6334df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp312-cp312-win_amd64.whl
| Download URL | phimaker-0.5.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 403.1 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
6a926a2d9f044e87159f461944c1f1a52d628812e0cad895dfb61d9c4aaa75b0
|
|
BLAKE2b-256 checksum How to use checksums |
eedf3f4295b5f1f6e428dc1f0912e39564c7ba052a49c2477e443ff96a3ebf9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | phimaker-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 592.1 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ef83dde5419d542a5250852a0e5e84b04c2035cdbdfe621e1a55c4f627023939
|
|
BLAKE2b-256 checksum How to use checksums |
dacdd87e8b0e0b92cd837d9bd55788f2bb2be2383bbda2453a5b378ccda75006
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | phimaker-0.5.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 586.7 kB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
3a7739e974427c437941a76e7d67082a1abb4b1c6535420f4e6abea31d00f0e6
|
|
BLAKE2b-256 checksum How to use checksums |
1db8670759a78a9beb700754b356c8d6efb4dcb3b90c442da9f12c1dd838f421
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / phimaker-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | phimaker-0.5.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 534.5 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f4a892367ff12670bc2aa2ada5d5fb27098ec1bccae6a4c4624814546c5aa417
|
|
BLAKE2b-256 checksum How to use checksums |
98dcdac92aae925bc40ae99c7f849032bf4517632a9dabdf691bb7b50f8a824d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.2 {"installer":{"name":"uv","version":"0.13.2","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for phimaker 0.5.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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
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.