// Path: core/src/main/java/com/caseystella/analytics/distribution/GlobalStatistics.java
// public class GlobalStatistics implements Serializable {
//     Double mean;
//     Double min;
//     Double max;
//     Double stddev;
// 
//     public Double getMean() {
//         return mean;
//     }
// 
//     public void setMean(double mean) {
//         this.mean = mean;
//     }
// 
//     public Double getMin() {
//         return min;
//     }
// 
//     public void setMin(double min) {
//         this.min = min;
//     }
// 
//     public Double getMax() {
//         return max;
//     }
// 
//     public void setMax(double max) {
//         this.max = max;
//     }
// 
//     public Double getStddev() {
//         return stddev;
//     }
// 
//     public void setStddev(double stddev) {
//         this.stddev = stddev;
//     }
// }
// 
// Path: core/src/main/java/com/caseystella/analytics/distribution/config/RotationConfig.java
// public class RotationConfig implements Serializable {
//     Type type;
//     Long amount;
//     Unit unit;
// 
//     public Type getType() {
//         return type;
//     }
// 
//     public void setType(Type type) {
//         this.type = type;
//     }
// 
//     public Long getAmount() {
//         return amount;
//     }
// 
//     public void setAmount(Long amount) {
//         this.amount = amount;
//     }
// 
//     public Unit getUnit() {
//         return unit;
//     }
// 
//     public void setUnit(Unit unit) {
//         this.unit = unit;
//     }
// }
// 
// Path: core/src/main/java/com/caseystella/analytics/distribution/scaling/ScalingFunctions.java
// public enum ScalingFunctions implements ScalingFunction {
//     NONE(new ScalingFunction() {
// 
//         @Override
//         public double scale(double val, GlobalStatistics stats) {
//             return val;
//         }
//     })
//    ,SHIFT_TO_POSITIVE(new DefaultScalingFunctions.ShiftToPositive())
// 
//     ,SQUEEZE_TO_UNIT( new DefaultScalingFunctions.SqueezeToUnit())
// 
//     ,FIXED_MEAN_UNIT_VARIANCE(new DefaultScalingFunctions.FixedMeanUnitVariance())
//     ,ZERO_MEAN_UNIT_VARIANCE(new DefaultScalingFunctions.ZeroMeanUnitVariance())
//     ;
//     private ScalingFunction _func;
//     ScalingFunctions(ScalingFunction func) {
//         _func = func;
//     }
// 
//     @Override
//     public double scale(double val, GlobalStatistics globalStatistics) {
//         return _func.scale(val, globalStatistics);
//     }
// }


import com.caseystella.analytics.distribution.GlobalStatistics;
import com.caseystella.analytics.distribution.config.RotationConfig;
import com.caseystella.analytics.distribution.scaling.ScalingFunctions;
import com.google.common.collect.ImmutableList;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
package com.caseystella.analytics.outlier.streaming;



public class OutlierConfig implements Serializable {
    private RotationConfig rotationPolicy;
    private RotationConfig chunkingPolicy;
    private GlobalStatistics globalStatistics;
    private OutlierAlgorithm sketchyOutlierAlgorithm;
    private com.caseystella.analytics.outlier.batch.OutlierAlgorithm batchOutlierAlgorithm;
    private ScalingFunctions scalingFunction = null;
    private List<Double> percentilesToTrack = ImmutableList.of(0.50d, 0.75d, 0.90d, 0.95d, 0.99d);
    private List<String> groupingKeys;
    private Map<String, Object> config = new HashMap<>();

    public List<Double> getPercentilesToTrack() {
        return percentilesToTrack;
    }

    public void setPercentilesToTrack(List<Double> percentilesToTrack) {
        this.percentilesToTrack = percentilesToTrack;
    }

    public List<String> getGroupingKeys() {
        return groupingKeys;
    }

    public void setGroupingKeys(List<String> groupingKeys) {
        this.groupingKeys = groupingKeys;
    }

    public Map<String, Object> getConfig() {
        return config;
    }

// Path: core/src/main/java/com/caseystella/analytics/distribution/GlobalStatistics.java
// public class GlobalStatistics implements Serializable {
//     Double mean;
//     Double min;
//     Double max;
//     Double stddev;
// 
//     public Double getMean() {
//         return mean;
//     }
// 
//     public void setMean(double mean) {
//         this.mean = mean;
//     }
// 
//     public Double getMin() {
//         return min;
//     }
// 
//     public void setMin(double min) {
//         this.min = min;
//     }
// 
//     public Double getMax() {
//         return max;
//     }
// 
//     public void setMax(double max) {
//         this.max = max;
//     }
// 
//     public Double getStddev() {
//         return stddev;
//     }
// 
//     public void setStddev(double stddev) {
//         this.stddev = stddev;
//     }
// }
// 
// Path: core/src/main/java/com/caseystella/analytics/distribution/config/RotationConfig.java
// public class RotationConfig implements Serializable {
//     Type type;
//     Long amount;
//     Unit unit;
// 
//     public Type getType() {
//         return type;
//     }
// 
//     public void setType(Type type) {
//         this.type = type;
//     }
// 
//     public Long getAmount() {
//         return amount;
//     }
// 
//     public void setAmount(Long amount) {
//         this.amount = amount;
//     }
// 
//     public Unit getUnit() {
//         return unit;
//     }
// 
//     public void setUnit(Unit unit) {
//         this.unit = unit;
//     }
// }
// 
// Path: core/src/main/java/com/caseystella/analytics/distribution/scaling/ScalingFunctions.java
// public enum ScalingFunctions implements ScalingFunction {
//     NONE(new ScalingFunction() {
// 
//         @Override
//         public double scale(double val, GlobalStatistics stats) {
//             return val;
//         }
//     })
//    ,SHIFT_TO_POSITIVE(new DefaultScalingFunctions.ShiftToPositive())
// 
//     ,SQUEEZE_TO_UNIT( new DefaultScalingFunctions.SqueezeToUnit())
// 
//     ,FIXED_MEAN_UNIT_VARIANCE(new DefaultScalingFunctions.FixedMeanUnitVariance())
//     ,ZERO_MEAN_UNIT_VARIANCE(new DefaultScalingFunctions.ZeroMeanUnitVariance())
//     ;
//     private ScalingFunction _func;
//     ScalingFunctions(ScalingFunction func) {
//         _func = func;
//     }
// 
//     @Override
//     public double scale(double val, GlobalStatistics globalStatistics) {
//         return _func.scale(val, globalStatistics);
//     }
// }


// Path: core/src/main/java/com/caseystella/analytics/outlier/streaming/OutlierConfig.java
import com.caseystella.analytics.distribution.GlobalStatistics;
import com.caseystella.analytics.distribution.config.RotationConfig;
import com.caseystella.analytics.distribution.scaling.ScalingFunctions;
import com.google.common.collect.ImmutableList;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

package com.caseystella.analytics.outlier.streaming;



public class OutlierConfig implements Serializable {
    private RotationConfig rotationPolicy;
    private RotationConfig chunkingPolicy;
    private GlobalStatistics globalStatistics;
    private OutlierAlgorithm sketchyOutlierAlgorithm;
    private com.caseystella.analytics.outlier.batch.OutlierAlgorithm batchOutlierAlgorithm;
    private ScalingFunctions scalingFunction = null;
    private List<Double> percentilesToTrack = ImmutableList.of(0.50d, 0.75d, 0.90d, 0.95d, 0.99d);
    private List<String> groupingKeys;
    private Map<String, Object> config = new HashMap<>();

    public List<Double> getPercentilesToTrack() {
        return percentilesToTrack;
    }

    public void setPercentilesToTrack(List<Double> percentilesToTrack) {
        this.percentilesToTrack = percentilesToTrack;
    }

    public List<String> getGroupingKeys() {
        return groupingKeys;
    }

    public void setGroupingKeys(List<String> groupingKeys) {
        this.groupingKeys = groupingKeys;
    }

    public Map<String, Object> getConfig() {
        return config;
    }

    public GlobalStatistics getGlobalStatistics() {