Skip to content

Latest commit

 

History

History
458 lines (265 loc) · 13.5 KB

CHANGELOG.rst

File metadata and controls

458 lines (265 loc) · 13.5 KB

Changelog

4.2.2 - unreleased

Other changes:

  • Clarified that sparse_threshold is used to sparsify numerical columns and is not used to densify columns that are already sparse.
  • Fixed the benchmark harness silently recording zero timings and memory under pandas 3, where the chained assignment it used is rejected by copy-on-write.
  • We disabled fast math to avoid invalid results (e.g., when dividing by zero).

4.2.1 - 2026-02-04

Bug fixes:

  • Fixed methods _cross_categorical, _cross_sandwich, multiply, tocsr of CategoricalMatrix and function _sandwich_cat_cat_limited_rows_cols to operate on read-only buffers as well.

4.2.0 - 2026-01-13

New feature:

  • :func:`tabmat.from_formula` now also supports any dataframe supported by narwhals.

Other changes:

  • Require Python>=3.10.

4.1.5 - 2025-12-17

Other changes:

  • Restore building wheels for Intel-based macOS systems.

4.1.4 - 2025-12-16

Other changes:

  • :func:`tabmat.from_df` now avoids unnecessary copies of dense arrays, but still ensures that the results are contiguous (C or F order).
  • We now use narwhals' v2 API for data frame handling.

4.1.3 - 2025-11-12

Bug fixes:

  • Fixed :meth:`CategoricalMatrix.transpose_matvec` to operate on read-only buffers as well.
  • Fixed incorrect calculation of the shape of a :class:`CategoricalMatrix` when initialized with zero categories and drop_first=True.

4.1.2 - 2025-07-17

Bug fixes:

  • Fixed a bug which caused issues when constructing tabmat matrices from existing ModelSpecs when they contained categorical columns with all levels dropped.
  • We can now treat dedicated pandas string series - which are the defaults for strings since pandas 2.3 - as categoricals.

4.1.1 - 2025-01-30

Bug fix:

  • A more robust :meth:`DenseMatrix._get_col_stds` results in more accurate :meth:`StandardizedMatrix.sandwich` results.

Other changes:

  • Build wheel for pypi on python 3.13.
  • Build and test with python 3.13 in CI.

4.1.0 - 2024-11-07

New feature:

  • Added a new function, :func:`tabmat.from_df`, to convert any dataframe supported by narwhals into a :class:`tabmat.SplitMatrix`.

Other changes:

  • Allow :class:`CategoricalMatrix` to be initialized directly with indices and categories.
  • Added checks for dimension and dtype mismatch in :meth:`MatrixBasesandwich.sandwich`.

Bug fix:

  • Fixed a bug in :meth:`tabmat.CategoricalMatrix.standardize` that sometimes returned nan values for the standard deviation due to numerical instability if using np.float32 precision.

4.0.1 - 2024-06-25

Other changes:

  • Removed reference to the .A attribute and replaced it with .toarray().
  • Add support between formulaic and pandas 3.0.
  • Support pypi release for numpy 2.0

4.0.0 - 2024-04-23

Breaking changes:

  • To unify the API, :class:`DenseMatrix` does not inherit from :class:`np.ndarray` anymore. To convert a :class:`DenseMatrix` to a :class:`np.ndarray`, use :meth:`DenseMatrix.unpack`.
  • Similarly, :class:`SparseMatrix` does not inherit from :class:`sps.csc_matrix` anymore. To convert a :class:`SparseMatrix` to a :class:`sps.csc_matrix`, use :meth:`SparseMatrix.unpack`.

New features:

  • Added column name and term name metadata to :class:`MatrixBase` objects. These are automatically populated when initializing a :class:`MatrixBase` from a :class:`pandas.DataFrame`. In addition, they can be accessed and modified via the :attr:`MatrixBase.column_names` and :attr:`MatrixBase.term_names` properties.
  • Added a formula interface for creating tabmat matrices from pandas data frames. See :func:`tabmat.from_formula` for details.
  • Added support for missing values in :class:`CategoricalMatrix` by either creating a separate category for them or treating them as all-zero rows.
  • Added support for handling missing categorical values in pandas data frames.

Bug fix:

  • Added cython compiler directive legacy_implicit_noexcept = True to fix performance regression with cython 3.

Other changes:

  • Refactored the pre-commit hooks to use ruff.
  • Refactored :meth:`CategoricalMatrix.transpose_matvec` to be deterministic when using OpenMP.
  • Adjusted transformation to sparse format in :func:`tabmat.from_pandas` to future changes in pandas.

3.1.13 - 2023-10-17

Other changes:

  • Pypi release is now done using trusted publisher.
  • Fix build and upload of x86_64 wheels on Linux.

3.1.12 - 2023-10-16

Other changes:

  • Fixed macos arm64 wheels with proper linkage.

3.1.11 - 2023-10-13

Other changes:

  • Improve the performance of from_pandas in the case of low-cardinality categorical variables.
  • Require Python>=3.9 in line with NEP 29
  • Build and test with Python 3.12 in CI.
  • Fixed macos arm64 wheels with proper linkage.

3.1.10 - 2023-06-23

Bug fixes:

  • We fixed a bug in the dense sandwich product, which would previously segfault for very large matrices.
  • Fixed the column order when initializing a SplitMatrix from a list containing other SplitMatrix objects.
  • Fixed getcol not respecting the drop_first attribute of a CategoricalMatrix.

3.1.9 - 2023-06-16

Other changes:

  • Support building on architectures that are unsupported by xsimd.

3.1.8 - 2023-06-13

Other changes:

  • The C++ types have been refactored. Loop indices are now using the Py_ssize_t type. Integers now have a templated type as well.
  • The documentation for matvec and matvec_transpose has been updated to reflect actual behavior.
  • Checks for dimension mismatch in matvec and matvec_transpose arguments have been added.
  • Remove upper pin on xsimd.

3.1.7 - 2022-03-28

Bug fix:

  • We fixed a bug in the cross sandwich product, which would previously segfault for very large matrices.

3.1.6 - 2022-03-27

Bug fix:

  • We fixed a bug in the dense sandwich product, which would previously segfault for very large F-contiguous matrices.

3.1.5 - 2022-03-20

Bug fix:

  • We fixed a bug in the dense matrix-vector and sandwich products, which would previously segfault for very large matrices.

3.1.4 - 2022-02-07

Bug fix:

  • Fixed the loading of jemalloc in Apple Silicon wheels.

3.1.3 - 2022-01-26

Other changes:

  • Build and upload wheels for Apple Silicon.

3.1.2 - 2022-07-01

Other changes:

  • Next attempt to build wheel for PyPI without march=native.

3.1.1 - 2022-07-01

Other changes:

  • Add Python 3.10 support to CI (remove Python 3.6).
  • Build wheel for PyPI without march=native.

3.1.0 - 2022-03-07

New feature

  • :class:`tabmat.CategoricalMatrix` now accepts a drop_first argurment. This allows the user to drop the first column of a CategoricalMatrix to avoid multicollinearity problems in unregularized models.
  • :class:`tabmat.StandardizedMatrix` and :class:`tabmat.MatrixBase` now support the multiply method.

3.0.8 - 2022-01-03

Bug fix

  • Always use 64bit integers for indexing in :meth:`tabmat.ext.sparse.sparse_sandwich` to avoid segmentation faults on very wide problems.

3.0.7 - 2021-11-23

Bug fix

  • Disable the use of static TLS in the Linux wheels to avoid issues with too small TLS on some distributions.

3.0.6 - 2021-11-11

Bug fix

  • We fixed a bug in :meth:`tabmat.SplitMatrix.matvec`, where incorrect matrix vector products were computed when a SplitMatrix did not contain any dense components.

3.0.5 - 2021-11-05

Other changes

  • We are now specifying the run time dependencies in setup.py, so that missing dependencies are automatically installed from PyPI when installing tabmat via pip.

3.0.4 - 2021-11-03

Other changes

  • tabmat is now available on PyPI and will be automatically updated when a new release is published.

3.0.3 - 2021-10-15

Bug fix

  • We now support xsimd>=8 and support alternative jemalloc installations.

3.0.2 - 2021-10-14

Bug fix

  • Allow to link to alternatively suffixed jemalloc installation to work around #113 .

3.0.1 - 2021-10-07

Bug fix

  • The license was mistakenly left as proprietary. Corrected to BSD-3-Clause.

Other changes

  • ReadTheDocs integration.
  • CONTRIBUTING.md
  • Correct pyproject.toml to work with PEP-517

3.0.0 - 2021-10-07

Breaking changes:

  • The package has been renamed to tabmat. CELEBRATE!
  • The :func:`one_over_var_inf_to_val` function has been made private.
  • The :func:`csc_to_split` function has been re-named to :func:`tabmat.from_csc` to match the :func:`tabmat.from_pandas` function.
  • The :meth:`tabmat.MatrixBase.get_col_means` and :meth:`tabmat.MatrixBase.get_col_stds` methods have been made private.
  • The :meth:`cross_sandwich` method has also been made private.

Bug fix

  • :func:`StandardizedMatrix.transpose_matvec` was giving the wrong answer when the out parameter was provided. This is now fixed.
  • :func:`SplitMatrix.__repr__` now calls the __repr__ method of component matrices instead of __str__.

Other changes

  • Optimized the :meth:`tabmat.SparseMatrix.matvec` and :meth:`tabmat.SparseMatrix.transpose_matvec` for when rows and cols are None.
  • Implemented :func:`CategoricalMatrix.__rmul__`
  • Reorganizing the documentation and updating the text to match the current API.
  • Enable indexing the rows of a CategoricalMatrix. Previously :func:`CategoricalMatrix.__getitem__` only supported column indexing.
  • Allow creating a SplitMatrix from a list of any MatrixBase objects including another SplitMatrix.
  • Reduced memory usage in :meth:`tabmat.SplitMatrix.matvec`.

2.0.3 - 2021-07-15

Bug fix

  • In :func:`SplitMatrix.sandwich`, when a col subset was specified, incorrect output was produced if the components of the indices array were not sorted. :func:`SplitMatrix.__init__` now checks for sorted indices and maintains sorted index lists when combining matrices.

Other changes

  • :func:`SplitMatrix.__init__` now filters out any empty matrices.
  • :func:`StandardizedMatrix.sandwich` passes rows=None and cols=None onwards to the underlying matrix instead of replacing them with full arrays of indices. This should improve performance slightly.
  • :func:`SplitMatrix.__repr__` now includes the type of the underlying matrix objects in the string output.

2.0.2 - 2021-06-24

Bug fix

Sparse matrices now accept 64-bit indices on Windows.

2.0.1 - 2021-06-20

Bug fix:

Split matrices now also work on Windows.

2.0.0 - 2021-06-17

Breaking changes:

We renamed several public functions to make them private. These include functions in :mod:`tabmat.benchmark` that are unlikely to be used outside of this package as well as

  • :func:`tabmat.dense_matrix._matvec_helper`
  • :func:`tabmat.sparse_matrix._matvec_helper`.
  • :func:`tabmat.split_matrix._prepare_out_array`.

Other changes:

  • We removed the dependency on sparse_dot_mkl. We now use :func:`scipy.sparse.csr_matvec` instead of :func:`sparse_dot_mkl.dot_product_mkl` on all platforms, because the former suffered from poor performance, especially on narrow problems. This also means that we removed the function :func:`tabmat.sparse_matrix._dot_product_maybe_mkl`.
  • We updated the pre-commit hooks and made sure the code is line with the new hooks.

1.0.6 - 2020-04-26

Other changes:

We are now also making releases for Windows.

1.0.5 - 2020-04-26

Other changes:

Still trying.

1.0.4 - 2020-04-26

Other changes:

We are trying to make releases for Windows.

1.0.3 - 2020-04-21

Bug fixes:

  • Added a check that matrices are two-dimensional in the SplitMatrix.__init__
  • Replace np.int with np.int64 where appropriate due to NumPy deprecation of np.int.

1.0.2 - 2020-04-20

Other changes:

  • Added Python 3.9 support.
  • Use scipy.sparse dot product when MKL isn't available.

1.0.1 - 2020-11-25

Bug fixes:

  • Handling for nulls when setting up a CategoricalMatrix
  • Fixes to make several functions work with both row and col restrictions and out

Other changes:

  • Added various tests and documentation improvements

1.0.0 - 2020-11-11

Breaking change:

  • Rename dot to matvec. Our dot function supports matrix-vector multiplication for every subclass, but only supports matrix-matrix multiplication for some. We therefore rename it to matvec in line with other libraries.

Bug fix:

  • Fix a bug in matvec for categorical components when the number of categories exceeds the number of rows.

0.0.6 - 2020-08-03

See git history.