Skip to main content

Python CLI and API scaffolding for PerfectHash.

Project description

PerfectHash Python

This is the supported Python package for PerfectHash.

The current goal is to build a modern, testable Python package and migrate useful legacy functionality over in small, verifiable slices.

Status

There are currently two distinct Python-facing workflows:

  1. Offline CLI workflow via ph create
  2. Offline CLI workflow via ph bulk-create
  3. In-process programmatic workflow via build_table()

These are intentionally different:

  • ph create maps to the existing offline C creation workflow and is meant to generate offline table artifacts.
  • ph bulk-create maps to the existing offline C bulk-create workflow and is meant to generate offline tables for a directory of key files.
  • build_table() is the in-process native runtime path for code that wants to create and use a table from within Python.

CLI

Show the current CLI surface with:

env -u PYTHONPATH uv run python -m perfecthash --help
env -u PYTHONPATH uv run python -m perfecthash create --help
env -u PYTHONPATH uv run python -m perfecthash bulk-create --help

The current ph create command translates modern Python-style options into the existing PerfectHashCreate contract, then shells out to the C create binary.

Example dry run:

env -u PYTHONPATH uv run python -m perfecthash create \
  keys/example.keys \
  out \
  --hash-function MultiplyShiftR \
  --graph-impl 3 \
  --create-binary /home/trentn/src/perfecthash/build/bin/PerfectHashCreate \
  --dry-run

Current output:

/home/trentn/src/perfecthash/build/bin/PerfectHashCreate keys/example.keys out Chm01 MultiplyShiftR And 0 --GraphImpl=3

Useful control flags:

  • --emit-c-argv prints the abstract translated C argv.
  • --dry-run prints the resolved executable command.
  • --create-binary points explicitly at the offline create binary.

There is also an initial ph bulk-create command with the same execution model for the offline bulk-create workflow.

Discovery now prefers installation-oriented locations first:

  • package-bundled native dirs such as perfecthash/_native/bin and perfecthash/_native/lib
  • explicit install-prefix env vars like PERFECTHASH_PREFIX
  • the active Python / conda prefix (sys.prefix, CONDA_PREFIX)
  • development-tree fallbacks last

For now, you may still need to pass --create-binary or set PERFECTHASH_CREATE_BINARY, but the package no longer assumes a source-tree build first.

Packaging

The current packaging split is:

  • standalone release wheels bundle native assets under perfecthash/_native/
  • conda installs the Python package unbundled and relies on the matching native perfecthash-full package in the same prefix

Python package versions are resolved from the same release/tag inputs as the native build so tagged releases ship matching native and Python versions.

Programmatic API

The current in-process runtime entry point is build_table():

from perfecthash import build_table

with build_table([1, 3, 5, 7, 11, 13, 17, 19], hash_function="MultiplyShiftR") as table:
    print(table.backend)
    print(table.hash_function)
    print(table.key_count)
    print(table.index(13))

Current output from a local verification run:

rawdog_jit
MultiplyShiftR
8
5

This path keeps the hot table implementation native and is the foundation for the future programmatic Python API.

Curated Hash Functions

The currently supported curated set is:

  • MultiplyShiftR
  • MultiplyShiftRX
  • Mulshrolate1RX
  • Mulshrolate2RX
  • Mulshrolate3RX
  • Mulshrolate4RX

These names are preserved exactly as-is in the Python CLI and API.

More Detail

See docs/python-cli-and-api.md for a fuller overview of the current Python package direction.

Development

Install the baseline developer environment with:

env -u PYTHONPATH uv sync

For editable installs with native artifacts from this checkout, use the repo-local install prefix helper:

./scripts/install-python-native-prefix.sh
export PERFECTHASH_PREFIX="$PWD/.perfecthash-prefix"
env -u PYTHONPATH uv sync

This keeps Python editable while making binary/library discovery behave more like a packaged install.

Run the baseline checks with:

env -u PYTHONPATH uv run pytest
env -u PYTHONPATH uv run ruff check python_src python_tests
env -u PYTHONPATH uv run black --check python_src python_tests
env -u PYTHONPATH uv run mypy

Install the git hook with:

env -u PYTHONPATH uv run pre-commit install

The explicit env -u PYTHONPATH is there to avoid inheriting any legacy PerfectHash Python path overrides from an existing shell session.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

tpn_perfecthash-0.74.0-py3-none-win_amd64.whl (619.1 kB view details)

Uploaded Python 3Windows x86-64

tpn_perfecthash-0.74.0-py3-none-manylinux_2_39_x86_64.whl (1.0 MB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

tpn_perfecthash-0.74.0-py3-none-manylinux_2_39_aarch64.whl (964.4 kB view details)

Uploaded Python 3manylinux: glibc 2.39+ ARM64

tpn_perfecthash-0.74.0-py3-none-macosx_15_0_x86_64.whl (827.7 kB view details)

Uploaded Python 3macOS 15.0+ x86-64

tpn_perfecthash-0.74.0-py3-none-macosx_14_0_arm64.whl (800.7 kB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file tpn_perfecthash-0.74.0-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for tpn_perfecthash-0.74.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 26cb71bcd29d1fe91ce884536efef90fee9fa83cf689de726379f48dd6fd41b5
MD5 43caed5510ad2260b5e6c7b75f978285
BLAKE2b-256 3a3a9bc09534882ca1fffe277e809bdd2cbefec6e8baf115b1a74a4fe7633cc2

See more details on using hashes here.

Provenance

The following attestation bundles were made for tpn_perfecthash-0.74.0-py3-none-win_amd64.whl:

Publisher: release.yml on tpn/perfecthash

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tpn_perfecthash-0.74.0-py3-none-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for tpn_perfecthash-0.74.0-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 a04d11276405aef033914e1ca4af4a2142697d487c9baa2fb194b713e94b3b46
MD5 5edefc6dcd7fedd90f6ea54d4e5620b1
BLAKE2b-256 2e28e17fd92fb1e38889a468bc299bee61c07ab4704852332551c483c8a10297

See more details on using hashes here.

Provenance

The following attestation bundles were made for tpn_perfecthash-0.74.0-py3-none-manylinux_2_39_x86_64.whl:

Publisher: release.yml on tpn/perfecthash

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tpn_perfecthash-0.74.0-py3-none-manylinux_2_39_aarch64.whl.

File metadata

File hashes

Hashes for tpn_perfecthash-0.74.0-py3-none-manylinux_2_39_aarch64.whl
Algorithm Hash digest
SHA256 60968535bf32871ad7d593241b998a4868dd2d15b091d1eee589d65dd2ddd27b
MD5 bcb0a4aee2e3da6816254835eba7823c
BLAKE2b-256 9686f61842e8dfbcb6c340a43cdbf2f0d90f5ab59be83279f4df971d83545e1b

See more details on using hashes here.

Provenance

The following attestation bundles were made for tpn_perfecthash-0.74.0-py3-none-manylinux_2_39_aarch64.whl:

Publisher: release.yml on tpn/perfecthash

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tpn_perfecthash-0.74.0-py3-none-macosx_15_0_x86_64.whl.

File metadata

File hashes

Hashes for tpn_perfecthash-0.74.0-py3-none-macosx_15_0_x86_64.whl
Algorithm Hash digest
SHA256 6aaf76008602372ab048c5df287b6e12766534e3826c9e3725ebfa198c72a54f
MD5 e27abec0c3daea84e29f5b85f9e54e7e
BLAKE2b-256 99313fabd2eef0cd1eb7b83fb90b797538cca82917e4b513e11527bf887ddfaf

See more details on using hashes here.

Provenance

The following attestation bundles were made for tpn_perfecthash-0.74.0-py3-none-macosx_15_0_x86_64.whl:

Publisher: release.yml on tpn/perfecthash

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tpn_perfecthash-0.74.0-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for tpn_perfecthash-0.74.0-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c55b8aab202c2d71492285ba30a012a9934c3424264a7826299b96ff3ac44c2d
MD5 a62083b5aa3958c2d0e9f2e4ea85bf70
BLAKE2b-256 b4b3446d73a7b2e89fb5bc9c62c808b250886c19a77c8e174d26f21dc4ea7829

See more details on using hashes here.

Provenance

The following attestation bundles were made for tpn_perfecthash-0.74.0-py3-none-macosx_14_0_arm64.whl:

Publisher: release.yml on tpn/perfecthash

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page