Source code for qbaf_robustness.consistency_checks

from qbaf import QBAFramework

[docs] def is_bounded_update(qbaf_initial: QBAFramework, qbaf_update: QBAFramework, epsilon: float, mutable_args: set) -> bool: """ Checks whether qbaf_update is an epsilon and mutable_args bounded update. Args: qbaf_initial (QBAFramework): The initial QBAF. qbaf_update (QBAFramework): The updated QBAF. mutable_args (set): The set of mutable arguments whose strength is suspected to change. epsilon (float): The permissible range of strength change. Retruns: bool: True if qbaf_update is an epsilon and mutable_args bounded update,false otherwise. """ k = 0 qbaf_initial_args = set(qbaf_initial.arguments) if (qbaf_initial.arguments == qbaf_update.arguments and qbaf_initial.attack_relations == qbaf_update.attack_relations and qbaf_initial.support_relations == qbaf_update.support_relations): k = 1 if (k == 1): for arg in mutable_args: if ((qbaf_update.initial_strength(arg) >= (qbaf_initial.initial_strength(arg) + epsilon)) or (qbaf_update.initial_strength(arg) <= (qbaf_initial.initial_strength(arg) - epsilon)) ): return False for arg in qbaf_initial_args.difference(mutable_args): if (qbaf_update.initial_strength(arg) != qbaf_initial.initial_strength(arg)): return False return True if (k == 0): return False
[docs] def is_expansion(qbaf_initial: QBAFramework, qbaf_update: QBAFramework) -> bool: """ Checks whether qbaf_update is a normal expansion of qbaf_initial. Args: qbaf_initial (QBAFramework): The initial QBAF. qbaf_update (QBAFramework): The updated QBAF. Returns: bool: True if qbaf_update is a normal expansion of qbaf_initial, False otherwise. """ k = 0 args_initial = set(qbaf_initial.arguments) attack_rel = set(qbaf_initial.attack_relations) support_rel = set(qbaf_initial.support_relations) if ((args_initial).issubset(qbaf_update.arguments) and (attack_rel).issubset(qbaf_update.attack_relations) and (support_rel).issubset(qbaf_update.support_relations)): k = 1 if (k == 1): args = qbaf_initial.arguments for arg in args: if (qbaf_initial.initial_strength(arg) != qbaf_update.initial_strength(arg)): return False return True if (k == 0): return False
[docs] def is_general_robust_consistent(qbaf_initial: QBAFramework, qbaf_collection: list[QBAFramework], topic_argument_1: str, topic_argument_2: str) -> bool: """ Checks whether qbaf_initial is general robust consistent with respect to qbaf_collection. Args: qbaf_initial (QBAFramework): The initial QBAF. qbaf_collection (list[QBAFramework]): The collection of QBAF updates. topic_argument_1 (str): The first topic argument whose strength is considered. topic_argument_2 (str): The second topic argument whose strength is considered. Returns: bool: True if qbaf_initial is general robust consistent with respect to qbaf_collection, False otherwise. """ for qbaf in qbaf_collection: if (not qbaf.are_strength_consistent(qbaf_initial, topic_argument_1, topic_argument_2)): return False return True
[docs] def is_expansion_robust_consistent(qbaf_initial: QBAFramework, qbaf_collection: list[QBAFramework], topic_argument_1: str, topic_argument_2: str ) -> bool: """ Checks whether qbaf_initial is expansion robust consistent with respect to qbaf_collection. Args: qbaf_initial (QBAFramework): The initial QBAF. qbaf_collection (list[QBAFramework]): The collection of QBAF updates. topic_argument_1 (str): The first topic argument whose strength is considered. topic_argument_2 (str): The second topic argument whose strength is considered. Returns: bool: True if qbaf_initial is general robust consistent with respect to qbaf_collection, False otherwise. """ updated_qbaf_collection = [qbaf for qbaf in qbaf_collection if (is_expansion(qbaf_initial, qbaf))] for qbaf in updated_qbaf_collection: if (not qbaf.are_strength_consistent(qbaf_initial, topic_argument_1, topic_argument_2)): return False return True
[docs] def is_bounded_updates_robust_consistent(qbaf_initial: QBAFramework, qbaf_updates: list[QBAFramework], topic_argument_1: str, topic_argument_2: str, epsilon: float, mutable_args: set) -> bool: """ Checks whether qbaf_initial is bounded-update robust consistent with respect to qbaf_collection, epsilon and the mutable_args. Args: qbaf_initial (QBAFramework): The initial QBAF. qbaf_updates (list[QBAFramework]): The collection of QBAF updates. topic_argument_1 (str): The first topic argument whose strength is considered. topic_argument_2 (str): The second topic argument whose strength is considered. epsilon (float): The permissible range of strength change. mutable_args (set): The set of mutable arguments whose strength is suspected to change. Returns: bool: True if qbaf_initial is bounded-update robust consistent with respect to qbaf_collection. """ updated_qbaf_collection = [qbaf for qbaf in qbaf_updates if (is_bounded_update(qbaf_initial, qbaf, epsilon, mutable_args))] for qbaf in updated_qbaf_collection: if (not qbaf.are_strength_consistent(qbaf_initial, topic_argument_1, topic_argument_2)): return False return True