Unfeatures

This awkwardly-named chapter will discuss things included in the source code that are not actually features, but could be more accurately described as “tolerable problems”. The are purposefully not mentioned in the API reference. Unfeatures are not guaranteed to be included in the future. Use them at your own risk.

Python-only Components

The following functions are only available in the Python boolexpr package:

  • boolexpr.nhot
  • boolexpr.majority
  • boolexpr.achilles_heel
  • boolexpr.mux
  • boolexpr.exists
  • boolexpr.forall

They are “miscellaneous” components, which are not currently implemented in C++.

The boolexpr.ndarray data type is also entirely implemented in Python. This is partly out of convenience. Multi-dimensional arrays are very clunky in C++, but Python (thanks to numpy) has fantastic resources available for beautiful implementation of MDA-type objects.

Preprocessor Usage

In general, C++ preprocessor usage is evil. As C++ continues evolving into a great programming language, this kind of hackery should no longer be necessary. Nothing is permanently ruled out, but don’t count on them until they are listed in the API reference.

Boost Usage

Currently, the implementation uses boost/optional.hpp because that feature is not part of the C++11 standard. Since it will be part of the C++14 standard, expect that dependency to disappear at some point in the future.

BoolExpr Public Data and Methods

The Literal::id constant is currently public because the poorly-implemented CNF/DNF flattening algorithm relies on it for ordering. There is a bug open to improve the flattening algorithm. The id of a literal is an implementation detail. The only thing the user interface should care about is the Variable name string.

The Illogical class is experimental. It is supposed to represent an illogical condition such as metastability, but the usage model is unclear right now.