Release Notes¶
Release 2.4¶
Added a root context to the wrapper module so you can create variables without
having to understand what Context
objects are for.
For example:
>>> from boolexpr import *
>>> a = get_var('a')
>>> w, x, y, z = map(get_var, "wxyz")
>>> X = get_vars('x', 4, 4, 4)
Also, in the C++ API, changed the Array class so it uses unique_ptr
instead
of raw pointers.
This makes memory management easier.
Fixed a couple serious issues with Python packaging:
Thanks to shader for pointing these out.
Release 2.3¶
Now this is an exciting release!
First, the minor things.
The majority
function now always returns a CNF.
There is no size advantage to DNF,
and CNF is almost always preferable for the purposes of SAT.
Also, there is a new NegativeOperator
class.
Because inheritance allowed for some nice consolidation in this particular case.
Now onto the cool stuff.
We are swapping SAT solvers. BoolExpr had been using CryptoMinisat. Primarily due to build dependency complexities, we are now using Glucosamine, which is a fork of version 4.0 (2014) of the well-known Glucose solver. Both were derived from MiniSAT originally, so I don’t expect a drastic change in performance.
Another major achievement is the adoption of CMake for build. After looking around for quite a while, this system appears to be the de-facto standard for C++ builds.
With all of this new-found cross-platform magic, BoolExpr will now ship Python wheels for 1) Linux, 2) MacOS, and 3) Windows. Getting this to work was a minor miracle, but definitely worth it.
Release 2.2¶
Added the following reduction methods to the ndarray
class:
nor_reduce
nand_reduce
xnor_reduce
Also cleaned up some package metadata.
Release 2.1¶
Added a to_dot
method, and slightly improved the docs.
Release 2.0¶
This is a major release that primarily fills out the array stuff added in 1.3. Lots of new documentation, and several little bug fixes and other code cleanup.
Short list of new stuff:
- Absolute value for literals
- New
BoolExpr.degree
method - New ndarray
cat
function - New ndarray
simplify
method - New C++ “term” iterator
Release 1.3¶
This release contains most of the new stuff that’s going into 2.0. Most of it is still undocumented, but it seemed complete enough to push out the door for testing purposes.
Short list of new stuff:
- faster XOR flattening
- New C++
Array
data type, and Python wrapper iter_points
function, for iterating through all points in a spacemux
function, for multiplexing an array of inputs.nhot
function, which returns a CNF guaranteeing N bits are “hot”.- The
boolexpr.ndarray
N-dimensional array wrapper class, which adds a bunch of fancy Python whiz-bang to theArray
type. zeros
,ones
,logicals
,uint2nda
,int2nda
, for creating arrays of constant values.array
method, for a general-purposendarray
factory function.Context.get_vars
method, for creating N-dimensional arrays of variables.
Also lots of new improvements in testing, code coverage, API documentation, and lint waivers.
Release 1.2¶
Improved the performance of flattening. In particular, now you can flatten XOR with ten arguments within reasonable time.
Also, brought the nimpl
, and nite
functions to the Python level.
I still like the way ~impl
and ~ite
look,
but these functions can be useful.
Release 1.0¶
Yay, this is good enough to stamp as 1.0. Most of the changes since 0.4 were to firm up questionable design decisions, and add documentation for anything and everything.
The only new feature was to add the
boolexpr.BoolExpr.to_ast()
and
boolexpr.BoolExpr.from_ast()
methods to the
boolexpr.BoolExpr
class.
Release 0.4¶
Improved the various C++ iterator capabilities.
Added iter_cfs
and iter_domain
iterator methods.
Added smoothing
, consensus
, and derivative
methods.
Lots of miscellaneous documentation updates,
thought this area still needs some work.
Implemented Python to_ast
and from_ast
methods,
to make it possible to convert BoolExpr objects to something pickleable.
Release 0.3¶
Lots of improvements to the foreign function interface.
Implemented a SAT iterator, so now you can iterate through all satisfying input points.
Constants and literals in the Python module now behave like singletons. The FFI layer returns a new wrapper object, but if the Python layer has a copy of the object already, it uses that copy, and drops the wrapper object. This makes lots of simple comparison operations much easier.
Release 0.2¶
This release fixes a couple memory leak issues with 0.1
,
and introduces the capability to simplify a Boolean expression with an
“unknown” input value.