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.
- {blosc2-4.1.2 → blosc2-4.2.0}/.pre-commit-config.yaml +1 -1
- blosc2-4.2.0/AGENTS.md +53 -0
- blosc2-4.2.0/ANNOUNCE.rst +86 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/CMakeLists.txt +26 -4
- blosc2-4.2.0/CONTRIBUTING.rst +45 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/PKG-INFO +5 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/README_DEVELOPERS.md +31 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/RELEASE_NOTES.md +79 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/RELEASING.rst +3 -5
- {blosc2-4.1.2 → blosc2-4.2.0}/ROADMAP-TO-4.0.md +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/conf.py +21 -81
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/overview.rst +5 -5
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/03.lazyarray-udf-kernels.ipynb +5 -5
- blosc2-4.2.0/doc/getting_started/tutorials/11.objectarray.ipynb +325 -0
- blosc2-4.2.0/doc/getting_started/tutorials/12.batcharray.ipynb +495 -0
- blosc2-4.2.0/doc/getting_started/tutorials/13.containers.ipynb +583 -0
- blosc2-4.2.0/doc/getting_started/tutorials/13.ctable-basics.ipynb +2873 -0
- blosc2-4.2.0/doc/getting_started/tutorials/14.indexing-arrays.ipynb +659 -0
- blosc2-4.2.0/doc/getting_started/tutorials/15.indexing-ctables.ipynb +532 -0
- blosc2-4.2.0/doc/getting_started/tutorials/images/containers/README.md +20 -0
- blosc2-4.2.0/doc/getting_started/tutorials/images/containers/overview.svg +783 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials.rst +6 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/python-blosc2.rst +1 -1
- blosc2-4.2.0/doc/reference/batch_array.rst +93 -0
- blosc2-4.2.0/doc/reference/classes.rst +148 -0
- blosc2-4.2.0/doc/reference/ctable.rst +627 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/dict_store.rst +7 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/embed_store.rst +1 -1
- blosc2-4.2.0/doc/reference/index_class.rst +36 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/index_funcs.rst +1 -3
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/lazyarray.rst +12 -3
- blosc2-4.2.0/doc/reference/list_array.rst +78 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/misc.rst +72 -2
- blosc2-4.2.0/doc/reference/msgpack_serialization.rst +125 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/ndarray.rst +1 -1
- blosc2-4.2.0/doc/reference/objectarray.rst +86 -0
- blosc2-4.2.0/doc/reference/ref.rst +13 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/save_load.rst +2 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/schunk.rst +24 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/tree_store.rst +1 -1
- blosc2-4.2.0/examples/batch_array.py +73 -0
- blosc2-4.2.0/examples/ctable/aggregates.py +74 -0
- blosc2-4.2.0/examples/ctable/arrow_interop.py +83 -0
- blosc2-4.2.0/examples/ctable/basics.py +62 -0
- blosc2-4.2.0/examples/ctable/computed-columns.py +294 -0
- blosc2-4.2.0/examples/ctable/csv_interop.py +82 -0
- blosc2-4.2.0/examples/ctable/index_on_b2z.py +147 -0
- blosc2-4.2.0/examples/ctable/indexing.py +100 -0
- blosc2-4.2.0/examples/ctable/mutations.py +72 -0
- blosc2-4.2.0/examples/ctable/nullable.py +182 -0
- blosc2-4.2.0/examples/ctable/persistence.py +109 -0
- blosc2-4.2.0/examples/ctable/querying.py +60 -0
- blosc2-4.2.0/examples/ctable/real_world.py +115 -0
- blosc2-4.2.0/examples/ctable/schema.py +61 -0
- blosc2-4.2.0/examples/ctable/varlen_columns.py +38 -0
- blosc2-4.2.0/examples/embedded-expr-udf-b2z.py +76 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/mmap-rw.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/blosc2_3_10_demo.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/compute_expr.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/dsl_save.py +2 -2
- blosc2-4.2.0/examples/ndarray/expression_index.py +33 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/filter_sort_fields.py +2 -2
- blosc2-4.2.0/examples/ndarray/index_append_maintenance.py +31 -0
- blosc2-4.2.0/examples/ndarray/index_sorted_iteration.py +40 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/lists-vs-bools-idx.py +3 -3
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/malformed_dsl.py +5 -4
- blosc2-4.2.0/examples/ndarray/mandelbrot-pure-dsl.ipynb +466 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/meta.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/persistency.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/reduce_and_enlarge.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/reduce_expr_save.py +2 -2
- blosc2-4.2.0/examples/objectarray.py +69 -0
- blosc2-4.2.0/examples/ref-object.py +68 -0
- blosc2-4.2.0/examples/vlstore-lazyudf.py +47 -0
- blosc2-4.2.0/plans/changing-default-open-mode.md +341 -0
- blosc2-4.2.0/plans/computed-column-copilot.md +576 -0
- blosc2-4.2.0/plans/containers-tutorial.md +517 -0
- blosc2-4.2.0/plans/ctable-direct-expr-indexing.md +1027 -0
- blosc2-4.2.0/plans/ctable-getitem-row.md +593 -0
- blosc2-4.2.0/plans/ctable-implementation-log.md +415 -0
- blosc2-4.2.0/plans/ctable-indexes-opsi.md +1014 -0
- blosc2-4.2.0/plans/ctable-indexing.md +718 -0
- blosc2-4.2.0/plans/ctable-nulls.md +894 -0
- blosc2-4.2.0/plans/ctable-object-array.md +638 -0
- blosc2-4.2.0/plans/ctable-parquet-metadata.md +404 -0
- blosc2-4.2.0/plans/ctable-persistency.md +536 -0
- blosc2-4.2.0/plans/ctable-schema.md +1258 -0
- blosc2-4.2.0/plans/ctable-user-guide.md +497 -0
- blosc2-4.2.0/plans/ctable-varlen-cols.md +1080 -0
- blosc2-4.2.0/plans/materialized-computed-column.md +635 -0
- blosc2-4.2.0/plans/new-ctable-views.md +426 -0
- blosc2-4.2.0/plans/tree_store_extensions.md +258 -0
- blosc2-4.2.0/plans/treestore-ctable-extension.md +344 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/pyproject.toml +12 -3
- {blosc2-4.1.2 → blosc2-4.2.0}/scripts/install-codex-skill-wasm32.sh +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/__init__.py +119 -16
- blosc2-4.2.0/src/blosc2/b2objects.py +248 -0
- blosc2-4.2.0/src/blosc2/batch_array.py +961 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/blosc2_ext.pyx +829 -21
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/c2array.py +37 -3
- blosc2-4.2.0/src/blosc2/cli/__init__.py +1 -0
- blosc2-4.2.0/src/blosc2/cli/parquet_to_blosc2.py +875 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/core.py +26 -5
- blosc2-4.2.0/src/blosc2/ctable.py +6352 -0
- blosc2-4.2.0/src/blosc2/ctable_storage.py +605 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/dict_store.py +395 -83
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/dsl_kernel.py +15 -10
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/embed_store.py +19 -8
- blosc2-4.2.0/src/blosc2/indexing.py +7335 -0
- blosc2-4.2.0/src/blosc2/indexing_ext.pyx +2497 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/info.py +16 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/lazyexpr.py +475 -166
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/linalg.py +127 -35
- blosc2-4.2.0/src/blosc2/list_array.py +716 -0
- blosc2-4.2.0/src/blosc2/matmul_kernels.c +301 -0
- blosc2-4.2.0/src/blosc2/matmul_kernels.h +48 -0
- blosc2-4.2.0/src/blosc2/msgpack_utils.py +92 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/ndarray.py +663 -121
- blosc2-4.2.0/src/blosc2/objectarray.py +428 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/proxy.py +10 -8
- blosc2-4.2.0/src/blosc2/ref.py +128 -0
- blosc2-4.2.0/src/blosc2/scalar_array.py +426 -0
- blosc2-4.2.0/src/blosc2/schema.py +813 -0
- blosc2-4.2.0/src/blosc2/schema_compiler.py +492 -0
- blosc2-4.2.0/src/blosc2/schema_validation.py +185 -0
- blosc2-4.2.0/src/blosc2/schema_vectorized.py +148 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/schunk.py +304 -33
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/storage.py +4 -2
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/tree_store.py +34 -15
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/utils.py +22 -10
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/version.py +1 -1
- blosc2-4.1.2/src/blosc2/_wasm_jit.py → blosc2-4.2.0/src/blosc2/wasm_jit.py +3 -3
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/conftest.py +18 -0
- blosc2-4.2.0/tests/ctable/test_arrow_interop.py +266 -0
- blosc2-4.2.0/tests/ctable/test_column.py +857 -0
- blosc2-4.2.0/tests/ctable/test_column_ndarray_like.py +51 -0
- blosc2-4.2.0/tests/ctable/test_compact.py +152 -0
- blosc2-4.2.0/tests/ctable/test_construct.py +201 -0
- blosc2-4.2.0/tests/ctable/test_csv_interop.py +235 -0
- blosc2-4.2.0/tests/ctable/test_ctable_computed_cols.py +797 -0
- blosc2-4.2.0/tests/ctable/test_ctable_dataclass_schema.py +289 -0
- blosc2-4.2.0/tests/ctable/test_ctable_indexing.py +646 -0
- blosc2-4.2.0/tests/ctable/test_delete_rows.py +203 -0
- blosc2-4.2.0/tests/ctable/test_extend_delete.py +254 -0
- blosc2-4.2.0/tests/ctable/test_nullable.py +626 -0
- blosc2-4.2.0/tests/ctable/test_parquet_interop.py +676 -0
- blosc2-4.2.0/tests/ctable/test_row_logic.py +215 -0
- blosc2-4.2.0/tests/ctable/test_schema_compiler.py +278 -0
- blosc2-4.2.0/tests/ctable/test_schema_mutations.py +459 -0
- blosc2-4.2.0/tests/ctable/test_schema_specs.py +343 -0
- blosc2-4.2.0/tests/ctable/test_schema_validation.py +183 -0
- blosc2-4.2.0/tests/ctable/test_select_describe_cov.py +276 -0
- blosc2-4.2.0/tests/ctable/test_sort_by.py +310 -0
- blosc2-4.2.0/tests/ctable/test_table_persistency.py +659 -0
- blosc2-4.2.0/tests/ctable/test_varlen_columns.py +87 -0
- blosc2-4.2.0/tests/ctable/test_varlen_schema_compiler.py +48 -0
- blosc2-4.2.0/tests/ctable/test_vlstring_vlbytes.py +589 -0
- blosc2-4.2.0/tests/ctable/test_where_expressions.py +75 -0
- blosc2-4.2.0/tests/data/legacy_lazyexpr_v1/a.b2nd +0 -0
- blosc2-4.2.0/tests/data/legacy_lazyexpr_v1/b.b2nd +0 -0
- blosc2-4.2.0/tests/data/legacy_lazyexpr_v1/expr.b2nd +0 -0
- blosc2-4.2.0/tests/data/legacy_lazyudf_v1/a.b2nd +0 -0
- blosc2-4.2.0/tests/data/legacy_lazyudf_v1/b.b2nd +0 -0
- blosc2-4.2.0/tests/data/legacy_lazyudf_v1/expr.b2nd +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_c2array_expr.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_concat.py +2 -2
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_dsl_kernels.py +78 -27
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_full.py +1 -1
- blosc2-4.2.0/tests/ndarray/test_indexing.py +2243 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_lazyexpr.py +99 -33
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_lazyexpr_fields.py +4 -4
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_lazyudf.py +19 -2
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_linalg.py +370 -3
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_ndarray.py +243 -5
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_persistency.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_proxy.py +3 -3
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_proxy_c2array.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_proxy_expr.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_reductions.py +18 -18
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_setitem.py +2 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_stringarrays.py +3 -3
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_struct_dtype.py +1 -1
- blosc2-4.2.0/tests/test_b2objects.py +209 -0
- blosc2-4.2.0/tests/test_batch_array.py +722 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_dict_store.py +288 -0
- blosc2-4.2.0/tests/test_list_array.py +90 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_mmap.py +6 -4
- blosc2-4.2.0/tests/test_objectarray.py +523 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_open.py +55 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_open_c2array.py +1 -1
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_proxy_schunk.py +2 -2
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk.py +13 -0
- blosc2-4.2.0/tests/test_schunk_reorder_offsets.py +73 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_update.py +35 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_tree_store.py +151 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_vlmeta.py +27 -0
- blosc2-4.1.2/ANNOUNCE.rst +0 -93
- blosc2-4.1.2/CONTRIBUTING.rst +0 -36
- blosc2-4.1.2/doc/reference/classes.rst +0 -57
- {blosc2-4.1.2 → blosc2-4.2.0}/.gitattributes +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/.gitignore +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/.guix/modules/python-blosc2-package.scm +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/.guix-channel +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/.skills/wasm32-pyodide-dev/SKILL.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/.skills/wasm32-pyodide-dev/references/commands.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/ADD_LAZYFUNCS.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/LICENSE.txt +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/README.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/code_of_conduct.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/blosc-favicon_32x32.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/blosc-favicon_64x64.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/blosc-logo_128.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/blosc-logo_256.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/_static/css/custom.css +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/development/code-of-conduct.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/development/contributing.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/development/index.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/development/roadmap.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/dsl_syntax.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/index.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/installation.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/01.ndarray-basics.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/02.lazyarray-expressions.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/03.lazyarray-udf.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/04.reductions.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/05.persistent-reductions.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/06.remote_proxy.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/07.schunk-basics.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/08.schunk-slicing_and_beyond.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/09.ucodecs-ufilters.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/10.prefilters.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/blosc2-pipeline.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/blosc2-pipeline.svg +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/lazyexpr-broadcast.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/proxyconnection.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/reductions/3D-cube-plane.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/reductions/3D-cube.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/reductions/memory-access-2D-x.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/reductions/memory-access-2D-y.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/remote_proxy.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/backward.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/backward.svg +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/decoder.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/decoder.svg +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/decoder2.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/decoder2.svg +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/encoder.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/encoder.svg +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/encoder2.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/encoder2.svg +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/forward.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/getting_started/tutorials/images/ucodecs-filters/forward.svg +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/index.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/additional_funcs.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/array.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/array_operations.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/c2array.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/index.rst +4 -4
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/linalg.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/low_level.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/ndfield.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/proxy.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/proxyndsource.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/proxysource.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/reduction_functions.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/simpleproxy.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/storage.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/ufuncs.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/reference/utilities.rst +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/doc/release_notes/index.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/blosc2_hdf5_compression.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/btune.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/c2array-get-slice.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/compress2_decompress2.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/compress_decompress.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/dict-store.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/embed-store.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/filler.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/gil.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/animated_plot.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/arange-constructor.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/asarray_.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/black-scholes_hist-dsl.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/broadcast_expr.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/buffer.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/bytedelta_filter.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/c2array_expr.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/compute_fields.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/compute_udf_numba.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/compute_where.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/copy_.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/empty_.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/eye-constructor.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/formats.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/fromiter-constructor.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/general_expressions.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/getitem.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/ironpill1.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/iterchunks_info.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/jit-expr.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/jit-numpy-funcs.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/jit-reduc.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/lazyexpr_where_indexing.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/linspace-constructor.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/mandelbrot-dsl.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/ndarray_copy.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/ndmean.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/proxy-carray.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/proxy-ndarray.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/reduce_expr.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/reduce_string_expr.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/resize_.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/string_arrays.ipynb +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/work_with_numpy.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/xarray-expression.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ndarray/zfp_codec.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/pack_array.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/pack_tensor.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/postfilter1.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/postfilter2.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/postfilter3.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/prefilter.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/save_tensor.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/schunk.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/schunk_roundtrip.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/tree-store-blog.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/tree-store.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ucodecs.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/ufilters.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/examples/vlmeta.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/generate_version.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/guix.scm +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/Complete-Write-Read-B2ND.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/M1-i386-vs-arm64-pack.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/M1-i386-vs-arm64-unpack.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/Read-Partial-Slices-B2ND.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/b2nd-2level-parts.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/eval-expr-full-mem-M2.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/eval-expr-scarce-mem-M2.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/lazyarray-dask-large.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/lazyarray-dask-small.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/lazyarray-expr-large.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/lazyarray-expr.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/linspace-compress.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/linspace-decompress.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/pack-array-cratios.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/reduc-float64-amd.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/images/reduc-float64-log-amd.png +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/plans/external-js-glue-blosc2-todo.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/plans/external-js-glue.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/plans/phase0-t1-dsl-syntax-inventory.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/plans/wasm32-todo.md +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/pytest.ini +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/exceptions.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/src/blosc2/fft.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/array-api-xfails.txt +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_auto_parts.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_buffer.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_c2array_reductions.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_c2array_udf.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_copy.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_elementwise_funcs.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_empty.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_evaluate.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_get_slice_nchunks.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_getitem.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_iterchunks_info.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_jit.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_lossy.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_metalayers.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_mode.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_nans.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_numpy.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_resize.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_slice.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_squeeze.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_wasm_dsl_jit.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/ndarray/test_zeros.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_bytes_array.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_comp_info.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_compress2.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_compression_parameters.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_compressors.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_decompress.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_embed_store.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_iterchunks.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_numexpr_threads.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_pandas_udf_engine.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_pathlib.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_postfilters.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_prefilters.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_python_blosc.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_constructor.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_delete.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_get_slice.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_get_slice_nchunks.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_insert.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_schunk_set_slice.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_storage.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_tensor.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_ucodecs.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/tests/test_ufilters.py +0 -0
- {blosc2-4.1.2 → blosc2-4.2.0}/update_version.py +0 -0
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
|
|
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
|
|
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.
|
|
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 `.
|
|
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
|
-
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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
|
|
31
|
-
"
|
|
32
|
-
"| Elementwise formulas using built-in functions/operators |
|
|
33
|
-
"| Arbitrary Python logic (including numba) over blocks/chunks |
|
|
34
|
-
"| DSL subset with early syntax checks and optional miniexpr JIT |
|
|
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
|
{
|