Result changes

Some fixes change what Infomap reports on purpose. Use this list to tell an intended change from a regression when you compare two versions, for example to rerun a published analysis or to check test outputs.

The same rows are in RESULT_CHANGES.csv at the root of the repository, for scripts to read. The CHANGELOG lists every change. This page lists only the ones that change results.

Columns

  • version: the first release with the change, or unreleased.

  • flags: the command-line flags, by long name, that a run must use for the row to apply. Python and R take the same options with underscores. An empty field means the row does not depend on a flag: the description says which input or API call it applies to.

  • changes: one or more of these words, separated by spaces:

    • codelength: the reported codelength.

    • partition: the modules found.

    • module-ids: module numbering or node order, with the same partition.

    • levels: the number of levels in the tree.

    • output: other output, such as file names, header lines or JSON fields.

    • warning: a new warning.

    • error: the run is refused where it gave a result before.

    • runs: the run gives a result where it was refused or crashed before.

  • issue and pr: GitHub issue and pull request numbers, separated by spaces.

Changes

version

flags

changes

description

issue

pr

2.16.0

codelength

Library API: a partition re-initialised on the same instance (a deep tree then a flat one) is scored with the leaf network’s terms. The codelength written to .tree now matches the console.

831

998

2.16.0

–num-trials

output

JSON modules[].codelength is filled in when the best of several trials is restored, also with –parallel-trials. It was 0 or stale.

1002

1014

2.16.0

–entropy-corrected

codelength partition

The Miller-Madow correction is counted in bits, not nats. A module that holds the whole network has no exit codeword, and the root index codebook has one parameter less.

830

1033

2.16.0

–timing-json

output

trials[].num_levels is the depth of the tree, not of its first branch. Differs on ragged trees.

1036

1040

2.16.0

–trial-results

output

num_levels is the depth of the tree, not of its first branch. Differs on ragged trees.

1036

1040

2.16.0

–variable-markov-damping

codelength partition

Damping strictly between 0 and 1 uses a smooth interpolation shape. Damping 0, 1 (the default) and above 1 are unchanged.

1044

2.16.0

error

State or multilayer input: a run that would write over an input named _states. is refused (exit 3). It used to overwrite the input.

1018

1049

2.16.0

–output

output

State or multilayer input with -o network: the file is named _states_as_physical.net, and a multilayer dump declares *Arcs.

1050

2.16.0

–cluster-data

warning

Warns once when a .clu file repeats node ids, such as a physical .clu of a higher-order network.

1039

1051

2.16.0

–preferred-number-of-modules

codelength

A scored partition (–no-infomap with –cluster-data, or a restored best trial) includes the module-count term.

1021

1052

2.16.0

–regularized

error

Multilayer input, FEATURES=regularized-multilayer build only: a flow that does not sum to 1 stops the run with an error (exit 7) instead of a crash (exit 134). examples/networks/multilayer_intra_inter.net is one such input.

1019

1053

2.16.0

–preferred-number-of-modules

codelength

The one-level codelength and the relative savings include the module-count term for one module.

1020

1054

2.16.0

output

Tree, ftree and clu headers gain a ‘# seed’ line, and the JSON tree gains seed, trials and numTrials. With –parallel-trials –print-all-trials each trial is written to its own file.

1026

1055

2.16.0

–trial-offset

error

–no-overwrite and the input-overwrite check use a shard’s real per-trial file names, so a collision is refused before anything is written.

1062

2.16.0

codelength partition levels module-ids

Multilevel runs (not –two-level): after the recursive search, intermediate modules that do not pay for their index codebook are dissolved. Codelength drops about 0.2-0.5% on the benchmarks, and the number of top modules can grow. Skipped under –preferred-number-of-modules and an active –preferred-number-of-levels.

1074

1075

2.16.0

–cluster-data

codelength partition error

A one-level row in a tree file is a module of one node, whatever the row order. A bare row next to a deeper row in the same top module is refused.

1067

1082

2.16.0

output

Python API: multilayer networks from networkx and igraph keep their state node names (Result.state_names).

798

1091

2.16.0

–pretty

warning

–pretty and –no-pretty warn that they have no effect.

915

1092

2.16.0

output

The input fingerprint hashes the whole file, so its value changes for every input. Tree, ftree, clu and JSON output gain input, cluster data and config fingerprints. Superseded in 2.16.0 by #1172.

1026

1096

2.16.0

codelength partition

The aggregation loop stops at the first pass that merges nothing. This shifts the random stream, so results for a given seed can change. No average cost measured. –meta-data runs that hung now finish.

1134

1142

2.16.0

–meta-data

codelength partition

Each consolidated module keeps its own metadata collection during coarse-tune. Metadata runs optimise the right objective; air30k is about 2.5% shorter. With –two-level, v2.8.2 to v2.15.1 could report a codelength below that of the tree they returned.

1138

1143

2.16.0

–timing-json

output

threads_used reports the largest OpenMP team the run started. The console Runtime line no longer prints a thread count.

1145

1148

2.16.0

–regularized –regularization-strength

codelength partition runs

Strength 0 on networks with nodes without out-links: directed runs no longer fail with degenerate flow, and undirected isolated nodes no longer get NaN flow.

1144

1149

2.16.0

codelength partition levels

Multilevel runs at the default –fast-hierarchical-solution 0, not from a seed tree deeper than two levels: when the recursive search ends above the super-level tree, that tree is reported instead. The codelength never rises. Seen mostly on state (memory) input; 1 of 60 first-order seeds changed.

837

1159

2.16.0

–meta-data

codelength partition

Scoring a move no longer leaves rounding residue in the module’s metadata. Near-ties can break differently, within 0.001%.

1134

1160

2.16.0

–regularized

codelength partition runs

Parallel self-links count once in the degree sum. A node with only parallel self-links no longer gives negative flow or codelength 0.

1162

2.16.0

output

The input fingerprint is XXH64 (the same value as xxhsum -H64). It differs from 2.15 and from #1096.

1167

1172

2.16.0

–meta-data

error

A metadata file with no records, or a directory, is refused (exit 2) instead of crashing.

1173

2.16.0

–entropy-corrected

codelength partition

Multilevel trees: each module of modules is charged its exit codeword in the correction. Best-of-N can pick a different trial.

1176

1178

2.16.0

–preferred-number-of-modules

codelength partition

Multilevel trees: the reported codelength includes the module-count term. Best-of-N can pick a different trial.

1176

1178

2.16.0

–to-nodes

codelength partition

Node weights set through the API (add_node with a weight) are used. State input whose state ids equal the physical ids keeps its node weights.

1183

1185

2.16.0

–use-node-weights-as-flow

codelength partition

Node weights set through the API (add_node with a weight) are used. State input whose state ids equal the physical ids keeps its node weights.

1183

1185

2.16.0

–recorded-teleportation

codelength partition

A node whose only out-link is a self-link is not dangling. Only networks with such a node change.

1182

1186

2.16.0

–markov-time

runs

Markov time 1e7 and above is no longer refused for negative module flow.

1192

1193

2.16.0

–recorded-teleportation –flow-model

codelength partition warning

Under undirdir, outdirdir, rawdir and precomputed, –recorded-teleportation has no effect and warns.

1188

1194

2.16.0

–recorded-teleportation

codelength output

Undirected flow: a tree of three or more levels built from –cluster-data, a deep seed or a restored best trial is scored as without the option. The reported and written codelengths match, also with –no-infomap.

1210

1194

2.16.0

–regularized –flow-model

codelength partition warning

Under undirdir, outdirdir, rawdir and precomputed, –regularized has no effect and warns.

1189

1196

2.16.0

error

Bipartite input: a link that does not cross the bipartite start id is refused (exit 2).

1190

1198

2.16.0

–multilayer-relax-to-self

codelength partition

Applies only to multilayer input. On state input it has no effect.

1191

1199

2.16.0

–recorded-teleportation

codelength partition

The dangling flow sum is reset on every run. With –parallel-trials, or a second run on one instance, results match a single serial run.

1201

1211

2.16.0

–directed –regularized

codelength partition

A self-link counts as one arc in the prior’s average link weight. Only networks with self-links change.

1204

1212

2.16.0

–num-trials

module-ids

When the best trial is restored (it is not the last trial, or –parallel-trials is used), module ids and node order match a one-trial run with the same seed. Two-level trees. Partition and codelength are unchanged.

1202

1213

2.16.0

–regularized

codelength partition

Undirected input that lists a pair in both directions counts it once in the prior’s degree.

1203

1214

2.16.0

–cluster-data

error

A tree row whose path is not positive integers separated by ‘:’ is refused (exit 2). Some of these crashed or were misread before.

1208

1215

2.16.0

codelength partition

Hard partitions (library API, clusterDataIsHard): a partition that leaves nodes out stays hard.

1206

1217

2.16.0

codelength partition

Hard partitions (library API, clusterDataIsHard): the run reports the codelength of the tree it returns, and –no-infomap returns the hard modules.

1207

1218

2.16.0

codelength partition

Hard partitions (library API, clusterDataIsHard): the super-level fallback from #1159 also applies.

1229

1222

2.16.0

–fast-hierarchical-solution –cluster-data

runs

A ragged seed tree deeper than two levels no longer crashes.

1216

1223

2.16.0

–directed –recorded-teleportation –use-node-weights-as-flow

error

Teleportation to links (not –to-nodes): bipartite input whose links all run from the primary to the feature side is refused with degenerate flow.

1232

1239

2.16.0

–flow-model

warning

undirdir on multilayer input with intra-layer links warns that it has no effect.

1233

1240

2.16.0

–cluster-data

codelength partition

State or multilayer input with a seed tree deeper than two levels: every module of the tree gets its physical nodes, so the reported codelength is that of the tree.

1209

1241

2.16.0

–recorded-teleportation

codelength partition

Recorded link flow uses the configured teleportation rate. Codelengths move by at most 4e-11, and near-ties can pick another partition.

1184

1242

2.16.0

–teleportation-probability

codelength partition

Directed flow at -p 1: the teleportation rate is kept at or below 1 inside the power iteration, so flow no longer drifts. This can change the search outcome.

1184

1242

2.16.0

–fast-hierarchical-solution –cluster-data

codelength partition

With a seed tree deeper than two levels, the reported codelength is that of the returned tree. Best-of-N can pick a different trial.

1230

1243

2.16.0

–recorded-teleportation

codelength partition

Bipartite input: teleportation weights are renormalised after the feature nodes are uncoded. Most visible with –to-nodes; teleportation to links changes when the coded nodes have teleportation weight.

1175

1246

2.16.0

–regularized

codelength partition error runs

Bipartite input: teleportation weights are renormalised after the feature nodes are uncoded, and leaf enter and exit flow come from the links.

1175

1246 1247

2.16.0

–regularized –use-node-weights-as-flow

codelength partition runs

Leaf enter and exit flow come from the links. Some runs refused for negative flow before now run.

1189

1247

2.16.0

–regularized –markov-time

codelength partition runs

Markov time other than 1: leaf enter and exit flow come from the links. Most runs at t > 1 were refused before and now run.

1231

1247

2.16.0

–regularized –variable-markov-time

codelength partition runs

Leaf enter and exit flow come from the links. Some runs refused for negative flow before now run.

1191

1247

2.16.0

partition error

Hard partitions (library API, clusterDataIsHard) from a .tree, .ftree or JSON path: a one-level tree stays hard, and a deeper tree is refused.

1244

1251

2.16.0

–directed –recorded-teleportation –use-node-weights-as-flow

error

Teleportation to links (not –to-nodes): a network without links is refused with degenerate flow. It used to report a codelength above the one-level codelength.

1253

1254

2.16.0

–variable-markov-time –use-node-weights-as-flow

codelength runs

The scale is floored at an effective degree of 1. Networks with isolated nodes are no longer refused for negative flow.

1191

1255

2.16.0

–variable-markov-time –regularized

codelength partition

The scale is floored at an effective degree of 1. Networks with isolated nodes no longer run on negative link flow.

1191

1255

2.16.0

–cluster-data

output

A .clu, .tree or .ftree file that cannot be read or parsed exits with code 2 (input error), not 7 (internal error). Python raises NetworkParseError instead of InfomapError, and the JS Node run() and the npx bin report status 2.

1263

1269

2.16.0

–flow-model

output

–flow-model precomputed with input that has no node flow exits with code 2 (input error), not 7 (internal error). Python still raises InfomapError.

1269

2.16.0

–variable-markov-time

codelength partition

Undirected input: each link takes the larger local scale of its own two ends, not the running maximum over the links listed before it, and a pair listed both ways counts once in the total degree. Results no longer depend on how the links are listed. Under undirdir only the per-link change applies; ninetriangles goes from 3.002 to 3.268 bits there, with another partition.

1264

1270

2.16.0

–meta-data-unweighted –cluster-data

codelength partition

A tree deeper than two levels: each node weighs 1/N in the metadata term, not 1/(number of top modules). Re-scoring a tree gives the codelength the run that wrote it reported (ninetriangles: 5.07 bits, not 24.88), and a search seeded with it can end at another partition.

1271

1272

2.16.0

–fast-hierarchical-solution –cluster-data

codelength partition

Level 1 on state or multilayer input with a seed tree deeper than two levels: the fine-tuned sub modules get their physical nodes. The reported codelength is that of the returned tree, and the search can end at another tree.

1262

1276

2.16.0

–cluster-data

error

Multilayer input whose expansion is the identity runs first-order: Infomap reads back its own .clu, _states.clu and _states.tree. They were refused for a missing layer id column.

1273

1277

2.16.0

codelength partition

State and multilayer input, –regularized included: a sub-search codes the exit from its module, as on first-order input. The search can end at another tree, lower or higher.

1282

1286

2.16.0

–regularized

codelength partition

Multilayer input, FEATURES=regularized-multilayer build only: the one-module fallback compares the search with the codelength the one-module tree has, not the one-level codelength. Runs that fell back to one module now keep the modules the search found, and the reported codelength matches the written tree.

1285

1289

2.16.0

–entropy-corrected

codelength partition

Multilevel search: a sub-module or super-module search charges the correction for the nodes of the network it partitions, not the whole network. It falls back to one module less often, so trees can come out deeper.

1283

1291

2.16.0

–preferred-number-of-modules

codelength

A network with one node reports the codelength of its tree, |1 - K_pref| bits. It reported 0.

1293

1297

2.16.0

–preferred-number-of-modules

codelength partition

The preference counts the top modules only. Sub-searches, including the coarse-tune ones of a two-level run, no longer charge it on their own module count, so a module of modules no longer gets exactly K children. Most changed runs end lower.

1292

1298

2.16.0

–entropy-corrected

codelength partition

A network without links reports the codelength it has without the correction, one module at 0 bits, and writes its tree. It reported inf or nan and wrote nothing.

1296

1300

2.16.0

–multilayer-relax-to-self –recorded-teleportation

codelength partition

Teleportation to links lands on each state in proportion to its in-weight in the default state network, so the flow matches the default model’s. It used the compact network’s in-weights.

1313

1342

2.16.0

–multilayer-relax-to-self

codelength partition

Explicit inter-layer links: a link to a layer where the node has no intra-layer out-links is dropped, as in the default model. It lost the flow that crossed it, so node flow summed to less than 1.

1314

1342

2.16.0

–directed –bipartite-teleportation –recorded-teleportation

codelength partition

Feature -> primary links carry the flow through the feature, split by link weight. They had zero flow.

1310

1321

2.16.0

–directed –bipartite-teleportation

codelength

Unrecorded teleportation with a dangling primary node: node flow sums to 1. It summed to 1 minus the dangling flow, with a warning.

1309

1321

2.16.0

–multilayer-relax-by-jsd –multilayer-relax-limit –multilayer-relax-limit-up –multilayer-relax-limit-down

codelength partition

Multilayer *Intra input without inter-layer links: the relax limits under –multilayer-relax-by-jsd apply in each direction, limit 0 keeps the intra-layer links, and the one-sided limits are applied. Before, the limit reached one layer fewer up than down, limit 0 gave a network without links, and -up/-down were ignored.

1323

1340

2.16.0

–cluster-data

error

A tree with state ids that repeats a state id is refused (exit 2). A multi-level tree crashed, and a two-level tree kept the last row.

1335

1341

2.16.0

–variable-markov-time

codelength partition

The largest local scale is floored at –variable-markov-min-scale, as each local scale is. When no node reached an effective degree of 2, every link was scaled below Markov time 1, and to 0 at degree 1: two disjoint links reported 0 bits. Such networks now give the result they have without the option.

1191

1334

2.16.0

–multilayer-relax-limit-up –multilayer-relax-limit-down

codelength partition

Multilayer *Intra input without inter-layer links: relaxation without a limit reaches every layer. Layers whose ids differ by more than the number of layers (1 and 7, or years) did not couple, also in the unset direction of a one-sided limit.

1322

1339

unreleased

–regularized

codelength partition

Multilayer input whose layers hold different nodes, FEATURES=regularized-multilayer build only: the prior and the teleportation span the nodes each layer holds, so node flow sums to 1. examples/networks/multilayer_intra_inter.net runs instead of stopping with exit 7, and examples/networks/multilayer_intra.net ends at one module instead of two.

1019

1101

unreleased

–regularized

codelength partition

Weighted multilayer input, FEATURES=regularized-multilayer build only: the intra-layer prior follows the continuous configuration model, as single-layer –regularized does. It weighted every target node equally.

1101

unreleased

–regularized –markov-time

codelength partition runs

Multilayer input, FEATURES=regularized-multilayer build only: leaf enter and exit flow come from the links, without the flow on the inter-layer self-links. A module holding every node has no exit flow, and runs at a Markov time above 1 are no longer refused for negative flow. examples/networks/multilayer_intra.net reports its one-level codelength, 2.296 bits, instead of 2.672.

1287

1317

unreleased

–regularized –no-self-links

codelength partition runs

Multilayer input, FEATURES=regularized-multilayer build only: the flow follows the walk that teleports to the other nodes in its layer. The power iteration lost flow wherever the inter-layer step moved it, so runs such as examples/networks/multilayer_intra.net stopped with exit 7, and intra-layer link flows came out short, so a state’s enter and exit flow did not balance. examples/networks/multilayer_intra_inter.net goes from 1.943 to 1.957 bits.

1363

1364

unreleased

–regularized –num-trials –cluster-data

codelength output

Multilayer input, FEATURES=regularized-multilayer build only: a tree deeper than two levels, read with –cluster-data or restored as the best of several trials, prices each module with the teleportation within its layers, as the search does. A restored winner wrote a codelength 0.02 bits below the one the search reported for it on a 14280-state network, and examples/networks/multilayer_intra.net read a three-level tree back 0.8 bits low.

1022

1365

unreleased

partition output

Undirected input that lists a link as a b and b a, first-order or state: the run sums the pair into one link, as one listing of a b with the summed weight. The summary’s link count and the -o flow network count and list the pair once, so 1 2, 2 1, 2 3 reports 2 links instead of 3; the input section still shows the links as entered. The codelength of a partition is unchanged, since #1203 and #1264 already counted the pair once, but the search reads a different link list and can end in another partition: columnar-benchmark/polblogs.txt with -N 5 –seed 1 goes from 8.607024 to 8.606698 bits. –flow-model undirdir and the directed models keep both directions.

1366

1367