Skip to content
Snippets Groups Projects
Select Git revision
  • 1adffa138d9e9f360e0d6c6b582833f601cdf881
  • master default protected
  • multiprocessing
  • experiment/clara
  • experiment/spec2B-poc
  • experiment/qivalio-poc
  • experiment/ertms
  • MAY-2023
  • FEB-2023
  • EGC-2023
  • 0.2.1
  • v0.2.0
  • v0.1.2
13 results

test_rule.py

Blame
  • test_rule.py 4.46 KiB
    #!/usr/bin/python3.10
    # -*-coding:Utf-8 -*
    
    #==============================================================================
    # TENET: Extraction Rule Test
    #------------------------------------------------------------------------------
    # Script to test rules under development
    #==============================================================================
    
    import subprocess, os
    from rdflib import Graph
    from rdflib import Namespace
    from rdflib.namespace import NamespaceManager
    
    FILE_PATH = f'{os.path.dirname(os.path.abspath(__file__))}'
    INPUT_DIR_PATH = f'{FILE_PATH}/input/'
    OUTPUT_DIR_PATH = f'{FILE_PATH}/output/'
    TEST_GRAPH = f'{INPUT_DIR_PATH}testGraph1.ttl'
    
    from context import tenet
    from tenet.febTransduction import phenomena_application_or as test_rule
    from tenet.febTransduction import query_builder
    from tenet.febTransduction import prefix_handle
    
    INDENT_STR = '            '
    
    
    
    #==============================================================================
    # Useful Methods
    #==============================================================================
    
    def load_test_graph():
        print(f'\n -- Test Graph Loading')
        graph = Graph()
        prefix_handle.update_graph_namespacemanager(graph)
        graph.parse(TEST_GRAPH)
        print(f" ----- Graph Loaded ({len(graph)})")
        return graph
    
    
    def define_clause_list(composition_pattern_list):
        clause_list = []
        for (net_1, relation, net_2) in composition_pattern_list:
            clause_list.append(f'{net_1} {relation} {net_2}.')
        return clause_list
    
    
    
    
    #==============================================================================
    # Development Test
    #==============================================================================
    
    def devtest_select_pattern_application_1(graph):
        print('\n -- Select Pattern Application 1')
        query_code = test_rule.__select_pattern_1()
        print(query_code)
        pattern_result_set = graph.query(query_code) 
        print(f'\n ----- number of selection found: {len(pattern_result_set)}')
        for selection in pattern_result_set: 
            result_str = f'>>> '
            result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
            result_str += f' {selection.class_net.n3(graph.namespace_manager)}'
            result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
            print(result_str) 
            
    
    def devtest_select_pattern_application_2(graph):
        print('\n -- Select Pattern Application 2')
        query_code = test_rule.__select_pattern_2()
        print(query_code)
        pattern_result_set = graph.query(query_code) 
        print(f'\n ----- number of selection found: {len(pattern_result_set)}')
        for selection in pattern_result_set: 
            result_str = f'>>> '
            result_str += f'{selection.property_net.n3(graph.namespace_manager)}'
            result_str += f' {selection.property_net_0.n3(graph.namespace_manager)}'
            result_str += f' {selection.phenomena_net.n3(graph.namespace_manager)}'
            print(result_str) 
               
            
    def devtest_insert_query(graph):
        print(f'\n -- Insert Query Test')
        triple_list = ['net:net1 a net:ClassNet.', 
                       'net:net2 a net:PropertyNet.',
                        'net:net3 a net:ClassNet.']
        test_query = query_builder.generate_insert_query(triple_list)
        print(test_query)
        graph.update(test_query)
        print(f"----- Graph Updated ({len(graph)})")
        
        
    
    #==============================================================================
    # Unit Test
    #==============================================================================
    
    def unittest_run_rule(graph, rule):    
        print('\n -- Rule Test')
        rule_label, new_triple_list = rule(graph)
        print(f' ----- label: {rule_label}')
        print(f' ----- new_triple_list: {len(new_triple_list)}')
        for new_triple in new_triple_list:
            print(f'        | {new_triple}')
        
    
    
    #==============================================================================
    # Test Script
    #==============================================================================
    
    if __name__ == '__main__':
          
        print('\n *** Test Preparation ***')
        graph = load_test_graph()
        print('\n \n')
        
        print('\n *** Development Test ***')
        devtest_select_pattern_application_1(graph)
        devtest_select_pattern_application_2(graph)
        devtest_insert_query(graph)
        print('\n \n')
        
        print('\n *** Unit Test ***')
        unittest_run_rule(graph, test_rule.analyze_phenomena_or_1)
        unittest_run_rule(graph, test_rule.analyze_phenomena_or_2)
        print('\n \n')
    
        print('\n *** - ***')