Changeset 18176 for branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters
- Timestamp:
- 01/03/22 12:23:11 (2 years ago)
- Location:
- branches/3136_Structural_GP
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3136_Structural_GP
- Property svn:mergeinfo changed
/trunk merged: 18165-18174
- Property svn:mergeinfo changed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
/trunk/HeuristicLab.Problems.DataAnalysis.Symbolic merged: 18169,18171-18172,18174
- Property svn:mergeinfo changed
-
branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs
r18157 r18176 37 37 var token = GetToken(node.Symbol); 38 38 // operators 39 if (token == "+" || token == "-" || token == "OR" || token == "XOR" || 40 token == "*" || token == "/" || token == "AND") { 41 strBuilder.Append("("); 39 if (token == "+" || token == "-" || token == "OR" || token == "XOR") { 40 var parenthesisRequired = false; 41 if (node.Parent != null && node.Parent.SubtreeCount > 1) { 42 var parentOp = GetToken(node.Parent.Symbol); 43 if (parentOp != "+" && parentOp != "-" && parentOp != "OR" && parentOp != "XOR") 44 parenthesisRequired = true; 45 } 46 if (parenthesisRequired) strBuilder.Append("("); 42 47 FormatRecursively(node.Subtrees.First(), strBuilder, numberFormat, formatString, parameters); 43 48 … … 47 52 } 48 53 49 strBuilder.Append(")"); 54 if (parenthesisRequired) strBuilder.Append(")"); 55 } else if (token == "*" || token == "/" || token == "AND") { 56 FormatRecursively(node.Subtrees.First(), strBuilder, numberFormat, formatString, parameters); 57 58 foreach (var subtree in node.Subtrees.Skip(1)) { 59 strBuilder.Append(" ").Append(token).Append(" "); 60 // a / b * c => a / (b * C) 61 if (subtree.SubtreeCount > 1 && token == "/" && GetToken(subtree.Symbol) == "*") { 62 strBuilder.Append("("); 63 FormatRecursively(subtree, strBuilder, numberFormat, formatString, parameters); 64 strBuilder.Append(")"); 65 } else { 66 FormatRecursively(subtree, strBuilder, numberFormat, formatString, parameters); 67 } 68 } 50 69 } else if (token == "^") { 51 70 // handle integer powers directly 52 strBuilder.Append("(");53 71 FormatRecursively(node.Subtrees.First(), strBuilder, numberFormat, formatString, parameters); 54 72 … … 60 78 FormatRecursively(power, strBuilder, numberFormat, formatString, parameters); 61 79 } 62 63 strBuilder.Append(")");64 80 } else { 65 81 // function with multiple arguments … … 78 94 var token = GetToken(node.Symbol); 79 95 if (token == "-" || token == "NOT") { 80 strBuilder.Append("(").Append(token).Append("("); 81 FormatRecursively(node.GetSubtree(0), strBuilder, numberFormat, formatString, parameters); 82 strBuilder.Append("))"); 96 strBuilder.Append(token); 97 FormatRecursively(node.GetSubtree(0), strBuilder, numberFormat, formatString, parameters); 83 98 } else if (token == "/") { 84 99 strBuilder.Append("1/"); … … 97 112 var varNode = node as LaggedVariableTreeNode; 98 113 if (!varNode.Weight.IsAlmost(1.0)) { 99 strBuilder.Append("(");100 114 AppendNumber(strBuilder, parameters, varNode.Weight, formatString, numberFormat); 101 115 strBuilder.Append("*"); … … 107 121 .AppendFormat(numberFormat, "{0}", varNode.Lag) 108 122 .Append(")"); 109 if (!varNode.Weight.IsAlmost(1.0)) strBuilder.Append(")");110 123 } else if (node.Symbol is Variable) { 111 124 var varNode = node as VariableTreeNode; 112 125 if (!varNode.Weight.IsAlmost(1.0)) { 113 strBuilder.Append("(");114 126 AppendNumber(strBuilder, parameters, varNode.Weight, formatString, numberFormat); 115 127 strBuilder.Append("*"); 116 128 } 117 118 129 AppendVariableName(strBuilder, varNode.VariableName); 119 120 if (!varNode.Weight.IsAlmost(1.0)) strBuilder.Append(")");121 130 } else if (node.Symbol is FactorVariable) { 122 131 var factorNode = node as FactorVariableTreeNode; … … 132 141 var factorNode = node as BinaryFactorVariableTreeNode; 133 142 if (!factorNode.Weight.IsAlmost(1.0)) { 134 strBuilder.Append("(");135 143 AppendNumber(strBuilder, parameters, factorNode.Weight, formatString, numberFormat); 136 137 144 strBuilder.Append("*"); 138 145 } 139 140 146 AppendVariableName(strBuilder, factorNode.VariableName); 141 147 strBuilder.Append(" = "); 142 148 AppendVariableName(strBuilder, factorNode.VariableValue); 143 144 if (!factorNode.Weight.IsAlmost(1.0)) strBuilder.Append(")");145 149 } else if (node is INumericTreeNode numNode) { 146 150 if (parameters == null && numNode.Value < 0) { 147 151 // negative value 148 strBuilder.Append("(").Append(numNode.Value.ToString(formatString, numberFormat)) 149 .Append(")"); 152 strBuilder.Append(numNode.Value.ToString(formatString, numberFormat)); 150 153 } else { 151 154 AppendNumber(strBuilder, parameters, numNode.Value, formatString, numberFormat);
Note: See TracChangeset
for help on using the changeset viewer.