multipers 2.3.3b3__tar.gz → 2.3.3b5__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.3b3/multipers.egg-info → multipers-2.3.3b5}/PKG-INFO +1 -1
  2. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/_signed_measure_meta.py +25 -8
  3. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/array_api/__init__.py +4 -2
  4. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/array_api/numpy.py +2 -0
  5. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/array_api/torch.py +1 -0
  6. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/signed_measures.py +1 -1
  7. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/plots.py +17 -4
  8. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/point_measure.pyx +71 -2
  9. {multipers-2.3.3b3 → multipers-2.3.3b5/multipers.egg-info}/PKG-INFO +1 -1
  10. {multipers-2.3.3b3 → multipers-2.3.3b5}/pyproject.toml +1 -1
  11. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_signed_measure.py +67 -0
  12. {multipers-2.3.3b3 → multipers-2.3.3b5}/LICENSE +0 -0
  13. {multipers-2.3.3b3 → multipers-2.3.3b5}/MANIFEST.in +0 -0
  14. {multipers-2.3.3b3 → multipers-2.3.3b5}/README.md +0 -0
  15. {multipers-2.3.3b3 → multipers-2.3.3b5}/_tempita_grid_gen.py +0 -0
  16. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/__init__.py +0 -0
  17. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/_slicer_meta.py +0 -0
  18. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/MOL2.py +0 -0
  19. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/UCR.py +0 -0
  20. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/__init__.py +0 -0
  21. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/graphs.py +0 -0
  22. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/immuno_regions.py +0 -0
  23. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/minimal_presentation_to_st_bf.py +0 -0
  24. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/pytorch2simplextree.py +0 -0
  25. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/shape3d.py +0 -0
  26. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/data/synthetic.py +0 -0
  27. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/distances.py +0 -0
  28. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/filtration_conversions.pxd +0 -0
  29. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/filtration_conversions.pxd.tp +0 -0
  30. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/filtrations/__init__.py +0 -0
  31. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/filtrations/density.py +0 -0
  32. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/filtrations/filtrations.py +0 -0
  33. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/filtrations.pxd +0 -0
  34. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/function_rips.pyx +0 -0
  35. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/grids.pyx +0 -0
  36. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/Persistence_slices_interface.h +0 -0
  37. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/Simplex_tree_interface.h +0 -0
  38. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/Simplex_tree_multi_interface.h +0 -0
  39. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/cubical_to_boundary.h +0 -0
  40. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Bitmap_cubical_complex.h +0 -0
  41. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +0 -0
  42. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +0 -0
  43. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Debug_utils.h +0 -0
  44. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Multi_field.h +0 -0
  45. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Multi_field_operators.h +0 -0
  46. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Multi_field_shared.h +0 -0
  47. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Multi_field_small.h +0 -0
  48. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +0 -0
  49. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +0 -0
  50. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Z2_field.h +0 -0
  51. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Z2_field_operators.h +0 -0
  52. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Zp_field.h +0 -0
  53. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Zp_field_operators.h +0 -0
  54. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Fields/Zp_field_shared.h +0 -0
  55. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +0 -0
  56. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Matrix.h +0 -0
  57. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Multi_critical_filtration.h +0 -0
  58. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Multi_persistence/Box.h +0 -0
  59. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Multi_persistence/Line.h +0 -0
  60. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Off_reader.h +0 -0
  61. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/One_critical_filtration.h +0 -0
  62. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +0 -0
  63. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +0 -0
  64. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +0 -0
  65. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +0 -0
  66. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +0 -0
  67. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +0 -0
  68. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +0 -0
  69. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +0 -0
  70. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +0 -0
  71. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +0 -0
  72. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/boundary_cell_position_to_id_mapper.h +0 -0
  73. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/boundary_face_position_to_id_mapper.h +0 -0
  74. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +0 -0
  75. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +0 -0
  76. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +0 -0
  77. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +0 -0
  78. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +0 -0
  79. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +0 -0
  80. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +0 -0
  81. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +0 -0
  82. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +0 -0
  83. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +0 -0
  84. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +0 -0
  85. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +0 -0
  86. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +0 -0
  87. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +0 -0
  88. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/small_vector_column.h +0 -0
  89. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +0 -0
  90. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +0 -0
  91. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +0 -0
  92. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +0 -0
  93. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +0 -0
  94. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +0 -0
  95. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +0 -0
  96. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +0 -0
  97. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +0 -0
  98. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +0 -0
  99. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Persistent_cohomology.h +0 -0
  100. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Points_off_io.h +0 -0
  101. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simple_object_pool.h +0 -0
  102. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +0 -0
  103. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +0 -0
  104. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +0 -0
  105. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +0 -0
  106. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +0 -0
  107. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +0 -0
  108. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +0 -0
  109. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +0 -0
  110. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree.h +0 -0
  111. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/Simplex_tree_multi.h +0 -0
  112. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/distance_functions.h +0 -0
  113. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/graph_simplicial_complex.h +0 -0
  114. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/persistence_interval.h +0 -0
  115. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/persistence_matrix_options.h +0 -0
  116. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/gudhi/reader_utils.h +0 -0
  117. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/mma_interface_coh.h +0 -0
  118. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/mma_interface_h0.h +0 -0
  119. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/mma_interface_matrix.h +0 -0
  120. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/naive_merge_tree.h +0 -0
  121. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/scc_io.h +0 -0
  122. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/gudhi/truc.h +0 -0
  123. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/io.pyx +0 -0
  124. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/__init__.py +0 -0
  125. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/accuracies.py +0 -0
  126. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/invariants_with_persistable.py +0 -0
  127. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/kernels.py +0 -0
  128. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/mma.py +0 -0
  129. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/one.py +0 -0
  130. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/point_clouds.py +0 -0
  131. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/sliced_wasserstein.py +0 -0
  132. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/ml/tools.py +0 -0
  133. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/mma_structures.pxd +0 -0
  134. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/mma_structures.pyx +0 -0
  135. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/mma_structures.pyx.tp +0 -0
  136. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multi_parameter_rank_invariant/diff_helpers.h +0 -0
  137. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multi_parameter_rank_invariant/euler_characteristic.h +0 -0
  138. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multi_parameter_rank_invariant/function_rips.h +0 -0
  139. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multi_parameter_rank_invariant/hilbert_function.h +0 -0
  140. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multi_parameter_rank_invariant/persistence_slices.h +0 -0
  141. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multi_parameter_rank_invariant/rank_invariant.h +0 -0
  142. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_edge_collapse.py +0 -0
  143. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/approximation.h +0 -0
  144. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/combinatory.h +0 -0
  145. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/debug.h +0 -0
  146. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/euler_curves.h +0 -0
  147. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/format_python-cpp.h +0 -0
  148. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/heap_column.h +0 -0
  149. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/images.h +0 -0
  150. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/list_column.h +0 -0
  151. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/list_column_2.h +0 -0
  152. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/ru_matrix.h +0 -0
  153. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/set_column.h +0 -0
  154. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/structure_higher_dim_barcode.h +0 -0
  155. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/unordered_set_column.h +0 -0
  156. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/utilities.h +0 -0
  157. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/vector_column.h +0 -0
  158. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/vector_matrix.h +0 -0
  159. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/vineyards.h +0 -0
  160. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation/vineyards_trajectories.h +0 -0
  161. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/multiparameter_module_approximation.pyx +0 -0
  162. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/pickle.py +0 -0
  163. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/simplex_tree_multi.pxd +0 -0
  164. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/simplex_tree_multi.pyx +0 -0
  165. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/simplex_tree_multi.pyx.tp +0 -0
  166. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/slicer.pxd +0 -0
  167. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/slicer.pxd.tp +0 -0
  168. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/slicer.pyx +0 -0
  169. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/slicer.pyx.tp +0 -0
  170. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/tensor/tensor.h +0 -0
  171. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/tensor.pxd +0 -0
  172. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/test.pyx +0 -0
  173. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/tests/__init__.py +0 -0
  174. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/torch/__init__.py +0 -0
  175. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/torch/diff_grids.py +0 -0
  176. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers/torch/rips_density.py +0 -0
  177. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers.egg-info/SOURCES.txt +0 -0
  178. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers.egg-info/dependency_links.txt +0 -0
  179. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers.egg-info/requires.txt +0 -0
  180. {multipers-2.3.3b3 → multipers-2.3.3b5}/multipers.egg-info/top_level.txt +0 -0
  181. {multipers-2.3.3b3 → multipers-2.3.3b5}/setup.cfg +0 -0
  182. {multipers-2.3.3b3 → multipers-2.3.3b5}/setup.py +0 -0
  183. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_diff_helper.py +0 -0
  184. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_filtrations.py +0 -0
  185. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_hilbert_function.py +0 -0
  186. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_mma.py +0 -0
  187. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_point_clouds.py +0 -0
  188. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_python-cpp_conversion.py +0 -0
  189. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_signed_betti.py +0 -0
  190. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_simplextreemulti.py +0 -0
  191. {multipers-2.3.3b3 → multipers-2.3.3b5}/tests/test_slicer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multipers
3
- Version: 2.3.3b3
3
+ Version: 2.3.3b5
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):
@@ -850,7 +850,7 @@ class SignedMeasureFormatter(BaseEstimator, TransformerMixin):
850
850
 
851
851
  if self.flatten:
852
852
  out = np.concatenate(out).flatten()
853
- if self.axis == -1:
853
+ elif self.axis == -1:
854
854
  return np.asarray(out)
855
855
  else:
856
856
  return np.asarray(out)[0]
@@ -1,12 +1,25 @@
1
1
  from typing import Optional
2
2
  from warnings import warn
3
3
 
4
+ import matplotlib.colors as mcolors
4
5
  import matplotlib.pyplot as plt
5
6
  import numpy as np
7
+ from matplotlib.colors import ListedColormap
6
8
  from numpy.typing import ArrayLike
7
9
 
8
10
  from multipers.array_api import to_numpy
9
11
 
12
+ _custom_colors = [
13
+ "#03045e",
14
+ "#0077b6",
15
+ "#00b4d8",
16
+ "#90e0ef",
17
+ ]
18
+ _cmap = ListedColormap(_custom_colors)
19
+ _continuous_cmap = mcolors.LinearSegmentedColormap.from_list(
20
+ "continuous_cmap", _cmap.colors, N=256
21
+ )
22
+
10
23
 
11
24
  def _plot_rectangle(rectangle: np.ndarray, weight, **plt_kwargs):
12
25
  rectangle = np.asarray(rectangle)
@@ -71,7 +84,7 @@ def _plot_signed_measure_4(
71
84
  pts = np.clip(pts, a_min=-np.inf, a_max=np.array((*threshold, *threshold))[None, :])
72
85
  alpha_rescaling = 0
73
86
  for rectangle, weight in zip(pts, weights):
74
- if rectangle[2] > x_smoothing * rectangle[0]:
87
+ if rectangle[2] >= x_smoothing * rectangle[0]:
75
88
  alpha_rescaling = max(
76
89
  alpha_rescaling,
77
90
  (rectangle[2] / x_smoothing - rectangle[0])
@@ -80,7 +93,7 @@ def _plot_signed_measure_4(
80
93
  # draw the rectangles
81
94
  for rectangle, weight in zip(pts, weights):
82
95
  # draw only the rectangles that have not been reduced to the empty set
83
- if rectangle[2] > x_smoothing * rectangle[0]:
96
+ if rectangle[2] >= x_smoothing * rectangle[0]:
84
97
  # make the alpha channel proportional to the rectangle's area
85
98
  if area_alpha:
86
99
  _plot_rectangle(
@@ -185,7 +198,7 @@ def plot_surface(
185
198
  if discrete_surface:
186
199
  cmap = matplotlib.colormaps["gray_r"]
187
200
  else:
188
- cmap = matplotlib.colormaps["plasma"]
201
+ cmap = _cmap
189
202
  if discrete_surface:
190
203
  if has_negative_values:
191
204
  bounds = np.arange(-5, 6, 1, dtype=int)
@@ -200,7 +213,7 @@ def plot_surface(
200
213
  )
201
214
  cbar.set_ticks(ticks=bounds, labels=bounds)
202
215
  return im
203
- im = ax.pcolormesh(grid[0], grid[1], hf.T, cmap=cmap, **plt_args)
216
+ im = ax.contourf(grid[0], grid[1], hf.T, cmap=cmap, **plt_args)
204
217
  return im
205
218
 
206
219
 
@@ -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
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: multipers
3
- Version: 2.3.3b3
3
+ Version: 2.3.3b5
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>
@@ -9,7 +9,7 @@ build-backend = "setuptools.build_meta"
9
9
 
10
10
  [project]
11
11
  name = "multipers"
12
- version = "2.3.3b3"
12
+ version = "2.3.3b5"
13
13
  description = "Multiparameter Topological Persistence for Machine Learning"
14
14
  readme = "README.md"
15
15
  authors = [
@@ -89,3 +89,70 @@ def test_rank(degree):
89
89
  bc2 = s.persistence_on_line(bp, d)[degree]
90
90
  # assert_sm(bc1,bc2, max_error=.1)
91
91
  assert np.isclose(wasserstein_distance(bc1, bc2), 0)
92
+
93
+
94
+ def test_hook_decomposition():
95
+ from multipers.point_measure import rectangle_to_hook_minimal_signed_barcode
96
+
97
+ B = [[], [0]]
98
+ D = [0, 1]
99
+ F = [[0, 0], [1, 1]]
100
+ s = mp.Slicer(return_type_only=True)(B, D, F)
101
+ (sm_rank,) = mp.signed_measure(
102
+ s,
103
+ invariant="rank",
104
+ degree=0,
105
+ )
106
+ sm_hook = rectangle_to_hook_minimal_signed_barcode(*sm_rank)
107
+ pts_hook, w_hook = sm_hook
108
+ assert np.array_equal(pts_hook, [[0, 0, 1, 1]]), pts_hook
109
+ assert np.array_equal(w_hook, [1]), w_hook
110
+ B = [[], [0], [0]]
111
+ D = [0, 1, 1]
112
+ F = [[0, 0], [1, 0], [0, 1]]
113
+ s = mp.Slicer(return_type_only=True)(B, D, F)
114
+ (sm_rank,) = mp.signed_measure(
115
+ s,
116
+ invariant="rank",
117
+ degree=0,
118
+ )
119
+ sm_hook = rectangle_to_hook_minimal_signed_barcode(*sm_rank)
120
+ pts_hook, w_hook = sm_hook
121
+ assert np.array_equal(
122
+ pts_hook, [[0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 1, 1]]
123
+ ), pts_hook
124
+ assert np.array_equal(w_hook, [1, 1, -1]), w_hook
125
+
126
+ B = [
127
+ [],
128
+ [0],
129
+ ]
130
+ D = [
131
+ 0,
132
+ 1,
133
+ ]
134
+ F = [[0, 0], [1, 0]]
135
+ s = mp.Slicer(return_type_only=True)(B, D, F)
136
+ (sm_rank,) = mp.signed_measure(
137
+ s,
138
+ invariant="rank",
139
+ degree=0,
140
+ )
141
+ sm_hook = rectangle_to_hook_minimal_signed_barcode(*sm_rank)
142
+ pts_hook, w_hook = sm_hook
143
+ assert np.array_equal(pts_hook, [[0, 0, 1, 0]]), pts_hook
144
+ assert np.array_equal(w_hook, [1]), w_hook
145
+
146
+ B = [[], [0]]
147
+ D = [0, 1]
148
+ F = [[0, 0], [0, 1]]
149
+ s = mp.Slicer(return_type_only=True)(B, D, F)
150
+ (sm_rank,) = mp.signed_measure(
151
+ s,
152
+ invariant="rank",
153
+ degree=0,
154
+ )
155
+ sm_hook = rectangle_to_hook_minimal_signed_barcode(*sm_rank)
156
+ pts_hook, w_hook = sm_hook
157
+ assert np.array_equal(pts_hook, [[0, 0, 0, 1]]), pts_hook
158
+ assert np.array_equal(w_hook, [1]), w_hook
File without changes
File without changes
File without changes
File without changes
File without changes