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.2.0.tar.gz (69.9 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.2.0-cp314-cp314-win_amd64.whl (75.8 kB view details)

Uploaded CPython 3.14Windows x86-64

pelutils-4.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (108.0 kB view details)

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

pelutils-4.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (109.2 kB view details)

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

pelutils-4.2.0-cp314-cp314-macosx_11_0_arm64.whl (77.6 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

pelutils-4.2.0-cp313-cp313-win_amd64.whl (75.6 kB view details)

Uploaded CPython 3.13Windows x86-64

pelutils-4.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (107.6 kB view details)

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

pelutils-4.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.8 kB view details)

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

pelutils-4.2.0-cp313-cp313-macosx_11_0_arm64.whl (77.6 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

pelutils-4.2.0-cp312-cp312-win_amd64.whl (75.6 kB view details)

Uploaded CPython 3.12Windows x86-64

pelutils-4.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (107.6 kB view details)

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

pelutils-4.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.8 kB view details)

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

pelutils-4.2.0-cp312-cp312-macosx_11_0_arm64.whl (77.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

pelutils-4.2.0-cp311-cp311-win_amd64.whl (75.6 kB view details)

Uploaded CPython 3.11Windows x86-64

pelutils-4.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (107.1 kB view details)

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

pelutils-4.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (108.4 kB view details)

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

pelutils-4.2.0-cp311-cp311-macosx_11_0_arm64.whl (77.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for pelutils-4.2.0.tar.gz
Algorithm Hash digest
SHA256 8669e5cc345a002ffdcf91a3f1befb3888e2e499ac043e4012c96011dc508c4f
MD5 644d31ee5da0cfabd3ec48e2741a4f01
BLAKE2b-256 c36a61a71271874dfddd2195067a588f8882c1bf9ac2794ee458c96bd2fb8a2e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pelutils-4.2.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 75.8 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.2.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 781ae369fb859549f1a62a33c780af5e6ffde546e0b5f6204d02a66dbf8f4834
MD5 9ea74691d27ec4a05d74c3052e684357
BLAKE2b-256 29e38c627bccfd0409506f36de81b86f31d30b3199c5b52049d8555bc3e249b4

See more details on using hashes here.

File details

Details for the file pelutils-4.2.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.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e07c4d35bdce3509cfc2d6a2958939a806c67c487754913a8f26f5320fc49571
MD5 100fa7fa2e910a1e249261cb72e68569
BLAKE2b-256 3790b1e935ecf465e777d2b6e8961bfe7aca016d95e4587f572d17b50274e222

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pelutils-4.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 388158d4b647d4d739d2964e38c8c0e15b6386fb713920b40a50a1f174d53db0
MD5 f3e20389a201a8aa5e3ca4f009e0c17d
BLAKE2b-256 e2ab0ed0dc0608f42fbc0f41e7590297cf3f94a17b38941582aea65dd500fa7c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pelutils-4.2.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 929d179010897b4d9b9be22e193c1d44feac95dc8bd1f681e05a033220850fa5
MD5 33bf18532322aa869f55e710d66c7d12
BLAKE2b-256 a06917d03484375d208762069688837f5ac7898ce247f86703e35329b4a2c5f7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pelutils-4.2.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 75.6 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.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 b7aa3d5734fa2cb69b00e386423e3b93a5d83176efb44503cc13a166cbe3cad0
MD5 4e3f841ddf5c95e436d091b00f427e23
BLAKE2b-256 b76141b1020f69d884c89a60ebe0cbf78586bb63078d0ce4ab90aace1b3fbf19

See more details on using hashes here.

File details

Details for the file pelutils-4.2.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.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 20449ae8ae8783682d2482c8078fd3d203d75fc135967de937ed791b219ded00
MD5 1db01c0f5528b763290cfb6a431b671c
BLAKE2b-256 13a53c27a7c48847fff4030acc613dafba78f718a1a5b389988846952466438e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pelutils-4.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 477f45e2b442b8b4d58b4d771850f33355a6101e535af1029e63c4c46db68ab4
MD5 a543be87468136bc0697238c434c450f
BLAKE2b-256 8e5c036a5d118f0d7694a997f5dd0f3aef9dc2a2b555e7c0babd79b29785b829

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pelutils-4.2.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 6556ded9679ffbd01fa3f9f9d43209e8beaf011d7c0c2998ff5ed5a514d10ec0
MD5 ec5e7d14a8ae8014da2b42ecb0019694
BLAKE2b-256 ed45d74088ba9e254aceebdc099723081977d496ea9d460d3541363cae698088

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pelutils-4.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 75.6 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.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 389fac5f30c833f7c624ea99c86dc18bb102ae39b3c228411bbfca71cb880086
MD5 6e6666eeefc8cc77795b17494edc102d
BLAKE2b-256 d8e52ccbb8fb1e2eae0a30b257ea5b6d4e4ae877fe62ac9fe773101912e8a1bb

See more details on using hashes here.

File details

Details for the file pelutils-4.2.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.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da72d5c1ab79230c15e1d45c2acbebcb756c4fef78e1dbaf87ceae9073d05212
MD5 3496bcf4b2c106f90e9f57533d4450ab
BLAKE2b-256 8512eced1807504a4c38887c3d82e15726348b02633cade707b6bf98518364f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pelutils-4.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 13de169239653ca8b36839bcd1caef87da9f81579749b59a4e1fddfe7d9abeee
MD5 26d41b02da8d776ad129735a2a945dc2
BLAKE2b-256 d4127642002420ccd2b53a635aa0b7c369af256ef4d3a5f1ca9bb7b276aca78e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pelutils-4.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2627ee0b0425b0517df7edf661fcbe9cc57caa1b7c099bd82fb1b66abbe09e74
MD5 61738d633ff5452184bd2b6adad21926
BLAKE2b-256 3575f95f6d8f46ad7883748737482476ae4c8c57383f4d8e54a00880b403468c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: pelutils-4.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 75.6 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.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 3f2ccc3801affca4aa8c82170f63533ead37f30ef0c9713368d70a682cee4977
MD5 f7c80a06c3b18fe10c3af847f267ec7a
BLAKE2b-256 eed7a6515cfa5a83599bc518446b09a7b561c1f1ebab3e1254f554dee942a66c

See more details on using hashes here.

File details

Details for the file pelutils-4.2.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.2.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 da61d1e9de54bbde49c0f10ef7953276b14b36d4912dc590e637e09367d84c82
MD5 68388a4608306530323c41668bd7cc06
BLAKE2b-256 c75c0db7e5e97b81fda03e5b69d07a676b58ef1d4243116dd019dd5d46b57de9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pelutils-4.2.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 4591b11c35877bc66905b0886ad5619a0766041327f7647bf438f076bc1af904
MD5 5380edca71399bd6cb3004998f5d4189
BLAKE2b-256 542752f1b4be1f32e5e1de6a9a84c0b32b153126865e46fa3512432c8943f7db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for pelutils-4.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4ed740c12f35f9a20f35e21036379c94272a1ff657e2f60a17e0ae8b056c695f
MD5 47f8c6f6ea3595af60c17fbc87e26742
BLAKE2b-256 f9b4f134d9aae8c0e8005e3d03b30253f81499f149d231ddec862dc173c9d034

See more details on using hashes here.

Release history Release notifications | RSS feed

4.3.0

36 files

4.2.1

36 files

This release

4.2.0 This release

17 files

4.1.0

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