b1dsp(), b2dsp(), gwb1dsp(), and gwb2dsp() terms have been added, paralleling their ergm counterparts.
Multilayer and multinetwork terms and functions such as gofN(), will now produce a sensible message if passed networks without multilayer and/or multinetwork metadata they require. Thanks to GitHub user @liluqi1991 for flagging this issue.
gwespL(), espL(), and other terms from that family now correctly recycle their Ls.twopath= argument: if only one layer specification is given, it is used for both legs of the two-path.
Layer logic implementation was reversing the arguments of noncommutative operators and functions.
Layer() now consistently uses the network and vertex attributes from the first observed layer for everything, and ignores and/or overwrites those of the other layers.
When nesting network-combiners such as Networks() and Layer(), it is now an error to attempt to reference them out of order. That is, Networks(Layer(...))~L(~N(...)) is no longer allowed, since the multilayer specification is performed within the multinetwork.
Layer() and Networks() documentation now informs the user that the resulting data structure's vertex and network attributes should be treated as read-only. This may change in the future.
Support for networkLite and other alternative implementations of network's API has been added.
gwespL(), gwdspL(), gwnspL(), when fixed=FALSE and other functions using a cutoff now terminate with an error if they encounter a network that exceeds it.
*degreeL() family of terms has been removed. It never worked correctly and does not have a clear use case.
blockdiag and blockdiagTNT proposals have been removed, as their performance is no better than the DyadGen-based dyadic constraint proposals.
twostarL() no longer require the type= argument if called on an undirected network.
A number of improvements and optimizations to the multilayer API.
The exported Layer Logic API has been documented.
marg_cond_sim() now has an argument for how to handle when the constrained sample has a higher variance than the unconstrained. (Previously, it would always throw an error.)
Fixes for documentation issues flagged by CRAN and compatibility with the latest roxygen2.
Some citations updated.
When the optimized block-diagonal proposals encounter an initial network with off-block-diagonal edges, they no longer throw an error but rather use the ergm 4.6.0+ proposal declination API.
gofN objects now how augment and autoplot methods for Tidyverse and ggplot2 diagnostics.
plot.gofN() and autoplot.gofN() are now more flexible in how they label extreme points via the id.label= argument.
Fixed how parallel processing settings are handled in gofN() and marg_cond_sim().
marg_cond_sim() now expects control.gofN() as its control= list.
Some unit test tolerances have been loosed, making false positives less likely.
Miscellaneous documentation fixes.
Tweaks to the combine_networks() API to make it more robust, space-efficient, and flexible; in particular to make it possible for tergm to depend on it rather than maintaining its own copy.
In the Layer(nw, attrlist) specification, attrlist= can now be a named vector, in which case the layers are renamed accordingly.
Tolerance for some tests of the N() operator has been increased. This fixes a sporadic issue on M-series MacOS systems due to using a different linear algebra library.
A bug in gofN() for valued ERGMs has been fixed.
A number of optimisations in multilayer ERGM code.
[Layer] Logic backend now uses integer arithmetic, for a significant speed improvement, at the cost of behaviour slightly inconsistent with R's, such as / behaving as %/% (integer division).
Initial public release.