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 |
1018 |
1049 |
|
2.16.0 |
–output |
output |
State or multilayer input with -o network: the file is named |
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 |