Skip to content

0.3.0

Compare
Choose a tag to compare
@daemontus daemontus released this 04 May 15:54

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 and shields_up feature due to lack of use.
  • Add dependency on num-bigint and num-traits to enable support for infinite-precision set cardinality computations.

Other API changes:

  • [potentially breaking] BooleanNetwork::to_bnet now accepts a boolean argument that forces the method to rename network variables when they do not have bnet-compatible names. To migrate, just add false as argument value.
  • Added BooleanNetwork::num_implicit_parameters and BooleanNetwork::implicit_parameters to easily allow enumeration of erased update functions.
  • Added BooleanNetwork::infer_valid_graph that constructs the most specific RegulatoryGraph that is still consistent with every Boolean function admissible in this network.
  • Added several utility functions to FnUpdate, specifically FnUpdate::evaluate, FnUpdate::is_specialisation_of, FnUpdate::walk_postorder and FnUpdate::substitute.
  • [potentially breaking] RegulatoryGraph now uses a new PartialEq 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 in RegulatoryGraph::regulations.
  • Added RegulatoryGraph::to_dot and RegulatoryGraph::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, using num-bigint. Additionally, all approx_cardinality methods will also attempt to use the exact method (and covert to f64 afterwards) if the approximate method returns Inf or NaN. As a consequence, cases that returned Inf with the previous implementation can now actually return a meaningful number if the exact value is small enough. In other words, now, if approx_cardinality returns Inf, you can be sure that there are indeed more than f64::MAX values within the set, whereas before, Inf could be returned due to overflow during computation.
  • Added SymbolicAsyncGraph::mk_subspace and SymbolicAsyncGraph::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 given BooleanNetwork within the parameter space of this (less restrictive) SymbolicAsyncGraph.
  • Added SymbolicAsyncGraph::reach_forward, SymbolicAsyncGraph::reach_backward, SymbolicAsyncGraph::trap_forward and SymbolicAsyncGraph::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 and var_pre_out).