Skip to content

@graphty/graphty-element / session / CaveatCode

Type Alias: CaveatCode ​

CaveatCode = "weights.unread" | "route.found" | "route.none" | "iteration.stop-rule" | "iteration.cap-reached" | "partition.unscored" | "community.resolution" | "paths.counted-exactly" | "paths.hop-lengths" | "tree.edge-count" | "scope.whole-graph" | "scope.induced-subgraph" | "scope.subgraph" | "parallel-edges.merged" | "input.empty" | "sampled.instead-of-exact" | "sampled.exact-past-cap" | "sampled.still-past-cap" | "astar.straight-line" | "betweenness.sampled" | "betweenness.halved" | "edge-betweenness.sampled" | "bfs.origin" | "bfs.target-reached" | "bfs.target-unreached" | "dfs.walk" | "closeness.sampled" | "closeness.exact" | "closeness.hop-distances" | "closeness.reciprocal" | "clustering-coefficient.local" | "clustering-coefficient.simple" | "components.weak" | "components.strong" | "components.undirected-strong" | "degree.as-declared" | "eigenvector.converged" | "eigenvector.scored-by" | "floyd-warshall.eccentricity" | "flow.ends" | "flow.ends-chosen" | "flow.no-path" | "girvan-newman.no-cut" | "girvan-newman.best-of" | "hierarchical.hop-distances" | "hierarchical.fewer-clusters" | "hits.published-score" | "hits.unit-length" | "hits.max-scaled" | "k-core.undirected" | "k-core.loops-and-parallels" | "katz.attenuation" | "katz.direction" | "link-prediction.candidates" | "matching.not-bipartite" | "matching.partnered" | "min-cut.karger" | "min-cut.sides" | "min-cut.end-chosen" | "negative-cycle.no-distance" | "negative-cycle.no-route" | "pagerank.damping" | "pagerank.sums-to-one" | "pagerank.undirected" | "pagerank.personalized" | "pagerank.personalization-unmatched" | "pagerank.personalization-outside"

Defined in: graphty-element/src/session/runs/caveatFacts.ts:126

What one remark in a run's Caveats.facts says. Each code carries these params ({} when none is listed). A node id is the data's own id, a string or a number.

Shared by several algorithms:

  • weights.unread -- edge weights were not read.
  • route.found -- the run measured the route between two nodes: { source, target }.
  • route.none -- no route runs between two nodes: { source, target }.
  • iteration.stop-rule -- iteration stops at a tolerance or a pass count, whichever comes first: { tolerance, maxIterations }.
  • iteration.cap-reached -- it stopped at the pass cap without reaching the tolerance: { maxIterations }.
  • partition.unscored -- the algorithm does not score its own partition, so it reports no modularity: { algorithm }, its catalog key.
  • community.resolution -- the resolution the partition was found at: { resolution }.
  • paths.counted-exactly -- every shortest path was counted exactly, over the graph read as undirected.
  • paths.hop-lengths -- path lengths count edges, and edge weights were not read.
  • tree.edge-count -- the spanning tree's size: { edges }.

About what the run computed on, added to any algorithm's run:

  • scope.whole-graph -- computed on the whole graph, values kept for the scope only.
  • scope.induced-subgraph -- computed on the subgraph the scope's nodes induce: { nodes }.
  • scope.subgraph -- computed on the scope's nodes and edges: { nodes, edges }.
  • parallel-edges.merged -- parallel edges were merged into one, every member of a group carrying the merged value: { count, policy }, how many were merged and how their weights combined ("sum", "min" or "max").
  • input.empty -- the graph held nothing for the algorithm to measure.
  • sampled.instead-of-exact -- the run sampled rather than computed exactly: { method, name, sampleSize, nodes }, the approximate method's id and catalog name, the sample, and the nodes it was drawn from.
  • sampled.exact-past-cap -- an exact run was estimated past the cost cap, so the approximate method ran: { seconds, cap }.
  • sampled.still-past-cap -- the sampled run is itself estimated past the cap: { seconds, cap }.

One algorithm's own:

  • astar.straight-line -- A* was steered by straight-line distance, so its route is the cheapest only when every edge weighs at least the distance it spans.
  • betweenness.sampled -- betweenness was estimated from sampled sources, unscaled: { sources, nodes }.
  • betweenness.halved -- the raw counts were halved, because an undirected shortest path is reached from both ends.
  • edge-betweenness.sampled -- edge betweenness was estimated from sampled sources, unscaled: { sources, nodes }.
  • bfs.origin -- the walk went outwards from a node, which is level 0: { source }.
  • bfs.target-reached -- the walk stopped at its target: { target }.
  • bfs.target-unreached -- the walk never reached its target, so it covered everything reachable: { target }.
  • dfs.walk -- the walk's start and when it recorded a node: { source, order }, order"pre" (as reached) or "post" (as left).
  • closeness.sampled -- closeness was estimated from sampled sources, unscaled: { sources, nodes }.
  • closeness.exact -- distances are exact, over the graph read as undirected.
  • closeness.hop-distances -- distance counts edges, and edge weights were not read.
  • closeness.reciprocal -- a score is the reciprocal of the summed distance, uncorrected for how many nodes are reachable.
  • clustering-coefficient.local -- each value is the node's local clustering coefficient.
  • clustering-coefficient.simple -- the graph was read as simple and undirected.
  • components.weak -- weak components: an edge joins its two nodes whichever way it points.
  • components.strong -- strong components: a directed path must run each way.
  • components.undirected-strong -- the graph is undirected, so its strong components are its connected ones.
  • degree.as-declared -- degree was counted as the records declared the edges.
  • eigenvector.converged -- power iteration converged: { tolerance, maxIterations }.
  • eigenvector.scored-by -- which nodes score a node: { mode }, "in" (the nodes pointing at it) or anything else (the nodes it points at).
  • floyd-warshall.eccentricity -- every pair was measured, and a node's value is its eccentricity.
  • flow.ends -- the flow measured: { source, sink }.
  • flow.ends-chosen -- the source or sink was chosen automatically.
  • flow.no-path -- no directed path runs from source to sink: { source, sink }.
  • girvan-newman.no-cut -- no edge could be cut, so every node is its own community.
  • girvan-newman.best-of -- the best of several successive cuts was kept: { cuts }.
  • hierarchical.hop-distances -- distances are hop counts, and edge weights were not read.
  • hierarchical.fewer-clusters -- fewer clusters than asked for: { asked, allowed }.
  • hits.published-score -- which HITS score is the published value: { mode }, "in" (authority), "out" (hub) or "total" (their average).
  • hits.unit-length -- the hub and authority vectors have unit length.
  • hits.max-scaled -- the hub and authority vectors were divided by their own highest score.
  • k-core.undirected -- counted over the graph read as undirected; edge weights not read.
  • k-core.loops-and-parallels -- a self-loop does not count, and parallel edges count once.
  • katz.attenuation -- every node's base influence and the per-step attenuation: { beta, alpha }.
  • katz.direction -- which way paths were counted: { mode }, "in", "out" or "total".
  • link-prediction.candidates -- only unjoined pairs sharing a neighbor were scored.
  • matching.not-bipartite -- the graph has no two sides, so nothing was paired.
  • matching.partnered -- how many nodes found a partner: { count }.
  • min-cut.karger -- Karger's method is randomized.
  • min-cut.sides -- the size of each side of the cut: { first, second }.
  • min-cut.end-chosen -- only one end was set, so the other was chosen: { source, sink }.
  • negative-cycle.no-distance -- a negative cycle leaves no distance defined, so none was published.
  • negative-cycle.no-route -- a negative cycle makes every distance past it meaningless, so no route is marked.
  • pagerank.damping -- the probability of following a link: { dampingFactor }.
  • pagerank.sums-to-one -- the ranks sum to 1.
  • pagerank.undirected -- the graph is undirected, so every edge carries rank both ways.
  • pagerank.personalized -- the random jump lands on the personalization vector's nodes.
  • pagerank.personalization-unmatched -- no personalization entry applies, so the jump lands anywhere.
  • pagerank.personalization-outside -- personalization entries naming nodes outside the graph were left out: { count }.

An algorithm registered from outside the element that writes notes in words has no facts for them: its sentences are in Caveats.notes only.

Since ​

3.18.0