Skip to main content

Python wrapper for fLZc complexity measure (based on https://github.com/lcbarnett/fLZc)

Project description

fLZc_python — Fast Lempel–Ziv Complexity for Python

A Python wrapper around the fLZc C library, implementing the original LZ76c1 and LZ78c2 versions of complexity measures (with optional normalisation) in optimized C, exposed via a clean Python API.

Features

  • LZ76c & LZ78c: exact implementations of the original Lempel–Ziv algorithms
  • Running complexity: compute the complexity profile along a sequence
  • Dictionary output: retrieve the phrase dictionary used by the algorithm
  • Normalisation: theoretical or empirical scaling factors (as in the original fLZc)
  • Pure-Python API built on C for maximum speed (via ctypes)
  • Works out-of-the-box on macOS & Linux; Windows support untested

Installation (Development Mode)

This project uses scikit-build-core + CMake under PEP 517.

Prerequisites

  • Python 3.8–3.13
  • pip, a C99-compatible compiler, and CMake ≥ 3.15
  • macOS or Linux (Windows support not yet tested)

Step by step

Clone and install in editable mode:

git clone https://github.com/romybeaute/fLZc_python.git
cd fLZc_python
python -m venv .flzcvenv
source .flzcvenv/bin/activate

# clean previous builds (optional)
rm -rf build/ dist/ _skbuild/ fLZc_python/liblzc.*

# install in editable mode (builds & places the shared library)
pip install -e .

Examples & Testing

  • Demo:\ fLZc_python/examples/lzc_demo.py provides an end-to-end example (including plotting).

  • Unit tests:\ Run pytest tests/ to verify correctness on canonical sequences.

Implementation Details

  • LZ76c follows the algorithm of Kaspar & Schuster 1, with optional dictionary retrieval and running-profile support.
  • LZ78c leverages the khashl hash-map for linear-time parsing and also supports dictionary & running outputs.
  • Normalisation factors are precomputed (via MATLAB data) for alphabets up to size 10; see the original MATLAB repo for details.

Acknowledgements

Wraps the original fLZc library by Lionel Barnett (University of Sussex).

License

Distributed under the MIT License. See LICENSE for details.

References

  1. A. Lempel & J. Ziv, “On the Complexity of Finite Sequences,” IEEE Trans. Inf. Theory 22(1), 1976.
  2. A. Lempel & J. Ziv, “Compression of Individual Sequences via Variable-Rate Coding,” IEEE Trans. Inf. Theory 24(5), 1978.
  3. F. Kaspar & H. G. Schuster, “Easily Calculable Measure for the Complexity of Spatiotemporal Patterns,” Phys. Rev. A 36(2), 1987.

Project details


Download files

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

Source Distribution

flzc-0.1.2.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

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

flzc-0.1.2-cp313-cp313-macosx_14_0_arm64.whl (25.7 kB view details)

Uploaded CPython 3.13macOS 14.0+ ARM64

File details

Details for the file flzc-0.1.2.tar.gz.

File metadata

  • Download URL: flzc-0.1.2.tar.gz
  • Upload date:
  • Size: 16.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for flzc-0.1.2.tar.gz
Algorithm Hash digest
SHA256 63e8dc907b260290f9272d9e6efdfe89063381d327e88dc95ed50e40e15fd845
MD5 bfd536151f5445624d59e2d77e335291
BLAKE2b-256 7823f9d668ac063ee49e4f1b234bb2654f8c8cca9ad284d10349da54ca6b6858

See more details on using hashes here.

File details

Details for the file flzc-0.1.2-cp313-cp313-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for flzc-0.1.2-cp313-cp313-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 217c4b371fa1a197808c200c009574fd8045f667ce85c37eaa8b8d9bf4478b5e
MD5 e4937655c8429af9f08b487bfe3d7646
BLAKE2b-256 2209eaa5ecb970da590192713e1c209e7ab40040304d6f4f39c364f0cb0b299f

See more details on using hashes here.

Supported by

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