def make_hierarchical_entailment(): """ Creates two Nile intents that entail each other with group hierarchy """ sentence_entities = {"id": "stn", "actions": []} hypothesis_entities = {"id": "hyp", "actions": []} sentence_entities, hypothesis_entities = sample_hierarchical_endpoints( sentence_entities, hypothesis_entities) option = randint(0, 7) if option == 0: sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) elif option == 1: sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) elif option == 2: sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') if option == 3: sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) elif option == 4: sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') elif option == 5: sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') else: sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') entailment = { 'type': 'hierarchical', 'sentence': interpreter.translate(sentence_entities), 'hypothesis': interpreter.translate(hypothesis_entities), 'contradiction': 0 } return entailment
def make_mixed_intent(): """ Creates a Nile intent with mixed intents""" sentence_entities = {"id": "stn", "operations": []} hypothesis_entities = {"id": "hyp", "operations": []} sentence_entities, _ = sample_entailing_endpoints(sentence_entities, hypothesis_entities) option = randint(0, 7) if option == 0: sentence_entities, _ = sample_entailing_chaining( sentence_entities, hypothesis_entities) elif option == 1: sentence_entities, _ = sample_entailing_rules(sentence_entities, hypothesis_entities) elif option == 2: sentence_entities, _ = sample_entailing_qos(sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') if option == 3: sentence_entities, _ = sample_entailing_chaining( sentence_entities, hypothesis_entities) sentence_entities, _ = sample_entailing_rules(sentence_entities, hypothesis_entities) elif option == 4: sentence_entities, _ = sample_entailing_rules(sentence_entities, hypothesis_entities) sentence_entities, _ = sample_entailing_qos(sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') elif option == 5: sentence_entities, _ = sample_entailing_chaining( sentence_entities, hypothesis_entities) sentence_entities, _ = sample_entailing_qos(sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') else: sentence_entities, _ = sample_entailing_chaining( sentence_entities, hypothesis_entities) sentence_entities, _ = sample_entailing_rules(sentence_entities, hypothesis_entities) sentence_entities, _ = sample_entailing_qos(sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') intent = { 'type': 'mixed', 'nile': builder.build(sentence_entities), } return intent
def make_hierarchical_entailment(): """ Creates two Nile intents that entail each other with group hierarchy """ sentence_entities = {"id": "stn", "operations": []} hypothesis_entities = {"id": "hyp", "operations": []} sentence_entities, hypothesis_entities = sample_hierarchical_endpoints( sentence_entities, hypothesis_entities) option = randint(0, 2) if option == 0: sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) elif option == 1: sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) elif option == 2: sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') entailment = { 'type': 'hierarchical', 'sentence': builder.build(sentence_entities), 'hypothesis': builder.build(hypothesis_entities), 'conflict': 0 } return entailment
def make_negation_entailment(): """ Creates two Nile intents that entail each other with negation """ sentence_entities = {"id": "stn", "actions": []} hypothesis_entities = {"id": "hyp", "actions": []} sentence_entities, hypothesis_entities = sample_contradicting_endpoints( sentence_entities, hypothesis_entities) # middleboxes sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) # allow/block sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) # set/unset sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') entailment = { 'type': 'negation', 'sentence': interpreter.translate(sentence_entities), 'hypothesis': interpreter.translate(hypothesis_entities), 'contradiction': 0 } return entailment
def make_time_entailment(): """ Creates two Nile intents that entail each other with time constraints""" sentence_entities = {"id": "stn", "actions": []} hypothesis_entities = {"id": "hyp", "actions": []} sentence_entities, hypothesis_entities = sample_contradicting_endpoints( sentence_entities, hypothesis_entities) # middleboxes if randint(1, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) else: sentence_entities, hypothesis_entities = sample_contradicting_chaining( sentence_entities, hypothesis_entities) # allow/block if randint(1, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) else: sentence_entities, hypothesis_entities = sample_contradicting_rules( sentence_entities, hypothesis_entities) # start/end sentence_entities, hypothesis_entities = sample_entailing_timeranges( sentence_entities, hypothesis_entities) entailment = { 'type': 'time', 'sentence': interpreter.translate(sentence_entities), 'hypothesis': interpreter.translate(hypothesis_entities), 'contradiction': 0 } return entailment
def make_time_entailment(): """ Creates two Nile intents that entail each other with time constraints""" sentence_entities = {"id": "stn", "operations": []} hypothesis_entities = {"id": "hyp", "operations": []} sentence_entities, hypothesis_entities = sample_conflicting_endpoints( sentence_entities, hypothesis_entities) option = randint(0, 2) if option == 0: # middleboxes if randint(1, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) else: sentence_entities, hypothesis_entities = sample_conflicting_chaining( sentence_entities, hypothesis_entities) elif option == 1: # allow/block if randint(1, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) else: sentence_entities, hypothesis_entities = sample_conflicting_rules( sentence_entities, hypothesis_entities) elif option == 2: # allow/block if randint(1, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities) else: sentence_entities, hypothesis_entities = sample_conflicting_qos( sentence_entities, hypothesis_entities) # start/end sentence_entities, hypothesis_entities = sample_entailing_timeranges( sentence_entities, hypothesis_entities) entailment = { 'type': 'time', 'sentence': builder.build(sentence_entities), 'hypothesis': builder.build(hypothesis_entities), 'conflict': 0 } return entailment
def make_negation_entailment(): """ Creates two Nile intents that entail each other with negation """ sentence_entities = {"id": "stn", "operations": []} hypothesis_entities = {"id": "hyp", "operations": []} sentence_entities, hypothesis_entities = sample_conflicting_endpoints( sentence_entities, hypothesis_entities) option = randint(0, 2) if option == 0: # add/remove sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) elif option == 1: # allow/block sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) elif option == 2: # set/unset sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities, stn_action='set', hyp_action='unset') if 'allow' in sentence_entities[ 'operations'] or 'block' in sentence_entities['operations']: if randint(0, 2) % 2 == 0: sentence_entities['operations'].append('add') sentence_entities['middleboxes'] = ['firewall'] if randint(0, 2) % 2 == 0: hypothesis_entities['operations'].append('add') hypothesis_entities['middleboxes'] = ['firewall'] entailment = { 'type': 'negation', 'sentence': builder.build(sentence_entities), 'hypothesis': builder.build(hypothesis_entities), 'conflict': 0 } return entailment
def make_path_entailment(): """ Creates two Nile intents that entail each other due to non coference""" sentence_entities = {"id": "stn", "actions": []} hypothesis_entities = {"id": "hyp", "actions": []} sentence_entities, hypothesis_entities = sample_entailing_endpoints( sentence_entities, hypothesis_entities) if randint(0, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_chaining( sentence_entities, hypothesis_entities) else: sentence_entities, hypothesis_entities = sample_contradicting_chaining( sentence_entities, hypothesis_entities) if randint(0, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_rules( sentence_entities, hypothesis_entities) else: sentence_entities, hypothesis_entities = sample_contradicting_rules( sentence_entities, hypothesis_entities) if randint(0, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_qos( sentence_entities, hypothesis_entities) else: sentence_entities, hypothesis_entities = sample_contradicting_qos( sentence_entities, hypothesis_entities) if randint(0, 10) % 2 == 0: sentence_entities, hypothesis_entities = sample_entailing_timeranges( sentence_entities, hypothesis_entities) entailment = { 'type': 'path', 'sentence': interpreter.translate(sentence_entities), 'hypothesis': interpreter.translate(hypothesis_entities), 'contradiction': 0 } return entailment