From 4dccdea20c53fdae170b4b211b0fb52baecb3584 Mon Sep 17 00:00:00 2001 From: spefk Date: Tue, 20 Jan 2026 01:51:25 +0300 Subject: [PATCH 1/4] fixes --- cirbo/circuits_db/data_utils.py | 28 ++++++++++++++++++ cirbo/circuits_db/db.py | 5 ++++ cirbo/core/circuit/circuit.py | 3 +- {data => cirbo/data}/aig_db.bin.xz | Bin .../data/simple_circuit.bench | 0 {data => cirbo/data}/xaig_db.bin.xz | Bin tests/conftest.py | 7 +++-- tutorial/checking_satisfiability.py | 7 ++++- 8 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 cirbo/circuits_db/data_utils.py rename {data => cirbo/data}/aig_db.bin.xz (100%) rename data/circuit.bench => cirbo/data/simple_circuit.bench (100%) rename {data => cirbo/data}/xaig_db.bin.xz (100%) diff --git a/cirbo/circuits_db/data_utils.py b/cirbo/circuits_db/data_utils.py new file mode 100644 index 00000000..9096a0af --- /dev/null +++ b/cirbo/circuits_db/data_utils.py @@ -0,0 +1,28 @@ +"""Module defines default paths to data files (e.g. databases).""" + +import os +import pathlib +from importlib.abc import Traversable +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")) diff --git a/cirbo/circuits_db/db.py b/cirbo/circuits_db/db.py index ee509857..efa9baaf 100644 --- a/cirbo/circuits_db/db.py +++ b/cirbo/circuits_db/db.py @@ -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, DEFAULT_XAIG_DB + ``` + """ def __init__(self, db_source: tp.Optional[tp.Union[tp.BinaryIO, Path, str]] = None): diff --git a/cirbo/core/circuit/circuit.py b/cirbo/core/circuit/circuit.py index 1833ee1e..16000c0f 100644 --- a/cirbo/core/circuit/circuit.py +++ b/cirbo/core/circuit/circuit.py @@ -6,6 +6,7 @@ import io import itertools import logging +import os import pathlib import textwrap import typing as tp @@ -169,7 +170,7 @@ class Circuit(Function): """ @staticmethod - def from_bench_file(file_path: str) -> "Circuit": + def from_bench_file(file_path: os.PathLike[str]) -> "Circuit": """ Initialization the circuit with given data from file. diff --git a/data/aig_db.bin.xz b/cirbo/data/aig_db.bin.xz similarity index 100% rename from data/aig_db.bin.xz rename to cirbo/data/aig_db.bin.xz diff --git a/data/circuit.bench b/cirbo/data/simple_circuit.bench similarity index 100% rename from data/circuit.bench rename to cirbo/data/simple_circuit.bench diff --git a/data/xaig_db.bin.xz b/cirbo/data/xaig_db.bin.xz similarity index 100% rename from data/xaig_db.bin.xz rename to cirbo/data/xaig_db.bin.xz diff --git a/tests/conftest.py b/tests/conftest.py index cbdcfc10..b5391201 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -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", ) diff --git a/tutorial/checking_satisfiability.py b/tutorial/checking_satisfiability.py index d7b9bb48..c278ef04 100644 --- a/tutorial/checking_satisfiability.py +++ b/tutorial/checking_satisfiability.py @@ -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) From a3460c11ca0be31e97bcc49bcefb10d2ad609adf Mon Sep 17 00:00:00 2001 From: spefk Date: Tue, 20 Jan 2026 01:53:56 +0300 Subject: [PATCH 2/4] fixes --- cirbo/circuits_db/db.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cirbo/circuits_db/db.py b/cirbo/circuits_db/db.py index efa9baaf..3a695725 100644 --- a/cirbo/circuits_db/db.py +++ b/cirbo/circuits_db/db.py @@ -33,7 +33,7 @@ class CircuitsDatabase: Default (pre-calculated) databases are accessible through: ```py - from cirbo.circuits_db.data_utils import DEFAULT_AIG_DB, DEFAULT_XAIG_DB + from cirbo.circuits_db.data_utils import DEFAULT_AIG_DB_PATH, DEFAULT_XAIG_DB_PATH ``` """ From b5991907ddc6f2132c1eac6aee7395240a231b08 Mon Sep 17 00:00:00 2001 From: spefk Date: Tue, 20 Jan 2026 18:01:24 +0300 Subject: [PATCH 3/4] fix --- cirbo/circuits_db/data_utils.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cirbo/circuits_db/data_utils.py b/cirbo/circuits_db/data_utils.py index 9096a0af..01c15918 100644 --- a/cirbo/circuits_db/data_utils.py +++ b/cirbo/circuits_db/data_utils.py @@ -2,7 +2,6 @@ import os import pathlib -from importlib.abc import Traversable from importlib.resources import files From 76d142098ae50b6e73534b01f900672550be53d6 Mon Sep 17 00:00:00 2001 From: spefk Date: Tue, 20 Jan 2026 18:16:20 +0300 Subject: [PATCH 4/4] fix --- cirbo/core/circuit/circuit.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cirbo/core/circuit/circuit.py b/cirbo/core/circuit/circuit.py index 16000c0f..40cfdd55 100644 --- a/cirbo/core/circuit/circuit.py +++ b/cirbo/core/circuit/circuit.py @@ -170,7 +170,7 @@ class Circuit(Function): """ @staticmethod - def from_bench_file(file_path: os.PathLike[str]) -> "Circuit": + def from_bench_file(file_path: tp.Union[str, os.PathLike[str]]) -> "Circuit": """ Initialization the circuit with given data from file.