Esempio n. 1
0
def generate_variable(_xmlnode, tag, session, segment):
    """
    Process mi and mn tags. Generate variable or number and add it to result string
    @return:
    """
    #here should be generation of sc-node that represents variable
    global last, binoperands, lastop, el

    if session == None or segment == None:
        return

    nodename = _xmlnode.childNodes[0].nodeValue
    if not nodename in functions.keys():
        parse_result.append(nodename)

    if tag != "mi" and tag != "mn":
        translation_errors.append("Unknown tag")
        return
    #start generation
    if tag == "mi":
        if not nodename in functions.keys():
            findElement = sc_utils.getElementByIdtf(nodename, segment)
            if findElement == None:
                node = session.create_el_idtf(core.Kernel.segment(),
                                              sc.SC_NODE, nodename)[1]
                sc_utils.createPair(session, core.Kernel.segment(), el, node,
                                    sc.SC_CONST)
                variables_sc[nodename] = node
            else:
                sc_utils.createPair(session, core.Kernel.segment(), el,
                                    findElement, sc.SC_CONST)
                variables_sc[nodename] = findElement
        else:
            stack.append(nodename)
    if tag == "mn":
        findElement = sc_utils.getElementByIdtf("Num" + nodename, segment)
        if findElement == None:
            node = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                          "Num" + nodename)[1]
            #sc_utils.setContentInt(session, core.Kernel.segment(), node, int(nodename))
            sc_utils.createPair(session, core.Kernel.segment(), el, node,
                                sc.SC_CONST)
            variables_sc[nodename] = node
        else:
            sc_utils.createPair(session, core.Kernel.segment(), el,
                                findElement, sc.SC_CONST)
            variables_sc[nodename] = findElement

    variables.append([nodename, last])

    if (len(binoperands) == 1):
        binoperands.append(variables[-1][0])
        operations.append((lastop, binoperands))
        binoperands = []
    last = []
    lastop = ""
    return
def genDivideRelation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]] #divident
    el2 = math2sc.variables_sc[operation[1]] #divisor
    res = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]  #difference result node
    sc_utils.createPair(session,core.Kernel.segment(), _result, res, sc.SC_CONST)

    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, setNode, sc.SC_CONST)

    #gen input sum parameters
    arc1 = sc_utils.createPair(session,core.Kernel.segment(), setNode, res, sc.SC_CONST)
    arc2 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el2, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc1, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc2, sc.SC_CONST)

    relation = sc_utils.createPair(session,core.Kernel.segment(), setNode, el1, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, relation, sc.SC_CONST)

    idtf = "произведение*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    sumNode = sc_utils.getElementByIdtf(idtf, segment)
    if sumNode == None:
        sumNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param, sumNode, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, sumNode, sc.SC_CONST)

    relarc = sc_utils.createPair(session,core.Kernel.segment(), sumNode, relation, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, relarc, sc.SC_CONST)
    return res
Esempio n. 3
0
def close_sqrt(_xmlnode, tag, session, segment):
    """
    Postrprocess msqrt tag
    """

    while stack[-1] != "(":
        parse_result.append(stack.pop(-1))
        if len(stack) == 0:
            translation_errors.append(
                "Incorrect input string: can't find close bracket")
            return
    stack.pop(-1)
    variables.append(["0.5", []])

    findElement = sc_utils.getElementByIdtf("Num0.5", segment)
    if findElement == None:
        node = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                      "Num0.5")[1]
        sc_utils.createPair(session, core.Kernel.segment(), el, node,
                            sc.SC_CONST)
        variables_sc["0.5"] = node
    else:
        sc_utils.createPair(session, core.Kernel.segment(), el, findElement,
                            sc.SC_CONST)
        variables_sc["0.5"] = findElement

    parse_result.append("0.5")
    parse_result.append("^")
    return
def genEqualityRelation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, setNode,
                        sc.SC_CONST)

    arc1 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el1,
                               sc.SC_CONST)
    arc2 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el2,
                               sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc1,
                        sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc2,
                        sc.SC_CONST)

    idtf = "равенство*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    eqNode = sc_utils.getElementByIdtf(idtf, segment)
    if eqNode == None:
        eqNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                        idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param,
                                       eqNode, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, eqNode,
                        sc.SC_CONST)

    relarc = sc_utils.createPair(session, core.Kernel.segment(), eqNode,
                                 setNode, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relarc,
                        sc.SC_CONST)
    return el1
Esempio n. 5
0
def close_row(_xmlnode, tag, session, segment):
    """
    Postprocess mrow tag
    @param _xmlnode:
    @param tag:
    @param session:
    @param segment:
    @return:
    """
    global rowcount, isroot, isfrac
    rowcount -= 1
    if rowcount == 0 and isroot == True:
        while stack[-1] != "(":
            parse_result.append(stack.pop(-1))
            if len(stack) == 0:
                translation_errors.append(
                    "Incorrect input string: can't find close bracket")
                break
            if not isfrac:
                parse_result.append("1")

        findElement = sc_utils.getElementByIdtf("Num1", segment)
        if findElement == None:
            node = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                          "Num1")[1]
            variables_sc["1"] = node
        else:
            variables_sc["1"] = findElement

    isroot = False
    return
def gen_fracture_relation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    #gen node that represents fracture
    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, setNode, sc.SC_CONST)

    arc1 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el1, sc.SC_CONST)
    arc2 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el2, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc1, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc2, sc.SC_CONST)

    #find or generate ordinal fracture node
    idtf = "обыкновенная дробь"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    powNode = sc_utils.getElementByIdtf(idtf, segment)
    if powNode == None:
        powNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, idtf)[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, powNode, sc.SC_CONST)
    relarc = sc_utils.createPair(session,core.Kernel.segment(), powNode, setNode, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, relarc, sc.SC_CONST)

    #find or generate numerator
    numIdtf = "числитель_"
    numIdtf = sc_utils.utf8ToCp1251(str(numIdtf))
    numNode = sc_utils.getElementByIdtf(numIdtf, segment)
    if numNode == None:
        numNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, numIdtf)[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, numNode, sc.SC_CONST)
    a = sc_utils.createPair(session,core.Kernel.segment(), numNode, arc1, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, a, sc.SC_CONST)

    #find or generate denominator
    numIdtf = "знаменатель_"
    numIdtf = sc_utils.utf8ToCp1251(str(numIdtf))
    numNode = sc_utils.getElementByIdtf(numIdtf, segment)
    if numNode == None:
        numNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, numIdtf)[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, numNode, sc.SC_CONST)
    a = sc_utils.createPair(session,core.Kernel.segment(), numNode, arc2, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, a, sc.SC_CONST)

    return setNode
def genSumRelation(session, segment, operation, _result):
    """

    @param session: session
    @param segment: list of segments to search objects in
    @param operation: sum operation and list of operands
    @param _result: a node which the result of translation
    @return: a node that represents the result of summ
    """
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    #gen set of sum components
    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, setNode,
                        sc.SC_CONST)

    arc1 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el1,
                               sc.SC_CONST)
    arc2 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el2,
                               sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc1,
                        sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc2,
                        sc.SC_CONST)

    #gen sum relations
    res = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                 "")[1]  #add result node
    sc_utils.createPair(session, core.Kernel.segment(), _result, res,
                        sc.SC_CONST)

    relation = sc_utils.createPair(session, core.Kernel.segment(), setNode,
                                   res, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relation,
                        sc.SC_CONST)

    idtf = "сумма*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    sumNode = sc_utils.getElementByIdtf(idtf, segment)
    if sumNode == None:
        sumNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                         idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param,
                                       sumNode, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, sumNode,
                        sc.SC_CONST)

    relarc = sc_utils.createPair(session, core.Kernel.segment(), sumNode,
                                 relation, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relarc,
                        sc.SC_CONST)
    return res
Esempio n. 8
0
def get_sc_element(_segment, _idtf, _object, _sc_type):
    """Generates scs-element, that represent geometry object
    @param _segment:    segment to work with data in sc-memory
    @type _segment:    sc_segment
    @param _idtf:    identificator for search
    @type _idtf:    str
    @param _object:    object to create sc-element for
    @type _object:    Object
    @param _sc_type:    sc-type for element
    @type _sc_type:    sc_type
    
    @return: addr of create sc-element
    @rtype: sc_global_addr
    """
    session = core.Kernel.session()
    
    # getting node idtf
    sc_object = None
    el = None
    isUri = False
    
    # if idtf empty, then creating new element
    if _idtf is None:
        el = session.create_el(_segment, _sc_type)
    else:
        # check if idtf if full uri
        isUri = _idtf.startswith('/')
    
    # trying to find object by idtf, if it doesn't exists, then creating it
    try:
        if el is None:
           
            
            if isUri:
                el = session.find_el_full_uri(_idtf)
                if el is None:
                    el = session.create_el_full_uri(_idtf, _sc_type)[1]
            else:
                _segs = [_segment.get_full_uri()]
                _segs.extend(env.search_segments)
                # trying to find element
                el = sc_utils.getElementByIdtf(_idtf, _segs)
                if el is None:
                    el = session.create_el_idtf(_segment, _sc_type, _idtf)[1]
    except:
        import sys, traceback
        print sys.exc_info()[0]
        traceback.print_exc(file=sys.stdout)
        return None
    
    _object._setScAddr(el)
    
    return el
Esempio n. 9
0
def get_sc_element(_segment, _idtf, _object, _sc_type):
    """Generates scs-element, that represent geometry object
    @param _segment:    segment to work with data in sc-memory
    @type _segment:    sc_segment
    @param _idtf:    identificator for search
    @type _idtf:    str
    @param _object:    object to create sc-element for
    @type _object:    Object
    @param _sc_type:    sc-type for element
    @type _sc_type:    sc_type
    
    @return: addr of create sc-element
    @rtype: sc_global_addr
    """
    session = core.Kernel.session()

    # getting node idtf
    sc_object = None
    el = None
    isUri = False

    # if idtf empty, then creating new element
    if _idtf is None:
        el = session.create_el(_segment, _sc_type)
    else:
        # check if idtf if full uri
        isUri = _idtf.startswith('/')

    # trying to find object by idtf, if it doesn't exists, then creating it
    try:
        if el is None:

            if isUri:
                el = session.find_el_full_uri(_idtf)
                if el is None:
                    el = session.create_el_full_uri(_idtf, _sc_type)[1]
            else:
                _segs = [_segment.get_full_uri()]
                _segs.extend(env.search_segments)
                # trying to find element
                el = sc_utils.getElementByIdtf(_idtf, _segs)
                if el is None:
                    el = session.create_el_idtf(_segment, _sc_type, _idtf)[1]
    except:
        import sys, traceback
        print sys.exc_info()[0]
        traceback.print_exc(file=sys.stdout)
        return None

    _object._setScAddr(el)

    return el
Esempio n. 10
0
def gen_function(name, params, session, segment, _result):
    """

    @param name: function name
    @param params: list of function params
    @param _result: an output node of the translator
    @return:
    """

    #gen function node
    idtf = name + "*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    funcNode = sc_utils.getElementByIdtf(idtf, segment)
    if funcNode == None:
        funcNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                          idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param,
                                       funcNode, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, funcNode,
                        sc.SC_CONST)

    #gen args set
    argsSet = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, argsSet,
                        sc.SC_CONST)

    for x in params:
        param = math2sc.variables_sc[x]
        arc = sc_utils.createPair(session, core.Kernel.segment(), argsSet,
                                  param, sc.SC_CONST)
        sc_utils.createPair(session, core.Kernel.segment(), _result, param,
                            sc.SC_CONST)
        sc_utils.createPair(session, core.Kernel.segment(), _result, arc,
                            sc.SC_CONST)
        pass

    #gen relation arc
    result = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    relation = sc_utils.createPair(session, core.Kernel.segment(), argsSet,
                                   result, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relation,
                        sc.SC_CONST)
    arc = sc_utils.createPair(session, core.Kernel.segment(), funcNode,
                              relation, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc,
                        sc.SC_CONST)

    return result
def genMultiplyRelation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    #gen set of sum components
    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, setNode,
                        sc.SC_CONST)

    arc1 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el1,
                               sc.SC_CONST)
    arc2 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el2,
                               sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc1,
                        sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc2,
                        sc.SC_CONST)

    #gen sum relations
    res = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                 "")[1]  #add result node
    sc_utils.createPair(session, core.Kernel.segment(), _result, res,
                        sc.SC_CONST)

    relation = sc_utils.createPair(session, core.Kernel.segment(), setNode,
                                   res, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relation,
                        sc.SC_CONST)

    idtf = "произведение*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    sumNode = sc_utils.getElementByIdtf(idtf, segment)
    if sumNode == None:
        sumNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                         idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param,
                                       sumNode, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, sumNode,
                        sc.SC_CONST)

    relarc = sc_utils.createPair(session, core.Kernel.segment(), sumNode,
                                 relation, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relarc,
                        sc.SC_CONST)
    return res
def genDifferenceRelation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]]  #minuend
    el2 = math2sc.variables_sc[operation[1]]  #subtrahend
    res = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                 "")[1]  #difference result node
    sc_utils.createPair(session, core.Kernel.segment(), _result, res,
                        sc.SC_CONST)

    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, setNode,
                        sc.SC_CONST)

    #gen input sum parameters
    arc1 = sc_utils.createPair(session, core.Kernel.segment(), setNode, res,
                               sc.SC_CONST)
    arc2 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el2,
                               sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc1,
                        sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc2,
                        sc.SC_CONST)

    relation = sc_utils.createPair(session, core.Kernel.segment(), setNode,
                                   el1, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relation,
                        sc.SC_CONST)

    idtf = "сумма*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    sumNode = sc_utils.getElementByIdtf(idtf, segment)
    if sumNode == None:
        sumNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                         idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param,
                                       sumNode, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, sumNode,
                        sc.SC_CONST)

    relarc = sc_utils.createPair(session, core.Kernel.segment(), sumNode,
                                 relation, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relarc,
                        sc.SC_CONST)
    return res
def genSumRelation(session, segment, operation, _result):
    """

    @param session: session
    @param segment: list of segments to search objects in
    @param operation: sum operation and list of operands
    @param _result: a node which the result of translation
    @return: a node that represents the result of summ
    """
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    #gen set of sum components
    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, setNode, sc.SC_CONST)

    arc1 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el1, sc.SC_CONST)
    arc2 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el2, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc1, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc2, sc.SC_CONST)

    #gen sum relations
    res = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]  #add result node
    sc_utils.createPair(session,core.Kernel.segment(), _result, res, sc.SC_CONST)

    relation = sc_utils.createPair(session,core.Kernel.segment(), setNode, res, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, relation, sc.SC_CONST)

    idtf = "сумма*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    sumNode = sc_utils.getElementByIdtf(idtf, segment)
    if sumNode == None:
        sumNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param, sumNode, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, sumNode, sc.SC_CONST)

    relarc = sc_utils.createPair(session,core.Kernel.segment(), sumNode, relation, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, relarc, sc.SC_CONST)
    return res
Esempio n. 14
0
def gen_function(name, params, session, segment, _result):
    """

    @param name: function name
    @param params: list of function params
    @param _result: an output node of the translator
    @return:
    """


    #gen function node
    idtf = name+"*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    funcNode = sc_utils.getElementByIdtf(idtf, segment)
    if funcNode == None:
        funcNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param, funcNode, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, funcNode, sc.SC_CONST)

    #gen args set
    argsSet = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, argsSet, sc.SC_CONST)

    for x in params:
        param = math2sc.variables_sc[x]
        arc = sc_utils.createPair(session, core.Kernel.segment(), argsSet, param, sc.SC_CONST)
        sc_utils.createPair(session,core.Kernel.segment(), _result, param, sc.SC_CONST)
        sc_utils.createPair(session,core.Kernel.segment(), _result, arc, sc.SC_CONST)
        pass

    #gen relation arc
    result = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    relation = sc_utils.createPair(session, core.Kernel.segment(), argsSet, result, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, relation, sc.SC_CONST)
    arc = sc_utils.createPair(session,core.Kernel.segment(), funcNode, relation, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc, sc.SC_CONST)

    return result
def genEqualityRelation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, setNode, sc.SC_CONST)

    arc1 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el1, sc.SC_CONST)
    arc2 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el2, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc1, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc2, sc.SC_CONST)

    idtf = "равенство*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    eqNode = sc_utils.getElementByIdtf(idtf, segment)
    if eqNode == None:
        eqNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param, eqNode, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, eqNode, sc.SC_CONST)

    relarc = sc_utils.createPair(session,core.Kernel.segment(), eqNode, setNode, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, relarc, sc.SC_CONST)
    return el1
Esempio n. 16
0
    def translate_impl(self, _input, _output):
        """Translator implementation
        """

        errors = []

        objs = objects.ScObject._sc2Objects(_input)

        assert len(objs) > 0
        sheet = objs[0]
        assert isinstance(sheet, objects.ObjectSheet)

        seg = sheet.getTmpSegment()

        import suit.core.sc_utils as sc_utils

        errors = []
        session = core.Kernel.session()

        # getting data and translate to sc
        field = sheet.getLogic().field

        print field

        # remove old objects
        for layer in field.layers:
            for item in layer.items:
                _addr = item._getScAddr()
                if _addr is not None:
                    if _addr.seg.this == seg.this:
                        item._setScAddr(None)
                        session.erase_el(_addr)

        classifier = field.classifier
        _segs = [seg.get_full_uri()]
        _segs.extend(env.search_segments)

        for layer in field.layers:
            for item in layer.items:
                #                if (not item.type in classifier.TYPES_TOWN):
                #                    continue

                # creating node in sc-memory
                _addr = sc_utils.createNodeElement(session, seg, sc.SC_CONST)
                item._setScAddr(_addr)
                if (item.type in classifier.TYPES_TOWN):
                    sc_utils.createPairPosPerm(session, seg,
                                               map_keynodes.ObjectType.town,
                                               _addr, sc.SC_CONST)
                elif (item.type in classifier.TYPES_RAILWAY):
                    sc_utils.createPairPosPerm(session, seg,
                                               map_keynodes.ObjectType.railway,
                                               _addr, sc.SC_CONST)
                elif item.type == classifier.TYPE_DISTRICT:
                    sc_utils.createPairPosPerm(
                        session, seg, map_keynodes.ObjectType.district, _addr,
                        sc.SC_CONST)
                elif item.type == classifier.TYPE_AREA:
                    sc_utils.createPairPosPerm(session, seg,
                                               map_keynodes.ObjectType.area,
                                               _addr, sc.SC_CONST)
                elif item.type in classifier.TYPES_ROAD:
                    sc_utils.createPairPosPerm(session, seg,
                                               map_keynodes.ObjectType.road,
                                               _addr, sc.SC_CONST)

                for atribute in item.attributes:
                    if ((atribute in classifier.atributes)
                            and (item.attributes[atribute] != "")):
                        _atr = sc_utils.getElementByIdtf(
                            classifier.atributes[atribute], _segs)
                        if _atr is None:
                            _atr = sc_utils.createNodeRoleRelation(
                                session, seg, sc.SC_CONST)
                            session.set_idtf(_atr,
                                             classifier.atributes[atribute])
                        _val = sc_utils.getElementByIdtf(
                            item.attributes[atribute], _segs)
                        if _val is None:
                            _val = sc_utils.createNodeElement(
                                session, seg, sc.SC_CONST)
                            session.set_idtf(_val, item.attributes[atribute])
                        #print classifier.atributes[atribute], item.attributes[atribute]
                        pair = sc_utils.createPairPosPerm(
                            session, seg, _addr, _val, sc.SC_CONST)
                        sc_utils.createPairPosPerm(session, seg, _atr, pair,
                                                   sc.SC_CONST)
        return errors
Esempio n. 17
0
    def translate_impl(self, _input, _output):
        """Translator implementation
        @param _input:    input data set
        @type _input:    sc_global_addr
        @param _output:    output window (must be created)
        @type _output:    sc_global_addr

        @return: list of errors each element of list is a tuple(object, error)
        @rtype: list
        """
        segment = core.Kernel.segment()
        session = core.Kernel.session()
        _segs = [segment.get_full_uri()]
        search_segments = [
            "/ui/core",
            "/seb/belarus",
            "/seb/planimetry",
            "/seb/graph",
            "/seb/rus",
            "/etc/questions",
            "/etc/com_keynodes",
            "/seb/test",
            "/proc/agents/nsm/keynode",
        ]
        _segs.extend(search_segments)

        el = sc_utils.getElementByIdtf("test2_scs_sc", _segs)
        if el == None:
            return

        errors = []
        objs = objects.ScObject._sc2Objects(_output)

        assert len(objs) > 0
        sheet = objs[0]
        assert type(sheet) is objects.ObjectSheet

        session = core.Kernel.session()

        trans_objs = []
        result_objs = []

        # creating list of element to translate
        it = session.create_iterator(
            session.sc_constraint_new(sc_constants.CONSTR_3_f_a_a, sc.SC_A_CONST | sc.SC_POS, sc.SC_NODE), True
        )
        list_of_addrs = []
        while not it.is_over():
            trans_objs.append(it.value(2))
            list_of_addrs.append(str(it.value(2).this))
            it.next()

        # getting objects on sheet
        childs = sheet.getChilds()
        sc_scs = {}
        object_types = {}
        for obj in childs:
            addr = obj._getScAddr()
            if addr is not None:
                s_addr = str(addr.this)
                sc_scs[s_addr] = obj
                object_types[s_addr] = session.get_type(addr)
                list_of_addrs.append(s_addr)

        ignore_list = []
        process_pairs = []

        # translating binary and noorient pairs and store types
        for obj in trans_objs:
            _type = session.get_type(obj)
            object_types[str(obj.this)] = _type

            if str(obj.this) in ignore_list:
                continue

        # something miss

        # translating objects
        for obj in trans_objs:
            if sc_scs.has_key(str(obj.this)) or (str(obj.this) in ignore_list):
                continue

            _type = object_types[str(obj.this)]

            # checking pairs
            if _type & sc.SC_ARC:
                beg = session.get_beg(obj)
                end = session.get_end(obj)
                if (beg is not None) and (end is not None):
                    if (str(beg.this) in list_of_addrs) and (str(end.this) in list_of_addrs):
                        process_pairs.append((obj, beg, end))
                    else:
                        continue  # skipping dead (haven't begin or end element) pairs

            # translating sc-element to scg-object
            scs_obj = translate_obj(session, obj, object_types[str(obj.this)])

            sc_scs[str(obj.this)] = scs_obj
            # translating identificators
            #            idtf = session.get_idtf(obj)
            #            if not sc_utils.isSystemId(idtf):
            #                scg_obj.setText(idtf)

            # scg_obj.setWasInMemory(True)

            # adding to window
            # sheet.addChild(scg_obj)
            result_objs.append(scs_obj)
def gen_fracture_relation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    #gen node that represents fracture
    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, setNode,
                        sc.SC_CONST)

    arc1 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el1,
                               sc.SC_CONST)
    arc2 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el2,
                               sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc1,
                        sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc2,
                        sc.SC_CONST)

    #find or generate ordinal fracture node
    idtf = "обыкновенная дробь"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    powNode = sc_utils.getElementByIdtf(idtf, segment)
    if powNode == None:
        powNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                         idtf)[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, powNode,
                        sc.SC_CONST)
    relarc = sc_utils.createPair(session, core.Kernel.segment(), powNode,
                                 setNode, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relarc,
                        sc.SC_CONST)

    #find or generate numerator
    numIdtf = "числитель_"
    numIdtf = sc_utils.utf8ToCp1251(str(numIdtf))
    numNode = sc_utils.getElementByIdtf(numIdtf, segment)
    if numNode == None:
        numNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                         numIdtf)[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, numNode,
                        sc.SC_CONST)
    a = sc_utils.createPair(session, core.Kernel.segment(), numNode, arc1,
                            sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, a,
                        sc.SC_CONST)

    #find or generate denominator
    numIdtf = "знаменатель_"
    numIdtf = sc_utils.utf8ToCp1251(str(numIdtf))
    numNode = sc_utils.getElementByIdtf(numIdtf, segment)
    if numNode == None:
        numNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                         numIdtf)[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, numNode,
                        sc.SC_CONST)
    a = sc_utils.createPair(session, core.Kernel.segment(), numNode, arc2,
                            sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, a,
                        sc.SC_CONST)

    return setNode
Esempio n. 19
0
def translate_object(_segment, _object, _type, _params):
    """Translates specified scg-object to SC-code.
    @param _segment:    segment to translate object in
    @type _segment:    sc_segment
    @param _object:    scg-object to translate
    @type _object:    SCgObject or SCgPair
    @param _type:    object type
    @type _type:    sc_type
    @param _params:    additional parameters to translate object. It contains list of sc-elements, that
    designates semantic types for specified object. sc-element, that designate translated object will be included to
    sets from _params
    @type _params:    list
    
    @return: if object translated successfully, then return True, else - False
    @rtype: bool
    """
    import suit.core.sc_utils as sc_utils
    session = core.Kernel.session()
    
    # getting node idtf
    idtf = _object.getText()
    
    sc_object = None
    el = None
    isUri = False
    created  = False
    
    # if idtf empty, then creating new element
    if idtf is None:
        el = session.create_el(_segment, _type)
        created = True
    else:
        # encode idtf to cp1251
        idtf = sc_utils.utf8ToCp1251(str(idtf))

        # check if idtf if full uri
        isUri = idtf.startswith('/')
    
    # trying to find object by idtf, if it doesn't exists, then creating it
    try:
        if el is None:
            if isUri:
                el = session.find_el_full_uri(idtf)
                if el is None:
                    el = session.create_el_full_uri(idtf, _type)[1]
                    created = True
            else:
                _segs = [_segment.get_full_uri()]
                _segs.extend(env.search_segments)
                # trying to find element
                el = sc_utils.getElementByIdtf(idtf, _segs)
                if el is None:
                    el = session.create_el_idtf(_segment, _type, idtf)[1]
                    created = True
    except:
        import sys, traceback
        print sys.exc_info()[0]
        traceback.print_exc(file=sys.stdout)
        return False
        
    assert el is not None
    
    _object._setScAddr(el)
    _object.setMerged(not created)
    
    # including to sets for structure type
    for param in _params:
        sc_utils.createPairPosPerm(session, _segment, param, el, sc.SC_CONST)
    
    return True
def genPowerRelation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    #gen set of sum components
    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, setNode,
                        sc.SC_CONST)

    arc1 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el1,
                               sc.SC_CONST)
    arc2 = sc_utils.createPair(session, core.Kernel.segment(), setNode, el2,
                               sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc1,
                        sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, arc2,
                        sc.SC_CONST)

    #gen sum relations
    res = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                 "")[1]  #add result node
    sc_utils.createPair(session, core.Kernel.segment(), _result, res,
                        sc.SC_CONST)

    relation = sc_utils.createPair(session, core.Kernel.segment(), setNode,
                                   res, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, relation,
                        sc.SC_CONST)

    idtf = "возведение в степень*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    powNode = sc_utils.getElementByIdtf(idtf, segment)
    if powNode == None:
        powNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                         idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param,
                                       powNode, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, powNode,
                        sc.SC_CONST)

    relarc = sc_utils.createPair(session, core.Kernel.segment(), powNode,
                                 setNode, sc.SC_CONST)

    baseIdtf = "основание_"
    baseIdtf = sc_utils.utf8ToCp1251(str(baseIdtf))
    baseNode = sc_utils.getElementByIdtf(baseIdtf, segment)
    if baseNode == None:
        baseNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                          baseIdtf)[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, baseNode,
                        sc.SC_CONST)
    a = sc_utils.createPair(session, core.Kernel.segment(), baseNode, arc1,
                            sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, a,
                        sc.SC_CONST)

    expIdtf = "показатель_"
    expIdtf = sc_utils.utf8ToCp1251(str(expIdtf))
    expNode = sc_utils.getElementByIdtf(expIdtf, segment)
    if expNode == None:
        expNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                         expIdtf)[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, expNode,
                        sc.SC_CONST)
    a = sc_utils.createPair(session, core.Kernel.segment(), expNode, arc2,
                            sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, a,
                        sc.SC_CONST)

    powerIdtf = "результат_"
    powerIdtf = sc_utils.utf8ToCp1251(str(powerIdtf))
    powerNode = sc_utils.getElementByIdtf(powerIdtf, segment)
    if powerNode == None:
        powerNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                           powerIdtf)[1]
    sc_utils.createPair(session, core.Kernel.segment(), _result, powerNode,
                        sc.SC_CONST)
    a = sc_utils.createPair(session, core.Kernel.segment(), powerNode,
                            relation, sc.SC_CONST)
    sc_utils.createPair(session, core.Kernel.segment(), _result, a,
                        sc.SC_CONST)

    sc_utils.createPair(session, core.Kernel.segment(), _result, relarc,
                        sc.SC_CONST)
    return res
Esempio n. 21
0
def translate_object(_segment, _object, _type, _params):
    """Translates specified scg-object to SC-code.
    @param _segment:    segment to translate object in
    @type _segment:    sc_segment
    @param _object:    scg-object to translate
    @type _object:    SCgObject or SCgPair
    @param _type:    object type
    @type _type:    sc_type
    @param _params:    additional parameters to translate object. It contains list of sc-elements, that
    designates semantic types for specified object. sc-element, that designate translated object will be included to
    sets from _params
    @type _params:    list
    
    @return: if object translated successfully, then return True, else - False
    @rtype: bool
    """
    import suit.core.sc_utils as sc_utils
    session = core.Kernel.session()

    # getting node idtf
    idtf = _object.getText()

    sc_object = None
    el = None
    isUri = False
    created = False

    # if idtf empty, then creating new element
    if idtf is None:
        el = session.create_el(_segment, _type)
        created = True
    else:
        # encode idtf to cp1251
        idtf = sc_utils.utf8ToCp1251(str(idtf))

        # check if idtf if full uri
        isUri = idtf.startswith('/')

    # trying to find object by idtf, if it doesn't exists, then creating it
    try:
        if el is None:
            if isUri:
                el = session.find_el_full_uri(idtf)
                if el is None:
                    el = session.create_el_full_uri(idtf, _type)[1]
                    created = True
            else:
                _segs = [_segment.get_full_uri()]
                _segs.extend(env.search_segments)
                # trying to find element
                el = sc_utils.getElementByIdtf(idtf, _segs)
                if el is None:
                    el = session.create_el_idtf(_segment, _type, idtf)[1]
                    created = True
    except:
        import sys, traceback
        print sys.exc_info()[0]
        traceback.print_exc(file=sys.stdout)
        return False

    assert el is not None

    _object._setScAddr(el)
    _object.setMerged(not created)

    # including to sets for structure type
    for param in _params:
        sc_utils.createPairPosPerm(session, _segment, param, el, sc.SC_CONST)

    return True
Esempio n. 22
0
    def translate_impl(self, _input, _output):
        """Translator implementation
        """
        
        errors = []
        
        objs = objects.ScObject._sc2Objects(_input)
        
        assert len(objs) > 0
        sheet = objs[0]
        assert isinstance(sheet, objects.ObjectSheet)
    
        seg = sheet.getTmpSegment()
        
        import suit.core.sc_utils as sc_utils
    
        errors = []
        session = core.Kernel.session()
        
        # getting data and translate to sc
        field = sheet.getLogic().field
        
        print field
    
        # remove old objects
        for layer in field.layers:
            for item in layer.items:
                _addr = item._getScAddr()
                if _addr is not None:
                    if _addr.seg.this == seg.this:
                        item._setScAddr(None)
                        session.erase_el(_addr)
        
        classifier = field.classifier
        _segs = [seg.get_full_uri()]
        _segs.extend(env.search_segments)
        
        for layer in field.layers:
            for item in layer.items:
#                if (not item.type in classifier.TYPES_TOWN):
#                    continue
                
                # creating node in sc-memory
                _addr = sc_utils.createNodeElement(session, seg, sc.SC_CONST)
                item._setScAddr(_addr)
                if (item.type in classifier.TYPES_TOWN):
                    sc_utils.createPairPosPerm(session, seg, map_keynodes.ObjectType.town, _addr, sc.SC_CONST)
                elif (item.type in classifier.TYPES_RAILWAY):
                    sc_utils.createPairPosPerm(session, seg, map_keynodes.ObjectType.railway, _addr, sc.SC_CONST)                      
                elif item.type == classifier.TYPE_DISTRICT:
                    sc_utils.createPairPosPerm(session, seg, map_keynodes.ObjectType.district, _addr, sc.SC_CONST)
                elif item.type == classifier.TYPE_AREA:
                    sc_utils.createPairPosPerm(session, seg, map_keynodes.ObjectType.area, _addr, sc.SC_CONST)    
                elif item.type in classifier.TYPES_ROAD:
                    sc_utils.createPairPosPerm(session, seg, map_keynodes.ObjectType.road, _addr, sc.SC_CONST)                    

                
                for atribute in item.attributes:
                    if ((atribute in classifier.atributes)  and  (item.attributes[atribute]!="")):
                        _atr=sc_utils.getElementByIdtf(classifier.atributes[atribute], _segs)
                        if _atr is None:
                            _atr = sc_utils.createNodeRoleRelation(session, seg, sc.SC_CONST)
                            session.set_idtf(_atr, classifier.atributes[atribute])
                        _val=sc_utils.getElementByIdtf(item.attributes[atribute], _segs)
                        if _val is None:
                            _val = sc_utils.createNodeElement(session, seg, sc.SC_CONST)
                            session.set_idtf(_val, item.attributes[atribute])
                        #print classifier.atributes[atribute], item.attributes[atribute]
                        pair = sc_utils.createPairPosPerm(session, seg, _addr, _val, sc.SC_CONST)
                        sc_utils.createPairPosPerm(session, seg, _atr, pair, sc.SC_CONST)
        return errors
Esempio n. 23
0
def generate_exppressions(_xmlnode, tag, session, segment):
    """
    Process math tag. Generate relations between variables and numbers
    """
    global parse_result
    while len(stack) > 0:
        parse_result.append(stack.pop(-1))

    #generate unary expressions
    for var in variables:
        varname = var[0]
        while len(var[1]) > 0:
            op = var[1].pop(0)
            expr = op + var[0]
            key = var[0]
            var[0] = expr

            for operation in operations:
                for arg in operation[1]:
                    if arg == key:
                        operation[1][operation[1].index(key)] = expr

            for elem in parse_result:
                if elem == key:
                    parse_result[parse_result.index(key)] = expr

            if op == "-":
                #generate unary minus relation
                #find unary minus relation node, if not find create
                idtf = "обратное число*"
                idtf = sc_utils.utf8ToCp1251(str(idtf))
                unMinusNode = sc_utils.getElementByIdtf(idtf, segment)
                if unMinusNode == None:
                    unMinusNode = session.create_el_idtf(
                        core.Kernel.segment(), sc.SC_NODE, idtf)[1]
                    for param in [keynodes.info.stype_bin_orient_norole_rel]:
                        sc_utils.createPairPosPerm(session,
                                                   core.Kernel.segment(),
                                                   param, unMinusNode,
                                                   sc.SC_CONST)
                sc_utils.createPair(session, core.Kernel.segment(), el,
                                    unMinusNode, sc.SC_CONST)
                #gen node for result
                varSC = variables_sc[key]
                res = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE,
                                             "")[1]  #node for result
                pair = sc_utils.createPair(
                    session, core.Kernel.segment(), varSC, res,
                    sc.SC_CONST)  #arc between processed node and result
                relBelong = sc_utils.createPair(session, core.Kernel.segment(),
                                                unMinusNode, pair, sc.SC_CONST)
                sc_utils.createPair(session, core.Kernel.segment(), el, res,
                                    sc.SC_CONST)
                sc_utils.createPair(session, core.Kernel.segment(), el, pair,
                                    sc.SC_CONST)
                sc_utils.createPair(session, core.Kernel.segment(), el,
                                    relBelong, sc.SC_CONST)

                variables_sc[expr] = res

    #generate operations
    expr = ""
    for elem in parse_result:
        if (not elem in operation_priority.keys()
                and not elem in functions.keys()):
            stack.append(elem)
        else:
            op = elem
            if (op not in functions.keys()):
                operand1 = stack.pop(-1)
                operand2 = stack.pop(-1)
                expr = operand2 + op + operand1
                stack.append(expr)

                if op in binary_expression_gen.keys():
                    gen_operation = binary_expression_gen[op]
                    res = gen_operation(session, segment, [operand2, operand1],
                                        el)
                    variables_sc[expr] = res
                else:
                    translation_errors.append("Unsupported operation")
            else:
                operands = []
                expr = op + "("
                for i in range(0, functions[op], 1):
                    operands.append(stack.pop(-1))
                    expr += operands[-1]
                    expr += ","
                expr += ")"
                stack.append(expr)

                res = f_generator.gen_function(op, operands, session, segment,
                                               el)
                variables_sc[expr] = res

    return
def genPowerRelation(session, segment, operation, _result):
    el1 = math2sc.variables_sc[operation[0]]
    el2 = math2sc.variables_sc[operation[1]]

    #gen set of sum components
    setNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, setNode, sc.SC_CONST)

    arc1 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el1, sc.SC_CONST)
    arc2 = sc_utils.createPair(session,core.Kernel.segment(), setNode, el2, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc1, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, arc2, sc.SC_CONST)

    #gen sum relations
    res = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, "")[1]  #add result node
    sc_utils.createPair(session,core.Kernel.segment(), _result, res, sc.SC_CONST)

    relation = sc_utils.createPair(session,core.Kernel.segment(), setNode, res, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, relation, sc.SC_CONST)

    idtf = "возведение в степень*"
    idtf = sc_utils.utf8ToCp1251(str(idtf))
    powNode = sc_utils.getElementByIdtf(idtf, segment)
    if powNode == None:
        powNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, idtf)[1]
        for param in [keynodes.info.stype_bin_orient_norole_rel]:
            sc_utils.createPairPosPerm(session, core.Kernel.segment(), param, powNode, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, powNode, sc.SC_CONST)

    relarc = sc_utils.createPair(session,core.Kernel.segment(), powNode, setNode, sc.SC_CONST)

    baseIdtf = "основание_"
    baseIdtf = sc_utils.utf8ToCp1251(str(baseIdtf))
    baseNode = sc_utils.getElementByIdtf(baseIdtf, segment)
    if baseNode == None:
        baseNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, baseIdtf)[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, baseNode, sc.SC_CONST)
    a = sc_utils.createPair(session,core.Kernel.segment(), baseNode, arc1, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, a, sc.SC_CONST)


    expIdtf = "показатель_"
    expIdtf = sc_utils.utf8ToCp1251(str(expIdtf))
    expNode = sc_utils.getElementByIdtf(expIdtf, segment)
    if expNode == None:
        expNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, expIdtf)[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, expNode, sc.SC_CONST)
    a = sc_utils.createPair(session,core.Kernel.segment(), expNode, arc2, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, a, sc.SC_CONST)


    powerIdtf = "результат_"
    powerIdtf = sc_utils.utf8ToCp1251(str(powerIdtf))
    powerNode = sc_utils.getElementByIdtf(powerIdtf, segment)
    if powerNode == None:
        powerNode = session.create_el_idtf(core.Kernel.segment(), sc.SC_NODE, powerIdtf)[1]
    sc_utils.createPair(session,core.Kernel.segment(), _result, powerNode, sc.SC_CONST)
    a = sc_utils.createPair(session,core.Kernel.segment(), powerNode, relation, sc.SC_CONST)
    sc_utils.createPair(session,core.Kernel.segment(), _result, a, sc.SC_CONST)

    sc_utils.createPair(session,core.Kernel.segment(), _result, relarc, sc.SC_CONST)
    return res