Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/04/17 16:53:00 (8 years ago)
Author:
gkronber
Message:

#2650: fixed round-trip for binary factor variables (and formatting changes)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/symbreg-factors-2650/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/InfixExpressionFormatter.cs

    r14761 r14823  
    6060
    6161    private void FormatRecursively(ISymbolicExpressionTreeNode node, StringBuilder strBuilder) {
    62       if(node.SubtreeCount > 1) {
     62      if (node.SubtreeCount > 1) {
    6363        var token = GetToken(node.Symbol);
    64         if(token == "+" || token == "-" || token == "OR" || token == "XOR") {
     64        if (token == "+" || token == "-" || token == "OR" || token == "XOR") {
    6565          strBuilder.Append("(");
    6666          FormatRecursively(node.Subtrees.First(), strBuilder);
    6767
    68           foreach(var subtree in node.Subtrees.Skip(1)) {
     68          foreach (var subtree in node.Subtrees.Skip(1)) {
    6969            strBuilder.Append(" ").Append(token).Append(" ");
    7070            FormatRecursively(subtree, strBuilder);
     
    7272          strBuilder.Append(")");
    7373
    74         } else if(token == "*" || token == "/" || token == "AND") {
     74        } else if (token == "*" || token == "/" || token == "AND") {
    7575          strBuilder.Append("(");
    7676          FormatRecursively(node.Subtrees.First(), strBuilder);
    7777
    78           foreach(var subtree in node.Subtrees.Skip(1)) {
     78          foreach (var subtree in node.Subtrees.Skip(1)) {
    7979            strBuilder.Append(" ").Append(token).Append(" ");
    8080            FormatRecursively(subtree, strBuilder);
     
    8585          strBuilder.Append(token).Append("(");
    8686          FormatRecursively(node.Subtrees.First(), strBuilder);
    87           foreach(var subtree in node.Subtrees.Skip(1)) {
     87          foreach (var subtree in node.Subtrees.Skip(1)) {
    8888            strBuilder.Append(", ");
    8989            FormatRecursively(subtree, strBuilder);
     
    9191          strBuilder.Append(")");
    9292        }
    93       } else if(node.SubtreeCount == 1) {
     93      } else if (node.SubtreeCount == 1) {
    9494        var token = GetToken(node.Symbol);
    95         if(token == "-" || token == "NOT") {
     95        if (token == "-" || token == "NOT") {
    9696          strBuilder.Append("(").Append(token).Append("(");
    9797          FormatRecursively(node.GetSubtree(0), strBuilder);
    9898          strBuilder.Append("))");
    99         } else if(token == "/") {
     99        } else if (token == "/") {
    100100          strBuilder.Append("1/");
    101101          FormatRecursively(node.GetSubtree(0), strBuilder);
    102         } else if(token == "+" || token == "*") {
     102        } else if (token == "+" || token == "*") {
    103103          FormatRecursively(node.GetSubtree(0), strBuilder);
    104104        } else {
     
    110110      } else {
    111111        // no subtrees
    112         if(node.Symbol is LaggedVariable) {
     112        if (node.Symbol is LaggedVariable) {
    113113          var varNode = node as LaggedVariableTreeNode;
    114           if(!varNode.Weight.IsAlmost(1.0)) {
     114          if (!varNode.Weight.IsAlmost(1.0)) {
    115115            strBuilder.Append("(");
    116116            strBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", varNode.Weight);
     
    118118          }
    119119          strBuilder.Append("LAG(");
    120           if(varNode.VariableName.Contains("'")) {
     120          if (varNode.VariableName.Contains("'")) {
    121121            strBuilder.AppendFormat("\"{0}\"", varNode.VariableName);
    122122          } else {
     
    126126            .AppendFormat(CultureInfo.InvariantCulture, "{0}", varNode.Lag)
    127127            .Append(")");
    128         } else if(node.Symbol is Variable) {
     128        } else if (node.Symbol is Variable) {
    129129          var varNode = node as VariableTreeNode;
    130           if(!varNode.Weight.IsAlmost(1.0)) {
     130          if (!varNode.Weight.IsAlmost(1.0)) {
    131131            strBuilder.Append("(");
    132132            strBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", varNode.Weight);
    133133            strBuilder.Append("*");
    134134          }
    135           if(varNode.VariableName.Contains("'")) {
     135          if (varNode.VariableName.Contains("'")) {
    136136            strBuilder.AppendFormat("\"{0}\"", varNode.VariableName);
    137137          } else {
    138138            strBuilder.AppendFormat("'{0}'", varNode.VariableName);
    139139          }
    140           if(!varNode.Weight.IsAlmost(1.0)) {
     140          if (!varNode.Weight.IsAlmost(1.0)) {
    141141            strBuilder.Append(")");
    142142          }
    143         } else if(node.Symbol is FactorVariable) {
     143        } else if (node.Symbol is FactorVariable) {
    144144          var factorNode = node as FactorVariableTreeNode;
    145           if(factorNode.VariableName.Contains("'")) {
     145          if (factorNode.VariableName.Contains("'")) {
    146146            strBuilder.AppendFormat("\"{0}\"", factorNode.VariableName);
    147147          } else {
     
    150150          strBuilder.AppendFormat("[{0}]",
    151151            string.Join(", ", factorNode.Weights.Select(w => w.ToString(CultureInfo.InvariantCulture))));
    152         } else if(node.Symbol is BinaryFactorVariable) {
     152        } else if (node.Symbol is BinaryFactorVariable) {
    153153          var factorNode = node as BinaryFactorVariableTreeNode;
    154           if(!factorNode.Weight.IsAlmost(1.0)) {
     154          if (!factorNode.Weight.IsAlmost(1.0)) {
    155155            strBuilder.Append("(");
    156156            strBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", factorNode.Weight);
    157157            strBuilder.Append("*");
    158158          }
    159           if(factorNode.VariableName.Contains("'")) {
    160             strBuilder.AppendFormat("\"{0}={1}\"", factorNode.VariableName, factorNode.VariableValue);
     159          if (factorNode.VariableName.Contains("'")) {
     160            strBuilder.AppendFormat("\"{0}\"", factorNode.VariableName);
    161161          } else {
    162             strBuilder.AppendFormat("'{0}={1}'", factorNode.VariableName, factorNode.VariableValue);
     162            strBuilder.AppendFormat("'{0}'", factorNode.VariableName);
    163163          }
    164           if(!factorNode.Weight.IsAlmost(1.0)) {
     164          strBuilder.Append(" = ");
     165          if (factorNode.VariableValue.Contains("'")) {
     166            strBuilder.AppendFormat("\"{0}\"", factorNode.VariableValue);
     167          } else {
     168            strBuilder.AppendFormat("'{0}'", factorNode.VariableValue);
     169          }
     170
     171          if (!factorNode.Weight.IsAlmost(1.0)) {
    165172            strBuilder.Append(")");
    166173          }
    167174
    168         } else if(node.Symbol is Constant) {
     175        } else if (node.Symbol is Constant) {
    169176          var constNode = node as ConstantTreeNode;
    170           if(constNode.Value >= 0.0)
     177          if (constNode.Value >= 0.0)
    171178            strBuilder.AppendFormat(CultureInfo.InvariantCulture, "{0}", constNode.Value);
    172179          else
     
    178185    private string GetToken(ISymbol symbol) {
    179186      var tok = InfixExpressionParser.knownSymbols.GetBySecond(symbol).SingleOrDefault();
    180       if(tok == null)
     187      if (tok == null)
    181188        throw new ArgumentException(string.Format("Unknown symbol {0} found.", symbol.Name));
    182189      return tok;
Note: See TracChangeset for help on using the changeset viewer.