0.3.0
There are several (very minor) breaking changes in this update, plus a whole lot of quality-of-life improvements.
High-level project changes:
- Switch to Rust edition
2021
. - Remove
.githooks
andshields_up
feature due to lack of use. - Add dependency on
num-bigint
andnum-traits
to enable support for infinite-precision set cardinality computations.
Other API changes:
- [potentially breaking]
BooleanNetwork::to_bnet
now accepts aboolean
argument that forces the method to rename network variables when they do not have bnet-compatible names. To migrate, just addfalse
as argument value. - Added
BooleanNetwork::num_implicit_parameters
andBooleanNetwork::implicit_parameters
to easily allow enumeration of erased update functions. - Added
BooleanNetwork::infer_valid_graph
that constructs the most specificRegulatoryGraph
that is still consistent with every Boolean function admissible in this network. - Added several utility functions to
FnUpdate
, specificallyFnUpdate::evaluate
,FnUpdate::is_specialisation_of
,FnUpdate::walk_postorder
andFnUpdate::substitute
. - [potentially breaking]
RegulatoryGraph
now uses a newPartialEq
implementation that does not require equivalent ordering of regulations within the graph. This generally shouldn't break anything important, because any graphs that were equivalent are still equivalent, and two graphs that became equivalent due to this change are functionally equivalent in every way except for iteration order inRegulatoryGraph::regulations
. - Added
RegulatoryGraph::to_dot
andRegulatoryGraph::write_as_dot
to allow quick conversion to.dot
files for visualisation (e.g. in Python notebooks). - [potentially breaking] Added
exact_cardinality
methods to all symbolic sets, usingnum-bigint
. Additionally, allapprox_cardinality
methods will also attempt to use the exact method (and covert tof64
afterwards) if the approximate method returnsInf
orNaN
. As a consequence, cases that returnedInf
with the previous implementation can now actually return a meaningful number if the exact value is small enough. In other words, now, ifapprox_cardinality
returnsInf
, you can be sure that there are indeed more thanf64::MAX
values within the set, whereas before,Inf
could be returned due to overflow during computation. - Added
SymbolicAsyncGraph::mk_subspace
andSymbolicAsyncGraph::mk_partial_vertex
to make the creation of restricted symbolic sets easier. - Added
SymbolicAsyncGraph::restrict
that creates a copy of the original graph that is induced by the given set of vertices. That is, the resulting graph has fewer states and transitions. - Added
SymbolicAsyncGraph::mk_subnetwork_colors
, that can (for a limited syntactically verifiable set of cases) identify the specific parameter valuation that corresponds to the givenBooleanNetwork
within the parameter space of this (less restrictive)SymbolicAsyncGraph
. - Added
SymbolicAsyncGraph::reach_forward
,SymbolicAsyncGraph::reach_backward
,SymbolicAsyncGraph::trap_forward
andSymbolicAsyncGraph::trap_backward
that provide a "reference" implementation for basic reachability procedures. - All variable-specific transition operators in
SymbolicAsyncGraph
now use only one (ternary) symbolic operation, which reduces the overhead in many cases. Furthermore, a few new operators were added (var_post_out
andvar_pre_out
).