ydin0771 commited on
Commit
22774f1
β€’
1 Parent(s): eeec845

Upload program_translator.py

Browse files
Files changed (1) hide show
  1. program_translator.py +104 -0
program_translator.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ class ProgramTranslator(object):
3
+ def __init__(self, programDict, maxArity):
4
+ self.programDict = programDict
5
+ self.maxArity = maxArity
6
+
7
+ self.maxStack = 0
8
+
9
+ def functionToKey(self, function, withValInputs = True):
10
+ valInputs = ""
11
+ if withValInputs:
12
+ valInputs = "_" + ",".join(function["value_inputs"])
13
+ functionKey = function["function"] if "_" in function["function"] else \
14
+ "_".join([function["function"], function["function"]])
15
+ return str(len(function["inputs"])) + "_" + functionKey + valInputs
16
+
17
+ def typeToKey(self, function, withValInputs = True):
18
+ valInputs = ""
19
+ if withValInputs:
20
+ valInputs = "_" + ",".join(function["value_inputs"])
21
+ functionKey = function["type"] if "_" in function["type"] else \
22
+ "_".join([function["type"], function["type"]])
23
+ return str(len(function["inputs"])) + "_" + functionKey + valInputs
24
+
25
+ def keyToFunction(self, key):
26
+ assert key not in self.programDict.invalidSymbols
27
+ function = {}
28
+ parts = key.split("_")
29
+ arity = int(parts[0])
30
+ function["function"] = "_".join([parts[1], parts[2]])
31
+ function["value_inputs"] = []
32
+ if len(parts) == 4:
33
+ function["value_inputs"] = parts[3].split(",")
34
+ function["inputs"] = []
35
+ return function, arity
36
+
37
+ def keyToArity(self, key):
38
+ if key in self.programDict.invalidSymbols:
39
+ return 0
40
+ return int(key.split("_")[0])
41
+
42
+ def keyToType(self, key):
43
+ if key in self.programDict.invalidSymbols:
44
+ return ["0", "0", "0"]
45
+ return ["0:" + key.split("_")[0], "1:" + key.split("_")[1], "2:" + key.split("_")[2]]
46
+
47
+ def programToPostfixProgram(self, program):
48
+ newProgram = []
49
+
50
+ def programToPostfixAux(currIndex = -1):
51
+ childrenIndices = program[currIndex]["inputs"]
52
+ #[int(child) for child in program[currIndex]["inputs"]]
53
+ childrenNewIndices = []
54
+ for child in childrenIndices:
55
+ programToPostfixAux(child)
56
+ childrenNewIndices.append(len(newProgram) - 1)
57
+ program[currIndex]["inputs"] = childrenNewIndices
58
+ newProgram.append(program[currIndex])
59
+
60
+ programToPostfixAux()
61
+ return newProgram
62
+
63
+ def programToSeq(self, program):
64
+ return [self.functionToKey(function) for function in program]
65
+
66
+ def pdfProgramToSeq(self, program):
67
+ return [self.typeToKey(function) for function in program]
68
+
69
+ def programToInputs(self, program, offset = 0):
70
+ inputs = [function["inputs"] for function in program]
71
+ offsetedInputs = [[FuncInput + offset for FuncInput in FuncInputs] for FuncInputs in inputs]
72
+ return offsetedInputs
73
+
74
+ # def seqToProgram(self, seq, enforceValidPrograms = True):
75
+ # program = []
76
+
77
+ # def seqToProgramAux(currIndex = len(seq) - 1):
78
+ # if currIndex < 0:
79
+ # program = None
80
+ # return
81
+ # currFunc, arity = self.keyToFunction(seq[currIndex])
82
+ # nextIndex = currIndex - 1
83
+ # program.append(currFunc)
84
+ # for _ in arity:
85
+ # currFunc["inputs"].append(nextIndex)
86
+ # nextIndex = seqToProgramAux(nextIndex)
87
+ # currFunc["inputs"].reverse()
88
+ # return nextIndex
89
+
90
+ # if enforceValidPrograms:
91
+ # seqToProgramAux()
92
+ # if program is not None:
93
+ # program.reverse()
94
+ # else:
95
+ # stack = [0] * self.maxArity
96
+ # for i in range(len(seq)):
97
+ # func, arity = self.keyToFunction(seq[i])
98
+ # func["inputs"] = stack[len(stack) - arity:]
99
+ # newLength = max(len(stack) - arity, self.maxArity)
100
+ # stack = stack[:newLength] + [i + self.maxArity]
101
+ # self.maxStack = max(len(stack), self.maxStack)
102
+ # program.append(func)
103
+
104
+ # return program