multipers 2.4.0b1__cp312-cp312-macosx_11_0_arm64.whl
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.
- multipers/.dylibs/libboost_timer.dylib +0 -0
- multipers/.dylibs/libc++.1.0.dylib +0 -0
- multipers/.dylibs/libtbb.12.17.dylib +0 -0
- multipers/__init__.py +33 -0
- multipers/_signed_measure_meta.py +426 -0
- multipers/_slicer_meta.py +231 -0
- multipers/array_api/__init__.py +62 -0
- multipers/array_api/numpy.py +124 -0
- multipers/array_api/torch.py +133 -0
- multipers/data/MOL2.py +458 -0
- multipers/data/UCR.py +18 -0
- multipers/data/__init__.py +1 -0
- multipers/data/graphs.py +466 -0
- multipers/data/immuno_regions.py +27 -0
- multipers/data/minimal_presentation_to_st_bf.py +0 -0
- multipers/data/pytorch2simplextree.py +91 -0
- multipers/data/shape3d.py +101 -0
- multipers/data/synthetic.py +113 -0
- multipers/distances.py +202 -0
- multipers/filtration_conversions.pxd +736 -0
- multipers/filtration_conversions.pxd.tp +226 -0
- multipers/filtrations/__init__.py +21 -0
- multipers/filtrations/density.py +529 -0
- multipers/filtrations/filtrations.py +480 -0
- multipers/filtrations.pxd +534 -0
- multipers/filtrations.pxd.tp +332 -0
- multipers/function_rips.cpython-312-darwin.so +0 -0
- multipers/function_rips.pyx +104 -0
- multipers/grids.cpython-312-darwin.so +0 -0
- multipers/grids.pyx +538 -0
- multipers/gudhi/Persistence_slices_interface.h +213 -0
- multipers/gudhi/Simplex_tree_interface.h +274 -0
- multipers/gudhi/Simplex_tree_multi_interface.h +648 -0
- multipers/gudhi/gudhi/Bitmap_cubical_complex.h +450 -0
- multipers/gudhi/gudhi/Bitmap_cubical_complex_base.h +1070 -0
- multipers/gudhi/gudhi/Bitmap_cubical_complex_periodic_boundary_conditions_base.h +579 -0
- multipers/gudhi/gudhi/Debug_utils.h +52 -0
- multipers/gudhi/gudhi/Degree_rips_bifiltration.h +2307 -0
- multipers/gudhi/gudhi/Dynamic_multi_parameter_filtration.h +2524 -0
- multipers/gudhi/gudhi/Fields/Multi_field.h +453 -0
- multipers/gudhi/gudhi/Fields/Multi_field_operators.h +460 -0
- multipers/gudhi/gudhi/Fields/Multi_field_shared.h +444 -0
- multipers/gudhi/gudhi/Fields/Multi_field_small.h +584 -0
- multipers/gudhi/gudhi/Fields/Multi_field_small_operators.h +490 -0
- multipers/gudhi/gudhi/Fields/Multi_field_small_shared.h +580 -0
- multipers/gudhi/gudhi/Fields/Z2_field.h +391 -0
- multipers/gudhi/gudhi/Fields/Z2_field_operators.h +389 -0
- multipers/gudhi/gudhi/Fields/Zp_field.h +493 -0
- multipers/gudhi/gudhi/Fields/Zp_field_operators.h +384 -0
- multipers/gudhi/gudhi/Fields/Zp_field_shared.h +492 -0
- multipers/gudhi/gudhi/Flag_complex_edge_collapser.h +337 -0
- multipers/gudhi/gudhi/Matrix.h +2200 -0
- multipers/gudhi/gudhi/Multi_filtration/Multi_parameter_generator.h +1712 -0
- multipers/gudhi/gudhi/Multi_filtration/multi_filtration_conversions.h +237 -0
- multipers/gudhi/gudhi/Multi_filtration/multi_filtration_utils.h +225 -0
- multipers/gudhi/gudhi/Multi_parameter_filtered_complex.h +485 -0
- multipers/gudhi/gudhi/Multi_parameter_filtration.h +2643 -0
- multipers/gudhi/gudhi/Multi_persistence/Box.h +233 -0
- multipers/gudhi/gudhi/Multi_persistence/Line.h +309 -0
- multipers/gudhi/gudhi/Multi_persistence/Multi_parameter_filtered_complex_pcoh_interface.h +268 -0
- multipers/gudhi/gudhi/Multi_persistence/Persistence_interface_cohomology.h +159 -0
- multipers/gudhi/gudhi/Multi_persistence/Persistence_interface_matrix.h +463 -0
- multipers/gudhi/gudhi/Multi_persistence/Point.h +853 -0
- multipers/gudhi/gudhi/Off_reader.h +173 -0
- multipers/gudhi/gudhi/Persistence_matrix/Base_matrix.h +834 -0
- multipers/gudhi/gudhi/Persistence_matrix/Base_matrix_with_column_compression.h +838 -0
- multipers/gudhi/gudhi/Persistence_matrix/Boundary_matrix.h +833 -0
- multipers/gudhi/gudhi/Persistence_matrix/Chain_matrix.h +1367 -0
- multipers/gudhi/gudhi/Persistence_matrix/Id_to_index_overlay.h +1157 -0
- multipers/gudhi/gudhi/Persistence_matrix/Position_to_index_overlay.h +869 -0
- multipers/gudhi/gudhi/Persistence_matrix/RU_matrix.h +905 -0
- multipers/gudhi/gudhi/Persistence_matrix/allocators/entry_constructors.h +122 -0
- multipers/gudhi/gudhi/Persistence_matrix/base_pairing.h +260 -0
- multipers/gudhi/gudhi/Persistence_matrix/base_swap.h +288 -0
- multipers/gudhi/gudhi/Persistence_matrix/chain_pairing.h +170 -0
- multipers/gudhi/gudhi/Persistence_matrix/chain_rep_cycles.h +247 -0
- multipers/gudhi/gudhi/Persistence_matrix/chain_vine_swap.h +571 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/chain_column_extra_properties.h +182 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/column_dimension_holder.h +130 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/column_utilities.h +235 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/entry_types.h +312 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/heap_column.h +1092 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_list_column.h +923 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/intrusive_set_column.h +914 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/list_column.h +930 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/naive_vector_column.h +1071 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/row_access.h +203 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/set_column.h +886 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/unordered_set_column.h +984 -0
- multipers/gudhi/gudhi/Persistence_matrix/columns/vector_column.h +1213 -0
- multipers/gudhi/gudhi/Persistence_matrix/index_mapper.h +58 -0
- multipers/gudhi/gudhi/Persistence_matrix/matrix_dimension_holders.h +227 -0
- multipers/gudhi/gudhi/Persistence_matrix/matrix_row_access.h +200 -0
- multipers/gudhi/gudhi/Persistence_matrix/ru_pairing.h +166 -0
- multipers/gudhi/gudhi/Persistence_matrix/ru_rep_cycles.h +319 -0
- multipers/gudhi/gudhi/Persistence_matrix/ru_vine_swap.h +562 -0
- multipers/gudhi/gudhi/Persistence_on_a_line.h +152 -0
- multipers/gudhi/gudhi/Persistence_on_rectangle.h +617 -0
- multipers/gudhi/gudhi/Persistent_cohomology/Field_Zp.h +118 -0
- multipers/gudhi/gudhi/Persistent_cohomology/Multi_field.h +173 -0
- multipers/gudhi/gudhi/Persistent_cohomology/Persistent_cohomology_column.h +128 -0
- multipers/gudhi/gudhi/Persistent_cohomology.h +769 -0
- multipers/gudhi/gudhi/Points_off_io.h +171 -0
- multipers/gudhi/gudhi/Projective_cover_kernel.h +379 -0
- multipers/gudhi/gudhi/Simple_object_pool.h +69 -0
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_iterators.h +559 -0
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_node_explicit_storage.h +83 -0
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_siblings.h +121 -0
- multipers/gudhi/gudhi/Simplex_tree/Simplex_tree_star_simplex_iterators.h +277 -0
- multipers/gudhi/gudhi/Simplex_tree/filtration_value_utils.h +155 -0
- multipers/gudhi/gudhi/Simplex_tree/hooks_simplex_base.h +62 -0
- multipers/gudhi/gudhi/Simplex_tree/indexing_tag.h +27 -0
- multipers/gudhi/gudhi/Simplex_tree/serialization_utils.h +60 -0
- multipers/gudhi/gudhi/Simplex_tree/simplex_tree_options.h +105 -0
- multipers/gudhi/gudhi/Simplex_tree.h +3170 -0
- multipers/gudhi/gudhi/Slicer.h +848 -0
- multipers/gudhi/gudhi/Thread_safe_slicer.h +393 -0
- multipers/gudhi/gudhi/distance_functions.h +62 -0
- multipers/gudhi/gudhi/graph_simplicial_complex.h +104 -0
- multipers/gudhi/gudhi/multi_simplex_tree_helpers.h +147 -0
- multipers/gudhi/gudhi/persistence_interval.h +263 -0
- multipers/gudhi/gudhi/persistence_matrix_options.h +188 -0
- multipers/gudhi/gudhi/reader_utils.h +367 -0
- multipers/gudhi/gudhi/simple_mdspan.h +484 -0
- multipers/gudhi/gudhi/slicer_helpers.h +779 -0
- multipers/gudhi/tmp_h0_pers/mma_interface_h0.h +223 -0
- multipers/gudhi/tmp_h0_pers/naive_merge_tree.h +536 -0
- multipers/io.cpython-312-darwin.so +0 -0
- multipers/io.pyx +472 -0
- multipers/ml/__init__.py +0 -0
- multipers/ml/accuracies.py +90 -0
- multipers/ml/invariants_with_persistable.py +79 -0
- multipers/ml/kernels.py +176 -0
- multipers/ml/mma.py +713 -0
- multipers/ml/one.py +472 -0
- multipers/ml/point_clouds.py +352 -0
- multipers/ml/signed_measures.py +1667 -0
- multipers/ml/sliced_wasserstein.py +461 -0
- multipers/ml/tools.py +113 -0
- multipers/mma_structures.cpython-312-darwin.so +0 -0
- multipers/mma_structures.pxd +134 -0
- multipers/mma_structures.pyx +1483 -0
- multipers/mma_structures.pyx.tp +1126 -0
- multipers/multi_parameter_rank_invariant/diff_helpers.h +85 -0
- multipers/multi_parameter_rank_invariant/euler_characteristic.h +95 -0
- multipers/multi_parameter_rank_invariant/function_rips.h +317 -0
- multipers/multi_parameter_rank_invariant/hilbert_function.h +761 -0
- multipers/multi_parameter_rank_invariant/persistence_slices.h +149 -0
- multipers/multi_parameter_rank_invariant/rank_invariant.h +350 -0
- multipers/multiparameter_edge_collapse.py +41 -0
- multipers/multiparameter_module_approximation/approximation.h +2541 -0
- multipers/multiparameter_module_approximation/debug.h +107 -0
- multipers/multiparameter_module_approximation/format_python-cpp.h +292 -0
- multipers/multiparameter_module_approximation/utilities.h +428 -0
- multipers/multiparameter_module_approximation.cpython-312-darwin.so +0 -0
- multipers/multiparameter_module_approximation.pyx +286 -0
- multipers/ops.cpython-312-darwin.so +0 -0
- multipers/ops.pyx +231 -0
- multipers/pickle.py +89 -0
- multipers/plots.py +550 -0
- multipers/point_measure.cpython-312-darwin.so +0 -0
- multipers/point_measure.pyx +409 -0
- multipers/simplex_tree_multi.cpython-312-darwin.so +0 -0
- multipers/simplex_tree_multi.pxd +136 -0
- multipers/simplex_tree_multi.pyx +11719 -0
- multipers/simplex_tree_multi.pyx.tp +2102 -0
- multipers/slicer.cpython-312-darwin.so +0 -0
- multipers/slicer.pxd +2097 -0
- multipers/slicer.pxd.tp +263 -0
- multipers/slicer.pyx +13042 -0
- multipers/slicer.pyx.tp +1259 -0
- multipers/tensor/tensor.h +672 -0
- multipers/tensor.pxd +13 -0
- multipers/test.pyx +44 -0
- multipers/tests/__init__.py +70 -0
- multipers/torch/__init__.py +1 -0
- multipers/torch/diff_grids.py +240 -0
- multipers/torch/rips_density.py +310 -0
- multipers/vector_interface.pxd +46 -0
- multipers-2.4.0b1.dist-info/METADATA +131 -0
- multipers-2.4.0b1.dist-info/RECORD +184 -0
- multipers-2.4.0b1.dist-info/WHEEL +6 -0
- multipers-2.4.0b1.dist-info/licenses/LICENSE +21 -0
- multipers-2.4.0b1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
{{py:
|
|
2
|
+
|
|
3
|
+
"""
|
|
4
|
+
Filtrations conversions between python and C++
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
## Value types : CTYPE, PYTHON_TYPE, short
|
|
8
|
+
value_types = [
|
|
9
|
+
("int32_t", "np.int32", "i32"),
|
|
10
|
+
("int64_t", "np.int64", "i64"),
|
|
11
|
+
("float", "np.float32", "f32"),
|
|
12
|
+
("double", "np.float64", "f64"),
|
|
13
|
+
]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import pickle
|
|
17
|
+
with open("build/tmp/_filtration_names.pkl", "rb") as f:
|
|
18
|
+
Filtrations=pickle.load(f)
|
|
19
|
+
|
|
20
|
+
}}
|
|
21
|
+
|
|
22
|
+
# Python to C++ conversions
|
|
23
|
+
from multipers.filtrations cimport *
|
|
24
|
+
from libcpp.vector cimport vector
|
|
25
|
+
from libcpp cimport bool
|
|
26
|
+
cimport numpy as cnp
|
|
27
|
+
import numpy as np
|
|
28
|
+
from libc.stdint cimport int32_t, int64_t
|
|
29
|
+
from cython.operator cimport dereference
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
{{for CTYPE, PYTYPE, SHORT in value_types}}
|
|
37
|
+
###### ------------------- PY TO CPP
|
|
38
|
+
#### ----------
|
|
39
|
+
|
|
40
|
+
cdef inline vector[{{CTYPE}}] _py2p_{{SHORT}}({{CTYPE}}[:] filtration) noexcept nogil:
|
|
41
|
+
# TODO: Is there no directer way to convert a T[:] into a vector[T]?
|
|
42
|
+
# A memcpy would be much quicker than a python/cython for loop...
|
|
43
|
+
# With a continuous memory use, we could also pass the pointers as iterators if we have access to it?
|
|
44
|
+
cdef vector[{{CTYPE}}] f = vector[{{CTYPE}}](len(filtration))
|
|
45
|
+
for i in range(len(filtration)):
|
|
46
|
+
f[i] = filtration[i]
|
|
47
|
+
return f
|
|
48
|
+
|
|
49
|
+
cdef inline vector[{{CTYPE}}] _py2p2_{{SHORT}}({{CTYPE}}[:,:] filtrations) noexcept nogil:
|
|
50
|
+
cdef vector[{{CTYPE}}] f = vector[{{CTYPE}}](filtrations.shape[0] * filtrations.shape[1])
|
|
51
|
+
k = 0
|
|
52
|
+
for i in range(filtrations.shape[0]):
|
|
53
|
+
for j in range(filtrations.shape[1]):
|
|
54
|
+
f[k] = filtrations[i,j]
|
|
55
|
+
k = k + 1
|
|
56
|
+
return f
|
|
57
|
+
|
|
58
|
+
cdef inline vector[Point[{{CTYPE}}]] _py2vp_{{SHORT}}({{CTYPE}}[:,:] filtrations) noexcept nogil:
|
|
59
|
+
cdef vector[Point[{{CTYPE}}]] out
|
|
60
|
+
cdef Point[{{CTYPE}}] f = Point[{{CTYPE}}](filtrations.shape[1])
|
|
61
|
+
out.reserve(filtrations.shape[0])
|
|
62
|
+
for i in range(filtrations.shape[0]):
|
|
63
|
+
for j in range(filtrations.shape[1]):
|
|
64
|
+
f[j] = filtrations[i,j]
|
|
65
|
+
out.emplace_back(f)
|
|
66
|
+
return out
|
|
67
|
+
|
|
68
|
+
cdef inline Multi_critical_filtration[{{CTYPE}}] _py2kc_{{SHORT}}({{CTYPE}}[:,:] filtrations) noexcept nogil:
|
|
69
|
+
# cdef {{CTYPE}}[:,:] filtrations = np.asarray(filtrations_, dtype={{PYTYPE}})
|
|
70
|
+
cdef vector[{{CTYPE}}] f = vector[{{CTYPE}}](filtrations.shape[0] * filtrations.shape[1])
|
|
71
|
+
cdef int k = 0;
|
|
72
|
+
for i in range(filtrations.shape[0]):
|
|
73
|
+
for j in range(filtrations.shape[1]):
|
|
74
|
+
f[k] = filtrations[i,j]
|
|
75
|
+
k = k + 1
|
|
76
|
+
cdef Multi_critical_filtration[{{CTYPE}}] out = Multi_critical_filtration[{{CTYPE}}](f.begin(), f.end(), filtrations.shape[1])
|
|
77
|
+
out.simplify()
|
|
78
|
+
return out
|
|
79
|
+
|
|
80
|
+
cdef inline One_critical_filtration[{{CTYPE}}] _py21c_{{SHORT}}({{CTYPE}}[:] filtration) noexcept nogil:
|
|
81
|
+
cdef One_critical_filtration[{{CTYPE}}] out = _py2p_{{SHORT}}(filtration)
|
|
82
|
+
return out
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
cdef inline vector[One_critical_filtration[{{CTYPE}}]] _py2v1c_{{SHORT}}({{CTYPE}}[:,:] filtrations) noexcept nogil:
|
|
86
|
+
# cdef {{CTYPE}}[:,:] filtrations = np.asarray(filtrations_, dtype={{PYTYPE}})
|
|
87
|
+
cdef vector[One_critical_filtration[{{CTYPE}}]] out
|
|
88
|
+
cdef vector[{{CTYPE}}] f = vector[{{CTYPE}}](filtrations.shape[1])
|
|
89
|
+
out.reserve(filtrations.shape[0])
|
|
90
|
+
for i in range(filtrations.shape[0]):
|
|
91
|
+
for j in range(filtrations.shape[1]):
|
|
92
|
+
f[j] = filtrations[i,j]
|
|
93
|
+
out.emplace_back(f)
|
|
94
|
+
return out
|
|
95
|
+
|
|
96
|
+
cdef inline vector[Multi_critical_filtration[{{CTYPE}}]] _py2vkc_{{SHORT}}({{CTYPE}}[:,:] filtrations) noexcept nogil:
|
|
97
|
+
# cdef {{CTYPE}}[:,:] filtrations = np.asarray(filtrations_, dtype={{PYTYPE}})
|
|
98
|
+
cdef vector[Multi_critical_filtration[{{CTYPE}}]] out
|
|
99
|
+
cdef vector[{{CTYPE}}] f = vector[{{CTYPE}}](filtrations.shape[1])
|
|
100
|
+
out.reserve(filtrations.shape[0])
|
|
101
|
+
for i in range(filtrations.shape[0]):
|
|
102
|
+
for j in range(filtrations.shape[1]):
|
|
103
|
+
f[j] = filtrations[i,j]
|
|
104
|
+
out.emplace_back(f)
|
|
105
|
+
return out
|
|
106
|
+
|
|
107
|
+
###### ------------------- CPP to PY
|
|
108
|
+
|
|
109
|
+
## tailored for Dynamic_multi_parameter_filtration
|
|
110
|
+
## testing finite or not is not necessary for Multi_parameter_filtration
|
|
111
|
+
## won't work for Degree_rips_filtration
|
|
112
|
+
|
|
113
|
+
## CYTHON BUG: using tuples here will cause some weird issues.
|
|
114
|
+
cdef inline _ff21cview_{{SHORT}}(One_critical_filtration[{{CTYPE}}]* x, bool copy=False):
|
|
115
|
+
cdef Py_ssize_t num_parameters = dereference(x).num_parameters()
|
|
116
|
+
if not dereference(x).is_finite():
|
|
117
|
+
return np.full(shape=num_parameters, fill_value=dereference(x)(0,0))
|
|
118
|
+
cdef {{CTYPE}}[:] x_view = <{{CTYPE}}[:num_parameters]>(&(dereference(x)(0,0)))
|
|
119
|
+
return np.array(x_view) if copy else np.asarray(x_view)
|
|
120
|
+
|
|
121
|
+
cdef inline _ff21cview2_{{SHORT}}({{CTYPE}}* x, Py_ssize_t num_parameters, int duplicate, bool copy=False):
|
|
122
|
+
if duplicate:
|
|
123
|
+
return np.full(shape=duplicate, fill_value=dereference(x))
|
|
124
|
+
cdef {{CTYPE}}[:] x_view = <{{CTYPE}}[:num_parameters]>(x)
|
|
125
|
+
return np.array(x_view) if copy else np.asarray(x_view)
|
|
126
|
+
|
|
127
|
+
cdef inline _ff2kcview_{{SHORT}}(Multi_critical_filtration[{{CTYPE}}]* x, bool copy=False):
|
|
128
|
+
cdef Py_ssize_t k = dereference(x).num_generators()
|
|
129
|
+
cdef Py_ssize_t p = dereference(x).num_parameters()
|
|
130
|
+
if dereference(x).is_finite():
|
|
131
|
+
duplicate = 0
|
|
132
|
+
else:
|
|
133
|
+
duplicate = p
|
|
134
|
+
return [_ff21cview2_{{SHORT}}(&(dereference(x)(i,0)), p, duplicate, copy=copy) for i in range(k)]
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
cdef inline _vff21cview_{{SHORT}}(vector[One_critical_filtration[{{CTYPE}}]]& x, bool copy = False):
|
|
138
|
+
cdef Py_ssize_t num_stuff = x.size()
|
|
139
|
+
return [_ff21cview_{{SHORT}}(&(x[i]), copy=copy) for i in range(num_stuff)]
|
|
140
|
+
|
|
141
|
+
cdef inline _vff2kcview_{{SHORT}}(vector[Multi_critical_filtration[{{CTYPE}}]]& x, bool copy = False):
|
|
142
|
+
cdef Py_ssize_t num_stuff = x.size()
|
|
143
|
+
return [_ff2kcview_{{SHORT}}(&(x[i]), copy=copy) for i in range(num_stuff)]
|
|
144
|
+
|
|
145
|
+
{{endfor}}
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
{{for f in Filtrations}}
|
|
149
|
+
|
|
150
|
+
{{if f["multicritical"] or f["container"] == "Degree_rips_bifiltration"}}
|
|
151
|
+
cdef inline {{f['python']}}_2_python({{f['python']}}* x, bool copy=False, bool raw=False):
|
|
152
|
+
cdef Py_ssize_t k = dereference(x).num_generators()
|
|
153
|
+
|
|
154
|
+
{{if f["container"] == "Degree_rips_bifiltration"}}
|
|
155
|
+
|
|
156
|
+
cdef int num_parameters = 2
|
|
157
|
+
|
|
158
|
+
cdef {{f["c_value_type"]}}[:] data_view = <{{f["c_value_type"]}}[:k]>(&(dereference(x)(0,0)))
|
|
159
|
+
numpy_view = np.asarray(data_view, dtype={{f["py_value_type"]}})
|
|
160
|
+
if raw:
|
|
161
|
+
return numpy_view
|
|
162
|
+
return np.concatenate([numpy_view[:,None], np.arange(k, dtype={{f["py_value_type"]}})[:,None]], axis=1)
|
|
163
|
+
|
|
164
|
+
{{else}}
|
|
165
|
+
|
|
166
|
+
cdef Py_ssize_t p = dereference(x).num_parameters()
|
|
167
|
+
if dereference(x).is_finite():
|
|
168
|
+
duplicate = 0
|
|
169
|
+
else:
|
|
170
|
+
duplicate = p
|
|
171
|
+
# TODO : make it contiguous
|
|
172
|
+
return [_ff21cview2_{{f['short_value_type']}}(&(dereference(x)(i,0)), p, duplicate, copy=copy) for i in range(k)]
|
|
173
|
+
|
|
174
|
+
{{endif}}
|
|
175
|
+
|
|
176
|
+
{{else}}
|
|
177
|
+
# Assumes it's contiguous
|
|
178
|
+
cdef inline {{f['python']}}_2_python({{f['python']}}* x, bool copy=False, bool raw=False):
|
|
179
|
+
cdef Py_ssize_t num_parameters = dereference(x).num_parameters()
|
|
180
|
+
if not dereference(x).is_finite():
|
|
181
|
+
return np.full(shape=num_parameters, fill_value=dereference(x)(0,0))
|
|
182
|
+
cdef {{f['c_value_type']}}[:] x_view = <{{f['c_value_type']}}[:num_parameters]>(&(dereference(x)(0,0)))
|
|
183
|
+
return np.array(x_view) if copy else np.asarray(x_view)
|
|
184
|
+
{{endif}}
|
|
185
|
+
|
|
186
|
+
cdef inline vect_{{f['python']}}_2_python(vector[{{f['python']}}]& x, bool copy = False, bool raw=False):
|
|
187
|
+
cdef Py_ssize_t num_stuff = x.size()
|
|
188
|
+
return [{{f['python']}}_2_python(&(x[i]), copy=copy, raw=raw) for i in range(num_stuff)]
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
{{if f["multicritical"]}}
|
|
192
|
+
cdef inline {{f['python']}} python_2_{{f['python']}}({{f["c_value_type"]}}[:,:] filtrations) noexcept nogil:
|
|
193
|
+
cdef vector[{{CTYPE}}] f = vector[{{CTYPE}}](filtrations.shape[0] * filtrations.shape[1])
|
|
194
|
+
cdef int k = 0;
|
|
195
|
+
for i in range(filtrations.shape[0]):
|
|
196
|
+
for j in range(filtrations.shape[1]):
|
|
197
|
+
f[k] = filtrations[i,j]
|
|
198
|
+
k = k + 1
|
|
199
|
+
cdef {{f['python']}} out = {{f['python']}}(f.begin(), f.end(), filtrations.shape[1])
|
|
200
|
+
out.simplify()
|
|
201
|
+
return out
|
|
202
|
+
{{else}}
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
cdef inline {{f['python']}} python_2_{{f['python']}}({{f["c_value_type"]}}[:] filtration) noexcept nogil:
|
|
206
|
+
cdef int num_parameters = filtration.shape[0]
|
|
207
|
+
cdef {{f["python"]}} out = {{f['python']}}(num_parameters)
|
|
208
|
+
cdef {{f['c_value_type']}}* x
|
|
209
|
+
for i in range(num_parameters):
|
|
210
|
+
x = &out(0,i)
|
|
211
|
+
x[0] = filtration[i]
|
|
212
|
+
return out
|
|
213
|
+
{{endif}}
|
|
214
|
+
|
|
215
|
+
cdef inline vector[{{f['python']}}] python_2_vect_{{f['python']}}({{f["c_value_type"]}}[:,:] filtrations) noexcept nogil:
|
|
216
|
+
# cdef {{CTYPE}}[:,:] filtrations = np.asarray(filtrations_, dtype={{PYTYPE}})
|
|
217
|
+
cdef vector[{{f['python']}}] out
|
|
218
|
+
cdef vector[{{f["c_value_type"]}}] f = vector[{{f["c_value_type"]}}](filtrations.shape[1])
|
|
219
|
+
out.reserve(filtrations.shape[0])
|
|
220
|
+
for i in range(filtrations.shape[0]):
|
|
221
|
+
for j in range(filtrations.shape[1]):
|
|
222
|
+
f[j] = filtrations[i,j]
|
|
223
|
+
out.emplace_back(f)
|
|
224
|
+
return out
|
|
225
|
+
|
|
226
|
+
{{endfor}}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from .filtrations import (
|
|
2
|
+
CoreDelaunay,
|
|
3
|
+
Cubical,
|
|
4
|
+
DegreeRips,
|
|
5
|
+
DelaunayCodensity,
|
|
6
|
+
DelaunayLowerstar,
|
|
7
|
+
RipsCodensity,
|
|
8
|
+
RipsLowerstar,
|
|
9
|
+
RhomboidBifiltration,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"CoreDelaunay",
|
|
14
|
+
"Cubical",
|
|
15
|
+
"DegreeRips",
|
|
16
|
+
"DelaunayCodensity",
|
|
17
|
+
"DelaunayLowerstar",
|
|
18
|
+
"RipsCodensity",
|
|
19
|
+
"RipsLowerstar",
|
|
20
|
+
"RhomboidBifiltration",
|
|
21
|
+
]
|