Пример #1
0
def translate_value(session, _segment, _value_node, _value):
    """Setup value \p _value to \p _value_node
    @return: Return list of creates sc-elements
    """   
    v_node = sc_utils.createNodeElement(session, _segment, sc.SC_CONST)
    bin_pair = sc_utils.createPairBinaryOrientFull(session, _segment, v_node, _value_node, sc.SC_CONST)
    a = sc_utils.createPairPosPerm(session, _segment, keynodes.common.nrel_value, bin_pair[0], sc.SC_CONST)
    
    res = [v_node, a, keynodes.common.nrel_value]
    res.extend(bin_pair) 
    
    vu_node = sc_utils.createNodeElement(session, _segment, sc.SC_CONST)
    a = sc_utils.createPairPosPerm(session, _segment, v_node, vu_node, sc.SC_CONST)
    
    res.extend([vu_node, a])
    
    # make identification
    idtf_node = sc_utils.createNodeSheaf(session, _segment, sc.SC_CONST)
    bin_pair = sc_utils.createPairBinaryOrientFull(session, _segment, idtf_node, vu_node, sc.SC_CONST)
    a = sc_utils.createPairPosPerm(session, _segment, keynodes.common.nrel_identification, bin_pair[0], sc.SC_CONST)
    
    res.extend([idtf_node, a, keynodes.common.nrel_identification])
    res.extend(bin_pair)
    
    # set value
    val = sc_utils.createNodeElement(session, _segment, sc.SC_CONST)
    sc_utils.setContentReal(session, _segment, val, _value)
    a = sc_utils.createPairPosPerm(session, _segment, idtf_node, val, sc.SC_CONST)
    a1 = sc_utils.createPairPosPerm(session, _segment, keynodes.common.rrel_dec_number, a, sc.SC_CONST)
    
    res.extend([val, a, a1, keynodes.common.rrel_dec_number])
    
    return res
Пример #2
0
def calculate_graph_prop(_params, _segment):
    
    kernel = core.Kernel.getSingleton()
    session = kernel.session()
    segment = kernel.segment()
        
    # check type
    question = session.search_one_shot(session.sc_constraint_new(sc_constants.CONSTR_5_f_a_a_a_f,
                                                                 keynodes.questions.initiated,
                                                                 sc.SC_A_CONST,
                                                                 sc.SC_N_CONST,
                                                                 sc.SC_A_CONST,
                                                                 _params), True, 5)
    
    assert question is not None
    question = question[2]
    
    global graph_prop_calculators
    for question_type, calculator, relation in graph_prop_calculators:   
        # check command type
        if sc_utils.checkIncToSets(session, question, [question_type], sc.SC_CONST):
  
            graph = session.search_one_shot(session.sc_constraint_new(sc_constants.CONSTR_3_f_a_a,
                                                                      question,
                                                                      sc.SC_A_CONST,
                                                                      sc.SC_N_CONST), True, 3)
            
            if graph is None:
                return
            
            graph = graph[2]
            
            if not sc_utils.checkIncToSets(session, graph, [graph_keynodes.Common.graph], sc.SC_CONST):
                return
            
            g = Graph(segment, graph)
            g.makeNxGraph()
                        
            result = calculator(g.graphNx)
            
            if result is None:
                raise RuntimeWarning("Calculator can't calculate value")
            
            value = sc_utils.createNodeElement(session, segment, sc.SC_CONST)
            bin_rel = sc_utils.createPairBinaryOrientFull(session, segment, graph, value, sc.SC_CONST)
            a = sc_utils.createPairPosPerm(session, segment, relation, bin_rel[0], sc.SC_CONST)
            
            elements = translate_value(session, segment, value, result)
            
            elements.extend([value, graph, a, relation])
            elements.extend(bin_rel)
            
            
            answer = sc_utils.createNodeElement(session, segment, sc.SC_CONST)
            for el in elements:
                sc_utils.createPairPosPerm(session, segment, answer, el, sc.SC_CONST)
                
            sc_utils.makeAnswer(session, segment, question, answer)
Пример #3
0
def translate_value(session, _segment, _value_node, _value):
    """Setup value \p _value to \p _value_node
    @return: Return list of creates sc-elements
    """
    v_node = sc_utils.createNodeElement(session, _segment, sc.SC_CONST)
    bin_pair = sc_utils.createPairBinaryOrientFull(session, _segment, v_node,
                                                   _value_node, sc.SC_CONST)
    a = sc_utils.createPairPosPerm(session, _segment,
                                   keynodes.common.nrel_value, bin_pair[0],
                                   sc.SC_CONST)

    res = [v_node, a, keynodes.common.nrel_value]
    res.extend(bin_pair)

    vu_node = sc_utils.createNodeElement(session, _segment, sc.SC_CONST)
    a = sc_utils.createPairPosPerm(session, _segment, v_node, vu_node,
                                   sc.SC_CONST)

    res.extend([vu_node, a])

    # make identification
    idtf_node = sc_utils.createNodeSheaf(session, _segment, sc.SC_CONST)
    bin_pair = sc_utils.createPairBinaryOrientFull(session, _segment,
                                                   idtf_node, vu_node,
                                                   sc.SC_CONST)
    a = sc_utils.createPairPosPerm(session, _segment,
                                   keynodes.common.nrel_identification,
                                   bin_pair[0], sc.SC_CONST)

    res.extend([idtf_node, a, keynodes.common.nrel_identification])
    res.extend(bin_pair)

    # set value
    val = sc_utils.createNodeElement(session, _segment, sc.SC_CONST)
    sc_utils.setContentReal(session, _segment, val, _value)
    a = sc_utils.createPairPosPerm(session, _segment, idtf_node, val,
                                   sc.SC_CONST)
    a1 = sc_utils.createPairPosPerm(session, _segment,
                                    keynodes.common.rrel_dec_number, a,
                                    sc.SC_CONST)

    res.extend([val, a, a1, keynodes.common.rrel_dec_number])

    return res
Пример #4
0
def calculate_graph_element_prop(_params, _segment):

    kernel = core.Kernel.getSingleton()
    session = kernel.session()
    segment = kernel.segment()

    # check type
    question = session.search_one_shot(
        session.sc_constraint_new(sc_constants.CONSTR_5_f_a_a_a_f,
                                  keynodes.questions.initiated, sc.SC_A_CONST,
                                  sc.SC_N_CONST, sc.SC_A_CONST, _params), True,
        5)

    assert question is not None
    question = question[2]

    global graph_prop_calculators
    for question_type, calculator, relation in graph_element_prop_calculators:
        # check command type
        if sc_utils.checkIncToSets(session, question, [question_type],
                                   sc.SC_CONST):

            element = session.search_one_shot(
                session.sc_constraint_new(sc_constants.CONSTR_3_f_a_a,
                                          question, sc.SC_A_CONST,
                                          sc.SC_N_CONST), True, 3)

            if element is None:
                return

            element = element[2]
            graph = None
            arc = None
            it = session.create_iterator(
                session.sc_constraint_new(sc_constants.CONSTR_3_a_a_f,
                                          sc.SC_NODE,
                                          sc.SC_A_CONST | sc.SC_POS, element),
                True)
            while not it.is_over():
                if sc_utils.checkIncToSets(session, it.value(0),
                                           [graph_keynodes.Common.graph],
                                           sc.SC_CONST):
                    graph = it.value(0)
                    arc = it.value(1)
                    break
                it.next()

            if graph is None:
                continue

            # make graph and calculate property value
            g = Graph(segment, graph)
            sc2obj = g.makeNxGraph()
            result = calculator(g.graphNx, sc2obj[str(element.this)])

            #
            if result is None:
                raise RuntimeWarning("Calculator can't calculate value")

            value = sc_utils.createNodeElement(session, segment, sc.SC_CONST)
            bin_rel = sc_utils.createPairBinaryOrientFull(
                session, segment, arc, value, sc.SC_CONST)
            a = sc_utils.createPairPosPerm(session, segment, relation,
                                           bin_rel[0], sc.SC_CONST)

            elements = translate_value(session, segment, value, result)

            elements.extend([value, graph, a, relation])
            elements.extend(bin_rel)

            answer = sc_utils.createNodeElement(session, segment, sc.SC_CONST)
            for el in elements:
                sc_utils.createPairPosPerm(session, segment, answer, el,
                                           sc.SC_CONST)

            sc_utils.makeAnswer(session, segment, question, answer)
Пример #5
0
def calculate_graph_prop(_params, _segment):

    kernel = core.Kernel.getSingleton()
    session = kernel.session()
    segment = kernel.segment()

    # check type
    question = session.search_one_shot(
        session.sc_constraint_new(sc_constants.CONSTR_5_f_a_a_a_f,
                                  keynodes.questions.initiated, sc.SC_A_CONST,
                                  sc.SC_N_CONST, sc.SC_A_CONST, _params), True,
        5)

    assert question is not None
    question = question[2]

    global graph_prop_calculators
    for question_type, calculator, relation in graph_prop_calculators:
        # check command type
        if sc_utils.checkIncToSets(session, question, [question_type],
                                   sc.SC_CONST):

            graph = session.search_one_shot(
                session.sc_constraint_new(sc_constants.CONSTR_3_f_a_a,
                                          question, sc.SC_A_CONST,
                                          sc.SC_N_CONST), True, 3)

            if graph is None:
                return

            graph = graph[2]

            if not sc_utils.checkIncToSets(session, graph,
                                           [graph_keynodes.Common.graph],
                                           sc.SC_CONST):
                return

            g = Graph(segment, graph)
            g.makeNxGraph()

            result = calculator(g.graphNx)

            if result is None:
                raise RuntimeWarning("Calculator can't calculate value")

            value = sc_utils.createNodeElement(session, segment, sc.SC_CONST)
            bin_rel = sc_utils.createPairBinaryOrientFull(
                session, segment, graph, value, sc.SC_CONST)
            a = sc_utils.createPairPosPerm(session, segment, relation,
                                           bin_rel[0], sc.SC_CONST)

            elements = translate_value(session, segment, value, result)

            elements.extend([value, graph, a, relation])
            elements.extend(bin_rel)

            answer = sc_utils.createNodeElement(session, segment, sc.SC_CONST)
            for el in elements:
                sc_utils.createPairPosPerm(session, segment, answer, el,
                                           sc.SC_CONST)

            sc_utils.makeAnswer(session, segment, question, answer)
Пример #6
0
def calculate_graph_element_prop(_params, _segment):
    
    kernel = core.Kernel.getSingleton()
    session = kernel.session()
    segment = kernel.segment()
        
    # check type
    question = session.search_one_shot(session.sc_constraint_new(sc_constants.CONSTR_5_f_a_a_a_f,
                                                                 keynodes.questions.initiated,
                                                                 sc.SC_A_CONST,
                                                                 sc.SC_N_CONST,
                                                                 sc.SC_A_CONST,
                                                                 _params), True, 5)
    
    assert question is not None
    question = question[2]
    
    global graph_prop_calculators
    for question_type, calculator, relation in graph_element_prop_calculators:
        # check command type
        if sc_utils.checkIncToSets(session, question, [question_type], sc.SC_CONST):
  
            element = session.search_one_shot(session.sc_constraint_new(sc_constants.CONSTR_3_f_a_a,
                                                                        question,
                                                                        sc.SC_A_CONST,
                                                                        sc.SC_N_CONST), True, 3)
            
            if element is None:
                return
            
            element = element[2]
            graph = None
            arc = None
            it = session.create_iterator(session.sc_constraint_new(sc_constants.CONSTR_3_a_a_f,
                                                                   sc.SC_NODE,
                                                                   sc.SC_A_CONST | sc.SC_POS,
                                                                   element), True)
            while not it.is_over():
                if sc_utils.checkIncToSets(session, it.value(0), [graph_keynodes.Common.graph], sc.SC_CONST):
                    graph = it.value(0)
                    arc = it.value(1)
                    break
                it.next()
                
            
            if graph is None:
                continue
            
            # make graph and calculate property value
            g = Graph(segment, graph)
            sc2obj = g.makeNxGraph()
            result = calculator(g.graphNx, sc2obj[str(element.this)])
            
            # 
            if result is None:
                raise RuntimeWarning("Calculator can't calculate value")
            
            
            value = sc_utils.createNodeElement(session, segment, sc.SC_CONST)
            bin_rel = sc_utils.createPairBinaryOrientFull(session, segment, arc, value, sc.SC_CONST)
            a = sc_utils.createPairPosPerm(session, segment, relation, bin_rel[0], sc.SC_CONST)
            
            elements = translate_value(session, segment, value, result)
            
            elements.extend([value, graph, a, relation])
            elements.extend(bin_rel)
            
            
            answer = sc_utils.createNodeElement(session, segment, sc.SC_CONST)
            for el in elements:
                sc_utils.createPairPosPerm(session, segment, answer, el, sc.SC_CONST)
                
            sc_utils.makeAnswer(session, segment, question, answer)