Releases: DavidLapous/multipers
v2.2.1
TL;DR: Bug fixes and optimizations.
[Features]
SimplexTreeMulti
are nowpickle
-able (thanks @hschreiber).- Backend synced with gudhi PR
- Improved representation strings of slicer/simplextrees
[Fixes]
- In some situations, reading scc files from
mpfree
orfunction_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.
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
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 togrid
- ! Made pipeline take care of
FilteredComplex=Union[SimplexTree,Slicer]
instead ofSimplexTree
only.
Warning This renamed pipelines: e.g.,PointCloud2SimplexTree
->PointCloud2FilteredComplex
,SimplexTree2MMA
->FilteredComplex2MMA
,SimplexTree2SignedMeasure
->FilteredComplex2SignedMeasure
.
- method name uniformization between
SimplexTree
andSlicer
- Some default values were changed
[Features]
- Pipelines should handle both
SimplexTree
s andSlicer
s - 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]
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
andgrids
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
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
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 usingmpfree
. - Fixed a bug in
multipers.signed_measure
which, in some conditions, made it ignore themass_default
argument. - It is now not possible anymore to give a grid resolution to exact strategies.
- added missing dependencies
tqdm
andmatplotlib
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.
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
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
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 + sphinx_rtd_theme
- 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 get_simplices),__contains__
(same as find,),__getitem__
(same assimplex_filtration
)
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