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_apifor more "tensor-agnostic" functions in multipers (e.g., numpy vs torch) - Faster parallel convolutions.
- Re-enabled
expansionandmake_filtration_non_decreasingfor multi-critical filtrations - Updated a few notebooks + added a plot notebook
[Fixes]
- bunch of plot issues / imprecisions
SignedMeasureFormatterhad issues withtorch- 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
libcpplinked version (followingconda-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_apinew module. - The
multipers.filtrationsis 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_gridto 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.convolutionstomultipers.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.filtrationsmodule containing:RipsLowersar,RipsCodensityDelaunayLowerstar,DelaunayCodensity(from Delaunay Bifiltrations) this is a symlink tomultipers.slicer.from_function_delaunay)CoreDelaunay(Thanks @odinhg !) (from Core Bifiltration)Cubicalwhich is a symlink tomultipers.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/teststo./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_annuluswas sometime incorrect (Thanks @odinhg )
[Optimizations]
- Rips complexes are now built with
gudhi.SimplexTree.create_from_array, which can be significantly faster
[Documentation]
- Added a
Filtrationssections
Scientific Software - Peer-reviewed
- C++
Published by DavidLapous 10 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_batchis 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_measuremodule - 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]
SimplexTreeMultiare nowpickle-able (thanks @hschreiber).- Backend synced with gudhi PR
- Improved representation strings of slicer/simplextrees
[Fixes]
- In some situations, reading scc files from
mpfreeorfunction_delaunaywas 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_boxof given object- benchmark file to check the performance of different alternatives
unsqueezeoperation.stuff.grid_squeeze(...).unsqueeze()should be the identity.GudhiCohomologybackend 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.pyfile.
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
multipersinitialization 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_conversionwas renamed togrid - ! Made pipeline take care of
FilteredComplex=Union[SimplexTree,Slicer]instead ofSimplexTreeonly. Warning This renamed pipelines: e.g.,PointCloud2SimplexTree->PointCloud2FilteredComplex,SimplexTree2MMA->FilteredComplex2MMA,SimplexTree2SignedMeasure->FilteredComplex2SignedMeasure.
- method name uniformization between
SimplexTreeandSlicer - Some default values were changed
[Features]
- Pipelines should handle both
SimplexTrees andSlicers - Minimal presentations are now checked, to prevent unnecessary computations (and bugs)
mpfreeis 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
typingfixes 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
dataandgridsmodules 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_defaultshould 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_measureto properly recover the autodiff from the input, depending on the simplextree/slicer type or if usingmpfree. - Fixed a bug in
multipers.signed_measurewhich, in some conditions, made it ignore themass_defaultargument. - It is now not possible anymore to give a grid resolution to exact strategies.
- added missing dependencies
tqdmandmatplotlib
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