Faster zlib and gzip compatible compression and decompression by providing Python bindings for the ISA-L library.
This package provides Python bindings for the ISA-L library. The Intel(R) Intelligent Storage Acceleration Library (ISA-L) implements several key algorithms in assembly language. This includes a variety of functions to provide zlib/gzip-compatible compression.
python-isal provides the bindings by offering three modules:
isal_zlib: A drop-in replacement for the zlib module that uses ISA-L to accelerate its performance.igzip: A drop-in replacement for the gzip module that usesisal_zlibinstead ofzlibto perform its compression and checksum tasks, which improves performance.igzip_lib: Provides compression functions which have full access to the API of ISA-L's compression functions.
isal_zlib and igzip are almost fully compatible with zlib and
gzip from the Python standard library. There are some minor differences
see: differences-with-zlib-and-gzip-modules.
The python-isal modules can be imported as follows
from isal import isal_zlib
from isal import igzip
from isal import igzip_libisal_zlib and igzip are meant to be used as drop in replacements so
their api and functions are the same as the stdlib's modules. Except where
ISA-L does not support the same calls as zlib (See differences below).
A full API documentation can be found on our readthedocs page.
python -m isal.igzip implements a simple gzip-like command line
application (just like python -m gzip). Full usage documentation can be
found on our readthedocs page.
- with pip:
pip install isal - with conda:
conda install python-isal
Installation is supported on Linux, Windows and MacOS. For more advanced installation options check the documentation.
- Compression level 0 in
zlibandgzipmeans no compression, while inisal_zlibandigzipthis is the lowest compression level. This is a design choice that was inherited from the ISA-L library. - Compression levels range from 0 to 3, not 1 to 9.
isal_zlib.Z_DEFAULT_COMPRESSIONhas been aliased toisal_zlib.ISAL_DEFAULT_COMPRESSION(2). isal_zlibonly supportsNO_FLUSH,SYNC_FLUSH,FULL_FLUSHandFINISH_FLUSH. Other flush modes are not supported and will raise errors.zlib.Z_DEFAULT_STRATEGY,zlib.Z_RLEetc. are exposed asisal_zlib.Z_DEFAULT_STRATEGY,isal_zlib.Z_RLEetc. for compatibility reasons. However,isal_zlibonly supports a default strategy and will give warnings when other strategies are used.zlibsupports different memory levels from 1 to 9 (with 8 default).isal_zlibsupports memory levels smallest, small, medium, large and largest. These have been mapped to levels 1, 2-3, 4-6, 7-8 and 9. Soisal_zlibcan be used with zlib compatible memory levels.isal_zlibmethods have adataargument which is positional only. In isal_zlib this is not enforced and it can also called as keyword argument. This is due to implementingisal_zlibin cython and maintaining backwards compatibility with python 3.6.igzip.openreturns a classIGzipFileinstead ofGzipFile. Since the compression levels are not compatible, a difference in naming was chosen to reflect this.igzip.GzipFiledoes exist as an alias ofigzip.IGzipFilefor compatibility reasons.
Please make a PR or issue if you feel anything can be improved. Bug reports are also very welcome. Please report them on the github issue tracker.
This project builds upon the software and experience of many. Many thanks to:
- The ISA-L contributors for making ISA-L.
- The Cython contributors for making it easy to create an extension and helping a novice get start with pointer addresses.
- The CPython contributors.
Python-isal mimicks
zlibmodule.candgzip.pyfrom the standard library to make it easier for python users to adopt it. - @marcelm for taking a chance on this project and make it a dependency for his xopen and by extension cutadapt projects. This gave python-isal its first users who used python-isal in production.
- The github actions team for creating the actions CI service that enables building and testing on all three major operating systems.
- @animalize for explaining how to test and build python-isal for ARM 64-bit platforms.
- And last but not least: everyone who submitted a bug report or a feature request. These make the project better!
Python-isal would not have been possible without you!