-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added full matrix calculation and directory parsing
- Loading branch information
1 parent
359f02c
commit 058ad35
Showing
4 changed files
with
86 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
from typing import Union | ||
from cpm.models import ChangePropagationTree, DSM | ||
|
||
|
||
def calculate_risk_matrix(dsm_impact: DSM, dsm_likelihood: DSM, search_depth=4) \ | ||
-> list[list[Union[float, str]]]: | ||
""" | ||
Run Change Propagation algorithm on entire DSM, and generate a risk matrix. | ||
:param dsm_impact: | ||
:param dsm_likelihood: | ||
:param search_depth: | ||
:return: | ||
""" | ||
|
||
cpm: list[list[Union[float, str]]] = [] | ||
|
||
for l_index, lcol in enumerate(dsm_likelihood.columns): | ||
cpm.append([]) | ||
|
||
for i_index, icol in enumerate(dsm_impact.columns): | ||
cpt = ChangePropagationTree(i_index, l_index, | ||
dsm_impact=dsm_impact, | ||
dsm_likelihood=dsm_likelihood) | ||
cpt.propagate(search_depth=search_depth) | ||
cpm[l_index].append(cpt.get_risk()) | ||
|
||
return cpm |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
|
||
from cpm.parse import parse_csv | ||
from cpm.utils import calculate_risk_matrix | ||
|
||
|
||
def test_matrix_risk_calculation(): | ||
dsm_p = parse_csv('./tests/test-assets/dsm-cpx-probs.csv') | ||
dsm_i = parse_csv('./tests/test-assets/dsm-cpx-imps.csv') | ||
dsm_answers = parse_csv('./tests/test-assets/dsm-cpx-answers-risks.csv') | ||
|
||
depth = 4 | ||
|
||
dsm_risk = calculate_risk_matrix(dsm_i, dsm_p, search_depth=depth) | ||
|
||
assert dsm_risk is not None | ||
assert len(dsm_risk) > 0 | ||
|
||
for i, _ in enumerate(dsm_risk): | ||
for j, _ in enumerate(dsm_risk): | ||
if i == j: | ||
continue | ||
|
||
print(f'{dsm_answers.matrix[i][j]} {dsm_risk[i][j]}') | ||
if dsm_answers.matrix[i][j] in [None, 0] and dsm_risk[i][j] in [None, 0]: | ||
continue | ||
assert abs(dsm_answers.matrix[i][j] - dsm_risk[i][j]) < 0.001 |