Skip to content

Commit

Permalink
feat: Add changes to work with data extracted from Neo4j
Browse files Browse the repository at this point in the history
  • Loading branch information
GermanMT committed Apr 22, 2023
1 parent d6215d7 commit 8f9bcf1
Show file tree
Hide file tree
Showing 17 changed files with 288 additions and 256 deletions.
2 changes: 0 additions & 2 deletions .prospector.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ doc-warnings: false

pylint:
disable:
- super-init-not-called
- unsubscriptable-object
- too-many-instance-attributes

mccabe:
Expand Down
4 changes: 2 additions & 2 deletions flamapy/metamodels/smt_metamodel/models/pysmt_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@ def get_extension() -> str:
return 'pysmt'

def __init__(self) -> None:
self.domains: dict[str, BoolRef] = {}
self.cvvs: dict[str, ArithRef] = {}
self.domain: BoolRef = None
self.func_obj_var: ArithRef = None
14 changes: 6 additions & 8 deletions flamapy/metamodels/smt_metamodel/operations/complete_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,27 @@ class CompleteConfig(Operation):

def __init__(
self,
file_name: str,
config: dict[str, int]
) -> None:
self.file_name: str = file_name
self.config: dict[str, int] = config
self.result: dict[str, float | int] = {}
self.result: list[dict[str, float | int]] = []

def get_result(self) -> dict[str, float | int]:
def get_result(self) -> list[dict[str, float | int]]:
return self.result

def execute(self, model: PySMTModel) -> None:
solver = Optimize()
if model.cvvs:
cvss_f = model.cvvs[self.file_name]
if model.func_obj_var is not None:
cvss_f = model.func_obj_var
solver.minimize(cvss_f)

formula = model.domains[self.file_name]
formula = model.domain
solver.add(formula)
for package, count in self.config.items():
solver.add(Int(package) == count)

while solver.check() == sat:
config = solver.model()
sanitized_config = config_sanitizer(config)
self.result = sanitized_config
self.result.append(sanitized_config)
break
14 changes: 6 additions & 8 deletions flamapy/metamodels/smt_metamodel/operations/config_by_impact.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,25 @@ class ConfigByImpact(Operation):

def __init__(
self,
file_name: str,
impact: float
) -> None:
self.file_name: str = file_name
self.impact: float = impact
self.result: dict[str, float | int] = {}
self.result: list[dict[str, float | int]] = []

def get_result(self) -> dict[str, float | int]:
def get_result(self) -> list[dict[str, float | int]]:
return self.result

def execute(self, model: PySMTModel) -> None:
solver = Optimize()
if model.cvvs:
cvss_f = model.cvvs[self.file_name]
if model.func_obj_var is not None:
cvss_f = model.func_obj_var
obj = Abs(cvss_f - self.impact)
solver.minimize(obj)

formula = model.domains[self.file_name]
formula = model.domain
solver.add(formula)
while solver.check() == sat:
config = solver.model()
sanitized_config = config_sanitizer(config)
self.result = sanitized_config
self.result.append(sanitized_config)
break
8 changes: 3 additions & 5 deletions flamapy/metamodels/smt_metamodel/operations/filter_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,10 @@ class FilterConfigs(Operation):

def __init__(
self,
file_name: str,
max_threshold: float,
min_threshold: float,
limit: int
) -> None:
self.file_name: str = file_name
self.max_threshold: float = max_threshold
self.min_threshold: float = min_threshold
self.limit: int = limit
Expand All @@ -24,13 +22,13 @@ def get_result(self) -> list[dict[str, float | int]]:
return self.result

def execute(self, model: PySMTModel) -> None:
if model.cvvs:
cvss_f = model.cvvs[self.file_name]
if model.func_obj_var is not None:
cvss_f = model.func_obj_var
max_ctc = cvss_f <= self.max_threshold
min_ctc = cvss_f >= self.min_threshold

solver = Solver()
formula = And([model.domains[self.file_name], max_ctc, min_ctc])
formula = And([model.domain, max_ctc, min_ctc])
solver.add(formula)
while len(self.result) < self.limit and solver.check() == sat:
config = solver.model()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,8 @@ class MaximizeImpact(Operation):

def __init__(
self,
file_name: str,
limit: int
) -> None:
self.file_name: str = file_name
self.limit: int = limit
self.result: list[dict[str, float | int]] = []

Expand All @@ -21,11 +19,11 @@ def get_result(self) -> list[dict[str, float | int]]:

def execute(self, model: PySMTModel) -> None:
solver = Optimize()
if model.cvvs:
cvss_f = model.cvvs[self.file_name]
if model.func_obj_var is not None:
cvss_f = model.func_obj_var
solver.maximize(cvss_f)

formula = model.domains[self.file_name]
formula = model.domain
solver.add(formula)
while len(self.result) < self.limit and solver.check() == sat:
config = solver.model()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,21 @@ class MinimizeImpact(Operation):

def __init__(
self,
file_name: str,
limit: int
) -> None:
self.limit: int = limit
self.result: list[dict[str, float | int]] = []
self.file_name: str = file_name

def get_result(self) -> list[dict[str, float | int]]:
return self.result

def execute(self, model: PySMTModel) -> None:
solver = Optimize()
if model.cvvs:
cvss_f = model.cvvs[self.file_name]
if model.func_obj_var is not None:
cvss_f = model.func_obj_var
solver.minimize(cvss_f)

formula = model.domains[self.file_name]
formula = model.domain
solver.add(formula)
while len(self.result) < self.limit and solver.check() == sat:
config = solver.model()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@

class NumberOfProducts(Operation):

def __init__(self, file_name: str) -> None:
self.file_name: str = file_name
def __init__(self) -> None:
self.result: int = 0

def get_result(self) -> int:
return self.result

def execute(self, model: PySMTModel) -> None:
formula = model.domains[self.file_name]
formula = model.domain
solver = Solver()
solver.add(formula)
while solver.check() == sat:
Expand Down
4 changes: 1 addition & 3 deletions flamapy/metamodels/smt_metamodel/operations/valid_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,16 @@ class ValidConfig(Operation):

def __init__(
self,
file_name: str,
config: dict[str, int]
) -> None:
self.file_name: str = file_name
self.config: dict[str, int] = config
self.result: bool = True

def get_result(self) -> bool:
return self.result

def execute(self, model: PySMTModel) -> None:
formula = model.domains[self.file_name]
formula = model.domain
solver = Solver()
solver.add(formula)
for package, count in self.config.items():
Expand Down
5 changes: 2 additions & 3 deletions flamapy/metamodels/smt_metamodel/operations/valid_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@

class ValidModel(Operation):

def __init__(self, file_name: str) -> None:
self.file_name: str = file_name
def __init__(self) -> None:
self.result: bool = True

def get_result(self) -> bool:
return self.result

def execute(self, model: PySMTModel) -> None:
formula = model.domains[self.file_name]
formula = model.domain
solver = Solver()
solver.add(formula)
self.result = solver.check() == sat
4 changes: 2 additions & 2 deletions flamapy/metamodels/smt_metamodel/transformations/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
from .network_to_smt import NetworkToSMT
from .graph_to_smt import GraphToSMT

__all__ = ['NetworkToSMT']
__all__ = ['GraphToSMT']
Loading

0 comments on commit 8f9bcf1

Please sign in to comment.