Skip to content

Revdep Failures #2646

Description

@schochastics

Reverse dependency failures

32 reverse dependencies have live failures against the dev version of igraph. The full per-package analysis lives in revdep/problems-analysis.md. Grouped below by the underlying igraph change; each list tracks downstream PRs / issues.

Since #2834, each package's section is its own file — revdep/problems/<package>.md — and problems.md is their concatenation.

bfs(father = ) / dfs(father = ) defunct

The father argument was renamed to parent in igraph 2.2.0 and is now defunct; tidygraph passes it through to igraph::bfs() inside map_bfs* / map_dfs*, and the three packages below cascade through tidygraph.

tkplot() removed

The interactive Tk plotter advanced to deprecate_stop("3.0.0", "tkplot()"); affected packages are direct callers and need to switch to plot.igraph().

  • Boptbd [📧 EMAIL SENT]
  • c3net [📧 EMAIL SENT]
  • ggm [📧 EMAIL SENT] ✅
  • optbdmaeAT [📧 EMAIL SENT]
  • optrcdmaeAT [📧 EMAIL SENT]

layout.spring() defunct

Defunct since igraph 2.1.0; replacement is layout_with_fr().

  • comato [📧 EMAIL SENT]

hub.score() defunct

Defunct since igraph 2.0.0; replacement is hits_scores()$hub.

get.edge() removed

The function has been removed; replacement is ends().

eigen_centrality(scale = FALSE) defunct

Defunct since igraph 2.1.1 — normalization is always performed; the argument needs to be dropped from the call.

sample_degseq(method = "simple.no.multiple") defunct

The method value was renamed to "fast.heur.simple" in igraph 2.1.0; qgraph calls it directly, degreenet hits it via a fallback inside reedmolloy()'s retry loop.

get_edge_ids() matrix-vp orientation defunct

Since igraph 2.1.5 the matrix form of vp must be n × 2, not 2 × n; transpose with t() or pass a 2-column data frame.

Deprecation warnings leaking into checks

Multiple deprecated igraph names still emit warnings; for these packages the warnings break check output (FrF2: leaks into .Rout.save comparison → NOTE; R6causal: leaks at install → WARNING). Pre-emptive rename needed before the names become defunct.

  • FrF2 [📧 EMAIL SENT] ✅ (no longer failing as of 2026-08-05)
  • R6causal [📧 EMAIL SENT] — still failing

create_ring(width = ) deprecated → strict no-warning test fails

migraph's and netrics' tutorial tests assert no warning; create_ring(32, width = 2) (defined in manynet, which migraph Depends on) emits a deprecation warning from somewhere inside its as_matrix() / graph_from_adjacency_matrix() chain. Upstream owner is manynet, not migraph.

  • manynet (surfaces as a migraph test failure, and identically as a netrics one) [UNCLEAR]

Stricter integer validation in rewire_impl()

igraph's C interface now strictly rejects numeric values that are not exactly representable as integers; jewel computes niter = p * 0.05 (often fractional) and needs to integer-round before the rewire() call.

modularity() auto-uses "weight" edge attribute

modularity() now reads E(g)$weight by default when the attribute is present, changing computed values. Same class as the weights = NULL item below.

is_bipartite() stricter logical tests

The function is_bipartite() now checks if the type attribute is strictly logical or coercable to it


New in the 2026-08-05 revdep run

The 13 packages below appeared for the first time in the 2026-08-05 run. Unlike the groups above, most of these were ours — they trace to the ellipsis-move refactoring (#2757#2778) and #2677, not to a lifecycle advancement.

Triaged in full since; current state below.

✅ Empty arguments in ... hard-errored — igraph regression, fixed

Since the optional arguments moved behind ..., an empty argument in the call (a trailing comma, or a skipped positional slot from a magrittr . placement) reached the runtime argument matcher and errored:

Error in igraph::graph_from_adjacency_matrix(adjmatrix = x, mode = mode, weighted = TRUE, ) :
  argument is missing, with no default

Fixed by #2812, which removed the runtime matcher entirely and lets R match against the declared old signature. (#2808 was closed unmerged — this issue previously pointed at it.) A sweep of all 229 probeable generated blocks × 3 empty-slot shapes found no remaining divergence from 2.3.3.

  • tna ✅ — verified green, 215 s, no errors either side
  • lagdynamics ✅ — verified green (7 vignettes, 38 example blocks); not in the depth-1 revdep set, it reaches igraph through tna
  • modelbpp ✅ — verified green, 73 s
  • NetSci ✅ — verified green, 35 s

One narrow case survived and is fixed separately in #2850: a named empty slot, as_adjacency_matrix(g, a = ), tripped the two guards that read argument names without looking at values.

🔵 weights = NULL auto-uses the weight edge attribute — intentional

as_adjacency_matrix() and friends read E(g)$weight when no weight argument is given, where the old attr default did not:

g <- make_ring(4); E(g)$weight <- c(0.5, 0.7, 0.2, 0.9)
as_adjacency_matrix(g)   # dev: weights;  CRAN 2.3.3: all 1s

This is deliberate (#906, #1137, #2677) — it brings these functions in line with distances() and the rest of igraph — and consistency wins over the revdep breakage. It was not announced; #2847 adds a breaking-change NEWS entry with migration guidance. The migration is an all-NA weights: weights = NA, rep(NA, ecount(g)) or numeric() all mean unweighted.

The family is wider than the adjacency functions: as_biadjacency_matrix()/as_incidence_matrix()/get.incidence() too, and power_centrality()/bonpow(), which had no weight argument at all before — for those it is a new default rather than a renamed one.

Downstream, needs notifying:

  • sfclust — 11 test failures, as_adjacency_matrix() vs a 0/1 reference matrix
  • MetaNet — within_module_deg_z_score() and part_coeff() call as_adj(g, sparse = FALSE) in their weighted = FALSE branch, so Zi/Pi land outside every role band and zp_analyse() errors with object 'role' not found
  • SEMgraph — buildLevels() round-trips as_adjacency_matrix() into graph_from_adjacency_matrix(mode = "directed"), which reads the weights as edge multiplicities; weights in (0,1) become zero edges, ecount drops 18 → 1, and SEMdag(LO = "TL") hits subscript out of bounds

as_adjacency_matrix(attr = NULL) was separately broken — the deprecation shim forwarded it to weights = NULL, inverting it — and is fixed by #2842. That cleared bnstruct.

🔵 graph_from_literal() preserves the formula's edge order — intentional

#824 / #1981 made graph_from_literal() return edges in the order the formula declares them, where they used to be re-sorted by endpoint:

as_edgelist(graph_from_literal(X -+ Z -+ Y, Y -+ X, X -+ Y))
# 2.3.3: X-Z  X-Y  Z-Y  Y-X
# dev:   X-Z  Z-Y  Y-X  X-Y

#824 stays. Both packages below assign edge attributes positionally after building the graph, so the attributes land on different edges. Needs notifying:

  • cfid — import_graph() reads a 5×5 DAG where 4×4 is expected, and one edge comes back reversed; set_edge_attr(ig, "description", c(2, 4), "U") no longer marks the bidirected pair
  • glyrepr — E(graph)$linkage <- c(...) lands two -3 positions on the same vertex, so validate_glycan_graph() reports "Duplicated linkage positions"

#1981 also short-circuited simplify() itself, which changed the edge order for direct callers and suppressed edge.attr.comb. That part was not intended and is fixed by #2843, which clears:

  • archeofrag ✅ — sum(E(g)$weight) back to 64.95128999
  • gemtc ✅ — tree.relative.effect() signs match again

Both nonetheless have latent bugs of their own that our change exposed, and are being reported upstream: archeofrag's .euclidean.distance() mixes coordinate components across unrelated edges (returns 3.464102 3.464102 0 0 0 0 where the truth is 1 1 1 1 1 1, on CRAN igraph too), and gemtc's test uses is_equivalent_to(), which strips names and so pins an edge order rather than the result.


Note on ok in the revdep report

Before #2849, a package whose dependencies are not on CRAN was reported ok: R CMD check stopped at checking package dependencies in two or three seconds under both versions, the pair compared clean, and the verdict was "no new problems". 55 of run 31930350338's 984 ok results were that, SEMgraph among them — which is why its breakage above went unnoticed. Those are now reported depmissing.

A further 24 ok results are real checks of packages that are broken under CRAN igraph as well. ok means "no new problem", not "works".

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions