All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project uses Semantic Versioning.
- Docstrings to
builder.rs
,schema.rs
,affine.rs
,afftree.rs
,iter.rs
,node.rs
,graph.rs
,iter.rs
- Improved formatting of
AffFuncBase
, configurable throughFormatOptions
- Tests to
builder.rs
,affine.rs
,afftree.rs
- Section on development tools to
README.md
- LeakyReLU to
Layer
enum - Compilation error if both feature flags
minilp
andhighs
are supplied - License headers updated and added where missing
- Dependencies to
Cargo.toml
- Struct
Dot
for simpler formatting to graphviz's dot language - Struct
PerformanceCounter
to keep track of infeasible elimination - Struct
Bfs
which implements breath-first traversal - Trait
CompositionSchema
for implementing other compositional operations overAffTree
- Trait
CompositionVisitor
for tracing composition steps - Trait
TraversalMut
which allows modifications to the tree while iterating, but which can also be downgraded to a normal iterator - Trait implementations
AbsDiffEq
andRelativeEq
forAffFuncBase
- Trait implementations
Add
,Sub
,Mul
,Div
, andRem
forAffFuncBase
and&AffFuncBase
(covering owned data and views) - Trait implementations
Add
,Sub
,Mul
, andDiv
forAffTree
and&AffTree
- Trait implementations
Add
,Sub
,Mul
, andDiv
forAffTree
and&AffTree
where the second argument is of typeAffFuncBase
(scalar / element-wise operations) - Methods
AffFuncBase::{from_row_iter, remove_zero_rows, remove_zero_columns, display_with}
- Methods
PolytopeG::{axis_bounds, distances_raw, apply_pre, apply_post, rotate}
- Method
AffTree::reduce
for removing redundant decisions of the bottom of the tree (cascading upwards as long as possible)
- Extract infeasible elimination and composition from
afftree.rs
intoimpl_infeasible_elim.rs
andimpl_composition
- AffFuncBase now accepts any basis type for its underlying arrays as long as it implements
num_traits::float::Float
- Tree iterators now all implement
TraversalMut
- Use nightly toolchain for
rust fmt
- Bound maximal space reserved in advance for nodes in distillation
- Tests in
polyhedron.rs
reorganized an checked against scipy - Renamed
display.rs
toimpl_affineformat.rs
- Rename
AffFuncBase::get_marix
tomatrix_view
- Rename
AffFuncBase::get_bias
tobias_view
- Method
PolytopeG::convert_to
takes ownership of self - Method
AffTree::from_poly
now accepts an optional node for paths not following the given polytope - Method
AffTree::evaluate_to_terminal
renamed tofind_terminal
, max_iter removed, panic behavior changed - Method
AffTree::evaluate_node
renamed toevaluate_decision
- Input dim of distillation now acts on precondition if one is supplied
- Docstrings to methods in
afftree.rs
andgraph.rs
- License information for binaries (including transitive dependencies) using
cargo about
Cargo.lock
from versioning- Unused dependencies from
Cargo.toml
- HardTanh and HardSigmoid activation functions to
Layer
- Highs LP solver
- Feature flags
minilp
andhighs
to globally switch LP solvers - Mirror heuristic to infeasible elimination
- Enum
NodeState
to record the feasibility status of every node inAffTree
- Visitors to the distillation process
- Benchmark for infeasibility
- Dependencies to
Cargo.toml
- Methods
Tree::{num_nodes, terminals_mut,describe}
- Method
DfsPreIter::with_root
- Module
core
is split intodistill
andpwl
- Infeasible elimination now requires only a single depth-first search
- Rust fmt is reduced to stable features
- Activation functions for distillation are now specified per neuron instead of per layer
- Readme updated and improved
- Method
AffTree::from_precondition
renamed tofrom_poly
- Method
AffTree::update_node
no longer resets solution cache - Method
AffTree::is_edge_feasible
no longer accepts a precondition - Methods
AffFuncBase::{row, row_iter}
now return a view - Method
AffFuncBase::contains
allows an imprecision of up to 1e-8 - Methods
AffFuncBase::{distance_raw, distance, contains}
can now also be called on views - Method
builder::afftree_from_layers
now accepts a precondition
- Method
AffTree::is_edge_feasible
- Activation functions
partial_leaky_ReLU
,partial_hard_tanh
,partial_hard_shrink
,partial_hard_sigmoid
, andpartial_threshold
toschema
- Badges to
README.md
- Docstrings to
afftree.rs
,schema.rs
,affine.rs
- Integration tests based on the absolute value function (
abs.rs
), a DNN trained over Iris (iris.rs
), and a DNN trained over MNIST (mnist.rs
) - Methods
AffTree::{from_slice, is_empty, depth, reserve}
- Methods
AffFuncBase::{rotation, uniform_scaling, scaling, slice, translation}
- Methods
Tree::{reserve, try_remove_child, remove_all_descendants, contains}
- Console output of inequalities and linear combinations
- Method
Tree::add_child_node
now checks if parent exists in the tree before adding the node, as it could receive the node id of a missing parent
Initial release.