Skip to content

Releases: SpaceCell/minarrow

minarrow v0.16.0

Choose a tag to compare

@pbower pbower released this 16 Jul 11:03

0.16.0 - 2026-07-16

This version completes Python ecosystem compatibility with DLPack support for landing data (or ChunkedNdArray) data in Rust
and bridging to Python for AI/ML and back.

Moving forward we will aim to minimise breaking changes and stabilise to a 1.0 version in the coming month(s). Additionally, include a Stable Rust build.

The new NdArray, XArray and SuperNdArray may however see breaking changes before then until they have had time for production use.

Added

NdArray, XArray and DLPack Feature:

  • NdArray n-dimensional dense array (ndarray feature) over Buffer<T>,
    generic over f32/f64, with NaN null semantics, NdArrayV zero-copy views,
    transpose and axis permutation, and Table/Matrix/Array interop.
  • SuperNdArray chunked n-dimensional array with SuperNdArrayV
    chunk-spanning views and rechunking.
  • XArray labelled n-dimensional array (xarray feature) with named
    dimensions, coordinate selection via at/between/nearest, and owned,
    view, or chunked storage behind one type.
  • DLPack tensor interchange (dlpack feature) over the legacy and 1.x
    versioned ABIs for zero-copy sharing with PyTorch, JAX, and TensorFlow.
  • AxisSelection trait for .s() axis slicing, with NdArrayVT,
    SuperNdArrayVT, and XArrayVT view tuple aliases.
  • Broadcast kernels for NdArray, SuperNdArray, and XArray, plus
    Value variants, conversions, and concatenation for the new types.
  • NdArray in minarrow-py with the DLPack protocol - __dlpack__,
    from_dlpack, and named bridges to NumPy, PyTorch, JAX, TensorFlow,
    and CuPy.
  • PyNdArray in minarrow-pyo3 (ndarray feature) for Rust extensions
    bridging tensors to Python, with the DLPack capsule glue hosted in
    its ffi::dlpack and shared by minarrow-py.

Minor Feature Additions

  • At value_at to Array and ArrayV for (opt-in) normalised equality checking.
  • Added bitmask-driven gather to Array, Table and their view variants.
  • Added default SIMD chipset behaviour.
  • Added bitwise kernels.
  • Added default display trait impl to Scalar.
  • Added LBuffer::freeze().
  • Added NdArray n-dimensional array with views and chunked variants.
  • Added XArray labelled n-dimensional array.
  • Added axis selection, broadcasting, and Value support for the n-dimensional types.
  • Added DLPack FFI for zero-copy PyTorch, JAX, and TensorFlow interchange, with NdArray in minarrow-py and minarrow-pyo3.
  • Added get, get_unchecked, get_str and get_str_unchecked methods to Array
  • Added bitmask gather to Array, Table and their view variants.

Bugfixes

  • Fixed a kernel branching issue in the arithmetic SIMD paths.
  • Fixed out-of-range categorical codes to resolve to the empty string.
  • Fixed StringArray length reporting the byte length when MaskedArray was not imported.
  • Fixed null handling bug on String and Categorical set_str method.

Modified

  • Bumped pyo3 to 0.29.

  • Normalised hash_element_at so NaN maps to a dummy/sentinel value

  • Added value_eq method to Array and ArrayV where NaN == NaN, -0.0 == 0.0, Null == Null etc.

  • Normalised equality checking for Scalar -0.0 == 0.0 and NaN == NaN.
    Note: the above three only affect users opting into the methods and/or Scalar abstraction.
    For users wanting IEEE compatibility for floats using myarr.clone().num().f64() gets to a FloatArray zero-copy.

Minarrow V0.15

Choose a tag to compare

@pbower pbower released this 30 Jun 13:59

Minarrow 0.15.0 accompanies the major release of Minarrow Python.

Added

  • _into Datetime kernel variants for efficient non-allocations.
  • _into Bitmask kernel variants for efficient non-allocations.
  • UnsafeMut utility Buffer for handling cross-thread bitpacked writes.

Changed

  • Improved name construction ergonomics.

Minarrow V0.14.0

Choose a tag to compare

@pbower pbower released this 20 Jun 19:23
  1. Added _into mutable output buffer datetime variants supporting efficient parallelism.
  2. Added TimePeriod enum consistency for datetime periods with automatic deref on string constituents i.e., week becomes TimePeriod::Week at the call-site.
  3. Fixed BitmaskV lifetime.
  4. Fixed BooleanArray length visibility.

Minarrow 0.13.0

Choose a tag to compare

@pbower pbower released this 13 Jun 01:03

See CHANGELOG.md for details

minarrow-pyo3 0.3.0

Choose a tag to compare

@pbower pbower released this 16 May 23:28
2d220a5

Changed

  • Bumped minarrow dependency from 0.10.1 to 0.11.0.

Removed

  • Unused nightly feature gates (allocator_api, slice_ptr_get,
    portable_simd) from the crate root. The underlying allocator-aware types
    are re-exported from minarrow, so the gates are not required at this
    crate's call sites.

minarrow 0.11.0

Choose a tag to compare

@pbower pbower released this 15 May 15:55
9a400b4

[0.11.0] - 2026-05-15

Added

  • arrow-rs / polars import bridges (#70): symmetric from_apache_arrow /
    from_polars across Array, FieldArray, Table, SuperArray, and
    SuperTable, each with a try_* sibling returning Result<_, MinarrowError>.
    Adds From<&Series>, From<&RecordBatch>, From<&DataFrame>, and
    From<&[RecordBatch]> for .into() ergonomics.
  • New feature-gated bridge modules src/ffi/arrow_rs.rs (cast_arrow) and
    src/ffi/polars.rs (cast_polars) centralising the export / import pairs (#70).
  • MinarrowError::BridgeError variant carrying arrow-rs / polars FFI failures,
    with feature-gated From impls for ArrowError and PolarsError (#70).
  • Matrix: strided LAPACK matrix getters, improved interoperability, and
    improved docs (#59, #62).
  • Cross-tabulate string kernel.
  • has_nulls accessor (#63).
  • with_capacity for CategoricalArray<T> (#67).
  • Filled missing trait impls: SuperTable From, TryFrom<Value> gaps,
    From<BooleanArrayV> for Value, plus other From impls (#67).
  • Vec64 arm for the fa! macro.
  • Zero-copy to_array escape path.
  • Minimal log dependency.

Changed

  • View -> owned conversions take a fast path when the view spans its full
    backing storage (offset 0, length matches the backing array): skips
    slice_clone and returns an Arc clone of the underlying allocation (#80).
  • Polars Array / FieldArray / Table from_polars now route through
    SuperArray::from_polars / SuperTable::from_polars, correctly handling
    multi-chunked Series / DataFrame inputs (#76, #77).
  • Bumped all dependencies to latest semver (#68).
  • Breaking: renamed SuperArray::to_apache_arrow_chunks and
    SuperTable::to_apache_arrow_batches to to_apache_arrow (#70).

Removed

  • Breaking: removed Array::to_apache_arrow_with_field and
    Array::to_polars_with_field. Wrap in a FieldArray and call its to_*()
    method when an explicit Field is needed (#70).

Fixed

  • Per-call Box leak in the to_* export paths — ArrowArray / ArrowSchema
    heap wrappers were not freed after read() (#70).
  • Categorical pandas -1 null sentinel handling (#69).
  • Zero-sized shared buffer checks: round-trips through SharedBuffer for
    zero-row columns no longer panic on alignment assertions (#73).
  • Polars default features (#77).
  • Default features and the test harness; stale ref in benches.
  • Pinned the toolchain via rust-toolchain.toml to work around an upstream
    issue.