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 extends pydantic.BaseModel with save/load methods and can serialise attributes that pydantic cannot — numpy arrays, tensors, and arbitrary objects are base64-pickled inline, everything else stays plain, human-readable JSON. Long lists are wrapped to the line-length limit instead of one element per line.

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")

Use to_json_dict() / from_json_dict(...) to convert to and from a plain dict without touching the filesystem — useful for nesting inside other structures. The pretty_json helper function is also available on its own. The serialization module also includes JSONL read/write helpers (jsonl_dump, jsonl_load, ...) with largely the same interface as is provided by the built-in json module.

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 z_score
from pelutils.stats import expon

# 95 % confidence interval half-width for a standard normal (defaults give ~1.96)
half_width = std * z_score()

# One-sided z value for an Exponential(λ=2) at the 1 % significance level
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 also be easily export to LaTeX with Table.to_latex().
  • 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 (not 32-bit systems). 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).

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 pelutils/__version__.py and rebase master onto release. Then push a new tag from release named vX.Y.Z.

When new code is merged into master, a number of checks are run. These can be tested locally with the following commands.

# Linting and formatting
ruff format pelutils tests
ruff check pelutils tests
# Type checking
basedpyright pelutils
# Unit tests
python -m pytest tests --cov pelutils
# Build docs
# Once build, open docs/build/html/index.html in your browser to see them
make -C docs html

Download files

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

Source Distribution

pelutils-4.1.0.tar.gz (69.5 kB view details)

Uploaded Source

Built Distributions

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

pelutils-4.1.0-cp314-cp314-win_amd64.whl (75.3 kB view details)

Uploaded CPython 3.14Windows x86-64

pelutils-4.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (107.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pelutils-4.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pelutils-4.1.0-cp314-cp314-macosx_11_0_arm64.whl (77.2 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pelutils-4.1.0-cp313-cp313-win_amd64.whl (75.1 kB view details)

Uploaded CPython 3.13Windows x86-64

pelutils-4.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (107.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pelutils-4.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pelutils-4.1.0-cp313-cp313-macosx_11_0_arm64.whl (77.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pelutils-4.1.0-cp312-cp312-win_amd64.whl (75.1 kB view details)

Uploaded CPython 3.12Windows x86-64

pelutils-4.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (107.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pelutils-4.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pelutils-4.1.0-cp312-cp312-macosx_11_0_arm64.whl (77.2 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pelutils-4.1.0-cp311-cp311-win_amd64.whl (75.1 kB view details)

Uploaded CPython 3.11Windows x86-64

pelutils-4.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (106.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

pelutils-4.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (107.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

pelutils-4.1.0-cp311-cp311-macosx_11_0_arm64.whl (77.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file pelutils-4.1.0.tar.gz.

File metadata

  • Download URL: pelutils-4.1.0.tar.gz
  • Upload date:
  • Size: 69.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pelutils-4.1.0.tar.gz
Algorithm Hash digest
SHA256 ce754f2d7a6ce759b894029256fde40d1ee6c3ac21544ee134babb2c59f2a36f
MD5 259167ce5f7978f02638492c3afe8a5f
BLAKE2b-256 db7119eb1de0c357905b4c81a31e5274d6b1a0452524ae845280828b5d1aeac7

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: pelutils-4.1.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 75.3 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pelutils-4.1.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 f73081648a1f574d6d58df6a07bf7c11119854cdb1b2ef317a480c67ada91f0c
MD5 37b5d2aa057d2c8a9a22d969a204950c
BLAKE2b-256 549e6784129b582972746fe756aadda2e92c0c6fac116c11a0495a885428d63d

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c351254ded2758cbedb7dc69d79e9d6f5047426b76d4b2b0e992c1e3d9cfabfc
MD5 353cb2b1a252c21377dbca2c2f70d75e
BLAKE2b-256 87e9b401ecb24bfa888f5b34216f779229b5ee547c090cffff3ff99597f67eb9

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4fa64614aa8fc4fdc2fa62b7abb6276a4af719eb25f5694130a12fd11ac9578e
MD5 1fb697a5e4b4b0f13108206541ddf890
BLAKE2b-256 a24091991468d84c2c47c7bdd984b25d602e9c82b7ae9b88d0e894b3df9cf3da

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 63899b3768d0ae55d2f7036c1307f1907409596cf32fb55e2d26e90b932061f7
MD5 319481858e2a530d275f98ba4e1eb67d
BLAKE2b-256 575dde6d96294b14e1ddc578331b728abca4eae2017ba75680a1e9adb02b363d

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: pelutils-4.1.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 75.1 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pelutils-4.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 062fa54ca5a348d2e0b40aaf03050c7b3f315c23a55542669286247efe891ab0
MD5 23c002f3a49775e6434bcee92b339cfa
BLAKE2b-256 353e6d05a4b247e5d1b70076347f4510290712b80e69e7a3576083310b5a86dc

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f76ff51c3a3c2abbf9478534cdeed35b84d5e85f4913b27b5348ef6b50c75d8b
MD5 3367d67903fb84b71dbcb4e926253c02
BLAKE2b-256 13e2a1fffb309110540dbdf5f4908e466be3ce4fe0d4908f5249410cf9cf704e

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 956d62d21f278d145a5cc769194ce542c2d7f7a112ee5b8e3f896119a6f69418
MD5 68ad8bd3d65697c83ebd3e24288da8db
BLAKE2b-256 9ba4e83c0933ae048908d1c3d8df13bce4277259375713e36f0ef436249d251a

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f03ec3b72b5faf417e598a8989781c2950cf7cf2334eaca39ddc0bea517ba19c
MD5 b3294f2c9fb2cbcc0cf55bb96921efe1
BLAKE2b-256 3833901a45bef5f405d3255c89efbf900be92a2f9dac35b23b6452f5effaa91e

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: pelutils-4.1.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 75.1 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pelutils-4.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c71c2b38e94e51b417c2e0c844f46ddcfa375b34920e1d604ab9336c7d621175
MD5 c28af04780e741d96fc6a52fb740ef26
BLAKE2b-256 c5f385f98d29003a5f7590f1c52e6d5c54c423394ba8b685fcc521fbc93d93d6

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ef07ae43acbcc044100a6d73e3503a52071d86eaf48e0706c2d86526d21056c2
MD5 9a880c72c6caf480288a14ab72229cc6
BLAKE2b-256 917797951d27af4ea215e51a7c66f627b5aa49269d58f17874dc6dfcaa38f9a6

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 b5d78b0fdccb13d441b6beae075f9667d95f685ba0295644b9274be60fe19393
MD5 e3db27b5eb3b95e22799ee04defd265a
BLAKE2b-256 caced367715e8c4967550debfef6378c66214d31784754d4869ba4f8b82ca197

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c4b9b72fd4bb68c33a1a867b5a31c5ee166f84e52df746c8fa2d5e0e05764129
MD5 1aa1f0e1f0770dd7cf5edf2e92f01f3d
BLAKE2b-256 4ef89da74417585dcd30436cb357132447de839fa3e0fbb99ded54f7e25d016d

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: pelutils-4.1.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 75.1 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for pelutils-4.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 623323a731ac950b56711521cb890e00771c65f3fed757e4b4ae65ea795223d9
MD5 0a52546ab3ff65ad49467c88c20eff49
BLAKE2b-256 50cd27ea9485809266bd9167392604d74e9cd7d209ca224b71ae9c6a9569370e

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 9c571d095058cc1b70d8431edefb92587a560186930ce597f6bd695540186ec5
MD5 ceb3e15816e40974b6982f979ece8b55
BLAKE2b-256 f2883385e0990ffb00ea857606368b499c3336eeeae0da8ac1574c12ce360c80

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 41b5cb5d2dabebc4395f8aeb4dae84f2848e41c577267eee0af08deb4da13db2
MD5 56d9606a4d6c081b02a948b4b0cfe88b
BLAKE2b-256 cd7412aab66c440178af137ba00544e3874d94d407c05cd5cbe6c00f4a256f1a

See more details on using hashes here.

File details

Details for the file pelutils-4.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pelutils-4.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d19fcf95c7fed44a4adfc12a8c2130f26e90ea955fd7105a29e861f56df64223
MD5 54fef44850f97e973af63a26c3f58fba
BLAKE2b-256 dc839f6bad3c145588cdae155150bd093e323aec6bc99170e6d75e47db6ecb93

See more details on using hashes here.

Release history Release notifications | RSS feed

4.3.0

36 files

4.2.1

36 files

4.2.0

17 files

This release

4.1.0 This release

17 files

4.0.0

17 files

3.9.0

25 files

3.8.5

25 files

3.8.4

25 files

3.8.3

25 files

3.8.2

25 files

3.8.1

25 files

3.8.0

25 files

3.7.0

25 files

3.6.2

25 files

3.6.1

25 files

3.6.0

25 files

3.5.0

1 file

3.4.1

1 file

3.3.0

1 file

3.2.0

17 files

3.1.0

17 files

3.0.1

17 files

3.0.0

17 files

2.0.0

17 files

1.1.0

17 files

1.0.0

13 files

0.99.0

13 files

0.6.9

2 files

0.6.7

2 files

0.6.6

2 files

0.6.5

2 files

0.6.4

2 files

0.6.3

2 files

0.6.2

2 files

0.6.1

2 files

0.6.0

2 files

0.5.9

2 files

0.5.7

2 files

0.5.6

2 files

0.5.5

2 files

0.5.4

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.5

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.13

2 files

0.2.12

2 files

0.2.11

2 files

0.2.10

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.2

1 file

0.1.1

2 files

0.1.0

2 files

0.0.1.post1

2 files

0.0.1

2 files

Supported by

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