@@ -133,9 +133,10 @@ public LeidenResult compute() {
133133 gamma ,
134134 concurrency
135135 );
136- var communitiesCount = localMovePhase .run ();
137- boolean localPhaseConverged = communitiesCount == workingGraph .nodeCount () || localMovePhase .swaps == 0 ;
138136
137+ localMovePhase .run ();
138+ //if you do swaps, no convergence
139+ boolean localPhaseConverged = localMovePhase .swaps == 0 ;
139140 progressTracker .endSubTask ("Local Move" );
140141
141142 progressTracker .beginSubTask ("Modularity Computation" );
@@ -244,11 +245,11 @@ public LeidenResult compute() {
244245
245246 @ NotNull
246247 private LeidenResult getLeidenResult (boolean didConverge , int iteration ) {
247- boolean seedIsOptimal = didConverge && seedValues . isPresent () && iteration == 0 ;
248- if (seedIsOptimal ) {
248+ boolean stoppedAtFirstIteration = didConverge && iteration == 0 ;
249+ if (stoppedAtFirstIteration ) {
249250 var modularity = modularities [0 ];
250251 return LeidenResult .of (
251- LeidenUtils .createSeedCommunities (rootGraph .nodeCount (), seedValues .orElse (null )),
252+ LeidenUtils .createStartingCommunities (rootGraph .nodeCount (), seedValues .orElse (null )),
252253 1 ,
253254 didConverge ,
254255 null ,
@@ -266,8 +267,8 @@ private LeidenResult getLeidenResult(boolean didConverge, int iteration) {
266267 );
267268 }
268269 }
269-
270- private boolean updateModularity (
270+
271+ private void updateModularity (
271272 Graph workingGraph ,
272273 HugeLongArray localMoveCommunities ,
273274 HugeDoubleArray localMoveCommunityVolumes ,
@@ -276,8 +277,10 @@ private boolean updateModularity(
276277 boolean localPhaseConverged ,
277278 int iteration
278279 ) {
279- boolean seedIsOptimal = localPhaseConverged && seedValues .isPresent () && iteration == 0 ;
280- boolean shouldCalculateModularity = !localPhaseConverged || seedIsOptimal ;
280+ //will calculate modularity only if:
281+ // - the local phase has not converged (i.e., no swaps done)
282+ //- or we terminate in the first iteration (i.e., given seeding is optimal, graph is empty etc)
283+ boolean shouldCalculateModularity = !localPhaseConverged || iteration == 0 ;
281284
282285 if (shouldCalculateModularity ) {
283286 modularities [iteration ] = ModularityComputer .compute (
@@ -291,7 +294,6 @@ private boolean updateModularity(
291294 progressTracker
292295 );
293296 }
294- return seedIsOptimal ;
295297 }
296298
297299 private double initVolumes (
0 commit comments