pyppmd 1.2.0


pip install pyppmd

  Latest version

Released: May 01, 2025


Meta
Author: Hiroshi Miura
Requires Python: >=3.9

Classifiers

Development Status
  • 5 - Production/Stable

Operating System
  • MacOS :: MacOS X
  • Microsoft :: Windows
  • POSIX
  • POSIX :: Linux

Programming Language
  • Python
  • Python :: 3
  • Python :: 3.9
  • Python :: 3.10
  • Python :: 3.11
  • Python :: 3.12
  • Python :: 3.13
  • Python :: 3 :: Only
  • Python :: Implementation :: CPython
  • Python :: Implementation :: PyPy

Topic
  • Software Development :: Libraries :: Python Modules
https://badge.fury.io/py/pyppmd.svg https://img.shields.io/conda/vn/conda-forge/pyppmd https://readthedocs.org/projects/pyppmd/badge/?version=latest https://dev.azure.com/miurahr/CodeBerg/_apis/build/status%2FCodeBerg-pyppmd-CI?branchName=main

Introduction

pyppmd module provides classes and functions for compressing and decompressing text data, using PPM(Prediction by partial matching) compression algorithm which has several variations of implementations. PPMd is the implementation by Dmitry Shkarin. PyPPMD use Igor Pavlov’s range coder introduced in 7-zip.

The API is similar to Python’s bz2/lzma/zlib module.

Some parts of th codes are derived from 7-zip, pyzstd and ppmd-cffi.

Development status

A project status is considered as Stable.

Extra input byte

PPMd algorithm and implementation is designed to use Extra input byte. The encoder will omit a last null (b”0”) byte when last byte is b”0”. You may need to provide an extra null byte when you don’t get expected size of extracted data.

You can do like as:

dec = pyppmd.Ppmd7Decoder(max_order=6, mem_size=16 << 10)
result = dec.decode(compressed, length)
if len(result) < length:
    if dec.needs_input:
        # ppmd need an extra null byte
        result += dec.decode(b"\0", length - len(result))
    else:
        result += dec.decode(b"", length - len(result))

Wheel compatibility matrix

Platform CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 PyPy 3.9 (pp73) PyPy 3.10 (pp73) PyPy 3.11 (pp73)
macosx_10_13_universal2
macosx_10_13_x86_64
macosx_10_9_universal2
macosx_10_9_x86_64
macosx_11_0_arm64
manylinux2014_aarch64
manylinux2014_x86_64
manylinux_2_17_aarch64
manylinux_2_17_x86_64
musllinux_1_1_aarch64
musllinux_1_1_x86_64
win32
win_amd64
win_arm64

Files in release

pyppmd-1.2.0-cp310-cp310-macosx_10_9_universal2.whl (75.0KiB)
pyppmd-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl (46.6KiB)
pyppmd-1.2.0-cp310-cp310-macosx_11_0_arm64.whl (46.8KiB)
pyppmd-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (132.7KiB)
pyppmd-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (135.8KiB)
pyppmd-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl (136.6KiB)
pyppmd-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl (139.6KiB)
pyppmd-1.2.0-cp310-cp310-win32.whl (40.8KiB)
pyppmd-1.2.0-cp310-cp310-win_amd64.whl (45.4KiB)
pyppmd-1.2.0-cp310-cp310-win_arm64.whl (43.6KiB)
pyppmd-1.2.0-cp311-cp311-macosx_10_9_universal2.whl (75.0KiB)
pyppmd-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl (46.6KiB)
pyppmd-1.2.0-cp311-cp311-macosx_11_0_arm64.whl (46.8KiB)
pyppmd-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (135.2KiB)
pyppmd-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (138.0KiB)
pyppmd-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl (138.6KiB)
pyppmd-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl (141.9KiB)
pyppmd-1.2.0-cp311-cp311-win32.whl (40.8KiB)
pyppmd-1.2.0-cp311-cp311-win_amd64.whl (45.4KiB)
pyppmd-1.2.0-cp311-cp311-win_arm64.whl (43.6KiB)
pyppmd-1.2.0-cp312-cp312-macosx_10_13_universal2.whl (75.5KiB)
pyppmd-1.2.0-cp312-cp312-macosx_10_13_x86_64.whl (47.1KiB)
pyppmd-1.2.0-cp312-cp312-macosx_11_0_arm64.whl (46.8KiB)
pyppmd-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (136.0KiB)
pyppmd-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (139.4KiB)
pyppmd-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl (139.6KiB)
pyppmd-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl (143.0KiB)
pyppmd-1.2.0-cp312-cp312-win32.whl (40.8KiB)
pyppmd-1.2.0-cp312-cp312-win_amd64.whl (45.5KiB)
pyppmd-1.2.0-cp312-cp312-win_arm64.whl (43.7KiB)
pyppmd-1.2.0-cp313-cp313-macosx_10_13_universal2.whl (75.5KiB)
pyppmd-1.2.0-cp313-cp313-macosx_10_13_x86_64.whl (47.1KiB)
pyppmd-1.2.0-cp313-cp313-macosx_11_0_arm64.whl (46.8KiB)
pyppmd-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (136.0KiB)
pyppmd-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (139.4KiB)
pyppmd-1.2.0-cp313-cp313-musllinux_1_1_aarch64.whl (139.5KiB)
pyppmd-1.2.0-cp313-cp313-musllinux_1_1_x86_64.whl (142.9KiB)
pyppmd-1.2.0-cp313-cp313-win32.whl (40.8KiB)
pyppmd-1.2.0-cp313-cp313-win_amd64.whl (45.5KiB)
pyppmd-1.2.0-cp313-cp313-win_arm64.whl (43.7KiB)
pyppmd-1.2.0-cp39-cp39-macosx_10_9_universal2.whl (74.9KiB)
pyppmd-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl (46.5KiB)
pyppmd-1.2.0-cp39-cp39-macosx_11_0_arm64.whl (46.8KiB)
pyppmd-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (132.6KiB)
pyppmd-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (135.6KiB)
pyppmd-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl (136.5KiB)
pyppmd-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl (139.3KiB)
pyppmd-1.2.0-cp39-cp39-win32.whl (40.8KiB)
pyppmd-1.2.0-cp39-cp39-win_amd64.whl (45.4KiB)
pyppmd-1.2.0-cp39-cp39-win_arm64.whl (43.6KiB)
pyppmd-1.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (43.8KiB)
pyppmd-1.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.9KiB)
pyppmd-1.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (43.8KiB)
pyppmd-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.9KiB)
pyppmd-1.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (43.8KiB)
pyppmd-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.9KiB)
pyppmd-1.2.0.tar.gz (1.3MiB)
Extras:
Dependencies: