Skip to content
Snippets Groups Projects
Commit 91f83e89 authored by Aurélien Lamercerie's avatar Aurélien Lamercerie
Browse files

Update AMR Rule: transduction.phenomena_and_analyzer_1

parent 56a8ccca
No related branches found
No related tags found
No related merge requests found
Showing
with 3997 additions and 2308 deletions
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# TENET: Rule to conjunctive phenomena and (rule 1) # TENET: Rule to conjunctive phenomena and (rule 1)
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
# Net Expansion AMR rule to analyse conjunctive phenomena (and) # Net Expansion AMR rule to analyse conjunctive phenomena (and)
# Rule: property(class, and_phenomena) => compositeClass # Rule: property(_, and_phenomena) => relation(property, argument)
#============================================================================== #==============================================================================
from rdflib import Graph from rdflib import Graph
...@@ -13,7 +13,7 @@ from rdflib import Graph ...@@ -13,7 +13,7 @@ from rdflib import Graph
import transduction import transduction
from transduction import net from transduction import net
from transduction.query_builder import generate_select_query from transduction.query_builder import generate_select_query
from transduction.naming_computer import define_composite_naming_1, define_restriction_naming from transduction.rdfterm_computer import produce_uriref, produce_literal
#============================================================================== #==============================================================================
...@@ -23,13 +23,11 @@ from transduction.naming_computer import define_composite_naming_1, define_restr ...@@ -23,13 +23,11 @@ from transduction.naming_computer import define_composite_naming_1, define_restr
CONJUNCTION_PHENOMENA_URI = 'amr:phenomena_conjunction_and' CONJUNCTION_PHENOMENA_URI = 'amr:phenomena_conjunction_and'
def __search_pattern(graph): def __search_pattern(graph):
select_data_list = ['?property_net', '?class_net', '?phenomena_net'] select_data_list = ['?property_net', '?relation_role', '?phenomena_net']
clause_list = [f'?property_net a [rdfs:subClassOf* net:Property_Net].', clause_list = [f'?property_net a [rdfs:subClassOf* net:Property_Net].',
f'?class_net a [rdfs:subClassOf* net:Class_Net].',
f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].', f'?phenomena_net a [rdfs:subClassOf* net:Phenomena_Net].',
f'?phenomena_net net:hasPhenomenaType {CONJUNCTION_PHENOMENA_URI}.', f'?phenomena_net net:hasPhenomenaType {CONJUNCTION_PHENOMENA_URI}.',
f'?property_net amr:role_ARG0 ?class_net.', f'?property_net ?relation_role ?phenomena_net.']
f'?property_net amr:role_ARG1 ?phenomena_net.']
query_code = generate_select_query(graph, select_data_list, clause_list) query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code) result_set = graph.query(query_code)
return query_code, result_set return query_code, result_set
...@@ -40,21 +38,40 @@ def __search_pattern(graph): ...@@ -40,21 +38,40 @@ def __search_pattern(graph):
# Useful Additional Search # Useful Additional Search
#============================================================================== #==============================================================================
def __class_op_pattern_query_code(graph, phenomena_net_uri, num): def __search_op_class_pattern(graph, phenomena_net_uri, num):
assert 1 <= num <= 9, f'invalid number ({num})' assert 1 <= num <= 9, f'invalid number ({num})'
select_data_list = ['?class_net'] select_data_list = ['?class_net']
clause_list = [f'?class_net a [rdfs:subClassOf* net:Class_Net].'] clause_list = [f'?class_net a [rdfs:subClassOf* net:Class_Net].',
clause_list.append((phenomena_net_uri, f'amr:role_op{num}', '?class_net')) (phenomena_net_uri, f'amr:role_op{num}', '?class_net')]
query_code = generate_select_query(graph, select_data_list, clause_list) query_code = generate_select_query(graph, select_data_list, clause_list)
return query_code result_set = graph.query(query_code)
return query_code, result_set
def __search_phenomena_operator_class(graph, phenomena_net_uri):
query_code = ''
op_set = []
for num in range(1, 9+1):
query_code, result_set = __search_op_class_pattern(graph, phenomena_net_uri, num)
op_set += result_set
return query_code, op_set
def __search_op_property_pattern(graph, phenomena_net_uri, num):
assert 1 <= num <= 9, f'invalid number ({num})'
select_data_list = ['?property_net']
clause_list = [f'?property_net a [rdfs:subClassOf* net:Property_Net].',
(phenomena_net_uri, f'amr:role_op{num}', '?property_net')]
query_code = generate_select_query(graph, select_data_list, clause_list)
result_set = graph.query(query_code)
return query_code, result_set
def __search_class_phenomena_operator(graph, phenomena_net_uri): def __search_phenomena_operator_property(graph, phenomena_net_uri):
query_code = ''
op_set = [] op_set = []
for num in range(1, 9+1): for num in range(1, 9+1):
query_code = __class_op_pattern_query_code(graph, phenomena_net_uri, num) query_code, result_set = __search_op_property_pattern(graph, phenomena_net_uri, num)
op_set += graph.query(query_code) op_set += result_set
return op_set return query_code, op_set
...@@ -62,20 +79,10 @@ def __search_class_phenomena_operator(graph, phenomena_net_uri): ...@@ -62,20 +79,10 @@ def __search_class_phenomena_operator(graph, phenomena_net_uri):
# Useful Computation Method(s) # Useful Computation Method(s)
#============================================================================== #==============================================================================
def __filter_relation(relation_list): def __propagate_relation(left_net, amr_relation_uri, right_net_uri):
result_list = [] new_relation = (left_net.uri, amr_relation_uri, right_net_uri)
for relation in relation_list: up_relation_list = left_net.output_relation_list + [new_relation]
check = True left_net.output_relation_list = up_relation_list
(s, p, o) = relation
if s == o: check = False
if check: result_list.append(relation)
return result_list
def __propagate_relation(target_net, base_net):
# -- target_net.input_relation_list = base_net.input_relation_list
out_relation_list = __filter_relation(base_net.output_relation_list)
target_net.output_relation_list = out_relation_list
...@@ -83,79 +90,7 @@ def __propagate_relation(target_net, base_net): ...@@ -83,79 +90,7 @@ def __propagate_relation(target_net, base_net):
# Construct Method(s) # Construct Method(s)
#============================================================================== #==============================================================================
def __construct_restriction_net(graph, property_net_1, property_net_2): # None
restriction_net = net.RestrictionNet(graph)
restriction_net.compose(property_net_1, property_net_2)
# -- Data Computation
restriction_net.restriction_property = property_net_1.uri
restriction_net.restriction_net_value = property_net_2.uri
# -- Relation Propagation: None
# -- Net Naming
restriction_net.naming = define_restriction_naming(property_net_1, property_net_2)
# -- Finalization
restriction_net.finalize()
triple_list = restriction_net.generate_triple_definition()
return restriction_net, triple_list
def __construct_composite_class_net_from_3_nets(
graph, base_class_net, core_property_net, target_class_net):
# -- Net Composition
composite_class_net = net.CompositePropertyNet(graph)
composite_class_net.compose(base_class_net, core_property_net, target_class_net)
# -- Data Computation
composite_class_net.mother_class_net = base_class_net.uri
# -- Restriction Computation
restriction_net, triple_list_1 = __construct_restriction_net(graph, core_property_net, target_class_net)
composite_class_net.restriction = restriction_net.uri
# -- Relation Propagation
__propagate_relation(composite_class_net, base_class_net)
# -- Net Naming
composite_class_net.naming = define_composite_naming_1(
base_class_net, core_property_net, target_class_net)
# -- Finalization
composite_class_net.finalize()
triple_list_2 = composite_class_net.generate_triple_definition()
result_triple_list = triple_list_1 + triple_list_2
return composite_class_net, result_triple_list
def __construct_class_union_net(graph, base_class_net, class_net_list):
# -- Net Composition
class_union_net = net.PropertyUnionNet(graph)
class_union_net.compose(base_class_net, class_net_list)
# -- Data Computation: None
# -- Restriction Computation: None
# -- Relation Propagation
__propagate_relation(class_union_net, base_class_net)
# -- Net Naming
class_union_net.naming = define_union_naming(base_class_net)
# -- Finalization
class_union_net.finalize()
triple_list = class_union_net.generate_triple_definition()
return class_union_net, triple_list
#============================================================================== #==============================================================================
...@@ -173,31 +108,27 @@ def analyze_phenomena_and_1(graph): ...@@ -173,31 +108,27 @@ def analyze_phenomena_and_1(graph):
# -- Pattern Analysis # -- Pattern Analysis
for pattern in pattern_set: for pattern in pattern_set:
class_net_1 = net.ClassNet(graph, uri=pattern.class_net)
property_net = net.PropertyNet(graph, uri=pattern.property_net) property_net = net.PropertyNet(graph, uri=pattern.property_net)
phenomena_net = net.PhenomenaNet(graph, uri=pattern.phenomena_net) phenomena_net = net.PhenomenaNet(graph, uri=pattern.phenomena_net)
# -- Search for phenomena operators # -- Search for phenomena operators
class_operator_set = __search_class_phenomena_operator(graph, phenomena_net.uri)
# -- Selection Analyzing (2)
class_net_list = []
for selection_2 in class_operator_set:
# print(f' *** DEVTEST *** {selection_2.class_net}')
# -- Net Selection
class_net_2 = net.ClassNet(graph, uri=selection_2.class_net)
# -- New Net Construction (from 3 nets)
new_class, triple_list = __construct_composite_class_net_from_3_nets(
graph, class_net_1, property_net, class_net_2)
# -- Resulting List Update # -- Relation Propagation for Operator Class Net
class_net_list.append(new_class) _, operator_class_set = __search_phenomena_operator_class(graph, phenomena_net.uri)
rule_triple_list += triple_list for operator in operator_class_set:
amr_relation_uri = produce_uriref(graph, pattern.relation_role)
right_net_uri = produce_uriref(graph, operator.class_net)
__propagate_relation(property_net, amr_relation_uri, right_net_uri)
rule_triple_list += property_net.generate_net_relation_triples()
# -- Relation Propagation for Operator Class Net
_, operator_property_set = __search_phenomena_operator_property(graph, phenomena_net.uri)
for operator in operator_property_set:
amr_relation_uri = produce_uriref(graph, pattern.relation_role)
right_net_uri = produce_uriref(graph, operator.property_net)
__propagate_relation(property_net, amr_relation_uri, right_net_uri)
rule_triple_list += property_net.generate_net_relation_triples()
# -- Deprecation: Origin Class Net
rule_triple_list += class_net_1.deprecate()
# -- New Net Construction (as union of properties) # -- New Net Construction (as union of properties)
# _, triple_list = __construct_class_union_net(graph, class_net_1, class_net_list) # _, triple_list = __construct_class_union_net(graph, class_net_1, class_net_list)
......
...@@ -193,8 +193,7 @@ phenomena_analyze_sequence_1 = ['phenomena analyze sequence (1)', ...@@ -193,8 +193,7 @@ phenomena_analyze_sequence_1 = ['phenomena analyze sequence (1)',
phenomena_analyze_sequence_2 = ['phenomena analyze sequence (2)', phenomena_analyze_sequence_2 = ['phenomena analyze sequence (2)',
rule.analyze_phenomena_or_1, rule.analyze_phenomena_or_1,
rule.analyze_phenomena_or_2, rule.analyze_phenomena_or_2,
rule.analyze_phenomena_and_1, rule.analyze_phenomena_and_1]
rule.analyze_phenomena_and_2]
composite_class_extraction_sequence = ['composite class extraction sequence', composite_class_extraction_sequence = ['composite class extraction sequence',
rule.extract_composite_class_1, rule.extract_composite_class_1,
......
This diff is collapsed.
...@@ -31,7 +31,7 @@ class ActionNet(Net): ...@@ -31,7 +31,7 @@ class ActionNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'action' self.type_name = 'action'
self.type_id = 'Action_Net' self.type_id = 'Action_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['action_name', self.attr_list += ['action_name',
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#============================================================================== #==============================================================================
from transduction.net import ClassNet from transduction.net import ClassNet
from transduction.rdfterm_computer import produce_uriref, produce_literal
#============================================================================== #==============================================================================
...@@ -30,4 +31,4 @@ class AtomClassNet(ClassNet): ...@@ -30,4 +31,4 @@ class AtomClassNet(ClassNet):
# -- Net Type # -- Net Type
self.type_name = 'atomClass' self.type_name = 'atomClass'
self.type_id = 'Atom_Class_Net' self.type_id = 'Atom_Class_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
\ No newline at end of file \ No newline at end of file
...@@ -31,7 +31,7 @@ class AtomPropertyNet(PropertyNet): ...@@ -31,7 +31,7 @@ class AtomPropertyNet(PropertyNet):
# -- Net Type # -- Net Type
self.type_name = 'atomProperty' self.type_name = 'atomProperty'
self.type_id = 'Atom_Property_Net' self.type_id = 'Atom_Property_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['core_role', 'target_argument_node', 'property_type', self.attr_list += ['core_role', 'target_argument_node', 'property_type',
......
...@@ -31,7 +31,7 @@ class AxiomNet(Net): ...@@ -31,7 +31,7 @@ class AxiomNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'axiom' self.type_name = 'axiom'
self.type_id = 'Axiom_Net' self.type_id = 'Axiom_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['axiom_name', 'axiom_uri', 'axiom_net_argument'] self.attr_list += ['axiom_name', 'axiom_uri', 'axiom_net_argument']
......
...@@ -31,7 +31,7 @@ class ClassNet(Net): ...@@ -31,7 +31,7 @@ class ClassNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'class' self.type_name = 'class'
self.type_id = 'Class_Net' self.type_id = 'Class_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['class_name', 'class_uri'] self.attr_list += ['class_name', 'class_uri']
......
...@@ -31,7 +31,7 @@ class CompositeClassNet(ClassNet): ...@@ -31,7 +31,7 @@ class CompositeClassNet(ClassNet):
# -- Net Type # -- Net Type
self.type_name = 'compositeClass' self.type_name = 'compositeClass'
self.type_id = 'Composite_Class_Net' self.type_id = 'Composite_Class_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['mother_class_net', 'restriction', 'restriction01'] self.attr_list += ['mother_class_net', 'restriction', 'restriction01']
......
...@@ -31,7 +31,7 @@ class CompositePropertyNet(PropertyNet): ...@@ -31,7 +31,7 @@ class CompositePropertyNet(PropertyNet):
# -- Net Type # -- Net Type
self.type_name = 'compositeProperty' self.type_name = 'compositeProperty'
self.type_id = 'Composite_Property_Net' self.type_id = 'Composite_Property_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['mother_property_net', 'core_role', 'target_argument_node', 'property_type', 'restriction'] self.attr_list += ['mother_property_net', 'core_role', 'target_argument_node', 'property_type', 'restriction']
......
...@@ -31,7 +31,7 @@ class IndividualNet(Net): ...@@ -31,7 +31,7 @@ class IndividualNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'individual' self.type_name = 'individual'
self.type_id = 'Individual_Net' self.type_id = 'Individual_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['base_class_name', 'mother_class_net', 'individual_label', 'individual_uri'] self.attr_list += ['base_class_name', 'mother_class_net', 'individual_label', 'individual_uri']
......
...@@ -31,7 +31,7 @@ class PhenomenaNet(Net): ...@@ -31,7 +31,7 @@ class PhenomenaNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'phenomena' self.type_name = 'phenomena'
self.type_id = 'Phenomena_Net' self.type_id = 'Phenomena_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['phenomena_type', 'phenomena_ref'] self.attr_list += ['phenomena_type', 'phenomena_ref']
......
...@@ -31,7 +31,7 @@ class PropertyNet(Net): ...@@ -31,7 +31,7 @@ class PropertyNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'property' self.type_name = 'property'
self.type_id = 'Property_Net' self.type_id = 'Property_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['property_name', 'property_uri'] self.attr_list += ['property_name', 'property_uri']
......
...@@ -31,7 +31,7 @@ class RestrictionNet(Net): ...@@ -31,7 +31,7 @@ class RestrictionNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'restriction' self.type_name = 'restriction'
self.type_id = 'Restriction_Net' self.type_id = 'Restriction_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['target_node', 'restriction_property', 'restriction_net_value'] self.attr_list += ['target_node', 'restriction_property', 'restriction_net_value']
......
...@@ -31,7 +31,7 @@ class RuleNet(Net): ...@@ -31,7 +31,7 @@ class RuleNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'rule' self.type_name = 'rule'
self.type_id = 'Rule_Net' self.type_id = 'Rule_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['rule_relation_name', 'rule_action_net'] self.attr_list += ['rule_relation_name', 'rule_action_net']
......
...@@ -31,7 +31,7 @@ class ValueNet(Net): ...@@ -31,7 +31,7 @@ class ValueNet(Net):
# -- Net Type # -- Net Type
self.type_name = 'value' self.type_name = 'value'
self.type_id = 'Value_Net' self.type_id = 'Value_Net'
self.type_uri = f'net:{self.type_id}' self.type_uri = produce_uriref(self.support_graph, f'net:{self.type_id}')
# -- Net Attributes # -- Net Attributes
self.attr_list += ['amr_value', 'value_label'] self.attr_list += ['amr_value', 'value_label']
......
This diff is collapsed.
This diff is collapsed.
...@@ -92,7 +92,7 @@ def test_search_pattern_1(graph): ...@@ -92,7 +92,7 @@ def test_search_pattern_1(graph):
for selection in pattern_set: for selection in pattern_set:
result_str = f'>>> ' result_str = f'>>> '
result_str += f'{selection.property_net.n3(graph.namespace_manager)}' result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
result_str += f' {selection.class_net.n3(graph.namespace_manager)}' result_str += f' {selection.relation_role.n3(graph.namespace_manager)}'
result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}' result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
print(result_str) print(result_str)
return pattern_set return pattern_set
...@@ -111,12 +111,22 @@ def test_search_pattern_2(graph): ...@@ -111,12 +111,22 @@ def test_search_pattern_2(graph):
return pattern_set return pattern_set
def test_search_operators(graph, phenomena_net_uri): def test_search_operators_1(graph, phenomena_net_uri):
print('\n *** DEVTEST *** Search for operators') print('\n *** DEVTEST *** Search for operators')
query_code = rule_2.__property_op_pattern_query_code(graph, phenomena_net_uri, 1) query_code, result_set = rule_1.__search_phenomena_operator_class(graph, phenomena_net_uri)
print(f' -- query code for operator 1: \n{query_code}') print(f' -- query code: \n{query_code}')
result_set = rule_2.__search_property_phenomena_operator(graph, phenomena_net_uri) print(f'\n ----- result number: {len(result_set)}')
print(f'\n ----- number of selection found: {len(result_set)}') for selection in result_set:
result_str = f'>>> '
result_str += f'{selection.class_net.n3(graph.namespace_manager)}'
print(result_str)
def test_search_operators_2(graph, phenomena_net_uri):
print('\n *** DEVTEST *** Search for operators')
query_code, result_set = rule_1.__search_phenomena_operator_property(graph, phenomena_net_uri)
print(f' -- query code: \n{query_code}')
print(f'\n ----- result number: {len(result_set)}')
for selection in result_set: for selection in result_set:
result_str = f'>>> ' result_str = f'>>> '
result_str += f'{selection.property_net.n3(graph.namespace_manager)}' result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
...@@ -158,7 +168,7 @@ if __name__ == '__main__': ...@@ -158,7 +168,7 @@ if __name__ == '__main__':
uriref = URIRef('net:compositeClass_orbit_hasManner_conjunction-OR') uriref = URIRef('net:compositeClass_orbit_hasManner_conjunction-OR')
type_uriref = URIRef('net:Composite_Class_Net') type_uriref = URIRef('net:Composite_Class_Net')
triple = (uriref, RDF.type, type_uriref) triple = (uriref, RDF.type, type_uriref)
phenomena_net_uri = 'net:phenomena_conjunction-AND_o3' phenomena_net_uri = 'net:phenomena_conjunction-AND_a'
print('\n \n') print('\n \n')
...@@ -168,6 +178,8 @@ if __name__ == '__main__': ...@@ -168,6 +178,8 @@ if __name__ == '__main__':
print('\n -- Step 1: Search Pattern') print('\n -- Step 1: Search Pattern')
pattern_set = test_search_pattern_1(graph_1) pattern_set = test_search_pattern_1(graph_1)
test_search_operators_1(graph_1, phenomena_net_uri)
test_search_operators_2(graph_1, phenomena_net_uri)
print('\n \n') print('\n \n')
print('\n *** Unit Test ***') print('\n *** Unit Test ***')
...@@ -175,18 +187,18 @@ if __name__ == '__main__': ...@@ -175,18 +187,18 @@ if __name__ == '__main__':
print('\n \n') print('\n \n')
print('\n ///////////////////// Extraction Rule 2') # print('\n ///////////////////// Extraction Rule 2')
print('\n *** Step Test ***') # print('\n *** Step Test ***')
print('\n -- Step 1: Search Pattern') # print('\n -- Step 1: Search Pattern')
pattern_set = test_search_pattern_2(graph_2) # pattern_set = test_search_pattern_2(graph_2)
test_search_operators(graph_2, phenomena_net_uri) # test_search_operators(graph_2, phenomena_net_uri)
print('\n \n') # print('\n \n')
print('\n *** Unit Test ***') # print('\n *** Unit Test ***')
test_rule_application(TEST_FILE_NAME_2, graph_2, rule.analyze_phenomena_and_2) # test_rule_application(TEST_FILE_NAME_2, graph_2, rule.analyze_phenomena_and_2)
print('\n \n') # print('\n \n')
print('\n *** - ***') print('\n *** - ***')
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment