Recent Releases of multipers

multipers - v2.3.3

TL;DR: More plot functions (cf doc) and several numpy vs torch factorization, and a bunch of fixes.

[Features]

  • New visualization functions (c.f. plot section in the doc)
  • option to use a (cleaner) contour plot instead of colormesh for plot_surface
  • Minimal decomposition in hook modules with mp.signed_measure(..., invariant="hook")
  • Cleaner default colormap
  • Faster measure cleaning
  • bunch of additions to the array_api for more "tensor-agnostic" functions in multipers (e.g., numpy vs torch)
  • Faster parallel convolutions.
  • Re-enabled expansion and make_filtration_non_decreasing for multi-critical filtrations
  • Updated a few notebooks + added a plot notebook

[Fixes]

  • bunch of plot issues / imprecisions
  • SignedMeasureFormatter had issues with torch
  • some grid stuff were not working with multicritical filtrations
  • python 3.10 issues
  • compilation warnings
  • Workflow updates (build)
  • array reshapes were sometime incorrect
  • For (nondifferentiable) strategy, dtype was sometime changing without notice

[Changes]

  • !Enforced resolutions instead of presentations for function_delaunay (could lead to unnecessary complications)
  • !Bumped libcpp linked version (following conda-forge's toolchain version). Please use the conda version or update your computer if you encounter issues.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous 5 months ago

multipers - v2.3.2

TL;DR: Easier autodiff, multipers.filtrations improvements

[Changes]

  • reductions in persistence related computation (e.g., signed_measure) are now deprecated. (even though this may be more handful, this can create unnecessary complications). Unnecessary copies and other missed optimizations should now raise proper warnings. ### [Features]
  • slicer generator's permutations can now be used to select subcomplexes
  • when seen as persistence morphisms, slicers can compute the projective cover of the corresponding morphism's kernel. It's based on similar subroutines as mpfree.
  • better inference of plot's box
  • factorized pytorch + numpy interfaces for faster and more seamless autodiff functions. This is now handled by the multipers.array_api new module.
  • The multipers.filtrations is now (when possible) expected to compute (pytorch) gradients when they are given. (Rips{Lowerstar,Codensity}, Delaunay{Lowerstar,Codensity}, Cubical).
  • for squeezable multipers objects, new _clean_filtration_grid to remove unnecessary grid elements. Multiple squeezes of an object have also saner behaviours (squeezed elements are expected to behave in the same way as their non-squeezed equivalent). ### [Fixes]
  • permutation and colexical sorts
  • numpy2 issues
  • pickle of mma modules wasn't working properly (#41)
  • grids engine improvements
  • cython 3.1 hotfixes.
  • grid projections were sometime incorrect or slow.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous 7 months ago

multipers - v2.3.1

TL;DR: Bugfixes, python 3.13.

[Changes]

  • !! moved the multipers.ml.convolutions to multipers.filtrations.density (sorry !)

[Features]

  • colexical filtration preprocess of slicers (mostly meant to debug)
  • ! num_parameters for simplextree defaults improvements
  • option to disable the "inf trick" optimization at runtime
  • KNN codensity (à la Vipond)
  • simplextree now has a length
  • Python 3.13, Gudhi 3.11 support

[Fixes]

  • density estimation renormalization
  • Windows issues
  • Python 3.13 issues
  • MMA do not impose new figure if not necessary, and other MMA plot issues
  • External software was not exact
  • MMA sometime had some issues on discrete filtrations
  • compilation warnings

Scientific Software - Peer-reviewed - C++
Published by DavidLapous 10 months ago

multipers - v2.3.0

TL;DR: New filtrations module, that centralizes standard filtrations.

[Features]

  • New multipers.filtrations module containing:
    • RipsLowersar, RipsCodensity
    • DelaunayLowerstar, DelaunayCodensity (from Delaunay Bifiltrations) this is a symlink to multipers.slicer.from_function_delaunay)
    • CoreDelaunay (Thanks @odinhg !) (from Core Bifiltration)
    • Cubical which is a symlink to multipers.slicer.from_bitmap
    • corresponding tests

Note that the interface of this module may change. We are also far from covering every possible multifiltrations here; please open an issue or a pull request if you have another one in mind to add it.

[Fixes]

  • moved the tests folder, from .multipers/tests to./tests/ as this location was sometimes causing some issues.
  • multicritical firep, scc and rivet exports
  • plot issues with torch vs numpy tensors
  • safeguards on the grid squeeze
  • number of points in three_annulus was sometime incorrect (Thanks @odinhg )

[Optimizations]

  • Rips complexes are now built with gudhi.SimplexTree.create_from_array, which can be significantly faster

[Documentation]

  • Added a Filtrations sections

Scientific Software - Peer-reviewed - C++
Published by DavidLapous 10 months ago

multipers - v2.2.3

This release adds experimental support for Windows (Thanks @VincentRouvreau ! ), and cleans a few things for conda-forge.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous 11 months ago

multipers - v2.2.2

TL;DR: Bug fixes and optimizations.

[Features]

  • small vector column
  • slicers are now pickle-able
  • ignoring simplices at infinity can be chosen at runtime
  • insert_batch is now compatible with multicritical filtrations

[Fixes]

  • MMA plots improvements
  • Windows build (still doesn't compile)
  • MMA with empty boxes, or array boxes
  • dtype issues with slicers, and cubical filtrations
  • MMA cpp templates now follow the tempita file
  • less rigid typings in slicers, insert_batch

[Optimizations]

  • !Möbius inversion in python, now moved in the point_measure module
  • python to cpp filtration values translations
  • slicer constructor

[Documentation]

  • Updated external libraries' doc

Scientific Software - Peer-reviewed - C++
Published by DavidLapous 11 months ago

multipers - v2.2.1

TL;DR: Bug fixes and optimizations.

[Features]

  • SimplexTreeMulti are now pickle-able (thanks @hschreiber).
  • Backend synced with gudhi PR
  • Improved representation strings of slicer/simplextrees

[Fixes]

  • In some situations, reading scc files from mpfree or function_delaunay was not giving the good degree
  • Removed an optimization of GudhiCohomology to allow for arbitrary module presentation (@hschreiber)
  • Fixed bugs preventing enabling the inf-optimization in all (non-vineyard) cases for Matrix and GudhiCohomology backends (@hschreiber).

[Optimizations]

  • !Unsafe simplextree conversions are now safer, and enabled by default. This requires gudhi>=3.8. This can yield a significant performance (>20x) boost when converting gudhi simplextree to multipers.
  • Re-enabled the inf-optimization for persistence slices with non-appearing simplices (@hschreiber).

[Documentation]

  • !Changed the host to GitHub to auto-build the website with a GitHub action.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous about 1 year ago

multipers - v2.2.0

TL;DR: Cubical complexes, Gudhi backend for slicers, and some nice optimizations and fixes.

Features

  • Fill from distance matrix; similar to fill_lowerstar, but with distance matrices for clique complexes
  • proper is_slicer, is_mma
  • Compute grids from module approximation, and signed measures
  • Typing improvements
  • compute_bounding_box of given object
  • benchmark file to check the performance of different alternatives
  • unsqueeze operation. stuff.grid_squeeze(...).unsqueeze() should be the identity.
  • GudhiCohomology backend for slicers. It uses native gudhi persistence for 1-parameter persistence computations. In some situations, this backend yields significantly faster non-vine computations.
  • Cubical complexes from numpy tensor, with its corresponding notebook in the documentation.
  • more tests, and tests are skipped if dependencies are not met.
  • Better compilation options management. When compiling from source, the options can be tuned in the _tempita_grid_gen.py file.

Possibly breaking changes

  • ! default rips threshold is now set to max-min of distance matrix. Topology is trivial after this point.
  • ! representative cycles improvements (@hschreiber )
  • ! non-vine slicers as default values. This is meant to make computation faster for signed measures, at the expense of a copy for module approximation (with a warning)
  • ! squeezed slicers are unsqueezed before being written to an scc file (to prevent loss of information)
  • ! disabled clement slicer backend, as it wasn't really used. This will be re-enabled when zigzag computations are needed, and can still be enabled when compiling from sources.
  • ! simplextree manual insertion behaviour changed a bit.
    • Previous behaviour: insert simplex at specific location without any checks
    • New behaviour: each inserted simplex is insered at the first possible time with respect of the filtration that is greater than the given insertion value (defaults at $-\infty$). Also see gudhi/gudhi-devel#974. Multi-critical filtrations are not affected (there is no natural definition for it in that case).

Fixes

  • Point cloud pipeline was ignoring some arguments in some cases
  • multipers initialization should load more documentation/core modules by default
  • MMA representation pipelines issues
  • Some hacks to fix the torch rips-density signed measure function

Optimizations

  • vineyard backend optimizations (@hschreiber)
  • Changed scc parser from python to cpp code (@hschreiber ) IO operations now also release the gil

Scientific Software - Peer-reviewed - C++
Published by DavidLapous about 1 year ago

multipers - v2.1.0

TL;DR SimplexTrees and Slicer behave more consistently, and share pipelines, complex reductions are better handled, and a bunch of backend code was changed.

Note. This may break code related to pipelines, or minimal presentations. A bunch of code changed, as well as the interface, so bug are expected; please fill an issue if you find one. Also, I may have forgotten some changes.

[Possibly breaking changes]

  • ! Aligned minimal presentation degrees with (geometric) dimension.
  • ! grid_conversion was renamed to grid
  • ! Made pipeline take care of FilteredComplex=Union[SimplexTree,Slicer] instead of SimplexTree only. Warning This renamed pipelines: e.g.,
    • PointCloud2SimplexTree -> PointCloud2FilteredComplex,
    • SimplexTree2MMA -> FilteredComplex2MMA,
    • SimplexTree2SignedMeasure->FilteredComplex2SignedMeasure.
  • method name uniformization between SimplexTree and Slicer
  • Some default values were changed

[Features]

  • Pipelines should handle both SimplexTrees and Slicers
  • Minimal presentations are now checked, to prevent unnecessary computations (and bugs)
  • mpfree is now an optional dependency (i.e., every function can be executed without this backend); but we still recommend users to use it for faster computations.
  • Multi-Filtration backend update (sync with gudhi/gudhi-devel#976) -- Thanks @hschreiber !
  • Cleaner tempita templates
  • optimized some tests
  • Added a differentiable weakenned version of the delaunay complex bifiltration
  • MMA representation
    • Better interface for custom kernels
    • More default kernels (now "exponential", "gaussian", "linear") and their signed versions
    • Optimized the code for custom kernels
  • Added kernels to convolutions, e.g., sinc.
  • Build system was updated -- Thanks @hschreiber !
  • Bunch of typing fixes and improvements
  • minimal presentations can be computed on multiple degrees at once
  • Barcode estimation from line slices of rank invariant
  • interfaced the barcodes (in parallel / vineyard) of lines from slicers
  • updated barcode slicing of MMA outputs
  • optimized and fixed (rank and hilbert) signed barcodes computations

[Documentation]

  • Updated with latest version
  • Improved documentation of some functions, e.g., signed_measure
  • Added a contribution page #19, and issue templates
  • Documentation now refers to github pages, for easier modification
  • Fixed latex not rendering #18

Scientific Software - Peer-reviewed - C++
Published by DavidLapous about 1 year ago

multipers - v2.0.5

TL;DR Mostly bugfixes. And some optimizations to (non-vine) rank signed measure computations.

[Features]

  • Slicer dimension pruning (similar to simplextree)
  • Some documentation improvements, and type hints for slicer
  • __repr__ for slicer (to show the various options)

[Fixes]

  • Invariant was sometimes not properly infered from other arguments
  • Simplextree's copy was not complete
  • Module Formatter doesn't default anymore to degrees 0,1 when degree is not given
  • Consistence between simplextree and slicer methods
  • Plot argument are now taken into account for rank signed measures
  • data and grids modules are imported by default (small + frequently used)

[Optimizations]

  • Persistence computations with the non-vine pipeline now ignore infinite simplices
  • Automatic dimension pruning when computing low homological degrees
  • Point cloud generation in higher dimensions

[Workflows]

  • Faster workflow, available for external contribution (without exposing secrets)
  • For windows builds : still needs some investigation

Scientific Software - Peer-reviewed - C++
Published by DavidLapous over 1 year ago

multipers - v2.0.4

TL;DR. This is mostly a bugfix release, with some QOL warnings.

[Features]

  • mass_default should be available for any invariant / conditions
  • Persistence Matrix update (fixing several bugs with non-simplicial filtrations, and some optimizations)
  • more natural choices in signed measures
  • Slicer checks to prevent unnecessary computations (and mpfree segfaults)
  • Slicer that come from minimal presentation now store their original dimension (under slicer.minpres_degree)
  • Some external libraries, e.g., mpfree can break due to a boost update; added a check to remove a cryptic error message

[Bug Fixes]

  • Rank invariant wasn't properly recovered in some conditions
  • slicers could not be pushed on exact grids
  • several other issues related to signed measures computations

[Tests]

  • signed measure matrix of tests, and checking different backends (vanilla gudhi, persistence matrices with different options, mpfree)
  • checks results with mpfree reductions, when available

Scientific Software - Peer-reviewed - C++
Published by DavidLapous over 1 year ago

multipers - v2.0.3

[Features]

  • Compatibility with numpy>=2, gudhi>=3.10
  • Added some missing functions in the doc
  • test representative cycles

[Bug fixes]

  • Fixed some bug which prevented multipers.signed_measure to properly recover the autodiff from the input, depending on the simplextree/slicer type or if using mpfree.
  • Fixed a bug in multipers.signed_measure which, in some conditions, made it ignore the mass_default argument.
  • It is now not possible anymore to give a grid resolution to exact strategies.
  • added missing dependencies tqdm and matplotlib

Note

Some refactoring has been made to the multipers.signed_measure engine, and this requires some more testing. Feel free to open an issue if you find one.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous over 1 year ago

multipers - v2.0.2

[Features]

  • Representative cycles are given by simplices instead of their keys, i.e., better interface
  • Updated some documentation: added point cloud experiment from ICML 2024 paper

[Fixes]

  • Differentiation of rips-density like: better errors

Scientific Software - Peer-reviewed - C++
Published by DavidLapous over 1 year ago

multipers - v2.0.1

[Features]

  • More template activated (more columns, more numpy types) for slicers, simplextrees, mma modules
  • weaken a simplextree to a flag complex
  • weakened delaunay bifiltration auto-differentiation

[Fixes]

  • mma modules from multiple slicers were not properly splitted
  • some files generated by external libraries were not properly cleaned

Scientific Software - Peer-reviewed - C++
Published by DavidLapous over 1 year ago

multipers - v2.0.0

TL;DR: Differentiability, more k-critical support, and bunch of refactorizations.

Note. Due to the large amount of code moved, this release may contain some bugs.

[Features]

  • templated simplextrees (float/int/kcritical)
  • templated slicers (float/int/kcritical/vineyard/backend matrix column)
  • templated module approximations
  • more support for kcritical filtrations
  • hilbert, rank invariant for multicritical filtrations
  • differentiable signed measures
  • rank invariant using vineyard, or any slicer
  • non-inplace squeeze of slicer/st
  • differentiable helpers (e.g. grids computations, convolutions)
  • matrix backend updates (Thanks Hannah Schreiber)
  • improved external libraries handling
  • doc website, with notebook updates inside (Thanks Inés García-Redondo). Required dependencies: sphinx + myst-nb + sphinxrtdtheme
  • MMA module now can now be constructed from any orientations, and allows for custom paths
  • more test coverage

[Fixes]

  • removed some unsafe hacks in cpp
  • plot fixes, and more consistent between invariants.
  • Some pipelines were broken, due to some renamings.

[Optimizations]

  • less copies between cpp and python, and some variable are view-able from python
  • (Slightly) faster io with scc files
  • backend optimizations
  • simplextree python simplifications : __iter__ (same as getsimplices), `contains(same as find,),getitem(same assimplexfiltration`)

Scientific Software - Peer-reviewed - C++
Published by DavidLapous over 1 year ago

multipers - v1.2.2

[Features]

  • clean measures (useful for euler characteristic)
  • slicer to simplextree
  • new grid module (multipers.grids)
  • slicers can now be coarsenned
  • Added proper build dependencies

[optimizations]

  • grids optimizations
  • backend optimizations

[Fixes]

  • installations from venv

Scientific Software - Peer-reviewed - C++
Published by DavidLapous almost 2 years ago

multipers - v1.2.1 bugfixes

[Features]

  • Updated introduction notebook with function delaunay for second example ### [Bugfixes]
  • Homological degree could be missmatched in some conditions when computing signed measures from slicer
  • Signed Measure weights could be wrong when computed from slicer
  • In some situation, convolutions with pykeops was a bit picky.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous almost 2 years ago

multipers - More interfaces with external libraries

[Features]

  • better overall interface for libraries with scc formats, e.g., mpfree, rivet, function delaunay, 2pac.
  • it is now easier to jump from simplextrees to module presentation to module resolutions and vice versa
  • it is now easier to compute persistence invariant (signed measure, MMA) from minimal resolutions
  • More c++ backends available in python to encode module presentations.

[Bufixes]

  • A lot of it.

[Still missing]

  • Rank invariant from minimal resolution is not available yet.
  • test all of this new stuff

Note

Interface with 2pac is still experimental. And this new code may be unstable, as it's not properly tested yet. Expect some tinkering.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous almost 2 years ago

multipers - v1.1.3: bugfixes

Scientific Software - Peer-reviewed - C++
Published by DavidLapous almost 2 years ago

multipers - Compatibility with gudhi and Python 3.12

This release should improve the compatibility with gudhi 3.9, and should thus work now with python 3.12. This also includes a slicer compatible with the scc format, which can be used to compute MMA decompositions, as well as a few minor fixes.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous about 2 years ago

multipers - Slicer update

This release interfaces the persistence slicer in python, and more interactions with mpfree-like programs. It also contains some major backend code, so this might be unstable.

Scientific Software - Peer-reviewed - C++
Published by DavidLapous about 2 years ago