Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/04/17 17:52:44 (7 years ago)
Author:
gkronber
Message:

#2650: merged the factors branch into trunk

Location:
trunk/sources
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources

  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Views

  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Views/3.4/Controls/GradientChart.cs

    r14267 r14826  
    2121
    2222using System;
     23using System.Collections;
    2324using System.Collections.Generic;
    2425using System.Drawing;
     
    3435
    3536namespace HeuristicLab.Problems.DataAnalysis.Views {
    36   public partial class GradientChart : UserControl {
     37  public partial class GradientChart : UserControl, IGradientChart {
    3738    private ModifiableDataset sharedFixedVariables; // used for syncronising variable values between charts
    3839    private ModifiableDataset internalDataset; // holds the x values for each point drawn
     
    319320        if (updateOnFinish)
    320321          Update();
    321       }
    322       catch (OperationCanceledException) { }
    323       catch (AggregateException ae) {
     322      } catch (OperationCanceledException) { } catch (AggregateException ae) {
    324323        if (!ae.InnerExceptions.Any(e => e is OperationCanceledException))
    325324          throw;
     
    347346      try {
    348347        chart.ChartAreas[0].RecalculateAxesScale();
    349       }
    350       catch (InvalidOperationException) {
     348      } catch (InvalidOperationException) {
    351349        // Can occur if eg. axis min == axis max
    352350      }
     
    381379        xvalues.Add(xmin + i * step);
    382380
    383       var variables = sharedFixedVariables.DoubleVariables.ToList();
    384       internalDataset = new ModifiableDataset(variables,
    385         variables.Select(x => x == FreeVariable
    386           ? xvalues
    387           : Enumerable.Repeat(sharedFixedVariables.GetDoubleValue(x, 0), xvalues.Count).ToList()
    388         )
    389       );
     381      if (sharedFixedVariables == null)
     382        return;
     383
     384      var variables = sharedFixedVariables.VariableNames.ToList();
     385      var values = new List<IList>();
     386      foreach (var varName in variables) {
     387        if (varName == FreeVariable) {
     388          values.Add(xvalues);
     389        } else if (sharedFixedVariables.VariableHasType<double>(varName)) {
     390          values.Add(Enumerable.Repeat(sharedFixedVariables.GetDoubleValue(varName, 0), xvalues.Count).ToList());
     391        } else if (sharedFixedVariables.VariableHasType<string>(varName)) {
     392          values.Add(Enumerable.Repeat(sharedFixedVariables.GetStringValue(varName, 0), xvalues.Count).ToList());
     393        }
     394      }
     395
     396      internalDataset = new ModifiableDataset(variables, values);
    390397    }
    391398
     
    552559
    553560    private static bool SolutionsCompatible(IEnumerable<IRegressionSolution> solutions) {
    554       foreach (var solution1 in solutions) {
    555         var variables1 = solution1.ProblemData.Dataset.DoubleVariables;
    556         foreach (var solution2 in solutions) {
    557           if (solution1 == solution2)
    558             continue;
    559           var variables2 = solution2.ProblemData.Dataset.DoubleVariables;
    560           if (!variables1.All(variables2.Contains))
    561             return false;
     561      var refSolution = solutions.First();
     562      var refSolVars = refSolution.ProblemData.Dataset.VariableNames;
     563      foreach (var solution in solutions.Skip(1)) {
     564        var variables1 = solution.ProblemData.Dataset.VariableNames;
     565        if (!variables1.All(refSolVars.Contains))
     566          return false;
     567
     568        foreach (var factorVar in variables1.Where(solution.ProblemData.Dataset.VariableHasType<string>)) {
     569          var distinctVals = refSolution.ProblemData.Dataset.GetStringValues(factorVar).Distinct();
     570          if (solution.ProblemData.Dataset.GetStringValues(factorVar).Any(val => !distinctVals.Contains(val))) return false;
    562571        }
    563572      }
     
    608617    private void sharedFixedVariables_ItemChanged(object o, EventArgs<int, int> e) {
    609618      if (o != sharedFixedVariables) return;
    610       var variables = sharedFixedVariables.DoubleVariables.ToList();
     619      var variables = sharedFixedVariables.VariableNames.ToList();
    611620      var rowIndex = e.Value;
    612621      var columnIndex = e.Value2;
     
    614623      var variableName = variables[columnIndex];
    615624      if (variableName == FreeVariable) return;
    616       var v = sharedFixedVariables.GetDoubleValue(variableName, rowIndex);
    617       var values = new List<double>(Enumerable.Repeat(v, DrawingSteps));
    618       internalDataset.ReplaceVariable(variableName, values);
     625      if (internalDataset.VariableHasType<double>(variableName)) {
     626        var v = sharedFixedVariables.GetDoubleValue(variableName, rowIndex);
     627        var values = new List<double>(Enumerable.Repeat(v, internalDataset.Rows));
     628        internalDataset.ReplaceVariable(variableName, values);
     629      } else if (internalDataset.VariableHasType<string>(variableName)) {
     630        var v = sharedFixedVariables.GetStringValue(variableName, rowIndex);
     631        var values = new List<String>(Enumerable.Repeat(v, internalDataset.Rows));
     632        internalDataset.ReplaceVariable(variableName, values);
     633      } else {
     634        // unsupported type
     635        throw new NotSupportedException();
     636      }
    619637    }
    620638
     
    635653      UpdateCursor();
    636654    }
    637     void UpdateCursor() {
     655    private void UpdateCursor() {
    638656      var x = VerticalLineAnnotation.X;
    639657      sharedFixedVariables.SetVariableValue(x, FreeVariable, 0);
Note: See TracChangeset for help on using the changeset viewer.