Metadata-Version: 2.4 Name: cramjam Version: 2.11.0 Requires-Dist: black==22.3.0 ; extra == 'dev' Requires-Dist: numpy ; extra == 'dev' Requires-Dist: pytest>=5.30 ; extra == 'dev' Requires-Dist: pytest-xdist ; extra == 'dev' Requires-Dist: pytest-benchmark ; extra == 'dev' Requires-Dist: hypothesis==6.60.0 ; extra == 'dev' Provides-Extra: dev License-File: LICENSE Summary: Thin Python bindings to de/compression algorithms in Rust Keywords: compression,decompression,snappy,zstd,bz2,gzip,lz4,brotli,deflate,blosc2 Author: Miles Granger Author-email: Miles Granger License: MIT Requires-Python: >=3.8 Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM Project-URL: homepage, https://github.com/milesgranger/pyrus-cramjam Project-URL: documentation, https://docs.rs/cramjam/latest/cramjam Project-URL: repository, https://github.com/milesgranger/pyrus-cramjam # cramjam [![Code Style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black) [![CI](https://github.com/milesgranger/cramjam/actions/workflows/CI.yml/badge.svg)](https://github.com/milesgranger/cramjam/actions/workflows/CI.yml) [![PyPI](https://img.shields.io/pypi/v/cramjam.svg)](https://pypi.org/project/cramjam) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/cramjam/badges/version.svg)](https://anaconda.org/conda-forge/cramjam) [![Downloads](https://pepy.tech/badge/cramjam/month)](https://pepy.tech/project/cramjam) [![NPM Version](https://img.shields.io/npm/v/cramjam)](https://www.npmjs.com/package/cramjam) [API Documentation](https://milesgranger.github.io/cramjam/cramjam.html) ### Install (Python) ```commandline pip install --upgrade cramjam # Requires no Python or system dependencies! ``` ### Install (JavaScript / TypeScript) ```commandline npm install cramjam ``` ### CLI A CLI interface is available as [`cramjam-cli`](https://github.com/cramjam/cramjam-cli) ### libcramjam A Rust crate and C friendly library available at [libcramjam](https://github.com/cramjam/libcramjam) --- Extremely thin and easy-to-install Python bindings to de/compression algorithms in Rust. Allows for using algorithms such as Snappy, without any system or other python dependencies. --- ##### Benchmarks Some basic benchmarks are available [in the benchmarks directory](./benchmarks/README.md) --- Available algorithms: - [X] Snappy      `cramjam.snappy` - [X] Brotli          `cramjam.brotli` - [X] Bzip2          `cramjam.bzip2` - [X] Lz4              `cramjam.lz4` - [X] Gzip            `cramjam.gzip` - [X] Zlib              `cramjam.zlib` - [X] Deflate       `cramjam.deflate` - [X] ZSTD           `cramjam.zstd` - [X] XZ / LZMA  `cramjam.xz` Experimental (Requires build from source enabling each feature): - [X] Blosc2         `cramjam.experimental.blosc2` - [X] ISA-L backend _(only on 64-bit targets)_ - [X] igzip          `cramjam.experimental.igzip` - [X] ideflate     `cramjam.experimental.ideflate` - [X] izlib           `cramjam.experimental.izlib` All available for use as: ```python >>> import cramjam >>> import numpy as np >>> compressed = cramjam.snappy.compress(b"bytes here") >>> decompressed = cramjam.snappy.decompress(compressed) >>> decompressed cramjam.Buffer(len=10) # an object which implements the buffer protocol >>> bytes(decompressed) b"bytes here" >>> np.frombuffer(decompressed, dtype=np.uint8) array([ 98, 121, 116, 101, 115, 32, 104, 101, 114, 101], dtype=uint8) ``` Where the API is `cramjam..compress/decompress` and accepts `bytes`/`bytearray`/`numpy.array`/`cramjam.File`/`cramjam.Buffer` / `memoryview` objects. **de/compress_into** Additionally, all variants support `decompress_into` and `compress_into`. Ex. ```python >>> import numpy as np >>> from cramjam import snappy, Buffer >>> >>> data = np.frombuffer(b'some bytes here', dtype=np.uint8) >>> data array([115, 111, 109, 101, 32, 98, 121, 116, 101, 115, 32, 104, 101, 114, 101], dtype=uint8) >>> >>> compressed = Buffer() >>> snappy.compress_into(data, compressed) 33 # 33 bytes written to compressed buffer >>> >>> compressed.tell() # Where is the buffer position? 33 # goodie! >>> >>> compressed.seek(0) # Go back to the start of the buffer so we can prepare to decompress >>> decompressed = b'0' * len(data) # let's write to `bytes` as output >>> decompressed b'000000000000000' >>> >>> snappy.decompress_into(compressed, decompressed) 15 # 15 bytes written to decompressed >>> decompressed b'some bytes here' ``` [TypeScript](./cramjam-js/README.md): ```typescript import {Compress, Decompress} from 'cramjam'; const decoder = new TextDecoder(); const encoder = new TextEncoder(); const str = 'hello, world'; const encoded = encoder.encode(str); const compressed = Compress.brotli(encoded); const decompressed = Decompress.brotli(compressed); const decoded = decoder.decode(decompressed); ```