multipers 2.4.0__tar.gz → 2.4.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. {multipers-2.4.0 → multipers-2.4.1}/PKG-INFO +4 -2
  2. {multipers-2.4.0 → multipers-2.4.1}/README.md +3 -1
  3. {multipers-2.4.0 → multipers-2.4.1}/_tempita_grid_gen.py +7 -5
  4. {multipers-2.4.0 → multipers-2.4.1}/multipers/_signed_measure_meta.py +1 -0
  5. {multipers-2.4.0 → multipers-2.4.1}/multipers/_slicer_meta.py +2 -5
  6. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/Persistence_slices_interface.h +62 -51
  7. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Degree_rips_bifiltration.h +10 -7
  8. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Dynamic_multi_parameter_filtration.h +18 -4
  9. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Multi_field.h +5 -3
  10. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Multi_field_operators.h +5 -3
  11. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Multi_field_shared.h +5 -3
  12. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Multi_field_small.h +5 -3
  13. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +5 -3
  14. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +5 -3
  15. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Z2_field.h +1 -1
  16. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Zp_field.h +1 -1
  17. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Matrix.h +13 -13
  18. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_filtration/Multi_parameter_generator.h +10 -5
  19. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_parameter_filtered_complex.h +27 -39
  20. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_parameter_filtration.h +26 -15
  21. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_persistence/Line.h +13 -2
  22. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_persistence/Multi_parameter_filtered_complex_pcoh_interface.h +16 -31
  23. multipers-2.4.1/multipers/gudhi/gudhi/Multi_persistence/Persistence_interface_cohomology.h +211 -0
  24. multipers-2.4.1/multipers/gudhi/gudhi/Multi_persistence/Persistence_interface_homology.h +255 -0
  25. multipers-2.4.1/multipers/gudhi/gudhi/Multi_persistence/Persistence_interface_vineyard.h +138 -0
  26. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +1 -1
  27. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +1 -1
  28. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +1 -1
  29. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1 -1
  30. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +11 -11
  31. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +11 -11
  32. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +1 -1
  33. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +1 -1
  34. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +1 -1
  35. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +1 -1
  36. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +22 -22
  37. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +1 -1
  38. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +1 -1
  39. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +1 -1
  40. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +1 -1
  41. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +3 -2
  42. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +3 -2
  43. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +6 -4
  44. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +3 -2
  45. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +3 -2
  46. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +1 -1
  47. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +3 -2
  48. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +3 -2
  49. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +3 -2
  50. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/index_mapper.h +1 -1
  51. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +1 -1
  52. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +1 -1
  53. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +1 -1
  54. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +9 -9
  55. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +1 -1
  56. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Projective_cover_kernel.h +7 -6
  57. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Slicer.h +60 -104
  58. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Thread_safe_slicer.h +21 -22
  59. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/persistence_matrix_options.h +1 -1
  60. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/slicer_helpers.h +53 -39
  61. multipers-2.4.1/multipers/gudhi/gudhi/vineyard_base.h +286 -0
  62. {multipers-2.4.0 → multipers-2.4.1}/multipers/io.pyx +40 -33
  63. {multipers-2.4.0 → multipers-2.4.1}/multipers/mma_structures.pyx +4 -4
  64. {multipers-2.4.0 → multipers-2.4.1}/multipers/mma_structures.pyx.tp +1 -1
  65. {multipers-2.4.0 → multipers-2.4.1}/multipers/multi_parameter_rank_invariant/hilbert_function.h +3 -7
  66. {multipers-2.4.0 → multipers-2.4.1}/multipers/multi_parameter_rank_invariant/persistence_slices.h +1 -1
  67. {multipers-2.4.0 → multipers-2.4.1}/multipers/multi_parameter_rank_invariant/rank_invariant.h +1 -1
  68. {multipers-2.4.0 → multipers-2.4.1}/multipers/multiparameter_module_approximation/approximation.h +19 -15
  69. {multipers-2.4.0 → multipers-2.4.1}/multipers/ops.pyx +3 -1
  70. {multipers-2.4.0 → multipers-2.4.1}/multipers/plots.py +1 -1
  71. {multipers-2.4.0 → multipers-2.4.1}/multipers/simplex_tree_multi.pyx +9 -1
  72. {multipers-2.4.0 → multipers-2.4.1}/multipers/simplex_tree_multi.pyx.tp +9 -1
  73. multipers-2.4.1/multipers/slicer.pxd +5611 -0
  74. {multipers-2.4.0 → multipers-2.4.1}/multipers/slicer.pxd.tp +3 -2
  75. multipers-2.4.1/multipers/slicer.pyx +35506 -0
  76. {multipers-2.4.0 → multipers-2.4.1}/multipers/slicer.pyx.tp +17 -3
  77. {multipers-2.4.0 → multipers-2.4.1}/multipers.egg-info/PKG-INFO +4 -2
  78. {multipers-2.4.0 → multipers-2.4.1}/multipers.egg-info/SOURCES.txt +3 -1
  79. {multipers-2.4.0 → multipers-2.4.1}/pyproject.toml +1 -1
  80. {multipers-2.4.0 → multipers-2.4.1}/tests/test_slicer.py +2 -0
  81. multipers-2.4.0/multipers/gudhi/gudhi/Multi_persistence/Persistence_interface_cohomology.h +0 -159
  82. multipers-2.4.0/multipers/gudhi/gudhi/Multi_persistence/Persistence_interface_matrix.h +0 -463
  83. multipers-2.4.0/multipers/slicer.pxd +0 -15757
  84. multipers-2.4.0/multipers/slicer.pyx +0 -102422
  85. {multipers-2.4.0 → multipers-2.4.1}/AIDA/aida.cpp +0 -0
  86. {multipers-2.4.0 → multipers-2.4.1}/AIDA/birth_death.cpp +0 -0
  87. {multipers-2.4.0 → multipers-2.4.1}/AIDA/brute_force_mpm_decomposition.cpp +0 -0
  88. {multipers-2.4.0 → multipers-2.4.1}/AIDA/generate_decompositions.cpp +0 -0
  89. {multipers-2.4.0 → multipers-2.4.1}/AIDA/include/aida_interface.hpp +0 -0
  90. {multipers-2.4.0 → multipers-2.4.1}/AIDA/include/config.hpp +0 -0
  91. {multipers-2.4.0 → multipers-2.4.1}/AIDA/include/option_parser.hpp +0 -0
  92. {multipers-2.4.0 → multipers-2.4.1}/AIDA/include/types.hpp +0 -0
  93. {multipers-2.4.0 → multipers-2.4.1}/AIDA/making_examples.cpp +0 -0
  94. {multipers-2.4.0 → multipers-2.4.1}/AIDA/minimize_pres.cpp +0 -0
  95. {multipers-2.4.0 → multipers-2.4.1}/AIDA/mpfree_clone.cpp +0 -0
  96. {multipers-2.4.0 → multipers-2.4.1}/AIDA/presentation_to_quiver.cpp +0 -0
  97. {multipers-2.4.0 → multipers-2.4.1}/AIDA/presentation_to_quiver_new.cpp +0 -0
  98. {multipers-2.4.0 → multipers-2.4.1}/AIDA/resolution.cpp +0 -0
  99. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/aida_decompose.cpp +0 -0
  100. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/aida_decompose.hpp +0 -0
  101. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/aida_functions.cpp +0 -0
  102. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/aida_functions.hpp +0 -0
  103. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/aida_helpers.cpp +0 -0
  104. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/aida_helpers.hpp +0 -0
  105. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/aida_interface.cpp +0 -0
  106. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/block.cpp +0 -0
  107. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/block.hpp +0 -0
  108. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/config.cpp +0 -0
  109. {multipers-2.4.0 → multipers-2.4.1}/AIDA/src/option_parser.cpp +0 -0
  110. {multipers-2.4.0 → multipers-2.4.1}/AIDA/vectorspace_decompositions.cpp +0 -0
  111. {multipers-2.4.0 → multipers-2.4.1}/LICENSE +0 -0
  112. {multipers-2.4.0 → multipers-2.4.1}/MANIFEST.in +0 -0
  113. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/bitset_algebra.hpp +0 -0
  114. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/column_types.hpp +0 -0
  115. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/dense_matrix.hpp +0 -0
  116. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/draw_hf.hpp +0 -0
  117. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/general.hpp +0 -0
  118. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/graded_linalg.hpp +0 -0
  119. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/graded_matrix.hpp +0 -0
  120. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/grid_scheduler.hpp +0 -0
  121. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/homomorphisms.hpp +0 -0
  122. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/matrix_base.hpp +0 -0
  123. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/modules.hpp +0 -0
  124. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/orders_and_graphs.hpp +0 -0
  125. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/r2graded_matrix.hpp +0 -0
  126. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/r3graded_matrix.hpp +0 -0
  127. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/sparse_matrix.hpp +0 -0
  128. {multipers-2.4.0 → multipers-2.4.1}/Persistence-Algebra/include/grlina/to_quiver.hpp +0 -0
  129. {multipers-2.4.0 → multipers-2.4.1}/multipers/__init__.py +0 -0
  130. {multipers-2.4.0 → multipers-2.4.1}/multipers/array_api/__init__.py +0 -0
  131. {multipers-2.4.0 → multipers-2.4.1}/multipers/array_api/numpy.py +0 -0
  132. {multipers-2.4.0 → multipers-2.4.1}/multipers/array_api/torch.py +0 -0
  133. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/MOL2.py +0 -0
  134. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/UCR.py +0 -0
  135. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/__init__.py +0 -0
  136. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/graphs.py +0 -0
  137. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/immuno_regions.py +0 -0
  138. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/minimal_presentation_to_st_bf.py +0 -0
  139. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/pytorch2simplextree.py +0 -0
  140. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/shape3d.py +0 -0
  141. {multipers-2.4.0 → multipers-2.4.1}/multipers/data/synthetic.py +0 -0
  142. {multipers-2.4.0 → multipers-2.4.1}/multipers/distances.py +0 -0
  143. {multipers-2.4.0 → multipers-2.4.1}/multipers/filtration_conversions.pxd +0 -0
  144. {multipers-2.4.0 → multipers-2.4.1}/multipers/filtration_conversions.pxd.tp +0 -0
  145. {multipers-2.4.0 → multipers-2.4.1}/multipers/filtrations/__init__.py +0 -0
  146. {multipers-2.4.0 → multipers-2.4.1}/multipers/filtrations/density.py +0 -0
  147. {multipers-2.4.0 → multipers-2.4.1}/multipers/filtrations/filtrations.py +0 -0
  148. {multipers-2.4.0 → multipers-2.4.1}/multipers/filtrations.pxd +0 -0
  149. {multipers-2.4.0 → multipers-2.4.1}/multipers/filtrations.pxd.tp +0 -0
  150. {multipers-2.4.0 → multipers-2.4.1}/multipers/function_rips.pyx +0 -0
  151. {multipers-2.4.0 → multipers-2.4.1}/multipers/grids.pyx +0 -0
  152. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/Simplex_tree_interface.h +0 -0
  153. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/Simplex_tree_multi_interface.h +0 -0
  154. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Bitmap_cubical_complex.h +0 -0
  155. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +0 -0
  156. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +0 -0
  157. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Debug_utils.h +0 -0
  158. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Z2_field_operators.h +0 -0
  159. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Zp_field_operators.h +0 -0
  160. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Fields/Zp_field_shared.h +0 -0
  161. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +0 -0
  162. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_filtration/multi_filtration_conversions.h +0 -0
  163. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_filtration/multi_filtration_utils.h +0 -0
  164. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_persistence/Box.h +0 -0
  165. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Multi_persistence/Point.h +0 -0
  166. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Off_reader.h +0 -0
  167. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +0 -0
  168. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +0 -0
  169. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_on_a_line.h +0 -0
  170. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistence_on_rectangle.h +0 -0
  171. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +0 -0
  172. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +0 -0
  173. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +0 -0
  174. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Persistent_cohomology.h +0 -0
  175. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Points_off_io.h +0 -0
  176. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simple_object_pool.h +0 -0
  177. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +0 -0
  178. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +0 -0
  179. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +0 -0
  180. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +0 -0
  181. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/filtration_value_utils.h +0 -0
  182. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +0 -0
  183. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +0 -0
  184. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +0 -0
  185. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +0 -0
  186. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/Simplex_tree.h +0 -0
  187. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/distance_functions.h +0 -0
  188. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/graph_simplicial_complex.h +0 -0
  189. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/multi_simplex_tree_helpers.h +0 -0
  190. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/persistence_interval.h +0 -0
  191. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/reader_utils.h +0 -0
  192. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/gudhi/simple_mdspan.h +0 -0
  193. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/tmp_h0_pers/mma_interface_h0.h +0 -0
  194. {multipers-2.4.0 → multipers-2.4.1}/multipers/gudhi/tmp_h0_pers/naive_merge_tree.h +0 -0
  195. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/__init__.py +0 -0
  196. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/accuracies.py +0 -0
  197. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/invariants_with_persistable.py +0 -0
  198. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/kernels.py +0 -0
  199. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/mma.py +0 -0
  200. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/one.py +0 -0
  201. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/point_clouds.py +0 -0
  202. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/signed_measures.py +0 -0
  203. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/sliced_wasserstein.py +0 -0
  204. {multipers-2.4.0 → multipers-2.4.1}/multipers/ml/tools.py +0 -0
  205. {multipers-2.4.0 → multipers-2.4.1}/multipers/mma_structures.pxd +0 -0
  206. {multipers-2.4.0 → multipers-2.4.1}/multipers/multi_parameter_rank_invariant/diff_helpers.h +0 -0
  207. {multipers-2.4.0 → multipers-2.4.1}/multipers/multi_parameter_rank_invariant/euler_characteristic.h +0 -0
  208. {multipers-2.4.0 → multipers-2.4.1}/multipers/multi_parameter_rank_invariant/function_rips.h +0 -0
  209. {multipers-2.4.0 → multipers-2.4.1}/multipers/multiparameter_edge_collapse.py +0 -0
  210. {multipers-2.4.0 → multipers-2.4.1}/multipers/multiparameter_module_approximation/debug.h +0 -0
  211. {multipers-2.4.0 → multipers-2.4.1}/multipers/multiparameter_module_approximation/format_python-cpp.h +0 -0
  212. {multipers-2.4.0 → multipers-2.4.1}/multipers/multiparameter_module_approximation/utilities.h +0 -0
  213. {multipers-2.4.0 → multipers-2.4.1}/multipers/multiparameter_module_approximation.pyx +0 -0
  214. {multipers-2.4.0 → multipers-2.4.1}/multipers/pickle.py +0 -0
  215. {multipers-2.4.0 → multipers-2.4.1}/multipers/point_measure.pyx +0 -0
  216. {multipers-2.4.0 → multipers-2.4.1}/multipers/simplex_tree_multi.pxd +0 -0
  217. {multipers-2.4.0 → multipers-2.4.1}/multipers/tensor/tensor.h +0 -0
  218. {multipers-2.4.0 → multipers-2.4.1}/multipers/tensor.pxd +0 -0
  219. {multipers-2.4.0 → multipers-2.4.1}/multipers/test.pyx +0 -0
  220. {multipers-2.4.0 → multipers-2.4.1}/multipers/tests/__init__.py +0 -0
  221. {multipers-2.4.0 → multipers-2.4.1}/multipers/torch/__init__.py +0 -0
  222. {multipers-2.4.0 → multipers-2.4.1}/multipers/torch/diff_grids.py +0 -0
  223. {multipers-2.4.0 → multipers-2.4.1}/multipers/torch/rips_density.py +0 -0
  224. {multipers-2.4.0 → multipers-2.4.1}/multipers/vector_interface.pxd +0 -0
  225. {multipers-2.4.0 → multipers-2.4.1}/multipers.egg-info/dependency_links.txt +0 -0
  226. {multipers-2.4.0 → multipers-2.4.1}/multipers.egg-info/requires.txt +0 -0
  227. {multipers-2.4.0 → multipers-2.4.1}/multipers.egg-info/top_level.txt +0 -0
  228. {multipers-2.4.0 → multipers-2.4.1}/setup.cfg +0 -0
  229. {multipers-2.4.0 → multipers-2.4.1}/setup.py +0 -0
  230. {multipers-2.4.0 → multipers-2.4.1}/tests/test_aida.py +0 -0
  231. {multipers-2.4.0 → multipers-2.4.1}/tests/test_diff_helper.py +0 -0
  232. {multipers-2.4.0 → multipers-2.4.1}/tests/test_filtrations.py +0 -0
  233. {multipers-2.4.0 → multipers-2.4.1}/tests/test_grids.py +0 -0
  234. {multipers-2.4.0 → multipers-2.4.1}/tests/test_hilbert_function.py +0 -0
  235. {multipers-2.4.0 → multipers-2.4.1}/tests/test_mma.py +0 -0
  236. {multipers-2.4.0 → multipers-2.4.1}/tests/test_parallel.py +0 -0
  237. {multipers-2.4.0 → multipers-2.4.1}/tests/test_point_clouds.py +0 -0
  238. {multipers-2.4.0 → multipers-2.4.1}/tests/test_python-cpp_conversion.py +0 -0
  239. {multipers-2.4.0 → multipers-2.4.1}/tests/test_signed_betti.py +0 -0
  240. {multipers-2.4.0 → multipers-2.4.1}/tests/test_signed_measure.py +0 -0
  241. {multipers-2.4.0 → multipers-2.4.1}/tests/test_simplextreemulti.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multipers
3
- Version: 2.4.0
3
+ Version: 2.4.1
4
4
  Summary: Multiparameter Topological Persistence for Machine Learning
5
5
  Author-email: David Loiseaux <david.lapous@proton.me>, Hannah Schreiber <hannah.schreiber@inria.fr>
6
6
  Maintainer-email: David Loiseaux <david.lapous@proton.me>
@@ -86,11 +86,13 @@ This library features a bunch of different functions and helpers. See below for
86
86
  - [x] [[Differentiability and Optimization of Multiparameter Persistent Homology, ICML2024]](https://proceedings.mlr.press/v235/scoccola24a.html) An approach to compute a (clarke) gradient for any reasonable multiparameter persistent invariant. Currently, any `multipers` computation is auto-differentiable using this strategy, provided that the input are pytorch gradient capable tensor.
87
87
  - [x] [[Multiparameter Persistence Landscapes, JMLR]](https://jmlr.org/papers/v21/19-054.html) A vectorization technic for multiparameter persistence modules.
88
88
  - [x] [[Filtration-Domination in Bifiltered Graphs, ALENEX2023]](https://doi.org/10.1137/1.9781611977561.ch3) Allows for 2-parameter edge collapses for 1-critical clique complexes. Very useful to speed up, e.g., Rips-Codensity bifiltrations.
89
+ - [x] [[Fast free resolutions of bifiltered chain complexes]](https://arxiv.org/abs/2512.08652) One-critical representation of multicritical filtrations, using [multi_critical](https://bitbucket.org/mkerber/multi_critical).
89
90
  - [x] [[Chunk Reduction for Multi-Parameter Persistent Homology, SoCG2019]](https://doi.org/10.4230/LIPIcs.SoCG.2019.37) Multi-filtration preprocessing algorithm for homology computations.
90
91
  - [x] [[Computing Minimal Presentations and Bigraded Betti Numbers of 2-Parameter Persistent Homology, JAAG]](https://doi.org/10.1137/20M1388425) Minimal presentation of multiparameter persistence modules, using [mpfree](https://bitbucket.org/mkerber/mpfree/src/master/). Hilbert, Rank Decomposition Signed Measures, and MMA decompositions can be computed using the mpfree backend.
91
- - [ ] [WIP] [[Decomposing Multiparameter Persistence Modules, SoCG2025]](https://doi.org/10.4230/LIPIcs.SoCG.2025.41) Using the [AIDA](https://github.com/JanJend/AIDA) and [Persistence-Algebra](https://github.com/JanJend/Persistence-Algebra/) libraries.
92
+ - [x] [WIP] [[Decomposing Multiparameter Persistence Modules, SoCG2025]](https://doi.org/10.4230/LIPIcs.SoCG.2025.41) Using the [AIDA](https://github.com/JanJend/AIDA) and [Persistence-Algebra](https://github.com/JanJend/Persistence-Algebra/) libraries.
92
93
  - [x] [[Delaunay Bifiltrations of Functions on Point Clouds, SODA2024]](https://epubs.siam.org/doi/10.1137/1.9781611977912.173) Provides an alternative to function rips bifiltrations, using Delaunay complexes. Very good alternative to Rips-Density like bifiltrations.
93
94
  - [x] [[Delaunay Core Bifiltration]](https://arxiv.org/abs/2405.01214) Bifiltration for point clouds, taking into account the density. Similar to Rips-Density.
95
+ - [x] [[Computing the Multicover Bifiltration, SOCG2021]](https://doi.org/10.4230/LIPIcs.SoCG.2021.27) Rhomboid Tiling bifiltration. Equivalent to the multicover bifiltration, using [rhomboidtiling](https://github.com/geoo89/rhomboidtiling).
94
96
  - [x] [[Rivet]](https://github.com/rivetTDA/rivet) Interactive two parameter persistence
95
97
  - [x] [[Kernel Operations on the GPU, with Autodiff, without Memory Overflows, JMLR]](http://jmlr.org/papers/v22/20-275.html) Although not linked, at first glance, to persistence in any way, this library allows computing blazingly fast signed measures convolutions (and more!) with custom kernels.
96
98
  - [ ] [Backend only] [[Projected distances for multi-parameter persistence modules]](https://arxiv.org/abs/2206.08818) Provides a strategy to estimate the convolution distance between multiparameter persistence module using projected barcodes. Implementation is a WIP.
@@ -48,11 +48,13 @@ This library features a bunch of different functions and helpers. See below for
48
48
  - [x] [[Differentiability and Optimization of Multiparameter Persistent Homology, ICML2024]](https://proceedings.mlr.press/v235/scoccola24a.html) An approach to compute a (clarke) gradient for any reasonable multiparameter persistent invariant. Currently, any `multipers` computation is auto-differentiable using this strategy, provided that the input are pytorch gradient capable tensor.
49
49
  - [x] [[Multiparameter Persistence Landscapes, JMLR]](https://jmlr.org/papers/v21/19-054.html) A vectorization technic for multiparameter persistence modules.
50
50
  - [x] [[Filtration-Domination in Bifiltered Graphs, ALENEX2023]](https://doi.org/10.1137/1.9781611977561.ch3) Allows for 2-parameter edge collapses for 1-critical clique complexes. Very useful to speed up, e.g., Rips-Codensity bifiltrations.
51
+ - [x] [[Fast free resolutions of bifiltered chain complexes]](https://arxiv.org/abs/2512.08652) One-critical representation of multicritical filtrations, using [multi_critical](https://bitbucket.org/mkerber/multi_critical).
51
52
  - [x] [[Chunk Reduction for Multi-Parameter Persistent Homology, SoCG2019]](https://doi.org/10.4230/LIPIcs.SoCG.2019.37) Multi-filtration preprocessing algorithm for homology computations.
52
53
  - [x] [[Computing Minimal Presentations and Bigraded Betti Numbers of 2-Parameter Persistent Homology, JAAG]](https://doi.org/10.1137/20M1388425) Minimal presentation of multiparameter persistence modules, using [mpfree](https://bitbucket.org/mkerber/mpfree/src/master/). Hilbert, Rank Decomposition Signed Measures, and MMA decompositions can be computed using the mpfree backend.
53
- - [ ] [WIP] [[Decomposing Multiparameter Persistence Modules, SoCG2025]](https://doi.org/10.4230/LIPIcs.SoCG.2025.41) Using the [AIDA](https://github.com/JanJend/AIDA) and [Persistence-Algebra](https://github.com/JanJend/Persistence-Algebra/) libraries.
54
+ - [x] [WIP] [[Decomposing Multiparameter Persistence Modules, SoCG2025]](https://doi.org/10.4230/LIPIcs.SoCG.2025.41) Using the [AIDA](https://github.com/JanJend/AIDA) and [Persistence-Algebra](https://github.com/JanJend/Persistence-Algebra/) libraries.
54
55
  - [x] [[Delaunay Bifiltrations of Functions on Point Clouds, SODA2024]](https://epubs.siam.org/doi/10.1137/1.9781611977912.173) Provides an alternative to function rips bifiltrations, using Delaunay complexes. Very good alternative to Rips-Density like bifiltrations.
55
56
  - [x] [[Delaunay Core Bifiltration]](https://arxiv.org/abs/2405.01214) Bifiltration for point clouds, taking into account the density. Similar to Rips-Density.
57
+ - [x] [[Computing the Multicover Bifiltration, SOCG2021]](https://doi.org/10.4230/LIPIcs.SoCG.2021.27) Rhomboid Tiling bifiltration. Equivalent to the multicover bifiltration, using [rhomboidtiling](https://github.com/geoo89/rhomboidtiling).
56
58
  - [x] [[Rivet]](https://github.com/rivetTDA/rivet) Interactive two parameter persistence
57
59
  - [x] [[Kernel Operations on the GPU, with Autodiff, without Memory Overflows, JMLR]](http://jmlr.org/papers/v22/20-275.html) Although not linked, at first glance, to persistence in any way, this library allows computing blazingly fast signed measures convolutions (and more!) with custom kernels.
58
60
  - [ ] [Backend only] [[Projected distances for multi-parameter persistence modules]](https://arxiv.org/abs/2206.08818) Provides a strategy to estimate the convolution distance between multiparameter persistence module using projected barcodes. Implementation is a WIP.
@@ -14,7 +14,7 @@ columns_name = [ # only one column is necessary
14
14
  # "HEAP",
15
15
  # "UNORDERED_SET",
16
16
  # "NAIVE_VECTOR",
17
- "VECTOR",
17
+ # "VECTOR",
18
18
  # "INTRUSIVE_LIST",
19
19
  # "LIST",
20
20
  # "SMALL_VECTOR",
@@ -30,7 +30,7 @@ value_types = [
30
30
  ]
31
31
  COARSENNED_VALUE_TYPE = ("int32_t", "np.int32", "i32")
32
32
  REAL_VALUE_TYPE = ("double", "np.float64", "f64")
33
-
33
+ assert COARSENNED_VALUE_TYPE in value_types and REAL_VALUE_TYPE in value_types
34
34
 
35
35
  ## True needed for MMA, and False is default value
36
36
  vineyards_values = [
@@ -88,11 +88,11 @@ def check_combination(
88
88
  if backend_type in ["Graph", "GudhiCohomology"]:
89
89
  if column_type[0] != 0:
90
90
  return False
91
- if filtration_container == "flat":
91
+ if filtration_container == "Degree_rips_bifiltration":
92
92
  if not is_kcritical:
93
93
  return False
94
- if value_type[0] == "f":
95
- return False
94
+ # if value_type[-1][0] == "f": # needed for mma
95
+ # return False
96
96
  return True
97
97
 
98
98
 
@@ -224,6 +224,8 @@ print("#----------------------")
224
224
  print("Slicers")
225
225
  print("#----------------------")
226
226
  print("#----------------------")
227
+ print(*[s["PYTHON_TYPE"] for s in slicers], sep="\n")
228
+ print("----------------------")
227
229
  print(*slicers, sep="\n")
228
230
  with open("build/tmp/_slicer_names.pkl", "wb") as f:
229
231
  pickle.dump(slicers, f)
@@ -300,6 +300,7 @@ def signed_measure(
300
300
  mass_default=mass_default,
301
301
  degrees=degrees,
302
302
  expand_collapse=expand_collapse,
303
+ n_jobs=n_jobs,
303
304
  )
304
305
  fix_mass_default = False
305
306
  if verbose:
@@ -132,10 +132,6 @@ def Slicer(
132
132
  - `multipers.module_approximation(this, *args)`
133
133
  - `multipers.signed_measure(this, *args)`
134
134
 
135
- Note : it is recommended and sometime required to apply
136
- a minimal presentation before computing these functions !
137
- `mp.slicer.minimal_presentation(slicer, *args, **kwargs)`
138
-
139
135
  Input
140
136
  -----
141
137
  - st : SimplexTreeMulti or scc-like blocks or path to scc file
@@ -222,7 +218,8 @@ You can try using `multipers.slicer.to_simplextree`."""
222
218
  filtration_container,
223
219
  )
224
220
  if reduce:
225
- slicer = mps.minimal_presentation(
221
+ from multipers.ops import minimal_presentation
222
+ slicer = minimal_presentation(
226
223
  slicer,
227
224
  backend=reduce_backend,
228
225
  slicer_backend=backend,
@@ -7,7 +7,8 @@
7
7
  #include "gudhi/multi_simplex_tree_helpers.h"
8
8
  #include "gudhi/persistence_matrix_options.h"
9
9
  #include "gudhi/Multi_parameter_filtered_complex.h"
10
- #include "gudhi/Multi_persistence/Persistence_interface_matrix.h"
10
+ #include "gudhi/Multi_persistence/Persistence_interface_vineyard.h"
11
+ #include "gudhi/Multi_persistence/Persistence_interface_homology.h"
11
12
  #include "gudhi/Multi_persistence/Persistence_interface_cohomology.h"
12
13
  #include "gudhi/Dynamic_multi_parameter_filtration.h"
13
14
  #include "gudhi/Degree_rips_bifiltration.h"
@@ -39,26 +40,26 @@ enum Filtration_containers_strs : std::uint8_t {
39
40
 
40
41
  using Available_columns = Gudhi::persistence_matrix::Column_types;
41
42
 
42
- template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
43
- struct Multi_persistence_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
44
- using Index = std::uint32_t;
45
- static const bool has_matrix_maximal_dimension_access = false;
46
- static const bool has_column_pairings = true;
47
- static const bool has_vine_update = true;
48
- static const bool can_retrieve_representative_cycles = true;
49
- };
50
-
51
- template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
52
- struct Multi_persistence_Clement_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
53
- using Index = std::uint32_t;
54
- static const bool has_matrix_maximal_dimension_access = false;
55
- static const bool has_column_pairings = true;
56
- static const bool has_vine_update = true;
57
- static const bool is_of_boundary_type = false;
58
- static const Gudhi::persistence_matrix::Column_indexation_types column_indexation_type =
59
- Gudhi::persistence_matrix::Column_indexation_types::POSITION;
60
- static const bool can_retrieve_representative_cycles = true;
61
- };
43
+ // template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
44
+ // struct Multi_persistence_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
45
+ // using Index = std::uint32_t;
46
+ // static const bool has_matrix_maximal_dimension_access = false;
47
+ // static const bool has_column_pairings = true;
48
+ // static const bool has_vine_update = true;
49
+ // static const bool can_retrieve_representative_cycles = true;
50
+ // };
51
+
52
+ // template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
53
+ // struct Multi_persistence_Clement_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
54
+ // using Index = std::uint32_t;
55
+ // static const bool has_matrix_maximal_dimension_access = false;
56
+ // static const bool has_column_pairings = true;
57
+ // static const bool has_vine_update = true;
58
+ // static const bool is_of_boundary_type = false;
59
+ // static const Gudhi::persistence_matrix::Column_indexation_types column_indexation_type =
60
+ // Gudhi::persistence_matrix::Column_indexation_types::POSITION;
61
+ // static const bool can_retrieve_representative_cycles = true;
62
+ // };
62
63
 
63
64
  template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
64
65
  struct No_vine_multi_persistence_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
@@ -68,50 +69,61 @@ struct No_vine_multi_persistence_options : Gudhi::persistence_matrix::Default_op
68
69
  static const bool has_vine_update = false;
69
70
  };
70
71
 
71
- template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET,
72
- bool row_access = true>
73
- struct fix_presentation_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
74
- using Index = std::uint32_t;
75
- static const bool has_row_access = row_access;
76
- static const bool has_map_column_container = false;
77
- static const bool has_removable_columns = false; // WARN : idx will change if map is not true
72
+ // template <Gudhi::persistence_matrix::Column_types column_type = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET,
73
+ // bool row_access = true>
74
+ // struct fix_presentation_options : Gudhi::persistence_matrix::Default_options<column_type, true> {
75
+ // using Index = std::uint32_t;
76
+ // static const bool has_row_access = row_access;
77
+ // static const bool has_map_column_container = false;
78
+ // static const bool has_removable_columns = false; // WARN : idx will change if map is not true
79
+ // };
80
+
81
+ template <Gudhi::persistence_matrix::Column_types col = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
82
+ struct Multi_persistence_vineyard_ru_options : Gudhi::vineyard::Default_vineyard_options {
83
+ static constexpr bool is_RU = true;
84
+ static const Gudhi::persistence_matrix::Column_types column_type = col;
78
85
  };
79
86
 
80
- template <Available_columns col>
81
- using BackendOptionsWithVine = Multi_persistence_options<col>;
87
+ template <Gudhi::persistence_matrix::Column_types col = Gudhi::persistence_matrix::Column_types::INTRUSIVE_SET>
88
+ struct Multi_persistence_vineyard_chain_options : Gudhi::vineyard::Default_vineyard_options {
89
+ static constexpr bool is_RU = false;
90
+ static const Gudhi::persistence_matrix::Column_types column_type = col;
91
+ };
92
+
93
+ // template <Available_columns col>
94
+ // using BackendOptionsWithVine = Multi_persistence_options<col>;
82
95
  template <Available_columns col>
83
96
  using BackendOptionsWithoutVine = No_vine_multi_persistence_options<col>;
84
97
 
85
- template <Available_columns col>
86
- using ClementBackendOptionsWithVine = Multi_persistence_Clement_options<col>;
98
+ // template <Available_columns col>
99
+ // using ClementBackendOptionsWithVine = Multi_persistence_Clement_options<col>;
87
100
 
88
101
  // using SimplicialStructure = Gudhi::multiparameter::truc_interface::SimplicialStructure;
89
102
  template <typename Filtration>
90
103
  using StructureStuff = Gudhi::multi_persistence::Multi_parameter_filtered_complex<Filtration>;
91
104
 
92
- template <Available_columns col>
93
- using MatrixBackendNoVine = Gudhi::multi_persistence::Persistence_interface_matrix<BackendOptionsWithoutVine<col>>;
105
+ template <Available_columns col, class Filtration>
106
+ using MatrixBackendNoVine = Gudhi::multi_persistence::Persistence_interface_homology<BackendOptionsWithoutVine<col>, Filtration>;
94
107
 
95
108
  template <Available_columns col>
96
- using MatrixBackendVine = Gudhi::multi_persistence::Persistence_interface_matrix<BackendOptionsWithVine<col>>;
109
+ using MatrixBackendVine = Gudhi::multi_persistence::Persistence_interface_vineyard<Multi_persistence_vineyard_ru_options<col>>;
97
110
 
98
111
  template <Available_columns col>
99
- using ClementMatrixBackendVine =
100
- Gudhi::multi_persistence::Persistence_interface_matrix<ClementBackendOptionsWithVine<col>>;
112
+ using ClementMatrixBackendVine = Gudhi::multi_persistence::Persistence_interface_vineyard<Multi_persistence_vineyard_chain_options<col>>;
101
113
  template <typename Filtration>
102
114
  using GraphBackendVine = Gudhi::multiparameter::truc_interface::Persistence_backend_h0<StructureStuff<Filtration>>;
103
115
 
104
116
  template <typename value_type = float>
105
117
  using Filtration_value = Gudhi::multi_filtration::Multi_parameter_filtration<value_type, false, true>;
106
118
 
107
- template <Available_columns col = Available_columns::INTRUSIVE_SET>
108
- using SimplicialNoVineMatrixTruc = Gudhi::multi_persistence::Slicer<Filtration_value<>, MatrixBackendNoVine<col>>;
119
+ template <class Filtration, Available_columns col = Available_columns::INTRUSIVE_SET>
120
+ using SimplicialNoVineMatrixTruc = Gudhi::multi_persistence::Slicer<Filtration_value<>, MatrixBackendNoVine<col, Filtration>>;
109
121
 
110
122
  template <Available_columns col = Available_columns::INTRUSIVE_SET>
111
123
  using GeneralVineTruc = Gudhi::multi_persistence::Slicer<Filtration_value<>, MatrixBackendVine<col>>;
112
124
 
113
- template <Available_columns col = Available_columns::INTRUSIVE_SET>
114
- using GeneralNoVineTruc = Gudhi::multi_persistence::Slicer<Filtration_value<>, MatrixBackendNoVine<col>>;
125
+ template <class Filtration, Available_columns col = Available_columns::INTRUSIVE_SET>
126
+ using GeneralNoVineTruc = Gudhi::multi_persistence::Slicer<Filtration_value<>, MatrixBackendNoVine<col, Filtration>>;
115
127
 
116
128
  template <Available_columns col = Available_columns::INTRUSIVE_SET>
117
129
  using GeneralVineClementTruc = Gudhi::multi_persistence::Slicer<Filtration_value<>, ClementMatrixBackendVine<col>>;
@@ -128,8 +140,8 @@ using Multi_critical_filtration_value = Gudhi::multi_filtration::Multi_parameter
128
140
  template <Available_columns col = Available_columns::INTRUSIVE_SET>
129
141
  using KCriticalVineTruc = Gudhi::multi_persistence::Slicer<Multi_critical_filtration_value<>, MatrixBackendVine<col>>;
130
142
 
131
- template <bool is_vine, Available_columns col = Available_columns::INTRUSIVE_SET>
132
- using Matrix_interface = std::conditional_t<is_vine, MatrixBackendVine<col>, MatrixBackendNoVine<col>>;
143
+ template <bool is_vine, class Filtration, Available_columns col = Available_columns::INTRUSIVE_SET>
144
+ using Matrix_interface = std::conditional_t<is_vine, MatrixBackendVine<col>, MatrixBackendNoVine<col, Filtration>>;
133
145
 
134
146
  template <Filtration_containers_strs fil_container, bool is_k_critical, typename value_type>
135
147
  using filtration_options = std::conditional_t<fil_container == Filtration_containers_strs::Dynamic_multi_parameter_filtration,
@@ -138,13 +150,12 @@ using filtration_options = std::conditional_t<fil_container == Filtration_contai
138
150
  Gudhi::multi_filtration::Multi_parameter_filtration<value_type, false, !is_k_critical>,
139
151
  Gudhi::multi_filtration::Degree_rips_bifiltration<value_type, false, !is_k_critical>>>;
140
152
 
141
- template <bool is_vine,
142
- bool is_k_critical,
143
- typename value_type,
144
- Available_columns col = Available_columns::INTRUSIVE_SET,
145
- Filtration_containers_strs filt_cont = Filtration_containers_strs::Multi_parameter_filtration>
146
- using MatrixTrucPythonInterface =
147
- Gudhi::multi_persistence::Slicer<filtration_options<filt_cont,is_k_critical, value_type>, Matrix_interface<is_vine, col>>;
153
+ // template <bool is_vine,
154
+ // bool is_k_critical,
155
+ // typename value_type,
156
+ // Available_columns col = Available_columns::INTRUSIVE_SET,
157
+ // Filtration_containers_strs filt_cont = Filtration_containers_strs::Multi_parameter_filtration>
158
+ // using MatrixTrucPythonInterface = Gudhi::multi_persistence::Slicer<filtration_options<filt_cont,is_k_critical, value_type>, Matrix_interface<is_vine, Filtration, col>>;
148
159
 
149
160
  enum class BackendsEnum : std::uint8_t { Matrix, Graph, Clement, GudhiCohomology };
150
161
 
@@ -154,7 +165,7 @@ struct PersBackendOptsImpl;
154
165
 
155
166
  template <bool is_vine, Available_columns col, typename Filtration>
156
167
  struct PersBackendOptsImpl<BackendsEnum::Matrix, is_vine, col, Filtration> {
157
- using type = Matrix_interface<is_vine, col>;
168
+ using type = Matrix_interface<is_vine, Filtration, col>;
158
169
  };
159
170
 
160
171
  template <bool is_vine, Available_columns col, typename Filtration>
@@ -31,13 +31,16 @@
31
31
  #include <vector>
32
32
  #include <initializer_list>
33
33
 
34
+ #ifdef GUDHI_USE_TBB
35
+ #include <oneapi/tbb/parallel_for.h>
36
+ #endif
37
+
34
38
  #include <gudhi/Debug_utils.h>
35
39
  #include <gudhi/simple_mdspan.h>
36
40
  #include <gudhi/Multi_filtration/multi_filtration_utils.h>
37
41
  #include <gudhi/Simplex_tree/filtration_value_utils.h>
38
42
  #include <gudhi/Multi_parameter_filtration.h>
39
43
  #include <gudhi/Dynamic_multi_parameter_filtration.h>
40
- #include <oneapi/tbb/concurrent_vector.h>
41
44
 
42
45
  namespace Gudhi::multi_filtration {
43
46
 
@@ -1708,7 +1711,8 @@ class Degree_rips_bifiltration
1708
1711
 
1709
1712
  GUDHI_CHECK_code(const OneDimArray &indices = grid[1]);
1710
1713
  const OneDimArray &values = grid[0];
1711
- auto todo = [&](size_type g) {
1714
+
1715
+ auto project_generator = [&](size_type g) {
1712
1716
  GUDHI_CHECK_code(GUDHI_CHECK(static_cast<size_type>(indices[g]) == g, std::invalid_argument("Unvalid grid.")));
1713
1717
 
1714
1718
  auto v = static_cast<typename OneDimArray::value_type>(generators_[g]);
@@ -1718,11 +1722,12 @@ class Degree_rips_bifiltration
1718
1722
  }
1719
1723
  generators_[g] = coordinate ? static_cast<T>(d) : static_cast<T>(values[d]);
1720
1724
  };
1725
+
1721
1726
  #ifdef GUDHI_USE_TBB
1722
- tbb::parallel_for(size_type{0}, num_generators(), [&](size_type g) { todo(g); });
1727
+ tbb::parallel_for(size_type(0), num_generators(), project_generator);
1723
1728
  #else
1724
1729
  for (size_type g = 0; g < num_generators(); ++g) {
1725
- todo(g);
1730
+ project_generator(g);
1726
1731
  }
1727
1732
  #endif
1728
1733
  }
@@ -1842,9 +1847,7 @@ class Degree_rips_bifiltration
1842
1847
 
1843
1848
  #ifdef GUDHI_USE_TBB
1844
1849
  std::vector<U> projections(f.num_generators());
1845
- tbb::parallel_for(size_type{0}, f.num_generators(), [&](size_type g) {
1846
- projections[g] = project_generator(g);
1847
- });
1850
+ tbb::parallel_for(size_type{0}, f.num_generators(), [&](size_type g) { projections[g] = project_generator(g); });
1848
1851
  if constexpr (Co) {
1849
1852
  return *std::max_element(projections.begin(), projections.end());
1850
1853
  } else {
@@ -31,10 +31,13 @@
31
31
  #include <vector>
32
32
  #include <initializer_list>
33
33
 
34
+ #ifdef GUDHI_USE_TBB
35
+ #include <oneapi/tbb/parallel_for.h>
36
+ #endif
37
+
34
38
  #include <gudhi/Debug_utils.h>
35
39
  #include <gudhi/Multi_filtration/Multi_parameter_generator.h>
36
40
  #include <gudhi/Multi_filtration/multi_filtration_utils.h>
37
- #include <oneapi/tbb/parallel_for.h>
38
41
 
39
42
  namespace Gudhi::multi_filtration {
40
43
 
@@ -1856,9 +1859,8 @@ class Dynamic_multi_parameter_filtration
1856
1859
  std::invalid_argument("The grid should not be smaller than the number of parameters in the filtration value."));
1857
1860
 
1858
1861
  #ifdef GUDHI_USE_TBB
1859
- tbb::parallel_for(size_type(0), num_generators(), [&](size_type i){
1860
- generators_[i].project_onto_grid(grid, coordinate);
1861
- });
1862
+ tbb::parallel_for(
1863
+ size_type(0), num_generators(), [&](size_type i) { generators_[i].project_onto_grid(grid, coordinate); });
1862
1864
  #else
1863
1865
  for (Generator &g : generators_) {
1864
1866
  g.project_onto_grid(grid, coordinate);
@@ -1946,6 +1948,17 @@ class Dynamic_multi_parameter_filtration
1946
1948
  {
1947
1949
  if (f.num_generators() == 1) return compute_linear_projection(f.generators_[0], x);
1948
1950
 
1951
+ #ifdef GUDHI_USE_TBB
1952
+ std::vector<U> projections(f.num_generators());
1953
+ tbb::parallel_for(size_type{0}, f.num_generators(), [&](size_type g) {
1954
+ projections[g] = compute_linear_projection(f.generators_[g], x);
1955
+ });
1956
+ if constexpr (Co) {
1957
+ return *std::max_element(projections.begin(), projections.end());
1958
+ } else {
1959
+ return *std::min_element(projections.begin(), projections.end());
1960
+ }
1961
+ #else
1949
1962
  if constexpr (Co) {
1950
1963
  U projection = std::numeric_limits<U>::lowest();
1951
1964
  for (const Generator &g : f.generators_) {
@@ -1961,6 +1974,7 @@ class Dynamic_multi_parameter_filtration
1961
1974
  }
1962
1975
  return projection;
1963
1976
  }
1977
+ #endif
1964
1978
  }
1965
1979
 
1966
1980
  /**
@@ -2,7 +2,7 @@
2
2
  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3
3
  * Author(s): Hannah Schreiber, Clément Maria
4
4
  *
5
- * Copyright (C) 2022-24 Inria
5
+ * Copyright (C) 2022 Inria
6
6
  *
7
7
  * Modification(s):
8
8
  * - YYYY/MM Author: Description of the modification
@@ -305,7 +305,8 @@ class Multi_field_element
305
305
  const Characteristic& productOfCharacteristics) const
306
306
  {
307
307
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
308
- "The given product is not the product of a subset of the current Multi-field characteristics.");
308
+ std::invalid_argument(
309
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
309
310
 
310
311
  Characteristic QR;
311
312
  mpz_gcd(QR.get_mpz_t(), element_.get_mpz_t(), productOfCharacteristics.get_mpz_t()); // QR <- gcd(x,QS)
@@ -350,7 +351,8 @@ class Multi_field_element
350
351
  static Multi_field_element get_partial_multiplicative_identity(const Characteristic& productOfCharacteristics)
351
352
  {
352
353
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
353
- "The given product is not the product of a subset of the current Multi-field characteristics.");
354
+ std::invalid_argument(
355
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
354
356
 
355
357
  if (productOfCharacteristics == 0 || productOfCharacteristics == productOfAllCharacteristics_) {
356
358
  return get_multiplicative_identity();
@@ -2,7 +2,7 @@
2
2
  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3
3
  * Author(s): Hannah Schreiber, Clément Maria
4
4
  *
5
- * Copyright (C) 2022-24 Inria
5
+ * Copyright (C) 2022 Inria
6
6
  *
7
7
  * Modification(s):
8
8
  * - YYYY/MM Author: Description of the modification
@@ -366,7 +366,8 @@ class Multi_field_operators
366
366
  const Characteristic& productOfCharacteristics) const
367
367
  {
368
368
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
369
- "The given product is not the product of a subset of the current Multi-field characteristics.");
369
+ std::invalid_argument(
370
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
370
371
 
371
372
  Characteristic QR;
372
373
  mpz_gcd(QR.get_mpz_t(), e.get_mpz_t(), productOfCharacteristics.get_mpz_t()); // QR <- gcd(x,QS)
@@ -409,7 +410,8 @@ class Multi_field_operators
409
410
  [[nodiscard]] Element get_partial_multiplicative_identity(const Characteristic& productOfCharacteristics) const
410
411
  {
411
412
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
412
- "The given product is not the product of a subset of the current Multi-field characteristics.");
413
+ std::invalid_argument(
414
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
413
415
 
414
416
  if (productOfCharacteristics == nullCharacteristic || productOfCharacteristics == productOfAllCharacteristics_) {
415
417
  return get_multiplicative_identity();
@@ -2,7 +2,7 @@
2
2
  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3
3
  * Author(s): Hannah Schreiber, Clément Maria
4
4
  *
5
- * Copyright (C) 2022-24 Inria
5
+ * Copyright (C) 2022 Inria
6
6
  *
7
7
  * Modification(s):
8
8
  * - YYYY/MM Author: Description of the modification
@@ -347,7 +347,8 @@ class Shared_multi_field_element
347
347
  const Characteristic& productOfCharacteristics) const
348
348
  {
349
349
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
350
- "The given product is not the product of a subset of the current Multi-field characteristics.");
350
+ std::invalid_argument(
351
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
351
352
 
352
353
  Element QR;
353
354
  mpz_gcd(QR.get_mpz_t(), element_.get_mpz_t(), productOfCharacteristics.get_mpz_t()); // QR <- gcd(x,QS)
@@ -390,7 +391,8 @@ class Shared_multi_field_element
390
391
  static Shared_multi_field_element get_partial_multiplicative_identity(const Characteristic& productOfCharacteristics)
391
392
  {
392
393
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
393
- "The given product is not the product of a subset of the current Multi-field characteristics.");
394
+ std::invalid_argument(
395
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
394
396
 
395
397
  if (productOfCharacteristics == 0 || productOfCharacteristics == productOfAllCharacteristics_) {
396
398
  return get_multiplicative_identity();
@@ -2,7 +2,7 @@
2
2
  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3
3
  * Author(s): Hannah Schreiber, Clément Maria
4
4
  *
5
- * Copyright (C) 2022-24 Inria
5
+ * Copyright (C) 2022 Inria
6
6
  *
7
7
  * Modification(s):
8
8
  * - YYYY/MM Author: Description of the modification
@@ -353,7 +353,8 @@ class Multi_field_element_with_small_characteristics
353
353
  Characteristic productOfCharacteristics) const
354
354
  {
355
355
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
356
- "The given product is not the product of a subset of the current Multi-field characteristics.");
356
+ std::invalid_argument(
357
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
357
358
 
358
359
  Characteristic gcd = std::gcd(element_, productOfAllCharacteristics_);
359
360
 
@@ -401,7 +402,8 @@ class Multi_field_element_with_small_characteristics
401
402
  const Characteristic& productOfCharacteristics)
402
403
  {
403
404
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
404
- "The given product is not the product of a subset of the current Multi-field characteristics.");
405
+ std::invalid_argument(
406
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
405
407
 
406
408
  if (productOfCharacteristics == 0 || productOfCharacteristics == productOfAllCharacteristics_) {
407
409
  return get_multiplicative_identity();
@@ -2,7 +2,7 @@
2
2
  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3
3
  * Author(s): Hannah Schreiber, Clément Maria
4
4
  *
5
- * Copyright (C) 2022-24 Inria
5
+ * Copyright (C) 2022 Inria
6
6
  *
7
7
  * Modification(s):
8
8
  * - YYYY/MM Author: Description of the modification
@@ -327,7 +327,8 @@ class Multi_field_operators_with_small_characteristics
327
327
  const Characteristic& productOfCharacteristics) const
328
328
  {
329
329
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
330
- "The given product is not the product of a subset of the current Multi-field characteristics.");
330
+ std::invalid_argument(
331
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
331
332
 
332
333
  Characteristic gcd = std::gcd(e, productOfAllCharacteristics_);
333
334
 
@@ -368,7 +369,8 @@ class Multi_field_operators_with_small_characteristics
368
369
  [[nodiscard]] Element get_partial_multiplicative_identity(const Characteristic& productOfCharacteristics) const
369
370
  {
370
371
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
371
- "The given product is not the product of a subset of the current Multi-field characteristics.");
372
+ std::invalid_argument(
373
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
372
374
 
373
375
  if (productOfCharacteristics == nullCharacteristic || productOfCharacteristics == productOfAllCharacteristics_) {
374
376
  return get_multiplicative_identity();
@@ -2,7 +2,7 @@
2
2
  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3
3
  * Author(s): Hannah Schreiber, Clément Maria
4
4
  *
5
- * Copyright (C) 2022-24 Inria
5
+ * Copyright (C) 2022 Inria
6
6
  *
7
7
  * Modification(s):
8
8
  * - YYYY/MM Author: Description of the modification
@@ -395,7 +395,8 @@ class Shared_multi_field_element_with_small_characteristics
395
395
  Characteristic productOfCharacteristics) const
396
396
  {
397
397
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
398
- "The given product is not the product of a subset of the current Multi-field characteristics.");
398
+ std::invalid_argument(
399
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
399
400
 
400
401
  Characteristic gcd = std::gcd(element_, productOfAllCharacteristics_);
401
402
 
@@ -443,7 +444,8 @@ class Shared_multi_field_element_with_small_characteristics
443
444
  const Characteristic& productOfCharacteristics)
444
445
  {
445
446
  GUDHI_CHECK(productOfCharacteristics >= 0 && productOfCharacteristics <= productOfAllCharacteristics_,
446
- "The given product is not the product of a subset of the current Multi-field characteristics.");
447
+ std::invalid_argument(
448
+ "The given product is not the product of a subset of the current Multi-field characteristics."));
447
449
 
448
450
  if (productOfCharacteristics == 0 || productOfCharacteristics == productOfAllCharacteristics_) {
449
451
  return Shared_multi_field_element_with_small_characteristics(multiplicativeID_);
@@ -2,7 +2,7 @@
2
2
  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3
3
  * Author(s): Hannah Schreiber
4
4
  *
5
- * Copyright (C) 2022-24 Inria
5
+ * Copyright (C) 2022 Inria
6
6
  *
7
7
  * Modification(s):
8
8
  * - YYYY/MM Author: Description of the modification
@@ -2,7 +2,7 @@
2
2
  * See file LICENSE or go to https://gudhi.inria.fr/licensing/ for full license details.
3
3
  * Author(s): Hannah Schreiber
4
4
  *
5
- * Copyright (C) 2022-24 Inria
5
+ * Copyright (C) 2022 Inria
6
6
  *
7
7
  * Modification(s):
8
8
  * - YYYY/MM Author: Description of the modification