private static SymbolicExpressionTreeNode MirrorTree(RegressionNodeModel regressionNode, IDictionary <int, RegressionNodeModel> dict, IDictionary <int, IReadOnlyList <int> > trainingLeafRows, IDictionary <int, IReadOnlyList <int> > testLeafRows, IntValue nextId, IDataset data, IReadOnlyList <int> trainingRows, IReadOnlyList <int> testRows) { if (regressionNode.IsLeaf) { var i = nextId.Value++; dict.Add(i, regressionNode); trainingLeafRows.Add(i, trainingRows); testLeafRows.Add(i, testRows); return(new SymbolicExpressionTreeNode(new TextSymbol("Model " + i + "\n(" + trainingRows.Count + "/" + testRows.Count + ")"))); } var pftext = "\npf = " + regressionNode.PruningStrength.ToString("0.###"); var text = regressionNode.SplitAttribute + " <= " + regressionNode.SplitValue.ToString("0.###"); if (!double.IsNaN(regressionNode.PruningStrength)) { text += pftext; } var textNode = new SymbolicExpressionTreeNode(new TextSymbol(text)); IReadOnlyList <int> lTrainingRows, rTrainingRows; IReadOnlyList <int> lTestRows, rTestRows; RegressionTreeUtilities.SplitRows(trainingRows, data, regressionNode.SplitAttribute, regressionNode.SplitValue, out lTrainingRows, out rTrainingRows); RegressionTreeUtilities.SplitRows(testRows, data, regressionNode.SplitAttribute, regressionNode.SplitValue, out lTestRows, out rTestRows); textNode.AddSubtree(MirrorTree(regressionNode.Left, dict, trainingLeafRows, testLeafRows, nextId, data, lTrainingRows, lTestRows)); textNode.AddSubtree(MirrorTree(regressionNode.Right, dict, trainingLeafRows, testLeafRows, nextId, data, rTrainingRows, rTestRows)); return(textNode); }
private ISymbolicExpressionTreeNode CreateNodeFromWeight(ISymbolicExpressionTreeNode transformationTree, VariableTreeNode variableNode) { var multiplicationNode = new SymbolicExpressionTreeNode(new Multiplication()); multiplicationNode.AddSubtree(new ConstantTreeNode(new Constant()) { Value = variableNode.Weight }); multiplicationNode.AddSubtree(transformationTree); return(multiplicationNode); }
private ISymbolicExpressionTree GenerateSimpleTree(ISymbolicExpressionTreeGrammar grammar) { var branch = new SimpleSymbol("branch", "", 2, 2); var leaf = new SimpleSymbol("leaf", "", 0, 0); var root = new SymbolicExpressionTreeTopLevelNode(branch); root.SetGrammar(grammar); var branch0 = new SymbolicExpressionTreeNode(branch); var branch1 = new SymbolicExpressionTreeNode(branch); var leaf0 = new SymbolicExpressionTreeNode(leaf); var leaf1 = new SymbolicExpressionTreeNode(leaf); var leaf2 = new SymbolicExpressionTreeNode(leaf); var leaf3 = new SymbolicExpressionTreeNode(leaf); root.AddSubtree(branch0); root.AddSubtree(branch1); branch0.AddSubtree(leaf0); branch0.AddSubtree(leaf1); branch1.AddSubtree(leaf2); branch1.AddSubtree(leaf3); return(new SymbolicExpressionTree(root)); }
public void SemanticsTest() { BenchmarkSuiteInstanceProvider prov = new BenchmarkSuiteListInstanceProvider(); var prob = new CFGPythonProblem(); prob.Load(prov.LoadData(prov.GetDataDescriptors().First(x => x.Name == "Smallest"))); var grammar = prob.Grammar; var root = (SymbolicExpressionTreeTopLevelNode)grammar.ProgramRootSymbol.CreateTreeNode(); root.SetGrammar(grammar.CreateExpressionTreeGrammar()); //var root = new SymbolicExpressionTreeNode(new ProgramRootSymbol()); var start = new SymbolicExpressionTreeNode(new StartSymbol()); root.AddSubtree(start); var gstart = new SymbolicExpressionTreeNode(grammar.StartSymbol); start.AddSubtree(gstart); var predefined = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'i0 = int(); i1 = int(); i2 = int()'\r\n'b0 = bool(); b1 = bool(); b2 = bool()'\r\n'res0 = int()'\r\n<code>")); gstart.AddSubtree(predefined); var codestatementSym = GetSymbol(grammar, "<code><statement>'\\n'"); var code0 = new SymbolicExpressionTreeNode(codestatementSym); var code1 = new SymbolicExpressionTreeNode(codestatementSym); var code2 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<statement>'\\n'")); //predefined.AddSubtree(code1); predefined.AddSubtree(code0); code0.AddSubtree(code1); code1.AddSubtree(code2); var assign0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<assign>")); var assign1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<assign>")); code2.AddSubtree(assign0); //code0.AddSubtree(assign1); var if0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<if>")); code1.AddSubtree(if0); var bool_assign0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<bool_var>' = '<bool>")); var int_assign1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<int_var>' = '<int>")); assign0.AddSubtree(bool_assign0); assign1.AddSubtree(int_assign1); var bool_var0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<bool_var>")); var int_var1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<int_var>")); var b0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'b0'")); var i1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'res0'")); bool_assign0.AddSubtree(bool_var0); int_assign1.AddSubtree(int_var1); bool_var0.AddSubtree(b0); int_var1.AddSubtree(i1); var bool_const0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<bool_const>")); var int_const1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'int('<number>'.0)'")); //var num0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<num>")); var num1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<num>")); var boolconstTrue = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'True'")); var intconst2 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'2'")); bool_assign0.AddSubtree(bool_const0); int_assign1.AddSubtree(int_const1); bool_const0.AddSubtree(boolconstTrue); int_const1.AddSubtree(num1); num1.AddSubtree(intconst2); var ifthenelse0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'if '<bool>':{:\\n'<code>':}else:{:\\n'<code>':}'")); var b0_2 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'b0'")); if0.AddSubtree(ifthenelse0); ifthenelse0.AddSubtree(b0_2); var statement1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<statement>'\\n'")); var assign2 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<assign>")); var int_assign2 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<int_var>' = '<int>")); var i1_2 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'res0'")); var intconst7 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'7'")); ifthenelse0.AddSubtree(statement1); statement1.AddSubtree(assign2); assign2.AddSubtree(int_assign2); int_assign2.AddSubtree(i1_2); int_assign2.AddSubtree(intconst7); var statement2 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<statement>'\\n'")); var assign3 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<assign>")); var int_assign3 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<int_var>' = '<int>")); var i1_3 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'res0'")); var intconst8 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'9'")); ifthenelse0.AddSubtree(statement2); statement2.AddSubtree(assign3); assign3.AddSubtree(int_assign3); int_assign3.AddSubtree(i1_3); int_assign3.AddSubtree(intconst8); var while0 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'loopBreak% = 0\\nwhile '<bool>':{:\\n'<code>'\\nif loopBreak% > loopBreakConst or stop.value:{:\\nbreak\\n:}loopBreak% += 1\\n:}'")); var b0_3 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'b0'")); var code4 = new SymbolicExpressionTreeNode(codestatementSym); var statement3 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<statement>'\\n'")); var bool_assign1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<bool_var>' = '<bool>")); var bool_var1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<bool_var>")); var b0_4 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'b0'")); var bool_const1 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<bool_const>")); var boolconstFalse = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'False'")); bool_assign1.AddSubtree(bool_var1); bool_var1.AddSubtree(b0_4); bool_assign1.AddSubtree(bool_const1); bool_const1.AddSubtree(boolconstFalse); statement3.AddSubtree(bool_assign1); //var statement4 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<statement>'\\n'")); var assign4 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<assign>")); var int_assign4 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "<int_var>' = '<int>")); var i1_4 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'res0'")); var intconst9 = new SymbolicExpressionTreeNode(GetSymbol(grammar, "'1'")); //statement4.AddSubtree(assign4); assign4.AddSubtree(int_assign4); int_assign4.AddSubtree(i1_4); int_assign4.AddSubtree(intconst9); code4.AddSubtree(statement3); code4.AddSubtree(assign4); ((List <string>)((CFGProduction)while0.Symbol).parts)[0] = "x = 5\n" + ((List <string>)((CFGProduction)while0.Symbol).parts)[0]; while0.AddSubtree(b0_3); while0.AddSubtree(code4); code0.AddSubtree(while0); var tree = new SymbolicExpressionTree(root); var code = CFGSymbolicExpressionTreeStringFormatter.StaticFormat(tree); System.Console.WriteLine(code); //PythonProcessSemanticHelper ppsh = new PythonProcessSemanticHelper(prob.ProblemData.Variables.GetVariableNames(), 10); traceCodeWithVariables = String.Format(traceCode, String.Join("', '", prob.ProblemData.Variables.GetVariableNames().Where(x => !String.IsNullOrWhiteSpace(x))), 10); var bla = PythonHelper.FormatToProgram(tree, prob.ProblemData.LoopBreakConst, prob.ProblemData.FullHeader, prob.ProblemData.FullFooter); // var blub = ppsh.EvaluateAndTraceProgram(prob.PythonProcess, var blub = EvaluateAndTraceProgram(prob.PythonProcess, bla, PythonHelper.ConvertToPythonValues(prob.ProblemData.Input, prob.ProblemData.TrainingIndices), PythonHelper.ConvertToPythonValues(prob.ProblemData.Output, prob.ProblemData.TrainingIndices), prob.ProblemData.TrainingIndices, prob.ProblemData.FullHeader, prob.ProblemData.FullFooter, tree); Console.WriteLine(blub); }