User Guide

PPM, Prediction by partial matching, is a wellknown compression technique based on context modeling and prediction. PPM models use a set of previous symbols in the uncompressed symbol stream to predict the next symbol in the stream.

PPMd is an implementation of PPMII by Dmitry Shkarin.

The ppmd-cffi package uses core C files from p7zip. The library has a bere function and no metadata/header handling functions. This means you should know compression parameters and input/output data sizes.

Getting started

Install

The ppmd-cffi is written by Python and C language bound with CFFI, and can be downloaded from PyPI(aka. Python Package Index) using standard ‘pip’ command as like follows;

$ pip install ppmd-cffi

Programming Interfaces

Compression/Encoding

data = b'abcdefghijk'
level = 6
memSize = 16  # 16Mb
with ppmd.PpmdBufferEncoder(level, memSize) as encoder:
    result = encoder.encode(data)
    result += encoder.flush()

There is also ppmd.PpmdEncoder(f: BinaryIO, level, memSize) interface.

Decompression/Decoding

level = 6
memSize = 16
with pathlib.Path('compressed.data.bin').open('rb') as f:
    with ppmd.PpmdDecoder(f, level, memSize) as decoder:
        result = decoder.decode(outsize1)
        result += decoder.decode(outsize2)
    assert len(result) == outsize1 + outsizse2

There is also ppmd.PpmdBufferDecoder(level, memSize) interface, which decode ONE-SHOT data, as like result = decoder.decode(data, outsize)