--- html_theme.sidebar_primary.remove: true --- # Changelog This project adheres to Keep a Changelog and Semantic Versioning. ## v0.2.0 - Added - CSC/COO Python classes and bindings parity with CSR (`Csc64`, `Coo64`). - Format conversions exposed via Python: CSR<->CSC, CSR<->COO, CSC<->COO. - ND COO baseline: - Kernels in `lacuna-kernels`: `sum_coond_f64`, `permute_axes_coond_f64_i64`, `reduce_sum_axes_coond_f64_i64`, `spmv_coond_f64_i64`, `spmm_coond_f64_i64`. - ND→2D conversions: `coond_mode_to_{csr,csc}_f64_i64`, `coond_axes_to_{csr,csc}_f64_i64`. - PyO3 exports for ND wrappers in `lacuna-py` (`coond_*_from_parts`). - High-level Python `COOND` class in `lacuna.sparse`; added `python/tests/test_nd.py`. - ND COO new ops: - Mean: `mean_coond_f64`; Axis-wise mean: `reduce_mean_axes_coond_f64_i64`. - Reshape: `reshape_coond_f64_i64`. - Broadcasted Hadamard product: `hadamard_broadcast_coond_f64_i64`. - PyO3 exports for new ND ops: - `coond_mean_from_parts`, `coond_reduce_mean_axes_from_parts`, `coond_reshape_from_parts`, `coond_hadamard_broadcast_from_parts`. - Python `COOND` methods: `mean`, `reduce_mean_axes`, `reshape`, `hadamard_broadcast`. - Python tests: added coverage for the above ND ops in `python/tests/test_nd.py`. - Changed - Split monolithic `lacuna-py/src/lib.rs` into modules: `csr.rs`, `csc.rs`, `coo.rs`, `functions.rs`. - No Python API changes; `lib.rs` now only aggregates and registers symbols. - Centralized kernel utilities in `lacuna-kernels/src/util.rs` (constants, helpers, `UsizeF64Map`). - Benchmarks now import `lacuna` only from the installed environment (removed local `sys.path` injection). - Performance - Replaced `HashMap`-based sparse accumulators with a custom linear-probing `UsizeF64Map` in `reduce.rs` and `spmv.rs`. - Parallelized small-dimension reduction paths; SIMD-accelerated stripe merge in column-sum kernels. - Parallel linearization in `coond_axes_to_coo_f64_i64` using slice access + unchecked indexing to reduce overhead. - Parallel index normalization/accumulation in ND broadcasted Hadamard and parallel linearize/delinearize in ND reshape. - Fixed - Balanced unmatched braces in `reduce.rs` causing "unclosed delimiter" compile errors; added missing closers. - Fixed Rayon `Sync` error in `convert.rs` by avoiding capturing raw pointers in parallel closures (use slice + `get_unchecked`). - Fixed `i64_to_usize` missing brace in `arith.rs`. - Resolved `E0596` borrow errors in parallel closures in `arith.rs` and `transform.rs` by using raw pointer writes for disjoint parallel writes. - Removed stray closing brace in `arith.rs`. - Corrected `product_checked` to return the accumulator and moved `mean_coond_f64`/`reduce_mean_axes_coond_f64_i64` to top-level scope in `reduce.rs`. ## v0.1.0 - Added - Core CSR sparse matrix type with `f64` values and `i64` indices. - Python bindings via PyO3; development builds via `maturin develop`. - Core operations (CSR basics): - Shape/nnz/meta, transpose, dtype/index casting. - Reductions: global sum, row/column sums. - Element access (`A[i, j]` read) and row/column slicing. - Arithmetic: `A @ x` (SpMV), `A @ B_dense` (SpMM), `A + B`, `A - B`, Hadamard `A.multiply(B)`, scalar ops. - Cleanup utilities: `eliminate_zeros`, `prune(eps)`. - High-performance kernels (rayon parallelism + `std::simd`) for `f64/i64` in `lacuna-kernels`. - Repository structure with `lacuna-core`, `lacuna-kernels`, `lacuna-io`, `lacuna-py`, and Python package `lacun`. - Tests: Rust unit tests and Python `pytest` suite; basic benchmark scripts. - Packaging - Build and install with `maturin`; Python 3.10–3.13. - Windows, Linux (manylinux), and macOS targets in plan; wheel scripts provided. - Documentation - Initial developer guide and project overview.