blosc2 3.2.0__tar.gz → 3.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {blosc2-3.2.0 → blosc2-3.2.1}/.pre-commit-config.yaml +1 -1
- {blosc2-3.2.0 → blosc2-3.2.1}/ANNOUNCE.rst +10 -8
- {blosc2-3.2.0 → blosc2-3.2.1}/CMakeLists.txt +1 -1
- {blosc2-3.2.0 → blosc2-3.2.1}/PKG-INFO +25 -36
- {blosc2-3.2.0 → blosc2-3.2.1}/README.rst +18 -28
- {blosc2-3.2.0 → blosc2-3.2.1}/RELEASE_NOTES.md +17 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/RELEASING.rst +6 -2
- blosc2-3.2.1/doc/getting_started/overview.rst +238 -0
- blosc2-3.2.1/doc/getting_started/tutorials/images/reductions/3D-cube-plane.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/python-blosc2.rst +1 -1
- blosc2-3.2.1/examples/ndarray/jit-numpy-funcs.py +59 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/pyproject.toml +4 -1
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/blosc2_ext.pyx +65 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/core.py +26 -2
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/lazyexpr.py +47 -2
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/ndarray.py +20 -9
- blosc2-3.2.1/src/blosc2/version.py +1 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_evaluate.py +15 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_full.py +3 -1
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_lazyexpr.py +17 -2
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_matmul.py +2 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_nans.py +1 -1
- blosc2-3.2.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -26
- blosc2-3.2.0/.github/dependabot.yml +0 -7
- blosc2-3.2.0/.github/workflows/build.yml +0 -29
- blosc2-3.2.0/.github/workflows/cibuildwheels.yml +0 -141
- blosc2-3.2.0/.github/workflows/wasm.yml +0 -64
- blosc2-3.2.0/bench/compress_numpy.py +0 -69
- blosc2-3.2.0/bench/encode-itrunc-Linux-i13900K.ipynb +0 -528
- blosc2-3.2.0/bench/encode-itrunc-MacOS-M1.ipynb +0 -528
- blosc2-3.2.0/bench/encode-sparse-MacOS-Intel.ipynb +0 -417
- blosc2-3.2.0/bench/fill_special.py +0 -53
- blosc2-3.2.0/bench/get_slice.py +0 -54
- blosc2-3.2.0/bench/io.py +0 -148
- blosc2-3.2.0/bench/ndarray/broadcast_expr.py +0 -44
- blosc2-3.2.0/bench/ndarray/compare_getslice.py +0 -244
- blosc2-3.2.0/bench/ndarray/compute_expr_numba.py +0 -147
- blosc2-3.2.0/bench/ndarray/compute_expr_udf.ipynb +0 -361
- blosc2-3.2.0/bench/ndarray/compute_fields.py +0 -67
- blosc2-3.2.0/bench/ndarray/compute_where.py +0 -95
- blosc2-3.2.0/bench/ndarray/copy_postfilter.py +0 -57
- blosc2-3.2.0/bench/ndarray/download_data.py +0 -40
- blosc2-3.2.0/bench/ndarray/era5-pds/measurements-i10k.parquet +0 -0
- blosc2-3.2.0/bench/ndarray/era5-pds/measurements-i13k-always-split.parquet +0 -0
- blosc2-3.2.0/bench/ndarray/era5-pds/measurements-i13k-never-split.parquet +0 -0
- blosc2-3.2.0/bench/ndarray/era5-pds/measurements-i13k.parquet +0 -0
- blosc2-3.2.0/bench/ndarray/era5-pds/measurements-m1.parquet +0 -0
- blosc2-3.2.0/bench/ndarray/era5-pds/measurements-ryzen3.parquet +0 -0
- blosc2-3.2.0/bench/ndarray/jit-expr.py +0 -154
- blosc2-3.2.0/bench/ndarray/jit-reduc-float64-lossy-plot.py +0 -179
- blosc2-3.2.0/bench/ndarray/jit-reduc-float64-plot-dask.py +0 -181
- blosc2-3.2.0/bench/ndarray/jit-reduc-float64-plot-semilogx.py +0 -272
- blosc2-3.2.0/bench/ndarray/jit-reduc-float64-plot.py +0 -294
- blosc2-3.2.0/bench/ndarray/jit-reduc-sizes-dask.py +0 -204
- blosc2-3.2.0/bench/ndarray/jit-reduc-sizes.py +0 -145
- blosc2-3.2.0/bench/ndarray/jit-reduc.py +0 -144
- blosc2-3.2.0/bench/ndarray/lazyarray-constructors.py +0 -67
- blosc2-3.2.0/bench/ndarray/lazyarray-dask-large.ipynb +0 -8831
- blosc2-3.2.0/bench/ndarray/lazyarray-dask-small.ipynb +0 -3179
- blosc2-3.2.0/bench/ndarray/lazyarray-expr-large.ipynb +0 -7023
- blosc2-3.2.0/bench/ndarray/lazyarray-expr.ipynb +0 -2992
- blosc2-3.2.0/bench/ndarray/matmul.ipynb +0 -4941
- blosc2-3.2.0/bench/ndarray/plot_transcode_data.ipynb +0 -349
- blosc2-3.2.0/bench/ndarray/reduce_expr.py +0 -75
- blosc2-3.2.0/bench/ndarray/run-jit-reduc-sizes.sh +0 -5
- blosc2-3.2.0/bench/ndarray/transcode_data.py +0 -156
- blosc2-3.2.0/bench/pack_compress.py +0 -159
- blosc2-3.2.0/bench/pack_large.py +0 -58
- blosc2-3.2.0/bench/pack_tensor.py +0 -170
- blosc2-3.2.0/bench/set_slice.py +0 -57
- blosc2-3.2.0/bench/sum_postfilter.py +0 -57
- blosc2-3.2.0/doc/getting_started/overview.rst +0 -299
- blosc2-3.2.0/doc/getting_started/tutorials/images/reductions/3D-cube-plane.png +0 -0
- blosc2-3.2.0/src/blosc2/version.py +0 -1
- {blosc2-3.2.0 → blosc2-3.2.1}/.gitignore +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/.guix/modules/python-blosc2-package.scm +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/.guix-channel +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/CONTRIBUTING.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/LICENSE.txt +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/README_DEVELOPERS.md +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/code_of_conduct.md +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/blosc-favicon_32x32.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/blosc-favicon_64x64.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/blosc-logo_128.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/blosc-logo_256.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/css/custom.css +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/conf.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/development/code-of-conduct.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/development/contributing.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/development/index.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/index.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/installation.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/01.ndarray-basics.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/02.lazyarray-expressions.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/03.lazyarray-udf.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/04.reductions.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/05.persistent-reductions.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/06.remote_proxy.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/07.schunk-basics.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/08.schunk-slicing_and_beyond.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/10.ucodecs-ufilters.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/11.prefilters.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/12.postfilters.ipynb +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/blosc2-pipeline.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/blosc2-pipeline.svg +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/lazyexpr-broadcast.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/reductions/3D-cube.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/reductions/memory-access-2D-x.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/reductions/memory-access-2D-y.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/remote_proxy.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/backward.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/backward.svg +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/decoder.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/decoder.svg +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/decoder2.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/decoder2.svg +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/encoder.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/encoder.svg +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/encoder2.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/encoder2.svg +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/forward.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/forward.svg +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/index.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/array_operations.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.__getitem__.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.__init__.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.__len__.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.__setitem__.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.append_data.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.decompress_chunk.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.delete_chunk.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.fill_special.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.filler.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.get_chunk.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.get_slice.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.insert_chunk.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.insert_data.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.iterchunks.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.iterchunks_info.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.postfilter.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.prefilter.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.remove_postfilter.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.remove_prefilter.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.to_cframe.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.update_chunk.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.update_data.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/c2array.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/classes.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/decorators.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/index.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/lazy_functions.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/lazyarray.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/linear_algebra.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/low_level.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/ndarray.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/ndfield.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/proxy.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/proxyndsource.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/proxysource.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/reduction_functions.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/save_load.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/schunk.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/storage.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/utilities.rst +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/doc/release_notes/index.md +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/btune.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/compress2_decompress2.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/compress_decompress.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/filler.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/gil.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/mmap-rw.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/arange-constructor.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/asarray_.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/broadcast_expr.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/buffer.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/bytedelta_filter.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/c2array_expr.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/compute_expr.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/compute_fields.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/compute_udf_numba.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/compute_where.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/copy_.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/empty_.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/eye-constructor.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/filter_sort_fields.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/formats.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/fromiter-constructor.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/general_expressions.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/getitem.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/iterchunks_info.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/jit-expr.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/jit-reduc.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/linspace-constructor.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/lists-vs-bools-idx.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/meta.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/ndarray_copy.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/ndmean.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/persistency.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/proxy-carray.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/proxy-ndarray.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/reduce_and_enlarge.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/reduce_expr.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/reduce_expr_save.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/reduce_string_expr.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/resize_.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/work_with_numpy.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/zfp_codec.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/pack_array.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/pack_tensor.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/postfilter1.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/postfilter2.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/postfilter3.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/prefilter.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/save_tensor.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/schunk.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/schunk_roundtrip.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ucodecs.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/ufilters.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/examples/vlmeta.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/generate_version.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/guix.scm +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/Complete-Write-Read-B2ND.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/M1-i386-vs-arm64-pack.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/M1-i386-vs-arm64-unpack.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/Read-Partial-Slices-B2ND.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/b2nd-2level-parts.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/eval-expr-full-mem-M2.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/eval-expr-scarce-mem-M2.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/lazyarray-dask-large.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/lazyarray-dask-small.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/lazyarray-expr-large.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/lazyarray-expr.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/linspace-compress.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/linspace-decompress.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/pack-array-cratios.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/reduc-float64-amd.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/images/reduc-float64-log-amd.png +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/pytest.ini +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/__init__.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/c2array.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/helpers.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/info.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/proxy.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/schunk.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/storage.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/conftest.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_auto_parts.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_buffer.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_c2array_expr.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_c2array_reductions.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_c2array_udf.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_copy.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_empty.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_get_slice_nchunks.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_getitem.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_iterchunks_info.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_jit.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_lazyexpr_fields.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_lazyudf.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_lossy.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_metalayers.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_mode.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_ndarray.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_numpy.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_persistency.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_proxy.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_proxy_c2array.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_proxy_expr.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_reductions.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_resize.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_setitem.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_slice.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_squeeze.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_struct_dtype.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_zeros.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_bytes_array.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_comp_info.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_compress2.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_compression_parameters.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_compressors.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_decompress.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_iterchunks.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_mmap.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_open.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_open_c2array.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_pathlib.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_postfilters.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_prefilters.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_proxy_schunk.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_python_blosc.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_constructor.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_delete.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_get_slice.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_get_slice_nchunks.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_insert.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_set_slice.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_update.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_storage.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_tensor.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_ucodecs.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_ufilters.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_vlmeta.py +0 -0
- {blosc2-3.2.0 → blosc2-3.2.1}/update_version.py +0 -0
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
Announcing Python-Blosc2 3.2.
|
|
1
|
+
Announcing Python-Blosc2 3.2.1
|
|
2
2
|
==============================
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
Here, all array containers in Blosc2 implement the ``__array_interface__``
|
|
5
|
+
protocol to expose the data in the array. This allows for better
|
|
6
|
+
interoperability with other libraries like NumPy, CuPy, etc. Now, the range
|
|
7
|
+
of functions spans to most of NumPy functions, including reductions.
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
See examples at: https://github.com/Blosc/python-blosc2/blob/main/examples/ndarray/jit-numpy-funcs.py
|
|
10
|
+
See benchmarks at: https://github.com/Blosc/python-blosc2/blob/main/bench/ndarray/jit-numpy-funcs.py
|
|
11
|
+
|
|
12
|
+
We have also improved the performance of constructors like ``blosc2.linspace()``
|
|
13
|
+
or ``blosc2.arange()`` by a factor of up to 3x for large arrays.
|
|
11
14
|
|
|
12
15
|
You can think of Python-Blosc2 3.x as an extension of NumPy/numexpr that:
|
|
13
16
|
|
|
@@ -17,7 +20,6 @@ You can think of Python-Blosc2 3.x as an extension of NumPy/numexpr that:
|
|
|
17
20
|
- Supports NumPy ufunc mechanism: mix and match NumPy and Blosc2 computations.
|
|
18
21
|
- Integrates with Numba and Cython via UDFs (User Defined Functions).
|
|
19
22
|
- Adheres to modern NumPy casting rules way better than numexpr.
|
|
20
|
-
- Computes expressions only when needed. They can also be stored for later use.
|
|
21
23
|
- Supports linear algebra operations (like ``blosc2.matmul()``).
|
|
22
24
|
|
|
23
25
|
Install it with::
|
|
@@ -50,7 +50,7 @@ else()
|
|
|
50
50
|
include(FetchContent)
|
|
51
51
|
FetchContent_Declare(blosc2
|
|
52
52
|
GIT_REPOSITORY https://github.com/Blosc/c-blosc2
|
|
53
|
-
GIT_TAG
|
|
53
|
+
GIT_TAG 5fcd6fbf9ffcf613fabdb1eb3a90eeb12f7c04fe # v2.17.1
|
|
54
54
|
)
|
|
55
55
|
FetchContent_MakeAvailable(blosc2)
|
|
56
56
|
include_directories("${blosc2_SOURCE_DIR}/include")
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: blosc2
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.1
|
|
4
4
|
Summary: A fast & compressed ndarray library with a flexible compute engine.
|
|
5
|
-
Home-page: https://github.com/Blosc/python-blosc2
|
|
6
5
|
Author-Email: Blosc Development Team <blosc@blosc.org>
|
|
7
6
|
Maintainer-Email: Blosc Development Team <blosc@blosc.org>
|
|
8
7
|
License: BSD-3-Clause
|
|
@@ -19,8 +18,8 @@ Classifier: Programming Language :: Python :: 3
|
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
-
Project-URL:
|
|
23
|
-
Project-URL:
|
|
21
|
+
Project-URL: homepage, https://github.com/Blosc/python-blosc2
|
|
22
|
+
Project-URL: documentation, https://www.blosc.org/python-blosc2/python-blosc2.html
|
|
24
23
|
Requires-Python: >=3.11
|
|
25
24
|
Requires-Dist: numpy>=1.26
|
|
26
25
|
Requires-Dist: ndindex
|
|
@@ -29,6 +28,7 @@ Requires-Dist: platformdirs
|
|
|
29
28
|
Requires-Dist: numexpr; platform_machine != "wasm32"
|
|
30
29
|
Requires-Dist: py-cpuinfo; platform_machine != "wasm32"
|
|
31
30
|
Requires-Dist: requests
|
|
31
|
+
Provides-Extra: dev
|
|
32
32
|
Requires-Dist: dask; extra == "dev"
|
|
33
33
|
Requires-Dist: h5py; extra == "dev"
|
|
34
34
|
Requires-Dist: hdf5plugin; extra == "dev"
|
|
@@ -42,9 +42,11 @@ Requires-Dist: ruff; extra == "dev"
|
|
|
42
42
|
Requires-Dist: s3fs; extra == "dev"
|
|
43
43
|
Requires-Dist: xarray; extra == "dev"
|
|
44
44
|
Requires-Dist: zarr; extra == "dev"
|
|
45
|
+
Provides-Extra: test
|
|
45
46
|
Requires-Dist: pytest; extra == "test"
|
|
46
47
|
Requires-Dist: psutil; platform_machine != "wasm32" and extra == "test"
|
|
47
48
|
Requires-Dist: torch; platform_machine != "wasm32" and extra == "test"
|
|
49
|
+
Provides-Extra: doc
|
|
48
50
|
Requires-Dist: sphinx>=8; extra == "doc"
|
|
49
51
|
Requires-Dist: pydata-sphinx-theme; extra == "doc"
|
|
50
52
|
Requires-Dist: numpydoc; extra == "doc"
|
|
@@ -52,9 +54,6 @@ Requires-Dist: myst-parser; extra == "doc"
|
|
|
52
54
|
Requires-Dist: sphinx-paramlinks; extra == "doc"
|
|
53
55
|
Requires-Dist: nbsphinx; extra == "doc"
|
|
54
56
|
Requires-Dist: sphinx-panels; extra == "doc"
|
|
55
|
-
Provides-Extra: dev
|
|
56
|
-
Provides-Extra: test
|
|
57
|
-
Provides-Extra: doc
|
|
58
57
|
Description-Content-Type: text/x-rst
|
|
59
58
|
|
|
60
59
|
=============
|
|
@@ -82,43 +81,31 @@ A fast & compressed ndarray library with a flexible compute engine
|
|
|
82
81
|
:target: https://github.com/Blosc/python-blosc2/actions/workflows/build.yml
|
|
83
82
|
|
|
84
83
|
|
|
85
|
-
What
|
|
86
|
-
|
|
84
|
+
What is Python-Blosc2?
|
|
85
|
+
=======================
|
|
87
86
|
|
|
88
87
|
Python-Blosc2 is a high-performance compressed ndarray library with a flexible
|
|
89
|
-
compute engine
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
`Zarr <https://zarr.readthedocs.io/en/stable/>`_.
|
|
95
|
-
|
|
96
|
-
Python-Blosc2 is Python wrapper that exposes the C-Blosc2 API, *plus* an
|
|
97
|
-
integrated compute engine. This allows to perform complex calculations on
|
|
98
|
-
compressed data in a way that operands do not need to be in-memory, but can be
|
|
99
|
-
stored on disk or on `the network <https://github.com/ironArray/Caterva2>`_.
|
|
100
|
-
This makes possible to work with data no matter how large it is, and that
|
|
101
|
-
can be stored in a distributed fashion.
|
|
102
|
-
|
|
103
|
-
Most importantly, Python-Blosc2 uses the `C-Blosc2 simple and open format
|
|
88
|
+
compute engine, using `C-Blosc2 <https://www.blosc.org/c-blosc2/c-blosc2.html>`_
|
|
89
|
+
as its compression backend. It allows complex calculations on compressed data,
|
|
90
|
+
whether stored in memory, on disk, or over the network (e.g., via
|
|
91
|
+
`Caterva2 <https://github.com/ironArray/Caterva2>`_). It uses the
|
|
92
|
+
`C-Blosc2 simple and open format
|
|
104
93
|
<https://github.com/Blosc/c-blosc2/blob/main/README_FORMAT.rst>`_ for storing
|
|
105
|
-
compressed data
|
|
106
|
-
|
|
107
|
-
You can find more introductory info about Python-Blosc2 at:
|
|
94
|
+
compressed data.
|
|
108
95
|
|
|
109
|
-
https://www.blosc.org/python-blosc2/getting_started/overview.html
|
|
96
|
+
More info: https://www.blosc.org/python-blosc2/getting_started/overview.html
|
|
110
97
|
|
|
111
98
|
Installing
|
|
112
99
|
==========
|
|
113
100
|
|
|
114
|
-
|
|
115
|
-
|
|
101
|
+
Binary packages are available for major OSes (Win, Mac, Linux) and platforms.
|
|
102
|
+
Install from PyPi using ``pip``:
|
|
116
103
|
|
|
117
104
|
.. code-block:: console
|
|
118
105
|
|
|
119
106
|
pip install blosc2 --upgrade
|
|
120
107
|
|
|
121
|
-
|
|
108
|
+
Conda users can install from conda-forge:
|
|
122
109
|
|
|
123
110
|
.. code-block:: console
|
|
124
111
|
|
|
@@ -131,13 +118,15 @@ The documentation is available here:
|
|
|
131
118
|
|
|
132
119
|
https://blosc.org/python-blosc2/python-blosc2.html
|
|
133
120
|
|
|
134
|
-
|
|
121
|
+
You can find examples at:
|
|
135
122
|
|
|
136
123
|
https://github.com/Blosc/python-blosc2/tree/main/examples
|
|
137
124
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
125
|
+
A tutorial from PyData Global 2024 is available at:
|
|
126
|
+
|
|
127
|
+
https://github.com/Blosc/Python-Blosc2-3.0-tutorial
|
|
128
|
+
|
|
129
|
+
It contains Jupyter notebooks explaining the main features of Python-Blosc2.
|
|
141
130
|
|
|
142
131
|
License
|
|
143
132
|
=======
|
|
@@ -23,43 +23,31 @@ A fast & compressed ndarray library with a flexible compute engine
|
|
|
23
23
|
:target: https://github.com/Blosc/python-blosc2/actions/workflows/build.yml
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
What
|
|
27
|
-
|
|
26
|
+
What is Python-Blosc2?
|
|
27
|
+
=======================
|
|
28
28
|
|
|
29
29
|
Python-Blosc2 is a high-performance compressed ndarray library with a flexible
|
|
30
|
-
compute engine
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
`Zarr <https://zarr.readthedocs.io/en/stable/>`_.
|
|
36
|
-
|
|
37
|
-
Python-Blosc2 is Python wrapper that exposes the C-Blosc2 API, *plus* an
|
|
38
|
-
integrated compute engine. This allows to perform complex calculations on
|
|
39
|
-
compressed data in a way that operands do not need to be in-memory, but can be
|
|
40
|
-
stored on disk or on `the network <https://github.com/ironArray/Caterva2>`_.
|
|
41
|
-
This makes possible to work with data no matter how large it is, and that
|
|
42
|
-
can be stored in a distributed fashion.
|
|
43
|
-
|
|
44
|
-
Most importantly, Python-Blosc2 uses the `C-Blosc2 simple and open format
|
|
30
|
+
compute engine, using `C-Blosc2 <https://www.blosc.org/c-blosc2/c-blosc2.html>`_
|
|
31
|
+
as its compression backend. It allows complex calculations on compressed data,
|
|
32
|
+
whether stored in memory, on disk, or over the network (e.g., via
|
|
33
|
+
`Caterva2 <https://github.com/ironArray/Caterva2>`_). It uses the
|
|
34
|
+
`C-Blosc2 simple and open format
|
|
45
35
|
<https://github.com/Blosc/c-blosc2/blob/main/README_FORMAT.rst>`_ for storing
|
|
46
|
-
compressed data
|
|
47
|
-
|
|
48
|
-
You can find more introductory info about Python-Blosc2 at:
|
|
36
|
+
compressed data.
|
|
49
37
|
|
|
50
|
-
https://www.blosc.org/python-blosc2/getting_started/overview.html
|
|
38
|
+
More info: https://www.blosc.org/python-blosc2/getting_started/overview.html
|
|
51
39
|
|
|
52
40
|
Installing
|
|
53
41
|
==========
|
|
54
42
|
|
|
55
|
-
|
|
56
|
-
|
|
43
|
+
Binary packages are available for major OSes (Win, Mac, Linux) and platforms.
|
|
44
|
+
Install from PyPi using ``pip``:
|
|
57
45
|
|
|
58
46
|
.. code-block:: console
|
|
59
47
|
|
|
60
48
|
pip install blosc2 --upgrade
|
|
61
49
|
|
|
62
|
-
|
|
50
|
+
Conda users can install from conda-forge:
|
|
63
51
|
|
|
64
52
|
.. code-block:: console
|
|
65
53
|
|
|
@@ -72,13 +60,15 @@ The documentation is available here:
|
|
|
72
60
|
|
|
73
61
|
https://blosc.org/python-blosc2/python-blosc2.html
|
|
74
62
|
|
|
75
|
-
|
|
63
|
+
You can find examples at:
|
|
76
64
|
|
|
77
65
|
https://github.com/Blosc/python-blosc2/tree/main/examples
|
|
78
66
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
67
|
+
A tutorial from PyData Global 2024 is available at:
|
|
68
|
+
|
|
69
|
+
https://github.com/Blosc/Python-Blosc2-3.0-tutorial
|
|
70
|
+
|
|
71
|
+
It contains Jupyter notebooks explaining the main features of Python-Blosc2.
|
|
82
72
|
|
|
83
73
|
License
|
|
84
74
|
=======
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# Release notes
|
|
2
2
|
|
|
3
|
+
## Changes from 3.2.0 to 3.2.1
|
|
4
|
+
|
|
5
|
+
* The array containers are now using the `__array_interface__` protocol to
|
|
6
|
+
expose the data in the array. This allows for better interoperability with
|
|
7
|
+
other libraries that support the `__array_interface__` protocol, like NumPy,
|
|
8
|
+
CuPy, etc. Now, the range of functions that can be used within the `blosc2.jit`
|
|
9
|
+
decorator is way larger, and essentially all NumPy functions should work now.
|
|
10
|
+
|
|
11
|
+
See examples at: https://github.com/Blosc/python-blosc2/blob/main/examples/ndarray/jit-numpy-funcs.py
|
|
12
|
+
See benchmarks at: https://github.com/Blosc/python-blosc2/blob/main/bench/ndarray/jit-numpy-funcs.py
|
|
13
|
+
|
|
14
|
+
* The performance of constructors like `arange()`, `linspace()` and `fromiter()`
|
|
15
|
+
has been improved. Now, they can be up to 3x faster, specially with large
|
|
16
|
+
arrays.
|
|
17
|
+
|
|
18
|
+
* C-Blosc2 updated to 2.17.1. This fixes various UB as well as compiler warnings.
|
|
19
|
+
|
|
3
20
|
## Changes from 3.1.1 to 3.2.0
|
|
4
21
|
|
|
5
22
|
* Structured arrays can be larger than 255 bytes now. This was a limitation
|
|
@@ -73,9 +73,9 @@ Tagging
|
|
|
73
73
|
wheels (and tarball!) by downloading the artifacts manually, copying to
|
|
74
74
|
an empty dir (say dist), and upload to PyPI with::
|
|
75
75
|
|
|
76
|
-
rm
|
|
76
|
+
rm wheelhouse/*
|
|
77
77
|
# download artifacts from the tag in github
|
|
78
|
-
twine upload --repository
|
|
78
|
+
twine upload --repository blosc2 wheelhouse/*
|
|
79
79
|
|
|
80
80
|
* Update the latest release in the ``doc/python-blosc2.rst`` file with the new version
|
|
81
81
|
number (and date?). Do a commit::
|
|
@@ -106,6 +106,10 @@ Checking packaging
|
|
|
106
106
|
https://github.com/Blosc/python-blosc2/releases/new
|
|
107
107
|
Add the notes specific for this release.
|
|
108
108
|
|
|
109
|
+
Also, upload the wasm32 wheels to release page in github::
|
|
110
|
+
|
|
111
|
+
[upload e.g.:] blosc2-3.2.0-cp312-cp312-pyodide_2024_0_wasm32.whl
|
|
112
|
+
|
|
109
113
|
|
|
110
114
|
Announcing
|
|
111
115
|
----------
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
.. Try to keep in sync with the README.rst file
|
|
2
|
+
|
|
3
|
+
What is it?
|
|
4
|
+
===========
|
|
5
|
+
|
|
6
|
+
Python-Blosc2 is a high-performance compressed ndarray library with a flexible
|
|
7
|
+
compute engine. It uses the C-Blosc2 library as the compression backend.
|
|
8
|
+
`C-Blosc2 <https://github.com/Blosc/c-blosc2>`_ is the next generation of
|
|
9
|
+
Blosc, an `award-winning <https://www.blosc.org/posts/prize-push-Blosc2/>`_
|
|
10
|
+
library that has been around for more than a decade, and that is being used
|
|
11
|
+
by many projects, including `PyTables <https://www.pytables.org/>`_ or
|
|
12
|
+
`Zarr <https://zarr.readthedocs.io/en/stable/>`_.
|
|
13
|
+
|
|
14
|
+
Python-Blosc2 is a Python wrapper around the C-Blosc2 library, enhanced with
|
|
15
|
+
an integrated compute engine. This allows for complex computations on
|
|
16
|
+
compressed data, whether the operands are in memory, on disk, or
|
|
17
|
+
`accessed over a network <https://github.com/ironArray/Caterva2>`_. This
|
|
18
|
+
capability makes it easier to `work with very large datasets
|
|
19
|
+
<https://ironarray.io/blog/compute-bigger>`_, even in distributed
|
|
20
|
+
environments.
|
|
21
|
+
|
|
22
|
+
Most importantly, Python-Blosc2 uses the
|
|
23
|
+
`C-Blosc2 simple and open format <https://github.com/Blosc/c-blosc2/blob/main/README_FORMAT.rst>`_
|
|
24
|
+
for storing compressed data. This facilitates seamless integration with other
|
|
25
|
+
systems and tools.
|
|
26
|
+
|
|
27
|
+
Interacting with the Ecosystem
|
|
28
|
+
==============================
|
|
29
|
+
|
|
30
|
+
Python-Blosc2 is designed to integrate seamlessly with existing libraries
|
|
31
|
+
and tools, offering:
|
|
32
|
+
|
|
33
|
+
* Support for NumPy's `universal functions
|
|
34
|
+
mechanism <https://numpy.org/doc/2.1/reference/ufuncs.html>`_, enabling
|
|
35
|
+
the combination of NumPy and Blosc2 computation engines.
|
|
36
|
+
* Excellent integration with Numba and Cython via
|
|
37
|
+
`User Defined
|
|
38
|
+
Functions <https://www.blosc.org/python-blosc2/getting_started/tutorials/03.lazyarray-udf.html>`_.
|
|
39
|
+
* Lazy expressions that are evaluated only when needed and can be stored
|
|
40
|
+
for future use.
|
|
41
|
+
|
|
42
|
+
Python-Blosc2 leverages both `NumPy <https://numpy.org>`_ and
|
|
43
|
+
`NumExpr <https://numexpr.readthedocs.io/en/latest/>`_ to achieve high
|
|
44
|
+
performance, but with key differences. The main distinctions between the new
|
|
45
|
+
computing engine and NumPy or NumExpr include:
|
|
46
|
+
|
|
47
|
+
* Support for compressed ndarrays stored in memory, on disk, or
|
|
48
|
+
`over the network <https://github.com/ironArray/Caterva2>`_.
|
|
49
|
+
* Ability to evaluate various mathematical expressions, including reductions,
|
|
50
|
+
indexing, and filters.
|
|
51
|
+
* Support for broadcasting operations, enabling operations on arrays with
|
|
52
|
+
different shapes.
|
|
53
|
+
* Improved adherence to NumPy casting rules compared to NumExpr.
|
|
54
|
+
* Support for proxies, facilitating work with compressed data on local or
|
|
55
|
+
remote machines.
|
|
56
|
+
|
|
57
|
+
Data Containers
|
|
58
|
+
===============
|
|
59
|
+
|
|
60
|
+
The main data container objects in Python-Blosc2 are:
|
|
61
|
+
|
|
62
|
+
* ``SChunk``: A 64-bit compressed store suitable for any data type supporting the
|
|
63
|
+
`buffer protocol <https://docs.python.org/3/c-api/buffer.html>`_.
|
|
64
|
+
* ``NDArray``: An N-Dimensional store that mirrors the NumPy API, enhanced with
|
|
65
|
+
efficient compressed data storage.
|
|
66
|
+
|
|
67
|
+
These containers are described in more detail below.
|
|
68
|
+
|
|
69
|
+
SChunk: a 64-bit compressed store
|
|
70
|
+
---------------------------------
|
|
71
|
+
|
|
72
|
+
``SChunk`` is a simple data container that handles setting, expanding and
|
|
73
|
+
getting data and metadata. In contrast to chunks, a super-chunk can update
|
|
74
|
+
and resize the data that it contains, supports user metadata, and has virtually
|
|
75
|
+
unlimited storage capacity (chunks, on the other hand, cannot store more than 2 GB).
|
|
76
|
+
|
|
77
|
+
Additionally, you can convert a SChunk into a contiguous, serialized buffer
|
|
78
|
+
(aka `cframe
|
|
79
|
+
<https://github.com/Blosc/c-blosc2/blob/main/README_CFRAME_FORMAT.rst>`_) and
|
|
80
|
+
vice-versa; as a bonus, the serialization/deserialization process also works
|
|
81
|
+
with NumPy arrays and PyTorch/TensorFlow tensors at lightning-fast speed:
|
|
82
|
+
|
|
83
|
+
.. |compress| image:: https://github.com/Blosc/python-blosc2/blob/main/images/linspace-compress.png?raw=true
|
|
84
|
+
:width: 100%
|
|
85
|
+
:alt: Compression speed for different codecs
|
|
86
|
+
|
|
87
|
+
.. |decompress| image:: https://github.com/Blosc/python-blosc2/blob/main/images/linspace-decompress.png?raw=true
|
|
88
|
+
:width: 100%
|
|
89
|
+
:alt: Decompression speed for different codecs
|
|
90
|
+
|
|
91
|
+
+----------------+---------------+
|
|
92
|
+
| |compress| | |decompress| |
|
|
93
|
+
+----------------+---------------+
|
|
94
|
+
|
|
95
|
+
while reaching excellent compression ratios:
|
|
96
|
+
|
|
97
|
+
.. image:: https://github.com/Blosc/python-blosc2/blob/main/images/pack-array-cratios.png?raw=true
|
|
98
|
+
:width: 75%
|
|
99
|
+
:align: center
|
|
100
|
+
:alt: Compression ratio for different codecs
|
|
101
|
+
|
|
102
|
+
Also, if you are a Mac M1/M2 owner, do yourself a favor and use its native arm64
|
|
103
|
+
arch (yes, we are distributing Mac arm64 wheels too; you're welcome ;-) ):
|
|
104
|
+
|
|
105
|
+
.. |pack_arm| image:: https://github.com/Blosc/python-blosc2/blob/main/images/M1-i386-vs-arm64-pack.png?raw=true
|
|
106
|
+
:width: 100%
|
|
107
|
+
:alt: Compression speed for different codecs on Apple M1
|
|
108
|
+
|
|
109
|
+
.. |unpack_arm| image:: https://github.com/Blosc/python-blosc2/blob/main/images/M1-i386-vs-arm64-unpack.png?raw=true
|
|
110
|
+
:width: 100%
|
|
111
|
+
:alt: Decompression speed for different codecs on Apple M1
|
|
112
|
+
|
|
113
|
+
+------------+--------------+
|
|
114
|
+
| |pack_arm| | |unpack_arm| |
|
|
115
|
+
+------------+--------------+
|
|
116
|
+
|
|
117
|
+
Read more about ``SChunk`` features in our blog entry at:
|
|
118
|
+
https://www.blosc.org/posts/python-blosc2-improvements
|
|
119
|
+
|
|
120
|
+
NDArray: an N-Dimensional store
|
|
121
|
+
-------------------------------
|
|
122
|
+
|
|
123
|
+
A recent feature in Python-Blosc2 is the
|
|
124
|
+
`NDArray <https://www.blosc.org/python-blosc2/reference/ndarray_api.html>`_
|
|
125
|
+
object. It builds upon the ``SChunk`` object, offering a NumPy-like API
|
|
126
|
+
for compressed n-dimensional data.
|
|
127
|
+
|
|
128
|
+
It efficiently reads/writes n-dimensional datasets using an n-dimensional
|
|
129
|
+
two-level partitioning scheme, enabling fine-grained slicing of large,
|
|
130
|
+
compressed data:
|
|
131
|
+
|
|
132
|
+
.. image:: https://github.com/Blosc/python-blosc2/blob/main/images/b2nd-2level-parts.png?raw=true
|
|
133
|
+
:width: 75%
|
|
134
|
+
|
|
135
|
+
As an example, see how the ``NDArray`` object excels at retrieving slices
|
|
136
|
+
orthogonal to different axes of a 4-dimensional dataset:
|
|
137
|
+
|
|
138
|
+
.. image:: https://github.com/Blosc/python-blosc2/blob/main/images/Read-Partial-Slices-B2ND.png?raw=true
|
|
139
|
+
:width: 75%
|
|
140
|
+
|
|
141
|
+
More information is available in this blog post:
|
|
142
|
+
https://www.blosc.org/posts/blosc2-ndim-intro
|
|
143
|
+
|
|
144
|
+
Check this short video explaining `why slicing in a pineapple-style (aka
|
|
145
|
+
double partition) is useful
|
|
146
|
+
<https://www.youtube.com/watch?v=LvP9zxMGBng>`_:
|
|
147
|
+
|
|
148
|
+
.. image:: https://github.com/Blosc/blogsite/blob/master/files/images/slicing-pineapple-style.png?raw=true
|
|
149
|
+
:width: 50%
|
|
150
|
+
:alt: Slicing a dataset in pineapple-style
|
|
151
|
+
:target: https://www.youtube.com/watch?v=LvP9zxMGBng
|
|
152
|
+
|
|
153
|
+
Operating with NDArrays
|
|
154
|
+
=======================
|
|
155
|
+
|
|
156
|
+
Python-Blosc2's ``NDArray`` objects are designed for ease of use,
|
|
157
|
+
demonstrated by this example:
|
|
158
|
+
|
|
159
|
+
.. code-block:: python
|
|
160
|
+
|
|
161
|
+
import blosc2
|
|
162
|
+
|
|
163
|
+
N = 20_000
|
|
164
|
+
# N = 70_000 # for large scenario
|
|
165
|
+
a = blosc2.linspace(0, 1, N * N).reshape(N, N)
|
|
166
|
+
b = blosc2.linspace(1, 2, N * N).reshape(N, N)
|
|
167
|
+
c = blosc2.linspace(-10, 10, N * N).reshape(N, N)
|
|
168
|
+
expr = ((a**3 + blosc2.sin(c * 2)) < b) & (c > 0)
|
|
169
|
+
|
|
170
|
+
out = expr.compute()
|
|
171
|
+
print(out.info)
|
|
172
|
+
|
|
173
|
+
``NDArray`` instances resemble NumPy arrays but store compressed data,
|
|
174
|
+
processed efficiently by Python-Blosc2's engine.
|
|
175
|
+
|
|
176
|
+
When operands fit in memory (20,000 x 20,000), performance nears
|
|
177
|
+
top-tier libraries like NumExpr, exceeding NumPy and Numba, with low memory use
|
|
178
|
+
via default compression. As you can see, Blosc2 compression can speed
|
|
179
|
+
computation via fast codecs and filters, plus efficient CPU cache use.
|
|
180
|
+
|
|
181
|
+
.. image:: https://github.com/Blosc/python-blosc2/blob/main/images/lazyarray-dask-small.png?raw=true
|
|
182
|
+
:width: 100%
|
|
183
|
+
:alt: Performance when operands comfortably fit in-memory
|
|
184
|
+
|
|
185
|
+
For larger datasets exceeding memory, Python-Blosc2 rivals Dask+Zarr in
|
|
186
|
+
performance (70,000 x 70,000).
|
|
187
|
+
|
|
188
|
+
.. image:: https://github.com/Blosc/python-blosc2/blob/main/images/lazyarray-dask-large.png?raw=true
|
|
189
|
+
:width: 100%
|
|
190
|
+
:alt: Performance when operands do not fit in memory (uncompressed)
|
|
191
|
+
|
|
192
|
+
Blosc2 can utilize MKL-enabled Numexpr for optimized transcendental
|
|
193
|
+
functions on Intel compatible CPUs (as used for the above plots).
|
|
194
|
+
|
|
195
|
+
Benchmark notebooks:
|
|
196
|
+
|
|
197
|
+
https://github.com/Blosc/python-blosc2/blob/main/bench/ndarray/lazyarray-dask-small.ipynb
|
|
198
|
+
|
|
199
|
+
https://github.com/Blosc/python-blosc2/blob/main/bench/ndarray/lazyarray-dask-large.ipynb
|
|
200
|
+
|
|
201
|
+
Reductions and disk-based computations
|
|
202
|
+
--------------------------------------
|
|
203
|
+
|
|
204
|
+
One key feature of Python-Blosc2's compute engine is its ability to
|
|
205
|
+
perform reductions on compressed data, optionally stored on disk, enabling
|
|
206
|
+
calculations on datasets too large for memory.
|
|
207
|
+
|
|
208
|
+
Example:
|
|
209
|
+
|
|
210
|
+
.. code-block:: python
|
|
211
|
+
|
|
212
|
+
import blosc2
|
|
213
|
+
|
|
214
|
+
N = 20_000 # for small scenario
|
|
215
|
+
# N = 100_000 # for large scenario
|
|
216
|
+
a = blosc2.linspace(0, 1, N * N, shape=(N, N), urlpath="a.b2nd", mode="w")
|
|
217
|
+
b = blosc2.linspace(1, 2, N * N, shape=(N, N), urlpath="b.b2nd", mode="w")
|
|
218
|
+
c = blosc2.linspace(-10, 10, N * N, shape=(N, N)) # small and in-memory
|
|
219
|
+
# Expression
|
|
220
|
+
expr = np.sum(((a**3 + np.sin(a * 2)) < c) & (b > 0), axis=1)
|
|
221
|
+
|
|
222
|
+
# Evaluate and get a NDArray as result
|
|
223
|
+
out = expr.compute()
|
|
224
|
+
print(out.info)
|
|
225
|
+
|
|
226
|
+
This example computes the sum of a boolean array resulting from an
|
|
227
|
+
expression, where the operands are on disk, with the result being a
|
|
228
|
+
1D array stored in memory (or optionally on disk via the ``out=``
|
|
229
|
+
parameter in ``compute()`` or ``sum()`` functions).
|
|
230
|
+
|
|
231
|
+
Check out a blog post about this feature, with performance comparisons, at:
|
|
232
|
+
https://ironarray.io/blog/compute-bigger
|
|
233
|
+
|
|
234
|
+
Hopefully, this overview has provided a good understanding of
|
|
235
|
+
Python-Blosc2's capabilities. To begin your journey with Python-Blosc2,
|
|
236
|
+
proceed to the `installation instructions <installation>`_.
|
|
237
|
+
Then explore the `tutorials <tutorials>`_ and
|
|
238
|
+
`reference <../reference>`_ sections for further information!
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
<p style="text-align: center; color: black; background-color: rgba(230, 169, 9, 0.65);">
|
|
8
8
|
<a href="https://github.com/Blosc/python-blosc2/blob/main/RELEASE_NOTES.md"
|
|
9
|
-
style="font-size: 1.5em;">Version 3.
|
|
9
|
+
style="font-size: 1.5em;">Version 3.2.0 released on 2025-02-27!</a>
|
|
10
10
|
<span style="display: inline-block; width: 20px;"></span>
|
|
11
11
|
<span style="font-family: monospace;">pip install blosc2 -U</span>
|
|
12
12
|
</p>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#######################################################################
|
|
2
|
+
# Copyright (c) 2019-present, Blosc Development Team <blosc@blosc.org>
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
#
|
|
5
|
+
# This source code is licensed under a BSD-style license (found in the
|
|
6
|
+
# LICENSE file in the root directory of this source tree)
|
|
7
|
+
#######################################################################
|
|
8
|
+
|
|
9
|
+
# Examples of using the jit decorator with arbitrary NumPy functions.
|
|
10
|
+
# These functions are not optimized for performance, but they show how
|
|
11
|
+
# to use the jit decorator with NumPy functions.
|
|
12
|
+
# You can find benchmarks for this example in the bench/ndarray directory
|
|
13
|
+
|
|
14
|
+
import numpy as np
|
|
15
|
+
|
|
16
|
+
import blosc2
|
|
17
|
+
|
|
18
|
+
# Create some sample data
|
|
19
|
+
a = blosc2.linspace(0, 1, 10 * 100, dtype="float32", shape=(10, 100))
|
|
20
|
+
b = blosc2.linspace(1, 2, 10 * 100, dtype="float32", shape=(10, 100))
|
|
21
|
+
c = blosc2.linspace(-10, 10, 10, dtype="float32", shape=(100,))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Example 1: Basic usage of the jit decorator with reduction
|
|
25
|
+
@blosc2.jit
|
|
26
|
+
def expr_jit(a, b, c):
|
|
27
|
+
# This function computes a cumulative sum reduction along axis 0
|
|
28
|
+
return np.cumsum(((a**3 + np.sin(a * 2)) < c) & (b > 0), axis=0)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# Call the function with the jit decorator
|
|
32
|
+
result = expr_jit(a, b, c)
|
|
33
|
+
print(f"Example 1 result[0, 0:10]: {result[0, 0:10]}")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
# Example 2: Using the jit decorator with an out parameter for reduction
|
|
37
|
+
out = np.zeros(result.shape, dtype=np.int64)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@blosc2.jit
|
|
41
|
+
def expr_jit_out(a, b, c):
|
|
42
|
+
return np.cumulative_prod(((a**3 + np.sin(a * 2)) < c) & (b > 0), axis=0, out=out, include_initial=False)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# Call the function with the jit decorator and out parameter
|
|
46
|
+
result = expr_jit_out(a, b, c)
|
|
47
|
+
print(f"Example 2 result[0, 0:10]: {result[0, 0:10]}")
|
|
48
|
+
print("Example 2 out[0, 0:10] array:", out[0, 0:10]) # the 'out' array should now contain the same result
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# Example 3: Using the jit decorator with a combination of NumPy functions
|
|
52
|
+
@blosc2.jit
|
|
53
|
+
def expr_jit_diff(a, b, c):
|
|
54
|
+
return np.diff((a**3 + np.cumsum(b * 2, axis=1) + c), axis=1)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
# Call the function with the jit decorator and custom parameters
|
|
58
|
+
result = expr_jit_diff(a, b, c)
|
|
59
|
+
print(f"Example 3 result[0, 0:5]: {result[0, 0:5]}")
|
|
@@ -40,7 +40,7 @@ dependencies = [
|
|
|
40
40
|
"py-cpuinfo; platform_machine != 'wasm32'",
|
|
41
41
|
"requests",
|
|
42
42
|
]
|
|
43
|
-
version = "3.2.
|
|
43
|
+
version = "3.2.1"
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
[project.optional-dependencies]
|
|
@@ -92,6 +92,9 @@ test-command = "python -c \"import blosc2; blosc2.print_versions()\""
|
|
|
92
92
|
manylinux-x86_64-image = "manylinux2014"
|
|
93
93
|
manylinux-aarch64-image = "manylinux2014"
|
|
94
94
|
|
|
95
|
+
[tool.scikit-build.sdist]
|
|
96
|
+
exclude = ["bench*", ".github*"]
|
|
97
|
+
|
|
95
98
|
[tool.ruff]
|
|
96
99
|
line-length = 109
|
|
97
100
|
extend-exclude = ["bench"]
|