multipers 2.3.3b4__tar.gz → 2.3.3b6__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.

Potentially problematic release.


This version of multipers might be problematic. Click here for more details.

Files changed (191) hide show
  1. {multipers-2.3.3b4/multipers.egg-info → multipers-2.3.3b6}/PKG-INFO +1 -1
  2. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/_signed_measure_meta.py +25 -8
  3. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/array_api/__init__.py +4 -2
  4. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/array_api/numpy.py +2 -0
  5. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/array_api/torch.py +1 -0
  6. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/filtrations/filtrations.py +19 -6
  7. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/plots.py +14 -8
  8. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/point_measure.pyx +71 -2
  9. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/simplex_tree_multi.pyx +16 -0
  10. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/simplex_tree_multi.pyx.tp +2 -0
  11. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/slicer.pyx +61 -60
  12. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/slicer.pyx.tp +2 -1
  13. {multipers-2.3.3b4 → multipers-2.3.3b6/multipers.egg-info}/PKG-INFO +1 -1
  14. {multipers-2.3.3b4 → multipers-2.3.3b6}/pyproject.toml +1 -1
  15. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_signed_measure.py +67 -0
  16. {multipers-2.3.3b4 → multipers-2.3.3b6}/LICENSE +0 -0
  17. {multipers-2.3.3b4 → multipers-2.3.3b6}/MANIFEST.in +0 -0
  18. {multipers-2.3.3b4 → multipers-2.3.3b6}/README.md +0 -0
  19. {multipers-2.3.3b4 → multipers-2.3.3b6}/_tempita_grid_gen.py +0 -0
  20. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/__init__.py +0 -0
  21. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/_slicer_meta.py +0 -0
  22. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/MOL2.py +0 -0
  23. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/UCR.py +0 -0
  24. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/__init__.py +0 -0
  25. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/graphs.py +0 -0
  26. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/immuno_regions.py +0 -0
  27. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/minimal_presentation_to_st_bf.py +0 -0
  28. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/pytorch2simplextree.py +0 -0
  29. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/shape3d.py +0 -0
  30. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/data/synthetic.py +0 -0
  31. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/distances.py +0 -0
  32. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/filtration_conversions.pxd +0 -0
  33. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/filtration_conversions.pxd.tp +0 -0
  34. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/filtrations/__init__.py +0 -0
  35. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/filtrations/density.py +0 -0
  36. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/filtrations.pxd +0 -0
  37. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/function_rips.pyx +0 -0
  38. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/grids.pyx +0 -0
  39. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/Persistence_slices_interface.h +0 -0
  40. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/Simplex_tree_interface.h +0 -0
  41. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/Simplex_tree_multi_interface.h +0 -0
  42. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/cubical_to_boundary.h +0 -0
  43. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Bitmap_cubical_complex.h +0 -0
  44. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +0 -0
  45. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +0 -0
  46. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Debug_utils.h +0 -0
  47. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Multi_field.h +0 -0
  48. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Multi_field_operators.h +0 -0
  49. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Multi_field_shared.h +0 -0
  50. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Multi_field_small.h +0 -0
  51. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +0 -0
  52. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +0 -0
  53. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Z2_field.h +0 -0
  54. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Z2_field_operators.h +0 -0
  55. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Zp_field.h +0 -0
  56. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Zp_field_operators.h +0 -0
  57. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Fields/Zp_field_shared.h +0 -0
  58. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +0 -0
  59. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Matrix.h +0 -0
  60. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Multi_critical_filtration.h +0 -0
  61. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Multi_persistence/Box.h +0 -0
  62. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Multi_persistence/Line.h +0 -0
  63. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Off_reader.h +0 -0
  64. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/One_critical_filtration.h +0 -0
  65. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +0 -0
  66. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +0 -0
  67. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +0 -0
  68. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +0 -0
  69. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +0 -0
  70. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +0 -0
  71. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +0 -0
  72. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +0 -0
  73. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +0 -0
  74. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +0 -0
  75. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +0 -0
  76. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +0 -0
  77. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +0 -0
  78. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +0 -0
  79. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +0 -0
  80. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +0 -0
  81. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +0 -0
  82. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +0 -0
  83. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +0 -0
  84. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +0 -0
  85. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +0 -0
  86. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +0 -0
  87. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +0 -0
  88. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +0 -0
  89. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +0 -0
  90. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +0 -0
  91. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +0 -0
  92. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +0 -0
  93. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +0 -0
  94. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +0 -0
  95. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +0 -0
  96. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +0 -0
  97. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +0 -0
  98. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +0 -0
  99. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +0 -0
  100. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +0 -0
  101. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +0 -0
  102. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Persistent_cohomology.h +0 -0
  103. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Points_off_io.h +0 -0
  104. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simple_object_pool.h +0 -0
  105. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +0 -0
  106. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +0 -0
  107. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +0 -0
  108. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +0 -0
  109. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +0 -0
  110. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +0 -0
  111. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +0 -0
  112. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +0 -0
  113. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree.h +0 -0
  114. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/Simplex_tree_multi.h +0 -0
  115. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/distance_functions.h +0 -0
  116. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/graph_simplicial_complex.h +0 -0
  117. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/persistence_interval.h +0 -0
  118. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/persistence_matrix_options.h +0 -0
  119. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/gudhi/reader_utils.h +0 -0
  120. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/mma_interface_coh.h +0 -0
  121. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/mma_interface_h0.h +0 -0
  122. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/mma_interface_matrix.h +0 -0
  123. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/naive_merge_tree.h +0 -0
  124. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/scc_io.h +0 -0
  125. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/gudhi/truc.h +0 -0
  126. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/io.pyx +0 -0
  127. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/__init__.py +0 -0
  128. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/accuracies.py +0 -0
  129. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/invariants_with_persistable.py +0 -0
  130. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/kernels.py +0 -0
  131. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/mma.py +0 -0
  132. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/one.py +0 -0
  133. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/point_clouds.py +0 -0
  134. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/signed_measures.py +0 -0
  135. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/sliced_wasserstein.py +0 -0
  136. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/ml/tools.py +0 -0
  137. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/mma_structures.pxd +0 -0
  138. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/mma_structures.pyx +0 -0
  139. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/mma_structures.pyx.tp +0 -0
  140. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multi_parameter_rank_invariant/diff_helpers.h +0 -0
  141. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multi_parameter_rank_invariant/euler_characteristic.h +0 -0
  142. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multi_parameter_rank_invariant/function_rips.h +0 -0
  143. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multi_parameter_rank_invariant/hilbert_function.h +0 -0
  144. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multi_parameter_rank_invariant/persistence_slices.h +0 -0
  145. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multi_parameter_rank_invariant/rank_invariant.h +0 -0
  146. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_edge_collapse.py +0 -0
  147. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/approximation.h +0 -0
  148. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/combinatory.h +0 -0
  149. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/debug.h +0 -0
  150. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/euler_curves.h +0 -0
  151. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/format_python-cpp.h +0 -0
  152. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/heap_column.h +0 -0
  153. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/images.h +0 -0
  154. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/list_column.h +0 -0
  155. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/list_column_2.h +0 -0
  156. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/ru_matrix.h +0 -0
  157. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/set_column.h +0 -0
  158. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/structure_higher_dim_barcode.h +0 -0
  159. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/unordered_set_column.h +0 -0
  160. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/utilities.h +0 -0
  161. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/vector_column.h +0 -0
  162. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/vector_matrix.h +0 -0
  163. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/vineyards.h +0 -0
  164. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation/vineyards_trajectories.h +0 -0
  165. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/multiparameter_module_approximation.pyx +0 -0
  166. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/pickle.py +0 -0
  167. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/simplex_tree_multi.pxd +0 -0
  168. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/slicer.pxd +0 -0
  169. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/slicer.pxd.tp +0 -0
  170. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/tensor/tensor.h +0 -0
  171. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/tensor.pxd +0 -0
  172. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/test.pyx +0 -0
  173. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/tests/__init__.py +0 -0
  174. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/torch/__init__.py +0 -0
  175. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/torch/diff_grids.py +0 -0
  176. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers/torch/rips_density.py +0 -0
  177. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers.egg-info/SOURCES.txt +0 -0
  178. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers.egg-info/dependency_links.txt +0 -0
  179. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers.egg-info/requires.txt +0 -0
  180. {multipers-2.3.3b4 → multipers-2.3.3b6}/multipers.egg-info/top_level.txt +0 -0
  181. {multipers-2.3.3b4 → multipers-2.3.3b6}/setup.cfg +0 -0
  182. {multipers-2.3.3b4 → multipers-2.3.3b6}/setup.py +0 -0
  183. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_diff_helper.py +0 -0
  184. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_filtrations.py +0 -0
  185. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_hilbert_function.py +0 -0
  186. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_mma.py +0 -0
  187. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_point_clouds.py +0 -0
  188. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_python-cpp_conversion.py +0 -0
  189. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_signed_betti.py +0 -0
  190. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_simplextreemulti.py +0 -0
  191. {multipers-2.3.3b4 → multipers-2.3.3b6}/tests/test_slicer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multipers
3
- Version: 2.3.3b4
3
+ Version: 2.3.3b6
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>
@@ -3,7 +3,6 @@ from typing import Optional, Union
3
3
 
4
4
  import numpy as np
5
5
 
6
- import multipers as mp
7
6
  from multipers.grids import compute_grid, sms_in_grid
8
7
  from multipers.plots import plot_signed_measures
9
8
  from multipers.point_measure import clean_sms, zero_out_sms
@@ -31,7 +30,7 @@ def signed_measure(
31
30
  verbose: bool = False,
32
31
  n_jobs: int = -1,
33
32
  expand_collapse: bool = False,
34
- backend: Optional[str] = None, # deprecated
33
+ backend: Optional[str] = None, # deprecated
35
34
  grid: Optional[Iterable] = None,
36
35
  coordinate_measure: bool = False,
37
36
  num_collapses: int = 0, # TODO : deprecate
@@ -99,12 +98,21 @@ def signed_measure(
99
98
  - Rank: Same as Hilbert.
100
99
  """
101
100
  if backend is not None:
102
- raise ValueError("backend is deprecated. reduce the complex before this function.")
103
- if num_collapses >0:
104
- raise ValueError("num_collapses is deprecated. reduce the complex before this function.")
101
+ raise ValueError(
102
+ "backend is deprecated. reduce the complex before this function."
103
+ )
104
+ if num_collapses > 0:
105
+ raise ValueError(
106
+ "num_collapses is deprecated. reduce the complex before this function."
107
+ )
105
108
  ## TODO : add timings in verbose
106
109
  if len(filtered_complex) == 0:
107
- return [(np.empty((0,2), dtype=filtered_complex.dtype), np.empty(shape=(0,), dtype=int))]
110
+ return [
111
+ (
112
+ np.empty((0, 2), dtype=filtered_complex.dtype),
113
+ np.empty(shape=(0,), dtype=int),
114
+ )
115
+ ]
108
116
  if grid_conversion is not None:
109
117
  grid = tuple(f for f in grid_conversion)
110
118
  raise DeprecationWarning(
@@ -134,6 +142,8 @@ def signed_measure(
134
142
  "rank",
135
143
  "euler_characteristic",
136
144
  "hilbert_function",
145
+ "rectangle",
146
+ "hook",
137
147
  ]
138
148
 
139
149
  assert (
@@ -256,7 +266,7 @@ def signed_measure(
256
266
  # if verbose:
257
267
  # print("Done.")
258
268
  else: # No backend
259
- if invariant is not None and "rank" in invariant:
269
+ if invariant is not None and ("rank" in invariant or "hook" in invariant or "rectangle" in invariant):
260
270
  degrees = np.asarray(degrees, dtype=int)
261
271
  if verbose:
262
272
  print("Computing rank...", end="")
@@ -269,6 +279,10 @@ def signed_measure(
269
279
  ignore_inf=ignore_infinite_filtration_values,
270
280
  )
271
281
  fix_mass_default = False
282
+
283
+ if "hook" in invariant:
284
+ from multipers.point_measure import rectangle_to_hook_minimal_signed_barcode
285
+ sms = [rectangle_to_hook_minimal_signed_barcode(pts,w) for pts,w in sms]
272
286
  if verbose:
273
287
  print("Done.")
274
288
  elif filtered_complex_.is_minpres:
@@ -315,7 +329,7 @@ def signed_measure(
315
329
  if verbose:
316
330
  print("Input is a simplextree.")
317
331
  ## we still have a simplextree here
318
- if invariant in ["rank_invariant", "rank"]:
332
+ if invariant in ["rank_invariant", "rank", "hook", "rectangle"]:
319
333
  if verbose:
320
334
  print("Computing rank invariant...", end="")
321
335
  assert (
@@ -331,6 +345,9 @@ def signed_measure(
331
345
  expand_collapse=expand_collapse,
332
346
  )
333
347
  fix_mass_default = False
348
+ if "hook" in invariant:
349
+ from multipers.point_measure import rectangle_to_hook_minimal_signed_barcode
350
+ sms = [rectangle_to_hook_minimal_signed_barcode(pts,w) for pts,w in sms]
334
351
  if verbose:
335
352
  print("Done.")
336
353
  elif len(degrees) == 1 and degrees[0] is None:
@@ -1,6 +1,7 @@
1
- def api_from_tensor(x, *, verbose: bool = False):
2
- import multipers.array_api.numpy as npapi
1
+ import multipers.array_api.numpy as npapi
2
+
3
3
 
4
+ def api_from_tensor(x, *, verbose: bool = False):
4
5
  if npapi.is_promotable(x):
5
6
  if verbose:
6
7
  print("using numpy backend")
@@ -38,6 +39,7 @@ def api_from_tensors(*args):
38
39
  return torchapi
39
40
  raise ValueError(f"Incompatible types got {[type(x) for x in args]=}.")
40
41
 
42
+
41
43
  def to_numpy(x):
42
44
  api = api_from_tensor(x)
43
45
  return api.asnumpy(x)
@@ -16,6 +16,8 @@ no_grad = nullcontext
16
16
  zeros = _np.zeros
17
17
  min = _np.min
18
18
  max = _np.max
19
+ repeat_interleave = _np.repeat
20
+ cdist = cdist # type: ignore[no-redef]
19
21
 
20
22
 
21
23
  def minvalues(x: _np.ndarray, **kwargs):
@@ -13,6 +13,7 @@ cdist = _t.cdist
13
13
  zeros = _t.zeros
14
14
  min = _t.min
15
15
  max = _t.max
16
+ repeat_interleave = _t.repeat_interleave
16
17
 
17
18
 
18
19
  def minvalues(x: _t.Tensor, **kwargs):
@@ -17,7 +17,6 @@ try:
17
17
 
18
18
  from multipers.filtrations.density import KDE
19
19
  except ImportError:
20
-
21
20
  from sklearn.neighbors import KernelDensity
22
21
 
23
22
  warn("pykeops not found. Falling back to sklearn.")
@@ -67,7 +66,9 @@ def RipsLowerstar(
67
66
  function = function[:, None]
68
67
  if function.ndim != 2:
69
68
  raise ValueError(
70
- f"`function.ndim` should be 0 or 1 . Got {function.ndim=}.{function=}"
69
+ f"""
70
+ `function.ndim` should be 0 or 1 . Got {function.ndim=}.{function=}
71
+ """
71
72
  )
72
73
  num_parameters = function.shape[1] + 1
73
74
  st = SimplexTreeMulti(st, num_parameters=num_parameters)
@@ -154,6 +155,9 @@ def DelaunayLowerstar(
154
155
  verbose=verbose,
155
156
  clear=clear,
156
157
  )
158
+ if reduce_degree >= 0:
159
+ # Force resolution to avoid confusion with hilbert.
160
+ slicer = slicer.minpres(degree=reduce_degree, force=True)
157
161
  if flagify:
158
162
  from multipers.slicer import to_simplextree
159
163
 
@@ -192,7 +196,7 @@ def DelaunayCodensity(
192
196
  ), "Density estimation is either via kernels or dtm."
193
197
  if bandwidth is not None:
194
198
  kde = KDE(bandwidth=bandwidth, kernel=kernel, return_log=return_log)
195
- f = kde.fit(points).score_samples(points)
199
+ f = -kde.fit(points).score_samples(points)
196
200
  elif dtm_mass is not None:
197
201
  f = DTM(masses=[dtm_mass]).fit(points).score_samples(points)[0]
198
202
  else:
@@ -287,11 +291,17 @@ def CoreDelaunay(
287
291
  "safe",
288
292
  "exact",
289
293
  "fast",
290
- ], f"The parameter precision must be one of ['safe', 'exact', 'fast'], got {precision}."
294
+ ], f"""
295
+ The parameter precision must be one of ['safe', 'exact', 'fast'],
296
+ got {precision}.
297
+ """
291
298
 
292
299
  if verbose:
293
300
  print(
294
- f"Computing the Delaunay Core Bifiltration of {len(points)} points in dimension {points.shape[1]} with parameters:"
301
+ f"""Computing the Delaunay Core Bifiltration
302
+ of {len(points)} points in dimension {points.shape[1]}
303
+ with parameters:
304
+ """
295
305
  )
296
306
  print(f"\tbeta = {beta}")
297
307
  print(f"\tks = {ks}")
@@ -333,7 +343,10 @@ def CoreDelaunay(
333
343
  num_simplices = len(vertex_array)
334
344
  if verbose:
335
345
  print(
336
- f"Inserting {num_simplices} simplices of dimension {dim} ({num_simplices * len(ks)} birth values)..."
346
+ f"""
347
+ Inserting {num_simplices} simplices of dimension {dim}
348
+ ({num_simplices * len(ks)} birth values)...
349
+ """
337
350
  )
338
351
  max_knn_distances = np.max(knn_distances[vertex_array], axis=1)
339
352
  critical_radii = np.maximum(alphas[:, None], beta * max_knn_distances)
@@ -15,9 +15,9 @@ _custom_colors = [
15
15
  "#00b4d8",
16
16
  "#90e0ef",
17
17
  ]
18
- _cmap = ListedColormap(_custom_colors)
19
- _continuous_cmap = mcolors.LinearSegmentedColormap.from_list(
20
- "continuous_cmap", _cmap.colors, N=256
18
+ _cmap_ = ListedColormap(_custom_colors)
19
+ _cmap = mcolors.LinearSegmentedColormap.from_list(
20
+ "continuous_cmap", _cmap_.colors, N=256
21
21
  )
22
22
 
23
23
 
@@ -84,7 +84,7 @@ def _plot_signed_measure_4(
84
84
  pts = np.clip(pts, a_min=-np.inf, a_max=np.array((*threshold, *threshold))[None, :])
85
85
  alpha_rescaling = 0
86
86
  for rectangle, weight in zip(pts, weights):
87
- if rectangle[2] > x_smoothing * rectangle[0]:
87
+ if rectangle[2] >= x_smoothing * rectangle[0]:
88
88
  alpha_rescaling = max(
89
89
  alpha_rescaling,
90
90
  (rectangle[2] / x_smoothing - rectangle[0])
@@ -93,7 +93,7 @@ def _plot_signed_measure_4(
93
93
  # draw the rectangles
94
94
  for rectangle, weight in zip(pts, weights):
95
95
  # draw only the rectangles that have not been reduced to the empty set
96
- if rectangle[2] > x_smoothing * rectangle[0]:
96
+ if rectangle[2] >= x_smoothing * rectangle[0]:
97
97
  # make the alpha channel proportional to the rectangle's area
98
98
  if area_alpha:
99
99
  _plot_rectangle(
@@ -180,8 +180,9 @@ def plot_surface(
180
180
  fig=None,
181
181
  ax=None,
182
182
  cmap: Optional[str] = None,
183
- discrete_surface=False,
184
- has_negative_values=False,
183
+ discrete_surface: bool = False,
184
+ has_negative_values: bool = False,
185
+ contour: bool = True,
185
186
  **plt_args,
186
187
  ):
187
188
  import matplotlib
@@ -213,7 +214,12 @@ def plot_surface(
213
214
  )
214
215
  cbar.set_ticks(ticks=bounds, labels=bounds)
215
216
  return im
216
- im = ax.contourf(grid[0], grid[1], hf.T, cmap=cmap, **plt_args)
217
+
218
+ if contour:
219
+ levels = plt_args.pop("levels", 20)
220
+ im = ax.contourf(grid[0], grid[1], hf.T, cmap=cmap, levels=levels, **plt_args)
221
+ else:
222
+ im = ax.pcolormesh(grid[0], grid[1], hf.T, cmap=cmap, **plt_args)
217
223
  return im
218
224
 
219
225
 
@@ -11,6 +11,7 @@ from collections import defaultdict
11
11
  cnp.import_array()
12
12
  from scipy import sparse
13
13
 
14
+ from multipers.array_api import api_from_tensor
14
15
 
15
16
  import multipers.grids as mpg
16
17
 
@@ -31,7 +32,6 @@ import cython
31
32
  cimport cython
32
33
 
33
34
 
34
-
35
35
  # from scipy.sparse import coo_array
36
36
  # from scipy.ndimage import convolve1d
37
37
 
@@ -169,7 +169,7 @@ def sparsify(x):
169
169
 
170
170
  @cython.boundscheck(False)
171
171
  @cython.wraparound(False)
172
- def clean_signed_measure(some_float[:,:] pts, some_int[:] weights, dtype = np.float32):
172
+ def clean_signed_measure_old(some_float[:,:] pts, some_int[:] weights, dtype = np.float32):
173
173
  """
174
174
  Sum the diracs at the same locations. i.e.,
175
175
  returns the minimal sized measure to represent the input.
@@ -190,6 +190,14 @@ def clean_signed_measure(some_float[:,:] pts, some_int[:] weights, dtype = np.fl
190
190
  new_weights = new_weights[idx]
191
191
  return (new_pts, new_weights)
192
192
 
193
+ def clean_signed_measure(pts, w, dtype=np.int32):
194
+ api = api_from_tensor(pts)
195
+ _, idx, inv = np.unique(api.asnumpy(pts), return_index=True, return_inverse=True, axis=0)
196
+ new_w = np.bincount(inv, weights=w).astype(w.dtype)
197
+ pts, w = pts[idx], new_w
198
+ idx = w!=0
199
+ return pts[idx],w[idx]
200
+
193
201
  def clean_sms(sms):
194
202
  """
195
203
  Sum the diracs at the same locations. i.e.,
@@ -324,3 +332,64 @@ def estimate_rank_from_rank_sm(sm:tuple, a, b)->np.int64:
324
332
  return w[idx].sum()
325
333
 
326
334
 
335
+ def rectangle_to_hook_minimal_signed_barcode(pts,w,):
336
+ if pts.shape[1] != 4:
337
+ raise NotImplementedError(
338
+ "Only works for 2-parameter persistence modules for the moment."
339
+ )
340
+ api = api_from_tensor(pts)
341
+ pts = api.astensor(pts)
342
+ w = np.asarray(w)
343
+ ## [a,b], [a, a0b1], [a,b0a1], proj, V,H
344
+
345
+ projectives_idx = (pts[:,3] == np.inf) * (pts[:,2] == np.inf)
346
+ pts_proj = pts[projectives_idx]
347
+ w_proj = w[projectives_idx]
348
+ pts = pts[~projectives_idx]
349
+ w = w[~projectives_idx]
350
+ # print("projectives:", pts_proj)
351
+
352
+ vert_blocks_idx = pts[:,3] == np.inf
353
+ pts_V = pts[vert_blocks_idx]
354
+ w_V = w[vert_blocks_idx]
355
+ pts_V[:,3] = pts_V[:,1]
356
+ pts = pts[~vert_blocks_idx]
357
+ w = w[~vert_blocks_idx]
358
+ # print("vertical:", pts_V)
359
+
360
+ h_idx = pts[:,2] == np.inf
361
+ pts_H = pts[h_idx]
362
+ w_H = w[h_idx]
363
+ pts_H[:,2] = pts_H[:,0]
364
+ pts = pts[~h_idx]
365
+ w = w[~h_idx]
366
+ # print("horizontal:", pts_H)
367
+
368
+
369
+ new_w = api.cat([-w, w, w, w_proj,w_V,w_H])
370
+
371
+ pts_b0a1 = api.tensor(pts)
372
+ pts_b0a1[:,3] = pts[:,1]
373
+ pts_a0b1 = api.tensor(pts)
374
+ pts_a0b1[:,2] = pts[:,0]
375
+
376
+ new_pts = api.cat([
377
+ pts,
378
+ pts_b0a1,
379
+ pts_a0b1,
380
+ pts_proj,
381
+ pts_V,
382
+ pts_H
383
+ ], axis=0)
384
+ # pts,w = new_pts,new_w
385
+ pts,w = clean_signed_measure(new_pts,new_w)
386
+
387
+ # Everything infinite is handled separately anyway
388
+ # inf0 = pts[:,2] == np.inf
389
+ # inf1 = pts[:,3] == np.inf
390
+ # pts[inf0,3] = pts[inf0,1]
391
+ # pts[inf1,2] = pts[inf1,0]
392
+ # pts,w = clean_signed_measure(pts,w)
393
+
394
+ return pts,w
395
+
@@ -883,6 +883,8 @@ cdef class SimplexTreeMulti_KFi32:
883
883
  bool coordinate_values=True,
884
884
  bool force=False,
885
885
  str strategy:_available_strategies = "exact",
886
+ resolution:Optional[int|list[int]] = None,
887
+ bool coordinates = False,
886
888
  grid_strategy=None,
887
889
  bool inplace=False,
888
890
  **filtration_grid_kwargs
@@ -2322,6 +2324,8 @@ cdef class SimplexTreeMulti_Fi32:
2322
2324
  bool coordinate_values=True,
2323
2325
  bool force=False,
2324
2326
  str strategy:_available_strategies = "exact",
2327
+ resolution:Optional[int|list[int]] = None,
2328
+ bool coordinates = False,
2325
2329
  grid_strategy=None,
2326
2330
  bool inplace=False,
2327
2331
  **filtration_grid_kwargs
@@ -3471,6 +3475,8 @@ cdef class SimplexTreeMulti_KFi64:
3471
3475
  bool coordinate_values=True,
3472
3476
  bool force=False,
3473
3477
  str strategy:_available_strategies = "exact",
3478
+ resolution:Optional[int|list[int]] = None,
3479
+ bool coordinates = False,
3474
3480
  grid_strategy=None,
3475
3481
  bool inplace=False,
3476
3482
  **filtration_grid_kwargs
@@ -4910,6 +4916,8 @@ cdef class SimplexTreeMulti_Fi64:
4910
4916
  bool coordinate_values=True,
4911
4917
  bool force=False,
4912
4918
  str strategy:_available_strategies = "exact",
4919
+ resolution:Optional[int|list[int]] = None,
4920
+ bool coordinates = False,
4913
4921
  grid_strategy=None,
4914
4922
  bool inplace=False,
4915
4923
  **filtration_grid_kwargs
@@ -6059,6 +6067,8 @@ cdef class SimplexTreeMulti_KFf32:
6059
6067
  bool coordinate_values=True,
6060
6068
  bool force=False,
6061
6069
  str strategy:_available_strategies = "exact",
6070
+ resolution:Optional[int|list[int]] = None,
6071
+ bool coordinates = False,
6062
6072
  grid_strategy=None,
6063
6073
  bool inplace=False,
6064
6074
  **filtration_grid_kwargs
@@ -7498,6 +7508,8 @@ cdef class SimplexTreeMulti_Ff32:
7498
7508
  bool coordinate_values=True,
7499
7509
  bool force=False,
7500
7510
  str strategy:_available_strategies = "exact",
7511
+ resolution:Optional[int|list[int]] = None,
7512
+ bool coordinates = False,
7501
7513
  grid_strategy=None,
7502
7514
  bool inplace=False,
7503
7515
  **filtration_grid_kwargs
@@ -8647,6 +8659,8 @@ cdef class SimplexTreeMulti_KFf64:
8647
8659
  bool coordinate_values=True,
8648
8660
  bool force=False,
8649
8661
  str strategy:_available_strategies = "exact",
8662
+ resolution:Optional[int|list[int]] = None,
8663
+ bool coordinates = False,
8650
8664
  grid_strategy=None,
8651
8665
  bool inplace=False,
8652
8666
  **filtration_grid_kwargs
@@ -10086,6 +10100,8 @@ cdef class SimplexTreeMulti_Ff64:
10086
10100
  bool coordinate_values=True,
10087
10101
  bool force=False,
10088
10102
  str strategy:_available_strategies = "exact",
10103
+ resolution:Optional[int|list[int]] = None,
10104
+ bool coordinates = False,
10089
10105
  grid_strategy=None,
10090
10106
  bool inplace=False,
10091
10107
  **filtration_grid_kwargs
@@ -1330,6 +1330,8 @@ cdef class SimplexTreeMulti_{{FSHORT}}:
1330
1330
  bool coordinate_values=True,
1331
1331
  bool force=False,
1332
1332
  str strategy:_available_strategies = "exact",
1333
+ resolution:Optional[int|list[int]] = None,
1334
+ bool coordinates = False,
1333
1335
  grid_strategy=None,
1334
1336
  bool inplace=False,
1335
1337
  **filtration_grid_kwargs