bdd-plugin for the automated analysis of feature models
Project description
BDD plugin for Flama (UNED version)
Description
This plugin supports Binary Decision Diagrams (BDDs) representations for feature models.
The plugin is based on flamapy and thus, it follows the same architecture.
The BDD plugin relies on the bbd4va library to synthetize and manipulate BDDs.
Requirements and Installation
- Python 3.9+
- This plugin depends on the flamapy core and on the Feature Model plugin.
pip install flamapy flamapy-fm flamapy-bdd
We have tested the plugin on Linux, but Windows is also supported under wsl.
Functionality and usage
The executable script test_bdd_metamodel.py serves as an entry point to show the plugin in action.
The following functionality is provided:
Load a feature model and create the BDD
from flamapy.metamodels.fm_metamodel.transformations import UVLReader
from flamapy.metamodels.bdd_metamodel.transformations import FmToBDD
# Load the feature model from UVLReader
feature_model = UVLReader('models/uvl_models/Pizzas.uvl').transform()
# Create the BDD from the feature model
bdd_model = FmToBDD(feature_model).transform()
Save and load a BDD to/from a file
from flamapy.metamodels.bdd_metamodel.transformations import DDDMPWriter, DDDMPReader
# Save the BDD to a .dddmp file
DDDMPWriter(path='path/to/save/my_bdd.dddmp', source_model=bdd_model).transform()
# Load a BDD from a .dddmp file
bdd_model = DDDMPReader(path='path/to/my_bdd.dddmp').transform()
Analysis operations
-
Satisfiable
Return whether the model is satisfiable (valid):
from flamapy.metamodels.bdd_metamodel.operations import BDDSatisfiable satisfiable = BDDSatisfiable().execute(bdd_model).get_result() print(f'Satisfiable? (valid?): {satisfiable}')
-
Configurations number
Return the number of configurations:
from flamapy.metamodels.bdd_metamodel.operations import BDDConfigurationsNumber n_configs = BDDConfigurationsNumber().execute(bdd_model).get_result() print(f'#Configurations: {n_configs}')
-
Configurations
Enumerate the configurations of the model:
from flamapy.metamodels.bdd_metamodel.operations import BDDConfigurations configurations = BDDConfigurations().execute(bdd_model).get_result() for i, config in enumerate(configurations, 1): print(f'Config {i}: {[feat for feat in config.elements if config.elements[feat]]}')
-
Sampling
Return a sample of the given size of uniform random configurations with or without replacement:
from flamapy.metamodels.bdd_metamodel.operations import BDDSampling sampling_op = BDDSampling() sampling_op.set_sample_size(5) sampling_op.set_with_replacement(False) # Default False sample = sampling_op.execute(bdd_model).get_result() for i, config in enumerate(sample, 1): print(f'Config {i}: {[feat for feat in config.elements if config.elements[feat]]}')
-
Product Distribution
Return the number of products (configurations) having a given number of features:
from flamapy.metamodels.bdd_metamodel.operations import BDDProductDistribution dist = BDDProductDistribution().execute(bdd_model).get_result() print(f'Product Distribution: {dist}')
-
Feature Inclusion Probability
Return the probability for a feature to be included in a valid configuration:
from flamapy.metamodels.bdd_metamodel.operations import BDDFeatureInclusionProbability prob = BDDFeatureInclusionProbability().execute(bdd_model).get_result() for feat in prob.keys(): print(f'{feat}: {prob[feat]}')
-
Core features
Return the core features (those features that are present in all the configurations):
from flamapy.metamodels.bdd_metamodel.operations import BDDCoreFeatures core_features = BDDCoreFeatures().execute(bdd_model).get_result() print(f'Core features: {core_features}')
-
Dead features
Return the dead features (those features that are not present in any configuration):
from flamapy.metamodels.bdd_metamodel.operations import BDDDeadFeatures dead_features = BDDDeadFeatures().execute(bdd_model).get_result() print(f'Dead features: {dead_features}')
Contributing to the BDD plugin
To contribute in the development of this plugin:
- Fork the repository into your GitHub account.
- Clone the repository:
git@github.com:<<username>>/bdd_metamodel.git - Create a virtual environment:
python -m venv env - Activate the virtual environment:
source env/bin/activate - Install the plugin dependencies:
pip install flamapy flamapy-fm - Install the BDD plugin from the source code:
pip install -e bdd_metamodel
Please try to follow the standards code quality to contribute to this plugin before creating a Pull Request:
-
To analyze your Python code and output information about errors, potential problems, convention violations and complexity, pass the prospector with:
make lint -
To analyze the static type checker for Python and find bugs, pass the Mypy:
make mypy
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flamapy-bdd-colosal-2.0.0.tar.gz.
File metadata
- Download URL: flamapy-bdd-colosal-2.0.0.tar.gz
- Upload date:
- Size: 20.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0a469705a6cdbe0fcb209c46eccf389f8cce7ae7a232134cce623478bd585221
|
|
| MD5 |
6ec53289fde990e4065a8e6c8fbb0d20
|
|
| BLAKE2b-256 |
987fec2a770322875bfb1ef804bcd76dc8b973ef41cccf2dab659b516842f62f
|
File details
Details for the file flamapy_bdd_colosal-2.0.0-py3-none-any.whl.
File metadata
- Download URL: flamapy_bdd_colosal-2.0.0-py3-none-any.whl
- Upload date:
- Size: 34.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a48f5a08625f7227804222c25d90cc2ed25505cc055d42a755b93d55aa56b20
|
|
| MD5 |
8ecdfe9abff324b10bc813dc5fa02146
|
|
| BLAKE2b-256 |
e98beb347283f8b8953e1ae622db2d126524c81426a41ff0d7a5fef0a896aea3
|