Changes in version 0.1.5 Performance - RowMergeMatrices() scatters CSR rows straight into CSC storage. - ReplaceColsC() copies unchanged columns and splices replacements in one pass. - IntegrateDataC() multiplies anchor weights with a dense anchor buffer instead of a generic sparse matrix product. - fast_dist() writes distances straight into R vectors. Inputs of a few thousand cells stay in column-major order; larger inputs are transposed and computed in parallel. - WriteEdgeFile() and DirectSNNToFile() format edge weights into one buffer. The file text is unchanged. DirectSNNToFile() uses the parallel SNN kernel from 256 cells, so the 400-cell case is parallel. - Returned dgCMatrix objects are filled by assigning S4 slots. That skips the methods::new() validity scan on CSC data that is already valid. Changes in version 0.1.4 Performance - FastExpMean(), FastLogVMR(), SparseRowVar(), and SparseRowVarStd() scan CSC columns directly and accumulate per gene. They no longer build a row index first, which made them slower than Seurat. Changes in version 0.1.3 Seurat compatibility fixes - fast_dist() accepts integer neighbor ids (previously it panicked unless ids were doubles), keeps the names of the neighbor list like Seurat, and reports out-of-range or NA ids as R errors. - GraphToNeighborHelper() now reads each cell's neighbors from its row, as Seurat does; it previously read columns, which gave different neighbor sets for asymmetric graphs. Ragged rows raise an R error instead of a panic. - DirectSNNToFile() returns the SNN graph as a dgCMatrix (it returned the raw x/i/p/Dim list) and validates nn_ranked like ComputeSNN(). - DirectSNNToFile() and WriteEdgeFile() format edge weights like C++ setprecision(15), so edge files are byte-identical to Seurat's. File errors are R errors instead of panics. - Integer matrices and vectors are coerced to double before reaching Rust wherever Seurat's Rcpp signature would coerce them (ComputeSNN(), FastCov(), SparseRowVar2() means, and others). - RowMergeMatrices() still accepts a dgCMatrix (Seurat requires an RsparseMatrix); this is now documented. Performance - FastCov() and FastCovMats() read R memory directly and use a blocked, multi-threaded matrix product (FastCov() only computes the upper triangle). They were several times slower than Seurat and are now faster. - FastRBind() copies columns straight into the result instead of going through element-wise ndarray conversions (about 50x faster than 0.1.2 on large inputs). Build - Removed the unused Eigen C++ bridge. Source builds no longer need a C++ compiler or RcppEigen, which fixes builds where c++ is Clang without a usable C++ standard library ('cmath' file not found). Changes in version 0.1.2 - Update maintainer contact for CRAN submissions. - Link the Rust static library with Apple ld (-force_load) so macOS source builds succeed. - Carry forward the 0.1.1 packaging fixes for Windows configure and portable Makevars. Changes in version 0.1.1 - Fix Windows source installs for CRAN by adding configure.win / cleanup.win so Makevars.win is generated and the Rust static library is linked. - Remove non-portable .NOTPARALLEL from Makevars templates. - Clarify DESCRIPTION / README wording for CRAN incoming checks. Changes in version 0.1.0 - Initial public release of Rust/extendr native kernels matching Seurat's internal C++ API (LogNorm, FastSparseRowScale, ComputeSNN, IntegrateDataC, RunModularityClusteringCpp, and related helpers). - Offline CRAN builds via vendored Rust crates (src/rust/vendor.tar.xz). - Installable from GitHub Releases, r-universe, and (after acceptance) CRAN.