- DEP: rm module
dd._compat
- REL: require Python >= 3.11
- REL: require
cython >= 3.0.0
- REL: require
astutils >= 0.0.5
- DEP: deprecate hidden module
dd._compat
API:
- use TLA+ syntax for comments:
(* this is a doubly-delimited comment *)
\* this is a trailing comment
- use symbol
#
as operator that means the logical negation of<=>
. The symbol#
no longer signifies comments. - return
list
of loaded roots of BDDs, when loading BDDs from Pickle files in:dd.autoref.BDD.load()
dd.bdd.BDD.load()
- in
dd.cudd
,dd.cudd_zdd
check available memory only in systems where bothSC_PAGE_SIZE
andSC_PHYS_PAGES
are defined (readsysconf(3)
). - raise
ValueError
from:dd.autoref.BDD.level_of_var()
dd.bdd.BDD.level_of_var()
whenever unknown values are given as arguments
- rename:
- method
dd.buddy.BDD.level()
todd.buddy.BDD.level_of_var()
- method
dd.buddy.BDD.at_level()
todd.buddy.BDD.var_at_level()
as the naming convention in otherdd
modules
- method
- raise
ValueError
from:dd.buddy.BDD.level_of_var()
dd.buddy.BDD.var_at_level()
whenever unknown values are given as arguments, as done in otherdd
modules too
- several
assert
statements replaced byraise
, with more specific exceptions, e.g.,ValueError
,TypeError
,RuntimeError
- strings returned by methods:
dd.cudd.Function.__repr__()
dd.cudd_zdd.Function.__repr__()
changed to follow specification ofobject.__repr__()
(delimited by<
and>
). Now also includes the objectid
ashex
number.
- require
pytest >= 4.6.11
, instead ofnose
, for Python 3.10 compatibility - support for dumping and loading BDDs to and from JSON files now requires Python 3
- test using GitHub Actions
API:
- return memory size in bytes from methods
dd.cudd.BDD.statistics
anddd.cudd_zdd.ZDD.statistics
(the value of key'mem'
in the returneddict
) - print used memory in bytes in the methods
dd.cudd.BDD.__str__
anddd.cudd_zdd.ZDD.__str__
- remove the now obsolete constants
dd.cudd.GB
,dd.cudd_zdd.GB
- remove the unused constant
dd.sylvan.GB
- method
dd.cudd_zdd.ZDD.dump
:- support PNG and SVG formats, in addition to PDF
- allow more than one references to ZDD nodes in the argument
roots
- add method
apply
to the classdd.mdd.MDD
- several
assert
statements replaced byraise
with exceptions more specific thanAssertionError
- set
dd.cudd.Function.node
anddd.cudd_zdd.Function.node
toNULL
when the (local) reference count becomes zero
- distribute
manylinux2014_x86_64
wheel via PyPI
API:
- require
cython >= 0.29.15
- add module
dd.cudd_zdd
- allow empty support variable names in DDDMP files in function
dd.dddmp.load
- methods
dump
andload
of the classesdd.cudd.BDD
anddd.autoref.BDD
:- add JSON to file types
- load by file extension
- change return type of method
dd.cudd.BDD.load
tolist
ofdd.cudd.Function
- multiple roots supported in
dd.cudd.BDD.dump
for file types other than DDDMP - method
count
of the classesdd.cudd.BDD
anddd.cudd_zdd.ZDD
:- make optional the argument
nvars
- make optional the argument
dd.autoref.BDD.load
: require file extension.p
for pickle files
API:
- require
networkx <= 2.2
on Python 2 - class
dd.bdd.BDD
:- remove argument
debug
from method_next_free_int
- add method
undeclare_variables
- remove argument
- plot nodes for external BDD references in function
dd.bdd.to_pydot
, which is used by the methodsBDD.dump
of the modulesdd.cudd
,dd.autoref
, anddd.bdd
- function
dd._copy.load_json
: rename argument fromkeep_order
toload_order
- add unused keyword arguments to method
autoref.BDD.decref
- enable
KeyboardInterrupt
on POSIX systems forcudd
whencysignals >= 1.7.0
is present at installation
API:
- change signature of method
cudd.BDD.dump
- add GraphViz as an option of
cudd.BDD.dump
- allow copying between managers with different variable orders
- allow simultaneous substitution in
bdd.BDD.let
- add property
BDD.var_levels
- add method
BDD.reorder
tocudd
andautoref
- add method
cudd.BDD.group
for grouping variables - add
autoref.BDD
methodsincref
anddecref
- change signatures of
cudd.BDD
methodsincref
anddecref
- change default to
recursive=False
in methodcudd.BDD.decref
- add property
Function.dag_size
- add module
dd._copy
- rm function
dd.bdd.copy_vars
, use methodBDD.declare
instead, and separately copy variable order, if needed. This function has moved to_copy.copy_vars
. - rm method
bdd.BDD.evaluate
, use methoddd.BDD.let
- distribute
manylinux1_x86_64
wheel via PyPI
API:
- update to
networkx >= 2.0
(works with< 2.0
too) - class
BDD
in modulesautoref
,bdd
,cudd
,sylvan
:- remove deprecated methods (where present):
compose
,cofactor
,rename
,evaluate
,sat_iter
,sat_len
- remove deprecated methods (where present):
API:
- require
networkx < 2.0.0
- add module
dd._abc
that defines API implemented by other modules. - add method
declare
toBDD
classes - add methods
implies
andequiv
to classcudd.Function
- change BDD node reference syntax to "@ INTEGER"
- change
Function.__str__
to include@
in modulescudd
andautoref
- deprecate
BDD
methodscompose
,cofactor
,rename
,evaluate
, instead useBDD.let
- class
BDD
in modulesautoref
,bdd
,cudd
,sylvan
:- methods
pick
,pick_iter
: rename argument fromcare_bits
tocare_vars
- methods
- class
BDD
in modulesautoref
,bdd
:- method
count
: rename argument fromn
tonvars
- method
- class
BDD
in modulesbdd
,cudd
:- allow swapping variables in method
rename
, accept only variable names, not levels
- allow swapping variables in method
- rm argument
bdd
from functions:image
,preimage
in moduleautoref
and_exists
,or_forall
,dump
in modulecudd
and_exists
,or_forall
in modulesylvan
- rm argument
roots
from methodautoref.BDD.collect_garbage
- rm argument
source
from function:copy_bdd
in modulesautoref
,cudd
- rm function
cudd.rename
, use methodcudd.BDD.let
- rm function
autoref.rename
, use methodautoref.BDD.let
- rm method
autoref.Function.__xor__
- add TLA constants "TRUE" and "FALSE" to syntax,
use these in method
BDD.to_expr
API:
- classes
cudd.BDD
,autoref.BDD
,bdd.BDD
:- add method
let
, which will replacecompose
,cofactor
,rename
- add method
pick
- add method
pick_iter
, deprecatesat_iter
- add method
count
, deprecatesat_len
- allow copying node to same manager, but log warning
- add method
- class
sylvan.BDD
:- add method
let
- add method
- classes
cudd.Function
,autoref.Function
:- implement all comparison methods (
__le__
,__lt__
)
- implement all comparison methods (
API:
- dynamic variable reordering in
dd.bdd.BDD
(by default disabled) - method
bdd.BDD.sat_len
: count only levels in support (similar to CUDD) - class
autoref.Function
:- rename attribute
bdd
tomanager
- rename attribute
- classes
cudd.Function
,autoref.Function
,sylvan.Function
:- add attributes
var, support, bdd
- add method
__hash__
- add attributes
- classes
cudd.Function
andsylvan.Function
:- hide attribute
index
as_index
- hide attribute
- classes
cudd.BDD
andsylvan.BDD
:- do not memoize attributes
false
andtrue
- do not memoize attributes
- classes
cudd.BDD
andautoref.BDD
:- add method
find_or_add
- add method
- method
BDD.sat_iter
:- rm arg
full
care_bits = support
as defaultcare_bits < support
allowed
- rm arg
- function
bdd.to_pydot
: plot only levels in support of given node - add function
autoref.reorder
API:
- build
dd.cudd
using CUDD v3.0.0 (an older CUDD via an olderdownload.py
should work too)
API:
- classes
bdd.BDD
,autoref.BDD
:- rm attribute
ordering
, usevars
- rename
__init__
argumentordering
tolevels
- rm attribute
- allow passing path to CUDD during installation via
--cudd
- add Cython interface
dd.sylvan
to Sylvan - support TLA+ syntax
BUG:
- in Python 2 use
sys.maxint
forbdd.BDD.max_nodes
API:
- classes
bdd.BDD
andcudd.BDD
:- method
apply
: rm"bimplies"
value - raise
AssertionError
ifcare_bits < support
in methodsat_iter
- method
- rm unused operator
!=
from parser grammar - class
autoref.Function
:- rename method
bimplies
toequiv
- rename method
- require
pydot >= 1.2.2
API:
- change quantification syntax to
\E x, y: x
- add renaming syntax
\S x / y, z / w: y & w
- class
BDD
indd.bdd
,dd.autoref
,dd.cudd
:- add operators
'ite', '\E', '\A'
to methodapply
- add methods
forall
andexist
as wrappers ofquantify
- add method
_add_int
for checking presence of a BDD node represented as an integer - add method
succ
to obtain(level, low, high)
- add operators
- class
cudd.BDD
:- add method
compose
- add method
ite
- add method
to_expr
- add method
- class
cudd.Function
:- add method
__int__
to represent CUDD nodes uniquely as integers (by shifting the C pointer value to avoid possible conflicts with reserved values) - add method
__str__
to return integer repr asstr
- add attribute
level
- add attribute
negated
- add method
- module
cudd
:- add function
restrict
- add function
count_nodes
- add function
- remove "extra" named
dot
, becausepydot
is now required
BUG:
dd.bdd.BDD.dump
: if argumentroots is None
(default), then dump all nodesdd.autoref.BDD.compose
: call wrapped method correctly
API:
dd.bdd.BDD.rename
,dd.bdd.image
,dd.bdd.preimage
: allow non-adjacent variable levelsdd.bdd.BDD.descendants
:- arg
roots
instead of single nodeu
- iteration instead of recursion
- breadth-first instead of depth-first search
- arg
dd.bdd.BDD.dump
:- dump nodes reachable from given roots
- dump only variable levels and nodes to pickle file
- correct error that ignored explicit file type for PDF, PNG, SVG
dd.bdd.BDD.load
:- instance method to load nodes
dd.bdd.to_pydot
:- add arg
roots
- add arg
- hide methods that dump and load entire manager
dd.bdd.BDD._dump_manager
and_load_manager
- remove
dd.autoref.Function.from_expr
- install without extensions by default
- try to read git information, but assume release if this fails for any reason
- optionally import
gitpython
insetup.py
to retrieve version info fromgit
repo. - version identifier when
git
available:X.Y.Z.dev0+SHA[.dirty]
- require
psutil >= 3.2.2
- require
setuptools >= 19.6
to avoidcython
affectingpsutil
build - detect 64-bit system using
ctypes.sizeof
for CUDD flags
API:
dd.cudd.BDD.__cinit__
:- rename arg
memory
->memory_estimate
- assert memory estimate less than
psutil.virtual_memory().total
- add arg
initial_cache_size
- rename arg
dd.cudd.BDD.statistics
:- distinguish between peak and live nodes
- cache statistics
- unique table statistics
- read node count without removing unused nodes
dd.cudd.BDD.configure
:- accept keyword args, instead of
dict
- first read config (returned
dict
), then set given values - reordering
- garbage collection
- max cache soft
- max swaps
- max variables per reordering
- accept keyword args, instead of
dd.bdd
,dd.autoref
,dd.cudd
:- add method
BDD.copy
for copying nodes between managers - add method
BDD.rename
for substituting variables - deprecate functions
rename
andcopy_bdd
- add method
- add method
dd.cudd.BDD.sat_iter
- add function
dd.cudd.count_nodes_per_level
- add functions that track variable order when saving:
dd.cudd.dump
dd.cudd.load
- add user documentation
- support Python 3
- require
pydot3k
in Python 3,pydot
in Python 2 - expose more control over CUDD configuration
API:
- add
dd.cudd.BDD.configure
- do not set manager parameters in
__cinit__
- rename
BDD.False
->BDD.false
(same for “true”), to avoid syntax errors in Python 3 - remove
dd.bdd.BDD.add_ast
dd.cudd.reorder
invokes sifting if variable order isNone
- default to pickle protocol 2
Bugfix release to add file download.py
missing from MANIFEST.
API:
- add
dd.cudd.BDD.statistics
- add functions
copy_vars
andcopy_bdd
- remove
dd.bdd.BDD.level_to_variable
- add Cython interface
dd.cudd
to CUDD - add Cython interface
dd.buddy
to BuDDy
- dynamic variable addition in
dd.bdd.BDD
- add
dd.autoref
wrapper arounddd.bdd
- avoid randomization inside
sat_iter
API:
- add
BDD.True
andBDD.False
- move
Function
interface todd.autoref
- move parser to
dd._parser
- rename
BDD.level_to_variable
->var_at_level
- deprecate
BDD.ordering
in favor ofBDD.vars
- add
dd.mdd
for multi-terminal decision diagrams - add quantifiers to syntax
- add complemented edges to syntax
- require
networkx
API:
- add
dd.bdd.BDD.cube
- add
dd.bdd.BDD.descendants
- add function
reorder_pairs
- add PLY parser for Boolean expressions
- require
astutils
API:
- add
dd.bdd.BDD.ref
- assign
bool
as model values
- test on Travis
API:
- add
"diff"
operator todd.bdd.BDD.apply
Initial release.