def get_violation_prob()

in violation_detection.py [0:0]


def get_violation_prob(disjunctions, slot_entities, distinct_slot_values):
    satisfying_score = 0
    for conj in disjunctions:
        atomic_probs = []
        for idx, atomic in enumerate(conj):
            assert atomic['operator'] == 'IN'
            try:
                atomic_probs.append(sum(
                    [slot_entities[idx][distinct_slot_values[atomic['slotVariable']].index(v)] for v in
                     atomic['values']]))
            except:
                print(atomic)
                print(distinct_slot_values[atomic['slotVariable']])
                raise Exception()
        satisfying_score += np.prod(atomic_probs)
    return 1 - satisfying_score