Source code for core.decision_diagrams.BDDCollection
from __future__ import annotations
from pathlib import Path
from typing import List, Dict, Set, Any
from core.decision_diagrams.BDD import BDD
from core.decision_diagrams.DDCollection import DDCollection
[docs]
class BDDCollection(DDCollection):
def __init__(self, bdds: Set[BDD] = None):
super().__init__(bdds)
[docs]
def get_output_variables(self) -> Set[str]:
raise NotImplementedError()
[docs]
def get_auxiliary_variables(self) -> Set[str]:
raise NotImplementedError()
@staticmethod
def _prettify(lines: List, components: Dict, keyword: str):
[start, stop] = components.get(keyword)
raw_content = lines[start:stop + 1]
raw_content = ''.join(raw_content)
return raw_content.replace(".{}".format(keyword), "").replace("\\", "")
[docs]
@staticmethod
def read(file_path: Path) -> BDDCollection:
all_bdd_content = set()
with open(file_path, 'r') as f:
lines = f.readlines()
bdd_content = None
for line in lines:
if line.startswith(".model"):
if bdd_content is None:
bdd_content = line
else:
all_bdd_content.add(bdd_content)
bdd_content = line
else:
bdd_content += line
all_bdd_content.add(bdd_content)
bdds = set()
for bdd_content in all_bdd_content:
bdd = BDD.from_string(bdd_content)
bdds.add(bdd)
return BDDCollection(bdds)
[docs]
def write(self, file_path: Path) -> Dict[str, Any]:
content = ""
for bdd in self.boolean_functions:
sub_content = list(bdd.write())[0]
content += sub_content
content += "\n"
with open(file_path, "w") as f:
f.write(content)
f.write("\n")