blosc2 4.1.2__tar.gz → 4.2.0__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 (403) hide show
  1. {blosc2-4.1.2 → blosc2-4.2.0}/.pre-commit-config.yaml +1 -1
  2. blosc2-4.2.0/AGENTS.md +53 -0
  3. blosc2-4.2.0/ANNOUNCE.rst +86 -0
  4. {blosc2-4.1.2 → blosc2-4.2.0}/CMakeLists.txt +26 -4
  5. blosc2-4.2.0/CONTRIBUTING.rst +45 -0
  6. {blosc2-4.1.2 → blosc2-4.2.0}/PKG-INFO +5 -1
  7. {blosc2-4.1.2 → blosc2-4.2.0}/README_DEVELOPERS.md +31 -1
  8. {blosc2-4.1.2 → blosc2-4.2.0}/RELEASE_NOTES.md +79 -1
  9. {blosc2-4.1.2 → blosc2-4.2.0}/RELEASING.rst +3 -5
  10. {blosc2-4.1.2 → blosc2-4.2.0}/ROADMAP-TO-4.0.md +1 -1
  11. {blosc2-4.1.2 → blosc2-4.2.0}/doc/conf.py +21 -81
  12. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/overview.rst +5 -5
  13. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/03.lazyarray-udf-kernels.ipynb +5 -5
  14. blosc2-4.2.0/doc/getting_started/tutorials/11.objectarray.ipynb +325 -0
  15. blosc2-4.2.0/doc/getting_started/tutorials/12.batcharray.ipynb +495 -0
  16. blosc2-4.2.0/doc/getting_started/tutorials/13.containers.ipynb +583 -0
  17. blosc2-4.2.0/doc/getting_started/tutorials/13.ctable-basics.ipynb +2873 -0
  18. blosc2-4.2.0/doc/getting_started/tutorials/14.indexing-arrays.ipynb +659 -0
  19. blosc2-4.2.0/doc/getting_started/tutorials/15.indexing-ctables.ipynb +532 -0
  20. blosc2-4.2.0/doc/getting_started/tutorials/images/containers/README.md +20 -0
  21. blosc2-4.2.0/doc/getting_started/tutorials/images/containers/overview.svg +783 -0
  22. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials.rst +6 -0
  23. {blosc2-4.1.2 → blosc2-4.2.0}/doc/python-blosc2.rst +1 -1
  24. blosc2-4.2.0/doc/reference/batch_array.rst +93 -0
  25. blosc2-4.2.0/doc/reference/classes.rst +148 -0
  26. blosc2-4.2.0/doc/reference/ctable.rst +627 -0
  27. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/dict_store.rst +7 -1
  28. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/embed_store.rst +1 -1
  29. blosc2-4.2.0/doc/reference/index_class.rst +36 -0
  30. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/index_funcs.rst +1 -3
  31. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/lazyarray.rst +12 -3
  32. blosc2-4.2.0/doc/reference/list_array.rst +78 -0
  33. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/misc.rst +72 -2
  34. blosc2-4.2.0/doc/reference/msgpack_serialization.rst +125 -0
  35. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/ndarray.rst +1 -1
  36. blosc2-4.2.0/doc/reference/objectarray.rst +86 -0
  37. blosc2-4.2.0/doc/reference/ref.rst +13 -0
  38. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/save_load.rst +2 -0
  39. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/schunk.rst +24 -0
  40. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/tree_store.rst +1 -1
  41. blosc2-4.2.0/examples/batch_array.py +73 -0
  42. blosc2-4.2.0/examples/ctable/aggregates.py +74 -0
  43. blosc2-4.2.0/examples/ctable/arrow_interop.py +83 -0
  44. blosc2-4.2.0/examples/ctable/basics.py +62 -0
  45. blosc2-4.2.0/examples/ctable/computed-columns.py +294 -0
  46. blosc2-4.2.0/examples/ctable/csv_interop.py +82 -0
  47. blosc2-4.2.0/examples/ctable/index_on_b2z.py +147 -0
  48. blosc2-4.2.0/examples/ctable/indexing.py +100 -0
  49. blosc2-4.2.0/examples/ctable/mutations.py +72 -0
  50. blosc2-4.2.0/examples/ctable/nullable.py +182 -0
  51. blosc2-4.2.0/examples/ctable/persistence.py +109 -0
  52. blosc2-4.2.0/examples/ctable/querying.py +60 -0
  53. blosc2-4.2.0/examples/ctable/real_world.py +115 -0
  54. blosc2-4.2.0/examples/ctable/schema.py +61 -0
  55. blosc2-4.2.0/examples/ctable/varlen_columns.py +38 -0
  56. blosc2-4.2.0/examples/embedded-expr-udf-b2z.py +76 -0
  57. {blosc2-4.1.2 → blosc2-4.2.0}/examples/mmap-rw.py +1 -1
  58. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/blosc2_3_10_demo.py +1 -1
  59. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/compute_expr.py +1 -1
  60. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/dsl_save.py +2 -2
  61. blosc2-4.2.0/examples/ndarray/expression_index.py +33 -0
  62. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/filter_sort_fields.py +2 -2
  63. blosc2-4.2.0/examples/ndarray/index_append_maintenance.py +31 -0
  64. blosc2-4.2.0/examples/ndarray/index_sorted_iteration.py +40 -0
  65. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/lists-vs-bools-idx.py +3 -3
  66. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/malformed_dsl.py +5 -4
  67. blosc2-4.2.0/examples/ndarray/mandelbrot-pure-dsl.ipynb +466 -0
  68. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/meta.py +1 -1
  69. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/persistency.py +1 -1
  70. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/reduce_and_enlarge.py +1 -1
  71. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/reduce_expr_save.py +2 -2
  72. blosc2-4.2.0/examples/objectarray.py +69 -0
  73. blosc2-4.2.0/examples/ref-object.py +68 -0
  74. blosc2-4.2.0/examples/vlstore-lazyudf.py +47 -0
  75. blosc2-4.2.0/plans/changing-default-open-mode.md +341 -0
  76. blosc2-4.2.0/plans/computed-column-copilot.md +576 -0
  77. blosc2-4.2.0/plans/containers-tutorial.md +517 -0
  78. blosc2-4.2.0/plans/ctable-direct-expr-indexing.md +1027 -0
  79. blosc2-4.2.0/plans/ctable-getitem-row.md +593 -0
  80. blosc2-4.2.0/plans/ctable-implementation-log.md +415 -0
  81. blosc2-4.2.0/plans/ctable-indexes-opsi.md +1014 -0
  82. blosc2-4.2.0/plans/ctable-indexing.md +718 -0
  83. blosc2-4.2.0/plans/ctable-nulls.md +894 -0
  84. blosc2-4.2.0/plans/ctable-object-array.md +638 -0
  85. blosc2-4.2.0/plans/ctable-parquet-metadata.md +404 -0
  86. blosc2-4.2.0/plans/ctable-persistency.md +536 -0
  87. blosc2-4.2.0/plans/ctable-schema.md +1258 -0
  88. blosc2-4.2.0/plans/ctable-user-guide.md +497 -0
  89. blosc2-4.2.0/plans/ctable-varlen-cols.md +1080 -0
  90. blosc2-4.2.0/plans/materialized-computed-column.md +635 -0
  91. blosc2-4.2.0/plans/new-ctable-views.md +426 -0
  92. blosc2-4.2.0/plans/tree_store_extensions.md +258 -0
  93. blosc2-4.2.0/plans/treestore-ctable-extension.md +344 -0
  94. {blosc2-4.1.2 → blosc2-4.2.0}/pyproject.toml +12 -3
  95. {blosc2-4.1.2 → blosc2-4.2.0}/scripts/install-codex-skill-wasm32.sh +1 -1
  96. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/__init__.py +119 -16
  97. blosc2-4.2.0/src/blosc2/b2objects.py +248 -0
  98. blosc2-4.2.0/src/blosc2/batch_array.py +961 -0
  99. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/blosc2_ext.pyx +829 -21
  100. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/c2array.py +37 -3
  101. blosc2-4.2.0/src/blosc2/cli/__init__.py +1 -0
  102. blosc2-4.2.0/src/blosc2/cli/parquet_to_blosc2.py +875 -0
  103. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/core.py +26 -5
  104. blosc2-4.2.0/src/blosc2/ctable.py +6352 -0
  105. blosc2-4.2.0/src/blosc2/ctable_storage.py +605 -0
  106. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/dict_store.py +395 -83
  107. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/dsl_kernel.py +15 -10
  108. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/embed_store.py +19 -8
  109. blosc2-4.2.0/src/blosc2/indexing.py +7335 -0
  110. blosc2-4.2.0/src/blosc2/indexing_ext.pyx +2497 -0
  111. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/info.py +16 -0
  112. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/lazyexpr.py +475 -166
  113. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/linalg.py +127 -35
  114. blosc2-4.2.0/src/blosc2/list_array.py +716 -0
  115. blosc2-4.2.0/src/blosc2/matmul_kernels.c +301 -0
  116. blosc2-4.2.0/src/blosc2/matmul_kernels.h +48 -0
  117. blosc2-4.2.0/src/blosc2/msgpack_utils.py +92 -0
  118. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/ndarray.py +663 -121
  119. blosc2-4.2.0/src/blosc2/objectarray.py +428 -0
  120. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/proxy.py +10 -8
  121. blosc2-4.2.0/src/blosc2/ref.py +128 -0
  122. blosc2-4.2.0/src/blosc2/scalar_array.py +426 -0
  123. blosc2-4.2.0/src/blosc2/schema.py +813 -0
  124. blosc2-4.2.0/src/blosc2/schema_compiler.py +492 -0
  125. blosc2-4.2.0/src/blosc2/schema_validation.py +185 -0
  126. blosc2-4.2.0/src/blosc2/schema_vectorized.py +148 -0
  127. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/schunk.py +304 -33
  128. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/storage.py +4 -2
  129. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/tree_store.py +34 -15
  130. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/utils.py +22 -10
  131. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/version.py +1 -1
  132. blosc2-4.1.2/src/blosc2/_wasm_jit.py → blosc2-4.2.0/src/blosc2/wasm_jit.py +3 -3
  133. {blosc2-4.1.2 → blosc2-4.2.0}/tests/conftest.py +18 -0
  134. blosc2-4.2.0/tests/ctable/test_arrow_interop.py +266 -0
  135. blosc2-4.2.0/tests/ctable/test_column.py +857 -0
  136. blosc2-4.2.0/tests/ctable/test_column_ndarray_like.py +51 -0
  137. blosc2-4.2.0/tests/ctable/test_compact.py +152 -0
  138. blosc2-4.2.0/tests/ctable/test_construct.py +201 -0
  139. blosc2-4.2.0/tests/ctable/test_csv_interop.py +235 -0
  140. blosc2-4.2.0/tests/ctable/test_ctable_computed_cols.py +797 -0
  141. blosc2-4.2.0/tests/ctable/test_ctable_dataclass_schema.py +289 -0
  142. blosc2-4.2.0/tests/ctable/test_ctable_indexing.py +646 -0
  143. blosc2-4.2.0/tests/ctable/test_delete_rows.py +203 -0
  144. blosc2-4.2.0/tests/ctable/test_extend_delete.py +254 -0
  145. blosc2-4.2.0/tests/ctable/test_nullable.py +626 -0
  146. blosc2-4.2.0/tests/ctable/test_parquet_interop.py +676 -0
  147. blosc2-4.2.0/tests/ctable/test_row_logic.py +215 -0
  148. blosc2-4.2.0/tests/ctable/test_schema_compiler.py +278 -0
  149. blosc2-4.2.0/tests/ctable/test_schema_mutations.py +459 -0
  150. blosc2-4.2.0/tests/ctable/test_schema_specs.py +343 -0
  151. blosc2-4.2.0/tests/ctable/test_schema_validation.py +183 -0
  152. blosc2-4.2.0/tests/ctable/test_select_describe_cov.py +276 -0
  153. blosc2-4.2.0/tests/ctable/test_sort_by.py +310 -0
  154. blosc2-4.2.0/tests/ctable/test_table_persistency.py +659 -0
  155. blosc2-4.2.0/tests/ctable/test_varlen_columns.py +87 -0
  156. blosc2-4.2.0/tests/ctable/test_varlen_schema_compiler.py +48 -0
  157. blosc2-4.2.0/tests/ctable/test_vlstring_vlbytes.py +589 -0
  158. blosc2-4.2.0/tests/ctable/test_where_expressions.py +75 -0
  159. blosc2-4.2.0/tests/data/legacy_lazyexpr_v1/a.b2nd +0 -0
  160. blosc2-4.2.0/tests/data/legacy_lazyexpr_v1/b.b2nd +0 -0
  161. blosc2-4.2.0/tests/data/legacy_lazyexpr_v1/expr.b2nd +0 -0
  162. blosc2-4.2.0/tests/data/legacy_lazyudf_v1/a.b2nd +0 -0
  163. blosc2-4.2.0/tests/data/legacy_lazyudf_v1/b.b2nd +0 -0
  164. blosc2-4.2.0/tests/data/legacy_lazyudf_v1/expr.b2nd +0 -0
  165. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_c2array_expr.py +1 -1
  166. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_concat.py +2 -2
  167. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_dsl_kernels.py +78 -27
  168. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_full.py +1 -1
  169. blosc2-4.2.0/tests/ndarray/test_indexing.py +2243 -0
  170. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_lazyexpr.py +99 -33
  171. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_lazyexpr_fields.py +4 -4
  172. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_lazyudf.py +19 -2
  173. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_linalg.py +370 -3
  174. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_ndarray.py +243 -5
  175. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_persistency.py +1 -1
  176. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_proxy.py +3 -3
  177. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_proxy_c2array.py +1 -1
  178. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_proxy_expr.py +1 -1
  179. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_reductions.py +18 -18
  180. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_setitem.py +2 -1
  181. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_stringarrays.py +3 -3
  182. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_struct_dtype.py +1 -1
  183. blosc2-4.2.0/tests/test_b2objects.py +209 -0
  184. blosc2-4.2.0/tests/test_batch_array.py +722 -0
  185. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_dict_store.py +288 -0
  186. blosc2-4.2.0/tests/test_list_array.py +90 -0
  187. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_mmap.py +6 -4
  188. blosc2-4.2.0/tests/test_objectarray.py +523 -0
  189. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_open.py +55 -1
  190. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_open_c2array.py +1 -1
  191. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_proxy_schunk.py +2 -2
  192. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk.py +13 -0
  193. blosc2-4.2.0/tests/test_schunk_reorder_offsets.py +73 -0
  194. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_update.py +35 -0
  195. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_tree_store.py +151 -0
  196. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_vlmeta.py +27 -0
  197. blosc2-4.1.2/ANNOUNCE.rst +0 -93
  198. blosc2-4.1.2/CONTRIBUTING.rst +0 -36
  199. blosc2-4.1.2/doc/reference/classes.rst +0 -57
  200. {blosc2-4.1.2 → blosc2-4.2.0}/.gitattributes +0 -0
  201. {blosc2-4.1.2 → blosc2-4.2.0}/.gitignore +0 -0
  202. {blosc2-4.1.2 → blosc2-4.2.0}/.guix/modules/python-blosc2-package.scm +0 -0
  203. {blosc2-4.1.2 → blosc2-4.2.0}/.guix-channel +0 -0
  204. {blosc2-4.1.2 → blosc2-4.2.0}/.skills/wasm32-pyodide-dev/SKILL.md +0 -0
  205. {blosc2-4.1.2 → blosc2-4.2.0}/.skills/wasm32-pyodide-dev/references/commands.md +0 -0
  206. {blosc2-4.1.2 → blosc2-4.2.0}/ADD_LAZYFUNCS.md +0 -0
  207. {blosc2-4.1.2 → blosc2-4.2.0}/LICENSE.txt +0 -0
  208. {blosc2-4.1.2 → blosc2-4.2.0}/README.rst +0 -0
  209. {blosc2-4.1.2 → blosc2-4.2.0}/code_of_conduct.md +0 -0
  210. {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/blosc-favicon_32x32.png +0 -0
  211. {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/blosc-favicon_64x64.png +0 -0
  212. {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/blosc-logo_128.png +0 -0
  213. {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/blosc-logo_256.png +0 -0
  214. {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/css/custom.css +0 -0
  215. {blosc2-4.1.2 → blosc2-4.2.0}/doc/development/code-of-conduct.rst +0 -0
  216. {blosc2-4.1.2 → blosc2-4.2.0}/doc/development/contributing.rst +0 -0
  217. {blosc2-4.1.2 → blosc2-4.2.0}/doc/development/index.rst +0 -0
  218. {blosc2-4.1.2 → blosc2-4.2.0}/doc/development/roadmap.rst +0 -0
  219. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/dsl_syntax.md +0 -0
  220. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/index.rst +0 -0
  221. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/installation.rst +0 -0
  222. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/01.ndarray-basics.ipynb +0 -0
  223. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/02.lazyarray-expressions.ipynb +0 -0
  224. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/03.lazyarray-udf.ipynb +0 -0
  225. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/04.reductions.ipynb +0 -0
  226. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/05.persistent-reductions.ipynb +0 -0
  227. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/06.remote_proxy.ipynb +0 -0
  228. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/07.schunk-basics.ipynb +0 -0
  229. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/08.schunk-slicing_and_beyond.ipynb +0 -0
  230. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/09.ucodecs-ufilters.ipynb +0 -0
  231. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/10.prefilters.ipynb +0 -0
  232. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/blosc2-pipeline.png +0 -0
  233. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/blosc2-pipeline.svg +0 -0
  234. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/lazyexpr-broadcast.png +0 -0
  235. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/proxyconnection.png +0 -0
  236. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/reductions/3D-cube-plane.png +0 -0
  237. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/reductions/3D-cube.png +0 -0
  238. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/reductions/memory-access-2D-x.png +0 -0
  239. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/reductions/memory-access-2D-y.png +0 -0
  240. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/remote_proxy.png +0 -0
  241. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/backward.png +0 -0
  242. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/backward.svg +0 -0
  243. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/decoder.png +0 -0
  244. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/decoder.svg +0 -0
  245. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/decoder2.png +0 -0
  246. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/decoder2.svg +0 -0
  247. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/encoder.png +0 -0
  248. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/encoder.svg +0 -0
  249. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/encoder2.png +0 -0
  250. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/encoder2.svg +0 -0
  251. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/forward.png +0 -0
  252. {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/forward.svg +0 -0
  253. {blosc2-4.1.2 → blosc2-4.2.0}/doc/index.rst +0 -0
  254. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/additional_funcs.rst +0 -0
  255. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/array.rst +0 -0
  256. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/array_operations.rst +0 -0
  257. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/c2array.rst +0 -0
  258. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/index.rst +4 -4
  259. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/linalg.rst +0 -0
  260. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/low_level.rst +0 -0
  261. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/ndfield.rst +0 -0
  262. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/proxy.rst +0 -0
  263. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/proxyndsource.rst +0 -0
  264. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/proxysource.rst +0 -0
  265. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/reduction_functions.rst +0 -0
  266. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/simpleproxy.rst +0 -0
  267. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/storage.rst +0 -0
  268. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/ufuncs.rst +0 -0
  269. {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/utilities.rst +0 -0
  270. {blosc2-4.1.2 → blosc2-4.2.0}/doc/release_notes/index.md +0 -0
  271. {blosc2-4.1.2 → blosc2-4.2.0}/examples/blosc2_hdf5_compression.py +0 -0
  272. {blosc2-4.1.2 → blosc2-4.2.0}/examples/btune.py +0 -0
  273. {blosc2-4.1.2 → blosc2-4.2.0}/examples/c2array-get-slice.py +0 -0
  274. {blosc2-4.1.2 → blosc2-4.2.0}/examples/compress2_decompress2.py +0 -0
  275. {blosc2-4.1.2 → blosc2-4.2.0}/examples/compress_decompress.py +0 -0
  276. {blosc2-4.1.2 → blosc2-4.2.0}/examples/dict-store.py +0 -0
  277. {blosc2-4.1.2 → blosc2-4.2.0}/examples/embed-store.py +0 -0
  278. {blosc2-4.1.2 → blosc2-4.2.0}/examples/filler.py +0 -0
  279. {blosc2-4.1.2 → blosc2-4.2.0}/examples/gil.py +0 -0
  280. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/animated_plot.py +0 -0
  281. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/arange-constructor.py +0 -0
  282. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/asarray_.py +0 -0
  283. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/black-scholes_hist-dsl.ipynb +0 -0
  284. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/broadcast_expr.py +0 -0
  285. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/buffer.py +0 -0
  286. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/bytedelta_filter.py +0 -0
  287. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/c2array_expr.py +0 -0
  288. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/compute_fields.py +0 -0
  289. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/compute_udf_numba.py +0 -0
  290. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/compute_where.py +0 -0
  291. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/copy_.py +0 -0
  292. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/empty_.py +0 -0
  293. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/eye-constructor.py +0 -0
  294. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/formats.py +0 -0
  295. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/fromiter-constructor.py +0 -0
  296. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/general_expressions.py +0 -0
  297. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/getitem.py +0 -0
  298. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/ironpill1.ipynb +0 -0
  299. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/iterchunks_info.py +0 -0
  300. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/jit-expr.py +0 -0
  301. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/jit-numpy-funcs.py +0 -0
  302. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/jit-reduc.py +0 -0
  303. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/lazyexpr_where_indexing.py +0 -0
  304. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/linspace-constructor.py +0 -0
  305. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/mandelbrot-dsl.ipynb +0 -0
  306. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/ndarray_copy.py +0 -0
  307. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/ndmean.py +0 -0
  308. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/proxy-carray.py +0 -0
  309. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/proxy-ndarray.py +0 -0
  310. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/reduce_expr.py +0 -0
  311. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/reduce_string_expr.py +0 -0
  312. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/resize_.py +0 -0
  313. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/string_arrays.ipynb +0 -0
  314. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/work_with_numpy.py +0 -0
  315. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/xarray-expression.py +0 -0
  316. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/zfp_codec.py +0 -0
  317. {blosc2-4.1.2 → blosc2-4.2.0}/examples/pack_array.py +0 -0
  318. {blosc2-4.1.2 → blosc2-4.2.0}/examples/pack_tensor.py +0 -0
  319. {blosc2-4.1.2 → blosc2-4.2.0}/examples/postfilter1.py +0 -0
  320. {blosc2-4.1.2 → blosc2-4.2.0}/examples/postfilter2.py +0 -0
  321. {blosc2-4.1.2 → blosc2-4.2.0}/examples/postfilter3.py +0 -0
  322. {blosc2-4.1.2 → blosc2-4.2.0}/examples/prefilter.py +0 -0
  323. {blosc2-4.1.2 → blosc2-4.2.0}/examples/save_tensor.py +0 -0
  324. {blosc2-4.1.2 → blosc2-4.2.0}/examples/schunk.py +0 -0
  325. {blosc2-4.1.2 → blosc2-4.2.0}/examples/schunk_roundtrip.py +0 -0
  326. {blosc2-4.1.2 → blosc2-4.2.0}/examples/tree-store-blog.py +0 -0
  327. {blosc2-4.1.2 → blosc2-4.2.0}/examples/tree-store.py +0 -0
  328. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ucodecs.py +0 -0
  329. {blosc2-4.1.2 → blosc2-4.2.0}/examples/ufilters.py +0 -0
  330. {blosc2-4.1.2 → blosc2-4.2.0}/examples/vlmeta.py +0 -0
  331. {blosc2-4.1.2 → blosc2-4.2.0}/generate_version.py +0 -0
  332. {blosc2-4.1.2 → blosc2-4.2.0}/guix.scm +0 -0
  333. {blosc2-4.1.2 → blosc2-4.2.0}/images/Complete-Write-Read-B2ND.png +0 -0
  334. {blosc2-4.1.2 → blosc2-4.2.0}/images/M1-i386-vs-arm64-pack.png +0 -0
  335. {blosc2-4.1.2 → blosc2-4.2.0}/images/M1-i386-vs-arm64-unpack.png +0 -0
  336. {blosc2-4.1.2 → blosc2-4.2.0}/images/Read-Partial-Slices-B2ND.png +0 -0
  337. {blosc2-4.1.2 → blosc2-4.2.0}/images/b2nd-2level-parts.png +0 -0
  338. {blosc2-4.1.2 → blosc2-4.2.0}/images/eval-expr-full-mem-M2.png +0 -0
  339. {blosc2-4.1.2 → blosc2-4.2.0}/images/eval-expr-scarce-mem-M2.png +0 -0
  340. {blosc2-4.1.2 → blosc2-4.2.0}/images/lazyarray-dask-large.png +0 -0
  341. {blosc2-4.1.2 → blosc2-4.2.0}/images/lazyarray-dask-small.png +0 -0
  342. {blosc2-4.1.2 → blosc2-4.2.0}/images/lazyarray-expr-large.png +0 -0
  343. {blosc2-4.1.2 → blosc2-4.2.0}/images/lazyarray-expr.png +0 -0
  344. {blosc2-4.1.2 → blosc2-4.2.0}/images/linspace-compress.png +0 -0
  345. {blosc2-4.1.2 → blosc2-4.2.0}/images/linspace-decompress.png +0 -0
  346. {blosc2-4.1.2 → blosc2-4.2.0}/images/pack-array-cratios.png +0 -0
  347. {blosc2-4.1.2 → blosc2-4.2.0}/images/reduc-float64-amd.png +0 -0
  348. {blosc2-4.1.2 → blosc2-4.2.0}/images/reduc-float64-log-amd.png +0 -0
  349. {blosc2-4.1.2 → blosc2-4.2.0}/plans/external-js-glue-blosc2-todo.md +0 -0
  350. {blosc2-4.1.2 → blosc2-4.2.0}/plans/external-js-glue.md +0 -0
  351. {blosc2-4.1.2 → blosc2-4.2.0}/plans/phase0-t1-dsl-syntax-inventory.md +0 -0
  352. {blosc2-4.1.2 → blosc2-4.2.0}/plans/wasm32-todo.md +0 -0
  353. {blosc2-4.1.2 → blosc2-4.2.0}/pytest.ini +0 -0
  354. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/exceptions.py +0 -0
  355. {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/fft.py +0 -0
  356. {blosc2-4.1.2 → blosc2-4.2.0}/tests/array-api-xfails.txt +0 -0
  357. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_auto_parts.py +0 -0
  358. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_buffer.py +0 -0
  359. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_c2array_reductions.py +0 -0
  360. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_c2array_udf.py +0 -0
  361. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_copy.py +0 -0
  362. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_elementwise_funcs.py +0 -0
  363. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_empty.py +0 -0
  364. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_evaluate.py +0 -0
  365. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_get_slice_nchunks.py +0 -0
  366. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_getitem.py +0 -0
  367. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_iterchunks_info.py +0 -0
  368. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_jit.py +0 -0
  369. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_lossy.py +0 -0
  370. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_metalayers.py +0 -0
  371. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_mode.py +0 -0
  372. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_nans.py +0 -0
  373. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_numpy.py +0 -0
  374. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_resize.py +0 -0
  375. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_slice.py +0 -0
  376. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_squeeze.py +0 -0
  377. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_wasm_dsl_jit.py +0 -0
  378. {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_zeros.py +0 -0
  379. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_bytes_array.py +0 -0
  380. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_comp_info.py +0 -0
  381. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_compress2.py +0 -0
  382. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_compression_parameters.py +0 -0
  383. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_compressors.py +0 -0
  384. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_decompress.py +0 -0
  385. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_embed_store.py +0 -0
  386. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_iterchunks.py +0 -0
  387. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_numexpr_threads.py +0 -0
  388. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_pandas_udf_engine.py +0 -0
  389. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_pathlib.py +0 -0
  390. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_postfilters.py +0 -0
  391. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_prefilters.py +0 -0
  392. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_python_blosc.py +0 -0
  393. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_constructor.py +0 -0
  394. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_delete.py +0 -0
  395. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_get_slice.py +0 -0
  396. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_get_slice_nchunks.py +0 -0
  397. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_insert.py +0 -0
  398. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_set_slice.py +0 -0
  399. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_storage.py +0 -0
  400. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_tensor.py +0 -0
  401. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_ucodecs.py +0 -0
  402. {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_ufilters.py +0 -0
  403. {blosc2-4.1.2 → blosc2-4.2.0}/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.15.4
19
+ rev: v0.15.12
20
20
  hooks:
21
21
  - id: ruff-check
22
22
  args: ["--fix", "--show-fixes"]
blosc2-4.2.0/AGENTS.md ADDED
@@ -0,0 +1,53 @@
1
+ # Repository Guidelines
2
+
3
+ ## Project Structure & Module Organization
4
+ The Python package lives in `src/blosc2/`, including the C/Cython extension sources
5
+ (`blosc2_ext.*`) and core modules such as `core.py`, `ndarray.py`, and `schunk.py`.
6
+ Tests are under `tests/`, with additional doctests enabled for select modules per
7
+ `pytest.ini`. Documentation sources are in `doc/` and build output lands in `html/`.
8
+ Examples are in `examples/`, and performance/benchmark scripts live in `bench/`.
9
+
10
+ ## Build, Test, and Development Commands
11
+ - `pip install .` builds the bundled C-Blosc2 and installs the package.
12
+ - `pip install -e .` installs in editable mode for local development.
13
+ - `CMAKE_PREFIX_PATH=/usr/local USE_SYSTEM_BLOSC2=1 pip install -e .` builds
14
+ against a separately installed C-Blosc2.
15
+ - `pytest` runs the default test suite (excludes `heavy` and `network` markers).
16
+ - `pytest -m "heavy"` runs long-running tests.
17
+ - `pytest -m "network"` runs tests requiring network access.
18
+ - `cd doc && rm -rf ../html _build && python -m sphinx . ../html` builds docs.
19
+
20
+ ## Coding Style & Naming Conventions
21
+ Use Ruff for formatting and linting (line length 109). Enable pre-commit hooks:
22
+ `python -m pip install pre-commit` then `pre-commit install`. Follow Python
23
+ conventions: 4-space indentation, `snake_case` for functions/variables, and
24
+ `PascalCase` for classes. Pytest discovery expects `tests/test_*.py` and
25
+ `test_*` functions. Do not use leading underscores in module-level helper
26
+ function names when those helpers are imported from other modules; reserve
27
+ leading underscores for file-local implementation details. Avoid leading
28
+ underscores in core module filenames under `src/blosc2/`; prefer non-underscored
29
+ module names unless there is a strong reason to keep a module private.
30
+
31
+ For documentation and tutorial query examples, prefer the shortest idiom that
32
+ matches the intended result type. Use `expr[:]` or `arr[mask][:]` when showing
33
+ values, use `expr.compute()` when materializing an `NDArray`, and use
34
+ `expr.compute(_use_index=False)` when demonstrating scan-vs-index behavior.
35
+ Avoid `expr.compute()[:]` unless a NumPy array is specifically required.
36
+
37
+ ## Testing Guidelines
38
+ Pytest is required; warnings are treated as errors. The default configuration
39
+ adds `--doctest-modules`, so keep doctest examples in `blosc2/core.py`,
40
+ `blosc2/ndarray.py`, and `blosc2/schunk.py` accurate. Use markers `heavy` and
41
+ `network` for slow or network-dependent tests.
42
+
43
+ ## Commit & Pull Request Guidelines
44
+ Recent commit messages are short, imperative sentences (e.g., “Add …”, “Fix …”)
45
+ without ticket prefixes. For pull requests: branch from `main`, add tests for
46
+ behavior changes, update docs for API changes, ensure the test suite passes,
47
+ and avoid introducing new compiler warnings. Link issues when applicable and
48
+ include clear reproduction steps for bug fixes.
49
+
50
+ **IMPORTANT — Agent commit policy**: Never run `git commit`, `git push`,
51
+ `git reset`, `git rebase`, or any other destructive/state-changing git operation.
52
+ Do not ask for permission to do so either. Committing and all repo state changes
53
+ are exclusively the user’s decision. Just do the code work and stop there.
@@ -0,0 +1,86 @@
1
+ Announcing Python-Blosc2 4.2.0
2
+ ===============================
3
+
4
+ We are happy to announce Python-Blosc2 4.2.0. This is a large feature
5
+ release, with the new compressed columnar table container, ``CTable``, as the
6
+ main development.
7
+
8
+ ``CTable`` brings typed, compressed, column-oriented tables to Python-Blosc2.
9
+ It supports persistent ``.b2d`` and ``.b2z`` storage, schema-driven columns,
10
+ nullable data, variable-length strings/bytes and object columns, computed
11
+ columns, table views, mutations, sorting, filtering and persistent indexes. It
12
+ also includes Arrow, Parquet and CSV interoperability, plus a new
13
+ ``parquet-to-blosc2`` command-line utility.
14
+
15
+ For a deeper introduction to CTable and its motivation, see our recent blog
16
+ post:
17
+
18
+ https://blosc.org/posts/ctable-blosc2-columnar-table/
19
+
20
+ Other highlights in 4.2.0 include:
21
+
22
+ - A new indexing subsystem for NDArrays and CTables, including persistent
23
+ sidecar indexes, expression indexes, sorted iteration and query caching.
24
+ - New structured serialization facilities for persisted ``C2Array``,
25
+ ``LazyExpr`` and DSL ``LazyUDF`` objects, plus ``blosc2.Ref`` and
26
+ ``blosc2.load()``.
27
+ - New schema helpers such as ``blosc2.struct()`` and ``blosc2.object()``.
28
+ - Object/ListArray improvements for variable-length and general object data.
29
+ - Faster and lower-memory ``fromiter()`` construction, improved ``BatchArray``
30
+ defaults and continued linalg/matmul optimizations.
31
+ - Many documentation, tutorial, example and benchmark additions.
32
+ - Numerous fixes for Windows mmap/file-locking behavior, Python 3.14 GC/thread
33
+ interactions, ``.b2z`` persistence, indexed queries and NumPy compatibility.
34
+
35
+ You can think of Python-Blosc2 4.x as an extension of NumPy/numexpr that:
36
+
37
+ - Can deal with NDArray compressed objects using first-class codecs & filters.
38
+ - Performs many kinds of math expressions, including reductions, indexing...
39
+ - Supports multi-threading and SIMD acceleration (via numexpr/miniexpr).
40
+ - Can operate with data from other libraries (like PyTables, h5py, Zarr, Dask, etc).
41
+ - Supports NumPy ufunc mechanism: mix and match NumPy and Blosc2 computations.
42
+ - Integrates with Numba and Cython via UDFs (User Defined Functions).
43
+ - Adheres to modern array API standard conventions (https://data-apis.org/array-api/).
44
+ - Can perform linear algebra operations (like ``blosc2.tensordot()``).
45
+ - Can store and query compressed columnar tables via ``blosc2.CTable``.
46
+
47
+ Install it with::
48
+
49
+ pip install blosc2 --upgrade # if you prefer wheels
50
+ conda install -c conda-forge python-blosc2 mkl # if you prefer conda and MKL
51
+
52
+ For more info, you can have a look at the release notes in:
53
+
54
+ https://github.com/Blosc/python-blosc2/releases
55
+
56
+ Small CTable example::
57
+
58
+ import blosc2
59
+
60
+ table = blosc2.CTable.from_parquet("measurements.parquet", urlpath="measurements.b2z")
61
+ table.create_index("station_id")
62
+
63
+ hot = table.where("temperature > 30")
64
+ print(hot.head())
65
+
66
+ Sources repository
67
+ ------------------
68
+
69
+ The sources and documentation are managed through GitHub services at:
70
+
71
+ https://github.com/Blosc/python-blosc2
72
+
73
+ Python-Blosc2 is distributed using the BSD license, see
74
+ https://github.com/Blosc/python-blosc2/blob/main/LICENSE.txt
75
+ for details.
76
+
77
+ Mastodon feed
78
+ -------------
79
+
80
+ Follow https://fosstodon.org/@Blosc2 to get informed about the latest
81
+ developments.
82
+
83
+ Enjoy!
84
+
85
+ - Blosc Development Team
86
+ Compress Better, Compute Bigger
@@ -14,6 +14,9 @@ endif()
14
14
 
15
15
  project(python-blosc2)
16
16
 
17
+ set(BLOSC2_MIN_VERSION 3.0.0)
18
+ set(BLOSC2_BUNDLED_VERSION v3.0.2)
19
+
17
20
  if(WIN32 AND NOT CMAKE_C_COMPILER_ID STREQUAL "Clang")
18
21
  message(FATAL_ERROR "Windows builds require clang-cl. Set CC/CXX to clang-cl or configure CMake with -T ClangCL.")
19
22
  endif()
@@ -41,11 +44,25 @@ add_custom_command(
41
44
  DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/blosc2/blosc2_ext.pyx"
42
45
  VERBATIM)
43
46
 
47
+ add_custom_command(
48
+ OUTPUT indexing_ext.c
49
+ COMMAND Python::Interpreter -m cython
50
+ "${CMAKE_CURRENT_SOURCE_DIR}/src/blosc2/indexing_ext.pyx" --output-file indexing_ext.c
51
+ DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/blosc2/indexing_ext.pyx"
52
+ VERBATIM)
53
+
44
54
  # ...and add it to the target
45
55
  Python_add_library(blosc2_ext MODULE blosc2_ext.c WITH_SOABI)
56
+ target_sources(blosc2_ext PRIVATE src/blosc2/matmul_kernels.c)
57
+ target_include_directories(blosc2_ext PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/blosc2)
58
+ if(UNIX)
59
+ target_link_libraries(blosc2_ext PRIVATE ${CMAKE_DL_LIBS})
60
+ endif()
61
+ Python_add_library(indexing_ext MODULE indexing_ext.c WITH_SOABI)
46
62
 
47
63
  # We need to link against NumPy
48
64
  target_link_libraries(blosc2_ext PRIVATE Python::NumPy)
65
+ target_link_libraries(indexing_ext PRIVATE Python::NumPy)
49
66
 
50
67
  # Fetch and build miniexpr library
51
68
  include(FetchContent)
@@ -63,15 +80,19 @@ endif()
63
80
 
64
81
  FetchContent_Declare(miniexpr
65
82
  GIT_REPOSITORY https://github.com/Blosc/miniexpr.git
66
- GIT_TAG 37bf6982bf9619036b47f095b7005bc3c87a7447
83
+ GIT_TAG f2faef741c4c507bf6a03167c72ce7f92c6f0ae8
67
84
  # SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../miniexpr
68
85
  )
69
86
  FetchContent_MakeAvailable(miniexpr)
70
87
 
71
88
  # Link against miniexpr static library
72
89
  target_link_libraries(blosc2_ext PRIVATE miniexpr_static)
90
+ if(APPLE)
91
+ target_link_libraries(blosc2_ext PRIVATE "-framework Accelerate")
92
+ endif()
73
93
 
74
94
  target_compile_features(blosc2_ext PRIVATE c_std_11)
95
+ target_compile_features(indexing_ext PRIVATE c_std_11)
75
96
  if(WIN32 AND CMAKE_C_COMPILER_ID STREQUAL "Clang")
76
97
  execute_process(
77
98
  COMMAND "${CMAKE_C_COMPILER}" -print-resource-dir
@@ -100,7 +121,7 @@ endif()
100
121
  if(USE_SYSTEM_BLOSC2)
101
122
  set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
102
123
  find_package(PkgConfig REQUIRED)
103
- pkg_check_modules(Blosc2 REQUIRED IMPORTED_TARGET blosc2)
124
+ pkg_check_modules(Blosc2 REQUIRED IMPORTED_TARGET blosc2>=${BLOSC2_MIN_VERSION})
104
125
  target_link_libraries(blosc2_ext PRIVATE PkgConfig::Blosc2)
105
126
  else()
106
127
  set(STATIC_LIB ON CACHE BOOL "Build a static version of the blosc library.")
@@ -119,7 +140,8 @@ else()
119
140
  include(FetchContent)
120
141
  FetchContent_Declare(blosc2
121
142
  GIT_REPOSITORY https://github.com/Blosc/c-blosc2
122
- GIT_TAG 1386ef42f58b61c876edf714a2af84bd7b59dc5d # v2.23.1
143
+ GIT_TAG ${BLOSC2_BUNDLED_VERSION}
144
+ # SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../c-blosc2
123
145
  )
124
146
  FetchContent_MakeAvailable(blosc2)
125
147
  include_directories("${blosc2_SOURCE_DIR}/include")
@@ -147,7 +169,7 @@ endif()
147
169
 
148
170
  # Python extension -> site-packages/blosc2
149
171
  install(
150
- TARGETS blosc2_ext
172
+ TARGETS blosc2_ext indexing_ext
151
173
  LIBRARY DESTINATION ${SKBUILD_PLATLIB_DIR}/blosc2
152
174
  )
153
175
 
@@ -0,0 +1,45 @@
1
+ Contributing guidelines
2
+ =======================
3
+ We want to make contributing to this project as easy and transparent as possible.
4
+
5
+ Our Development Process
6
+ -----------------------
7
+ New versions are being developed in the "main" branch, or in their own feature branch.
8
+ When they are deemed ready for a release, they are merged back into "main" again.
9
+
10
+ So all contributions must stage first through "main" or their own feature branch.
11
+
12
+ Pull Requests
13
+ -------------
14
+ We actively welcome your pull requests.
15
+
16
+ 1. Fork the repo and create your branch from ``main``.
17
+ 2. If you've added code that should be tested, add tests.
18
+ 3. If you've changed APIs, update the documentation.
19
+ 4. Ensure the test suite passes.
20
+ 5. Make sure your code does not issue new compiler warnings.
21
+
22
+ Automated Contributions Policy
23
+ ------------------------------
24
+
25
+ Contributing to Blosc requires human judgment, contextual understanding, and familiarity with scikit-learn’s structure and goals. It is not suitable for automatic processing by AI tools.
26
+
27
+ Please refrain from submitting issues or pull requests generated by fully-automated tools. Maintainers reserve the right, at their sole discretion, to close such submissions and to block any account responsible for them.
28
+
29
+ Review all code or documentation changes made by AI tools and make sure you understand all changes and can explain them on request, before submitting them under your name. Do not submit any AI-generated code that you haven’t personally reviewed, understood and tested, as this wastes maintainers’ time.
30
+
31
+ Please do not paste AI generated text in the description of issues, PRs or in comments as this makes it harder for reviewers to assess your contribution. We are happy for it to be used to improve grammar or if you are not a native English speaker.
32
+
33
+ If you used AI tools, please state so in your PR description.
34
+
35
+ PRs that appear to violate this policy will be closed without review.
36
+
37
+ For more information on why this is becoming a big issue for open source projects, please see the `Software Review in the Era of AI <https://ropensci.org/blog/2026/02/26/ropensci-ai-policy/>`_ by the rOpenSci folks.
38
+
39
+ Issues
40
+ ------
41
+ We use GitHub issues to track public bugs. Please ensure your description is clear and has sufficient instructions to be able to reproduce the issue.
42
+
43
+ License
44
+ -------
45
+ By contributing to Python-Blosc2, you agree that your contributions will be licensed under the `LICENSE <https://github.com/Blosc/python-blosc2/blob/main/LICENSE.txt>`_ file of the project.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: blosc2
3
- Version: 4.1.2
3
+ Version: 4.2.0
4
4
  Summary: A fast & compressed ndarray library with a flexible compute engine.
5
5
  Author-Email: Blosc Development Team <blosc@blosc.org>
6
6
  Maintainer-Email: Blosc Development Team <blosc@blosc.org>
@@ -27,7 +27,11 @@ Requires-Dist: numpy>=1.26
27
27
  Requires-Dist: ndindex
28
28
  Requires-Dist: msgpack
29
29
  Requires-Dist: numexpr>=2.14.1; platform_machine != "wasm32"
30
+ Requires-Dist: pydantic
30
31
  Requires-Dist: requests
32
+ Requires-Dist: threadpoolctl; platform_machine != "wasm32"
33
+ Provides-Extra: parquet
34
+ Requires-Dist: pyarrow; extra == "parquet"
31
35
  Description-Content-Type: text/x-rst
32
36
 
33
37
  =============
@@ -93,10 +93,40 @@ If you want to run the network tests, you can use the following command:
93
93
  pytest -m "network"
94
94
  ```
95
95
 
96
+ ## Matmul backend discovery
97
+
98
+ The fast `blosc2.matmul` path uses platform-specific block kernels:
99
+
100
+ - macOS: `Accelerate`
101
+ - Linux/Windows: runtime-discovered `cblas`
102
+ - fallback: portable `naive` kernel
103
+
104
+ For the runtime `cblas` backend, `python-blosc2` probes the active Python/NumPy
105
+ environment rather than linking to one BLAS vendor at build time. Discovery
106
+ starts from NumPy's reported BLAS library directory when available, and then
107
+ searches common library names in the active environment's `lib` directories.
108
+
109
+ On Linux the current candidates include `libcblas`, `libopenblas`,
110
+ `libflexiblas`, `libblis`, `libmkl_rt`, and generic `libblas`. A candidate is
111
+ accepted only if it loads successfully and exports both `cblas_sgemm` and
112
+ `cblas_dgemm`. If no suitable provider is found, the fast path falls back to
113
+ the `naive` kernel.
114
+
115
+ Useful runtime helpers:
116
+
117
+ - `blosc2.get_matmul_library()` reports the selected runtime library when available
118
+ - `BLOSC_TRACE=1` logs candidate probing, rejection, selection, and backend fallback
119
+
120
+ Example:
121
+
122
+ ```bash
123
+ BLOSC_TRACE=1 python -c "import blosc2; print(blosc2.get_matmul_library())"
124
+ ```
125
+
96
126
  ## wasm32 / Pyodide developer workflow
97
127
 
98
128
  For the local wasm32 workflow (uv + pyodide-build + cibuildwheel + test loop),
99
- use the repo skill at `.codex/skills/wasm32-pyodide-dev/SKILL.md`.
129
+ use the repo skill at `.skills/wasm32-pyodide-dev/SKILL.md`.
100
130
 
101
131
  Install it into Codex discovery with:
102
132
 
@@ -1,8 +1,86 @@
1
1
  # Release notes
2
2
 
3
+ ## Changes from 4.1.2 to 4.2.0
4
+
5
+ ### CTable: columnar compressed tables
6
+
7
+ - Introduced `blosc2.CTable`, a new columnar table container for compressed, typed columns. CTables support dataclass- and schema-based construction, row iteration, column access, table views, `head()` / `tail()` / `sample()`, sorting, selection and compact `where` expressions.
8
+ - Added persistent CTables backed by `TreeStore`, with support for `blosc2.open()`, `CTable.open()`, `CTable.load()`, `CTable.save()`, `CTable.to_b2d()` and `CTable.to_b2z()`. CTable views can be saved too, and `.b2z`/`.b2d` path handling has been tightened.
9
+ - Added mutation operations for CTables, including `append()`, `extend()`, `delete()`, `compact()`, `add_column()`, `drop_column()`, `rename_column()` and related schema validation.
10
+ - Added computed columns, including virtual computed columns backed by lazy expressions, materialized computed columns and automatic filling of materialized computed columns during inserts.
11
+ - Added CTable indexing support, including persistent indexes, direct expression indexes, ordered index reuse, boolean `LazyExpr`/`NDArray` masks in `CTable.__getitem__`, `iter_sorted()` and indexing support for `.b2z` tables.
12
+ - Added nullable schema support and null policies for CTable scalar columns, preserving nullable scalar Parquet round-trips.
13
+ - Added variable-length CTable column support via `ListArray` / `ObjectArray`, including `vlstring` and `vlbytes` schema specs, fixed-length string/bytes import support and list/struct Arrow/Parquet round-trips.
14
+ - Added Arrow, Parquet and CSV interoperability for CTables, including batch-wise Arrow/Parquet import/export, Arrow schema metadata preservation, `CTable.from_arrow_batches()` improvements and a new `parquet-to-blosc2` CLI utility.
15
+ - Added CTable documentation, tutorials, examples and benchmarks covering schema definition, persistence, querying, indexing, mutations, nullable columns, computed columns and variable-length columns.
16
+
17
+ ### Indexing and ordering
18
+
19
+ - Added a new indexing subsystem for NDArrays and CTables, including full, partial/bucket, light/medium and OPSI-style index kinds, out-of-core index builders and sidecar storage.
20
+ - Added `blosc2.Index` as the unified public index handle, plus APIs such as `create_index()`, `compact_index()`, `iter_sorted()`, `will_use_index()` and related query explanation support.
21
+ - Added materialized expression indexes for NDArrays and direct expression indexes for CTables.
22
+ - Added persistent query-result caching for indexed lookups, with FIFO pruning and cache accounting.
23
+ - Added `blosc2.argsort()` and refactored indexing APIs around explicit index enums and sorting helpers.
24
+ - Improved indexed query performance with Cython accelerators, threaded chunk batching, zero-copy/cached mmap reads, chunk-aware and reduced-order layouts and faster scattered row gathering.
25
+ - Reduced memory usage during index creation and lookup by avoiding full sidecar materialization, replacing memmap staging with Blosc2 scratch arrays and adding `tmpdir` support for full out-of-core indexes.
26
+
27
+ ### Persistence, stores and serialization
28
+
29
+ - Added structured Blosc2 serialization based on b2object carriers, including persisted `C2Array`, `LazyExpr` and DSL `LazyUDF` objects.
30
+ - Added `blosc2.Ref` for serializing external references, plus examples for b2object bundles and persisted expressions/UDFs.
31
+ - Added `blosc2.load()` as a convenience loader.
32
+ - Added `vlmeta` support to `LazyArray` objects.
33
+ - Improved store handling by preserving lazy b2object carriers in `DictStore`, allowing reopened proxies to refill caches after read-only opens, relaxing `DictStore`/`TreeStore` suffix requirements and adding `DictStore.to_b2d()`.
34
+ - Accelerated `blosc2.open()` by trying standard opens first and warning on implicit append mode.
35
+
36
+ ### Arrays, computation and containers
37
+
38
+ - Added `ObjectArray` for fully general object data and renamed the earlier `VLArray` work accordingly; added `ListArray` docstrings and Arrow integration improvements.
39
+ - Added schema helpers including numeric specs, `blosc2.struct()` and `blosc2.object()` for nested/fully general column declarations.
40
+ - Improved `fromiter()` with direct chunked construction and substantially lower peak memory use.
41
+ - Improved `asarray()` behavior for NDArray inputs when copy-inducing keyword arguments are supplied.
42
+ - Added `SChunk.reorder_offsets()`.
43
+ - Improved `BatchArray` defaults and documentation; the default compression level is now tuned for faster lookup/scan behavior.
44
+ - Continued matmul/linalg optimization work and shared-thread-pool integration.
45
+
46
+ ### CLI, docs and examples
47
+
48
+ - Added the `parquet-to-blosc2` command with options such as `--max-rows`, `--parquet-batch-size`, `--blosc2-items-per-block` and `--use-dict`.
49
+ - Added new CTable, ObjectArray, BatchArray, containers, indexing and serialization tutorials and examples.
50
+ - Reorganized and expanded the API reference for CTable, Column, schema specs, Index, save/load helpers and miscellaneous APIs.
51
+ - Updated benchmark suites for CTables, indexing, Parquet import/export, BatchArray and NDArray construction/indexing.
52
+
53
+ ### Fixes and compatibility
54
+
55
+ - Updated bundled C-Blosc2 to v3.0.2 and require C-Blosc2 >= 3.0.0 when building against a system library.
56
+ - Updated bundled C-Blosc2 and miniexpr sources multiple times.
57
+ - Restored compatibility with NumPy < 2.
58
+ - Fixed Windows and mmap/file-locking issues in index creation, rebuilds and temporary file cleanup.
59
+ - Fixed full-index query failures for large CTable columns and full out-of-core merge failures on systems with small `/tmp`.
60
+ - Fixed stale sidecar/cache reuse and targeted cache invalidation when persistent sidecars are replaced.
61
+ - Fixed `.b2z` double-open corruption caused by GC-triggered repacking and made temporary `.b2z` unpacking default to the source file directory.
62
+ - Fixed a regression when reopening persisted proxies in read-only mode.
63
+ - Fixed GC-induced thread hangs on macOS with Python 3.14 and hardened async chunk reading/cache cleanup paths.
64
+ - Fixed lazy-chunk source-size handling in decode/getitem callers.
65
+ - Fixed nullable validation, dictionary extend validation, CTable close propagation, print alignment and NumPy mask support.
66
+ - Fixed `arange()` regressions and several pre-existing `set_slice` error-handling issues.
67
+ - Clamped indexing/thread defaults for wasm32.
68
+
3
69
  ## Changes from 4.1.1 to 4.1.2
4
70
 
5
- - Update `c-blosc2` version
71
+ - A new fast path for src/blosc2/linalg.py that uses the matmul prefilter machinery in src/blosc2/blosc2_ext.pyx.
72
+ - The fast path is only used for supported cases:
73
+ - blosc2.NDArray inputs
74
+ - 2-D only
75
+ - floating-point only
76
+ - matching dtypes
77
+ - aligned chunk/block layouts that satisfy the current kernel assumptions
78
+ - All other valid cases fall back to the existing chunk-by-chunk implementation in src/blosc2/linalg.py.
79
+ - Some benchmarks for the supported cases show significant speedups over the chunked implementation:
80
+ - aligned 400x400 float32: about 3.7x faster over chunked
81
+ - aligned 400x400 float64: about 3.0x
82
+ - aligned 800x800 float32: about 1.5x
83
+ - misaligned case: auto correctly stays on chunked
6
84
 
7
85
  ## Changes from 4.1.0 to 4.1.1
8
86
 
@@ -15,12 +15,10 @@ Preliminaries
15
15
  * Make sure that the c-blosc2 repository is updated to the latest version (or a specific
16
16
  version that will be documented in the ``RELEASE_NOTES.md``). In ``CMakeLists.txt`` edit::
17
17
 
18
- FetchContent_Declare(blosc2
19
- GIT_REPOSITORY https://github.com/Blosc/c-blosc2
20
- GIT_TAG b179abf1132dfa5a263b2ebceb6ef7a3c2890c64
21
- )
18
+ set(BLOSC2_MIN_VERSION 3.0.0)
19
+ set(BLOSC2_BUNDLED_VERSION v3.0.2)
22
20
 
23
- to point to the desired commit/tag in the c-blosc2 repo.
21
+ to point to the desired commit/tag in the c-blosc2 repo. Note that ``conda-forge`` only selects the latest release, so it may be necessary to do a formal release of ``c-blosc2`` to ensure that the package is correctly generated in ```conda-forge``.
24
22
 
25
23
  * Make sure that the current main branch is passing the tests in continuous integration.
26
24
 
@@ -22,7 +22,7 @@ The constructor for the `Table` object should take some parameters to specify pr
22
22
  * `.where()`: an iterator for querying with conditions that are evaluated with the internal compute engine.
23
23
  * `.index()` for indexing a column and getting better performance in queries (desirable, but optional for 4.0).
24
24
 
25
- In particular, it should try to mimic much of the functionality of data-querying libraries such as ``pandas`` (see [this blog](https://datapythonista.me/blog/whats-new-in-pandas-3) for much of the followin). Hence, one should be able to filter rows of the `Table` via querying on multiple columns (accessed via `.` or perhaps ``__getitem__``), with conditions to select rows implemented via `.index`, `.where` like so
25
+ In particular, it should try to mimic much of the functionality of data-querying libraries such as ``pandas`` (see [this blog](https://datapythonista.me/blog/whats-new-in-pandas-3) for much of the following). Hence, one should be able to filter rows of the `Table` via querying on multiple columns (accessed via `.` or perhaps ``__getitem__``), with conditions to select rows implemented via `.index`, `.where` like so
26
26
 
27
27
  ```
28
28
  tbl.where((tbl.property_type == "hotel") & (tbl.country == "us"))
@@ -6,7 +6,7 @@ import sys
6
6
  import numpy as np
7
7
 
8
8
  import blosc2
9
- from blosc2.utils import constructors, elementwise_funcs, reducers
9
+ from blosc2.utils import elementwise_funcs, reducers
10
10
 
11
11
 
12
12
  def genbody(f, func_list, lib="blosc2"):
@@ -149,38 +149,6 @@ The following functions are useful for working with datatypes.
149
149
  )
150
150
  genbody(f, blosc2_dtypefuncs)
151
151
 
152
- # GENERATE index_funcs.rst
153
- blosc2_indexfuncs = sorted(
154
- [
155
- "count_nonzero",
156
- "squeeze",
157
- "expand_dims",
158
- "sort",
159
- "take",
160
- "take_along_axis",
161
- "broadcast_to",
162
- "meshgrid",
163
- "indices",
164
- "concat",
165
- "stack",
166
- ]
167
- )
168
-
169
- with open("reference/index_funcs.rst", "w") as f:
170
- f.write(
171
- """Indexing and Manipulation Functions and Utilities
172
- =======================================
173
-
174
- The following functions are useful for performing indexing and other associated operations.
175
-
176
- .. currentmodule:: blosc2
177
-
178
- .. autosummary::
179
-
180
- """
181
- )
182
- genbody(f, blosc2_indexfuncs)
183
-
184
152
  # GENERATE linear_algebra.rst
185
153
  linalg_funcs = [
186
154
  name
@@ -219,50 +187,6 @@ Reduction operations can be used with any of :ref:`NDArray <NDArray>`, :ref:`C2A
219
187
  )
220
188
  genbody(f, sorted(reducers))
221
189
 
222
- with open("reference/ndarray.rst", "w") as f:
223
- f.write(
224
- """.. _NDArray:
225
-
226
- NDArray
227
- =======
228
-
229
- The multidimensional data array class. Instances may be constructed using the constructor functions in the list below `NDArrayConstructors`_.
230
- In addition, all the functions from the :ref:`Lazy Functions <lazy_functions>` section can be used with NDArray instances.
231
-
232
- .. currentmodule:: blosc2
233
-
234
- .. autoclass:: NDArray
235
- :members:
236
- :inherited-members:
237
- :exclude-members: get_slice, set_slice, get_slice_numpy, get_oindex_numpy, set_oindex_numpy
238
- :member-order: groupwise
239
-
240
- :Special Methods:
241
-
242
- .. autosummary::
243
-
244
- __iter__
245
- __len__
246
- __getitem__
247
- __setitem__
248
-
249
- Utility Methods
250
- ---------------
251
-
252
- .. automethod:: __iter__
253
- .. automethod:: __len__
254
- .. automethod:: __getitem__
255
- .. automethod:: __setitem__
256
-
257
- Constructors
258
- ------------
259
- .. _NDArrayConstructors:
260
- .. autosummary::
261
-
262
- """
263
- )
264
- genbody(f, sorted(constructors))
265
-
266
190
  hidden = "_ignore_multiple_size"
267
191
 
268
192
 
@@ -296,11 +220,27 @@ def linkcode_resolve(domain, info):
296
220
  except Exception:
297
221
  return None
298
222
 
299
- # Replace this with your repo info
300
223
  github_base_url = "https://github.com/Blosc/python-blosc2/blob/main/"
301
- # Get the path relative to the repository root, not the module directory
302
- repo_root = os.path.abspath(os.path.join(os.path.dirname(blosc2.__file__), "..", ".."))
303
- relpath = os.path.relpath(fn, start=repo_root)
224
+ fn = os.path.abspath(fn)
225
+
226
+ repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
227
+ try:
228
+ relpath = os.path.relpath(fn, start=repo_root)
229
+ except ValueError:
230
+ relpath = None
231
+ if relpath is None or relpath.startswith(".."):
232
+ # Release docs may be built from an installed wheel/sdist, where source
233
+ # files live under site-packages/blosc2 instead of the repository's
234
+ # src/blosc2 tree. Map those installed package paths back to the repo.
235
+ package_root = os.path.abspath(os.path.dirname(blosc2.__file__))
236
+ try:
237
+ package_relpath = os.path.relpath(fn, start=package_root)
238
+ except ValueError:
239
+ return None
240
+ if package_relpath.startswith(".."):
241
+ return None
242
+ relpath = os.path.join("src", "blosc2", package_relpath)
243
+
304
244
  return f"{github_base_url}{relpath}#L{lineno}"
305
245
 
306
246
 
@@ -34,9 +34,9 @@ and tools in the Python ecosystem, including:
34
34
  * DSL kernels for miniexpr-backed UDF authoring and validation (see
35
35
  `this tutorial <https://www.blosc.org/python-blosc2/getting_started/tutorials/03.lazyarray-udf-kernels.html>`_).
36
36
  * By making use of the simple and open
37
- `C-Blosc2 format <https://github.com/Blosc/c-blosc2/blob/main/README_FORMAT.rst>`_
38
- for storing compressed data, Python-Blosc2 facilitates seamless integration with many other
39
- systems and tools.
37
+ `C-Blosc2 format <https://github.com/Blosc/c-blosc2/blob/main/README_FORMAT.rst>`_
38
+ for storing compressed data, Python-Blosc2 facilitates seamless integration with many other
39
+ systems and tools.
40
40
 
41
41
  Python-Blosc2's compute engine
42
42
  ==============================
@@ -211,7 +211,7 @@ libraries such as NumExpr. Python-Blosc2's compression and chunking means the
211
211
  arrays may be stored compressed in memory and then processed chunk-by-chunk;
212
212
  both memory footprint and execution time is greatly reduced compared to
213
213
  Dask+Zarr, which also uses compression (see the
214
- `benchmark here <https://github.com/Blosc/python-blosc2/blob/main/bench/ndarray/lazyarray-dask-large.ipynb>`_).
214
+ `larger benchmark here <https://github.com/Blosc/python-blosc2/blob/main/bench/ndarray/lazyarray-dask-large.ipynb>`_).
215
215
 
216
216
  .. image:: https://github.com/Blosc/python-blosc2/blob/main/images/lazyarray-dask-large.png?raw=true
217
217
  :width: 100%
@@ -255,7 +255,7 @@ expression, where the operands are on disk, with the result being a
255
255
  1D array stored in memory (or optionally on disk via the ``out=``
256
256
  parameter in ``compute()`` or ``sum()`` functions). For a more in-depth look at
257
257
  this example, with performance comparisons, see this
258
- `blog post <https://ironarray.io/blog/compute-bigger>`_.
258
+ `compute-bigger blog post <https://ironarray.io/blog/compute-bigger>`_.
259
259
 
260
260
  Hopefully, this overview has provided a good understanding of Python-Blosc2's
261
261
  capabilities. To begin your journey with Python-Blosc2, proceed to the
@@ -27,11 +27,11 @@
27
27
  "source": [
28
28
  "### Choosing the Right Interface\n",
29
29
  "\n",
30
- "| Goal | Recommended API |\n",
31
- "|--------------------------------------------------------------| --- |\n",
32
- "| Elementwise formulas using built-in functions/operators | `blosc2.lazyexpr(...)` |\n",
33
- "| Arbitrary Python logic (including numba) over blocks/chunks | `blosc2.lazyudf(...)` |\n",
34
- "| DSL subset with early syntax checks and optional miniexpr JIT | `@blosc2.dsl_kernel` + `blosc2.lazyudf(...)` |\n"
30
+ "| Goal | Recommended API |\n",
31
+ "|--------------------------------------------------------------|------------------------------------------|\n",
32
+ "| Elementwise formulas using built-in functions/operators | blosc2.lazyexpr(...) |\n",
33
+ "| Arbitrary Python logic (including numba) over blocks/chunks | blosc2.lazyudf(...) |\n",
34
+ "| DSL subset with early syntax checks and optional miniexpr JIT | @blosc2.dsl_kernel + blosc2.lazyudf(...) |\n"
35
35
  ]
36
36
  },
37
37
  {