Metadata-Version: 2.4
Name: flamapy-sdd
Version: 2.6.0.dev11
Summary: flamapy-sdd is a plugin to flamapy providing Sentential Decision Diagram (SDD) knowledge compilation for exact analysis of feature models
Author-email: Flamapy <flamapy@us.es>
License-Expression: GPL-3.0-or-later
Project-URL: Homepage, https://github.com/flamapy/sdd_metamodel
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: flamapy-fw~=2.6.0.dev11
Requires-Dist: flamapy-fm~=2.6.0.dev11
Requires-Dist: PySDD~=1.0
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-mock; extra == "dev"
Requires-Dist: prospector; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: coverage; extra == "dev"
Dynamic: license-file

# flamapy-sdd

`flamapy-sdd` is a [flamapy](https://flamapy.github.io) plugin that compiles a feature model
into a **Sentential Decision Diagram (SDD)** for exact analysis.

SDD is a knowledge-compilation language (a subset of d-DNNF, strictly more succinct than OBDD
in cases), so it supports exact, polytime queries — model counting, consistency, conditioning —
and can stay compact on models where a BDD blows up. It complements the ecosystem:

- `flamapy-bdd` compiles to OBDD (exact, but can explode on large models).
- `flamapy-sharpsat` gives an *approximate* count (ApproxMC) for very large models.
- `flamapy-sdd` gives an **exact** count via a more succinct compilation, on top of the SAT CNF.

It uses [PySDD](https://github.com/wannesm/PySDD).

## Installation

```
pip install flamapy-sdd
```

## Operations

| Operation | Class |
|---|---|
| Exact number of configurations | `SDDConfigurationsNumber` |
| Satisfiable (non-void) | `SDDSatisfiable` |
| Core features | `SDDCoreFeatures` |
| Dead features | `SDDDeadFeatures` |

## Usage

```python
from flamapy.metamodels.fm_metamodel.transformations import UVLReader
from flamapy.metamodels.sdd_metamodel.transformations import FmToSDD
from flamapy.metamodels.sdd_metamodel.operations import SDDConfigurationsNumber

fm = UVLReader('model.uvl').transform()
sdd_model = FmToSDD(fm).transform()
count = SDDConfigurationsNumber().execute(sdd_model).get_result()
```

## License

GPL-3.0-or-later.
