TTK
Loading...
Searching...
No Matches
PersistenceDiagramDictionary.h
Go to the documentation of this file.
1
18
19#pragma once
20
22#include <array>
23#include <limits>
24
25#include <InitDictRandomly.h>
30#include <Wrapper.h>
31
32namespace ttk {
33 class PersistenceDiagramDictionary : virtual public Debug {
34
35 public:
37 this->setDebugMsgPrefix("PersistenceDiagramDictionary");
38 }
39
40 void execute(std::vector<ttk::DiagramType> &intermediateDiagrams,
41 const std::vector<ttk::DiagramType> &intermediateAtoms,
42 std::vector<ttk::DiagramType> &dictDiagrams,
43 std::vector<std::vector<double>> &vectorWeights,
44 const int seed,
45 const int numAtom,
46 std::vector<double> &lossTab,
47 std::vector<std::vector<double>> &allLosses,
48 double percent);
49
50 void method(const std::vector<ttk::DiagramType> &intermediateDiagrams,
51 std::vector<ttk::DiagramType> &dictDiagrams,
52 std::vector<std::vector<double>> &vectorWeights,
53 const int numAtom,
54 std::vector<double> &lossTab,
55 std::vector<std::vector<double>> &allLosses,
56 std::vector<std::vector<double>> &histoVectorWeights,
57 std::vector<ttk::DiagramType> &histoDictDiagrams,
58 bool preWeightOpt,
59 double percent,
60 bool doCompression);
61
69
70 inline void setUseDimReduct(bool data) {
71 DimReductMode_ = data;
72 }
73
74 inline void setUseProgApproach(bool data) {
75 ProgApproach_ = data;
76 }
77
78 inline void setDos(const bool min, const bool sad, const bool max) {
79 do_min_ = min;
80 do_sad_ = sad;
81 do_max_ = max;
82 }
83
84 protected:
86 double distVect(const std::vector<double> &vec1,
87 const std::vector<double> &vec2) const;
88
89 double
90 getMostPersistent(const std::vector<BidderDiagram> &bidder_diags) const;
91 double computeDistance(const BidderDiagram &D1,
92 const BidderDiagram &D2,
93 std::vector<ttk::MatchingType> &matching) const;
94
96 std::vector<double> &gradWeights,
97 std::vector<Matrix> &hessianList,
98 const std::vector<ttk::DiagramType> &dictDiagrams,
99 const std::vector<std::vector<ttk::MatchingType>> &matchingsAtoms,
100 const ttk::DiagramType &Barycenter,
101 const ttk::DiagramType &newData,
102 const std::vector<ttk::MatchingType> &matchingsMin,
103 const std::vector<ttk::MatchingType> &matchingsMax,
104 const std::vector<ttk::MatchingType> &matchingsSad,
105 const std::vector<size_t> &indexBaryMin,
106 const std::vector<size_t> &indexBaryMax,
107 const std::vector<size_t> &indexBarySad,
108 const std::vector<size_t> &indexDataMin,
109 const std::vector<size_t> &indexDataMax,
110 const std::vector<size_t> &indexDataSad,
111 const bool doOptimizeAtoms) const;
112
114 std::vector<Matrix> &gradsAtoms,
115 const std::vector<double> &weights,
116 const ttk::DiagramType &Barycenter,
117 const ttk::DiagramType &newData,
118 const std::vector<ttk::MatchingType> &matchingsMin,
119 const std::vector<ttk::MatchingType> &matchingsMax,
120 const std::vector<ttk::MatchingType> &matchingsSad,
121 const std::vector<size_t> &indexBaryMin,
122 const std::vector<size_t> &indexBaryMax,
123 const std::vector<size_t> &indexBarySad,
124 const std::vector<size_t> &indexDataMin,
125 const std::vector<size_t> &indexDataMax,
126 const std::vector<size_t> &indexDataSad,
127 std::vector<int> &checker,
128 std::vector<std::vector<std::array<double, 2>>> &pairToAddGradList,
129 ttk::DiagramType &infoToAdd,
130 bool doDimReduct) const;
131
133 const std::vector<std::vector<ttk::MatchingType>> &matchingsAtoms,
134 const ttk::DiagramType &Barycenter,
135 const ttk::DiagramType &newData,
136 const std::vector<ttk::MatchingType> &matchingsCritType,
137 const std::vector<size_t> &indexBaryCritType,
138 const std::vector<size_t> &indexDataCritType,
139 std::vector<std::vector<std::array<double, 2>>> &pairToAddGradList,
140 std::vector<std::array<double, 2>> &directions,
141 std::vector<std::array<double, 2>> &data_assigned,
142 std::vector<int> &tracker2,
143 const bool doOptimizeAtoms) const;
144
146 std::vector<Matrix> &gradsAtoms,
147 const ttk::DiagramType &Barycenter,
148 const std::vector<double> &weights,
149 const ttk::DiagramType &newData,
150 const std::vector<ttk::MatchingType> &matchingsCritType,
151 const std::vector<size_t> &indexBaryCritType,
152 const std::vector<size_t> &indexDataCritType,
153 std::vector<std::vector<std::array<double, 2>>> &pairToAddGradList,
154 std::vector<std::vector<double>> &directions,
155 std::vector<int> &checker,
156 std::vector<PersistencePair> &infoToAdd,
157 const bool doOptimizeAtoms) const;
158
159 void setBidderDiagrams(const size_t nInputs,
160 std::vector<ttk::DiagramType> &inputDiagrams,
161 std::vector<BidderDiagram> &bidder_diags) const;
162
163 int initDictionary(std::vector<ttk::DiagramType> &dictDiagrams,
164 const std::vector<ttk::DiagramType> &datas,
165 const std::vector<ttk::DiagramType> &inputAtoms,
166 const int &nbAtom,
167 bool &do_min_,
168 bool &do_sad_,
169 bool &do_max_,
170 int seed,
171 double &percent);
172
174 const std::vector<ttk::DiagramType> &intermediateDiagrams,
175 std::vector<ttk::DiagramType> &inputDiagramsMin,
176 std::vector<ttk::DiagramType> &inputDiagramsSad,
177 std::vector<ttk::DiagramType> &inputDiagramsMax,
178 std::vector<BidderDiagram> &bidderDiagramsMin,
179 std::vector<BidderDiagram> &bidderDiagramsSad,
180 std::vector<BidderDiagram> &bidderDiagramsMax,
181 std::vector<std::vector<size_t>> &originIndexMin,
182 std::vector<std::vector<size_t>> &originIndexSad,
183 std::vector<std::vector<size_t>> &originIndexMax,
184 bool insertOriginIndexMode) const;
185
187 std::vector<ttk::DiagramType> &barycentersList,
188 const size_t nDiag,
189 std::vector<ttk::DiagramType> &barycentersListMin,
190 std::vector<ttk::DiagramType> &barycentersListSad,
191 std::vector<ttk::DiagramType> &barycentersListMax,
192 std::vector<BidderDiagram> &bidderBarycentersListMin,
193 std::vector<BidderDiagram> &bidderBarycentersListSad,
194 std::vector<BidderDiagram> &bidderBarycentersListMax,
195 std::vector<std::vector<size_t>> &originIndexBarysMin,
196 std::vector<std::vector<size_t>> &originIndexBarysSad,
197 std::vector<std::vector<size_t>> &originIndexBarysMax,
198 std::vector<BidderDiagram> &bidderDiagramsMin,
199 std::vector<BidderDiagram> &bidderDiagramsMax,
200 std::vector<BidderDiagram> &bidderDiagramsSad,
201 std::vector<std::vector<ttk::MatchingType>> &matchingsDatasMin,
202 std::vector<std::vector<ttk::MatchingType>> &matchingsDatasMax,
203 std::vector<std::vector<ttk::MatchingType>> &matchingsDatasSad,
204 std::vector<double> &allLossesAtEpoch,
205 bool firstDistComputation) const;
206
207 void controlAtomsSize(
208 const std::vector<ttk::DiagramType> &intermediateDiagrams,
209 std::vector<ttk::DiagramType> &dictDiagrams) const;
210
211 double getMaxPers(const ttk::DiagramType &data);
212
214
216 bool do_min_{true}, do_sad_{true}, do_max_{true};
217
220
221 bool MaxEigenValue_{true};
223 bool OptimizeAtoms_{true};
224
226 bool ProgBarycenter_{false};
227
228 bool ProgApproach_{false};
229 bool StopCondition_{true};
230
231 bool CompressionMode_{false};
232 bool DimReductMode_{false};
233 };
234} // namespace ttk
void setDebugMsgPrefix(const std::string &prefix)
Definition Debug.h:364
void execute(std::vector< ttk::DiagramType > &intermediateDiagrams, const std::vector< ttk::DiagramType > &intermediateAtoms, std::vector< ttk::DiagramType > &dictDiagrams, std::vector< std::vector< double > > &vectorWeights, const int seed, const int numAtom, std::vector< double > &lossTab, std::vector< std::vector< double > > &allLosses, double percent)
void method(const std::vector< ttk::DiagramType > &intermediateDiagrams, std::vector< ttk::DiagramType > &dictDiagrams, std::vector< std::vector< double > > &vectorWeights, const int numAtom, std::vector< double > &lossTab, std::vector< std::vector< double > > &allLosses, std::vector< std::vector< double > > &histoVectorWeights, std::vector< ttk::DiagramType > &histoDictDiagrams, bool preWeightOpt, double percent, bool doCompression)
void computeDirectionsGradAtoms(std::vector< Matrix > &gradsAtoms, const ttk::DiagramType &Barycenter, const std::vector< double > &weights, const ttk::DiagramType &newData, const std::vector< ttk::MatchingType > &matchingsCritType, const std::vector< size_t > &indexBaryCritType, const std::vector< size_t > &indexDataCritType, std::vector< std::vector< std::array< double, 2 > > > &pairToAddGradList, std::vector< std::vector< double > > &directions, std::vector< int > &checker, std::vector< PersistencePair > &infoToAdd, const bool doOptimizeAtoms) const
void computeGradientAtoms(std::vector< Matrix > &gradsAtoms, const std::vector< double > &weights, const ttk::DiagramType &Barycenter, const ttk::DiagramType &newData, const std::vector< ttk::MatchingType > &matchingsMin, const std::vector< ttk::MatchingType > &matchingsMax, const std::vector< ttk::MatchingType > &matchingsSad, const std::vector< size_t > &indexBaryMin, const std::vector< size_t > &indexBaryMax, const std::vector< size_t > &indexBarySad, const std::vector< size_t > &indexDataMin, const std::vector< size_t > &indexDataMax, const std::vector< size_t > &indexDataSad, std::vector< int > &checker, std::vector< std::vector< std::array< double, 2 > > > &pairToAddGradList, ttk::DiagramType &infoToAdd, bool doDimReduct) const
void setDos(const bool min, const bool sad, const bool max)
int initDictionary(std::vector< ttk::DiagramType > &dictDiagrams, const std::vector< ttk::DiagramType > &datas, const std::vector< ttk::DiagramType > &inputAtoms, const int &nbAtom, bool &do_min_, bool &do_sad_, bool &do_max_, int seed, double &percent)
void computeDirectionsGradWeight(const std::vector< std::vector< ttk::MatchingType > > &matchingsAtoms, const ttk::DiagramType &Barycenter, const ttk::DiagramType &newData, const std::vector< ttk::MatchingType > &matchingsCritType, const std::vector< size_t > &indexBaryCritType, const std::vector< size_t > &indexDataCritType, std::vector< std::vector< std::array< double, 2 > > > &pairToAddGradList, std::vector< std::array< double, 2 > > &directions, std::vector< std::array< double, 2 > > &data_assigned, std::vector< int > &tracker2, const bool doOptimizeAtoms) const
double distVect(const std::vector< double > &vec1, const std::vector< double > &vec2) const
void controlAtomsSize(const std::vector< ttk::DiagramType > &intermediateDiagrams, std::vector< ttk::DiagramType > &dictDiagrams) const
double getMostPersistent(const std::vector< BidderDiagram > &bidder_diags) const
void computeAllDistances(std::vector< ttk::DiagramType > &barycentersList, const size_t nDiag, std::vector< ttk::DiagramType > &barycentersListMin, std::vector< ttk::DiagramType > &barycentersListSad, std::vector< ttk::DiagramType > &barycentersListMax, std::vector< BidderDiagram > &bidderBarycentersListMin, std::vector< BidderDiagram > &bidderBarycentersListSad, std::vector< BidderDiagram > &bidderBarycentersListMax, std::vector< std::vector< size_t > > &originIndexBarysMin, std::vector< std::vector< size_t > > &originIndexBarysSad, std::vector< std::vector< size_t > > &originIndexBarysMax, std::vector< BidderDiagram > &bidderDiagramsMin, std::vector< BidderDiagram > &bidderDiagramsMax, std::vector< BidderDiagram > &bidderDiagramsSad, std::vector< std::vector< ttk::MatchingType > > &matchingsDatasMin, std::vector< std::vector< ttk::MatchingType > > &matchingsDatasMax, std::vector< std::vector< ttk::MatchingType > > &matchingsDatasSad, std::vector< double > &allLossesAtEpoch, bool firstDistComputation) const
double getMaxPers(const ttk::DiagramType &data)
void setBidderDiagrams(const size_t nInputs, std::vector< ttk::DiagramType > &inputDiagrams, std::vector< BidderDiagram > &bidder_diags) const
double computeDistance(const BidderDiagram &D1, const BidderDiagram &D2, std::vector< ttk::MatchingType > &matching) const
void computeGradientWeights(std::vector< double > &gradWeights, std::vector< Matrix > &hessianList, const std::vector< ttk::DiagramType > &dictDiagrams, const std::vector< std::vector< ttk::MatchingType > > &matchingsAtoms, const ttk::DiagramType &Barycenter, const ttk::DiagramType &newData, const std::vector< ttk::MatchingType > &matchingsMin, const std::vector< ttk::MatchingType > &matchingsMax, const std::vector< ttk::MatchingType > &matchingsSad, const std::vector< size_t > &indexBaryMin, const std::vector< size_t > &indexBaryMax, const std::vector< size_t > &indexBarySad, const std::vector< size_t > &indexDataMin, const std::vector< size_t > &indexDataMax, const std::vector< size_t > &indexDataSad, const bool doOptimizeAtoms) const
void gettingBidderDiagrams(const std::vector< ttk::DiagramType > &intermediateDiagrams, std::vector< ttk::DiagramType > &inputDiagramsMin, std::vector< ttk::DiagramType > &inputDiagramsSad, std::vector< ttk::DiagramType > &inputDiagramsMax, std::vector< BidderDiagram > &bidderDiagramsMin, std::vector< BidderDiagram > &bidderDiagramsSad, std::vector< BidderDiagram > &bidderDiagramsMax, std::vector< std::vector< size_t > > &originIndexMin, std::vector< std::vector< size_t > > &originIndexSad, std::vector< std::vector< size_t > > &originIndexMax, bool insertOriginIndexMode) const
TTK base package defining the standard types.
std::vector< Bidder > BidderDiagram
std::vector< PersistencePair > DiagramType
Persistence Diagram type as a vector of Persistence pairs.