@ladybugmem/icebug 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (625) hide show
  1. package/binding.gyp +32 -10
  2. package/lib/index.js +23 -11
  3. package/package.json +9 -15
  4. package/prebuilds/darwin-arm64/icebug.node +0 -0
  5. package/{vendor/lib → prebuilds/darwin-arm64}/libnetworkit.dylib +0 -0
  6. package/prebuilds/linux-x64/icebug.node +0 -0
  7. package/prebuilds/linux-x64/libnetworkit.so +0 -0
  8. package/scripts/download-icebug.sh +92 -0
  9. package/build/Release/.deps/Release/icebug.node.d +0 -1
  10. package/build/Release/.deps/Release/obj.target/icebug/src/addon.o.d +0 -291
  11. package/build/Release/icebug.node +0 -0
  12. package/build/Release/obj.target/icebug/src/addon.o +0 -0
  13. package/vendor/include/networkit/GlobalState.hpp +0 -86
  14. package/vendor/include/networkit/Globals.hpp +0 -41
  15. package/vendor/include/networkit/algebraic/AlgebraicGlobals.hpp +0 -27
  16. package/vendor/include/networkit/algebraic/CSRGeneralMatrix.hpp +0 -1292
  17. package/vendor/include/networkit/algebraic/CSRMatrix.hpp +0 -11
  18. package/vendor/include/networkit/algebraic/DenseMatrix.hpp +0 -537
  19. package/vendor/include/networkit/algebraic/DynamicMatrix.hpp +0 -514
  20. package/vendor/include/networkit/algebraic/GraphBLAS.hpp +0 -323
  21. package/vendor/include/networkit/algebraic/MatrixTools.hpp +0 -156
  22. package/vendor/include/networkit/algebraic/Semirings.hpp +0 -171
  23. package/vendor/include/networkit/algebraic/SparseAccumulator.hpp +0 -111
  24. package/vendor/include/networkit/algebraic/Vector.hpp +0 -371
  25. package/vendor/include/networkit/algebraic/algorithms/AlgebraicBFS.hpp +0 -72
  26. package/vendor/include/networkit/algebraic/algorithms/AlgebraicBellmanFord.hpp +0 -88
  27. package/vendor/include/networkit/algebraic/algorithms/AlgebraicMatchingCoarsening.hpp +0 -96
  28. package/vendor/include/networkit/algebraic/algorithms/AlgebraicPageRank.hpp +0 -145
  29. package/vendor/include/networkit/algebraic/algorithms/AlgebraicSpanningEdgeCentrality.hpp +0 -122
  30. package/vendor/include/networkit/algebraic/algorithms/AlgebraicTriangleCounting.hpp +0 -76
  31. package/vendor/include/networkit/auxiliary/AlignedAllocator.hpp +0 -113
  32. package/vendor/include/networkit/auxiliary/ArrayTools.hpp +0 -85
  33. package/vendor/include/networkit/auxiliary/BloomFilter.hpp +0 -70
  34. package/vendor/include/networkit/auxiliary/BucketPQ.hpp +0 -142
  35. package/vendor/include/networkit/auxiliary/Enforce.hpp +0 -117
  36. package/vendor/include/networkit/auxiliary/FunctionTraits.hpp +0 -74
  37. package/vendor/include/networkit/auxiliary/HashUtils.hpp +0 -28
  38. package/vendor/include/networkit/auxiliary/IncrementalUniformRandomSelector.hpp +0 -52
  39. package/vendor/include/networkit/auxiliary/Log.hpp +0 -119
  40. package/vendor/include/networkit/auxiliary/MissingMath.hpp +0 -48
  41. package/vendor/include/networkit/auxiliary/Multiprecision.hpp +0 -17
  42. package/vendor/include/networkit/auxiliary/NumberParsing.hpp +0 -307
  43. package/vendor/include/networkit/auxiliary/NumericTools.hpp +0 -57
  44. package/vendor/include/networkit/auxiliary/Parallel.hpp +0 -56
  45. package/vendor/include/networkit/auxiliary/Parallelism.hpp +0 -33
  46. package/vendor/include/networkit/auxiliary/PrioQueue.hpp +0 -252
  47. package/vendor/include/networkit/auxiliary/Random.hpp +0 -122
  48. package/vendor/include/networkit/auxiliary/SetIntersector.hpp +0 -72
  49. package/vendor/include/networkit/auxiliary/SignalHandling.hpp +0 -39
  50. package/vendor/include/networkit/auxiliary/SortedList.hpp +0 -128
  51. package/vendor/include/networkit/auxiliary/SparseVector.hpp +0 -215
  52. package/vendor/include/networkit/auxiliary/SpinLock.hpp +0 -23
  53. package/vendor/include/networkit/auxiliary/StringBuilder.hpp +0 -322
  54. package/vendor/include/networkit/auxiliary/StringTools.hpp +0 -76
  55. package/vendor/include/networkit/auxiliary/TemplateUtils.hpp +0 -76
  56. package/vendor/include/networkit/auxiliary/Timer.hpp +0 -145
  57. package/vendor/include/networkit/auxiliary/VectorComparator.hpp +0 -32
  58. package/vendor/include/networkit/base/Algorithm.hpp +0 -41
  59. package/vendor/include/networkit/base/DynAlgorithm.hpp +0 -31
  60. package/vendor/include/networkit/centrality/ApproxBetweenness.hpp +0 -62
  61. package/vendor/include/networkit/centrality/ApproxCloseness.hpp +0 -136
  62. package/vendor/include/networkit/centrality/ApproxElectricalCloseness.hpp +0 -156
  63. package/vendor/include/networkit/centrality/ApproxGroupBetweenness.hpp +0 -124
  64. package/vendor/include/networkit/centrality/ApproxSpanningEdge.hpp +0 -84
  65. package/vendor/include/networkit/centrality/Betweenness.hpp +0 -47
  66. package/vendor/include/networkit/centrality/Centrality.hpp +0 -98
  67. package/vendor/include/networkit/centrality/Closeness.hpp +0 -107
  68. package/vendor/include/networkit/centrality/ComplexPaths.hpp +0 -113
  69. package/vendor/include/networkit/centrality/CoreDecomposition.hpp +0 -161
  70. package/vendor/include/networkit/centrality/DegreeCentrality.hpp +0 -55
  71. package/vendor/include/networkit/centrality/DynApproxBetweenness.hpp +0 -95
  72. package/vendor/include/networkit/centrality/DynBetweenness.hpp +0 -99
  73. package/vendor/include/networkit/centrality/DynBetweennessOneNode.hpp +0 -98
  74. package/vendor/include/networkit/centrality/DynKatzCentrality.hpp +0 -115
  75. package/vendor/include/networkit/centrality/DynTopHarmonicCloseness.hpp +0 -223
  76. package/vendor/include/networkit/centrality/EigenvectorCentrality.hpp +0 -41
  77. package/vendor/include/networkit/centrality/EstimateBetweenness.hpp +0 -51
  78. package/vendor/include/networkit/centrality/ForestCentrality.hpp +0 -112
  79. package/vendor/include/networkit/centrality/GedWalk.hpp +0 -225
  80. package/vendor/include/networkit/centrality/GroupCloseness.hpp +0 -115
  81. package/vendor/include/networkit/centrality/GroupClosenessGrowShrink.hpp +0 -78
  82. package/vendor/include/networkit/centrality/GroupClosenessLocalSearch.hpp +0 -77
  83. package/vendor/include/networkit/centrality/GroupClosenessLocalSwaps.hpp +0 -106
  84. package/vendor/include/networkit/centrality/GroupDegree.hpp +0 -155
  85. package/vendor/include/networkit/centrality/GroupHarmonicCloseness.hpp +0 -83
  86. package/vendor/include/networkit/centrality/HarmonicCloseness.hpp +0 -48
  87. package/vendor/include/networkit/centrality/KPathCentrality.hpp +0 -52
  88. package/vendor/include/networkit/centrality/KadabraBetweenness.hpp +0 -242
  89. package/vendor/include/networkit/centrality/KatzCentrality.hpp +0 -62
  90. package/vendor/include/networkit/centrality/LaplacianCentrality.hpp +0 -44
  91. package/vendor/include/networkit/centrality/LocalClusteringCoefficient.hpp +0 -60
  92. package/vendor/include/networkit/centrality/LocalPartitionCoverage.hpp +0 -43
  93. package/vendor/include/networkit/centrality/LocalSquareClusteringCoefficient.hpp +0 -42
  94. package/vendor/include/networkit/centrality/PageRank.hpp +0 -101
  95. package/vendor/include/networkit/centrality/PermanenceCentrality.hpp +0 -48
  96. package/vendor/include/networkit/centrality/Sfigality.hpp +0 -45
  97. package/vendor/include/networkit/centrality/SpanningEdgeCentrality.hpp +0 -86
  98. package/vendor/include/networkit/centrality/TopCloseness.hpp +0 -136
  99. package/vendor/include/networkit/centrality/TopHarmonicCloseness.hpp +0 -151
  100. package/vendor/include/networkit/clique/MaximalCliques.hpp +0 -83
  101. package/vendor/include/networkit/coarsening/ClusteringProjector.hpp +0 -59
  102. package/vendor/include/networkit/coarsening/CoarsenedGraphView.hpp +0 -156
  103. package/vendor/include/networkit/coarsening/GraphCoarsening.hpp +0 -57
  104. package/vendor/include/networkit/coarsening/MatchingCoarsening.hpp +0 -43
  105. package/vendor/include/networkit/coarsening/ParallelPartitionCoarsening.hpp +0 -33
  106. package/vendor/include/networkit/coarsening/ParallelPartitionCoarseningView.hpp +0 -62
  107. package/vendor/include/networkit/community/AdjustedRandMeasure.hpp +0 -31
  108. package/vendor/include/networkit/community/ClusteringGenerator.hpp +0 -75
  109. package/vendor/include/networkit/community/CommunityDetectionAlgorithm.hpp +0 -58
  110. package/vendor/include/networkit/community/Conductance.hpp +0 -32
  111. package/vendor/include/networkit/community/CoverF1Similarity.hpp +0 -53
  112. package/vendor/include/networkit/community/CoverHubDominance.hpp +0 -38
  113. package/vendor/include/networkit/community/Coverage.hpp +0 -25
  114. package/vendor/include/networkit/community/CutClustering.hpp +0 -62
  115. package/vendor/include/networkit/community/DissimilarityMeasure.hpp +0 -31
  116. package/vendor/include/networkit/community/DynamicNMIDistance.hpp +0 -44
  117. package/vendor/include/networkit/community/EdgeCut.hpp +0 -24
  118. package/vendor/include/networkit/community/GraphClusteringTools.hpp +0 -103
  119. package/vendor/include/networkit/community/GraphStructuralRandMeasure.hpp +0 -28
  120. package/vendor/include/networkit/community/HubDominance.hpp +0 -46
  121. package/vendor/include/networkit/community/IntrapartitionDensity.hpp +0 -44
  122. package/vendor/include/networkit/community/IsolatedInterpartitionConductance.hpp +0 -40
  123. package/vendor/include/networkit/community/IsolatedInterpartitionExpansion.hpp +0 -40
  124. package/vendor/include/networkit/community/JaccardMeasure.hpp +0 -25
  125. package/vendor/include/networkit/community/LFM.hpp +0 -49
  126. package/vendor/include/networkit/community/LPDegreeOrdered.hpp +0 -48
  127. package/vendor/include/networkit/community/LocalCommunityEvaluation.hpp +0 -100
  128. package/vendor/include/networkit/community/LocalCoverEvaluation.hpp +0 -31
  129. package/vendor/include/networkit/community/LocalPartitionEvaluation.hpp +0 -31
  130. package/vendor/include/networkit/community/LouvainMapEquation.hpp +0 -135
  131. package/vendor/include/networkit/community/Modularity.hpp +0 -54
  132. package/vendor/include/networkit/community/NMIDistance.hpp +0 -28
  133. package/vendor/include/networkit/community/NodeStructuralRandMeasure.hpp +0 -27
  134. package/vendor/include/networkit/community/OverlappingCommunityDetectionAlgorithm.hpp +0 -51
  135. package/vendor/include/networkit/community/OverlappingNMIDistance.hpp +0 -175
  136. package/vendor/include/networkit/community/PLM.hpp +0 -89
  137. package/vendor/include/networkit/community/PLP.hpp +0 -83
  138. package/vendor/include/networkit/community/ParallelAgglomerativeClusterer.hpp +0 -37
  139. package/vendor/include/networkit/community/ParallelLeiden.hpp +0 -96
  140. package/vendor/include/networkit/community/ParallelLeidenView.hpp +0 -138
  141. package/vendor/include/networkit/community/PartitionFragmentation.hpp +0 -30
  142. package/vendor/include/networkit/community/PartitionHubDominance.hpp +0 -37
  143. package/vendor/include/networkit/community/PartitionIntersection.hpp +0 -25
  144. package/vendor/include/networkit/community/QualityMeasure.hpp +0 -27
  145. package/vendor/include/networkit/community/SampledGraphStructuralRandMeasure.hpp +0 -40
  146. package/vendor/include/networkit/community/SampledNodeStructuralRandMeasure.hpp +0 -40
  147. package/vendor/include/networkit/community/StablePartitionNodes.hpp +0 -48
  148. package/vendor/include/networkit/components/BiconnectedComponents.hpp +0 -116
  149. package/vendor/include/networkit/components/ComponentDecomposition.hpp +0 -72
  150. package/vendor/include/networkit/components/ConnectedComponents.hpp +0 -55
  151. package/vendor/include/networkit/components/DynConnectedComponents.hpp +0 -71
  152. package/vendor/include/networkit/components/DynWeaklyConnectedComponents.hpp +0 -73
  153. package/vendor/include/networkit/components/ParallelConnectedComponents.hpp +0 -44
  154. package/vendor/include/networkit/components/RandomSpanningForest.hpp +0 -36
  155. package/vendor/include/networkit/components/StronglyConnectedComponents.hpp +0 -50
  156. package/vendor/include/networkit/components/WeaklyConnectedComponents.hpp +0 -59
  157. package/vendor/include/networkit/correlation/Assortativity.hpp +0 -64
  158. package/vendor/include/networkit/distance/APSP.hpp +0 -70
  159. package/vendor/include/networkit/distance/AStar.hpp +0 -68
  160. package/vendor/include/networkit/distance/AStarGeneral.hpp +0 -110
  161. package/vendor/include/networkit/distance/AdamicAdarDistance.hpp +0 -52
  162. package/vendor/include/networkit/distance/AffectedNodes.hpp +0 -130
  163. package/vendor/include/networkit/distance/AlgebraicDistance.hpp +0 -63
  164. package/vendor/include/networkit/distance/BFS.hpp +0 -43
  165. package/vendor/include/networkit/distance/BidirectionalBFS.hpp +0 -51
  166. package/vendor/include/networkit/distance/BidirectionalDijkstra.hpp +0 -69
  167. package/vendor/include/networkit/distance/CommuteTimeDistance.hpp +0 -89
  168. package/vendor/include/networkit/distance/Diameter.hpp +0 -97
  169. package/vendor/include/networkit/distance/Dijkstra.hpp +0 -50
  170. package/vendor/include/networkit/distance/DynAPSP.hpp +0 -67
  171. package/vendor/include/networkit/distance/DynBFS.hpp +0 -56
  172. package/vendor/include/networkit/distance/DynDijkstra.hpp +0 -57
  173. package/vendor/include/networkit/distance/DynPrunedLandmarkLabeling.hpp +0 -67
  174. package/vendor/include/networkit/distance/DynSSSP.hpp +0 -87
  175. package/vendor/include/networkit/distance/Eccentricity.hpp +0 -32
  176. package/vendor/include/networkit/distance/EffectiveDiameter.hpp +0 -47
  177. package/vendor/include/networkit/distance/EffectiveDiameterApproximation.hpp +0 -57
  178. package/vendor/include/networkit/distance/FloydWarshall.hpp +0 -93
  179. package/vendor/include/networkit/distance/GraphDistance.hpp +0 -49
  180. package/vendor/include/networkit/distance/HopPlotApproximation.hpp +0 -62
  181. package/vendor/include/networkit/distance/IncompleteDijkstra.hpp +0 -66
  182. package/vendor/include/networkit/distance/IncompleteSSSP.hpp +0 -41
  183. package/vendor/include/networkit/distance/JaccardDistance.hpp +0 -57
  184. package/vendor/include/networkit/distance/MultiTargetBFS.hpp +0 -32
  185. package/vendor/include/networkit/distance/MultiTargetDijkstra.hpp +0 -40
  186. package/vendor/include/networkit/distance/NeighborhoodFunction.hpp +0 -47
  187. package/vendor/include/networkit/distance/NeighborhoodFunctionApproximation.hpp +0 -56
  188. package/vendor/include/networkit/distance/NeighborhoodFunctionHeuristic.hpp +0 -56
  189. package/vendor/include/networkit/distance/NodeDistance.hpp +0 -54
  190. package/vendor/include/networkit/distance/PrunedLandmarkLabeling.hpp +0 -76
  191. package/vendor/include/networkit/distance/ReverseBFS.hpp +0 -46
  192. package/vendor/include/networkit/distance/SPSP.hpp +0 -143
  193. package/vendor/include/networkit/distance/SSSP.hpp +0 -216
  194. package/vendor/include/networkit/distance/STSP.hpp +0 -193
  195. package/vendor/include/networkit/distance/Volume.hpp +0 -66
  196. package/vendor/include/networkit/dynamics/DGSStreamParser.hpp +0 -40
  197. package/vendor/include/networkit/dynamics/DGSWriter.hpp +0 -30
  198. package/vendor/include/networkit/dynamics/GraphDifference.hpp +0 -110
  199. package/vendor/include/networkit/dynamics/GraphEvent.hpp +0 -55
  200. package/vendor/include/networkit/dynamics/GraphEventHandler.hpp +0 -39
  201. package/vendor/include/networkit/dynamics/GraphEventProxy.hpp +0 -55
  202. package/vendor/include/networkit/dynamics/GraphUpdater.hpp +0 -38
  203. package/vendor/include/networkit/edgescores/ChibaNishizekiQuadrangleEdgeScore.hpp +0 -26
  204. package/vendor/include/networkit/edgescores/ChibaNishizekiTriangleEdgeScore.hpp +0 -33
  205. package/vendor/include/networkit/edgescores/EdgeScore.hpp +0 -50
  206. package/vendor/include/networkit/edgescores/EdgeScoreAsWeight.hpp +0 -33
  207. package/vendor/include/networkit/edgescores/EdgeScoreBlender.hpp +0 -33
  208. package/vendor/include/networkit/edgescores/EdgeScoreLinearizer.hpp +0 -32
  209. package/vendor/include/networkit/edgescores/EdgeScoreNormalizer.hpp +0 -35
  210. package/vendor/include/networkit/edgescores/GeometricMeanScore.hpp +0 -29
  211. package/vendor/include/networkit/edgescores/PrefixJaccardScore.hpp +0 -23
  212. package/vendor/include/networkit/edgescores/TriangleEdgeScore.hpp +0 -39
  213. package/vendor/include/networkit/embedding/Node2Vec.hpp +0 -83
  214. package/vendor/include/networkit/flow/EdmondsKarp.hpp +0 -112
  215. package/vendor/include/networkit/generators/BarabasiAlbertGenerator.hpp +0 -87
  216. package/vendor/include/networkit/generators/ChungLuGenerator.hpp +0 -46
  217. package/vendor/include/networkit/generators/ChungLuGeneratorAlamEtAl.hpp +0 -63
  218. package/vendor/include/networkit/generators/ClusteredRandomGraphGenerator.hpp +0 -56
  219. package/vendor/include/networkit/generators/ConfigurationModel.hpp +0 -36
  220. package/vendor/include/networkit/generators/DorogovtsevMendesGenerator.hpp +0 -33
  221. package/vendor/include/networkit/generators/DynamicBarabasiAlbertGenerator.hpp +0 -33
  222. package/vendor/include/networkit/generators/DynamicDGSParser.hpp +0 -51
  223. package/vendor/include/networkit/generators/DynamicDorogovtsevMendesGenerator.hpp +0 -34
  224. package/vendor/include/networkit/generators/DynamicForestFireGenerator.hpp +0 -55
  225. package/vendor/include/networkit/generators/DynamicGraphGenerator.hpp +0 -40
  226. package/vendor/include/networkit/generators/DynamicGraphSource.hpp +0 -79
  227. package/vendor/include/networkit/generators/DynamicHyperbolicGenerator.hpp +0 -143
  228. package/vendor/include/networkit/generators/DynamicPathGenerator.hpp +0 -26
  229. package/vendor/include/networkit/generators/DynamicPubWebGenerator.hpp +0 -54
  230. package/vendor/include/networkit/generators/EdgeSwitchingMarkovChainGenerator.hpp +0 -65
  231. package/vendor/include/networkit/generators/ErdosRenyiEnumerator.hpp +0 -318
  232. package/vendor/include/networkit/generators/ErdosRenyiGenerator.hpp +0 -56
  233. package/vendor/include/networkit/generators/HavelHakimiGenerator.hpp +0 -48
  234. package/vendor/include/networkit/generators/HyperbolicGenerator.hpp +0 -236
  235. package/vendor/include/networkit/generators/LFRGenerator.hpp +0 -175
  236. package/vendor/include/networkit/generators/MocnikGenerator.hpp +0 -147
  237. package/vendor/include/networkit/generators/MocnikGeneratorBasic.hpp +0 -58
  238. package/vendor/include/networkit/generators/PowerlawDegreeSequence.hpp +0 -128
  239. package/vendor/include/networkit/generators/PubWebGenerator.hpp +0 -94
  240. package/vendor/include/networkit/generators/RegularRingLatticeGenerator.hpp +0 -37
  241. package/vendor/include/networkit/generators/RmatGenerator.hpp +0 -67
  242. package/vendor/include/networkit/generators/StaticDegreeSequenceGenerator.hpp +0 -42
  243. package/vendor/include/networkit/generators/StaticGraphGenerator.hpp +0 -30
  244. package/vendor/include/networkit/generators/StochasticBlockmodel.hpp +0 -41
  245. package/vendor/include/networkit/generators/WattsStrogatzGenerator.hpp +0 -43
  246. package/vendor/include/networkit/generators/quadtree/QuadNode.hpp +0 -857
  247. package/vendor/include/networkit/generators/quadtree/QuadNodeCartesianEuclid.hpp +0 -587
  248. package/vendor/include/networkit/generators/quadtree/QuadNodePolarEuclid.hpp +0 -726
  249. package/vendor/include/networkit/generators/quadtree/Quadtree.hpp +0 -232
  250. package/vendor/include/networkit/generators/quadtree/QuadtreeCartesianEuclid.hpp +0 -149
  251. package/vendor/include/networkit/generators/quadtree/QuadtreePolarEuclid.hpp +0 -143
  252. package/vendor/include/networkit/geometric/HyperbolicSpace.hpp +0 -248
  253. package/vendor/include/networkit/geometric/Point2DWithIndex.hpp +0 -145
  254. package/vendor/include/networkit/global/ClusteringCoefficient.hpp +0 -42
  255. package/vendor/include/networkit/global/GlobalClusteringCoefficient.hpp +0 -24
  256. package/vendor/include/networkit/graph/Attributes.hpp +0 -568
  257. package/vendor/include/networkit/graph/BFS.hpp +0 -111
  258. package/vendor/include/networkit/graph/DFS.hpp +0 -71
  259. package/vendor/include/networkit/graph/Dijkstra.hpp +0 -83
  260. package/vendor/include/networkit/graph/EdgeIterators.hpp +0 -171
  261. package/vendor/include/networkit/graph/Graph.hpp +0 -2083
  262. package/vendor/include/networkit/graph/GraphBuilder.hpp +0 -289
  263. package/vendor/include/networkit/graph/GraphR.hpp +0 -133
  264. package/vendor/include/networkit/graph/GraphTools.hpp +0 -589
  265. package/vendor/include/networkit/graph/GraphW.hpp +0 -1236
  266. package/vendor/include/networkit/graph/KruskalMSF.hpp +0 -50
  267. package/vendor/include/networkit/graph/NeighborIterators.hpp +0 -163
  268. package/vendor/include/networkit/graph/NodeIterators.hpp +0 -127
  269. package/vendor/include/networkit/graph/PrimMSF.hpp +0 -66
  270. package/vendor/include/networkit/graph/RandomMaximumSpanningForest.hpp +0 -133
  271. package/vendor/include/networkit/graph/SpanningForest.hpp +0 -41
  272. package/vendor/include/networkit/graph/TopologicalSort.hpp +0 -87
  273. package/vendor/include/networkit/graph/UnionMaximumSpanningForest.hpp +0 -126
  274. package/vendor/include/networkit/graph/test/GraphBuilderBenchmark.hpp +0 -68
  275. package/vendor/include/networkit/independentset/IndependentSetFinder.hpp +0 -44
  276. package/vendor/include/networkit/independentset/Luby.hpp +0 -27
  277. package/vendor/include/networkit/io/BinaryEdgeListPartitionReader.hpp +0 -45
  278. package/vendor/include/networkit/io/BinaryEdgeListPartitionWriter.hpp +0 -47
  279. package/vendor/include/networkit/io/BinaryPartitionReader.hpp +0 -41
  280. package/vendor/include/networkit/io/BinaryPartitionWriter.hpp +0 -44
  281. package/vendor/include/networkit/io/CoverReader.hpp +0 -27
  282. package/vendor/include/networkit/io/CoverWriter.hpp +0 -21
  283. package/vendor/include/networkit/io/DGSReader.hpp +0 -39
  284. package/vendor/include/networkit/io/DibapGraphReader.hpp +0 -43
  285. package/vendor/include/networkit/io/DotGraphWriter.hpp +0 -39
  286. package/vendor/include/networkit/io/DotPartitionWriter.hpp +0 -23
  287. package/vendor/include/networkit/io/DynamicGraphReader.hpp +0 -29
  288. package/vendor/include/networkit/io/EdgeListCoverReader.hpp +0 -35
  289. package/vendor/include/networkit/io/EdgeListPartitionReader.hpp +0 -43
  290. package/vendor/include/networkit/io/EdgeListReader.hpp +0 -61
  291. package/vendor/include/networkit/io/EdgeListWriter.hpp +0 -48
  292. package/vendor/include/networkit/io/GMLGraphReader.hpp +0 -33
  293. package/vendor/include/networkit/io/GMLGraphWriter.hpp +0 -33
  294. package/vendor/include/networkit/io/GraphIO.hpp +0 -52
  295. package/vendor/include/networkit/io/GraphReader.hpp +0 -40
  296. package/vendor/include/networkit/io/GraphToolBinaryReader.hpp +0 -71
  297. package/vendor/include/networkit/io/GraphToolBinaryWriter.hpp +0 -61
  298. package/vendor/include/networkit/io/GraphWriter.hpp +0 -27
  299. package/vendor/include/networkit/io/KONECTGraphReader.hpp +0 -44
  300. package/vendor/include/networkit/io/LineFileReader.hpp +0 -42
  301. package/vendor/include/networkit/io/METISGraphReader.hpp +0 -36
  302. package/vendor/include/networkit/io/METISGraphWriter.hpp +0 -29
  303. package/vendor/include/networkit/io/METISParser.hpp +0 -63
  304. package/vendor/include/networkit/io/MTXGraphReader.hpp +0 -31
  305. package/vendor/include/networkit/io/MTXParser.hpp +0 -87
  306. package/vendor/include/networkit/io/MatrixMarketReader.hpp +0 -33
  307. package/vendor/include/networkit/io/MatrixReader.hpp +0 -33
  308. package/vendor/include/networkit/io/MemoryMappedFile.hpp +0 -80
  309. package/vendor/include/networkit/io/NetworkitBinaryGraph.hpp +0 -144
  310. package/vendor/include/networkit/io/NetworkitBinaryReader.hpp +0 -50
  311. package/vendor/include/networkit/io/NetworkitBinaryWriter.hpp +0 -71
  312. package/vendor/include/networkit/io/PartitionReader.hpp +0 -34
  313. package/vendor/include/networkit/io/PartitionWriter.hpp +0 -31
  314. package/vendor/include/networkit/io/RBGraphReader.hpp +0 -37
  315. package/vendor/include/networkit/io/RBMatrixReader.hpp +0 -49
  316. package/vendor/include/networkit/io/RasterReader.hpp +0 -40
  317. package/vendor/include/networkit/io/SNAPEdgeListPartitionReader.hpp +0 -28
  318. package/vendor/include/networkit/io/SNAPGraphReader.hpp +0 -53
  319. package/vendor/include/networkit/io/SNAPGraphWriter.hpp +0 -53
  320. package/vendor/include/networkit/io/ThrillGraphBinaryReader.hpp +0 -44
  321. package/vendor/include/networkit/io/ThrillGraphBinaryWriter.hpp +0 -27
  322. package/vendor/include/networkit/layout/LayoutAlgorithm.hpp +0 -39
  323. package/vendor/include/networkit/linkprediction/AdamicAdarIndex.hpp +0 -37
  324. package/vendor/include/networkit/linkprediction/AdjustedRandIndex.hpp +0 -36
  325. package/vendor/include/networkit/linkprediction/AlgebraicDistanceIndex.hpp +0 -70
  326. package/vendor/include/networkit/linkprediction/CommonNeighborsIndex.hpp +0 -39
  327. package/vendor/include/networkit/linkprediction/EvaluationMetric.hpp +0 -135
  328. package/vendor/include/networkit/linkprediction/JaccardIndex.hpp +0 -44
  329. package/vendor/include/networkit/linkprediction/KatzIndex.hpp +0 -84
  330. package/vendor/include/networkit/linkprediction/LinkPredictor.hpp +0 -98
  331. package/vendor/include/networkit/linkprediction/LinkThresholder.hpp +0 -56
  332. package/vendor/include/networkit/linkprediction/MissingLinksFinder.hpp +0 -60
  333. package/vendor/include/networkit/linkprediction/NeighborhoodDistanceIndex.hpp +0 -42
  334. package/vendor/include/networkit/linkprediction/NeighborhoodUtility.hpp +0 -54
  335. package/vendor/include/networkit/linkprediction/NeighborsMeasureIndex.hpp +0 -48
  336. package/vendor/include/networkit/linkprediction/PrecisionRecallMetric.hpp +0 -40
  337. package/vendor/include/networkit/linkprediction/PredictionsSorter.hpp +0 -66
  338. package/vendor/include/networkit/linkprediction/PreferentialAttachmentIndex.hpp +0 -37
  339. package/vendor/include/networkit/linkprediction/ROCMetric.hpp +0 -39
  340. package/vendor/include/networkit/linkprediction/RandomLinkSampler.hpp +0 -47
  341. package/vendor/include/networkit/linkprediction/ResourceAllocationIndex.hpp +0 -38
  342. package/vendor/include/networkit/linkprediction/SameCommunityIndex.hpp +0 -50
  343. package/vendor/include/networkit/linkprediction/TotalNeighborsIndex.hpp +0 -39
  344. package/vendor/include/networkit/linkprediction/UDegreeIndex.hpp +0 -35
  345. package/vendor/include/networkit/linkprediction/VDegreeIndex.hpp +0 -35
  346. package/vendor/include/networkit/matching/BMatcher.hpp +0 -52
  347. package/vendor/include/networkit/matching/BMatching.hpp +0 -115
  348. package/vendor/include/networkit/matching/BSuitorMatcher.hpp +0 -170
  349. package/vendor/include/networkit/matching/DynamicBSuitorMatcher.hpp +0 -78
  350. package/vendor/include/networkit/matching/LocalMaxMatcher.hpp +0 -35
  351. package/vendor/include/networkit/matching/Matcher.hpp +0 -55
  352. package/vendor/include/networkit/matching/Matching.hpp +0 -111
  353. package/vendor/include/networkit/matching/PathGrowingMatcher.hpp +0 -46
  354. package/vendor/include/networkit/matching/SuitorMatcher.hpp +0 -62
  355. package/vendor/include/networkit/numerics/ConjugateGradient.hpp +0 -163
  356. package/vendor/include/networkit/numerics/GaussSeidelRelaxation.hpp +0 -99
  357. package/vendor/include/networkit/numerics/LAMG/LAMGSettings.hpp +0 -70
  358. package/vendor/include/networkit/numerics/LAMG/Lamg.hpp +0 -460
  359. package/vendor/include/networkit/numerics/LAMG/Level/EliminationStage.hpp +0 -47
  360. package/vendor/include/networkit/numerics/LAMG/Level/Level.hpp +0 -56
  361. package/vendor/include/networkit/numerics/LAMG/Level/LevelAggregation.hpp +0 -52
  362. package/vendor/include/networkit/numerics/LAMG/Level/LevelElimination.hpp +0 -133
  363. package/vendor/include/networkit/numerics/LAMG/Level/LevelFinest.hpp +0 -28
  364. package/vendor/include/networkit/numerics/LAMG/LevelHierarchy.hpp +0 -165
  365. package/vendor/include/networkit/numerics/LAMG/MultiLevelSetup.hpp +0 -1090
  366. package/vendor/include/networkit/numerics/LAMG/SolverLamg.hpp +0 -316
  367. package/vendor/include/networkit/numerics/LinearSolver.hpp +0 -151
  368. package/vendor/include/networkit/numerics/Preconditioner/DiagonalPreconditioner.hpp +0 -61
  369. package/vendor/include/networkit/numerics/Preconditioner/IdentityPreconditioner.hpp +0 -36
  370. package/vendor/include/networkit/numerics/Smoother.hpp +0 -37
  371. package/vendor/include/networkit/overlap/HashingOverlapper.hpp +0 -28
  372. package/vendor/include/networkit/overlap/Overlapper.hpp +0 -27
  373. package/vendor/include/networkit/planarity/LeftRightPlanarityCheck.hpp +0 -113
  374. package/vendor/include/networkit/randomization/Curveball.hpp +0 -49
  375. package/vendor/include/networkit/randomization/CurveballGlobalTradeGenerator.hpp +0 -39
  376. package/vendor/include/networkit/randomization/CurveballUniformTradeGenerator.hpp +0 -39
  377. package/vendor/include/networkit/randomization/DegreePreservingShuffle.hpp +0 -82
  378. package/vendor/include/networkit/randomization/EdgeSwitching.hpp +0 -157
  379. package/vendor/include/networkit/randomization/GlobalCurveball.hpp +0 -69
  380. package/vendor/include/networkit/randomization/GlobalTradeSequence.hpp +0 -303
  381. package/vendor/include/networkit/reachability/AllSimplePaths.hpp +0 -122
  382. package/vendor/include/networkit/reachability/ReachableNodes.hpp +0 -83
  383. package/vendor/include/networkit/scd/ApproximatePageRank.hpp +0 -51
  384. package/vendor/include/networkit/scd/CliqueDetect.hpp +0 -55
  385. package/vendor/include/networkit/scd/CombinedSCD.hpp +0 -51
  386. package/vendor/include/networkit/scd/GCE.hpp +0 -42
  387. package/vendor/include/networkit/scd/LFMLocal.hpp +0 -54
  388. package/vendor/include/networkit/scd/LocalT.hpp +0 -40
  389. package/vendor/include/networkit/scd/LocalTightnessExpansion.hpp +0 -46
  390. package/vendor/include/networkit/scd/PageRankNibble.hpp +0 -55
  391. package/vendor/include/networkit/scd/RandomBFS.hpp +0 -33
  392. package/vendor/include/networkit/scd/SCDGroundTruthComparison.hpp +0 -121
  393. package/vendor/include/networkit/scd/SelectiveCommunityDetector.hpp +0 -76
  394. package/vendor/include/networkit/scd/SetConductance.hpp +0 -47
  395. package/vendor/include/networkit/scd/TCE.hpp +0 -41
  396. package/vendor/include/networkit/scd/TwoPhaseL.hpp +0 -40
  397. package/vendor/include/networkit/scoring/EdgeScoring.hpp +0 -44
  398. package/vendor/include/networkit/scoring/ModularityScoring.hpp +0 -79
  399. package/vendor/include/networkit/simulation/EpidemicSimulationSEIR.hpp +0 -59
  400. package/vendor/include/networkit/sparsification/ChanceCorrectedTriangleScore.hpp +0 -28
  401. package/vendor/include/networkit/sparsification/ForestFireScore.hpp +0 -34
  402. package/vendor/include/networkit/sparsification/GlobalThresholdFilter.hpp +0 -40
  403. package/vendor/include/networkit/sparsification/LocalDegreeScore.hpp +0 -30
  404. package/vendor/include/networkit/sparsification/LocalFilterScore.hpp +0 -124
  405. package/vendor/include/networkit/sparsification/LocalSimilarityScore.hpp +0 -63
  406. package/vendor/include/networkit/sparsification/MultiscaleScore.hpp +0 -38
  407. package/vendor/include/networkit/sparsification/RandomEdgeScore.hpp +0 -33
  408. package/vendor/include/networkit/sparsification/RandomNodeEdgeScore.hpp +0 -29
  409. package/vendor/include/networkit/sparsification/SCANStructuralSimilarityScore.hpp +0 -23
  410. package/vendor/include/networkit/sparsification/SimmelianOverlapScore.hpp +0 -35
  411. package/vendor/include/networkit/sparsification/SimmelianScore.hpp +0 -92
  412. package/vendor/include/networkit/sparsification/Sparsifiers.hpp +0 -166
  413. package/vendor/include/networkit/structures/Cover.hpp +0 -248
  414. package/vendor/include/networkit/structures/LocalCommunity.hpp +0 -363
  415. package/vendor/include/networkit/structures/Partition.hpp +0 -335
  416. package/vendor/include/networkit/structures/UnionFind.hpp +0 -66
  417. package/vendor/include/networkit/viz/GraphLayoutAlgorithm.hpp +0 -157
  418. package/vendor/include/networkit/viz/MaxentStress.hpp +0 -346
  419. package/vendor/include/networkit/viz/Octree.hpp +0 -428
  420. package/vendor/include/networkit/viz/PivotMDS.hpp +0 -63
  421. package/vendor/include/networkit/viz/Point.hpp +0 -415
  422. package/vendor/include/networkit/viz/PostscriptWriter.hpp +0 -78
  423. package/vendor/include/tlx/algorithm/exclusive_scan.hpp +0 -56
  424. package/vendor/include/tlx/algorithm/is_sorted_cmp.hpp +0 -56
  425. package/vendor/include/tlx/algorithm/merge_advance.hpp +0 -177
  426. package/vendor/include/tlx/algorithm/merge_combine.hpp +0 -76
  427. package/vendor/include/tlx/algorithm/multisequence_partition.hpp +0 -346
  428. package/vendor/include/tlx/algorithm/multisequence_selection.hpp +0 -351
  429. package/vendor/include/tlx/algorithm/multiway_merge.hpp +0 -1385
  430. package/vendor/include/tlx/algorithm/multiway_merge_splitting.hpp +0 -257
  431. package/vendor/include/tlx/algorithm/parallel_multiway_merge.hpp +0 -408
  432. package/vendor/include/tlx/algorithm/random_bipartition_shuffle.hpp +0 -116
  433. package/vendor/include/tlx/algorithm.hpp +0 -36
  434. package/vendor/include/tlx/allocator_base.hpp +0 -100
  435. package/vendor/include/tlx/backtrace.hpp +0 -54
  436. package/vendor/include/tlx/cmdline_parser.hpp +0 -498
  437. package/vendor/include/tlx/container/btree.hpp +0 -3977
  438. package/vendor/include/tlx/container/btree_map.hpp +0 -634
  439. package/vendor/include/tlx/container/btree_multimap.hpp +0 -627
  440. package/vendor/include/tlx/container/btree_multiset.hpp +0 -612
  441. package/vendor/include/tlx/container/btree_set.hpp +0 -612
  442. package/vendor/include/tlx/container/d_ary_addressable_int_heap.hpp +0 -416
  443. package/vendor/include/tlx/container/d_ary_heap.hpp +0 -311
  444. package/vendor/include/tlx/container/loser_tree.hpp +0 -1009
  445. package/vendor/include/tlx/container/lru_cache.hpp +0 -319
  446. package/vendor/include/tlx/container/radix_heap.hpp +0 -735
  447. package/vendor/include/tlx/container/ring_buffer.hpp +0 -428
  448. package/vendor/include/tlx/container/simple_vector.hpp +0 -304
  449. package/vendor/include/tlx/container/splay_tree.hpp +0 -399
  450. package/vendor/include/tlx/container/string_view.hpp +0 -805
  451. package/vendor/include/tlx/container.hpp +0 -40
  452. package/vendor/include/tlx/counting_ptr.hpp +0 -522
  453. package/vendor/include/tlx/define/attribute_always_inline.hpp +0 -34
  454. package/vendor/include/tlx/define/attribute_fallthrough.hpp +0 -36
  455. package/vendor/include/tlx/define/attribute_format_printf.hpp +0 -34
  456. package/vendor/include/tlx/define/attribute_packed.hpp +0 -34
  457. package/vendor/include/tlx/define/attribute_warn_unused_result.hpp +0 -34
  458. package/vendor/include/tlx/define/constexpr.hpp +0 -31
  459. package/vendor/include/tlx/define/deprecated.hpp +0 -39
  460. package/vendor/include/tlx/define/endian.hpp +0 -49
  461. package/vendor/include/tlx/define/likely.hpp +0 -33
  462. package/vendor/include/tlx/define/visibility_hidden.hpp +0 -34
  463. package/vendor/include/tlx/define.hpp +0 -36
  464. package/vendor/include/tlx/delegate.hpp +0 -524
  465. package/vendor/include/tlx/die/core.hpp +0 -311
  466. package/vendor/include/tlx/die.hpp +0 -106
  467. package/vendor/include/tlx/digest/md5.hpp +0 -81
  468. package/vendor/include/tlx/digest/sha1.hpp +0 -81
  469. package/vendor/include/tlx/digest/sha256.hpp +0 -81
  470. package/vendor/include/tlx/digest/sha512.hpp +0 -81
  471. package/vendor/include/tlx/digest.hpp +0 -30
  472. package/vendor/include/tlx/logger/all.hpp +0 -33
  473. package/vendor/include/tlx/logger/array.hpp +0 -43
  474. package/vendor/include/tlx/logger/core.hpp +0 -287
  475. package/vendor/include/tlx/logger/deque.hpp +0 -42
  476. package/vendor/include/tlx/logger/map.hpp +0 -65
  477. package/vendor/include/tlx/logger/set.hpp +0 -60
  478. package/vendor/include/tlx/logger/tuple.hpp +0 -66
  479. package/vendor/include/tlx/logger/unordered_map.hpp +0 -68
  480. package/vendor/include/tlx/logger/unordered_set.hpp +0 -64
  481. package/vendor/include/tlx/logger/wrap_unprintable.hpp +0 -75
  482. package/vendor/include/tlx/logger.hpp +0 -44
  483. package/vendor/include/tlx/math/abs_diff.hpp +0 -35
  484. package/vendor/include/tlx/math/aggregate.hpp +0 -231
  485. package/vendor/include/tlx/math/aggregate_min_max.hpp +0 -116
  486. package/vendor/include/tlx/math/bswap.hpp +0 -148
  487. package/vendor/include/tlx/math/bswap_be.hpp +0 -79
  488. package/vendor/include/tlx/math/bswap_le.hpp +0 -79
  489. package/vendor/include/tlx/math/clz.hpp +0 -174
  490. package/vendor/include/tlx/math/ctz.hpp +0 -174
  491. package/vendor/include/tlx/math/div_ceil.hpp +0 -36
  492. package/vendor/include/tlx/math/ffs.hpp +0 -123
  493. package/vendor/include/tlx/math/integer_log2.hpp +0 -189
  494. package/vendor/include/tlx/math/is_power_of_two.hpp +0 -74
  495. package/vendor/include/tlx/math/polynomial_regression.hpp +0 -243
  496. package/vendor/include/tlx/math/popcount.hpp +0 -173
  497. package/vendor/include/tlx/math/power_to_the.hpp +0 -44
  498. package/vendor/include/tlx/math/rol.hpp +0 -112
  499. package/vendor/include/tlx/math/ror.hpp +0 -112
  500. package/vendor/include/tlx/math/round_to_power_of_two.hpp +0 -121
  501. package/vendor/include/tlx/math/round_up.hpp +0 -36
  502. package/vendor/include/tlx/math/sgn.hpp +0 -38
  503. package/vendor/include/tlx/math.hpp +0 -46
  504. package/vendor/include/tlx/meta/apply_tuple.hpp +0 -55
  505. package/vendor/include/tlx/meta/call_for_range.hpp +0 -78
  506. package/vendor/include/tlx/meta/call_foreach.hpp +0 -60
  507. package/vendor/include/tlx/meta/call_foreach_tuple.hpp +0 -60
  508. package/vendor/include/tlx/meta/call_foreach_tuple_with_index.hpp +0 -61
  509. package/vendor/include/tlx/meta/call_foreach_with_index.hpp +0 -64
  510. package/vendor/include/tlx/meta/enable_if.hpp +0 -37
  511. package/vendor/include/tlx/meta/fold_left.hpp +0 -63
  512. package/vendor/include/tlx/meta/fold_left_tuple.hpp +0 -60
  513. package/vendor/include/tlx/meta/fold_right.hpp +0 -63
  514. package/vendor/include/tlx/meta/fold_right_tuple.hpp +0 -60
  515. package/vendor/include/tlx/meta/function_chain.hpp +0 -197
  516. package/vendor/include/tlx/meta/function_stack.hpp +0 -189
  517. package/vendor/include/tlx/meta/has_member.hpp +0 -80
  518. package/vendor/include/tlx/meta/has_method.hpp +0 -117
  519. package/vendor/include/tlx/meta/index_sequence.hpp +0 -66
  520. package/vendor/include/tlx/meta/is_std_array.hpp +0 -40
  521. package/vendor/include/tlx/meta/is_std_pair.hpp +0 -39
  522. package/vendor/include/tlx/meta/is_std_tuple.hpp +0 -39
  523. package/vendor/include/tlx/meta/is_std_vector.hpp +0 -39
  524. package/vendor/include/tlx/meta/log2.hpp +0 -101
  525. package/vendor/include/tlx/meta/no_operation.hpp +0 -55
  526. package/vendor/include/tlx/meta/static_index.hpp +0 -42
  527. package/vendor/include/tlx/meta/vexpand.hpp +0 -34
  528. package/vendor/include/tlx/meta/vmap_for_range.hpp +0 -84
  529. package/vendor/include/tlx/meta/vmap_foreach.hpp +0 -63
  530. package/vendor/include/tlx/meta/vmap_foreach_tuple.hpp +0 -59
  531. package/vendor/include/tlx/meta/vmap_foreach_tuple_with_index.hpp +0 -62
  532. package/vendor/include/tlx/meta/vmap_foreach_with_index.hpp +0 -70
  533. package/vendor/include/tlx/meta.hpp +0 -55
  534. package/vendor/include/tlx/multi_timer.hpp +0 -148
  535. package/vendor/include/tlx/port/setenv.hpp +0 -31
  536. package/vendor/include/tlx/port.hpp +0 -27
  537. package/vendor/include/tlx/semaphore.hpp +0 -119
  538. package/vendor/include/tlx/simple_vector.hpp +0 -20
  539. package/vendor/include/tlx/siphash.hpp +0 -282
  540. package/vendor/include/tlx/sort/networks/best.hpp +0 -611
  541. package/vendor/include/tlx/sort/networks/bose_nelson.hpp +0 -412
  542. package/vendor/include/tlx/sort/networks/bose_nelson_parameter.hpp +0 -507
  543. package/vendor/include/tlx/sort/networks/cswap.hpp +0 -60
  544. package/vendor/include/tlx/sort/parallel_mergesort.hpp +0 -398
  545. package/vendor/include/tlx/sort/strings/insertion_sort.hpp +0 -232
  546. package/vendor/include/tlx/sort/strings/multikey_quicksort.hpp +0 -185
  547. package/vendor/include/tlx/sort/strings/parallel_sample_sort.hpp +0 -1647
  548. package/vendor/include/tlx/sort/strings/radix_sort.hpp +0 -934
  549. package/vendor/include/tlx/sort/strings/sample_sort_tools.hpp +0 -756
  550. package/vendor/include/tlx/sort/strings/string_ptr.hpp +0 -426
  551. package/vendor/include/tlx/sort/strings/string_set.hpp +0 -800
  552. package/vendor/include/tlx/sort/strings.hpp +0 -329
  553. package/vendor/include/tlx/sort/strings_parallel.hpp +0 -325
  554. package/vendor/include/tlx/sort.hpp +0 -29
  555. package/vendor/include/tlx/stack_allocator.hpp +0 -226
  556. package/vendor/include/tlx/string/appendline.hpp +0 -35
  557. package/vendor/include/tlx/string/base64.hpp +0 -87
  558. package/vendor/include/tlx/string/bitdump.hpp +0 -139
  559. package/vendor/include/tlx/string/compare_icase.hpp +0 -42
  560. package/vendor/include/tlx/string/contains.hpp +0 -36
  561. package/vendor/include/tlx/string/contains_word.hpp +0 -42
  562. package/vendor/include/tlx/string/ends_with.hpp +0 -79
  563. package/vendor/include/tlx/string/equal_icase.hpp +0 -42
  564. package/vendor/include/tlx/string/erase_all.hpp +0 -70
  565. package/vendor/include/tlx/string/escape_html.hpp +0 -34
  566. package/vendor/include/tlx/string/escape_uri.hpp +0 -34
  567. package/vendor/include/tlx/string/expand_environment_variables.hpp +0 -49
  568. package/vendor/include/tlx/string/extract_between.hpp +0 -40
  569. package/vendor/include/tlx/string/format_iec_units.hpp +0 -32
  570. package/vendor/include/tlx/string/format_si_iec_units.hpp +0 -19
  571. package/vendor/include/tlx/string/format_si_units.hpp +0 -32
  572. package/vendor/include/tlx/string/hash_djb2.hpp +0 -87
  573. package/vendor/include/tlx/string/hash_sdbm.hpp +0 -86
  574. package/vendor/include/tlx/string/hexdump.hpp +0 -154
  575. package/vendor/include/tlx/string/index_of.hpp +0 -56
  576. package/vendor/include/tlx/string/join.hpp +0 -65
  577. package/vendor/include/tlx/string/join_generic.hpp +0 -89
  578. package/vendor/include/tlx/string/join_quoted.hpp +0 -46
  579. package/vendor/include/tlx/string/less_icase.hpp +0 -64
  580. package/vendor/include/tlx/string/levenshtein.hpp +0 -193
  581. package/vendor/include/tlx/string/pad.hpp +0 -39
  582. package/vendor/include/tlx/string/parse_si_iec_units.hpp +0 -46
  583. package/vendor/include/tlx/string/parse_uri.hpp +0 -66
  584. package/vendor/include/tlx/string/parse_uri_form_data.hpp +0 -136
  585. package/vendor/include/tlx/string/replace.hpp +0 -141
  586. package/vendor/include/tlx/string/split.hpp +0 -170
  587. package/vendor/include/tlx/string/split_quoted.hpp +0 -49
  588. package/vendor/include/tlx/string/split_view.hpp +0 -218
  589. package/vendor/include/tlx/string/split_words.hpp +0 -53
  590. package/vendor/include/tlx/string/ssprintf.hpp +0 -45
  591. package/vendor/include/tlx/string/ssprintf_generic.hpp +0 -95
  592. package/vendor/include/tlx/string/starts_with.hpp +0 -44
  593. package/vendor/include/tlx/string/to_lower.hpp +0 -47
  594. package/vendor/include/tlx/string/to_upper.hpp +0 -47
  595. package/vendor/include/tlx/string/trim.hpp +0 -298
  596. package/vendor/include/tlx/string/union_words.hpp +0 -33
  597. package/vendor/include/tlx/string/word_wrap.hpp +0 -35
  598. package/vendor/include/tlx/string.hpp +0 -68
  599. package/vendor/include/tlx/thread_barrier_mutex.hpp +0 -109
  600. package/vendor/include/tlx/thread_barrier_spin.hpp +0 -127
  601. package/vendor/include/tlx/thread_pool.hpp +0 -151
  602. package/vendor/include/tlx/timestamp.hpp +0 -23
  603. package/vendor/include/tlx/unused.hpp +0 -28
  604. package/vendor/include/tlx/vector_free.hpp +0 -30
  605. package/vendor/include/tlx/version.hpp +0 -49
  606. package/vendor/include/ttmath/ttmath.h +0 -2881
  607. package/vendor/include/ttmath/ttmathbig.h +0 -6111
  608. package/vendor/include/ttmath/ttmathdec.h +0 -419
  609. package/vendor/include/ttmath/ttmathint.h +0 -1923
  610. package/vendor/include/ttmath/ttmathmisc.h +0 -250
  611. package/vendor/include/ttmath/ttmathobjects.h +0 -812
  612. package/vendor/include/ttmath/ttmathparser.h +0 -2791
  613. package/vendor/include/ttmath/ttmaththreads.h +0 -252
  614. package/vendor/include/ttmath/ttmathtypes.h +0 -707
  615. package/vendor/include/ttmath/ttmathuint.h +0 -4190
  616. package/vendor/include/ttmath/ttmathuint_noasm.h +0 -1038
  617. package/vendor/include/ttmath/ttmathuint_x86.h +0 -1620
  618. package/vendor/include/ttmath/ttmathuint_x86_64.h +0 -1177
  619. package/vendor/lib/cmake/tlx/tlx-config.cmake +0 -51
  620. package/vendor/lib/cmake/tlx/tlx-targets-release.cmake +0 -19
  621. package/vendor/lib/cmake/tlx/tlx-targets.cmake +0 -106
  622. package/vendor/lib/cmake/tlx/tlx-version.cmake +0 -11
  623. package/vendor/lib/libtlx.a +0 -0
  624. package/vendor/lib/pkgconfig/networkit.pc +0 -11
  625. package/vendor/lib/pkgconfig/tlx.pc +0 -11
@@ -1,1090 +0,0 @@
1
- /*
2
- * MultiLevelSetup.hpp
3
- *
4
- * Created on: 10.01.2015
5
- * Author: Michael Wegner
6
- */
7
-
8
- #ifndef NETWORKIT_NUMERICS_LAMG_MULTI_LEVEL_SETUP_HPP_
9
- #define NETWORKIT_NUMERICS_LAMG_MULTI_LEVEL_SETUP_HPP_
10
-
11
- #include <networkit/algebraic/CSRMatrix.hpp>
12
- #include <networkit/algebraic/DenseMatrix.hpp>
13
- #include <networkit/algebraic/DynamicMatrix.hpp>
14
- #include <networkit/numerics/LAMG/LevelHierarchy.hpp>
15
- #include <networkit/numerics/Smoother.hpp>
16
-
17
- #include <cmath>
18
- #include <limits>
19
- #include <vector>
20
-
21
- namespace NetworKit {
22
-
23
- /**
24
- * @ingroup
25
- * Implements the setup phase of LAMG (Lean Algebraic Multigrid by Livne et al.).
26
- */
27
- template <class Matrix>
28
- class MultiLevelSetup {
29
-
30
- #define UNDECIDED std::numeric_limits<index>::max()
31
-
32
- private:
33
- const Smoother<Matrix> &smoother;
34
-
35
- /**
36
- * Elimination phase of LAMG for the specified Laplacian matrix @a matrix. If an elemination
37
- * stage is created, it is stored in the LevelHierarchy @a hierarchy and the method returns
38
- * @code{true}. Otherwise, @code{false} is returned.
39
- * @param matrix Laplacian matrix for which an elimination stage should be created.
40
- * @param hierarchy LevelHierarchy in which the created elimination stage is stored (if created)
41
- * @return @code{True} if an elimination stage has been created, otherwise@code{false}.
42
- */
43
- bool coarseningElimination(Matrix &matrix, LevelHierarchy<Matrix> &hierarchy) const;
44
-
45
- /**
46
- * Scans the Laplacian matrix for nodes with a low degree (i.e. nodes with less than 5
47
- * neighbors). For each node having low degree and independent from already found low degree
48
- * nodes, @code{true} is stored in @a fNode. The
49
- * @a stage parameter specifies if we are in the first or subsequent stages during elimination.
50
- * @param matrix Laplacian matrix.
51
- * @param fNode[out] For each node, @code{true} if the node is of low degree and @code{false}
52
- * otherwise.
53
- * @param stage The stage of the elimination phase.
54
- * @return Number of low degree nodes found.
55
- */
56
- count lowDegreeSweep(const Matrix &matrix, std::vector<bool> &fNode, index stage) const;
57
-
58
- /**
59
- * Computes the projection matrix @a P and the @a q vector used to restrict and interpolate the
60
- * matrix for an elimination stage.
61
- * @param matrix Laplacian matrix.
62
- * @param fSet Set of nodes having low degree.
63
- * @param coarseIndex Set of nodes equal to V \setminus fSet
64
- * @param P[out] The projection matrix.
65
- * @param q[out] The q vector.
66
- */
67
- void eliminationOperators(const Matrix &matrix, const std::vector<index> &fSet,
68
- const std::vector<index> &coarseIndex, Matrix &P, Vector &q) const;
69
-
70
- /**
71
- * Aggregation phase of LAMG for the specified Laplacian matrix @a matrix. The coarsened matrix
72
- * is stored in the LevelHierarchy @a hierarchy. The test vector @a tv is used for determining
73
- * the affinity of nodes. The parameter
74
- * @a numTVVectors specifies how many test vectors will be created to determine the affinities
75
- * between nodes.
76
- * @param matrix Laplacian matrix.
77
- * @param hierarchy LevelHierarchy to store the stage.
78
- * @param tv Test vector.
79
- * @param numTVVectors Number of test vectors to use.
80
- */
81
- void coarseningAggregation(Matrix &matrix, LevelHierarchy<Matrix> &hierarchy, Vector &tv,
82
- count numTVVectors) const;
83
-
84
- /**
85
- * Create @a numVectors test vectors for the given Laplacian matrix @a matrix. The test vector
86
- * @a tv will be reused.
87
- * @param matrix Laplacian matrix.
88
- * @param tv Test vector.
89
- * @param numVectors Number of test vectors to create.
90
- * @return The created test vectors.
91
- */
92
- std::vector<Vector> generateTVs(const Matrix &matrix, Vector &tv, count numVectors) const;
93
-
94
- /**
95
- * Adds high degree nodes as seeds to @a status.
96
- * @param matrix Laplacian matrix.
97
- * @param status[out] High degree nodes are flagged as seed.
98
- */
99
- void addHighDegreeSeedNodes(const Matrix &matrix, std::vector<index> &status) const;
100
-
101
- /**
102
- * Aggregates loose nodes (nodes with low adjacency) together.
103
- * @param strongAdjMatrix Strong adjacency matrix.
104
- * @param status[out] Aggregates loose nodes together and labels them in @a status accordingly.
105
- * @param nc[out] The altered number of coarse nodes.
106
- */
107
- void aggregateLooseNodes(const Matrix &strongAdjMatrix, std::vector<index> &status,
108
- count &nc) const;
109
-
110
- /**
111
- * Computes the strong adjacency matrix for the given Laplacian matrix @a matrix.
112
- * @param matrix Laplacian matrix.
113
- * @param strongAdjMatrix[out] The resulting strong adjacency matrix.
114
- */
115
- void computeStrongAdjacencyMatrix(const Matrix &matrix, Matrix &strongAdjMatrix) const;
116
-
117
- /**
118
- * Computes the affinity matrix for the given Laplacian matrix @a matrix and the test vectors @a
119
- * tVs.
120
- * @param matrix Laplacian matrix.
121
- * @param tVs Test vectors.
122
- * @param affinityMatrix[out] The resulting affinity matrix.
123
- */
124
- void computeAffinityMatrix(const Matrix &matrix, const std::vector<Vector> &tVs,
125
- Matrix &affinityMatrix) const;
126
-
127
- /**
128
- * Models one stage in the aggregation phase. New aggregates are labeled accordingly in @a
129
- * status.
130
- * @param matrix Laplacian matrix.
131
- * @param nc Number of coarse nodes.
132
- * @param strongAdjMatrix Strong adjacency matrix.
133
- * @param affinityMatrix Affinity matrix.
134
- * @param tVs[out] Test vectors.
135
- * @param status[out] Aggregation labels.
136
- */
137
- void aggregationStage(const Matrix &matrix, count &nc, const Matrix &strongAdjMatrix,
138
- const Matrix &affinityMatrix, std::vector<Vector> &tVs,
139
- std::vector<index> &status) const;
140
-
141
- /**
142
- * Computes strong (cf. LAMG paper) neighbors and stores them sorted into @a bins.
143
- * @param affinityMatrix Affinity matrix.
144
- * @param status Aggregation labels.
145
- * @param bins[out] Strong neighbors sorted into bins.
146
- */
147
- void computeStrongNeighbors(const Matrix &affinityMatrix, const std::vector<index> &status,
148
- std::vector<std::vector<index>> &bins) const;
149
-
150
- /**
151
- * Finds the best seed for node @a u and stores it in @a s.
152
- * @param strongAdjMatrix
153
- * @param affinityMatrix Affinity matrix.
154
- * @param diag Vector of diagonal entries of the Laplacian matrix.
155
- * @param tVs Test vectors.
156
- * @param status Aggregation labels.
157
- * @param u The node to find the best seed for.
158
- * @param s[out] The best seed for node @a u.
159
- * @return @code{True} if a seed has been found for @a u, @code{false} otherwise.
160
- */
161
- bool findBestSeedEnergyCorrected(const Matrix &strongAdjMatrix, const Matrix &affinityMatrix,
162
- const std::vector<double> &diag,
163
- const std::vector<Vector> &tVs,
164
- const std::vector<index> &status, index u, index &s) const;
165
-
166
- /**
167
- * Determines if the Laplacian matrix @a A can be coarsened further.
168
- * @param A Laplacian matrix.
169
- * @return @code{True} if @a A can be coarsened further, @code{false} otherwise.
170
- */
171
- inline bool canCoarsen(const Matrix &A) const {
172
- return A.numberOfRows() > MAX_DIRECT_SOLVE_SIZE;
173
- }
174
-
175
- /**
176
- * Determines if the relaxation is fast enough to stop coarsening.
177
- * @param A Laplacian matrix.
178
- * @param lvlIndex The number of levels already created in the hierarchy.
179
- * @param tv Test vector.
180
- * @return @code{True} if convergence of relaxation is fast, @code{false} otherwise.
181
- */
182
- bool isRelaxationFast(const Matrix &A, index lvlIndex, Vector &tv) const;
183
-
184
- /**
185
- * Computes the coarsened matrix of @a matrix by means of the projection matrix @a P and stores
186
- * the result in @a B.
187
- * @param P Projection matrix.
188
- * @param A Laplacian matrix.
189
- * @param PColIndex Stores the column index of the 1 entry at each row.
190
- * @param PRowIndex Stores the row index of the 1 entry at each column.
191
- * @param B[out] Resulting coarsened Laplacian matrix.
192
- */
193
- void galerkinOperator(const Matrix &P, const Matrix &A, const std::vector<index> &PColIndex,
194
- const std::vector<std::vector<index>> &PRowIndex, Matrix &B) const;
195
-
196
- /**
197
- * Creates a @a hierarchy for the given Laplacian matrix @a matrix.
198
- * @param matrix Laplcian matrix.
199
- * @param hierarchy[out] The constructed hierarchy.
200
- */
201
- void setupForMatrix(Matrix &matrix, LevelHierarchy<Matrix> &hierarchy) const;
202
-
203
- public:
204
- /**
205
- * Creates an instance of MultiLevelSetup with the specified @a smoother used for relaxing
206
- * during the setup phase.
207
- * @param smoother Reference to smoother.
208
- */
209
- MultiLevelSetup(const Smoother<Matrix> &smoother) : smoother(smoother) {}
210
-
211
- /**
212
- * Creates a @ hierarchy for the given Laplacian matrix of the graph @a G.
213
- * @param G The graph.
214
- * @param hierarchy[out] The constructed hierarchy.
215
- */
216
- void setup(const Graph &G, LevelHierarchy<Matrix> &hierarchy) const {
217
- setup(Matrix::laplacianMatrix(G), hierarchy);
218
- }
219
-
220
- /**
221
- * Creates a @a hierarchy for the given Laplacian matrix @a matrix.
222
- * @param matrix Laplcian matrix.
223
- * @param hierarchy[out] The constructed hierarchy.
224
- */
225
- void setup(Matrix matrix, LevelHierarchy<Matrix> &hierarchy) const;
226
- };
227
-
228
- template <class Matrix>
229
- void MultiLevelSetup<Matrix>::setup(Matrix matrix, LevelHierarchy<Matrix> &hierarchy) const {
230
- setupForMatrix(matrix, hierarchy);
231
- }
232
-
233
- template <class Matrix>
234
- void MultiLevelSetup<Matrix>::setupForMatrix(Matrix &A, LevelHierarchy<Matrix> &hierarchy) const {
235
- hierarchy.addFinestLevel(A);
236
-
237
- #ifndef NDEBUG
238
- DEBUG("FINEST\t", A.numberOfRows(), "\t", A.nnz());
239
- #endif // NDEBUG
240
-
241
- bool doneCoarsening = false;
242
- count numTVs = TV_NUM;
243
- index level = 0;
244
-
245
- while (!doneCoarsening) {
246
- // ELIMINATION
247
- if (coarseningElimination(A, hierarchy)) {
248
- if (!canCoarsen(A))
249
- doneCoarsening = true;
250
- level++;
251
- #ifndef NDEBUG
252
- DEBUG(level, " ELIM\t\t", A.numberOfRows(), "\t", A.nnz() / 2);
253
- #endif // NDEBUG
254
- }
255
-
256
- // AGGREGATION
257
- Vector tv;
258
- if (doneCoarsening || isRelaxationFast(A, level, tv)) {
259
- doneCoarsening = true;
260
- } else {
261
- coarseningAggregation(A, hierarchy, tv, numTVs);
262
- level++;
263
- #ifndef NDEBUG
264
- DEBUG(level, " AGG\t\t", A.numberOfRows(), "\t", A.nnz() / 2);
265
- #endif // NDEBUG
266
- if (numTVs < TV_MAX) {
267
- numTVs += TV_INC;
268
- }
269
- }
270
-
271
- if (!canCoarsen(A))
272
- doneCoarsening = true;
273
- }
274
-
275
- hierarchy.setLastAsCoarsest();
276
- }
277
-
278
- template <class Matrix>
279
- bool MultiLevelSetup<Matrix>::coarseningElimination(Matrix &matrix,
280
- LevelHierarchy<Matrix> &hierarchy) const {
281
- std::vector<EliminationStage<Matrix>> coarseningStages;
282
- count stageNum = 0;
283
- while (stageNum < SETUP_ELIMINATION_MAX_STAGES) {
284
- if (matrix.numberOfRows() <= MAX_DIRECT_SOLVE_SIZE)
285
- break; // we do not need to coarsen the matrix any further
286
- std::vector<bool> fNode;
287
- count nf = lowDegreeSweep(matrix, fNode, stageNum);
288
- count nc = matrix.numberOfRows() - nf;
289
-
290
- if (nc == 0) { // do not eliminate all nodes -> leave one entry in c
291
- nc = 1;
292
- nf--;
293
- }
294
-
295
- // add f nodes to fSet and c nodes to cSet
296
- std::vector<index> fSet(nf);
297
- std::vector<index> cSet(nc);
298
-
299
- std::vector<index> coarseIndex(matrix.numberOfRows());
300
- for (index i = 0, fIndex = 0, cIndex = 0; i < matrix.numberOfRows(); ++i) {
301
- if (fNode[i] && fIndex < nf) {
302
- coarseIndex[i] = fIndex;
303
- fSet[fIndex++] = i;
304
- } else {
305
- coarseIndex[i] = cIndex;
306
- cSet[cIndex++] = i;
307
- }
308
- }
309
-
310
- if (nf <= SETUP_ELIMINATION_MIN_ELIM_FRACTION * matrix.numberOfRows()) {
311
- break;
312
- }
313
-
314
- Matrix P;
315
- Vector q;
316
- eliminationOperators(matrix, fSet, coarseIndex, P, q);
317
- coarseningStages.push_back(EliminationStage<Matrix>(P, q, fSet, cSet));
318
-
319
- Matrix Acc = matrix.extract(cSet, cSet); // Schur complement
320
- Matrix Acf = matrix.extract(cSet, fSet); // Schur complement
321
-
322
- matrix = Acc + Acf * P;
323
- stageNum++;
324
- }
325
-
326
- if (stageNum != 0) { // we have coarsened the matrix
327
- hierarchy.addEliminationLevel(matrix, coarseningStages);
328
- return true;
329
- }
330
-
331
- return false;
332
- }
333
-
334
- template <class Matrix>
335
- count MultiLevelSetup<Matrix>::lowDegreeSweep(const Matrix &matrix, std::vector<bool> &fNode,
336
- index stage) const {
337
- fNode.resize(matrix.numberOfRows(), true); // first mark all nodes as f nodes
338
- count numFNodes = 0;
339
- int degreeOffset = stage != 0;
340
-
341
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
342
- if ((int)matrix.nnzInRow(i) - degreeOffset <= (int)SETUP_ELIMINATION_MAX_DEGREE
343
- && fNode[i]) { // node i has degree <= 4 and can be eliminated
344
- numFNodes++;
345
- // To maintain independence, mark all neighbors as not eliminated all neighbors of this
346
- // f node are c nodes
347
- matrix.forNonZeroElementsInRow(i, [&](index j, edgeweight /*w*/) {
348
- if (j != i) {
349
- fNode[j] = false;
350
- }
351
- });
352
- } else { // Node has high degree, thus it is a c node
353
- fNode[i] = false;
354
- }
355
- }
356
-
357
- return numFNodes;
358
- }
359
-
360
- template <class Matrix>
361
- void MultiLevelSetup<Matrix>::eliminationOperators(const Matrix &matrix,
362
- const std::vector<index> &fSet,
363
- const std::vector<index> &coarseIndex, Matrix &P,
364
- Vector &q) const {
365
- std::vector<Triplet> triples;
366
- q = Vector(fSet.size());
367
- for (index k = 0; k < fSet.size(); ++k) { // Afc
368
- matrix.forNonZeroElementsInRow(fSet[k], [&](index j, edgeweight w) {
369
- if (fSet[k] == j) {
370
- q[k] = 1.0 / w;
371
- } else {
372
- triples.push_back({k, coarseIndex[j], w});
373
- }
374
- });
375
- }
376
-
377
- for (index i = 0; i < triples.size(); ++i) { // * -Aff^-1
378
- triples[i].value *= -q[triples[i].row];
379
- }
380
-
381
- P = Matrix(fSet.size(), coarseIndex.size() - fSet.size(), triples);
382
- }
383
-
384
- template <class Matrix>
385
- void MultiLevelSetup<Matrix>::coarseningAggregation(Matrix &matrix,
386
- LevelHierarchy<Matrix> &hierarchy, Vector &tv,
387
- count numTVVectors) const {
388
- Vector B(SETUP_MAX_AGGREGATION_STAGES, std::numeric_limits<double>::max());
389
- std::vector<std::vector<index>> S(
390
- SETUP_MAX_AGGREGATION_STAGES,
391
- std::vector<index>(matrix.numberOfRows(), std::numeric_limits<index>::max()));
392
- std::vector<index> status(matrix.numberOfRows(), UNDECIDED);
393
- std::vector<count> nc(SETUP_MAX_AGGREGATION_STAGES, matrix.numberOfRows());
394
-
395
- double alpha = 1.0;
396
- double maxCoarseningRatio = SETUP_COARSENING_WORK_GUARD / SETUP_CYCLE_INDEX;
397
- count stage = 0;
398
- count nC = matrix.numberOfRows();
399
-
400
- // generate TVs
401
- std::vector<Vector> tVs = generateTVs(matrix, tv, numTVVectors);
402
-
403
- // compute strong adjacency matrix
404
- Matrix Wstrong;
405
- computeStrongAdjacencyMatrix(matrix, Wstrong);
406
-
407
- // compute affinityMatrix
408
- Matrix affinityMatrix;
409
- computeAffinityMatrix(Wstrong, tVs, affinityMatrix);
410
-
411
- // mark all locally high-degree nodes as seeds
412
- addHighDegreeSeedNodes(matrix, status);
413
-
414
- // aggregate all loose nodes
415
- aggregateLooseNodes(Wstrong, status, nC);
416
-
417
- nc[0] = nC;
418
- while (stage < SETUP_MIN_AGGREGATION_STAGES
419
- || (alpha >= maxCoarseningRatio && stage < SETUP_MAX_AGGREGATION_STAGES)) {
420
- nC = stage > 0 ? nc[stage - 1] : nc[0];
421
-
422
- // aggregation stage
423
- aggregationStage(matrix, nC, Wstrong, affinityMatrix, tVs, status);
424
-
425
- alpha = (double)nC / (double)matrix.numberOfRows();
426
- alpha <= maxCoarseningRatio ? B[stage] = 1.0 - alpha : B[stage] = 1.0 + alpha;
427
-
428
- S[stage] = status;
429
- nc[stage] = nC;
430
- stage++;
431
- }
432
-
433
- double min = B[0];
434
- index bestAggregate = 0;
435
- for (index i = 1; i < stage; ++i) {
436
- if (B[i] < min) {
437
- bestAggregate = i;
438
- min = B[i];
439
- }
440
- }
441
-
442
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
443
- if (S[bestAggregate][i] == UNDECIDED) { // undediced nodes become their own seeds
444
- S[bestAggregate][i] = i;
445
- }
446
- }
447
-
448
- std::vector<index> indexFine(matrix.numberOfRows(), 0);
449
- index newIndex = 0;
450
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
451
- if (S[bestAggregate][i] == i) {
452
- indexFine[i] = newIndex++;
453
- }
454
- }
455
-
456
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
457
- status[i] = indexFine[S[bestAggregate][i]];
458
- }
459
-
460
- assert(newIndex == nc[bestAggregate]);
461
-
462
- // create interpolation matrix
463
- std::vector<Triplet> pTriples(matrix.numberOfRows());
464
- std::vector<Triplet> rTriples(matrix.numberOfRows());
465
- std::vector<index> PColIndex(matrix.numberOfRows());
466
- std::vector<std::vector<index>> PRowIndex(nc[bestAggregate]);
467
-
468
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
469
- pTriples[i] = {i, status[i], 1};
470
- rTriples[i] = {status[i], i, 1};
471
- PColIndex[i] = status[i];
472
- PRowIndex[status[i]].push_back(i);
473
- }
474
-
475
- Matrix P(matrix.numberOfRows(), nc[bestAggregate], pTriples);
476
- Matrix R(nc[bestAggregate], matrix.numberOfRows(), rTriples);
477
-
478
- // create coarsened laplacian
479
- galerkinOperator(P, matrix, PColIndex, PRowIndex, matrix);
480
-
481
- hierarchy.addAggregationLevel(matrix, P, R);
482
- }
483
-
484
- template <class Matrix>
485
- std::vector<Vector> MultiLevelSetup<Matrix>::generateTVs(const Matrix &matrix, Vector &tv,
486
- count numVectors) const {
487
- std::vector<Vector> testVectors(numVectors, Vector(matrix.numberOfColumns()));
488
-
489
- testVectors[0] = tv;
490
-
491
- if (numVectors > 1) {
492
- Vector b(matrix.numberOfColumns(), 0.0);
493
- #pragma omp parallel for
494
- for (omp_index i = 1; i < static_cast<omp_index>(numVectors); ++i) {
495
- for (count j = 0; j < matrix.numberOfColumns(); ++j) {
496
- testVectors[i][j] = 2 * Aux::Random::probability() - 1;
497
- }
498
-
499
- testVectors[i] = smoother.relax(matrix, b, testVectors[i], SETUP_TV_SWEEPS);
500
- }
501
- }
502
-
503
- return testVectors;
504
- }
505
-
506
- template <class Matrix>
507
- void MultiLevelSetup<Matrix>::addHighDegreeSeedNodes(const Matrix &matrix,
508
- std::vector<index> &status) const {
509
- std::vector<count> deg(matrix.numberOfRows());
510
- #pragma omp parallel for
511
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
512
- deg[i] = matrix.nnzInRow(i) - 1;
513
- }
514
-
515
- #pragma omp parallel for
516
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
517
- double num = 0.0;
518
- double denom = 0.0;
519
- matrix.forNonZeroElementsInRow(i, [&](index j, double value) {
520
- if (i != j) {
521
- num += std::abs(value) * (double)deg[j];
522
- } else {
523
- denom = std::abs(value);
524
- }
525
- });
526
-
527
- // High degree node becomes seed
528
- if ((double)deg[i] >= SETUP_AGGREGATION_DEGREE_THRESHOLD * (num / denom)) {
529
- status[i] = i;
530
- }
531
- }
532
- }
533
-
534
- template <class Matrix>
535
- void MultiLevelSetup<Matrix>::aggregateLooseNodes(const Matrix &strongAdjMatrix,
536
- std::vector<index> &status, count &nc) const {
537
- std::vector<index> looseNodes;
538
- for (index i = 0; i < strongAdjMatrix.numberOfRows(); ++i) {
539
- double max = std::numeric_limits<double>::min();
540
- strongAdjMatrix.forNonZeroElementsInRow(i, [&](index /*j*/, double value) {
541
- if (value > max)
542
- max = value;
543
- });
544
-
545
- if (std::abs(max) < 1e-9 || max == std::numeric_limits<double>::min()) {
546
- looseNodes.push_back(i);
547
- }
548
- }
549
-
550
- if (!looseNodes.empty()) {
551
- status[looseNodes[0]] = looseNodes[0]; // mark first as seed
552
- for (index k = 1; k < looseNodes.size(); ++k) {
553
- status[looseNodes[k]] = looseNodes[0]; // first loose nodes becomes seed
554
- }
555
-
556
- nc -= looseNodes.size() - 1;
557
- }
558
- }
559
-
560
- template <class Matrix>
561
- void MultiLevelSetup<Matrix>::computeStrongAdjacencyMatrix(const Matrix &matrix,
562
- Matrix &strongAdjMatrix) const {
563
- std::vector<double> maxNeighbor(matrix.numberOfRows(), std::numeric_limits<double>::min());
564
- #pragma omp parallel for
565
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
566
- matrix.forNonZeroElementsInRow(i, [&](index j, double value) {
567
- if (i != j && -value > maxNeighbor[i]) {
568
- maxNeighbor[i] = -value;
569
- }
570
- });
571
- }
572
-
573
- std::vector<index> rowIdx(matrix.numberOfRows() + 1, 0);
574
-
575
- matrix.parallelForNonZeroElementsInRowOrder([&](index i, index j, double value) {
576
- if (i != j && std::abs(value) >= 0.1 * std::min(maxNeighbor[i], maxNeighbor[j])) {
577
- ++rowIdx[i + 1];
578
- }
579
- });
580
-
581
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
582
- rowIdx[i + 1] += rowIdx[i];
583
- }
584
-
585
- count nnz = rowIdx[matrix.numberOfRows()];
586
- std::vector<Triplet> triplets(nnz);
587
-
588
- #pragma omp parallel for
589
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
590
- index cIdx = rowIdx[i];
591
- matrix.forNonZeroElementsInRow(i, [&](index j, double value) {
592
- if (i != j && std::abs(value) >= 0.1 * std::min(maxNeighbor[i], maxNeighbor[j])) {
593
- triplets[cIdx] = {static_cast<index>(i), j, -value};
594
- ++cIdx;
595
- }
596
- });
597
- }
598
-
599
- strongAdjMatrix = Matrix(matrix.numberOfRows(), matrix.numberOfColumns(), triplets);
600
- }
601
-
602
- template <class Matrix>
603
- void MultiLevelSetup<Matrix>::computeAffinityMatrix(const Matrix &matrix,
604
- const std::vector<Vector> &tVs,
605
- Matrix &affinityMatrix) const {
606
- assert(!tVs.empty());
607
-
608
- std::vector<index> rowIdx(matrix.numberOfRows() + 1);
609
- std::vector<Triplet> triplets(matrix.nnz());
610
-
611
- #pragma omp parallel for
612
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
613
- rowIdx[i + 1] = matrix.nnzInRow(i);
614
- }
615
-
616
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
617
- rowIdx[i + 1] += rowIdx[i];
618
- }
619
-
620
- std::vector<double> normSquared(matrix.numberOfRows(), 0.0);
621
- #pragma omp parallel for
622
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
623
- for (index k = 0; k < tVs.size(); ++k) {
624
- normSquared[i] += tVs[k][i] * tVs[k][i];
625
- }
626
- }
627
-
628
- #pragma omp parallel for
629
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
630
- double nir = 1.0 / normSquared[i];
631
- index cIdx = rowIdx[i];
632
- matrix.forNonZeroElementsInRow(i, [&](index j, double /*val*/) {
633
- double ij = 0.0;
634
- for (index k = 0; k < tVs.size(); ++k) {
635
- ij += tVs[k][i] * tVs[k][j];
636
- }
637
-
638
- double value = (ij * ij) * nir / normSquared[j];
639
- triplets[cIdx] = {static_cast<index>(i), j, value};
640
- ++cIdx;
641
- });
642
- }
643
-
644
- affinityMatrix = Matrix(matrix.numberOfRows(), matrix.numberOfColumns(), triplets);
645
- }
646
-
647
- template <class Matrix>
648
- void MultiLevelSetup<Matrix>::aggregationStage(const Matrix &matrix, count &nc,
649
- const Matrix &strongAdjMatrix,
650
- const Matrix &affinityMatrix,
651
- std::vector<Vector> &tVs,
652
- std::vector<index> &status) const {
653
- std::vector<std::vector<index>> bins(10);
654
- computeStrongNeighbors(affinityMatrix, status, bins);
655
-
656
- std::vector<double> diag(matrix.numberOfRows(), 0.0);
657
- #pragma omp parallel for
658
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
659
- diag[i] = matrix(i, i);
660
- }
661
- // Iterate over undecided nodes with strong neighbors in decreasing order of strongest neighbor
662
- for (index k = bins.size(); k-- > 0;) {
663
- for (index i : bins[k]) {
664
- if (status[i] == UNDECIDED) { // node is still undecided
665
- index s = 0;
666
- if (findBestSeedEnergyCorrected(strongAdjMatrix, affinityMatrix, diag, tVs, status,
667
- i, s)) {
668
- status[s] = s; // s becomes seed
669
- status[i] = s; // i's seed is s
670
- nc--;
671
-
672
- for (index j = 0; j < tVs.size(); ++j) { // update test vectors
673
- tVs[j][i] = tVs[j][s];
674
- }
675
- }
676
- }
677
- }
678
-
679
- if (nc <= matrix.numberOfRows() * SETUP_COARSENING_WORK_GUARD / SETUP_CYCLE_INDEX) {
680
- break;
681
- }
682
- } // iterate over bins
683
- }
684
-
685
- template <class Matrix>
686
- void MultiLevelSetup<Matrix>::computeStrongNeighbors(const Matrix &affinityMatrix,
687
- const std::vector<index> &status,
688
- std::vector<std::vector<index>> &bins) const {
689
- std::vector<bool> undecided(affinityMatrix.numberOfRows(), false);
690
- std::vector<double> maxNeighbor(affinityMatrix.numberOfRows(),
691
- std::numeric_limits<double>::min());
692
- double overallMax = 0.0;
693
- double overallMin = std::numeric_limits<double>::max();
694
-
695
- affinityMatrix.parallelForNonZeroElementsInRowOrder(
696
- [&](index i, index j,
697
- double value) { // determine the highest affinity neighbor of each node
698
- if (status[i] == UNDECIDED && (status[j] == UNDECIDED || status[j] == j)) {
699
- // 'i' is UNDECIDED and its neighbor 'j' is also UNDECIDED or SEED
700
- if (value > maxNeighbor[i]) {
701
- maxNeighbor[i] = value;
702
- }
703
- undecided[i] = true;
704
- }
705
- });
706
-
707
- for (index i = 0; i < affinityMatrix.numberOfRows(); ++i) {
708
- if (maxNeighbor[i] > overallMax) {
709
- overallMax = maxNeighbor[i];
710
- }
711
- if (maxNeighbor[i] < overallMin) {
712
- overallMin = maxNeighbor[i];
713
- }
714
- }
715
-
716
- double h = std::fabs(overallMax - overallMin) < 1e-15
717
- ? 1.0
718
- : (double)bins.size() / (overallMax - overallMin);
719
- for (index i = 0; i < affinityMatrix.numberOfRows(); ++i) {
720
- if (undecided[i]) { // undecided nodes with strong neighbors
721
- index binIndex = (index)std::floor(h * (maxNeighbor[i] - overallMin));
722
- if (binIndex == bins.size()) { // last interval is closed on the right
723
- binIndex--;
724
- }
725
-
726
- assert(binIndex < bins.size());
727
- bins[binIndex].push_back(i);
728
- }
729
- }
730
- }
731
-
732
- template <class Matrix>
733
- bool MultiLevelSetup<Matrix>::findBestSeedEnergyCorrected(const Matrix &strongAdjMatrix,
734
- const Matrix &affinityMatrix,
735
- const std::vector<double> &diag,
736
- const std::vector<Vector> &tVs,
737
- const std::vector<index> &status,
738
- const index u, index &s) const {
739
- bool foundSeed = false;
740
- std::vector<double> r(tVs.size(), 0.0);
741
- std::vector<double> q(tVs.size(), 0.0);
742
- std::vector<double> E(tVs.size(), 0.0);
743
-
744
- double d = diag[u];
745
- double d2 = 0.5 * diag[u];
746
- for (index k = 0; k < tVs.size(); ++k) {
747
- double rr = 0.0;
748
- double qq = 0.0;
749
- strongAdjMatrix.forNonZeroElementsInRow(u, [&](index v, double value) {
750
- rr += value * tVs[k][v];
751
- qq += value * 0.5 * tVs[k][v] * tVs[k][v];
752
- });
753
-
754
- r[k] = rr;
755
- q[k] = qq;
756
- double y = rr / d;
757
- E[k] = (d2 * y - rr) * y + qq;
758
- }
759
-
760
- double maxNeighbor = -1.0;
761
- affinityMatrix.forNonZeroElementsInRow(u, [&](index v, double value) {
762
- if (status[v] == UNDECIDED || status[v] == v) {
763
- double maxMu = -1.0;
764
- bool smallRatio = true;
765
- for (index k = 0; k < tVs.size(); ++k) {
766
- double xv = tVs[k][v];
767
- double Ec = (d2 * xv - r[k]) * xv + q[k];
768
- double mu = Ec / (E[k] + 1e-15);
769
-
770
- if (mu > maxMu) {
771
- maxMu = mu;
772
- }
773
- if (maxMu > 2.5) {
774
- smallRatio = false;
775
- break;
776
- }
777
- }
778
-
779
- if (smallRatio && value > maxNeighbor) {
780
- maxNeighbor = value;
781
- s = v;
782
- foundSeed = true;
783
- }
784
- }
785
- });
786
-
787
- return foundSeed;
788
- }
789
-
790
- template <class Matrix>
791
- bool MultiLevelSetup<Matrix>::isRelaxationFast(const Matrix &A, index lvlIndex, Vector &tv) const {
792
- count nu = SETUP_RELAX_ACF_MIN_SWEEPS + 2 * (lvlIndex - 1);
793
- count tvNu = SETUP_TV_SWEEPS;
794
- count initial = 3;
795
-
796
- // create testVector in [-1,1]
797
- tv = Vector(A.numberOfRows());
798
- for (index i = 0; i < tv.getDimension(); ++i) {
799
- tv[i] = 2.0 * Aux::Random::probability() - 1.0;
800
- }
801
-
802
- Vector b(A.numberOfRows(), 0.0);
803
- Vector x = tv;
804
- x = smoother.relax(A, b, x, initial);
805
- tv = smoother.relax(A, b, x, tvNu - initial);
806
- Vector y = smoother.relax(A, b, tv, nu - tvNu);
807
- double relaxAcf = std::pow((y - y.mean()).length() / (x - x.mean()).length(),
808
- (double)1.0 / (double)(nu - initial));
809
- return relaxAcf <= SETUP_MAX_COARSE_RELAX_ACF || !canCoarsen(A);
810
- }
811
-
812
- template <class Matrix>
813
- void MultiLevelSetup<Matrix>::galerkinOperator(const Matrix &P, const Matrix &A,
814
- const std::vector<index> &PColIndex,
815
- const std::vector<std::vector<index>> &PRowIndex,
816
- Matrix &B) const {
817
- std::vector<Triplet> triplets;
818
- SparseAccumulator spa(P.numberOfColumns());
819
- for (index i = 0; i < P.numberOfColumns(); ++i) {
820
- for (index k : PRowIndex[i]) {
821
- double Pki = P(k, i);
822
- A.forNonZeroElementsInRow(k, [&](index l, double value) {
823
- index j = PColIndex[l];
824
- spa.scatter(Pki * value * P(l, j), j);
825
- });
826
- }
827
-
828
- spa.gather([&](index i, index j, double value) { triplets.push_back({i, j, value}); });
829
-
830
- spa.increaseRow();
831
- }
832
-
833
- B = Matrix(P.numberOfColumns(), P.numberOfColumns(), triplets);
834
- }
835
-
836
- template <>
837
- inline void MultiLevelSetup<CSRMatrix>::setup(CSRMatrix matrix,
838
- LevelHierarchy<CSRMatrix> &hierarchy) const {
839
- matrix.sort();
840
- setupForMatrix(matrix, hierarchy);
841
- }
842
-
843
- template <>
844
- inline void
845
- MultiLevelSetup<CSRMatrix>::computeStrongAdjacencyMatrix(const CSRMatrix &matrix,
846
- CSRMatrix &strongAdjMatrix) const {
847
- std::vector<double> maxNeighbor(matrix.numberOfRows(), std::numeric_limits<double>::min());
848
- #pragma omp parallel for
849
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
850
- matrix.forNonZeroElementsInRow(i, [&](index j, double value) {
851
- if (i != j && -value > maxNeighbor[i]) {
852
- maxNeighbor[i] = -value;
853
- }
854
- });
855
- }
856
-
857
- std::vector<index> rowIdx(matrix.numberOfRows() + 1, 0);
858
- matrix.parallelForNonZeroElementsInRowOrder([&](index i, index j, double value) {
859
- if (i != j && std::abs(value) >= 0.1 * std::min(maxNeighbor[i], maxNeighbor[j])) {
860
- ++rowIdx[i + 1];
861
- }
862
- });
863
-
864
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
865
- rowIdx[i + 1] += rowIdx[i];
866
- }
867
-
868
- count nnz = rowIdx[matrix.numberOfRows()];
869
- std::vector<index> columnIdx(nnz);
870
- std::vector<double> nonZeros(nnz);
871
-
872
- #pragma omp parallel for
873
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
874
- index cIdx = rowIdx[i];
875
- matrix.forNonZeroElementsInRow(i, [&](index j, double value) {
876
- if (i != j && std::abs(value) >= 0.1 * std::min(maxNeighbor[i], maxNeighbor[j])) {
877
- columnIdx[cIdx] = j;
878
- nonZeros[cIdx] = -value;
879
- ++cIdx;
880
- }
881
- });
882
- }
883
-
884
- strongAdjMatrix = CSRMatrix(matrix.numberOfRows(), matrix.numberOfColumns(), rowIdx, columnIdx,
885
- nonZeros, 0.0, matrix.sorted());
886
- }
887
-
888
- template <>
889
- inline void MultiLevelSetup<CSRMatrix>::computeAffinityMatrix(const CSRMatrix &matrix,
890
- const std::vector<Vector> &tVs,
891
- CSRMatrix &affinityMatrix) const {
892
- assert(!tVs.empty());
893
-
894
- std::vector<index> rowIdx(matrix.numberOfRows() + 1);
895
- std::vector<index> columnIdx(matrix.nnz());
896
- std::vector<double> nonZeros(matrix.nnz());
897
-
898
- #pragma omp parallel for
899
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
900
- rowIdx[i + 1] = matrix.nnzInRow(i);
901
- }
902
-
903
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
904
- rowIdx[i + 1] += rowIdx[i];
905
- }
906
-
907
- std::vector<double> normSquared(matrix.numberOfRows(), 0.0);
908
- #pragma omp parallel for
909
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
910
- for (index k = 0; k < tVs.size(); ++k) {
911
- normSquared[i] += tVs[k][i] * tVs[k][i];
912
- }
913
- }
914
-
915
- #pragma omp parallel for
916
- for (omp_index i = 0; i < static_cast<omp_index>(matrix.numberOfRows()); ++i) {
917
- double nir = 1.0 / normSquared[i];
918
- index cIdx = rowIdx[i];
919
- matrix.forNonZeroElementsInRow(i, [&](index j, double /*val*/) {
920
- double ij = 0.0;
921
- for (index k = 0; k < tVs.size(); ++k) {
922
- ij += tVs[k][i] * tVs[k][j];
923
- }
924
-
925
- double value = (ij * ij) * nir / normSquared[j];
926
- columnIdx[cIdx] = j;
927
- nonZeros[cIdx] = value;
928
- ++cIdx;
929
- });
930
- }
931
-
932
- affinityMatrix = CSRMatrix(matrix.numberOfRows(), matrix.numberOfColumns(), rowIdx, columnIdx,
933
- nonZeros, 0.0, matrix.sorted());
934
- }
935
-
936
- template <>
937
- inline void MultiLevelSetup<CSRMatrix>::galerkinOperator(
938
- const CSRMatrix &P, const CSRMatrix &A, const std::vector<index> &PColIndex,
939
- const std::vector<std::vector<index>> &PRowIndex, CSRMatrix &B) const {
940
- std::vector<Triplet> triplets;
941
- SparseAccumulator spa(P.numberOfColumns());
942
- for (index i = 0; i < P.numberOfColumns(); ++i) {
943
- for (index k : PRowIndex[i]) {
944
- double Pki = P(k, i);
945
- A.forNonZeroElementsInRow(k, [&](index l, double value) {
946
- index j = PColIndex[l];
947
- spa.scatter(Pki * value * P(l, j), j);
948
- });
949
- }
950
-
951
- spa.gather([&](index i, index j, double value) { triplets.push_back({i, j, value}); });
952
-
953
- spa.increaseRow();
954
- }
955
-
956
- B = CSRMatrix(P.numberOfColumns(), P.numberOfColumns(), triplets, 0.0, true);
957
- }
958
-
959
- template <>
960
- inline void MultiLevelSetup<CSRMatrix>::eliminationOperators(const CSRMatrix &matrix,
961
- const std::vector<index> &fSet,
962
- const std::vector<index> &coarseIndex,
963
- CSRMatrix &P, Vector &q) const {
964
- std::vector<Triplet> triples;
965
- q = Vector(fSet.size());
966
- for (index k = 0; k < fSet.size(); ++k) { // Afc
967
- matrix.forNonZeroElementsInRow(fSet[k], [&](index j, edgeweight w) {
968
- if (fSet[k] == j) {
969
- q[k] = 1.0 / w;
970
- } else {
971
- triples.push_back({k, coarseIndex[j], w});
972
- }
973
- });
974
- }
975
-
976
- for (index i = 0; i < triples.size(); ++i) { // * -Aff^-1
977
- triples[i].value *= -q[triples[i].row];
978
- }
979
-
980
- P = CSRMatrix(fSet.size(), coarseIndex.size() - fSet.size(), triples, 0.0, matrix.sorted());
981
- }
982
-
983
- template <>
984
- inline void MultiLevelSetup<CSRMatrix>::coarseningAggregation(CSRMatrix &matrix,
985
- LevelHierarchy<CSRMatrix> &hierarchy,
986
- Vector &tv,
987
- count numTVVectors) const {
988
- Vector B(SETUP_MAX_AGGREGATION_STAGES, std::numeric_limits<double>::max());
989
- std::vector<std::vector<index>> S(
990
- SETUP_MAX_AGGREGATION_STAGES,
991
- std::vector<index>(matrix.numberOfRows(), std::numeric_limits<index>::max()));
992
- std::vector<index> status(matrix.numberOfRows(), UNDECIDED);
993
- std::vector<count> nc(SETUP_MAX_AGGREGATION_STAGES, matrix.numberOfRows());
994
-
995
- double alpha = 1.0;
996
- double maxCoarseningRatio = SETUP_COARSENING_WORK_GUARD / SETUP_CYCLE_INDEX;
997
- count stage = 0;
998
- count nC = matrix.numberOfRows();
999
-
1000
- // generate TVs
1001
- std::vector<Vector> tVs = generateTVs(matrix, tv, numTVVectors);
1002
-
1003
- // compute strong adjacency matrix
1004
- CSRMatrix Wstrong;
1005
- computeStrongAdjacencyMatrix(matrix, Wstrong);
1006
-
1007
- // compute affinityMatrix
1008
- CSRMatrix affinityMatrix;
1009
- computeAffinityMatrix(Wstrong, tVs, affinityMatrix);
1010
-
1011
- // mark all locally high-degree nodes as seeds
1012
- addHighDegreeSeedNodes(matrix, status);
1013
-
1014
- // aggregate all loose nodes
1015
- aggregateLooseNodes(Wstrong, status, nC);
1016
-
1017
- nc[0] = nC;
1018
- while (stage < SETUP_MIN_AGGREGATION_STAGES
1019
- || (alpha >= maxCoarseningRatio && stage < SETUP_MAX_AGGREGATION_STAGES)) {
1020
- nC = stage > 0 ? nc[stage - 1] : nc[0];
1021
-
1022
- // aggregation stage
1023
- aggregationStage(matrix, nC, Wstrong, affinityMatrix, tVs, status);
1024
-
1025
- alpha = (double)nC / (double)matrix.numberOfRows();
1026
- alpha <= maxCoarseningRatio ? B[stage] = 1.0 - alpha : B[stage] = 1.0 + alpha;
1027
-
1028
- S[stage] = status;
1029
- nc[stage] = nC;
1030
- stage++;
1031
- }
1032
-
1033
- double min = B[0];
1034
- index bestAggregate = 0;
1035
- for (index i = 1; i < stage; ++i) {
1036
- if (B[i] < min) {
1037
- bestAggregate = i;
1038
- min = B[i];
1039
- }
1040
- }
1041
-
1042
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
1043
- if (S[bestAggregate][i] == UNDECIDED) { // undediced nodes become their own seeds
1044
- S[bestAggregate][i] = i;
1045
- }
1046
- }
1047
-
1048
- std::vector<index> indexFine(matrix.numberOfRows(), 0);
1049
- index newIndex = 0;
1050
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
1051
- if (S[bestAggregate][i] == i) {
1052
- indexFine[i] = newIndex++;
1053
- }
1054
- }
1055
-
1056
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
1057
- status[i] = indexFine[S[bestAggregate][i]];
1058
- }
1059
-
1060
- assert(newIndex == nc[bestAggregate]);
1061
-
1062
- // create interpolation matrix
1063
- std::vector<Triplet> pTriples(matrix.numberOfRows());
1064
- std::vector<Triplet> rTriples(matrix.numberOfRows());
1065
- std::vector<index> PColIndex(matrix.numberOfRows());
1066
- std::vector<std::vector<index>> PRowIndex(nc[bestAggregate]);
1067
-
1068
- for (index i = 0; i < matrix.numberOfRows(); ++i) {
1069
- pTriples[i] = {i, status[i], 1};
1070
- rTriples[i] = {status[i], i, 1};
1071
- PColIndex[i] = status[i];
1072
- PRowIndex[status[i]].push_back(i);
1073
- }
1074
-
1075
- CSRMatrix P(matrix.numberOfRows(), nc[bestAggregate], pTriples, 0.0, matrix.sorted());
1076
- CSRMatrix R(nc[bestAggregate], matrix.numberOfRows(), rTriples, 0.0, matrix.sorted());
1077
-
1078
- // create coarsened laplacian
1079
- galerkinOperator(P, matrix, PColIndex, PRowIndex, matrix);
1080
-
1081
- hierarchy.addAggregationLevel(matrix, P, R);
1082
- }
1083
-
1084
- extern template class MultiLevelSetup<CSRMatrix>;
1085
- extern template class MultiLevelSetup<DenseMatrix>;
1086
- extern template class MultiLevelSetup<DynamicMatrix>;
1087
-
1088
- } /* namespace NetworKit */
1089
-
1090
- #endif // NETWORKIT_NUMERICS_LAMG_MULTI_LEVEL_SETUP_HPP_