Lightweight InTerface for Lossy compression
Project description
litl 🗜️
Lightweight InTerface for Lossy compression
A flexible Python framework for implementing, testing, and deploying lossy compression algorithms.
Features
- 🔧 Simple Compressors Interface: Simple and universal interface for implementing and sharing compressors
- 📊 Built-in Evaluation: Comprehensive quality metrics with batteries included (MSE, PSNR, SSIM, L1)
- 💾 Standardized Storage Format: Custom
.litlfile format for any compressor with user-defined metadata - 🎯 Multiple Data Formats: Support for NumPy, PyTorch, and NetCDF
- 📈 Rich CLI: Beautiful command-line interface, in addition to rich Python API
Installation
pip install litl
Optional Dependencies
For NetCDF support:
pip install litl[netcdf]
CLI
1. Compress Data
litl compress <path_to_compressor.py:CompressorClassName> <data_to_compress.npy> <config.json> <output.litl>
2. Decompress Data
litl decompress <output.litl> <decompressed.npy>
3. Evaluate Compression (compress and decompress, recording quality metrics)
litl evaluate <path_to_compressor.py:CompressorClassName> <data_to_compress.npy> <config.json>
4. Inspect Compressed Files
litl info <output.litl>
Python API
Compress Data
import litl
compressed_blob, meta, metrics = litl.compress(
compressor_name="path/to/compressor.py:ClassName",
original_data_path="data/hurricane.npy",
litl_file_path="path/to/compressed.litl"
)
print(f"Compressed data saved to {compressed_path}")
print(f"Metadata: {meta}")
print(f"Metrics: {metrics}")
litl.DotLitl.save(
litl_file_path="path/to/compressed.litl",
blob=compressed_blob,
compressor_name="path/to/compressor.py:ClassName",
meta=meta
)
Decompress Data
import litl
decompressed_data = litl.decompress(
litl_file_path="path/to/compressed.litl",
decompressed_path="data/decompressed.npy"
)
print(f"Decompressed data saved to {decompressed_path}")
data_numpy = decompressed_data.numpy()
Creating a Custom Compressor
Implement the Compressor interface:
from litl.compressors import Compressor, CompressorAbout
from litl.datawrapper import DataWrapper
from litl.blobs import ArrayBlob, Blob
import pydantic
class MyCompressor(Compressor):
@classmethod
def about(cls) -> CompressorAbout:
return CompressorAbout(
name="MyCompressor",
description="A simple lossy compressor",
version="1.0.0",
author="Your Name"
)
@classmethod
def blob_class(cls):
# Specify the blob class used for compressed data. This type will be passed into your decompressed function
return ArrayBlob
@classmethod
def compress(cls, data: DataWrapper, config: dict) -> tuple[Blob, dict]:
# Your compression logic here
# Return a blob containing compressed data.
# Built-ins are:
# - ArrayBlob for NumPy and PyTorch arrays
# - ModelBlob for PyTorch models
# - ByteBlob for byte arrays
# If none of these work - extend the Blob class and implement a custom blob
meta = {} # Metadata required to reconstruct the data, can be any serializable dictionary
return ArrayBlob(compressed_array), meta
@classmethod
def decompress(cls, blob: ArrayBlob, meta: dict) -> DataWrapper:
# Your decompression logic here
# Return Reconstructed data wrapped in DataWrapper
return DataWrapper(decompressed)
DataWrapper
The DataWrapper class supports multiple formats for loading and saving data:
- NumPy:
.npy,.npfiles - PyTorch:
.ptfiles - NetCDF:
.ncfiles (requiresnetCDF4)
from litl import DataWrapper
# Load data
data = DataWrapper.from_file("data.npy")
# Save data
data.save_to_file("output.nc")
# Access underlying arrays
numpy_array = data.numpy()
torch_tensor = data.tensor()
Built-in Blob Types
Choose the appropriate blob type for your compressed data:
Evaluation Metrics
The Evaluator provides standard compression metrics:
Quality Metrics:
- Mean Squared Error (MSE)
- Peak Signal-to-Noise Ratio (PSNR)
- Structural Similarity Index (SSIM)
- L1 Loss
Size Metrics:
- Original size
- Compressed size
- Compression ratio
File Format
The .litl format (DotLitl) stores:
- Compressed data with Zstandard compression
- Compressor metadata and version
- Integrity checksums
- Configuration parameters
License
MIT License - see LICENSE for details.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file litl-0.1.2.tar.gz.
File metadata
- Download URL: litl-0.1.2.tar.gz
- Upload date:
- Size: 11.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
593d98f4d6fdaf246c849069c5e7b2b42019390559f8b23fc735a41d1f11c71a
|
|
| MD5 |
9c2364c1feeed7ccfe03686fce4eac62
|
|
| BLAKE2b-256 |
33e4f127a8147c8589e3b233d3d70812a09b158ab88e21a91bbdd2d4423e97bb
|
File details
Details for the file litl-0.1.2-py3-none-any.whl.
File metadata
- Download URL: litl-0.1.2-py3-none-any.whl
- Upload date:
- Size: 15.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
394d21d7bb24ae195888cf52a071c08e238f25c7a73b60fcbc726ee32802ed5a
|
|
| MD5 |
d0adaab2304f239e85799a929224b5e6
|
|
| BLAKE2b-256 |
b1add547663680b50d462c1ef6b58870a34346e4facc274d778363b27bde5e80
|