Skip to main content

pelutils

Ruff basedpyright checks Coverage Status PyPi Python versions image readthedocs

The Swiss army knife of Python projects

Every project, experiment, or one-off script inevitably ends up reinventing much of the same plumbing: some way to time a loop, saving and loading data to and from disk in a convenient and human-readable manner, a decent logger, parsing a config file, a readable table. pelutils bundles the good versions of these so you can get straight to the actual work. It has no required dependencies beyond the scientific-Python staples, ships type hints (including py.typed), and is easy to start using.

📖 Full documentation: pelutils.readthedocs.io

Highlights

  • Logger — easy-to-use, colourful console output, log files with rotation, automatic stacktrace capture, and safe logging from multiple processes.
  • Timer & profiler — a Matlab-style tick/tock timer and a near-zero-overhead profiler that prints a readable breakdown of where your time goes.
  • UniversalJsonModel — a pydantic.BaseModel that can save any attribute to a human-readable JSON file (numpy arrays, tensors, and other unserialisable types are pickled transparently) and load it straight back.
  • JobParser — one parser that unifies command-line arguments and config files, with support for running many jobs from a single config and auto-documenting them.
  • unique — a linear-time drop-in for numpy.unique, dramatically faster on large arrays (backed by a small C extension).
  • Data-science helpers — a matplotlib Figure context manager with improved default settings over matplotlib, histogram binning, reparametrised scipy distributions, z_score, LaTeX-ready tables, and numpy type aliases.

Installation

pip install pelutils

pelutils supports Python 3.11+. A small subset of functionality can additionally make use of PyTorch, which must be installed separately.

Importing: every feature lives in its own submodule and must be imported from there — e.g. from pelutils.logging import log. Only __version__ is exported at the top level. See the docs for the full API.

Logging

Python's built-in logging is powerful but fiddly to set up, and a bare print gives you no importance levels, no timestamps, and nothing on disk to look at afterwards. This logger hits the sweet spot: one configure call and you get colour-coded, timestamped output to both the console and a log file, with severity levels, log rotation, one-line exception logging, and multiprocessing-safe collection.

from pelutils.logging import log, LogLevels

# Set up the logger by giving it the file to write to
# Omit the path to only print, never write a file
log.configure("train.log")

# If an exeption occurs anywhere in the code inside `log.log_errors`, it is logged with its full, chained stacktrace, then re-raised
with log.log_errors:
    log.section("Training run")  # Highlighted section header
    log(f"Loaded {len(dataset):,} samples")  # Logs at INFO level
    for epoch in range(epochs):
        loss = train_one_epoch()
        log.debug(f"Epoch {epoch}: loss {loss:.4f}")  # Logs at DEBUG level - by default, only saved to the log file, but not printed to the console
        if loss > 1e3:
            log.warning("Loss is diverging")  # Logs at WARNING level
    log.debug("Final weights", model.state_dict().keys())

    save_checkpoint(model)

# Temporarily change or silence the log level
with log.level(LogLevels.ERROR):
    log.warning("Suppressed")

# Rotate the log file by time or size
log.configure("train.log", rotation="day")    # or "1 GB", "hour", ...

When using multiprocessing, wrap a worker in with log.collect(): so its lines are written together instead of interleaving with other processes. See the logging docs for input helpers, multiple loggers, and more.

Timing and profiling

When you want to know where a script spends its time, cProfile gives you a wall of function-level numbers, and manual time.perf_counter() calls quickly turn into bookkeeping. TickTock sits in between: wrap the sections you care about in named, nestable context managers and print a readable table of totals, hit counts, averages, and each section's share of its parent's time. The per-profile overhead is tiny, so it happily lives inside hot loops and long-running jobs.

from pelutils.ticktock import TT

# Time a single block, Matlab style
TT.tick()
model = train_model(data)
print(f"Training took {TT.tock():.1f} s")

# Profile named sections across a loop, nesting them however you like
for image in images:
    with TT.profile("Process image"):
        with TT.profile("Load"):
            img = load(image)
        with TT.profile("Resize"):
            img = resize(img, (224, 224))
        with TT.profile("Inference"):
            predict(model, img)

# Profile loop-body work element by element without manual context managers
for image in TT.profile_loop("Process image", images):
    process(image)

# Or profile the time spent fetching elements from a lazy iterator
for batch in TT.profile_next("Load batch", iter(dataloader)):
    train_on(batch)

# Print a table of hits, total time, and average time for each section
print(TT)

with TT.profile("name", hits=n): records n hits at once, which is handy for very tight loops or for a block that processes n items in parallel. TT.do_at_interval(...) turns the same instance into a throttle for periodic tasks. The default TT is a shared instance; construct your own with TickTock() when you need isolation — most importantly one per thread, as profiling is not thread-safe.

Serialisation

UniversalJsonModel is for storing Pydantic models that contain a mixture of ordinary JSON values and Python-specific values. Ordinary values remain JSON, so the file structure can be inspected and diffed. Values that JSON cannot represent, such as NumPy arrays, tensors, and other Python objects, are stored as base64-encoded pickle payloads.

The save() and load() methods support convient file-based workflows. save() serialises the model to a JSON file, while load() reconstructs the model from one. Use to_json_dict() and from_json_dict(...) when the serialized representation belongs inside another structure or is handled by another storage layer.

import numpy as np
from pydantic import BaseModel
from pelutils.serialization import UniversalJsonModel
from pelutils.types import FloatArray

class Nested(BaseModel):
    label: str

class Result(UniversalJsonModel):
    accuracy: float
    predictions: FloatArray   # numpy arrays are handled automatically
    meta: Nested

result = Result(
    accuracy=0.97,
    predictions=np.arange(5, dtype=np.float16),
    meta=Nested(label="run-1"),
)

result.save("results/run-1.json")
result = Result.load("results/run-1.json")

pretty_json is a string-returning formatter for standalone dictionaries and lists. It fills the same role as json.dumps, with compact nested containers and wrapped primitive lists; write the returned string to a file when needed. The module also includes JSONL read/write helpers (jsonl_dump, jsonl_load, ...) for newline-delimited records.

This format is intended for trusted configuration objects, application state, experiment results, etc., not as a language-neutral interchange format. Pickle payloads are Python-specific and loading them can execute arbitrary code. Do not load files from untrusted sources.

Config and command-line argument parsing

JobParser combines typed command-line options with INI config files. CLI values override config values, which override defaults. Declare RequiredArg for values every job must provide, OptionalArg for values with defaults, and Flag for booleans. Names are --kebab-case on the command line and snake_case attributes on the resulting job.

from pathlib import Path
from pelutils.job_parser import Flag, JobParser, OptionalArg, RequiredArg

parser = JobParser(
    RequiredArg("data-path", help="Training data directory"),
    OptionalArg("learning-rate", default=1e-4, type=float, help="Optimizer learning rate"),
    Flag("fp16", help="Use mixed precision"),
    multiple_jobs=True,
)

for job in parser.parse_jobs():
    print(job.name, job.data_path, job.learning_rate, job.fp16)
    job.write_documentation(Path("runs") / job.name / "arguments.ini")
    # ... run your application with the resolved job values

A single config file can define several named jobs (with a shared [DEFAULT] section), and one CLI override applies to all of them:

python main.py --config-file config.ini --learning-rate 5e-5

For a single job, drop multiple_jobs=True and call parse_job() instead. A config path can target one section directly, e.g. --config-file config.ini:low-lr. See the job parser docs for auto-documentation details.

Fast unique

A linear-time alternative to numpy.unique, significantly faster on large arrays. Unlike with np.unique, the returned elements are unsorted.

import numpy as np
from pelutils.array import unique

x = np.random.randint(0, 100, size=10_000_000)
values = unique(x)
values, index, inverse, counts = unique(
    x, return_index=True, return_inverse=True, return_counts=True,
)

Data science

Statistics

Common statistical helpers, plus wrappers around SciPy distributions reparametrised as in Jim Pitman's Probability (rather than SciPy's loc/scale, which are unintuitive for many distributions).

from pelutils.stats import expon
from pelutils.stats import z_score

# 95 % confidence interval half-width for a standard normal
half_width = z_score()  # standard deviation is 1

# Upper 1 % critical value for an Exponential(lambda=2)
zval = z_score(alpha=0.01, two_sided=False, distribution=expon(lambda_=2))

Plotting

The Figure context manager fixes common matplotlib annoyances — sensible default figure and font sizes, easy styling — and saves and closes the figure for you while restoring rcParams afterwards.

import matplotlib.pyplot as plt
from pelutils.plots import Figure, histogram, normal_binning

with Figure("plot.png", figsize=(20, 10), fontsize=20):
    plt.scatter(x, y, label="Data")
    plt.grid()
    plt.title("Very nice plot")
# Saved to plot.png and closed here

# histogram returns x and y coordinates ready for unpacking
plt.plot(*histogram(data, binning_fn=normal_binning))

Three binning functions are provided — linear_binning, log_binning, and normal_binning (more resolution near the centre of roughly-normal data) — and custom binning functions are supported. See the plotting docs.

Numpy type aliases

Type aliases so you (and your type checker) do not have to track array dtypes by hand.

from pelutils.types import FloatArray, IntArray, BoolArray

def process(features: FloatArray, labels: IntArray, mask: BoolArray): ...

Also included

  • pelutils.misc.Table — build aligned text tables which can be exported to LaTeX with Table.to_latex() or Markdown with Table.to_markdown().
  • pelutils.misc.hardware_info / OS — describe the machine the code runs on.
  • pelutils.misc.git_repo_info — the repo and commit the code is executing in.
  • Assorted file and dict helpers (reverse_line_iterator, except_keys, ...).
  • pelutils.tests — pytest helpers: a UnitTestCollection base class with a managed temp directory, and a restore_argv decorator.

Supported platforms

Precompiled wheels are provided for most common platforms. If no wheel matches, pip builds from source which requires <Python.h> — install it with sudo apt install python3-dev (Ubuntu) or sudo dnf install python3-devel (Fedora).

32-bit systems are not fully supported. Most of the library is Python-only and should work but using any C-dependent code (namely unique and SparseGridBlobDetection) is likely to end in a segfault.

Development

Use uv for dependency management, builds, and running development tools. Install uv, then from the repository root sync the development environment (a C compiler and Python headers are required to build the native extension):

uv sync --python 3.11 --group dev

The dev dependency group includes CPU-only PyTorch and documentation tools.

Run checks and tools through uv run:

# Linting and formatting
uv run --python 3.11 ruff format pelutils tests
uv run --python 3.11 ruff check pelutils tests
# Type checking
uv run --python 3.11 basedpyright pelutils
# Unit tests
uv run --python 3.11 pytest tests --cov pelutils
# Build docs
uv run --python 3.11 make -C docs html
# Preview at docs/build/html/index.html

After changing C sources, rebuild the extension with uv sync --python 3.11 --group dev --reinstall-package pelutils.

The wheel-build CI tests each built wheel in a cibuildwheel environment provisioned from the locked dev group with uv; pytest runs against the installed wheel. Read the Docs also syncs that group through uv.

Updating and releasing

pelutils uses the master branch as a stable development branch. The release branch contains the latest version on PyPI. New features should be made in feature branches from master that can be merged into master once ready. When a new release is ready, update pyproject.toml and rebase master onto release. Then push a new tag from release named vX.Y.Z.

When new code is merged into master, the checks listed above are run. To build distribution artifacts locally, use uv build --python 3.11.

Metadata

Release files for pelutils 4.5.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 pelutils 4.5.0
File Size Uploaded
pelutils-4.5.0.tar.gz 75.8 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pelutils 4.5.0
File
pelutils-4.5.0-cp315-cp315t-win_arm64.whl CPython 3.15 CPython 3.15 free-threading Windows ARM64 Details
pelutils-4.5.0-cp315-cp315t-win_amd64.whl CPython 3.15 CPython 3.15 free-threading Windows x86-64 Details
pelutils-4.5.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
pelutils-4.5.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
pelutils-4.5.0-cp315-cp315t-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64 Details
pelutils-4.5.0-cp315-cp315-win_arm64.whl CPython 3.15 CPython 3.15 Windows ARM64 Details
pelutils-4.5.0-cp315-cp315-win_amd64.whl CPython 3.15 CPython 3.15 Windows x86-64 Details
pelutils-4.5.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.15 CPython 3.15 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
pelutils-4.5.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.15 CPython 3.15 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
pelutils-4.5.0-cp315-cp315-macosx_11_0_arm64.whl CPython 3.15 CPython 3.15 macOS 11.0+ ARM64 Details
pelutils-4.5.0-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details
pelutils-4.5.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
pelutils-4.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pelutils-4.5.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 Details
pelutils-4.5.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
pelutils-4.5.0-cp314-cp314-win_arm64.whl CPython 3.14 CPython 3.14 Windows ARM64 Details
pelutils-4.5.0-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
pelutils-4.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details
pelutils-4.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 Details
pelutils-4.5.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
pelutils-4.5.0-cp313-cp313-win_arm64.whl CPython 3.13 CPython 3.13 Windows ARM64 Details
pelutils-4.5.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
pelutils-4.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pelutils-4.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 Details
pelutils-4.5.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
pelutils-4.5.0-cp312-cp312-win_arm64.whl CPython 3.12 CPython 3.12 Windows ARM64 Details
pelutils-4.5.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
pelutils-4.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pelutils-4.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.17+ ARM64 Details
pelutils-4.5.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
pelutils-4.5.0-cp311-cp311-win_arm64.whl CPython 3.11 CPython 3.11 Windows ARM64 Details
pelutils-4.5.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
pelutils-4.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details
pelutils-4.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details
pelutils-4.5.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details

Total release size: 3.9 MB

Release files / pelutils-4.5.0.tar.gz

Download URL pelutils-4.5.0.tar.gz
Size 75.8 kB
Tags Source
SHA-256 checksum
How to use checksums
689e2d93b6dd7a2ce53bf20bf8bc7b95e693031debf341983003abca32db0679
BLAKE2b-256 checksum
How to use checksums
7225b4af6aea46823427013c2bf3ca79d3a7709f6732af2552417330c39033f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315t-win_arm64.whl

Download URL pelutils-4.5.0-cp315-cp315t-win_arm64.whl
Size 94.9 kB
Tags CPython 3.15 CPython 3.15 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
40a20a958723669cf67d6622269f2f9bdc66b767a0d17c42cdec0ad2a7e677b7
BLAKE2b-256 checksum
How to use checksums
ff4ae9e047ed3320597b0e2642b02c2ea0b21902e76a941370b9507a956579ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315t-win_amd64.whl

Download URL pelutils-4.5.0-cp315-cp315t-win_amd64.whl
Size 95.3 kB
Tags CPython 3.15 CPython 3.15 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
5ec32e0da9f5ada5bdc21074cacff3e6e83b506db55929e9401d53f5b4462f19
BLAKE2b-256 checksum
How to use checksums
c2841739701e8089a9c0ea7b9495ed0c94db994716c612d6edc64f6c1c1e527a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pelutils-4.5.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 129.0 kB
Tags CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
2690092aa58a032d78c5f1c60ce533fd14fc8d4778b911ddd8ba7927a4839872
BLAKE2b-256 checksum
How to use checksums
29f654ee3b3055cd496e8a5e94a07b10444c520618e56ac8690e2aad02a51ee0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL pelutils-4.5.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 130.3 kB
Tags CPython 3.15 CPython 3.15 free-threading Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
237bda12f8ade61a0fef1fbce60e8642b96d5cd43df7575315137b2a1a33ffe6
BLAKE2b-256 checksum
How to use checksums
80975c20c7e5912b799a7a173d40d83466a45994a45f1c9385c70a685e825762
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315t-macosx_11_0_arm64.whl

Download URL pelutils-4.5.0-cp315-cp315t-macosx_11_0_arm64.whl
Size 97.6 kB
Tags CPython 3.15 CPython 3.15 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1a4d04c8117c8b2853302f0f03ef40c4dad5f2b784df37a97f44454dad018c12
BLAKE2b-256 checksum
How to use checksums
a17bcb73b1c27e4d00e68c7adfc101753c5d8cb4ef1b367646d329ade3ab997c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315-win_arm64.whl

Download URL pelutils-4.5.0-cp315-cp315-win_arm64.whl
Size 94.7 kB
Tags CPython 3.15 Windows ARM64
SHA-256 checksum
How to use checksums
83cdcce40197b9503b4f6fa372afefa5f778ed8d880f7c4b0f7a316b05dfe5ad
BLAKE2b-256 checksum
How to use checksums
2ecd05ba318c67d212cb661e3d62bcb2bb05c106186eeac8927583606a9c6e8f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315-win_amd64.whl

Download URL pelutils-4.5.0-cp315-cp315-win_amd64.whl
Size 95.2 kB
Tags CPython 3.15 Windows x86-64
SHA-256 checksum
How to use checksums
c7195691f0a3d678b49095aa10c9f384d417b95dc59a5a0b946c988896d94047
BLAKE2b-256 checksum
How to use checksums
4ea45e512ba883d126e154fee2b3f60fc79e48ef038cecedb9d50d838bc9adfc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pelutils-4.5.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 128.2 kB
Tags CPython 3.15 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
db41ff7fcbbebf4eb54f2ed43839a73437305d8dc2b6e22f9c6d8bb297255881
BLAKE2b-256 checksum
How to use checksums
7d99869f5d32e8217fc3af69cb05fb347eb662e88df20129074b2cd1b5d04e53
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL pelutils-4.5.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 129.5 kB
Tags CPython 3.15 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
196b48237271f583ea033792ef4a29da03a395687d8c6ae0c5adce11f383f1fd
BLAKE2b-256 checksum
How to use checksums
954945bd8768ac133e5c22a8ef75fd8d91d5a4c3e2078afaa5ae6f26d9eb9f43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp315-cp315-macosx_11_0_arm64.whl

Download URL pelutils-4.5.0-cp315-cp315-macosx_11_0_arm64.whl
Size 97.5 kB
Tags CPython 3.15 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
5b5a346d38b4e322af3bbc6008883730c0aa61ee212a17a89b3ea671b87f894b
BLAKE2b-256 checksum
How to use checksums
dd1751c2620fe2393bd53384290cd6491bf45d6ce684a34ba80088d5ce68bbd9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314t-win_arm64.whl

Download URL pelutils-4.5.0-cp314-cp314t-win_arm64.whl
Size 94.9 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
ed58bd18a723e468c7805b4d41ffb1eb9b0c751fedaa0e21cd5eda81679680a9
BLAKE2b-256 checksum
How to use checksums
1967ab4aa79da2ef7ea8d2462f84efd6eb2092aad8726259fda0c74157c054ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314t-win_amd64.whl

Download URL pelutils-4.5.0-cp314-cp314t-win_amd64.whl
Size 95.3 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
2facea301eb1a45ae84ea99f1cf7fd76d6a8eac3f7bd7fff6646f27fb88620ea
BLAKE2b-256 checksum
How to use checksums
156455f7e2bd38c415886b1d2655fd135ffa76c6148d2549a6c187bc4ec2c678
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pelutils-4.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 128.6 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
92bf6fead0076359602987ef46a050062b7cf2b90a107865cee2ee543fad8b40
BLAKE2b-256 checksum
How to use checksums
3ae29985a56bcecb66eba10b9989da245348981f5bb7f86f1fa63d2a11ce736c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL pelutils-4.5.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 129.8 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a46b67fe03566fdd6a9108f8eb1e98bfa3b9a13465f8220f7ff2dae08105b089
BLAKE2b-256 checksum
How to use checksums
668ceab600cf4b34fa0e4ebd2e0e1133ed198b2f89520cdac04eb5f1b64b04d2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL pelutils-4.5.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 97.5 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d42a3c68bc1ff24d3ea77b80efcf71f2d4ce13ea7ddf42a906d90f909b7f2966
BLAKE2b-256 checksum
How to use checksums
986d8344a4c8605cfa4f923ccae68c9b12bd2f10e239b5cacda6419724ce8ea7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314-win_arm64.whl

Download URL pelutils-4.5.0-cp314-cp314-win_arm64.whl
Size 94.7 kB
Tags CPython 3.14 Windows ARM64
SHA-256 checksum
How to use checksums
0016eca4eba3db670a06c01215b8ae6e4e915c443368eee3921f1ba59fb1d50e
BLAKE2b-256 checksum
How to use checksums
0ad90f33739cbb01f134ffee0430b4baaf1a1f38160b302aa1ee9d8e1a49d27c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314-win_amd64.whl

Download URL pelutils-4.5.0-cp314-cp314-win_amd64.whl
Size 95.2 kB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
43e6f342bbbdb86e0575726f056466ff9043326864f9d977cfba9e53e07239d0
BLAKE2b-256 checksum
How to use checksums
ea71040f78704f9b20c851e73a81036a68c3e28ec1046cb918a3ee28399e2e72
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pelutils-4.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 127.8 kB
Tags CPython 3.14 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
6953505389c30fcbc68ad744738903416b3bbf0bac5af7c217233cbf01916479
BLAKE2b-256 checksum
How to use checksums
c7c60903382ea0a61ecd85cf80748dee914d25987147724e6231e2d029f95115
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL pelutils-4.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 129.0 kB
Tags CPython 3.14 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
4c18fb9b45a0fc4b073be2250a67e471a1fa4be5e44286959442382dda6c67d4
BLAKE2b-256 checksum
How to use checksums
3ae558431e2b3097ca118e9334ddeccc197f474271f902e4f128baffde2a44d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL pelutils-4.5.0-cp314-cp314-macosx_11_0_arm64.whl
Size 97.4 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
625698d345d727e042262e229d9f48fa2136e6067680aa508348794383cc456b
BLAKE2b-256 checksum
How to use checksums
e1e13ded5d338de971328822dc25a706c7175cef35b1ff57bdbd9785b98fef6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp313-cp313-win_arm64.whl

Download URL pelutils-4.5.0-cp313-cp313-win_arm64.whl
Size 94.4 kB
Tags CPython 3.13 Windows ARM64
SHA-256 checksum
How to use checksums
a8785740777cc13013ef94b7c16f406c645a4742d991fc240faaa83c0c6fb2d2
BLAKE2b-256 checksum
How to use checksums
364d68148bc252619f5bf85f82ff5a3aaacb4d7879f4462034099ebc73e068d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp313-cp313-win_amd64.whl

Download URL pelutils-4.5.0-cp313-cp313-win_amd64.whl
Size 94.9 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
4b37d888798c6012a74337bedce0360725f3f6e7ff808effec41167e6210748c
BLAKE2b-256 checksum
How to use checksums
ab465f711b51ded0ecacfb7a5fbfdc4d312093c0541fc5f40a8566df99670e87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pelutils-4.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 127.4 kB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3ba102f2d5ab372c38950b3fc1d8c29b58d2947a74f0ef3dc7f014f955267371
BLAKE2b-256 checksum
How to use checksums
1008a0afcdd83f99800cdbddad9aea6c4bb9703fe78f255a0c4502626412ff11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL pelutils-4.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 128.7 kB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
9303b307aefb5c45fc13dd8d9d86d2e57eec6c4875e1d2f03d88b4364d05bb3a
BLAKE2b-256 checksum
How to use checksums
6d57ee258acf7df0b5af89e417711057a48a83eaab96d1984c21ab698608ed4d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL pelutils-4.5.0-cp313-cp313-macosx_11_0_arm64.whl
Size 97.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0afc64e4c50349be36f973e5cdb6a427171630ee3dfcd5ef4a1b24f650c29c8d
BLAKE2b-256 checksum
How to use checksums
1c23e3c144a477fa65b0ca589c1dfea11f16c869921612f375c0a61da7914778
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp312-cp312-win_arm64.whl

Download URL pelutils-4.5.0-cp312-cp312-win_arm64.whl
Size 94.4 kB
Tags CPython 3.12 Windows ARM64
SHA-256 checksum
How to use checksums
7cf042e7c217453da2938a8263448de9401e3b9c02825bc8e572fc51376e6e3f
BLAKE2b-256 checksum
How to use checksums
8d57ac89c8af9799cb3a941ac1598bb736778b74bac7be49b6588184dfa37d5c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp312-cp312-win_amd64.whl

Download URL pelutils-4.5.0-cp312-cp312-win_amd64.whl
Size 94.9 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
ab17dec1f4dd16f7124e34a17cea5ebfc719139e344c0515b19f8d35136875ac
BLAKE2b-256 checksum
How to use checksums
76aa13940d2315e09fa2e45b06238ab08d32828459bb6a56eecfe7957bfb816e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pelutils-4.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 127.4 kB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
e40db7f8d3d779243de5e8e6d8d10a32ccd648f2601e1a0c62dce6f9b1d10365
BLAKE2b-256 checksum
How to use checksums
6bc53ac7a4fb93ca3a0fedf5a6da708def205f8a65fbf85a650d5475b952dc0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL pelutils-4.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 128.6 kB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
9dfa294c9f6a0face1676ef373a42a3484d1f2d2b619ab93fe1b9af095ea39ae
BLAKE2b-256 checksum
How to use checksums
a3fd5d307d889235e29db86739c78b5a27c5c989c21d7e216a8e9976c4e23c74
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL pelutils-4.5.0-cp312-cp312-macosx_11_0_arm64.whl
Size 97.4 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
b31c084959f1f5085be612d3de9bffa0480a0aab6e824a7d20318dc0dea25da0
BLAKE2b-256 checksum
How to use checksums
583a0917fa3f5d850026ede96cf281363fc528c71788dcf53153bce111949955
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp311-cp311-win_arm64.whl

Download URL pelutils-4.5.0-cp311-cp311-win_arm64.whl
Size 94.4 kB
Tags CPython 3.11 Windows ARM64
SHA-256 checksum
How to use checksums
85872a548a61f42270fd5004c514ea496d4cb408022160bcefbd44303b69bddb
BLAKE2b-256 checksum
How to use checksums
a701e8ff8748644bb13e1d58aaffadc598d71ebb8d308babd13531b93cfdba31
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp311-cp311-win_amd64.whl

Download URL pelutils-4.5.0-cp311-cp311-win_amd64.whl
Size 94.9 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
ff1d6112f69a55a8704c3ee46679f30c3c070ecedf21ea0a80c53f77620579d9
BLAKE2b-256 checksum
How to use checksums
8d617cc8a7cb198fdb7cc092f3856458562d5bee55935b82707c66e665cfa619
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL pelutils-4.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 126.9 kB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
d20f986949a07e98c2348f87952a4b29d74da066db072e810bd055ad0256aeaf
BLAKE2b-256 checksum
How to use checksums
b1c18af6b050c07e5ae8bc06a5bdd286e918a64d31286b23f368d0dcec6f7091
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL pelutils-4.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 128.2 kB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
a4261f091aad900fbe2956b1d632f411d10e4b46dfe27722f1a5b546329c71d3
BLAKE2b-256 checksum
How to use checksums
f23ecd7624b894cc3e2de27e15b7e3780518b8b7465410558d103388c15eccc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pelutils-4.5.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL pelutils-4.5.0-cp311-cp311-macosx_11_0_arm64.whl
Size 97.4 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
bcc2bee53c9f444d04b03358a8a7af869848f35ea6283266c9dd443a4a44a3d2
BLAKE2b-256 checksum
How to use checksums
482ea1c3ad670211a3b37f71ce4e720334322a01448308c86f9412f7aefe85f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

4.5.0 This release

36 release files

4.4.0

36 release files

4.3.1

36 release files

4.3.0

36 release files

4.2.1

36 release files

4.2.0

17 release files

4.0.0

17 release files

3.8.4

25 release files

3.8.3

25 release files

3.8.2

25 release files

3.6.2

25 release files

3.6.1

25 release files

3.6.0

25 release files

3.5.0

1 release file

3.4.1

1 release file

3.3.0

1 release file

3.1.0

17 release files

3.0.0

17 release files

2.0.0

17 release files

1.1.0

17 release files

1.0.0

13 release files

0.6.9

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.9

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.13

2 release files

0.2.12

2 release files

0.2.11

2 release files

0.2.10

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

1 release file

0.1.1

2 release files

0.1.0

2 release files

0.0.1

2 release files

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