- 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
listof loaded roots of BDDs, when loading BDDs from Pickle files in:dd.autoref.BDD.load()dd.bdd.BDD.load()
- in
dd.cudd,dd.cudd_zddcheck available memory only in systems where bothSC_PAGE_SIZEandSC_PHYS_PAGESare defined (readsysconf(3)). - raise
ValueErrorfrom: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 otherddmodules
- method
- raise
ValueErrorfrom:dd.buddy.BDD.level_of_var()dd.buddy.BDD.var_at_level()whenever unknown values are given as arguments, as done in otherddmodules too
- several
assertstatements 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 objectidashexnumber.
- 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.statisticsanddd.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
applyto the classdd.mdd.MDD - several
assertstatements replaced byraisewith exceptions more specific thanAssertionError - set
dd.cudd.Function.nodeanddd.cudd_zdd.Function.nodetoNULLwhen the (local) reference count becomes zero
- distribute
manylinux2014_x86_64wheel 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
dumpandloadof the classesdd.cudd.BDDanddd.autoref.BDD:- add JSON to file types
- load by file extension
- change return type of method
dd.cudd.BDD.loadtolistofdd.cudd.Function - multiple roots supported in
dd.cudd.BDD.dumpfor file types other than DDDMP - method
countof the classesdd.cudd.BDDanddd.cudd_zdd.ZDD:- make optional the argument
nvars
- make optional the argument
dd.autoref.BDD.load: require file extension.pfor pickle files
API:
- require
networkx <= 2.2on Python 2 - class
dd.bdd.BDD:- remove argument
debugfrom 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.dumpof the modulesdd.cudd,dd.autoref, anddd.bdd - function
dd._copy.load_json: rename argument fromkeep_ordertoload_order - add unused keyword arguments to method
autoref.BDD.decref
- enable
KeyboardInterrupton POSIX systems forcuddwhencysignals >= 1.7.0is 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.reordertocuddandautoref - add method
cudd.BDD.groupfor grouping variables - add
autoref.BDDmethodsincrefanddecref - change signatures of
cudd.BDDmethodsincrefanddecref - change default to
recursive=Falsein methodcudd.BDD.decref - add property
Function.dag_size - add module
dd._copy - rm function
dd.bdd.copy_vars, use methodBDD.declareinstead, 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_64wheel via PyPI
API:
- update to
networkx >= 2.0(works with< 2.0too) - class
BDDin 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._abcthat defines API implemented by other modules. - add method
declaretoBDDclasses - add methods
impliesandequivto classcudd.Function - change BDD node reference syntax to "@ INTEGER"
- change
Function.__str__to include@in modulescuddandautoref - deprecate
BDDmethodscompose,cofactor,rename,evaluate, instead useBDD.let - class
BDDin modulesautoref,bdd,cudd,sylvan:- methods
pick,pick_iter: rename argument fromcare_bitstocare_vars
- methods
- class
BDDin modulesautoref,bdd:- method
count: rename argument fromntonvars
- method
- class
BDDin modulesbdd,cudd:- allow swapping variables in method
rename, accept only variable names, not levels
- allow swapping variables in method
- rm argument
bddfrom functions:image,preimagein moduleautorefand_exists,or_forall,dumpin modulecuddand_exists,or_forallin modulesylvan
- rm argument
rootsfrom methodautoref.BDD.collect_garbage - rm argument
sourcefrom function:copy_bddin 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
bddtomanager
- rename attribute
- classes
cudd.Function,autoref.Function,sylvan.Function:- add attributes
var, support, bdd - add method
__hash__
- add attributes
- classes
cudd.Functionandsylvan.Function:- hide attribute
indexas_index
- hide attribute
- classes
cudd.BDDandsylvan.BDD:- do not memoize attributes
falseandtrue
- do not memoize attributes
- classes
cudd.BDDandautoref.BDD:- add method
find_or_add
- add method
- method
BDD.sat_iter:- rm arg
full care_bits = supportas defaultcare_bits < supportallowed
- rm arg
- function
bdd.to_pydot: plot only levels in support of given node - add function
autoref.reorder
API:
- build
dd.cuddusing CUDD v3.0.0 (an older CUDD via an olderdownload.pyshould work too)
API:
- classes
bdd.BDD,autoref.BDD:- rm attribute
ordering, usevars - rename
__init__argumentorderingtolevels
- rm attribute
- allow passing path to CUDD during installation via
--cudd
- add Cython interface
dd.sylvanto Sylvan - support TLA+ syntax
BUG:
- in Python 2 use
sys.maxintforbdd.BDD.max_nodes
API:
- classes
bdd.BDDandcudd.BDD:- method
apply: rm"bimplies"value - raise
AssertionErrorifcare_bits < supportin methodsat_iter
- method
- rm unused operator
!=from parser grammar - class
autoref.Function:- rename method
bimpliestoequiv
- 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
BDDindd.bdd,dd.autoref,dd.cudd:- add operators
'ite', '\E', '\A'to methodapply - add methods
forallandexistas wrappers ofquantify - add method
_add_intfor checking presence of a BDD node represented as an integer - add method
succto 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, becausepydotis 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
rootsinstead 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_managerand_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
gitpythoninsetup.pyto retrieve version info fromgitrepo. - version identifier when
gitavailable:X.Y.Z.dev0+SHA[.dirty] - require
psutil >= 3.2.2 - require
setuptools >= 19.6to avoidcythonaffectingpsutilbuild - detect 64-bit system using
ctypes.sizeoffor 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.copyfor copying nodes between managers - add method
BDD.renamefor substituting variables - deprecate functions
renameandcopy_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.dumpdd.cudd.load
- add user documentation
- support Python 3
- require
pydot3kin Python 3,pydotin 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.reorderinvokes 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_varsandcopy_bdd - remove
dd.bdd.BDD.level_to_variable
- add Cython interface
dd.cuddto CUDD - add Cython interface
dd.buddyto BuDDy
- dynamic variable addition in
dd.bdd.BDD - add
dd.autorefwrapper arounddd.bdd - avoid randomization inside
sat_iter
API:
- add
BDD.TrueandBDD.False - move
Functioninterface todd.autoref - move parser to
dd._parser - rename
BDD.level_to_variable->var_at_level - deprecate
BDD.orderingin favor ofBDD.vars
- add
dd.mddfor 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
boolas model values
- test on Travis
API:
- add
"diff"operator todd.bdd.BDD.apply
Initial release.