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.
Files changed (305) hide show
  1. {blosc2-3.2.0 → blosc2-3.2.1}/.pre-commit-config.yaml +1 -1
  2. {blosc2-3.2.0 → blosc2-3.2.1}/ANNOUNCE.rst +10 -8
  3. {blosc2-3.2.0 → blosc2-3.2.1}/CMakeLists.txt +1 -1
  4. {blosc2-3.2.0 → blosc2-3.2.1}/PKG-INFO +25 -36
  5. {blosc2-3.2.0 → blosc2-3.2.1}/README.rst +18 -28
  6. {blosc2-3.2.0 → blosc2-3.2.1}/RELEASE_NOTES.md +17 -0
  7. {blosc2-3.2.0 → blosc2-3.2.1}/RELEASING.rst +6 -2
  8. blosc2-3.2.1/doc/getting_started/overview.rst +238 -0
  9. blosc2-3.2.1/doc/getting_started/tutorials/images/reductions/3D-cube-plane.png +0 -0
  10. {blosc2-3.2.0 → blosc2-3.2.1}/doc/python-blosc2.rst +1 -1
  11. blosc2-3.2.1/examples/ndarray/jit-numpy-funcs.py +59 -0
  12. {blosc2-3.2.0 → blosc2-3.2.1}/pyproject.toml +4 -1
  13. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/blosc2_ext.pyx +65 -0
  14. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/core.py +26 -2
  15. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/lazyexpr.py +47 -2
  16. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/ndarray.py +20 -9
  17. blosc2-3.2.1/src/blosc2/version.py +1 -0
  18. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_evaluate.py +15 -0
  19. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_full.py +3 -1
  20. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_lazyexpr.py +17 -2
  21. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_matmul.py +2 -0
  22. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_nans.py +1 -1
  23. blosc2-3.2.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -26
  24. blosc2-3.2.0/.github/dependabot.yml +0 -7
  25. blosc2-3.2.0/.github/workflows/build.yml +0 -29
  26. blosc2-3.2.0/.github/workflows/cibuildwheels.yml +0 -141
  27. blosc2-3.2.0/.github/workflows/wasm.yml +0 -64
  28. blosc2-3.2.0/bench/compress_numpy.py +0 -69
  29. blosc2-3.2.0/bench/encode-itrunc-Linux-i13900K.ipynb +0 -528
  30. blosc2-3.2.0/bench/encode-itrunc-MacOS-M1.ipynb +0 -528
  31. blosc2-3.2.0/bench/encode-sparse-MacOS-Intel.ipynb +0 -417
  32. blosc2-3.2.0/bench/fill_special.py +0 -53
  33. blosc2-3.2.0/bench/get_slice.py +0 -54
  34. blosc2-3.2.0/bench/io.py +0 -148
  35. blosc2-3.2.0/bench/ndarray/broadcast_expr.py +0 -44
  36. blosc2-3.2.0/bench/ndarray/compare_getslice.py +0 -244
  37. blosc2-3.2.0/bench/ndarray/compute_expr_numba.py +0 -147
  38. blosc2-3.2.0/bench/ndarray/compute_expr_udf.ipynb +0 -361
  39. blosc2-3.2.0/bench/ndarray/compute_fields.py +0 -67
  40. blosc2-3.2.0/bench/ndarray/compute_where.py +0 -95
  41. blosc2-3.2.0/bench/ndarray/copy_postfilter.py +0 -57
  42. blosc2-3.2.0/bench/ndarray/download_data.py +0 -40
  43. blosc2-3.2.0/bench/ndarray/era5-pds/measurements-i10k.parquet +0 -0
  44. blosc2-3.2.0/bench/ndarray/era5-pds/measurements-i13k-always-split.parquet +0 -0
  45. blosc2-3.2.0/bench/ndarray/era5-pds/measurements-i13k-never-split.parquet +0 -0
  46. blosc2-3.2.0/bench/ndarray/era5-pds/measurements-i13k.parquet +0 -0
  47. blosc2-3.2.0/bench/ndarray/era5-pds/measurements-m1.parquet +0 -0
  48. blosc2-3.2.0/bench/ndarray/era5-pds/measurements-ryzen3.parquet +0 -0
  49. blosc2-3.2.0/bench/ndarray/jit-expr.py +0 -154
  50. blosc2-3.2.0/bench/ndarray/jit-reduc-float64-lossy-plot.py +0 -179
  51. blosc2-3.2.0/bench/ndarray/jit-reduc-float64-plot-dask.py +0 -181
  52. blosc2-3.2.0/bench/ndarray/jit-reduc-float64-plot-semilogx.py +0 -272
  53. blosc2-3.2.0/bench/ndarray/jit-reduc-float64-plot.py +0 -294
  54. blosc2-3.2.0/bench/ndarray/jit-reduc-sizes-dask.py +0 -204
  55. blosc2-3.2.0/bench/ndarray/jit-reduc-sizes.py +0 -145
  56. blosc2-3.2.0/bench/ndarray/jit-reduc.py +0 -144
  57. blosc2-3.2.0/bench/ndarray/lazyarray-constructors.py +0 -67
  58. blosc2-3.2.0/bench/ndarray/lazyarray-dask-large.ipynb +0 -8831
  59. blosc2-3.2.0/bench/ndarray/lazyarray-dask-small.ipynb +0 -3179
  60. blosc2-3.2.0/bench/ndarray/lazyarray-expr-large.ipynb +0 -7023
  61. blosc2-3.2.0/bench/ndarray/lazyarray-expr.ipynb +0 -2992
  62. blosc2-3.2.0/bench/ndarray/matmul.ipynb +0 -4941
  63. blosc2-3.2.0/bench/ndarray/plot_transcode_data.ipynb +0 -349
  64. blosc2-3.2.0/bench/ndarray/reduce_expr.py +0 -75
  65. blosc2-3.2.0/bench/ndarray/run-jit-reduc-sizes.sh +0 -5
  66. blosc2-3.2.0/bench/ndarray/transcode_data.py +0 -156
  67. blosc2-3.2.0/bench/pack_compress.py +0 -159
  68. blosc2-3.2.0/bench/pack_large.py +0 -58
  69. blosc2-3.2.0/bench/pack_tensor.py +0 -170
  70. blosc2-3.2.0/bench/set_slice.py +0 -57
  71. blosc2-3.2.0/bench/sum_postfilter.py +0 -57
  72. blosc2-3.2.0/doc/getting_started/overview.rst +0 -299
  73. blosc2-3.2.0/doc/getting_started/tutorials/images/reductions/3D-cube-plane.png +0 -0
  74. blosc2-3.2.0/src/blosc2/version.py +0 -1
  75. {blosc2-3.2.0 → blosc2-3.2.1}/.gitignore +0 -0
  76. {blosc2-3.2.0 → blosc2-3.2.1}/.guix/modules/python-blosc2-package.scm +0 -0
  77. {blosc2-3.2.0 → blosc2-3.2.1}/.guix-channel +0 -0
  78. {blosc2-3.2.0 → blosc2-3.2.1}/CONTRIBUTING.rst +0 -0
  79. {blosc2-3.2.0 → blosc2-3.2.1}/LICENSE.txt +0 -0
  80. {blosc2-3.2.0 → blosc2-3.2.1}/README_DEVELOPERS.md +0 -0
  81. {blosc2-3.2.0 → blosc2-3.2.1}/code_of_conduct.md +0 -0
  82. {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/blosc-favicon_32x32.png +0 -0
  83. {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/blosc-favicon_64x64.png +0 -0
  84. {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/blosc-logo_128.png +0 -0
  85. {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/blosc-logo_256.png +0 -0
  86. {blosc2-3.2.0 → blosc2-3.2.1}/doc/_static/css/custom.css +0 -0
  87. {blosc2-3.2.0 → blosc2-3.2.1}/doc/conf.py +0 -0
  88. {blosc2-3.2.0 → blosc2-3.2.1}/doc/development/code-of-conduct.rst +0 -0
  89. {blosc2-3.2.0 → blosc2-3.2.1}/doc/development/contributing.rst +0 -0
  90. {blosc2-3.2.0 → blosc2-3.2.1}/doc/development/index.rst +0 -0
  91. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/index.rst +0 -0
  92. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/installation.rst +0 -0
  93. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/01.ndarray-basics.ipynb +0 -0
  94. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/02.lazyarray-expressions.ipynb +0 -0
  95. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/03.lazyarray-udf.ipynb +0 -0
  96. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/04.reductions.ipynb +0 -0
  97. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/05.persistent-reductions.ipynb +0 -0
  98. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/06.remote_proxy.ipynb +0 -0
  99. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/07.schunk-basics.ipynb +0 -0
  100. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/08.schunk-slicing_and_beyond.ipynb +0 -0
  101. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/10.ucodecs-ufilters.ipynb +0 -0
  102. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/11.prefilters.ipynb +0 -0
  103. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/12.postfilters.ipynb +0 -0
  104. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/blosc2-pipeline.png +0 -0
  105. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/blosc2-pipeline.svg +0 -0
  106. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/lazyexpr-broadcast.png +0 -0
  107. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/reductions/3D-cube.png +0 -0
  108. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/reductions/memory-access-2D-x.png +0 -0
  109. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/reductions/memory-access-2D-y.png +0 -0
  110. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/remote_proxy.png +0 -0
  111. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/backward.png +0 -0
  112. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/backward.svg +0 -0
  113. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/decoder.png +0 -0
  114. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/decoder.svg +0 -0
  115. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/decoder2.png +0 -0
  116. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/decoder2.svg +0 -0
  117. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/encoder.png +0 -0
  118. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/encoder.svg +0 -0
  119. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/encoder2.png +0 -0
  120. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/encoder2.svg +0 -0
  121. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/forward.png +0 -0
  122. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials/images/ucodecs-filters/forward.svg +0 -0
  123. {blosc2-3.2.0 → blosc2-3.2.1}/doc/getting_started/tutorials.rst +0 -0
  124. {blosc2-3.2.0 → blosc2-3.2.1}/doc/index.rst +0 -0
  125. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/array_operations.rst +0 -0
  126. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.__getitem__.rst +0 -0
  127. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.__init__.rst +0 -0
  128. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.__len__.rst +0 -0
  129. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.__setitem__.rst +0 -0
  130. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.append_data.rst +0 -0
  131. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.decompress_chunk.rst +0 -0
  132. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.delete_chunk.rst +0 -0
  133. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.fill_special.rst +0 -0
  134. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.filler.rst +0 -0
  135. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.get_chunk.rst +0 -0
  136. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.get_slice.rst +0 -0
  137. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.insert_chunk.rst +0 -0
  138. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.insert_data.rst +0 -0
  139. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.iterchunks.rst +0 -0
  140. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.iterchunks_info.rst +0 -0
  141. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.postfilter.rst +0 -0
  142. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.prefilter.rst +0 -0
  143. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.remove_postfilter.rst +0 -0
  144. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.remove_prefilter.rst +0 -0
  145. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.to_cframe.rst +0 -0
  146. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.update_chunk.rst +0 -0
  147. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/autofiles/schunk/blosc2.schunk.SChunk.update_data.rst +0 -0
  148. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/c2array.rst +0 -0
  149. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/classes.rst +0 -0
  150. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/decorators.rst +0 -0
  151. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/index.rst +0 -0
  152. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/lazy_functions.rst +0 -0
  153. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/lazyarray.rst +0 -0
  154. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/linear_algebra.rst +0 -0
  155. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/low_level.rst +0 -0
  156. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/ndarray.rst +0 -0
  157. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/ndfield.rst +0 -0
  158. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/proxy.rst +0 -0
  159. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/proxyndsource.rst +0 -0
  160. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/proxysource.rst +0 -0
  161. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/reduction_functions.rst +0 -0
  162. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/save_load.rst +0 -0
  163. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/schunk.rst +0 -0
  164. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/storage.rst +0 -0
  165. {blosc2-3.2.0 → blosc2-3.2.1}/doc/reference/utilities.rst +0 -0
  166. {blosc2-3.2.0 → blosc2-3.2.1}/doc/release_notes/index.md +0 -0
  167. {blosc2-3.2.0 → blosc2-3.2.1}/examples/btune.py +0 -0
  168. {blosc2-3.2.0 → blosc2-3.2.1}/examples/compress2_decompress2.py +0 -0
  169. {blosc2-3.2.0 → blosc2-3.2.1}/examples/compress_decompress.py +0 -0
  170. {blosc2-3.2.0 → blosc2-3.2.1}/examples/filler.py +0 -0
  171. {blosc2-3.2.0 → blosc2-3.2.1}/examples/gil.py +0 -0
  172. {blosc2-3.2.0 → blosc2-3.2.1}/examples/mmap-rw.py +0 -0
  173. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/arange-constructor.py +0 -0
  174. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/asarray_.py +0 -0
  175. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/broadcast_expr.py +0 -0
  176. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/buffer.py +0 -0
  177. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/bytedelta_filter.py +0 -0
  178. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/c2array_expr.py +0 -0
  179. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/compute_expr.py +0 -0
  180. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/compute_fields.py +0 -0
  181. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/compute_udf_numba.py +0 -0
  182. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/compute_where.py +0 -0
  183. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/copy_.py +0 -0
  184. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/empty_.py +0 -0
  185. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/eye-constructor.py +0 -0
  186. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/filter_sort_fields.py +0 -0
  187. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/formats.py +0 -0
  188. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/fromiter-constructor.py +0 -0
  189. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/general_expressions.py +0 -0
  190. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/getitem.py +0 -0
  191. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/iterchunks_info.py +0 -0
  192. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/jit-expr.py +0 -0
  193. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/jit-reduc.py +0 -0
  194. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/linspace-constructor.py +0 -0
  195. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/lists-vs-bools-idx.py +0 -0
  196. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/meta.py +0 -0
  197. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/ndarray_copy.py +0 -0
  198. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/ndmean.py +0 -0
  199. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/persistency.py +0 -0
  200. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/proxy-carray.py +0 -0
  201. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/proxy-ndarray.py +0 -0
  202. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/reduce_and_enlarge.py +0 -0
  203. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/reduce_expr.py +0 -0
  204. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/reduce_expr_save.py +0 -0
  205. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/reduce_string_expr.py +0 -0
  206. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/resize_.py +0 -0
  207. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/work_with_numpy.py +0 -0
  208. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ndarray/zfp_codec.py +0 -0
  209. {blosc2-3.2.0 → blosc2-3.2.1}/examples/pack_array.py +0 -0
  210. {blosc2-3.2.0 → blosc2-3.2.1}/examples/pack_tensor.py +0 -0
  211. {blosc2-3.2.0 → blosc2-3.2.1}/examples/postfilter1.py +0 -0
  212. {blosc2-3.2.0 → blosc2-3.2.1}/examples/postfilter2.py +0 -0
  213. {blosc2-3.2.0 → blosc2-3.2.1}/examples/postfilter3.py +0 -0
  214. {blosc2-3.2.0 → blosc2-3.2.1}/examples/prefilter.py +0 -0
  215. {blosc2-3.2.0 → blosc2-3.2.1}/examples/save_tensor.py +0 -0
  216. {blosc2-3.2.0 → blosc2-3.2.1}/examples/schunk.py +0 -0
  217. {blosc2-3.2.0 → blosc2-3.2.1}/examples/schunk_roundtrip.py +0 -0
  218. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ucodecs.py +0 -0
  219. {blosc2-3.2.0 → blosc2-3.2.1}/examples/ufilters.py +0 -0
  220. {blosc2-3.2.0 → blosc2-3.2.1}/examples/vlmeta.py +0 -0
  221. {blosc2-3.2.0 → blosc2-3.2.1}/generate_version.py +0 -0
  222. {blosc2-3.2.0 → blosc2-3.2.1}/guix.scm +0 -0
  223. {blosc2-3.2.0 → blosc2-3.2.1}/images/Complete-Write-Read-B2ND.png +0 -0
  224. {blosc2-3.2.0 → blosc2-3.2.1}/images/M1-i386-vs-arm64-pack.png +0 -0
  225. {blosc2-3.2.0 → blosc2-3.2.1}/images/M1-i386-vs-arm64-unpack.png +0 -0
  226. {blosc2-3.2.0 → blosc2-3.2.1}/images/Read-Partial-Slices-B2ND.png +0 -0
  227. {blosc2-3.2.0 → blosc2-3.2.1}/images/b2nd-2level-parts.png +0 -0
  228. {blosc2-3.2.0 → blosc2-3.2.1}/images/eval-expr-full-mem-M2.png +0 -0
  229. {blosc2-3.2.0 → blosc2-3.2.1}/images/eval-expr-scarce-mem-M2.png +0 -0
  230. {blosc2-3.2.0 → blosc2-3.2.1}/images/lazyarray-dask-large.png +0 -0
  231. {blosc2-3.2.0 → blosc2-3.2.1}/images/lazyarray-dask-small.png +0 -0
  232. {blosc2-3.2.0 → blosc2-3.2.1}/images/lazyarray-expr-large.png +0 -0
  233. {blosc2-3.2.0 → blosc2-3.2.1}/images/lazyarray-expr.png +0 -0
  234. {blosc2-3.2.0 → blosc2-3.2.1}/images/linspace-compress.png +0 -0
  235. {blosc2-3.2.0 → blosc2-3.2.1}/images/linspace-decompress.png +0 -0
  236. {blosc2-3.2.0 → blosc2-3.2.1}/images/pack-array-cratios.png +0 -0
  237. {blosc2-3.2.0 → blosc2-3.2.1}/images/reduc-float64-amd.png +0 -0
  238. {blosc2-3.2.0 → blosc2-3.2.1}/images/reduc-float64-log-amd.png +0 -0
  239. {blosc2-3.2.0 → blosc2-3.2.1}/pytest.ini +0 -0
  240. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/__init__.py +0 -0
  241. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/c2array.py +0 -0
  242. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/helpers.py +0 -0
  243. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/info.py +0 -0
  244. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/proxy.py +0 -0
  245. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/schunk.py +0 -0
  246. {blosc2-3.2.0 → blosc2-3.2.1}/src/blosc2/storage.py +0 -0
  247. {blosc2-3.2.0 → blosc2-3.2.1}/tests/conftest.py +0 -0
  248. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_auto_parts.py +0 -0
  249. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_buffer.py +0 -0
  250. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_c2array_expr.py +0 -0
  251. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_c2array_reductions.py +0 -0
  252. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_c2array_udf.py +0 -0
  253. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_copy.py +0 -0
  254. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_empty.py +0 -0
  255. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_get_slice_nchunks.py +0 -0
  256. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_getitem.py +0 -0
  257. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_iterchunks_info.py +0 -0
  258. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_jit.py +0 -0
  259. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_lazyexpr_fields.py +0 -0
  260. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_lazyudf.py +0 -0
  261. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_lossy.py +0 -0
  262. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_metalayers.py +0 -0
  263. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_mode.py +0 -0
  264. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_ndarray.py +0 -0
  265. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_numpy.py +0 -0
  266. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_persistency.py +0 -0
  267. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_proxy.py +0 -0
  268. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_proxy_c2array.py +0 -0
  269. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_proxy_expr.py +0 -0
  270. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_reductions.py +0 -0
  271. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_resize.py +0 -0
  272. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_setitem.py +0 -0
  273. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_slice.py +0 -0
  274. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_squeeze.py +0 -0
  275. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_struct_dtype.py +0 -0
  276. {blosc2-3.2.0 → blosc2-3.2.1}/tests/ndarray/test_zeros.py +0 -0
  277. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_bytes_array.py +0 -0
  278. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_comp_info.py +0 -0
  279. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_compress2.py +0 -0
  280. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_compression_parameters.py +0 -0
  281. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_compressors.py +0 -0
  282. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_decompress.py +0 -0
  283. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_iterchunks.py +0 -0
  284. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_mmap.py +0 -0
  285. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_open.py +0 -0
  286. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_open_c2array.py +0 -0
  287. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_pathlib.py +0 -0
  288. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_postfilters.py +0 -0
  289. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_prefilters.py +0 -0
  290. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_proxy_schunk.py +0 -0
  291. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_python_blosc.py +0 -0
  292. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk.py +0 -0
  293. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_constructor.py +0 -0
  294. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_delete.py +0 -0
  295. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_get_slice.py +0 -0
  296. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_get_slice_nchunks.py +0 -0
  297. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_insert.py +0 -0
  298. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_set_slice.py +0 -0
  299. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_schunk_update.py +0 -0
  300. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_storage.py +0 -0
  301. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_tensor.py +0 -0
  302. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_ucodecs.py +0 -0
  303. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_ufilters.py +0 -0
  304. {blosc2-3.2.0 → blosc2-3.2.1}/tests/test_vlmeta.py +0 -0
  305. {blosc2-3.2.0 → blosc2-3.2.1}/update_version.py +0 -0
@@ -16,7 +16,7 @@ repos:
16
16
  - id: trailing-whitespace
17
17
 
18
18
  - repo: https://github.com/astral-sh/ruff-pre-commit
19
- rev: v0.9.4
19
+ rev: v0.9.9
20
20
  hooks:
21
21
  - id: ruff
22
22
  args: ["--fix", "--show-fixes"]
@@ -1,13 +1,16 @@
1
- Announcing Python-Blosc2 3.2.0
1
+ Announcing Python-Blosc2 3.2.1
2
2
  ==============================
3
3
 
4
- This is a minor release where we fixed some bugs related with the
5
- maximum type size supported by Blosc2; now, the maximum size is
6
- 512 MB (compared to 255 bytes in previous versions). We are also
7
- introducing WASM32 wheels for the first time.
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
- We also added new ``blosc2.matmul()`` function for computing matrix
10
- multiplication on NDArray instances.
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 55a103239b24f8b4e07dafa5a289ad62bfade524 # v2.17.0
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
1
+ Metadata-Version: 2.2
2
2
  Name: blosc2
3
- Version: 3.2.0
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: Homepage, https://github.com/Blosc/python-blosc2
23
- Project-URL: Documentation, https://www.blosc.org/python-blosc2/python-blosc2.html
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 it is
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. It uses the C-Blosc2 library as the compression backend.
90
- `C-Blosc2 <https://github.com/Blosc/c-blosc2>`_ is the next generation of
91
- Blosc, an `award-winning <https://www.blosc.org/posts/prize-push-Blosc2/>`_
92
- library that has been around for more than a decade, and that is been used
93
- by many projects, including `PyTables <https://www.pytables.org/>`_ or
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, making it easy to integrate with other systems and tools.
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
- Blosc2 now provides Python wheels for the major OS (Win, Mac and Linux) and platforms.
115
- You can install the binary packages from PyPi using ``pip``:
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
- For conda users, you can install the package from the conda-forge channel:
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
- Additionally, you can find some examples at:
121
+ You can find examples at:
135
122
 
136
123
  https://github.com/Blosc/python-blosc2/tree/main/examples
137
124
 
138
- Finally, we taught a tutorial at the `PyData Global 2024 <https://pydata.org/global2024/>`_
139
- that you can find at: https://github.com/Blosc/Python-Blosc2-3.0-tutorial. There you will
140
- find different Jupyter notebook that explains the main features of Python-Blosc2.
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 it is
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. It uses the C-Blosc2 library as the compression backend.
31
- `C-Blosc2 <https://github.com/Blosc/c-blosc2>`_ is the next generation of
32
- Blosc, an `award-winning <https://www.blosc.org/posts/prize-push-Blosc2/>`_
33
- library that has been around for more than a decade, and that is been used
34
- by many projects, including `PyTables <https://www.pytables.org/>`_ or
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, making it easy to integrate with other systems and tools.
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
- Blosc2 now provides Python wheels for the major OS (Win, Mac and Linux) and platforms.
56
- You can install the binary packages from PyPi using ``pip``:
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
- For conda users, you can install the package from the conda-forge channel:
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
- Additionally, you can find some examples at:
63
+ You can find examples at:
76
64
 
77
65
  https://github.com/Blosc/python-blosc2/tree/main/examples
78
66
 
79
- Finally, we taught a tutorial at the `PyData Global 2024 <https://pydata.org/global2024/>`_
80
- that you can find at: https://github.com/Blosc/Python-Blosc2-3.0-tutorial. There you will
81
- find different Jupyter notebook that explains the main features of Python-Blosc2.
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 dist/*
76
+ rm wheelhouse/*
77
77
  # download artifacts from the tag in github
78
- twine upload --repository blosc dist/*
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.1.0 released on 2025-02-13!</a>
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.0"
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"]