Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions cirbo/circuits_db/data_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"""Module defines default paths to data files (e.g. databases)."""

import os
import pathlib
from importlib.resources import files


__all__ = [
'resolve_default_data_path',
'DEFAULT_XAIG_DB_PATH',
'DEFAULT_AIG_DB_PATH',
]


def resolve_default_data_path(data_path: os.PathLike[str]) -> pathlib.Path:
"""
Resolves `Traversable` path to default data item (e.g. database of small circuits)
based on given relative path to data file.

:param data_path: relative to the `data/` directory path to the data file.

"""
return pathlib.Path(files("cirbo").joinpath(f"data/{data_path}")) # type: ignore


DEFAULT_XAIG_DB_PATH = resolve_default_data_path(pathlib.Path("xaig_db.bin.xz"))
DEFAULT_AIG_DB_PATH = resolve_default_data_path(pathlib.Path("aig_db.bin.xz"))
5 changes: 5 additions & 0 deletions cirbo/circuits_db/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ class CircuitsDatabase:
circuits. It supports operations such as opening and closing the database, adding
circuits, and querying circuits based on labels and truth tables.

Default (pre-calculated) databases are accessible through:
```py
from cirbo.circuits_db.data_utils import DEFAULT_AIG_DB_PATH, DEFAULT_XAIG_DB_PATH
```

"""

def __init__(self, db_source: tp.Optional[tp.Union[tp.BinaryIO, Path, str]] = None):
Expand Down
3 changes: 2 additions & 1 deletion cirbo/core/circuit/circuit.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import io
import itertools
import logging
import os
import pathlib
import textwrap
import typing as tp
Expand Down Expand Up @@ -169,7 +170,7 @@ class Circuit(Function):
"""

@staticmethod
def from_bench_file(file_path: str) -> "Circuit":
def from_bench_file(file_path: tp.Union[str, os.PathLike[str]]) -> "Circuit":
"""
Initialization the circuit with given data from file.

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
7 changes: 5 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
from cirbo.circuits_db.data_utils import DEFAULT_AIG_DB_PATH, DEFAULT_XAIG_DB_PATH


def pytest_addoption(parser):
parser.addoption(
"--db-xaig-path",
action="store",
default="./data/xaig_db.bin.xz",
default=DEFAULT_XAIG_DB_PATH,
help="Path to the xaig database file",
)
parser.addoption(
"--db-aig-path",
action="store",
default="./data/aig_db.bin.xz",
default=DEFAULT_AIG_DB_PATH,
help="Path to the aig database file",
)

Expand Down
7 changes: 6 additions & 1 deletion tutorial/checking_satisfiability.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
import pathlib

from cirbo.circuits_db.data_utils import resolve_default_data_path
from cirbo.core.circuit import Circuit
from cirbo.sat import is_circuit_satisfiable


path = '../data/circuit.bench'
path = resolve_default_data_path(pathlib.Path('simple_circuit.bench'))
ckt = Circuit.from_bench_file(path)
print(ckt)

result = is_circuit_satisfiable(ckt)
print(result.answer)