from ArkM3.DataType import *
from function.ModelCreator import ModelCreator
from Himesis.Graph import Graph

f = ModelCreator(None, None)

def simpleExprValue_Int():
    vi = f.createIntegerValue(3)
    return vi
def simpleExprValue_Real():
    vr = f.createRealValue(4.4)
    return vr
def simpleExprValue_Str():
    vs = f.createStringValue("string")
    return vs
def simpleExprValue_Bool():
    vb = f.createBooleanValue(False)
    return vb
def simpleExprValue_LargeNumber():
    ln = f.createLargeNumber()
    return ln
def simpleExprValue_Void():
    ln = f.createVoidValue()
    return ln
def simpleExprValue_Tuple():
    tv = f.createTupleValue([1, 'efg'])
    return tv

def simpleExprLiteral_Int():
    li = f.createIntegerLiteral(5)
    return li
def simpleExprLiteral_Real():
    lr = f.createRealLiteral(4.45)
    return lr
def simpleExprLiteral_Bool():
    lb = f.createBooleanLiteral(True)
    return lb 
def simpleExprLiteral_Str():
    ls = f.createStringLiteral("a string literal")
    return ls
def simpleExprLiteral_Tuple():
    tv = f.createTupleLiteral([1, 'efg'])
    return tv


def simpleExprOp_Plus_int():
    cd1 = f.createIntegerValue(4, None, 'cd1')
    cd2 = f.createIntegerValue(7, None, 'cd2')
    cd3 = f.createIntegerValue(3, None, 'cd3')
    op1 = f.createPlus(None, 'plus3int', [cd1, cd2, cd3])
    return op1

def simpleExprOp_Plus_int_real():
    cd1 = f.createRealValue(7.5, None, 'cd1')
    cd2 = f.createIntegerValue(1, None, 'cd2')
    cd3 = f.createIntegerValue(3, None, 'cd3')
    op1 = f.createPlus(None, 'plus2int&1real',[cd1, cd2, cd3])      
    return op1 

def simpleExprOp_Plus_real():
    cd1 = f.createRealValue(7.5, None, 'cd1')
    cd2 = f.createRealValue(1.3, None, 'cd2')
    cd3 = f.createRealValue(3.1, None, 'cd3')
    op1 = f.createPlus(None, 'plus2int&1real',[cd1, cd2, cd3])      
    return op1 

def simpleExprOp_Plus_str_int_real():
    cd1 = f.createIntegerValue(5264, None, 'cd1')
    cd3 = f.createStringValue(" earns ", None, 'cd3')
    cd2 = f.createRealValue(100.0, None, 'cd2')
    op1 = f.createPlus(None, 'plusint&stiring&1real',[cd1, cd3, cd2])      
    return op1 

def simpleExprOp_Minus_real():
    cd1 = f.createRealValue(7.5, None, 'cd1')
    cd2 = f.createRealValue(1.3, None, 'cd2')
    cd3 = f.createRealValue(3.1, None, 'cd3')
    op1 = f.createMinus(None, 'plus2int&1real',[cd1, cd2, cd3])      
    return op1 

def simpleExprOperator_plus_string_real():     
    cd1 = f.createRealLiteral(4.4)
    cd2 = f.createIdentifier(name = 'm', value = f.createIntegerValue(7))  
    cd3 = f.createIdentifier(name = 'n', value = f.createStringValue("Plus"))
    op1 = f.createPlus(None, 'plusstr&1real',child=[cd1, cd2, cd3])
    return op1 

def simpleExprOperator_plus_string_int():
    cd1 = f.createStringLiteral("String")
    cd3 = f.createIdentifier(name = 'm', value = f.createIntegerValue(12))  
    cd2 = f.createIdentifier(name = 'n', value = f.createStringValue("Plus"))    
    op1 = f.createPlus(None, 'plusint&str', child=[cd1, cd2, cd3])      
    return op1 

def simpleExprOp_Multi_int_real():
    cd1 = f.createIntegerValue(5264, None, 'cd1')
    cd2 = f.createRealValue(100, None, 'cd2')
    cd3 = f.createRealValue(0.5, None, 'cd3')
    op1 = f.createMultiply(None, 'mulint&1real',[cd1, cd3, cd2])      
    return op1 
 
def simpleExprOp_Multi_int_int():
    cd1 = f.createIntegerValue(52, None, 'cd1')
    cd2 = f.createRealValue(100, None, 'cd2')
    op1 = f.createMultiply(None, 'mulint&int',[cd1, cd2])      
    return op1 
  
   
def simpleExprOp_Div_int_int():
    cd1 = f.createIntegerValue(5264, None, 'cd1')
    cd2 = f.createRealValue(100, None, 'cd2')
    op1 = f.createDivision(None, 'divint',[cd1, cd2])      
    return op1 


def simpleExprOp_Div_int_real():
    cd1 = f.createIntegerValue(1200, None, 'cd1')
    cd2 = f.createRealValue(100, None, 'cd2')
    cd3 = f.createRealValue(0.5, None, 'cd3')
    op1 = f.createDivision(None, 'divint&1real',[cd1, cd3, cd2])      
    return op1 


def simpleExprOperator_greaterthan():
    lhso = f.createRealLiteral(2.25)
    rhso = f.createIdentifier(name = "r", value=f.createRealValue(7))
    op2 = f.createGreaterThan(None, 'plus2str&1real',child=[lhso,rhso ])
    return op2

def simpleExprOperator_not():
    cd = f.createBooleanLiteral(False)
    op3 = f.createNot(None, 'plus2str&1real',child=[cd])
    return op3

def simpleExprOperator_and():
    cd1 = f.createStringLiteral("String")
    cd3 = f.createIdentifier(name = 'm', value = f.createBooleanValue(False))  
    cd2 = f.createIdentifier(name = 'n', value = f.createStringValue("Plus"))    
    op1 = f.createAnd(None, 'and', child=[cd1, cd2, cd3])      
    return op1 


"""
def conversionStr2Int():
    cd = f.createStringValue("123")
    op3 = f.createToInt([cd])    
    return op3    

def conversionReal2Int():
    cd = f.createRealValue(23.45)
    op3 = f.createToInt([cd])
    return op3 

def conversionInt2Real():
    cd = f.createIntegerValue(22)
    op3 = f.createToReal([cd])
    return op3 

def conversionStr2Real():
    cd = f.createStringValue("12.3")
    op3 = f.createToReal([cd])
    return op3 

def conversionReal2Str():
    cd = f.createRealValue(67.89)
    op3 = f.createToStr([cd])
    return op3     

def conversionInt2Str():
    
    cd = f.createIntegerValue(67)
    op3 = f.createToStr([cd])
    return op3         

def conversionBool2Str():
    
    cd = f.createBooleanValue(True)
    op3 = f.createToStr([cd])
    return op3         

def conversionInt2Bool():
    
    cd = f.createIntegerValue(9)
    op3 = f.createToBool([cd])
    return op3         

def testIsIdentical():
    op3 = f.createIsIdentical()
    cd = f.createClass("abcde")
    op3.add_child(cd)
    op3.add_child(cd)
    return op3         

def simpleExprOperator_equal():
    cd1 = f.createRealLiteral(4.4)
    cd2 = f.createIdentifier('m')  
    cd2.value = f.createRealValue(4.4)    
    op1 = f.createEqual([cd1,cd2])
    return op1 

def simpleExprOperator_equal2():
    cd1 = f.createRealLiteral(4.3)
    cd2 = f.createIdentifier('m')  
    cd2.value = f.createIntegerValue(4)
    op1 = f.createEqual([cd1,cd2])
    return op1 

def simpleExprOperator_notequal():
    cd1 = f.createStringLiteral("hello")
    cd2 = f.createIdentifier('m')  
    cd2.value = f.createIntegerValue(123)
    op1 = f.createNotEqual([cd1,cd2])
    return op1 


def simpleExprOperator_notequal2():
    cd1 = f.createStringLiteral("hello")
    cd2 = f.createIdentifier('m')  
    cd2.value = f.createStringValue("hello")
    op1 = f.createNotEqual([cd1,cd2])
    return op1 
"""        