diff --git a/Microsoft.ML.sln b/Microsoft.ML.sln index 2c7d3ead98..362347afbc 100644 --- a/Microsoft.ML.sln +++ b/Microsoft.ML.sln @@ -115,14 +115,18 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.Analyzer", "sr EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.StaticPipelineTesting", "test\Microsoft.ML.StaticPipelineTesting\Microsoft.ML.StaticPipelineTesting.csproj", "{8B38BF24-35F4-4787-A9C5-22D35987106E}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.TimeSeries", "src\Microsoft.ML.TimeSeries\Microsoft.ML.TimeSeries.csproj", "{5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.OnnxTransform", "src\Microsoft.ML.OnnxTransform\Microsoft.ML.OnnxTransform.csproj", "{8C05642D-C3AA-4972-B02C-93681161A6BC}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.DnnAnalyzer", "src\Microsoft.ML.DnnAnalyzer\Microsoft.ML.DnnAnalyzer\Microsoft.ML.DnnAnalyzer.csproj", "{73DAAC82-D308-48CC-8FFE-3B037F8BBCCA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.ML.OnnxTransformTest", "test\Microsoft.ML.OnnxTransformTest\Microsoft.ML.OnnxTransformTest.csproj", "{49D03292-8AFE-4B82-823C-D047BF8420F7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.OnnxTransformTest", "test\Microsoft.ML.OnnxTransformTest\Microsoft.ML.OnnxTransformTest.csproj", "{49D03292-8AFE-4B82-823C-D047BF8420F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.Benchmarks.Tests", "test\Microsoft.ML.Benchmarks.Tests\Microsoft.ML.Benchmarks.Tests.csproj", "{B6C83F04-A04B-4F00-9E68-1EC411F9317C}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.ML.TimeSeries.Tests", "test\Microsoft.ML.TimeSeries.Tests\Microsoft.ML.TimeSeries.Tests.csproj", "{4B101D58-E7E4-4877-A536-A9B41E2E82A3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -427,6 +431,14 @@ Global {8B38BF24-35F4-4787-A9C5-22D35987106E}.Release|Any CPU.Build.0 = Release|Any CPU {8B38BF24-35F4-4787-A9C5-22D35987106E}.Release-Intrinsics|Any CPU.ActiveCfg = Release-Intrinsics|Any CPU {8B38BF24-35F4-4787-A9C5-22D35987106E}.Release-Intrinsics|Any CPU.Build.0 = Release-Intrinsics|Any CPU + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}.Debug-Intrinsics|Any CPU.ActiveCfg = Debug-Intrinsics|Any CPU + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}.Debug-Intrinsics|Any CPU.Build.0 = Debug-Intrinsics|Any CPU + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}.Release|Any CPU.Build.0 = Release|Any CPU + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}.Release-Intrinsics|Any CPU.ActiveCfg = Release-Intrinsics|Any CPU + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132}.Release-Intrinsics|Any CPU.Build.0 = Release-Intrinsics|Any CPU {8C05642D-C3AA-4972-B02C-93681161A6BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8C05642D-C3AA-4972-B02C-93681161A6BC}.Debug|Any CPU.Build.0 = Debug|Any CPU {8C05642D-C3AA-4972-B02C-93681161A6BC}.Debug-Intrinsics|Any CPU.ActiveCfg = Debug-Intrinsics|Any CPU @@ -459,6 +471,14 @@ Global {B6C83F04-A04B-4F00-9E68-1EC411F9317C}.Release|Any CPU.Build.0 = Release|Any CPU {B6C83F04-A04B-4F00-9E68-1EC411F9317C}.Release-Intrinsics|Any CPU.ActiveCfg = Release-Intrinsics|Any CPU {B6C83F04-A04B-4F00-9E68-1EC411F9317C}.Release-Intrinsics|Any CPU.Build.0 = Release-Intrinsics|Any CPU + {4B101D58-E7E4-4877-A536-A9B41E2E82A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B101D58-E7E4-4877-A536-A9B41E2E82A3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B101D58-E7E4-4877-A536-A9B41E2E82A3}.Debug-Intrinsics|Any CPU.ActiveCfg = Debug-Intrinsics|Any CPU + {4B101D58-E7E4-4877-A536-A9B41E2E82A3}.Debug-Intrinsics|Any CPU.Build.0 = Debug-Intrinsics|Any CPU + {4B101D58-E7E4-4877-A536-A9B41E2E82A3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B101D58-E7E4-4877-A536-A9B41E2E82A3}.Release|Any CPU.Build.0 = Release|Any CPU + {4B101D58-E7E4-4877-A536-A9B41E2E82A3}.Release-Intrinsics|Any CPU.ActiveCfg = Release-Intrinsics|Any CPU + {4B101D58-E7E4-4877-A536-A9B41E2E82A3}.Release-Intrinsics|Any CPU.Build.0 = Release-Intrinsics|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -506,10 +526,12 @@ Global {570A0B8A-5463-44D2-8521-54C0CA4CACA9} = {09EADF06-BE25-4228-AB53-95AE3E15B530} {6DEF0F40-3853-47B3-8165-5F24BA5E14DF} = {09EADF06-BE25-4228-AB53-95AE3E15B530} {8B38BF24-35F4-4787-A9C5-22D35987106E} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} + {5A79C7F0-3D99-4123-B0DA-7C9FFCD13132} = {09EADF06-BE25-4228-AB53-95AE3E15B530} {8C05642D-C3AA-4972-B02C-93681161A6BC} = {09EADF06-BE25-4228-AB53-95AE3E15B530} {73DAAC82-D308-48CC-8FFE-3B037F8BBCCA} = {09EADF06-BE25-4228-AB53-95AE3E15B530} {49D03292-8AFE-4B82-823C-D047BF8420F7} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} {B6C83F04-A04B-4F00-9E68-1EC411F9317C} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} + {4B101D58-E7E4-4877-A536-A9B41E2E82A3} = {AED9C836-31E3-4F3F-8ABC-929555D3F3C4} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {41165AF1-35BB-4832-A189-73060F82B01D} diff --git a/build/Dependencies.props b/build/Dependencies.props index 704b323c71..34971cf262 100644 --- a/build/Dependencies.props +++ b/build/Dependencies.props @@ -8,7 +8,7 @@ 4.3.0 1.0.0-beta-62824-02 2.1.2.2 - 0.0.0.6 + 0.0.0.7 4.5.0 0.11.1 1.10.0 diff --git a/pkg/Microsoft.ML.HalLearners/Microsoft.ML.HalLearners.nupkgproj b/pkg/Microsoft.ML.HalLearners/Microsoft.ML.HalLearners.nupkgproj index 132b995a2f..2503b9911a 100644 --- a/pkg/Microsoft.ML.HalLearners/Microsoft.ML.HalLearners.nupkgproj +++ b/pkg/Microsoft.ML.HalLearners/Microsoft.ML.HalLearners.nupkgproj @@ -7,10 +7,10 @@ + - diff --git a/pkg/Microsoft.ML.Mkl.Redist/Microsoft.ML.Mkl.Redist.nupkgproj b/pkg/Microsoft.ML.Mkl.Redist/Microsoft.ML.Mkl.Redist.nupkgproj new file mode 100644 index 0000000000..ef139e763b --- /dev/null +++ b/pkg/Microsoft.ML.Mkl.Redist/Microsoft.ML.Mkl.Redist.nupkgproj @@ -0,0 +1,14 @@ + + + + Intel + netstandard2.0 + $(MSBuildProjectName) contains the MKL library redistributed as a NuGet package. + $(PackageTags) MLNET MKL + + + + + + + diff --git a/pkg/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.nupkgproj b/pkg/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.nupkgproj new file mode 100644 index 0000000000..d0325da023 --- /dev/null +++ b/pkg/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.nupkgproj @@ -0,0 +1,13 @@ + + + + netstandard2.0 + Microsoft.ML.TimeSeries contains ML.NET Time Series prediction algorithms. Uses Intel Mkl. + + + + + + + + diff --git a/pkg/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.symbols.nupkgproj b/pkg/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.symbols.nupkgproj new file mode 100644 index 0000000000..05f361fa6c --- /dev/null +++ b/pkg/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.symbols.nupkgproj @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Common/AssemblyLoadingUtils.cs b/src/Common/AssemblyLoadingUtils.cs index bbfa1d8126..9a9dc0c079 100644 --- a/src/Common/AssemblyLoadingUtils.cs +++ b/src/Common/AssemblyLoadingUtils.cs @@ -152,6 +152,7 @@ private static bool ShouldSkipPath(string path) case "mklimports.dll": case "microsoft.research.controls.decisiontrees.dll": case "microsoft.ml.neuralnetworks.sse.dll": + case "mklproxynative.dll": case "neuraltreeevaluator.dll": case "optimizationbuilderdotnet.dll": case "parallelcommunicator.dll": diff --git a/src/Microsoft.ML.HalLearners/Microsoft.ML.HalLearners.csproj b/src/Microsoft.ML.HalLearners/Microsoft.ML.HalLearners.csproj index e23ef26a76..7690a14ec4 100644 --- a/src/Microsoft.ML.HalLearners/Microsoft.ML.HalLearners.csproj +++ b/src/Microsoft.ML.HalLearners/Microsoft.ML.HalLearners.csproj @@ -10,7 +10,6 @@ - diff --git a/src/Microsoft.ML.HalLearners/SymSgdClassificationTrainer.cs b/src/Microsoft.ML.HalLearners/SymSgdClassificationTrainer.cs index 77d7025800..42a9dc9e26 100644 --- a/src/Microsoft.ML.HalLearners/SymSgdClassificationTrainer.cs +++ b/src/Microsoft.ML.HalLearners/SymSgdClassificationTrainer.cs @@ -754,6 +754,9 @@ private void CheckLabel(RoleMappedData examples, out int weightSetCount) private static unsafe class Native { + //To triger the loading of MKL library since SymSGD native library depends on it. + static Native() => ErrorMessage(0); + internal const string DllName = "SymSgdNative"; [DllImport(DllName), SuppressUnmanagedCodeSecurity] @@ -848,6 +851,11 @@ public static void DeallocateSequentially(GCHandle stateGCHandle) { DeallocateSequentially((State*)stateGCHandle.AddrOfPinnedObject()); } + + // See: https://software.intel.com/en-us/node/521990 + [System.Security.SuppressUnmanagedCodeSecurity] + [DllImport("MklImports", EntryPoint = "DftiErrorMessage", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] + private static extern IntPtr ErrorMessage(int status); } /// diff --git a/src/Microsoft.ML.Legacy/CSharpApi.cs b/src/Microsoft.ML.Legacy/CSharpApi.cs index 634e071f4e..a556621c94 100644 --- a/src/Microsoft.ML.Legacy/CSharpApi.cs +++ b/src/Microsoft.ML.Legacy/CSharpApi.cs @@ -478,6 +478,102 @@ public void Add(Microsoft.ML.Legacy.Models.TrainTestEvaluator input, Microsoft.M _jsonNodes.Add(Serialize("Models.TrainTestEvaluator", input, output)); } + public Microsoft.ML.Legacy.TimeSeriesProcessing.ExponentialAverage.Output Add(Microsoft.ML.Legacy.TimeSeriesProcessing.ExponentialAverage input) + { + var output = new Microsoft.ML.Legacy.TimeSeriesProcessing.ExponentialAverage.Output(); + Add(input, output); + return output; + } + + public void Add(Microsoft.ML.Legacy.TimeSeriesProcessing.ExponentialAverage input, Microsoft.ML.Legacy.TimeSeriesProcessing.ExponentialAverage.Output output) + { + _jsonNodes.Add(Serialize("TimeSeriesProcessing.ExponentialAverage", input, output)); + } + + public Microsoft.ML.Legacy.TimeSeriesProcessing.IidChangePointDetector.Output Add(Microsoft.ML.Legacy.TimeSeriesProcessing.IidChangePointDetector input) + { + var output = new Microsoft.ML.Legacy.TimeSeriesProcessing.IidChangePointDetector.Output(); + Add(input, output); + return output; + } + + public void Add(Microsoft.ML.Legacy.TimeSeriesProcessing.IidChangePointDetector input, Microsoft.ML.Legacy.TimeSeriesProcessing.IidChangePointDetector.Output output) + { + _jsonNodes.Add(Serialize("TimeSeriesProcessing.IidChangePointDetector", input, output)); + } + + public Microsoft.ML.Legacy.TimeSeriesProcessing.IidSpikeDetector.Output Add(Microsoft.ML.Legacy.TimeSeriesProcessing.IidSpikeDetector input) + { + var output = new Microsoft.ML.Legacy.TimeSeriesProcessing.IidSpikeDetector.Output(); + Add(input, output); + return output; + } + + public void Add(Microsoft.ML.Legacy.TimeSeriesProcessing.IidSpikeDetector input, Microsoft.ML.Legacy.TimeSeriesProcessing.IidSpikeDetector.Output output) + { + _jsonNodes.Add(Serialize("TimeSeriesProcessing.IidSpikeDetector", input, output)); + } + + public Microsoft.ML.Legacy.TimeSeriesProcessing.PercentileThresholdTransform.Output Add(Microsoft.ML.Legacy.TimeSeriesProcessing.PercentileThresholdTransform input) + { + var output = new Microsoft.ML.Legacy.TimeSeriesProcessing.PercentileThresholdTransform.Output(); + Add(input, output); + return output; + } + + public void Add(Microsoft.ML.Legacy.TimeSeriesProcessing.PercentileThresholdTransform input, Microsoft.ML.Legacy.TimeSeriesProcessing.PercentileThresholdTransform.Output output) + { + _jsonNodes.Add(Serialize("TimeSeriesProcessing.PercentileThresholdTransform", input, output)); + } + + public Microsoft.ML.Legacy.TimeSeriesProcessing.PValueTransform.Output Add(Microsoft.ML.Legacy.TimeSeriesProcessing.PValueTransform input) + { + var output = new Microsoft.ML.Legacy.TimeSeriesProcessing.PValueTransform.Output(); + Add(input, output); + return output; + } + + public void Add(Microsoft.ML.Legacy.TimeSeriesProcessing.PValueTransform input, Microsoft.ML.Legacy.TimeSeriesProcessing.PValueTransform.Output output) + { + _jsonNodes.Add(Serialize("TimeSeriesProcessing.PValueTransform", input, output)); + } + + public Microsoft.ML.Legacy.TimeSeriesProcessing.SlidingWindowTransform.Output Add(Microsoft.ML.Legacy.TimeSeriesProcessing.SlidingWindowTransform input) + { + var output = new Microsoft.ML.Legacy.TimeSeriesProcessing.SlidingWindowTransform.Output(); + Add(input, output); + return output; + } + + public void Add(Microsoft.ML.Legacy.TimeSeriesProcessing.SlidingWindowTransform input, Microsoft.ML.Legacy.TimeSeriesProcessing.SlidingWindowTransform.Output output) + { + _jsonNodes.Add(Serialize("TimeSeriesProcessing.SlidingWindowTransform", input, output)); + } + + public Microsoft.ML.Legacy.TimeSeriesProcessing.SsaChangePointDetector.Output Add(Microsoft.ML.Legacy.TimeSeriesProcessing.SsaChangePointDetector input) + { + var output = new Microsoft.ML.Legacy.TimeSeriesProcessing.SsaChangePointDetector.Output(); + Add(input, output); + return output; + } + + public void Add(Microsoft.ML.Legacy.TimeSeriesProcessing.SsaChangePointDetector input, Microsoft.ML.Legacy.TimeSeriesProcessing.SsaChangePointDetector.Output output) + { + _jsonNodes.Add(Serialize("TimeSeriesProcessing.SsaChangePointDetector", input, output)); + } + + public Microsoft.ML.Legacy.TimeSeriesProcessing.SsaSpikeDetector.Output Add(Microsoft.ML.Legacy.TimeSeriesProcessing.SsaSpikeDetector input) + { + var output = new Microsoft.ML.Legacy.TimeSeriesProcessing.SsaSpikeDetector.Output(); + Add(input, output); + return output; + } + + public void Add(Microsoft.ML.Legacy.TimeSeriesProcessing.SsaSpikeDetector input, Microsoft.ML.Legacy.TimeSeriesProcessing.SsaSpikeDetector.Output output) + { + _jsonNodes.Add(Serialize("TimeSeriesProcessing.SsaSpikeDetector", input, output)); + } + public Microsoft.ML.Legacy.Trainers.AveragedPerceptronBinaryClassifier.Output Add(Microsoft.ML.Legacy.Trainers.AveragedPerceptronBinaryClassifier input) { var output = new Microsoft.ML.Legacy.Trainers.AveragedPerceptronBinaryClassifier.Output(); @@ -4226,6 +4322,759 @@ public sealed class Output } } + namespace Legacy.TimeSeriesProcessing + { + + /// + /// Applies a Exponential average on a time series. + /// + public sealed partial class ExponentialAverage : Microsoft.ML.Runtime.EntryPoints.CommonInputs.ITransformInput, Microsoft.ML.Legacy.ILearningPipelineItem + { + + + /// + /// The name of the source column + /// + public string Source { get; set; } + + /// + /// The name of the new column + /// + public string Name { get; set; } + + /// + /// Coefficient d in: d m(y_t) = d * y_t + (1-d) * m(y_(t-1)), it should be in [0, 1]. + /// + public float Decay { get; set; } = 0.9f; + + /// + /// Input dataset + /// + public Var Data { get; set; } = new Var(); + + + public sealed class Output : Microsoft.ML.Runtime.EntryPoints.CommonOutputs.ITransformOutput + { + /// + /// Transformed dataset + /// + public Var OutputData { get; set; } = new Var(); + + /// + /// Transform model + /// + public Var Model { get; set; } = new Var(); + + } + public Var GetInputData() => Data; + + public ILearningPipelineStep ApplyStep(ILearningPipelineStep previousStep, Experiment experiment) + { + if (previousStep != null) + { + if (!(previousStep is ILearningPipelineDataStep dataStep)) + { + throw new InvalidOperationException($"{ nameof(ExponentialAverage)} only supports an { nameof(ILearningPipelineDataStep)} as an input."); + } + + Data = dataStep.Data; + } + Output output = experiment.Add(this); + return new ExponentialAveragePipelineStep(output); + } + + private class ExponentialAveragePipelineStep : ILearningPipelineDataStep + { + public ExponentialAveragePipelineStep(Output output) + { + Data = output.OutputData; + Model = output.Model; + } + + public Var Data { get; } + public Var Model { get; } + } + } + } + + namespace Legacy.TimeSeriesProcessing + { + public enum SequentialAnomalyDetectionTransformBaseSingleIidAnomalyDetectionBaseStateMartingaleType : byte + { + None = 0, + Power = 1, + Mixture = 2 + } + + + /// + /// This transform detects the change-points in an i.i.d. sequence using adaptive kernel density estimation and martingales. + /// + public sealed partial class IidChangePointDetector : Microsoft.ML.Runtime.EntryPoints.CommonInputs.ITransformInput, Microsoft.ML.Legacy.ILearningPipelineItem + { + + + /// + /// The name of the source column. + /// + public string Source { get; set; } + + /// + /// The name of the new column. + /// + public string Name { get; set; } + + /// + /// The change history length. + /// + public int ChangeHistoryLength { get; set; } = 20; + + /// + /// The confidence for change point detection in the range [0, 100]. + /// + public double Confidence { get; set; } = 95d; + + /// + /// The martingale used for scoring. + /// + public SequentialAnomalyDetectionTransformBaseSingleIidAnomalyDetectionBaseStateMartingaleType Martingale { get; set; } = SequentialAnomalyDetectionTransformBaseSingleIidAnomalyDetectionBaseStateMartingaleType.Power; + + /// + /// The epsilon parameter for the Power martingale. + /// + public double PowerMartingaleEpsilon { get; set; } = 0.1d; + + /// + /// Input dataset + /// + public Var Data { get; set; } = new Var(); + + + public sealed class Output : Microsoft.ML.Runtime.EntryPoints.CommonOutputs.ITransformOutput + { + /// + /// Transformed dataset + /// + public Var OutputData { get; set; } = new Var(); + + /// + /// Transform model + /// + public Var Model { get; set; } = new Var(); + + } + public Var GetInputData() => Data; + + public ILearningPipelineStep ApplyStep(ILearningPipelineStep previousStep, Experiment experiment) + { + if (previousStep != null) + { + if (!(previousStep is ILearningPipelineDataStep dataStep)) + { + throw new InvalidOperationException($"{ nameof(IidChangePointDetector)} only supports an { nameof(ILearningPipelineDataStep)} as an input."); + } + + Data = dataStep.Data; + } + Output output = experiment.Add(this); + return new IidChangePointDetectorPipelineStep(output); + } + + private class IidChangePointDetectorPipelineStep : ILearningPipelineDataStep + { + public IidChangePointDetectorPipelineStep(Output output) + { + Data = output.OutputData; + Model = output.Model; + } + + public Var Data { get; } + public Var Model { get; } + } + } + } + + namespace Legacy.TimeSeriesProcessing + { + public enum SequentialAnomalyDetectionTransformBaseSingleIidAnomalyDetectionBaseStateAnomalySide : byte + { + Positive = 0, + Negative = 1, + TwoSided = 2 + } + + + /// + /// This transform detects the spikes in a i.i.d. sequence using adaptive kernel density estimation. + /// + public sealed partial class IidSpikeDetector : Microsoft.ML.Runtime.EntryPoints.CommonInputs.ITransformInput, Microsoft.ML.Legacy.ILearningPipelineItem + { + + + /// + /// The name of the source column. + /// + public string Source { get; set; } + + /// + /// The name of the new column. + /// + public string Name { get; set; } + + /// + /// The argument that determines whether to detect positive or negative anomalies, or both. + /// + public SequentialAnomalyDetectionTransformBaseSingleIidAnomalyDetectionBaseStateAnomalySide Side { get; set; } = SequentialAnomalyDetectionTransformBaseSingleIidAnomalyDetectionBaseStateAnomalySide.TwoSided; + + /// + /// The size of the sliding window for computing the p-value. + /// + public int PvalueHistoryLength { get; set; } = 100; + + /// + /// The confidence for spike detection in the range [0, 100]. + /// + public double Confidence { get; set; } = 99d; + + /// + /// Input dataset + /// + public Var Data { get; set; } = new Var(); + + + public sealed class Output : Microsoft.ML.Runtime.EntryPoints.CommonOutputs.ITransformOutput + { + /// + /// Transformed dataset + /// + public Var OutputData { get; set; } = new Var(); + + /// + /// Transform model + /// + public Var Model { get; set; } = new Var(); + + } + public Var GetInputData() => Data; + + public ILearningPipelineStep ApplyStep(ILearningPipelineStep previousStep, Experiment experiment) + { + if (previousStep != null) + { + if (!(previousStep is ILearningPipelineDataStep dataStep)) + { + throw new InvalidOperationException($"{ nameof(IidSpikeDetector)} only supports an { nameof(ILearningPipelineDataStep)} as an input."); + } + + Data = dataStep.Data; + } + Output output = experiment.Add(this); + return new IidSpikeDetectorPipelineStep(output); + } + + private class IidSpikeDetectorPipelineStep : ILearningPipelineDataStep + { + public IidSpikeDetectorPipelineStep(Output output) + { + Data = output.OutputData; + Model = output.Model; + } + + public Var Data { get; } + public Var Model { get; } + } + } + } + + namespace Legacy.TimeSeriesProcessing + { + + /// + /// Detects the values of time-series that are in the top percentile of the sliding window. + /// + public sealed partial class PercentileThresholdTransform : Microsoft.ML.Runtime.EntryPoints.CommonInputs.ITransformInput, Microsoft.ML.Legacy.ILearningPipelineItem + { + + + /// + /// The name of the source column + /// + public string Source { get; set; } + + /// + /// The name of the new column + /// + public string Name { get; set; } + + /// + /// The percentile value for thresholding in the range [0, 100] + /// + public double Percentile { get; set; } = 1d; + + /// + /// The size of the sliding window for computing the percentile threshold. The default value is set to 1. + /// + public int WindowSize { get; set; } = 1; + + /// + /// Input dataset + /// + public Var Data { get; set; } = new Var(); + + + public sealed class Output : Microsoft.ML.Runtime.EntryPoints.CommonOutputs.ITransformOutput + { + /// + /// Transformed dataset + /// + public Var OutputData { get; set; } = new Var(); + + /// + /// Transform model + /// + public Var Model { get; set; } = new Var(); + + } + public Var GetInputData() => Data; + + public ILearningPipelineStep ApplyStep(ILearningPipelineStep previousStep, Experiment experiment) + { + if (previousStep != null) + { + if (!(previousStep is ILearningPipelineDataStep dataStep)) + { + throw new InvalidOperationException($"{ nameof(PercentileThresholdTransform)} only supports an { nameof(ILearningPipelineDataStep)} as an input."); + } + + Data = dataStep.Data; + } + Output output = experiment.Add(this); + return new PercentileThresholdTransformPipelineStep(output); + } + + private class PercentileThresholdTransformPipelineStep : ILearningPipelineDataStep + { + public PercentileThresholdTransformPipelineStep(Output output) + { + Data = output.OutputData; + Model = output.Model; + } + + public Var Data { get; } + public Var Model { get; } + } + } + } + + namespace Legacy.TimeSeriesProcessing + { + + /// + /// This P-Value transform calculates the p-value of the current input in the sequence with regard to the values in the sliding window. + /// + public sealed partial class PValueTransform : Microsoft.ML.Runtime.EntryPoints.CommonInputs.ITransformInput, Microsoft.ML.Legacy.ILearningPipelineItem + { + + + /// + /// The name of the source column + /// + public string Source { get; set; } + + /// + /// The name of the new column + /// + public string Name { get; set; } + + /// + /// The seed value of the random generator + /// + public int Seed { get; set; } + + /// + /// The flag that determines whether the p-values are calculated on the positive side + /// + public bool PositiveSide { get; set; } = true; + + /// + /// The size of the sliding window for computing the p-value + /// + public int WindowSize { get; set; } = 1; + + /// + /// The size of the initial window for computing the p-value. The default value is set to 0, which means there is no initial window considered. + /// + public int InitialWindowSize { get; set; } + + /// + /// Input dataset + /// + public Var Data { get; set; } = new Var(); + + + public sealed class Output : Microsoft.ML.Runtime.EntryPoints.CommonOutputs.ITransformOutput + { + /// + /// Transformed dataset + /// + public Var OutputData { get; set; } = new Var(); + + /// + /// Transform model + /// + public Var Model { get; set; } = new Var(); + + } + public Var GetInputData() => Data; + + public ILearningPipelineStep ApplyStep(ILearningPipelineStep previousStep, Experiment experiment) + { + if (previousStep != null) + { + if (!(previousStep is ILearningPipelineDataStep dataStep)) + { + throw new InvalidOperationException($"{ nameof(PValueTransform)} only supports an { nameof(ILearningPipelineDataStep)} as an input."); + } + + Data = dataStep.Data; + } + Output output = experiment.Add(this); + return new PValueTransformPipelineStep(output); + } + + private class PValueTransformPipelineStep : ILearningPipelineDataStep + { + public PValueTransformPipelineStep(Output output) + { + Data = output.OutputData; + Model = output.Model; + } + + public Var Data { get; } + public Var Model { get; } + } + } + } + + namespace Legacy.TimeSeriesProcessing + { + public enum SlidingWindowTransformBaseSingleBeginOptions : byte + { + NaNValues = 0, + FirstValue = 1 + } + + + /// + /// Returns the last values for a time series [y(t-d-l+1), y(t-d-l+2), ..., y(t-l-1), y(t-l)] where d is the size of the window, l the lag and y is a Float. + /// + public sealed partial class SlidingWindowTransform : Microsoft.ML.Runtime.EntryPoints.CommonInputs.ITransformInput, Microsoft.ML.Legacy.ILearningPipelineItem + { + + + /// + /// The name of the source column + /// + public string Source { get; set; } + + /// + /// The name of the new column + /// + public string Name { get; set; } + + /// + /// The size of the sliding window for computing the moving average + /// + public int WindowSize { get; set; } = 2; + + /// + /// Lag between current observation and last observation from the sliding window + /// + public int Lag { get; set; } = 1; + + /// + /// Define how to populate the first rows of the produced series + /// + public SlidingWindowTransformBaseSingleBeginOptions Begin { get; set; } = SlidingWindowTransformBaseSingleBeginOptions.NaNValues; + + /// + /// Input dataset + /// + public Var Data { get; set; } = new Var(); + + + public sealed class Output : Microsoft.ML.Runtime.EntryPoints.CommonOutputs.ITransformOutput + { + /// + /// Transformed dataset + /// + public Var OutputData { get; set; } = new Var(); + + /// + /// Transform model + /// + public Var Model { get; set; } = new Var(); + + } + public Var GetInputData() => Data; + + public ILearningPipelineStep ApplyStep(ILearningPipelineStep previousStep, Experiment experiment) + { + if (previousStep != null) + { + if (!(previousStep is ILearningPipelineDataStep dataStep)) + { + throw new InvalidOperationException($"{ nameof(SlidingWindowTransform)} only supports an { nameof(ILearningPipelineDataStep)} as an input."); + } + + Data = dataStep.Data; + } + Output output = experiment.Add(this); + return new SlidingWindowTransformPipelineStep(output); + } + + private class SlidingWindowTransformPipelineStep : ILearningPipelineDataStep + { + public SlidingWindowTransformPipelineStep(Output output) + { + Data = output.OutputData; + Model = output.Model; + } + + public Var Data { get; } + public Var Model { get; } + } + } + } + + namespace Legacy.TimeSeriesProcessing + { + public enum ErrorFunctionUtilsErrorFunction : byte + { + SignedDifference = 0, + AbsoluteDifference = 1, + SignedProportion = 2, + AbsoluteProportion = 3, + SquaredDifference = 4 + } + + public enum SequentialAnomalyDetectionTransformBaseSingleSsaAnomalyDetectionBaseStateMartingaleType : byte + { + None = 0, + Power = 1, + Mixture = 2 + } + + + /// + /// This transform detects the change-points in a seasonal time-series using Singular Spectrum Analysis (SSA). + /// + public sealed partial class SsaChangePointDetector : Microsoft.ML.Runtime.EntryPoints.CommonInputs.ITransformInput, Microsoft.ML.Legacy.ILearningPipelineItem + { + + + /// + /// The name of the source column. + /// + public string Source { get; set; } + + /// + /// The name of the new column. + /// + public string Name { get; set; } + + /// + /// The change history length. + /// + public int ChangeHistoryLength { get; set; } = 20; + + /// + /// The number of points from the beginning of the sequence used for training. + /// + public int TrainingWindowSize { get; set; } = 100; + + /// + /// The confidence for change point detection in the range [0, 100]. + /// + public double Confidence { get; set; } = 95d; + + /// + /// An upper bound on the largest relevant seasonality in the input time-series. + /// + public int SeasonalWindowSize { get; set; } = 10; + + /// + /// The function used to compute the error between the expected and the observed value. + /// + public ErrorFunctionUtilsErrorFunction ErrorFunction { get; set; } = ErrorFunctionUtilsErrorFunction.SignedDifference; + + /// + /// The martingale used for scoring. + /// + public SequentialAnomalyDetectionTransformBaseSingleSsaAnomalyDetectionBaseStateMartingaleType Martingale { get; set; } = SequentialAnomalyDetectionTransformBaseSingleSsaAnomalyDetectionBaseStateMartingaleType.Power; + + /// + /// The epsilon parameter for the Power martingale. + /// + public double PowerMartingaleEpsilon { get; set; } = 0.1d; + + /// + /// Input dataset + /// + public Var Data { get; set; } = new Var(); + + + public sealed class Output : Microsoft.ML.Runtime.EntryPoints.CommonOutputs.ITransformOutput + { + /// + /// Transformed dataset + /// + public Var OutputData { get; set; } = new Var(); + + /// + /// Transform model + /// + public Var Model { get; set; } = new Var(); + + } + public Var GetInputData() => Data; + + public ILearningPipelineStep ApplyStep(ILearningPipelineStep previousStep, Experiment experiment) + { + if (previousStep != null) + { + if (!(previousStep is ILearningPipelineDataStep dataStep)) + { + throw new InvalidOperationException($"{ nameof(SsaChangePointDetector)} only supports an { nameof(ILearningPipelineDataStep)} as an input."); + } + + Data = dataStep.Data; + } + Output output = experiment.Add(this); + return new SsaChangePointDetectorPipelineStep(output); + } + + private class SsaChangePointDetectorPipelineStep : ILearningPipelineDataStep + { + public SsaChangePointDetectorPipelineStep(Output output) + { + Data = output.OutputData; + Model = output.Model; + } + + public Var Data { get; } + public Var Model { get; } + } + } + } + + namespace Legacy.TimeSeriesProcessing + { + public enum SequentialAnomalyDetectionTransformBaseSingleSsaAnomalyDetectionBaseStateAnomalySide : byte + { + Positive = 0, + Negative = 1, + TwoSided = 2 + } + + + /// + /// This transform detects the spikes in a seasonal time-series using Singular Spectrum Analysis (SSA). + /// + public sealed partial class SsaSpikeDetector : Microsoft.ML.Runtime.EntryPoints.CommonInputs.ITransformInput, Microsoft.ML.Legacy.ILearningPipelineItem + { + + + /// + /// The name of the source column. + /// + public string Source { get; set; } + + /// + /// The name of the new column. + /// + public string Name { get; set; } + + /// + /// The argument that determines whether to detect positive or negative anomalies, or both. + /// + public SequentialAnomalyDetectionTransformBaseSingleSsaAnomalyDetectionBaseStateAnomalySide Side { get; set; } = SequentialAnomalyDetectionTransformBaseSingleSsaAnomalyDetectionBaseStateAnomalySide.TwoSided; + + /// + /// The size of the sliding window for computing the p-value. + /// + public int PvalueHistoryLength { get; set; } = 100; + + /// + /// The number of points from the beginning of the sequence used for training. + /// + public int TrainingWindowSize { get; set; } = 100; + + /// + /// The confidence for spike detection in the range [0, 100]. + /// + public double Confidence { get; set; } = 99d; + + /// + /// An upper bound on the largest relevant seasonality in the input time-series. + /// + public int SeasonalWindowSize { get; set; } = 10; + + /// + /// The function used to compute the error between the expected and the observed value. + /// + public ErrorFunctionUtilsErrorFunction ErrorFunction { get; set; } = ErrorFunctionUtilsErrorFunction.SignedDifference; + + /// + /// Input dataset + /// + public Var Data { get; set; } = new Var(); + + + public sealed class Output : Microsoft.ML.Runtime.EntryPoints.CommonOutputs.ITransformOutput + { + /// + /// Transformed dataset + /// + public Var OutputData { get; set; } = new Var(); + + /// + /// Transform model + /// + public Var Model { get; set; } = new Var(); + + } + public Var GetInputData() => Data; + + public ILearningPipelineStep ApplyStep(ILearningPipelineStep previousStep, Experiment experiment) + { + if (previousStep != null) + { + if (!(previousStep is ILearningPipelineDataStep dataStep)) + { + throw new InvalidOperationException($"{ nameof(SsaSpikeDetector)} only supports an { nameof(ILearningPipelineDataStep)} as an input."); + } + + Data = dataStep.Data; + } + Output output = experiment.Add(this); + return new SsaSpikeDetectorPipelineStep(output); + } + + private class SsaSpikeDetectorPipelineStep : ILearningPipelineDataStep + { + public SsaSpikeDetectorPipelineStep(Output output) + { + Data = output.OutputData; + Model = output.Model; + } + + public Var Data { get; } + public Var Model { get; } + } + } + } + namespace Legacy.Trainers { diff --git a/src/Microsoft.ML.TimeSeries/AdaptiveSingularSpectrumSequenceModeler.cs b/src/Microsoft.ML.TimeSeries/AdaptiveSingularSpectrumSequenceModeler.cs new file mode 100644 index 0000000000..7f0fe543f6 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/AdaptiveSingularSpectrumSequenceModeler.cs @@ -0,0 +1,1535 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Numerics; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Internal.CpuMath; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(typeof(ISequenceModeler), typeof(AdaptiveSingularSpectrumSequenceModeler), null, typeof(SignatureLoadModel), + "SSA Sequence Modeler", + AdaptiveSingularSpectrumSequenceModeler.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// This class implements basic Singular Spectrum Analysis (SSA) model for modeling univariate time-series. + /// For the details of the model, refer to http://arxiv.org/pdf/1206.6910.pdf. + /// + public sealed class AdaptiveSingularSpectrumSequenceModeler : ISequenceModeler + { + public const string LoaderSignature = "SSAModel"; + + public enum RankSelectionMethod + { + Fixed, + Exact, + Fast + } + + public sealed class SsaForecastResult : ForecastResultBase + { + public VBuffer ForecastStandardDeviation; + public VBuffer UpperBound; + public VBuffer LowerBound; + public Single ConfidenceLevel; + + internal bool CanComputeForecastIntervals; + internal Single BoundOffset; + + public bool IsVarianceValid { get { return CanComputeForecastIntervals; } } + } + + public struct GrowthRatio + { + private int _timeSpan; + private Double _growth; + + public int TimeSpan + { + get + { + return _timeSpan; + } + set + { + Contracts.CheckParam(value > 0, nameof(TimeSpan), "The time span must be strictly positive."); + _timeSpan = value; + } + } + + public Double Growth + { + get + { + return _growth; + } + set + { + Contracts.CheckParam(value >= 0, nameof(Growth), "The growth must be non-negative."); + _growth = value; + } + } + + public GrowthRatio(int timeSpan = 1, double growth = Double.PositiveInfinity) + { + Contracts.CheckParam(timeSpan > 0, nameof(TimeSpan), "The time span must be strictly positive."); + Contracts.CheckParam(growth >= 0, nameof(Growth), "The growth must be non-negative."); + + _growth = growth; + _timeSpan = timeSpan; + } + + public Double Ratio { get { return Math.Pow(_growth, 1d / _timeSpan); } } + } + + public sealed class ModelInfo + { + /// + /// The singular values of the SSA of the input time-series + /// + public Single[] Spectrum; + + /// + /// The roots of the characteristic polynomial after stabilization (meaningful only if the model is stabilized.) + /// + public Complex[] RootsAfterStabilization; + + /// + /// The roots of the characteristic polynomial before stabilization (meaningful only if the model is stabilized.) + /// + public Complex[] RootsBeforeStabilization; + + /// + /// The rank of the model + /// + public int Rank; + + /// + /// The window size used to compute the SSA model + /// + public int WindowSize; + + /// + /// The auto-regressive coefficients learned by the model + /// + public Single[] AutoRegressiveCoefficients; + + /// + /// The flag indicating whether the model has been trained + /// + public bool IsTrained; + + /// + /// The flag indicating a naive model is trained instead of SSA + /// + public bool IsNaiveModelTrained; + + /// + /// The flag indicating whether the learned model has an exponential trend (meaningful only if the model is stabilized.) + /// + public bool IsExponentialTrendPresent; + + /// + /// The flag indicating whether the learned model has a polynomial trend (meaningful only if the model is stabilized.) + /// + public bool IsPolynomialTrendPresent; + + /// + /// The flag indicating whether the learned model has been stabilized + /// + public bool IsStabilized; + + /// + /// The flag indicating whether any artificial seasonality (a seasonality with period greater than the window size) is removed + /// (meaningful only if the model is stabilized.) + /// + public bool IsArtificialSeasonalityRemoved; + + /// + /// The exponential trend magnitude (meaningful only if the model is stabilized.) + /// + public Double ExponentialTrendFactor; + } + + private ModelInfo _info; + + /// + /// Returns the meta information about the learned model. + /// + public ModelInfo Info + { + get { return _info; } + } + + private Single[] _alpha; + private Single[] _state; + private readonly FixedSizeQueue _buffer; + private CpuAlignedVector _x; + private CpuAlignedVector _xSmooth; + private int _windowSize; + private readonly int _seriesLength; + private readonly RankSelectionMethod _rankSelectionMethod; + private readonly Single _discountFactor; + private readonly int _trainSize; + private int _maxRank; + private readonly Double _maxTrendRatio; + private readonly bool _shouldStablize; + private readonly bool _shouldMaintainInfo; + + private readonly IHost _host; + + private CpuAlignedMatrixRow _wTrans; + private Single _observationNoiseVariance; + private Single _observationNoiseMean; + private Single _autoregressionNoiseVariance; + private Single _autoregressionNoiseMean; + + private int _rank; + private CpuAlignedVector _y; + private Single _nextPrediction; + + /// + /// Determines whether the confidence interval required for forecasting. + /// + public bool ShouldComputeForecastIntervals { get; set; } + + /// + /// Returns the rank of the subspace used for SSA projection (parameter r). + /// + public int Rank { get { return _rank; } } + + /// + /// Returns the smoothed (via SSA projection) version of the last series observation fed to the model. + /// + public Single LastSmoothedValue { get { return _state[_windowSize - 2]; } } + + /// + /// Returns the last series observation fed to the model. + /// + public Single LastValue { get { return _buffer.Count > 0 ? _buffer[_buffer.Count - 1] : Single.NaN; } } + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo( + modelSignature: "SSAMODLR", + verWrittenCur: 0x00010001, // Initial + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(AdaptiveSingularSpectrumSequenceModeler).Assembly.FullName); + } + + /// + /// The constructor for Adaptive SSA model. + /// + /// The exception context. + /// The length of series from the begining used for training. + /// The length of series that is kept in buffer for modeling (parameter N). + /// The length of the window on the series for building the trajectory matrix (parameter L). + /// The discount factor in [0,1] used for online updates (default = 1). + /// The buffer used to keep the series in the memory. If null, an internal buffer is created (default = null). + /// The rank selection method (default = Exact). + /// The desired rank of the subspace used for SSA projection (parameter r). This parameter should be in the range in [1, windowSize]. + /// If set to null, the rank is automatically determined based on prediction error minimization. (default = null) + /// The maximum rank considered during the rank selection process. If not provided (i.e. set to null), it is set to windowSize - 1. + /// The flag determining whether the confidence bounds for the point forecasts should be computed. (default = true) + /// The flag determining whether the model should be stabilized. + /// The flag determining whether the meta information for the model needs to be maintained. + /// The maximum growth on the exponential trend + public AdaptiveSingularSpectrumSequenceModeler(IHostEnvironment env, int trainSize, int seriesLength, int windowSize, Single discountFactor = 1, + FixedSizeQueue buffer = null, RankSelectionMethod rankSelectionMethod = RankSelectionMethod.Exact, int? rank = null, int? maxRank = null, + bool shouldComputeForecastIntervals = true, bool shouldstablize = true, bool shouldMaintainInfo = false, GrowthRatio? maxGrowth = null) + { + Contracts.CheckValue(env, nameof(env)); + _host = env.Register(LoaderSignature); + _host.CheckParam(windowSize >= 2, nameof(windowSize), "The window size should be at least 2."); // ...because otherwise we have nothing to autoregress on + _host.CheckParam(seriesLength > windowSize, nameof(seriesLength), "The series length should be greater than the window size."); + _host.Check(trainSize > 2 * windowSize, "The input series length for training should be greater than twice the window size."); + _host.CheckParam(0 <= discountFactor && discountFactor <= 1, nameof(discountFactor), "The discount factor should be in [0,1]."); + + if (maxRank != null) + { + _maxRank = (int)maxRank; + _host.CheckParam(1 <= _maxRank && _maxRank < windowSize, nameof(maxRank), + "The max rank should be in [1, windowSize)."); + } + else + _maxRank = windowSize - 1; + + _rankSelectionMethod = rankSelectionMethod; + if (_rankSelectionMethod == RankSelectionMethod.Fixed) + { + if (rank != null) + { + _rank = (int)rank; + _host.CheckParam(1 <= _rank && _rank < windowSize, nameof(rank), "The rank should be in [1, windowSize)."); + } + else + _rank = _maxRank; + } + + _seriesLength = seriesLength; + _windowSize = windowSize; + _trainSize = trainSize; + _discountFactor = discountFactor; + + if (buffer == null) + _buffer = new FixedSizeQueue(seriesLength); + else + _buffer = buffer; + + _alpha = new Single[windowSize - 1]; + _state = new Single[windowSize - 1]; + _x = new CpuAlignedVector(windowSize, SseUtils.CbAlign); + _xSmooth = new CpuAlignedVector(windowSize, SseUtils.CbAlign); + ShouldComputeForecastIntervals = shouldComputeForecastIntervals; + + _observationNoiseVariance = 0; + _autoregressionNoiseVariance = 0; + _observationNoiseMean = 0; + _autoregressionNoiseMean = 0; + _shouldStablize = shouldstablize; + _maxTrendRatio = maxGrowth == null ? Double.PositiveInfinity : ((GrowthRatio)maxGrowth).Ratio; + + _shouldMaintainInfo = shouldMaintainInfo; + if (_shouldMaintainInfo) + { + _info = new ModelInfo(); + _info.WindowSize = _windowSize; + } + } + + /// + /// The copy constructor + /// + /// An object whose contents are copied to the current object. + private AdaptiveSingularSpectrumSequenceModeler(AdaptiveSingularSpectrumSequenceModeler model) + { + _host = model._host.Register(LoaderSignature); + _host.Assert(model._windowSize >= 2); + _host.Assert(model._seriesLength > model._windowSize); + _host.Assert(model._trainSize > 2 * model._windowSize); + _host.Assert(0 <= model._discountFactor && model._discountFactor <= 1); + _host.Assert(1 <= model._rank && model._rank < model._windowSize); + + _rank = model._rank; + _maxRank = model._maxRank; + _rankSelectionMethod = model._rankSelectionMethod; + _seriesLength = model._seriesLength; + _windowSize = model._windowSize; + _trainSize = model._trainSize; + _discountFactor = model._discountFactor; + ShouldComputeForecastIntervals = model.ShouldComputeForecastIntervals; + _observationNoiseVariance = model._observationNoiseVariance; + _autoregressionNoiseVariance = model._autoregressionNoiseVariance; + _observationNoiseMean = model._observationNoiseMean; + _autoregressionNoiseMean = model._autoregressionNoiseMean; + _maxTrendRatio = model._maxTrendRatio; + _shouldStablize = model._shouldStablize; + _shouldMaintainInfo = model._shouldMaintainInfo; + _info = model._info; + _buffer = new FixedSizeQueue(_seriesLength); + _alpha = new Single[_windowSize - 1]; + Array.Copy(model._alpha, _alpha, _windowSize - 1); + _state = new Single[_windowSize - 1]; + Array.Copy(model._state, _state, _windowSize - 1); + + _x = new CpuAlignedVector(_windowSize, SseUtils.CbAlign); + _xSmooth = new CpuAlignedVector(_windowSize, SseUtils.CbAlign); + + if (model._wTrans != null) + { + _y = new CpuAlignedVector(_rank, SseUtils.CbAlign); + _wTrans = new CpuAlignedMatrixRow(_rank, _windowSize, SseUtils.CbAlign); + _wTrans.CopyFrom(model._wTrans); + } + } + + public AdaptiveSingularSpectrumSequenceModeler(IHostEnvironment env, ModelLoadContext ctx) + { + Contracts.CheckValue(env, nameof(env)); + _host = env.Register(LoaderSignature); + + // *** Binary format *** + // int: _seriesLength + // int: _windowSize + // int: _trainSize + // int: _rank + // float: _discountFactor + // RankSelectionMethod: _rankSelectionMethod + // bool: isWeightSet + // float[]: _alpha + // bool: ShouldComputeForecastIntervals + // float: _observationNoiseVariance + // float: _autoregressionNoiseVariance + // float: _observationNoiseMean + // float: _autoregressionNoiseMean + // int: _maxRank + // bool: _shouldStablize + // bool: _shouldMaintainInfo + // double: _maxTrendRatio + // float[]: _wTrans (only if _isWeightSet == true) + + _seriesLength = ctx.Reader.ReadInt32(); + // Do an early check. We'll have the stricter check later. + _host.CheckDecode(_seriesLength > 2); + + _windowSize = ctx.Reader.ReadInt32(); + _host.CheckDecode(_windowSize >= 2); + _host.CheckDecode(_seriesLength > _windowSize); + + _trainSize = ctx.Reader.ReadInt32(); + _host.CheckDecode(_trainSize > 2 * _windowSize); + + _rank = ctx.Reader.ReadInt32(); + _host.CheckDecode(1 <= _rank && _rank < _windowSize); + + _discountFactor = ctx.Reader.ReadSingle(); + _host.CheckDecode(0 <= _discountFactor && _discountFactor <= 1); + + byte temp; + temp = ctx.Reader.ReadByte(); + _rankSelectionMethod = (RankSelectionMethod)temp; + bool isWeightSet = ctx.Reader.ReadBoolByte(); + + _alpha = ctx.Reader.ReadFloatArray(); + _host.CheckDecode(Utils.Size(_alpha) == _windowSize - 1); + + ShouldComputeForecastIntervals = ctx.Reader.ReadBoolByte(); + + _observationNoiseVariance = ctx.Reader.ReadSingle(); + _host.CheckDecode(_observationNoiseVariance >= 0); + + _autoregressionNoiseVariance = ctx.Reader.ReadSingle(); + _host.CheckDecode(_autoregressionNoiseVariance >= 0); + + _observationNoiseMean = ctx.Reader.ReadSingle(); + _autoregressionNoiseMean = ctx.Reader.ReadSingle(); + + _maxRank = ctx.Reader.ReadInt32(); + _host.CheckDecode(1 <= _maxRank && _maxRank <= _windowSize - 1); + + _shouldStablize = ctx.Reader.ReadBoolByte(); + _shouldMaintainInfo = ctx.Reader.ReadBoolByte(); + if (_shouldMaintainInfo) + { + _info = new ModelInfo(); + _info.AutoRegressiveCoefficients = new Single[_windowSize - 1]; + Array.Copy(_alpha, _info.AutoRegressiveCoefficients, _windowSize - 1); + + _info.IsStabilized = _shouldStablize; + _info.Rank = _rank; + _info.WindowSize = _windowSize; + } + + _maxTrendRatio = ctx.Reader.ReadDouble(); + _host.CheckDecode(_maxTrendRatio >= 0); + + if (isWeightSet) + { + var tempArray = ctx.Reader.ReadFloatArray(); + _host.CheckDecode(Utils.Size(tempArray) == _rank * _windowSize); + _wTrans = new CpuAlignedMatrixRow(_rank, _windowSize, SseUtils.CbAlign); + int i = 0; + _wTrans.CopyFrom(tempArray, ref i); + } + + _buffer = new FixedSizeQueue(_seriesLength); + _state = new Single[_windowSize - 1]; + _x = new CpuAlignedVector(_windowSize, SseUtils.CbAlign); + _xSmooth = new CpuAlignedVector(_windowSize, SseUtils.CbAlign); + } + + public void Save(ModelSaveContext ctx) + { + _host.CheckValue(ctx, nameof(ctx)); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + _host.Assert(_windowSize >= 2); + _host.Assert(_seriesLength > _windowSize); + _host.Assert(_trainSize > 2 * _windowSize); + _host.Assert(0 <= _discountFactor && _discountFactor <= 1); + _host.Assert(1 <= _rank && _rank < _windowSize); + _host.Assert(Utils.Size(_alpha) == _windowSize - 1); + _host.Assert(_observationNoiseVariance >= 0); + _host.Assert(_autoregressionNoiseVariance >= 0); + _host.Assert(1 <= _maxRank && _maxRank <= _windowSize - 1); + _host.Assert(_maxTrendRatio >= 0); + + // *** Binary format *** + // int: _seriesLength + // int: _windowSize + // int: _trainSize + // int: _rank + // float: _discountFactor + // RankSelectionMethod: _rankSelectionMethod + // bool: _isWeightSet + // float[]: _alpha + // bool: ShouldComputeForecastIntervals + // float: _observationNoiseVariance + // float: _autoregressionNoiseVariance + // float: _observationNoiseMean + // float: _autoregressionNoiseMean + // int: _maxRank + // bool: _shouldStablize + // bool: _shouldMaintainInfo + // double: _maxTrendRatio + // float[]: _wTrans (only if _isWeightSet == true) + + ctx.Writer.Write(_seriesLength); + ctx.Writer.Write(_windowSize); + ctx.Writer.Write(_trainSize); + ctx.Writer.Write(_rank); + ctx.Writer.Write(_discountFactor); + ctx.Writer.Write((byte)_rankSelectionMethod); + ctx.Writer.WriteBoolByte(_wTrans != null); + ctx.Writer.WriteFloatArray(_alpha); + ctx.Writer.WriteBoolByte(ShouldComputeForecastIntervals); + ctx.Writer.Write(_observationNoiseVariance); + ctx.Writer.Write(_autoregressionNoiseVariance); + ctx.Writer.Write(_observationNoiseMean); + ctx.Writer.Write(_autoregressionNoiseMean); + ctx.Writer.Write(_maxRank); + ctx.Writer.WriteBoolByte(_shouldStablize); + ctx.Writer.WriteBoolByte(_shouldMaintainInfo); + ctx.Writer.Write(_maxTrendRatio); + + if (_wTrans != null) + { + // REVIEW: this may not be the most efficient way for serializing an aligned matrix. + var tempArray = new Single[_rank * _windowSize]; + int iv = 0; + _wTrans.CopyTo(tempArray, ref iv); + ctx.Writer.WriteFloatArray(tempArray); + } + } + + private static void ReconstructSignal(TrajectoryMatrix tMat, Single[] singularVectors, int rank, Single[] output) + { + Contracts.Assert(tMat != null); + Contracts.Assert(1 <= rank && rank <= tMat.WindowSize); + Contracts.Assert(Utils.Size(singularVectors) >= tMat.WindowSize * rank); + Contracts.Assert(Utils.Size(output) >= tMat.SeriesLength); + + var k = tMat.SeriesLength - tMat.WindowSize + 1; + Contracts.Assert(k > 0); + + var v = new Single[k]; + int i; + + for (i = 0; i < tMat.SeriesLength; ++i) + output[i] = 0; + + for (i = 0; i < rank; ++i) + { + // Reconstructing the i-th eigen triple component and adding it to output + tMat.MultiplyTranspose(singularVectors, v, false, tMat.WindowSize * i, 0); + tMat.RankOneHankelization(singularVectors, v, 1, output, true, tMat.WindowSize * i, 0, 0); + } + } + + private static void ReconstructSignalTailFast(Single[] series, TrajectoryMatrix tMat, Single[] singularVectors, int rank, Single[] output) + { + Contracts.Assert(tMat != null); + Contracts.Assert(1 <= rank && rank <= tMat.WindowSize); + Contracts.Assert(Utils.Size(singularVectors) >= tMat.WindowSize * rank); + + int len = 2 * tMat.WindowSize - 1; + Contracts.Assert(Utils.Size(output) >= len); + + Single v; + /*var k = tMat.SeriesLength - tMat.WindowSize + 1; + Contracts.Assert(k > 0); + var v = new Single[k];*/ + + Single temp; + int i; + int j; + int offset1 = tMat.SeriesLength - 2 * tMat.WindowSize + 1; + int offset2 = tMat.SeriesLength - tMat.WindowSize; + + for (i = 0; i < len; ++i) + output[i] = 0; + + for (i = 0; i < rank; ++i) + { + // Reconstructing the i-th eigen triple component and adding it to output + v = 0; + for (j = offset1; j < offset1 + tMat.WindowSize; ++j) + v += series[j] * singularVectors[tMat.WindowSize * i - offset1 + j]; + + for (j = 0; j < tMat.WindowSize - 1; ++j) + output[j] += v * singularVectors[tMat.WindowSize * i + j]; + + temp = v * singularVectors[tMat.WindowSize * (i + 1) - 1]; + + v = 0; + for (j = offset2; j < offset2 + tMat.WindowSize; ++j) + v += series[j] * singularVectors[tMat.WindowSize * i - offset2 + j]; + + for (j = tMat.WindowSize; j < 2 * tMat.WindowSize - 1; ++j) + output[j] += v * singularVectors[tMat.WindowSize * (i - 1) + j + 1]; + + temp += v * singularVectors[tMat.WindowSize * i]; + output[tMat.WindowSize - 1] += (temp / 2); + } + } + + private static void ComputeNoiseMoments(Single[] series, Single[] signal, Single[] alpha, out Single observationNoiseVariance, out Single autoregressionNoiseVariance, + out Single observationNoiseMean, out Single autoregressionNoiseMean, int startIndex = 0) + { + Contracts.Assert(Utils.Size(alpha) > 0); + Contracts.Assert(Utils.Size(signal) > 2 * Utils.Size(alpha)); // To assure that the autoregression noise variance is unbiased. + Contracts.Assert(Utils.Size(series) >= Utils.Size(signal) + startIndex); + + var signalLength = Utils.Size(signal); + var windowSize = Utils.Size(alpha) + 1; + var k = signalLength - windowSize + 1; + Contracts.Assert(k > 0); + + var y = new Single[k]; + int i; + + observationNoiseMean = 0; + observationNoiseVariance = 0; + autoregressionNoiseMean = 0; + autoregressionNoiseVariance = 0; + + // Computing the observation noise moments + for (i = 0; i < signalLength; ++i) + observationNoiseMean += (series[i + startIndex] - signal[i]); + observationNoiseMean /= signalLength; + + for (i = 0; i < signalLength; ++i) + observationNoiseVariance += (series[i + startIndex] - signal[i]) * (series[i + startIndex] - signal[i]); + observationNoiseVariance /= signalLength; + observationNoiseVariance -= (observationNoiseMean * observationNoiseMean); + + // Computing the auto-regression noise moments + TrajectoryMatrix xTM = new TrajectoryMatrix(null, signal, windowSize - 1, signalLength - 1); + xTM.MultiplyTranspose(alpha, y); + + for (i = 0; i < k; ++i) + autoregressionNoiseMean += (signal[windowSize - 1 + i] - y[i]); + autoregressionNoiseMean /= k; + + for (i = 0; i < k; ++i) + { + autoregressionNoiseVariance += (signal[windowSize - 1 + i] - y[i] - autoregressionNoiseMean) * + (signal[windowSize - 1 + i] - y[i] - autoregressionNoiseMean); + } + + autoregressionNoiseVariance /= (k - windowSize + 1); + Contracts.Assert(autoregressionNoiseVariance >= 0); + } + + private static int DetermineSignalRank(Single[] series, TrajectoryMatrix tMat, Single[] singularVectors, Single[] singularValues, + Single[] outputSignal, int maxRank) + { + Contracts.Assert(tMat != null); + Contracts.Assert(Utils.Size(series) >= tMat.SeriesLength); + Contracts.Assert(Utils.Size(outputSignal) >= tMat.SeriesLength); + Contracts.Assert(Utils.Size(singularVectors) >= tMat.WindowSize * tMat.WindowSize); + Contracts.Assert(Utils.Size(singularValues) >= tMat.WindowSize); + Contracts.Assert(1 <= maxRank && maxRank <= tMat.WindowSize - 1); + + var inputSeriesLength = tMat.SeriesLength; + var k = inputSeriesLength - tMat.WindowSize + 1; + Contracts.Assert(k > 0); + + var x = new Single[inputSeriesLength]; + var y = new Single[k]; + var alpha = new Single[tMat.WindowSize - 1]; + var v = new Single[k]; + + Single nu = 0; + Double minErr = Double.MaxValue; + int minIndex = maxRank - 1; + int evaluationLength = Math.Min(Math.Max(tMat.WindowSize, 200), k); + + TrajectoryMatrix xTM = new TrajectoryMatrix(null, x, tMat.WindowSize - 1, inputSeriesLength - 1); + + int i; + int j; + int n; + Single temp; + Double error; + Double sumSingularVals = 0; + Single lambda; + Single observationNoiseMean; + + FixedSizeQueue window = new FixedSizeQueue(tMat.WindowSize - 1); + + for (i = 0; i < tMat.WindowSize; ++i) + sumSingularVals += singularValues[i]; + + for (i = 0; i < maxRank; ++i) + { + // Updating the auto-regressive coefficients + lambda = singularVectors[tMat.WindowSize * i + tMat.WindowSize - 1]; + for (j = 0; j < tMat.WindowSize - 1; ++j) + alpha[j] += lambda * singularVectors[tMat.WindowSize * i + j]; + + // Updating nu + nu += lambda * lambda; + + // Reconstructing the i-th eigen triple component and adding it to x + tMat.MultiplyTranspose(singularVectors, v, false, tMat.WindowSize * i, 0); + tMat.RankOneHankelization(singularVectors, v, 1, x, true, tMat.WindowSize * i, 0, 0); + + observationNoiseMean = 0; + for (j = 0; j < inputSeriesLength; ++j) + observationNoiseMean += (series[j] - x[j]); + observationNoiseMean /= inputSeriesLength; + + for (j = inputSeriesLength - evaluationLength - tMat.WindowSize + 1; j < inputSeriesLength - evaluationLength; ++j) + window.AddLast(x[j]); + + error = 0; + for (j = inputSeriesLength - evaluationLength; j < inputSeriesLength; ++j) + { + temp = 0; + for (n = 0; n < tMat.WindowSize - 1; ++n) + temp += alpha[n] * window[n]; + + temp /= (1 - nu); + temp += observationNoiseMean; + window.AddLast(temp); + error += Math.Abs(series[j] - temp); + if (error > minErr) + break; + } + + if (error < minErr) + { + minErr = error; + minIndex = i; + Array.Copy(x, outputSignal, inputSeriesLength); + } + } + + return minIndex + 1; + } + + public void InitState() + { + for (int i = 0; i < _windowSize - 2; ++i) + _state[i] = 0; + + _buffer.Clear(); + } + + private static int DetermineSignalRankFast(Single[] series, TrajectoryMatrix tMat, Single[] singularVectors, Single[] singularValues, int maxRank) + { + Contracts.Assert(tMat != null); + Contracts.Assert(Utils.Size(series) >= tMat.SeriesLength); + Contracts.Assert(Utils.Size(singularVectors) >= tMat.WindowSize * tMat.WindowSize); + Contracts.Assert(Utils.Size(singularValues) >= tMat.WindowSize); + Contracts.Assert(1 <= maxRank && maxRank <= tMat.WindowSize - 1); + + var inputSeriesLength = tMat.SeriesLength; + var k = inputSeriesLength - tMat.WindowSize + 1; + Contracts.Assert(k > 0); + + var x = new Single[tMat.WindowSize - 1]; + var alpha = new Single[tMat.WindowSize - 1]; + Single v; + + Single nu = 0; + Double minErr = Double.MaxValue; + int minIndex = maxRank - 1; + int evaluationLength = Math.Min(Math.Max(tMat.WindowSize, 200), k); + + int i; + int j; + int n; + int offset; + Single temp; + Double error; + Single lambda; + Single observationNoiseMean; + + FixedSizeQueue window = new FixedSizeQueue(tMat.WindowSize - 1); + + for (i = 0; i < maxRank; ++i) + { + // Updating the auto-regressive coefficients + lambda = singularVectors[tMat.WindowSize * i + tMat.WindowSize - 1]; + for (j = 0; j < tMat.WindowSize - 1; ++j) + alpha[j] += lambda * singularVectors[tMat.WindowSize * i + j]; + + // Updating nu + nu += lambda * lambda; + + // Reconstructing the i-th eigen triple component and adding it to x + v = 0; + offset = inputSeriesLength - evaluationLength - tMat.WindowSize + 1; + + for (j = offset; j <= inputSeriesLength - evaluationLength; ++j) + v += series[j] * singularVectors[tMat.WindowSize * i - offset + j]; + + for (j = 0; j < tMat.WindowSize - 1; ++j) + x[j] += v * singularVectors[tMat.WindowSize * i + j]; + + // Computing the empirical observation noise mean + observationNoiseMean = 0; + for (j = offset; j < inputSeriesLength - evaluationLength; ++j) + observationNoiseMean += (series[j] - x[j - offset]); + observationNoiseMean /= (tMat.WindowSize - 1); + + for (j = 0; j < tMat.WindowSize - 1; ++j) + window.AddLast(x[j]); + + error = 0; + for (j = inputSeriesLength - evaluationLength; j < inputSeriesLength; ++j) + { + temp = 0; + for (n = 0; n < tMat.WindowSize - 1; ++n) + temp += alpha[n] * window[n]; + + temp /= (1 - nu); + temp += observationNoiseMean; + window.AddLast(temp); + error += Math.Abs(series[j] - temp); + if (error > minErr) + break; + } + + if (error < minErr) + { + minErr = error; + minIndex = i; + } + } + + return minIndex + 1; + } + + private class SignalComponent + { + public Double Phase; + public int Index; + public int Cluster; + + public SignalComponent(Double phase, int index) + { + Phase = phase; + Index = index; + } + } + + private bool Stabilize() + { + if (Utils.Size(_alpha) == 1) + { + if (_shouldMaintainInfo) + _info.RootsBeforeStabilization = new[] { new Complex(_alpha[0], 0) }; + + if (_alpha[0] > 1) + _alpha[0] = 1; + else if (_alpha[0] < -1) + _alpha[0] = -1; + + if (_shouldMaintainInfo) + { + _info.IsStabilized = true; + _info.RootsAfterStabilization = new[] { new Complex(_alpha[0], 0) }; + _info.IsExponentialTrendPresent = false; + _info.IsPolynomialTrendPresent = false; + _info.ExponentialTrendFactor = Math.Abs(_alpha[0]); + } + return true; + } + + var coeff = new Double[_windowSize - 1]; + Complex[] roots = null; + bool trendFound = false; + bool polynomialTrendFound = false; + Double maxTrendMagnitude = Double.NegativeInfinity; + Double maxNonTrendMagnitude = Double.NegativeInfinity; + Double eps = 1e-9; + Double highFrequenceyBoundry = Math.PI / 2; + var sortedComponents = new List(); + var trendComponents = new List(); + int i; + + // Computing the roots of the characteristic polynomial + for (i = 0; i < _windowSize - 1; ++i) + coeff[i] = -_alpha[i]; + + if (!PolynomialUtils.FindPolynomialRoots(coeff, ref roots)) + return false; + + if (_shouldMaintainInfo) + { + _info.RootsBeforeStabilization = new Complex[_windowSize - 1]; + Array.Copy(roots, _info.RootsBeforeStabilization, _windowSize - 1); + } + + // Detecting trend components + for (i = 0; i < _windowSize - 1; ++i) + { + if (roots[i].Magnitude > 1 && (Math.Abs(roots[i].Phase) <= eps || Math.Abs(Math.Abs(roots[i].Phase) - Math.PI) <= eps)) + trendComponents.Add(i); + } + + // Removing unobserved seasonalities and consequently introducing polynomial trend + for (i = 0; i < _windowSize - 1; ++i) + { + if (roots[i].Phase != 0) + { + if (roots[i].Magnitude >= 1 && 2 * Math.PI / Math.Abs(roots[i].Phase) > _windowSize) + { + /*if (roots[i].Real > 1) + { + polynomialTrendFound = true; + roots[i] = new Complex(Math.Max(1, roots[i].Magnitude), 0); + maxPolynomialTrendMagnitude = Math.Max(maxPolynomialTrendMagnitude, roots[i].Magnitude); + } + else + roots[i] = Complex.FromPolarCoordinates(1, 0); + //roots[i] = Complex.FromPolarCoordinates(0.99, roots[i].Phase);*/ + + /* if (_maxTrendRatio > 1) + { + roots[i] = new Complex(roots[i].Real, 0); + polynomialTrendFound = true; + } + else + roots[i] = roots[i].Imaginary > 0 ? new Complex(roots[i].Real, 0) : new Complex(1, 0);*/ + + roots[i] = new Complex(roots[i].Real, 0); + polynomialTrendFound = true; + + if (_shouldMaintainInfo) + _info.IsArtificialSeasonalityRemoved = true; + } + else if (roots[i].Magnitude > 1) + sortedComponents.Add(new SignalComponent(roots[i].Phase, i)); + } + } + + if (_maxTrendRatio > 1) + { + // Combining the close exponential-seasonal components + if (sortedComponents.Count > 1 && polynomialTrendFound) + { + sortedComponents.Sort((a, b) => a.Phase.CompareTo(b.Phase)); + var clusterNum = 0; + + for (i = 0; i < sortedComponents.Count - 1; ++i) + { + if ((sortedComponents[i].Phase < 0 && sortedComponents[i + 1].Phase < 0) || + (sortedComponents[i].Phase > 0 && sortedComponents[i + 1].Phase > 0)) + { + sortedComponents[i].Cluster = clusterNum; + if (Math.Abs(sortedComponents[i + 1].Phase - sortedComponents[i].Phase) > 0.05) + clusterNum++; + sortedComponents[i + 1].Cluster = clusterNum; + } + else + clusterNum++; + } + + int start = 0; + bool polynomialSeasonalityFound = false; + Double largestSeasonalityPhase = 0; + for (i = 1; i < sortedComponents.Count; ++i) + { + if (sortedComponents[i].Cluster != sortedComponents[i - 1].Cluster) + { + if (i - start > 1) // There are more than one point in the cluster + { + Double avgPhase = 0; + Double avgMagnitude = 0; + + for (var j = start; j < i; ++j) + { + avgPhase += sortedComponents[j].Phase; + avgMagnitude += roots[sortedComponents[j].Index].Magnitude; + } + avgPhase /= (i - start); + avgMagnitude /= (i - start); + + for (var j = start; j < i; ++j) + roots[sortedComponents[j].Index] = Complex.FromPolarCoordinates(avgMagnitude, + avgPhase); + + if (!polynomialSeasonalityFound && avgPhase > 0) + { + largestSeasonalityPhase = avgPhase; + polynomialSeasonalityFound = true; + } + } + + start = i; + } + } + } + + // Combining multiple exponential trends into polynomial ones + if (!polynomialTrendFound) + { + var ind1 = -1; + var ind2 = -1; + + foreach (var ind in trendComponents) + { + if (Math.Abs(roots[ind].Phase) <= eps) + { + ind1 = ind; + break; + } + } + + for (i = 0; i < _windowSize - 1; ++i) + { + if (Math.Abs(roots[i].Phase) <= eps && 0.9 <= roots[i].Magnitude && i != ind1) + { + ind2 = i; + break; + } + } + + if (ind1 >= 0 && ind2 >= 0 && ind1 != ind2) + { + roots[ind1] = Complex.FromPolarCoordinates(1, 0); + roots[ind2] = Complex.FromPolarCoordinates(1, 0); + polynomialTrendFound = true; + } + } + } + + if (polynomialTrendFound) // Suppress the exponential trend + { + maxTrendMagnitude = Math.Min(1, _maxTrendRatio); + foreach (var ind in trendComponents) + roots[ind] = Complex.FromPolarCoordinates(0.99, roots[ind].Phase); + } + else + { + // Spotting the exponential trend components and finding the max trend magnitude + for (i = 0; i < _windowSize - 1; ++i) + { + if (roots[i].Magnitude > 1 && Math.Abs(roots[i].Phase) <= eps) + { + trendFound = true; + maxTrendMagnitude = Math.Max(maxTrendMagnitude, roots[i].Magnitude); + } + else + maxNonTrendMagnitude = Math.Max(maxNonTrendMagnitude, roots[i].Magnitude); + } + + if (!trendFound) + maxTrendMagnitude = 1; + + maxTrendMagnitude = Math.Min(maxTrendMagnitude, _maxTrendRatio); + } + + // Squeezing all components below the maximum trend magnitude + var smallTrendMagnitude = Math.Min(maxTrendMagnitude, (maxTrendMagnitude + 1) / 2); + for (i = 0; i < _windowSize - 1; ++i) + { + if (roots[i].Magnitude >= maxTrendMagnitude) + { + if ((highFrequenceyBoundry < roots[i].Phase && roots[i].Phase < Math.PI - eps) || + (-Math.PI + eps < roots[i].Phase && roots[i].Phase < -highFrequenceyBoundry)) + roots[i] = Complex.FromPolarCoordinates(smallTrendMagnitude, roots[i].Phase); + else + roots[i] = Complex.FromPolarCoordinates(maxTrendMagnitude, roots[i].Phase); + } + } + + // Correcting all the other trend components + for (i = 0; i < _windowSize - 1; ++i) + { + var phase = roots[i].Phase; + if (Math.Abs(phase) <= eps) + roots[i] = new Complex(roots[i].Magnitude, 0); + else if (Math.Abs(phase - Math.PI) <= eps) + roots[i] = new Complex(-roots[i].Magnitude, 0); + else if (Math.Abs(phase + Math.PI) <= eps) + roots[i] = new Complex(-roots[i].Magnitude, 0); + } + + // Computing the characteristic polynomial from the modified roots + try + { + if (!PolynomialUtils.FindPolynomialCoefficients(roots, ref coeff)) + return false; + } + catch (OverflowException) + { + return false; + } + + // Updating alpha + for (i = 0; i < _windowSize - 1; ++i) + _alpha[i] = (Single)(-coeff[i]); + + if (_shouldMaintainInfo) + { + _info.RootsAfterStabilization = roots; + _info.IsStabilized = true; + _info.IsPolynomialTrendPresent = polynomialTrendFound; + _info.IsExponentialTrendPresent = maxTrendMagnitude > 1; + _info.ExponentialTrendFactor = maxTrendMagnitude; + } + + return true; + } + + /// + /// Feeds the next observation on the series to the model and as a result changes the state of the model. + /// + /// The next observation on the series. + /// Determines whether the model parameters also need to be updated upon consuming the new observation (default = false). + public void Consume(ref Single input, bool updateModel = false) + { + if (Single.IsNaN(input)) + return; + + int i; + + if (_wTrans == null) + { + _y = new CpuAlignedVector(_rank, SseUtils.CbAlign); + _wTrans = new CpuAlignedMatrixRow(_rank, _windowSize, SseUtils.CbAlign); + Single[] vecs = new Single[_rank * _windowSize]; + + for (i = 0; i < _rank; ++i) + vecs[(_windowSize + 1) * i] = 1; + + i = 0; + _wTrans.CopyFrom(vecs, ref i); + } + + // Forming vector x + + if (_buffer.Count == 0) + { + for (i = 0; i < _windowSize - 1; ++i) + _buffer.AddLast(_state[i]); + } + + int len = _buffer.Count; + for (i = 0; i < _windowSize - len - 1; ++i) + _x[i] = 0; + for (i = Math.Max(0, len - _windowSize + 1); i < len; ++i) + _x[i - len + _windowSize - 1] = _buffer[i]; + _x[_windowSize - 1] = input; + + // Computing y: Eq. (11) in https://hal-institut-mines-telecom.archives-ouvertes.fr/hal-00479772/file/twocolumns.pdf + CpuAligenedMathUtils.MatTimesSrc(false, _wTrans, _x, _y); + + // Updating the state vector + CpuAligenedMathUtils.MatTranTimesSrc(false, _wTrans, _y, _xSmooth); + + _nextPrediction = _autoregressionNoiseMean + _observationNoiseMean; + for (i = 0; i < _windowSize - 2; ++i) + { + _state[i] = ((_windowSize - 2 - i) * _state[i + 1] + _xSmooth[i + 1]) / (_windowSize - 1 - i); + _nextPrediction += _state[i] * _alpha[i]; + } + _state[_windowSize - 2] = _xSmooth[_windowSize - 1]; + _nextPrediction += _state[_windowSize - 2] * _alpha[_windowSize - 2]; + + if (updateModel) + { + // REVIEW: to be implemented in the next version based on the FAPI algorithm + // in https://hal-institut-mines-telecom.archives-ouvertes.fr/hal-00479772/file/twocolumns.pdf. + } + + _buffer.AddLast(input); + } + + /// + /// Train the model parameters based on a training series. + /// + /// The training time-series. + public void Train(FixedSizeQueue data) + { + _host.CheckParam(data != null, nameof(data), "The input series for training cannot be null."); + _host.CheckParam(data.Count >= _trainSize, nameof(data), "The input series for training does not have enough points for training."); + + Single[] dataArray = new Single[_trainSize]; + + int i; + int count; + for (i = 0, count = 0; count < _trainSize && i < data.Count; ++i) + if (!Single.IsNaN(data[i])) + dataArray[count++] = data[i]; + + if (_shouldMaintainInfo) + { + _info = new ModelInfo(); + _info.WindowSize = _windowSize; + } + + if (count <= 2 * _windowSize) + { +#if !TLCSSA + using (var ch = _host.Start("Train")) + ch.Warning( + "Training cannot be completed because the input series for training does not have enough points."); +#endif + } + else + { + if (count != _trainSize) + Array.Resize(ref dataArray, count); + + TrainCore(dataArray, count); + } + } + +#if !TLCSSA + /// + /// Train the model parameters based on a training series. + /// + /// The training time-series. + public void Train(RoleMappedData data) + { + _host.CheckParam(data != null, nameof(data), "The input series for training cannot be null."); + if (data.Schema.Feature.Type != NumberType.Float) + throw _host.ExceptUserArg(nameof(data.Schema.Feature.Name), "The feature column has type '{0}', but must be a float.", data.Schema.Feature.Type); + + Single[] dataArray = new Single[_trainSize]; + int col = data.Schema.Feature.Index; + + int count = 0; + using (var cursor = data.Data.GetRowCursor(c => c == col)) + { + var getVal = cursor.GetGetter(col); + Single val = default(Single); + while (cursor.MoveNext() && count < _trainSize) + { + getVal(ref val); + if (!Single.IsNaN(val)) + dataArray[count++] = val; + } + } + + if (_shouldMaintainInfo) + { + _info = new ModelInfo(); + _info.WindowSize = _windowSize; + } + + if (count <= 2 * _windowSize) + { + using (var ch = _host.Start("Train")) + ch.Warning("Training cannot be completed because the input series for training does not have enough points."); + } + else + { + if (count != _trainSize) + Array.Resize(ref dataArray, count); + + TrainCore(dataArray, count); + } + } +#endif + + private void TrainCore(Single[] dataArray, int originalSeriesLength) + { + _host.Assert(Utils.Size(dataArray) > 0); + Single[] singularVals; + Single[] leftSingularVecs; + var learnNaiveModel = false; + + var signalLength = _rankSelectionMethod == RankSelectionMethod.Exact ? originalSeriesLength : 2 * _windowSize - 1;//originalSeriesLength; + var signal = new Single[signalLength]; + + int i; + // Creating the trajectory matrix for the series + TrajectoryMatrix tMat = new TrajectoryMatrix(_host, dataArray, _windowSize, originalSeriesLength); + + // Computing the SVD of the trajectory matrix + if (!tMat.ComputeSvd(out singularVals, out leftSingularVecs)) + learnNaiveModel = true; + else + { + for (i = 0; i < _windowSize * _maxRank; ++i) + { + if (Single.IsNaN(leftSingularVecs[i])) + { + learnNaiveModel = true; + break; + } + } + } + + // Checking for standard eigenvectors, if found reduce the window size and reset training. + if (!learnNaiveModel) + { + for (i = 0; i < _windowSize; ++i) + { + var v = leftSingularVecs[(i + 1) * _windowSize - 1]; + if (v * v == 1) + { + if (_windowSize > 2) + { + _windowSize--; + _maxRank = _windowSize / 2; + _alpha = new Single[_windowSize - 1]; + _state = new Single[_windowSize - 1]; + _x = new CpuAlignedVector(_windowSize, SseUtils.CbAlign); + _xSmooth = new CpuAlignedVector(_windowSize, SseUtils.CbAlign); + + TrainCore(dataArray, originalSeriesLength); + return; + } + else + { + learnNaiveModel = true; + break; + } + } + } + } + + // Learn the naive (averaging) model in case the eigen decomposition is not possible + if (learnNaiveModel) + { +#if !TLCSSA + using (var ch = _host.Start("Train")) + ch.Warning("The precise SSA model cannot be trained."); +#endif + + _rank = 1; + var temp = (Single)(1f / Math.Sqrt(_windowSize)); + for (i = 0; i < _windowSize; ++i) + leftSingularVecs[i] = temp; + } + else + { + // Computing the signal rank + if (_rankSelectionMethod == RankSelectionMethod.Exact) + _rank = DetermineSignalRank(dataArray, tMat, leftSingularVecs, singularVals, signal, _maxRank); + else if (_rankSelectionMethod == RankSelectionMethod.Fast) + _rank = DetermineSignalRankFast(dataArray, tMat, leftSingularVecs, singularVals, _maxRank); + } + + // Setting the the y vector + _y = new CpuAlignedVector(_rank, SseUtils.CbAlign); + + // Setting the weight matrix + _wTrans = new CpuAlignedMatrixRow(_rank, _windowSize, SseUtils.CbAlign); + i = 0; + _wTrans.CopyFrom(leftSingularVecs, ref i); + + // Setting alpha + Single nu = 0; + for (i = 0; i < _rank; ++i) + { + _y[i] = leftSingularVecs[_windowSize * (i + 1) - 1]; + nu += _y[i] * _y[i]; + } + + CpuAligenedMathUtils.MatTranTimesSrc(false, _wTrans, _y, _xSmooth); + for (i = 0; i < _windowSize - 1; ++i) + _alpha[i] = _xSmooth[i] / (1 - nu); + + // Stabilizing the model + if (_shouldStablize && !learnNaiveModel) + { + if (!Stabilize()) + { +#if !TLCSSA + using (var ch = _host.Start("Train")) + ch.Warning("The trained model cannot be stablized."); +#endif + } + } + + // Computing the noise moments + if (ShouldComputeForecastIntervals) + { + if (_rankSelectionMethod != RankSelectionMethod.Exact) + ReconstructSignalTailFast(dataArray, tMat, leftSingularVecs, _rank, signal); + + ComputeNoiseMoments(dataArray, signal, _alpha, out _observationNoiseVariance, out _autoregressionNoiseVariance, + out _observationNoiseMean, out _autoregressionNoiseMean, originalSeriesLength - signalLength); + _observationNoiseMean = 0; + _autoregressionNoiseMean = 0; + } + + // Setting the state + _nextPrediction = _autoregressionNoiseMean + _observationNoiseMean; + + if (_buffer.Count > 0) // Use the buffer to set the state when there are data points pushed into the buffer using the Consume() method + { + int len = _buffer.Count; + for (i = 0; i < _windowSize - len; ++i) + _x[i] = 0; + for (i = Math.Max(0, len - _windowSize); i < len; ++i) + _x[i - len + _windowSize] = _buffer[i]; + } + else // use the training data points otherwise + { + for (i = originalSeriesLength - _windowSize; i < originalSeriesLength; ++i) + _x[i - originalSeriesLength + _windowSize] = dataArray[i]; + } + + CpuAligenedMathUtils.MatTimesSrc(false, _wTrans, _x, _y); + CpuAligenedMathUtils.MatTranTimesSrc(false, _wTrans, _y, _xSmooth); + + for (i = 1; i < _windowSize; ++i) + { + _state[i - 1] = _xSmooth[i]; + _nextPrediction += _state[i - 1] * _alpha[i - 1]; + } + + if (_shouldMaintainInfo) + { + _info.IsTrained = true; + _info.WindowSize = _windowSize; + _info.AutoRegressiveCoefficients = new Single[_windowSize - 1]; + Array.Copy(_alpha, _info.AutoRegressiveCoefficients, _windowSize - 1); + _info.Rank = _rank; + _info.IsNaiveModelTrained = learnNaiveModel; + _info.Spectrum = singularVals; + } + } + + /// + /// Forecasts the future values of the series up to the given horizon. + /// + /// The forecast result. + /// The forecast horizon. + public void Forecast(ref ForecastResultBase result, int horizon = 1) + { + _host.CheckParam(horizon >= 1, nameof(horizon), "The horizon parameter should be greater than 0."); + if (result == null) + result = new SsaForecastResult(); + + var str = "The result argument must be of type " + typeof(SsaForecastResult).ToString(); + _host.CheckParam(result is SsaForecastResult, nameof(result), str); + + var output = result as SsaForecastResult; + + var res = result.PointForecast.Values; + if (Utils.Size(res) < horizon) + res = new Single[horizon]; + + int i; + int j; + int k; + + // Computing the point forecasts + res[0] = _nextPrediction; + for (i = 1; i < horizon; ++i) + { + k = 0; + res[i] = _autoregressionNoiseMean + _observationNoiseMean; + for (j = i; j < _windowSize - 1; ++j, ++k) + res[i] += _state[j] * _alpha[k]; + + for (j = Math.Max(0, i - _windowSize + 1); j < i; ++j, ++k) + res[i] += res[j] * _alpha[k]; + } + + // Computing the forecast variances + if (ShouldComputeForecastIntervals) + { + var sd = output.ForecastStandardDeviation.Values; + if (Utils.Size(sd) < horizon) + sd = new Single[horizon]; + + var lastCol = new FixedSizeQueue(_windowSize - 1); + + for (i = 0; i < _windowSize - 3; ++i) + lastCol.AddLast(0); + lastCol.AddLast(1); + lastCol.AddLast(_alpha[_windowSize - 2]); + sd[0] = _autoregressionNoiseVariance + _observationNoiseVariance; + + for (i = 1; i < horizon; ++i) + { + Single temp = 0; + for (j = 0; j < _windowSize - 1; ++j) + temp += _alpha[j] * lastCol[j]; + lastCol.AddLast(temp); + + sd[i] = sd[i - 1] + _autoregressionNoiseVariance * temp * temp; + } + + for (i = 0; i < horizon; ++i) + sd[i] = (float)Math.Sqrt(sd[i]); + + output.ForecastStandardDeviation = new VBuffer(horizon, sd, output.ForecastStandardDeviation.Indices); + } + + result.PointForecast = new VBuffer(horizon, res, result.PointForecast.Indices); + output.CanComputeForecastIntervals = ShouldComputeForecastIntervals; + output.BoundOffset = 0; + } + + /// + /// Predicts the next value on the series. + /// + /// The prediction result. + public void PredictNext(ref Single output) + { + output = _nextPrediction; + } + + public ISequenceModeler Clone() + { + return new AdaptiveSingularSpectrumSequenceModeler(this); + } + + /// + /// Computes the forecast intervals for the input forecast object at the given confidence level. The results are stored in the forecast object. + /// + /// The input forecast object + /// The confidence level in [0, 1) + public static void ComputeForecastIntervals(ref SsaForecastResult forecast, Single confidenceLevel = 0.95f) + { + Contracts.CheckParam(0 <= confidenceLevel && confidenceLevel < 1, nameof(confidenceLevel), "The confidence level must be in [0, 1)."); + Contracts.CheckValue(forecast, nameof(forecast)); + Contracts.Check(forecast.CanComputeForecastIntervals, "The forecast intervals cannot be computed for this forecast object."); + + var horizon = Utils.Size(forecast.PointForecast.Values); + Contracts.Check(Utils.Size(forecast.ForecastStandardDeviation.Values) >= horizon, "The forecast standard deviation values are not available."); + + forecast.ConfidenceLevel = confidenceLevel; + if (horizon == 0) + return; + + var upper = forecast.UpperBound.Values; + if (Utils.Size(upper) < horizon) + upper = new Single[horizon]; + + var lower = forecast.LowerBound.Values; + if (Utils.Size(lower) < horizon) + lower = new Single[horizon]; + + var z = ProbabilityFunctions.Probit(0.5 + confidenceLevel / 2.0); + var meanForecast = forecast.PointForecast.Values; + var sdForecast = forecast.ForecastStandardDeviation.Values; + double temp; + + for (int i = 0; i < horizon; ++i) + { + temp = z * sdForecast[i]; + upper[i] = (Single)(meanForecast[i] + forecast.BoundOffset + temp); + lower[i] = (Single)(meanForecast[i] + forecast.BoundOffset - temp); + } + + forecast.UpperBound = new VBuffer(horizon, upper, forecast.UpperBound.Indices); + forecast.LowerBound = new VBuffer(horizon, lower, forecast.LowerBound.Indices); + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/EigenUtils.cs b/src/Microsoft.ML.TimeSeries/EigenUtils.cs new file mode 100644 index 0000000000..42392dd026 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/EigenUtils.cs @@ -0,0 +1,556 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Runtime.InteropServices; +using Microsoft.ML.Runtime.Internal.Utilities; +using Float = System.Single; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + //REVIEW: improve perf with SSE and Multithreading + public static class EigenUtils + { + //Compute the Eigen-decomposition of a symmetric matrix + //REVIEW: use matrix/vector operations, not Array Math + public static void EigenDecomposition(Float[] a, out Float[] eigenvalues, out Float[] eigenvectors) + { + var count = a.Length; + var n = (int)Math.Sqrt(count); + Contracts.Assert(n * n == count); + + eigenvectors = new Float[count]; + eigenvalues = new Float[n]; + + //Reduce A to tridiagonal form + //REVIEW: it's not ideal to keep using the same variable name for different purposes + // - After the operation, "eigenvalues" means the diagonal elements of the reduced matrix + //and "eigenvectors" means the orthogonal similarity transformation matrix + // - Consider aliasing variables + var w = new Float[n]; + Tred(a, eigenvalues, w, eigenvectors, n); + + //Eigen-decomposition of the tridiagonal matrix + //After this operation, "eigenvalues" means eigenvalues^2 + Imtql(eigenvalues, w, eigenvectors, n); + + for (int i = 0; i < n; i++) + eigenvalues[i] = eigenvalues[i] <= 0 ? (Float)(0.0) : (Float)Math.Sqrt(eigenvalues[i]); + } + + private static Float Hypot(Float x, Float y) + { + x = Math.Abs(x); + y = Math.Abs(y); + + if (x == 0 || y == 0) + return x + y; + + if (x < y) + { + double t = x / y; + return y * (Float)Math.Sqrt(1 + t * t); + } + else + { + double t = y / x; + return x * (Float)Math.Sqrt(1 + t * t); + } + } + + private static Float CopySign(Float x, Float y) + { + Float xx = Math.Abs(x); + return y < 0 ? -xx : xx; + } + + private static void Tred(Float[] a, Float[] d, Float[] e, Float[] z, int n) + { + float g; + float h; + int i; + int j; + int k; + int l; + + /* this subroutine reduces a Float symmetric matrix to a */ + /* symmetric tridiagonal matrix using and accumulating */ + /* orthogonal similarity transformations. */ + + /* on input */ + + /* n is the order of the matrix. */ + + /* a contains the Float symmetric input matrix. only the */ + /* lower triangle of the matrix need be supplied. */ + + /* on output */ + + /* d contains the diagonal elements of the tridiagonal matrix. */ + + /* e contains the sub-diagonal elements of the tridiagonal */ + /* matrix in its last n-1 positions. e(1) is set to zero. */ + /* z contains the orthogonal similarity transformation */ + + /* ------------------------------------------------------------------ */ + + /* Function Body */ + + for (i = 0; i < n; ++i) + { + for (j = i; j < n; ++j) + { + z[j + i * n] = a[j + i * n]; + } + + d[i] = a[n - 1 + i * n]; + } + + if (n == 1) + { + d[0] = z[0]; + z[0] = 1; + e[0] = 0; + return; + } + // .......... for i=n step -1 until 2 do -- .......... + for (i = n; i-- > 1;) + { + l = i - 1; + h = 0; + Float scale = 0; + if (l == 0) + { + e[1] = d[0]; + d[0] = z[0]; + z[1] = 0; + z[n] = 0; + d[1] = h; + continue; + } + // .......... scale row .......... + for (k = 0; k < i; ++k) + { + scale += Math.Abs(d[k]); + } + + if (scale == 0) + { + e[i] = d[l]; + + for (j = 0; j < i; ++j) + { + d[j] = z[l + j * n]; + z[i + j * n] = 0; + z[j + i * n] = 0; + } + d[i] = h; + continue; + + } + for (k = 0; k < i; ++k) + { + d[k] /= scale; + h += d[k] * d[k]; + } + + Float f = d[l]; + g = CopySign((Float)Math.Sqrt(h), f); + e[i] = scale * g; + h -= f * g; + d[l] = f - g; + // .......... form a*u .......... + for (j = 0; j < i; ++j) + { + e[j] = 0; + } + + for (j = 0; j < i; ++j) + { + f = d[j]; + z[j + i * n] = f; + g = e[j] + z[j + j * n] * f; + if (j + 1 == i) + { + e[j] = g; + continue; + } + + for (k = j + 1; k < i; ++k) + { + g += z[k + j * n] * d[k]; + e[k] += z[k + j * n] * f; + } + + e[j] = g; + } + // .......... form p .......... + f = 0; + + for (j = 0; j < i; ++j) + { + e[j] /= h; + f += e[j] * d[j]; + } + + Float hh = f / (h + h); + // .......... form q .......... + for (j = 0; j < i; ++j) + { + e[j] -= hh * d[j]; + } + // .......... form reduced a .......... + for (j = 0; j < i; ++j) + { + f = d[j]; + g = e[j]; + + for (k = j; k < i; ++k) + { + z[k + j * n] = (float)((double)z[k + j * n] - (double)f * e[k] - (double)g * d[k]); + } + + d[j] = z[l + j * n]; + z[i + j * n] = 0; + } + + d[i] = h; + } + + // .......... accumulation of transformation matrices .......... + + for (i = 1; i < n; ++i) + { + l = i - 1; + z[n - 1 + l * n] = z[l + l * n]; + z[l + l * n] = 1; + h = d[i]; + if (h != 0) + { + for (k = 0; k < i; ++k) + { + d[k] = z[k + i * n] / h; + } + + for (j = 0; j < i; ++j) + { + g = 0; + + for (k = 0; k < i; ++k) + { + g += z[k + i * n] * z[k + j * n]; + } + + for (k = 0; k < i; ++k) + { + z[k + j * n] -= g * d[k]; + } + } + } + + for (k = 0; k < i; ++k) + { + z[k + i * n] = 0; + } + } + + for (i = 0; i < n; ++i) + { + d[i] = z[n - 1 + i * n]; + z[n - 1 + i * n] = 0; + } + z[n * n - 1] = 1; + e[0] = 0; + } /* Tred */ + + /* Subroutine */ + private static int Imtql(Float[] d, Float[] e, Float[] z, int n) + { + /* Local variables */ + double b; + double c; + double f; + double g; + int i; + int j; + int k; + int l; + int m; + double p; + double r; + double s; + double tst1; + double tst2; + + /* this subroutine is a translation of the algol procedure imtql2, */ + /* num. math. 12, 377-383(1968) by martin and wilkinson, */ + /* as modified in num. math. 15, 450(1970) by dubrulle. */ + /* handbook for auto. comp., vol.ii-linear algebra, 241-248(1971). */ + + /* this subroutine finds the eigenvalues and eigenvectors */ + /* of a symmetric tridiagonal matrix by the implicit ql method. */ + /* the eigenvectors of a full symmetric matrix can also */ + /* be found if tred2 has been used to reduce this */ + /* full matrix to tridiagonal form. */ + + /* on input */ + + /* nm must be set to the row dimension of two-dimensional */ + /* array parameters as declared in the calling program */ + /* dimension statement. */ + + /* n is the order of the matrix. */ + + /* d contains the diagonal elements of the input matrix. */ + + /* e contains the subdiagonal elements of the input matrix */ + /* in its last n-1 positions. e(1) is arbitrary. */ + + /* z contains the transformation matrix produced in the */ + /* reduction by tred2, if performed. if the eigenvectors */ + /* of the tridiagonal matrix are desired, z must contain */ + /* the identity matrix. */ + + /* on output */ + + /* d contains the eigenvalues in ascending order. if an */ + /* error exit is made, the eigenvalues are correct but */ + /* unordered for indices 1,2,...,ierr-1. */ + + /* e has been destroyed. */ + + /* z contains orthonormal eigenvectors of the symmetric */ + /* tridiagonal (or full) matrix. if an error exit is made, */ + /* z contains the eigenvectors associated with the stored */ + /* eigenvalues. */ + + /* ierr is set to */ + /* zero for normal return, */ + /* j if the j-th eigenvalue has not been */ + /* determined after 30 iterations. */ + + /* calls pythag for dsqrt(a*a + b*b) . */ + + /* questions and comments should be directed to burton s. garbow, */ + /* mathematics and computer science div, argonne national laboratory */ + + /* this version dated august 1983. */ + + /* ------------------------------------------------------------------ */ + + /* Function Body */ + if (n == 1) + return 0; + for (i = 1; i < n; ++i) + { + e[i - 1] = e[i]; + } + e[n - 1] = (Float)(0.0); + + for (l = 0; l < n; ++l) + { + j = 0; + do + { + /* .......... look for small sub-diagonal element .......... */ + for (m = l; m + 1 < n; ++m) + { + tst1 = Math.Abs(d[m]) + Math.Abs(d[m + 1]); + tst2 = tst1 + Math.Abs(e[m]); + if (tst2 == tst1) + break; + } + p = d[l]; + if (m != l) + { + if (j++ >= 30) + { + return l; + } + /* .......... form shift .......... */ + g = (d[l + 1] - p) / (e[l] * (Float)(2.0)); + r = Hypot((float)g, (Float)(1.0)); + g = d[m] - p + e[l] / (g + CopySign((float)r, (float)g)); + s = (Float)(1.0); + c = (Float)(1.0); + p = (Float)(0.0); + /* .......... for i=m-1 step -1 until l do -- .......... */ + for (i = m - 1; i >= l; i--) + { + f = s * e[i]; + b = c * e[i]; + r = Hypot((float)f, (float)g); + e[i + 1] = (float)r; + if (r == (Float)(0.0)) + { + /* .......... recover from underflow .......... */ + d[i + 1] -= (float)p; + e[m] = 0; + break; + } + s = f / r; + c = g / r; + g = d[i + 1] - p; + r = (d[i] - g) * s + c * (Float)(2.0) * b; + p = s * r; + d[i + 1] = (float)(g + p); + g = c * r - b; + /* .......... form vector .......... */ + for (k = 0; k < n; ++k) + { + f = z[k + (i + 1) * n]; + z[k + (i + 1) * n] = (float)(s * z[k + i * n] + c * f); + z[k + i * n] = (float)(c * z[k + i * n] - s * f); + } + } + if (r == (Float)(0.0) && i >= l) + continue; + d[l] -= (float)p; + e[l] = (float)g; + e[m] = (Float)(0.0); + } + } while (m != l); + } + /* .......... order eigenvalues and eigenvectors .......... */ + for (i = 0; i < n; ++i) + { + k = i; + p = d[i]; + + for (j = i + 1; j < n; ++j) + { + if (d[j] <= p) + continue; + k = j; + p = d[j]; + } + + if (k == i) + continue; + d[k] = d[i]; + d[i] = (float)p; + + for (j = 0; j < n; ++j) + { + p = z[j + i * n]; + z[j + i * n] = z[j + k * n]; + z[j + k * n] = (float)p; + } + } + + return 0; + } + + private const string DllName = "MklImports"; + + public enum Layout + { + RowMajor = 101, + ColMajor = 102 + } + + public enum Job : byte + { + EigenValues = (byte)'E', + Schur = (byte)'S' + } + + public enum Compz : byte + { + None = (byte)'N', + SchurH = (byte)'I', + SchurA = (byte)'V' + } + + public enum Uplo : byte + { + UpperTriangular = (byte)'U', + LowerTriangular = (byte)'L' + } + + // See: https://software.intel.com/en-us/node/521087#4C9F4214-70BC-4483-A814-1E7F927B30CF + [DllImport(DllName, EntryPoint = "LAPACKE_shseqr", CallingConvention = CallingConvention.Cdecl)] + public static extern int Shseqr(Layout matrixLayout, Job job, Compz compz, int n, int ilo, int ihi, + [In] float[] h, int idh, [Out] float[] wr, [Out] float[] wi, [Out] float[] z, int ldz); + + // See: https://software.intel.com/en-us/node/521087#4C9F4214-70BC-4483-A814-1E7F927B30CF + [DllImport(DllName, EntryPoint = "LAPACKE_dhseqr", CallingConvention = CallingConvention.Cdecl)] + public static extern int Dhseqr(Layout matrixLayout, Job job, Compz compz, int n, int ilo, int ihi, + [In] double[] h, int idh, [Out] double[] wr, [Out] double[] wi, [Out] double[] z, int ldz); + + // See: https://software.intel.com/en-us/node/521046#7EF85A82-423A-4ABC-A208-88326CD0B887 + [DllImport(DllName, EntryPoint = "LAPACKE_ssytrd", CallingConvention = CallingConvention.Cdecl)] + public static extern int Ssytrd(Layout matrixLayout, Uplo uplo, int n, float[] a, int lda, float[] d, + float[] e, float[] tau); + + // See: https://software.intel.com/en-us/node/521046#7EF85A82-423A-4ABC-A208-88326CD0B887 + [DllImport(DllName, EntryPoint = "LAPACKE_dsytrd", CallingConvention = CallingConvention.Cdecl)] + public static extern int Dsytrd(Layout matrixLayout, Uplo uplo, int n, double[] a, int lda, double[] d, + double[] e, double[] tau); + + // See: https://software.intel.com/en-us/node/521067#E2C5B8B3-D275-4000-821D-1ABF245D2E30 + [DllImport(DllName, EntryPoint = "LAPACKE_ssteqr", CallingConvention = CallingConvention.Cdecl)] + public static extern int Ssteqr(Layout matrixLayout, Compz compz, int n, float[] d, float[] e, float[] z, + int ldz); + + // See: https://software.intel.com/en-us/node/521067#E2C5B8B3-D275-4000-821D-1ABF245D2E30 + [DllImport(DllName, EntryPoint = "LAPACKE_dsteqr", CallingConvention = CallingConvention.Cdecl)] + public static extern int Dsteqr(Layout matrixLayout, Compz compz, int n, double[] d, double[] e, double[] z, + int ldz); + + // See: https://software.intel.com/en-us/node/521049#106F8646-1C99-4A9D-8604-D60DAAF7BE0C + [DllImport(DllName, EntryPoint = "LAPACKE_sorgtr", CallingConvention = CallingConvention.Cdecl)] + public static extern int Sorgtr(Layout matrixLayout, Uplo uplo, int n, float[] a, int lda, float[] tau); + + // See: https://software.intel.com/en-us/node/521049#106F8646-1C99-4A9D-8604-D60DAAF7BE0C + [DllImport(DllName, EntryPoint = "LAPACKE_dorgtr", CallingConvention = CallingConvention.Cdecl)] + public static extern int Dorgtr(Layout matrixLayout, Uplo uplo, int n, double[] a, int lda, double[] tau); + + public static bool MklSymmetricEigenDecomposition(Single[] input, int size, out Single[] eigenValues, out Single[] eigenVectors) + { + Contracts.CheckParam(size > 0, nameof(size), "The input matrix size must be strictly positive."); + var n2 = size * size; + Contracts.Check(Utils.Size(input) >= n2, "The input matrix must at least have " + n2 + " elements"); + + eigenValues = null; + eigenVectors = null; + if (size == 1) + { + eigenValues = new[] { input[0] }; + eigenVectors = new[] { 1f }; + return true; + } + + Double[] a = new Double[n2]; + Array.Copy(input, 0, a, 0, n2); + Double[] d = new Double[size]; + Double[] e = new Double[size - 1]; + Double[] tau = new Double[size]; + int info; + + info = Dsytrd(Layout.ColMajor, Uplo.UpperTriangular, size, a, size, d, e, tau); + if (info != 0) + return false; + + info = Dorgtr(Layout.ColMajor, Uplo.UpperTriangular, size, a, size, tau); + if (info != 0) + return false; + + info = Dsteqr(Layout.ColMajor, Compz.SchurA, size, d, e, a, size); + if (info != 0) + return false; + + eigenValues = new Single[size]; + for (var i = 0; i < size; ++i) + eigenValues[i] = (Single)d[i]; + + eigenVectors = new Single[n2]; + for (var i = 0; i < n2; ++i) + eigenVectors[i] = (Single)a[i]; + + return true; + } + + } +} \ No newline at end of file diff --git a/src/Microsoft.ML.TimeSeries/ExponentialAverageTransform.cs b/src/Microsoft.ML.TimeSeries/ExponentialAverageTransform.cs new file mode 100644 index 0000000000..a6a7c20986 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/ExponentialAverageTransform.cs @@ -0,0 +1,142 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.EntryPoints; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(ExponentialAverageTransform.Summary, typeof(ExponentialAverageTransform), typeof(ExponentialAverageTransform.Arguments), typeof(SignatureDataTransform), + ExponentialAverageTransform.UserName, ExponentialAverageTransform.LoaderSignature, ExponentialAverageTransform.ShortName)] +[assembly: LoadableClass(ExponentialAverageTransform.Summary, typeof(ExponentialAverageTransform), null, typeof(SignatureLoadDataTransform), + ExponentialAverageTransform.UserName, ExponentialAverageTransform.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// ExponentialAverageTransform is a weighted average of the values: ExpAvg(y_t) = a * y_t + (1-a) * ExpAvg(y_(t-1)). + /// + public sealed class ExponentialAverageTransform : SequentialTransformBase + { + public const string Summary = "Applies a Exponential average on a time series."; + public const string LoaderSignature = "ExpAverageTransform"; + public const string UserName = "Exponential Average Transform"; + public const string ShortName = "ExpAvg"; + + public sealed class Arguments : TransformInputBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column", ShortName = "name", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "Coefficient d in: d m(y_t) = d * y_t + (1-d) * m(y_(t-1)), it should be in [0, 1].", + ShortName = "d", SortOrder = 4)] + public Single Decay = 0.9f; + } + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo( + modelSignature: "EXAVTRNS", + verWrittenCur: 0x00010001, + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(ExponentialAverageTransform).Assembly.FullName); + } + + private readonly Single _decay; + + public ExponentialAverageTransform(IHostEnvironment env, Arguments args, IDataView input) + : base(1, 1, args.Source, args.Name, LoaderSignature, env, input) + { + Host.CheckUserArg(0 <= args.Decay && args.Decay <= 1, nameof(args.Decay), "Should be in [0, 1]."); + _decay = args.Decay; + } + + public ExponentialAverageTransform(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature, input) + { + // *** Binary format *** + // + // Single _decay + + _decay = ctx.Reader.ReadSingle(); + + Host.CheckDecode(0 <= _decay && _decay <= 1); + Host.CheckDecode(WindowSize == 1); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + Host.Assert(WindowSize >= 1); + Host.Assert(0 <= _decay && _decay <= 1); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + // *** Binary format *** + // + // Single _decay + + base.Save(ctx); + ctx.Writer.Write(_decay); + } + + public static Single ComputeExponentialAverage(Single input, Single decay, Single previousAverage) + { + return decay * input + (1 - decay) * previousAverage; + } + + public sealed class State : StateBase + { + private Single _previousAverage; + private bool _firstIteration; + private Single _decay; + + public State() + { + _firstIteration = true; + } + + protected override void SetNaOutput(ref Single output) + { + output = Single.NaN; + } + + protected override void TransformCore(ref Single input, FixedSizeQueue windowedBuffer, long iteration, ref Single output) + { + if (_firstIteration) + { + // we only need the buffer at the first iteration + _previousAverage = windowedBuffer[0]; + _firstIteration = false; + } + output = ComputeExponentialAverage(input, _decay, _previousAverage); + // we keep the previous average in memory + _previousAverage = output; + } + + protected override void InitializeStateCore() + { + _firstIteration = true; + _decay = ((ExponentialAverageTransform)ParentTransform)._decay; + } + + protected override void LearnStateFromDataCore(FixedSizeQueue data) + { + // This method is empty because there is no need for parameter learning from the initial windowed buffer for this transform. + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/FftUtils.cs b/src/Microsoft.ML.TimeSeries/FftUtils.cs new file mode 100644 index 0000000000..85f40013c2 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/FftUtils.cs @@ -0,0 +1,415 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// The utility functions that wrap the native Discrete Fast Fourier Transform functionality from Intel MKL. + /// + internal static class FftUtils + { + //To triger the loading of MKL library since MKL proxy native library depends on it. + static FftUtils() => ErrorMessage(0); + + private enum ConfigParam + { + /* Domain for forward transform. No default value */ + ForwardDomain = 0, + + /* Dimensionality, or rank. No default value */ + Dimension = 1, + + /* Length(s) of transform. No default value */ + Lengths = 2, + + /* Floating point precision. No default value */ + Precision = 3, + + /* Scale factor for forward transform [1.0] */ + ForwardScale = 4, + + /* Scale factor for backward transform [1.0] */ + BackwardScale = 5, + + /* Exponent sign for forward transform [Negative] */ + /* ForwardSign = 6, ## NOT IMPLEMENTED */ + + /* Number of data sets to be transformed [1] */ + NumberOfTransforms = 7, + + /* Storage of finite complex-valued sequences in complex domain + [ComplexComplex] */ + ComplexStorage = 8, + + /* Storage of finite real-valued sequences in real domain + [RealReal] */ + RealStorage = 9, + + /* Storage of finite complex-valued sequences in conjugate-even + domain [ComplexReal] */ + ConjugateEvenStorage = 10, + + /* Placement of result [InPlace] */ + Placement = 11, + + /* Generalized strides for input data layout [tigth, row-major for + C] */ + InputStrides = 12, + + /* Generalized strides for output data layout [tight, row-major + for C] */ + OutputStrides = 13, + + /* Distance between first input elements for multiple transforms + [0] */ + InputDistance = 14, + + /* Distance between first output elements for multiple transforms + [0] */ + OutputDistance = 15, + + /* Effort spent in initialization [Medium] */ + /* InitializationEffort = 16, ## NOT IMPLEMENTED */ + + /* Use of workspace during computation [Allow] */ + /* Workspace = 17, ## NOT IMPLEMENTED */ + + /* Ordering of the result [Ordered] */ + Ordering = 18, + + /* Possible transposition of result [None] */ + Transpose = 19, + + /* User-settable descriptor name [""] */ + DescriptorName = 20, /* DEPRECATED */ + + /* Packing format for ComplexReal storage of finite + conjugate-even sequences [CcsFormat] */ + PackedFormat = 21, + + /* Commit status of the descriptor - R/O parameter */ + CommitStatus = 22, + + /* Version string for this DFTI implementation - R/O parameter */ + Version = 23, + + /* Ordering of the forward transform - R/O parameter */ + /* ForwardOrdering = 24, ## NOT IMPLEMENTED */ + + /* Ordering of the backward transform - R/O parameter */ + /* BackwardOrdering = 25, ## NOT IMPLEMENTED */ + + /* Number of user threads that share the descriptor [1] */ + NumberOfUserThreads = 26 + } + + private enum ConfigValue + { + /* CommitStatus */ + Committed = 30, + Uncommitted = 31, + + /* ForwardDomain */ + Complex = 32, + Real = 33, + /* ConjugateEven = 34, ## NOT IMPLEMENTED */ + + /* Precision */ + Single = 35, + Double = 36, + + /* ForwardSign */ + /* Negative = 37, ## NOT IMPLEMENTED */ + /* Positive = 38, ## NOT IMPLEMENTED */ + + /* ComplexStorage and ConjugateEvenStorage */ + ComplexComplex = 39, + ComplexReal = 40, + + /* RealStorage */ + RealComplex = 41, + RealReal = 42, + + /* Placement */ + InPlace = 43, /* Result overwrites input */ + NotInPlace = 44, /* Have another place for result */ + + /* InitializationEffort */ + /* Low = 45, ## NOT IMPLEMENTED */ + /* Medium = 46, ## NOT IMPLEMENTED */ + /* High = 47, ## NOT IMPLEMENTED */ + + /* Ordering */ + Ordered = 48, + BackwardScrambled = 49, + /* ForwardScrambled = 50, ## NOT IMPLEMENTED */ + + /* Allow/avoid certain usages */ + Allow = 51, /* Allow transposition or workspace */ + /* Avoid = 52, ## NOT IMPLEMENTED */ + None = 53, + + /* PackedFormat (for storing congugate-even finite sequence + in real array) */ + CcsFormat = 54, /* Complex conjugate-symmetric */ + PackFormat = 55, /* Pack format for real DFT */ + PermFormat = 56, /* Perm format for real DFT */ + CceFormat = 57 /* Complex conjugate-even */ + } + + private const string DllName = "MklImports"; + private const string DllProxyName = "MklProxyNative"; + + // See: https://software.intel.com/en-us/node/521976#8CD904AB-244B-42E4-820A-CC2376E776B8 + [DllImport(DllProxyName, EntryPoint = "MKLDftiCreateDescriptor", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] + private static extern int CreateDescriptor(out IntPtr desc, ConfigValue precision, ConfigValue domain, int dimension, int length); + + // See: https://software.intel.com/en-us/node/521977 + [DllImport(DllName, EntryPoint = "DftiCommitDescriptor")] + private static extern int CommitDescriptor(IntPtr desc); + + // See: https://software.intel.com/en-us/node/521978 + [DllImport(DllName, EntryPoint = "DftiFreeDescriptor")] + private static extern int FreeDescriptor(ref IntPtr desc); + + // See: https://software.intel.com/en-us/node/521981 + [DllImport(DllProxyName, EntryPoint = "MKLDftiSetValue", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] + private static extern int SetValue(IntPtr desc, ConfigParam configParam, ConfigValue configValue); + + // See: https://software.intel.com/en-us/node/521984 + [DllImport(DllProxyName, EntryPoint = "MKLDftiComputeForward", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] + private static extern int ComputeForward(IntPtr desc, [In] double[] inputRe, [In] double[] inputIm, [Out] double[] outputRe, [Out] double[] outputIm); + + // See: https://software.intel.com/en-us/node/521985 + [DllImport(DllProxyName, EntryPoint = "MKLDftiComputeBackward", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] + private static extern int ComputeBackward(IntPtr desc, [In] double[] inputRe, [In] double[] inputIm, [Out] double[] outputRe, [Out] double[] outputIm); + + // See: https://software.intel.com/en-us/node/521984 + [DllImport(DllProxyName, EntryPoint = "MKLDftiComputeForward", CallingConvention = CallingConvention.Cdecl)] + private static extern int ComputeForward(IntPtr desc, [In] float[] inputRe, [In] float[] inputIm, [Out] float[] outputRe, [Out] float[] outputIm); + + // See: https://software.intel.com/en-us/node/521985 + [DllImport(DllProxyName, EntryPoint = "MKLDftiComputeBackward", CallingConvention = CallingConvention.Cdecl)] + private static extern int ComputeBackward(IntPtr desc, [In] float[] inputRe, [In] float[] inputIm, [Out] float[] outputRe, [Out] float[] outputIm); + + // See: https://software.intel.com/en-us/node/521990 + [System.Security.SuppressUnmanagedCodeSecurity] + [DllImport(DllName, EntryPoint = "DftiErrorMessage", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)] + private static extern IntPtr ErrorMessage(int status); + + private static void CheckStatus(int status) + { + if (status != 0) + throw Contracts.Except(Marshal.PtrToStringAnsi(ErrorMessage(status))); + } + + /// + /// Computes the forward Fast Fourier Transform of the input series in single precision. + /// + /// The real part of the input series + /// The imaginary part of the input series + /// The real part of the output series + /// The imaginary part of the output series + /// + public static void ComputeForwardFft(float[] inputRe, float[] inputIm, float[] outputRe, float[] outputIm, int length) + { + Contracts.CheckValue(inputRe, nameof(inputRe)); + Contracts.CheckValue(inputIm, nameof(inputIm)); + Contracts.CheckValue(outputRe, nameof(outputRe)); + Contracts.CheckValue(outputIm, nameof(outputIm)); + Contracts.CheckParam(length > 0, nameof(length), "The length parameter must be greater than 0."); + Contracts.Check(inputRe.Length >= length && inputIm.Length >= length && outputRe.Length >= length && outputIm.Length >= length, + "The lengths of inputRe, inputIm, outputRe and outputIm need to be at least equal to the length parameter."); + + int status = 0; // DFTI_NO_ERROR + IntPtr descriptor = default(IntPtr); + + try + { + status = CreateDescriptor(out descriptor, ConfigValue.Single, ConfigValue.Complex, 1, length); + CheckStatus(status); + + status = SetValue(descriptor, ConfigParam.Placement, ConfigValue.NotInPlace); + CheckStatus(status); + + status = SetValue(descriptor, ConfigParam.ComplexStorage, ConfigValue.RealReal); + CheckStatus(status); + + status = CommitDescriptor(descriptor); + CheckStatus(status); + + status = ComputeForward(descriptor, inputRe, inputIm, outputRe, outputIm); + CheckStatus(status); + } + finally + { + if (descriptor != null) + FreeDescriptor(ref descriptor); + } + } + + /// + /// Computes the backward (inverse) Fast Fourier Transform of the input series in single precision. + /// + /// The real part of the input series + /// The imaginary part of the input series + /// The real part of the output series + /// The imaginary part of the output series + /// + public static void ComputeBackwardFft(float[] inputRe, float[] inputIm, float[] outputRe, float[] outputIm, int length) + { + Contracts.CheckValue(inputRe, nameof(inputRe)); + Contracts.CheckValue(inputIm, nameof(inputIm)); + Contracts.CheckValue(outputRe, nameof(outputRe)); + Contracts.CheckValue(outputIm, nameof(outputIm)); + Contracts.CheckParam(length > 0, nameof(length), "The length parameter must be greater than 0."); + Contracts.Check(inputRe.Length >= length && inputIm.Length >= length && outputRe.Length >= length && outputIm.Length >= length, + "The lengths of inputRe, inputIm, outputRe and outputIm need to be at least equal to the length parameter."); + + int status = 0; // DFTI_NO_ERROR + IntPtr descriptor = default(IntPtr); + float scale = 1f / length; + + try + { + status = CreateDescriptor(out descriptor, ConfigValue.Single, ConfigValue.Complex, 1, length); + CheckStatus(status); + + status = SetValue(descriptor, ConfigParam.Placement, ConfigValue.NotInPlace); + CheckStatus(status); + + status = SetValue(descriptor, ConfigParam.ComplexStorage, ConfigValue.RealReal); + CheckStatus(status); + + status = CommitDescriptor(descriptor); + CheckStatus(status); + + status = ComputeBackward(descriptor, inputRe, inputIm, outputRe, outputIm); + CheckStatus(status); + } + finally + { + if (descriptor != null) + FreeDescriptor(ref descriptor); + } + + // REVIEW: for some reason the native backward scaling for DFTI in MKL does not work. + // Therefore here, we manually re-scale the output. + // Ideally, the command + // status = SetValue(descriptor, ConfigParam.BackwardScale, __arglist(scale)); + // should do the backward rescaling but for some reason it does not work and needs further investigation. + for (int i = 0; i < length; ++i) + { + outputRe[i] *= scale; + outputIm[i] *= scale; + } + } + + /// + /// Computes the forward Fast Fourier Transform of the input series in double precision. + /// + /// The real part of the input series + /// The imaginary part of the input series + /// The real part of the output series + /// The imaginary part of the output series + /// + public static void ComputeForwardFft(double[] inputRe, double[] inputIm, double[] outputRe, double[] outputIm, int length) + { + Contracts.CheckValue(inputRe, nameof(inputRe)); + Contracts.CheckValue(inputIm, nameof(inputIm)); + Contracts.CheckValue(outputRe, nameof(outputRe)); + Contracts.CheckValue(outputIm, nameof(outputIm)); + Contracts.CheckParam(length > 0, nameof(length), "The length parameter must be greater than 0."); + Contracts.Check(inputRe.Length >= length && inputIm.Length >= length && outputRe.Length >= length && outputIm.Length >= length, + "The lengths of inputRe, inputIm, outputRe and outputIm need to be at least equal to the length parameter."); + + int status = 0; // DFTI_NO_ERROR + IntPtr descriptor = default(IntPtr); + + try + { + status = CreateDescriptor(out descriptor, ConfigValue.Double, ConfigValue.Complex, 1, length); + CheckStatus(status); + + status = SetValue(descriptor, ConfigParam.Placement, ConfigValue.NotInPlace); + CheckStatus(status); + + status = SetValue(descriptor, ConfigParam.ComplexStorage, ConfigValue.RealReal); + CheckStatus(status); + + status = CommitDescriptor(descriptor); + CheckStatus(status); + + status = ComputeForward(descriptor, inputRe, inputIm, outputRe, outputIm); + CheckStatus(status); + } + finally + { + if (descriptor != null) + FreeDescriptor(ref descriptor); + } + } + + /// + /// Computes the backward (inverse) Fast Fourier Transform of the input series in double precision. + /// + /// The real part of the input series + /// The imaginary part of the input series + /// The real part of the output series + /// The imaginary part of the output series + /// + public static void ComputeBackwardFft(double[] inputRe, double[] inputIm, double[] outputRe, double[] outputIm, int length) + { + Contracts.CheckValue(inputRe, nameof(inputRe)); + Contracts.CheckValue(inputIm, nameof(inputIm)); + Contracts.CheckValue(outputRe, nameof(outputRe)); + Contracts.CheckValue(outputIm, nameof(outputIm)); + Contracts.CheckParam(length > 0, nameof(length), "The length parameter must be greater than 0."); + Contracts.Check(inputRe.Length >= length && inputIm.Length >= length && outputRe.Length >= length && outputIm.Length >= length, + "The lengths of inputRe, inputIm, outputRe and outputIm need to be at least equal to the length parameter."); + + int status = 0; // DFTI_NO_ERROR + IntPtr descriptor = default(IntPtr); + double scale = 1.0 / length; + + try + { + status = CreateDescriptor(out descriptor, ConfigValue.Double, ConfigValue.Complex, 1, length); + CheckStatus(status); + + status = SetValue(descriptor, ConfigParam.Placement, ConfigValue.NotInPlace); + CheckStatus(status); + + status = SetValue(descriptor, ConfigParam.ComplexStorage, ConfigValue.RealReal); + CheckStatus(status); + + status = CommitDescriptor(descriptor); + CheckStatus(status); + + status = ComputeBackward(descriptor, inputRe, inputIm, outputRe, outputIm); + CheckStatus(status); + } + finally + { + if (descriptor != null) + FreeDescriptor(ref descriptor); + } + + // REVIEW: for some reason the native backward scaling for DFTI in MKL does not work. + // Therefore here, we manually re-scale the output. + // Ideally, the command + // status = SetValue(descriptor, ConfigParam.BackwardScale, __arglist(scale)); + // should do the backward rescaling but for some reason it does not work and needs further investigation. + for (int i = 0; i < length; ++i) + { + outputRe[i] *= scale; + outputIm[i] *= scale; + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/ISequenceModeler.cs b/src/Microsoft.ML.TimeSeries/ISequenceModeler.cs new file mode 100644 index 0000000000..5ee0c01711 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/ISequenceModeler.cs @@ -0,0 +1,71 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// The base container class for the forecast result on a sequence of type . + /// + /// The type of the elements in the sequence + public abstract class ForecastResultBase + { + public VBuffer PointForecast; + } + + /// + /// The standard interface for modeling a sequence. + /// + /// The type of the elements in the input sequence + /// The type of the elements in the output sequence + public interface ISequenceModeler : ICanSaveModel + { + /// + /// Initializes the state of the modeler + /// + void InitState(); + + /// + /// Consumes one element from the input sequence. + /// + /// An element in the sequence + /// determines whether the sequence model should be updated according to the input + void Consume(ref TInput input, bool updateModel = false); + + /// + /// Trains the sequence model on a given sequence. + /// + /// The input sequence used for training + void Train(FixedSizeQueue data); + + /// + /// Trains the sequence model on a given sequence. The method accepts an object of RoleMappedData, + /// and assumes the input column is the 'Feature' column of type TInput. + /// + /// The input sequence used for training + void Train(RoleMappedData data); + + /// + /// Forecasts the next 'horizon' elements in the output sequence. + /// + /// The forecast result for the given horizon along with optional information depending on the algorithm + /// The forecast horizon + void Forecast(ref ForecastResultBase result, int horizon = 1); + + /// + /// Predicts the next element in the output sequence. + /// + /// The output ref parameter the will contain the prediction result + void PredictNext(ref TOutput output); + + /// + /// Creates a clone of the model. + /// + /// A clone of the object + ISequenceModeler Clone(); + } +} diff --git a/src/Microsoft.ML.TimeSeries/IidAnomalyDetectionBase.cs b/src/Microsoft.ML.TimeSeries/IidAnomalyDetectionBase.cs new file mode 100644 index 0000000000..bb14178827 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/IidAnomalyDetectionBase.cs @@ -0,0 +1,60 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// This transform computes the p-values and martingale scores for a supposedly i.i.d input sequence of floats. In other words, it assumes + /// the input sequence represents the raw anomaly score which might have been computed via another process. + /// + public abstract class IidAnomalyDetectionBase : SequentialAnomalyDetectionTransformBase + { + public IidAnomalyDetectionBase(ArgumentsBase args, string name, IHostEnvironment env, IDataView input) + : base(args, name, env, input) + { + InitialWindowSize = 0; + } + + public IidAnomalyDetectionBase(IHostEnvironment env, ModelLoadContext ctx, string name, IDataView input) + : base(env, ctx, name, input) + { + Host.CheckDecode(InitialWindowSize == 0); + } + + public override void Save(ModelSaveContext ctx) + { + ctx.CheckAtModel(); + Host.Assert(InitialWindowSize == 0); + + // *** Binary format *** + // + + base.Save(ctx); + } + + public sealed class State : AnomalyDetectionStateBase + { + protected override void LearnStateFromDataCore(FixedSizeQueue data) + { + // This method is empty because there is no need for initial tuning for this transform. + } + + protected override void InitializeAnomalyDetector() + { + // This method is empty because there is no need for any extra initialization for this transform. + } + + protected override double ComputeRawAnomalyScore(ref Single input, FixedSizeQueue windowedBuffer, long iteration) + { + // This transform treats the input sequenence as the raw anomaly score. + return (double)input; + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/IidChangePointDetector.cs b/src/Microsoft.ML.TimeSeries/IidChangePointDetector.cs new file mode 100644 index 0000000000..909bbc390c --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/IidChangePointDetector.cs @@ -0,0 +1,147 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.EntryPoints; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(IidChangePointDetector.Summary, typeof(IidChangePointDetector), typeof(IidChangePointDetector.Arguments), typeof(SignatureDataTransform), + IidChangePointDetector.UserName, IidChangePointDetector.LoaderSignature, IidChangePointDetector.ShortName)] +[assembly: LoadableClass(IidChangePointDetector.Summary, typeof(IidChangePointDetector), null, typeof(SignatureLoadDataTransform), + IidChangePointDetector.UserName, IidChangePointDetector.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// This class implements the change point detector transform for an i.i.d. sequence based on adaptive kernel density estimation and martingales. + /// + public sealed class IidChangePointDetector : IidAnomalyDetectionBase, ITransformTemplate + { + internal const string Summary = "This transform detects the change-points in an i.i.d. sequence using adaptive kernel density estimation and martingales."; + public const string LoaderSignature = "IidChangePointDetector"; + public const string UserName = "IID Change Point Detection"; + public const string ShortName = "ichgpnt"; + + public sealed class Arguments : TransformInputBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column.", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column.", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The change history length.", ShortName = "wnd", + SortOrder = 102)] + public int ChangeHistoryLength = 20; + + [Argument(ArgumentType.Required, HelpText = "The confidence for change point detection in the range [0, 100].", + ShortName = "cnf", SortOrder = 3)] + public double Confidence = 95; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The martingale used for scoring.", ShortName = "mart", SortOrder = 103)] + public MartingaleType Martingale = SequentialAnomalyDetectionTransformBase.MartingaleType.Power; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The epsilon parameter for the Power martingale.", + ShortName = "eps", SortOrder = 104)] + public double PowerMartingaleEpsilon = 0.1; + } + + private sealed class BaseArguments : ArgumentsBase + { + public BaseArguments(Arguments args) + { + Source = args.Source; + Name = args.Name; + Side = SequentialAnomalyDetectionTransformBase.AnomalySide.TwoSided; + WindowSize = args.ChangeHistoryLength; + Martingale = args.Martingale; + PowerMartingaleEpsilon = args.PowerMartingaleEpsilon; + AlertOn = SequentialAnomalyDetectionTransformBase.AlertingScore.MartingaleScore; + } + + public BaseArguments(IidChangePointDetector transform) + { + Source = transform.InputColumnName; + Name = transform.OutputColumnName; + Side = AnomalySide.TwoSided; + WindowSize = transform.WindowSize; + Martingale = transform.Martingale; + PowerMartingaleEpsilon = transform.PowerMartingaleEpsilon; + AlertOn = AlertingScore.MartingaleScore; + AlertThreshold = transform.AlertThreshold; + } + } + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo(modelSignature: "ICHGTRNS", + verWrittenCur: 0x00010001, // Initial + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(IidChangePointDetector).Assembly.FullName); + } + + public IidChangePointDetector(IHostEnvironment env, Arguments args, IDataView input) + : base(new BaseArguments(args), LoaderSignature, env, input) + { + switch (Martingale) + { + case MartingaleType.None: + AlertThreshold = Double.MaxValue; + break; + case MartingaleType.Power: + AlertThreshold = Math.Exp(WindowSize * LogPowerMartigaleBettingFunc(1 - args.Confidence / 100, PowerMartingaleEpsilon)); + break; + case MartingaleType.Mixture: + AlertThreshold = Math.Exp(WindowSize * LogMixtureMartigaleBettingFunc(1 - args.Confidence / 100)); + break; + default: + throw Host.ExceptParam(nameof(args.Martingale), + "The martingale type can be only (0) None, (1) Power or (2) Mixture."); + } + } + + public IidChangePointDetector(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature, input) + { + // *** Binary format *** + // + + Host.CheckDecode(ThresholdScore == AlertingScore.MartingaleScore); + Host.CheckDecode(Side == AnomalySide.TwoSided); + } + + private IidChangePointDetector(IHostEnvironment env, IidChangePointDetector transform, IDataView newSource) + : base(new BaseArguments(transform), LoaderSignature, env, newSource) + { + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + Host.Assert(ThresholdScore == AlertingScore.MartingaleScore); + Host.Assert(Side == AnomalySide.TwoSided); + + // *** Binary format *** + // + + base.Save(ctx); + } + + public IDataTransform ApplyToData(IHostEnvironment env, IDataView newSource) + { + return new IidChangePointDetector(env, this, newSource); + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/IidSpikeDetector.cs b/src/Microsoft.ML.TimeSeries/IidSpikeDetector.cs new file mode 100644 index 0000000000..f4d30c8696 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/IidSpikeDetector.cs @@ -0,0 +1,126 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.EntryPoints; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(IidSpikeDetector.Summary, typeof(IidSpikeDetector), typeof(IidSpikeDetector.Arguments), typeof(SignatureDataTransform), + IidSpikeDetector.UserName, IidSpikeDetector.LoaderSignature, IidSpikeDetector.ShortName)] +[assembly: LoadableClass(IidSpikeDetector.Summary, typeof(IidSpikeDetector), null, typeof(SignatureLoadDataTransform), + IidSpikeDetector.UserName, IidSpikeDetector.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// This class implements the spike detector transform for an i.i.d. sequence based on adaptive kernel density estimation. + /// + public sealed class IidSpikeDetector : IidAnomalyDetectionBase, ITransformTemplate + { + internal const string Summary = "This transform detects the spikes in a i.i.d. sequence using adaptive kernel density estimation."; + public const string LoaderSignature = "IidSpikeDetector"; + public const string UserName = "IID Spike Detection"; + public const string ShortName = "ispike"; + + public sealed class Arguments : TransformInputBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column.", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column.", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The argument that determines whether to detect positive or negative anomalies, or both.", ShortName = "side", + SortOrder = 101)] + public AnomalySide Side = AnomalySide.TwoSided; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the sliding window for computing the p-value.", ShortName = "wnd", + SortOrder = 102)] + public int PvalueHistoryLength = 100; + + [Argument(ArgumentType.Required, HelpText = "The confidence for spike detection in the range [0, 100].", + ShortName = "cnf", SortOrder = 3)] + public double Confidence = 99; + } + + private sealed class BaseArguments : ArgumentsBase + { + public BaseArguments(Arguments args) + { + Source = args.Source; + Name = args.Name; + Side = args.Side; + WindowSize = args.PvalueHistoryLength; + AlertThreshold = 1 - args.Confidence / 100; + AlertOn = SequentialAnomalyDetectionTransformBase.AlertingScore.PValueScore; + Martingale = MartingaleType.None; + } + + public BaseArguments(IidSpikeDetector transform) + { + Source = transform.InputColumnName; + Name = transform.OutputColumnName; + Side = transform.Side; + WindowSize = transform.WindowSize; + AlertThreshold = transform.AlertThreshold; + AlertOn = AlertingScore.PValueScore; + Martingale = MartingaleType.None; + } + } + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo( + modelSignature: "ISPKTRNS", + verWrittenCur: 0x00010001, // Initial + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(IidSpikeDetector).Assembly.FullName); + } + + public IidSpikeDetector(IHostEnvironment env, Arguments args, IDataView input) + : base(new BaseArguments(args), LoaderSignature, env, input) + { + // This constructor is empty. + } + + public IidSpikeDetector(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature, input) + { + // *** Binary format *** + // + + Host.CheckDecode(ThresholdScore == AlertingScore.PValueScore); + } + private IidSpikeDetector(IHostEnvironment env, IidSpikeDetector transform, IDataView newSource) + : base(new BaseArguments(transform), LoaderSignature, env, newSource) + { + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + Host.Assert(ThresholdScore == AlertingScore.PValueScore); + + // *** Binary format *** + // + + base.Save(ctx); + } + + public IDataTransform ApplyToData(IHostEnvironment env, IDataView newSource) + { + return new IidSpikeDetector(env, this, newSource); + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.csproj b/src/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.csproj new file mode 100644 index 0000000000..09ce1d5758 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/Microsoft.ML.TimeSeries.csproj @@ -0,0 +1,14 @@ + + + + netstandard2.0 + Microsoft.ML.TimeSeries + + + + + + + + + diff --git a/src/Microsoft.ML.TimeSeries/MovingAverageTransform.cs b/src/Microsoft.ML.TimeSeries/MovingAverageTransform.cs new file mode 100644 index 0000000000..c326492a02 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/MovingAverageTransform.cs @@ -0,0 +1,299 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Linq; +using System.Collections.Generic; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(MovingAverageTransform.Summary, typeof(MovingAverageTransform), typeof(MovingAverageTransform.Arguments), typeof(SignatureDataTransform), + "Moving Average Transform", MovingAverageTransform.LoaderSignature, "MoAv")] +[assembly: LoadableClass(MovingAverageTransform.Summary, typeof(MovingAverageTransform), null, typeof(SignatureLoadDataTransform), + "Moving Average Transform", MovingAverageTransform.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// MovingAverageTransform is a weighted average of the values in + /// the sliding window. + /// + public sealed class MovingAverageTransform : SequentialTransformBase + { + public const string Summary = "Applies a moving average on a time series. Only finite values are taken into account."; + public const string LoaderSignature = "MovingAverageTransform"; + + public sealed class Arguments + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column", ShortName = "name", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the sliding window for computing the moving average", ShortName = "wnd", SortOrder = 3)] + public int WindowSize = 2; + + [Argument(ArgumentType.AtMostOnce, HelpText = "Lag between current observation and last observation from the sliding window", ShortName = "l", SortOrder = 4)] + public int Lag = 1; + + [Argument(ArgumentType.AtMostOnce, HelpText = "(optional) Comma separated list of weights, the first weight is applied to the oldest value. " + + "An empty value will be replaced by uniform weights.", + ShortName = "w", SortOrder = 5)] + public string Weights = null; + } + + private int _lag; + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo( + modelSignature: "MOAVTRNS", + verWrittenCur: 0x00010001, + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(MovingAverageTransform).Assembly.FullName); + } + + // _weights is null means a uniform moving average is computed. + private readonly Single[] _weights; + + public MovingAverageTransform(IHostEnvironment env, Arguments args, IDataView input) + : base(args.WindowSize + args.Lag - 1, args.WindowSize + args.Lag - 1, args.Source, args.Name, LoaderSignature, env, input) + { + Host.CheckUserArg(args.WindowSize >= 1, nameof(args.WindowSize), "Should be at least 1."); + Host.CheckUserArg(args.Lag >= 0, nameof(args.Lag), "Should be positive."); + Host.CheckUserArg(args.Lag != 0 || args.WindowSize > 1, nameof(args.Lag), + "If lag=0 and wnd=1, the transform just copies the column. Use CopyColumn instead."); + _weights = string.IsNullOrWhiteSpace(args.Weights) ? null : args.Weights.Split(',').Select(c => Convert.ToSingle(c)).ToArray(); + if (_weights != null && _weights.Length != args.WindowSize) + throw Host.ExceptUserArg(nameof(args.Weights), string.Format("{0} weights are provided, but {1} are expected (or none)'", Utils.Size(_weights), args.WindowSize)); + _lag = args.Lag; + } + + public MovingAverageTransform(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature, input) + { + // *** Binary format *** + // + // int: lag + // Single[]: _weights + + _lag = ctx.Reader.ReadInt32(); + _weights = ctx.Reader.ReadFloatArray(); + + Host.CheckDecode(WindowSize >= 1); + Host.CheckDecode(_weights == null || Utils.Size(_weights) == WindowSize + 1 - _lag); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + Host.Assert(WindowSize >= 1); + Host.Assert(_lag >= 0); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + // *** Binary format *** + // + // int: _lag + // Single[]: _weights + + base.Save(ctx); + ctx.Writer.Write(_lag); + Host.Assert(_weights == null || Utils.Size(_weights) == WindowSize + 1 - _lag); + ctx.Writer.WriteFloatArray(_weights); + } + + private static Single ComputeMovingAverageUniformInitialisation(FixedSizeQueue others, Single input, int lag, + Single lastDropped, ref Single currentSum, + ref int nbNanValues) + { + Single sumValues = 0; + nbNanValues = 0; + int n; + if (lag == 0) + { + if (Single.IsNaN(input)) + nbNanValues = 1; + else + sumValues = input; + n = others.Count; + } + else + n = others.Count - lag + 1; + + for (int i = 0; i < n; ++i) + { + if (Single.IsNaN(others[i])) + ++nbNanValues; + else + sumValues += others[i]; + } + int nb = others.Count + 1 - nbNanValues; + currentSum = sumValues; + return nb == 0 ? Single.NaN : sumValues / nb; + } + + public static Single ComputeMovingAverageNonUniform(FixedSizeQueue others, Single input, Single[] weights, int lag) + { + Single sumWeights = 0; + Single sumValues = 0; + int n; + if (lag == 0) + { + if (!Single.IsNaN(input)) + { + sumWeights = weights[weights.Length - 1]; + sumValues = sumWeights * input; + } + n = others.Count; + } + else + n = others.Count - lag + 1; + + for (int i = 0; i < n; ++i) + { + if (!Single.IsNaN(others[i])) + { + sumWeights += weights[i]; + sumValues += weights[i] * others[i]; + } + } + return sumWeights != 0 ? sumValues / sumWeights : Single.NaN; + } + + /// + /// Possible returns: + /// + /// Finite Value: no infinite value in the sliding window and at least a non NaN value + /// NaN value: only NaN values in the sliding window or +/- Infinite + /// Inifinite value: one infinite value in the sliding window (sign is no relevant) + /// + public static Single ComputeMovingAverageUniform(FixedSizeQueue others, Single input, int lag, + Single lastDropped, ref Single currentSum, + ref bool initUniformMovingAverage, + ref int nbNanValues) + { + if (initUniformMovingAverage) + { + initUniformMovingAverage = false; + return ComputeMovingAverageUniformInitialisation(others, input, lag, + lastDropped, ref currentSum, ref nbNanValues); + } + else + { + if (Single.IsNaN(lastDropped)) + --nbNanValues; + else if (!FloatUtils.IsFinite(lastDropped)) + // One infinite value left, + // we need to recompute everything as we don't know how many infinite values are in the sliding window. + return ComputeMovingAverageUniformInitialisation(others, input, lag, + lastDropped, ref currentSum, ref nbNanValues); + else + currentSum -= lastDropped; + + // lastDropped is finite + Contracts.Assert(FloatUtils.IsFinite(lastDropped) || Single.IsNaN(lastDropped)); + + var newValue = lag == 0 ? input : others[others.Count - lag]; + if (!Single.IsNaN(newValue) && !FloatUtils.IsFinite(newValue)) + // One infinite value entered, + // we need to recompute everything as we don't know how many infinite values are in the sliding window. + return ComputeMovingAverageUniformInitialisation(others, input, lag, + lastDropped, ref currentSum, ref nbNanValues); + + // lastDropped is finite and input is finite or NaN + Contracts.Assert(FloatUtils.IsFinite(newValue) || Single.IsNaN(newValue)); + + if (!Single.IsNaN(currentSum) && !FloatUtils.IsFinite(currentSum)) + { + if (Single.IsNaN(newValue)) + { + ++nbNanValues; + return currentSum; + } + else + return FloatUtils.IsFinite(newValue) ? currentSum : (currentSum + newValue); + } + + // lastDropped is finite, input is finite or NaN, currentSum is finite or NaN + Contracts.Assert(FloatUtils.IsFinite(currentSum) || Single.IsNaN(currentSum)); + + if (Single.IsNaN(newValue)) + { + ++nbNanValues; + int nb = (lag == 0 ? others.Count + 1 : others.Count - lag + 1) - nbNanValues; + return nb == 0 ? Single.NaN : currentSum / nb; + } + else + { + int nb = lag == 0 ? others.Count + 1 - nbNanValues : others.Count + 1 - nbNanValues - lag; + currentSum += input; + return nb == 0 ? Single.NaN : currentSum / nb; + } + } + } + + public sealed class State : StateBase + { + private Single[] _weights; + private int _lag; + + // This is only needed when we compute a uniform moving average. + // A temptation could be to extend the buffer size but then the moving average would + // start producing values 1 iteration later than expected. + private Single _lastDroppedValue; + private Single _currentSum; + + // When the moving average is uniform, the computational is incremental, + // except for the first iteration or after encountering infinities. + private bool _initUniformMovingAverage; + + // When the moving aveage is uniform, we need to remember how many NA values + // take part of the computation. + private int _nbNanValues; + + protected override void SetNaOutput(ref Single output) + { + output = Single.NaN; + } + + /// + /// input is not included + /// + /// + /// + /// + /// + protected override void TransformCore(ref Single input, FixedSizeQueue windowedBuffer, long iteration, ref Single output) + { + if (_weights == null) + output = ComputeMovingAverageUniform(windowedBuffer, input, _lag, _lastDroppedValue, ref _currentSum, ref _initUniformMovingAverage, ref _nbNanValues); + else + output = ComputeMovingAverageNonUniform(windowedBuffer, input, _weights, _lag); + _lastDroppedValue = windowedBuffer[0]; + } + + protected override void InitializeStateCore() + { + _weights = ((MovingAverageTransform)ParentTransform)._weights; + _lag = ((MovingAverageTransform)ParentTransform)._lag; + _initUniformMovingAverage = true; + } + + protected override void LearnStateFromDataCore(FixedSizeQueue data) + { + // This method is empty because there is no need for parameter learning from the initial windowed buffer for this transform. + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/PValueTransform.cs b/src/Microsoft.ML.TimeSeries/PValueTransform.cs new file mode 100644 index 0000000000..b6490de3c7 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/PValueTransform.cs @@ -0,0 +1,146 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.EntryPoints; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(PValueTransform.Summary, typeof(PValueTransform), typeof(PValueTransform.Arguments), typeof(SignatureDataTransform), + PValueTransform.UserName, PValueTransform.LoaderSignature, PValueTransform.ShortName)] +[assembly: LoadableClass(PValueTransform.Summary, typeof(PValueTransform), null, typeof(SignatureLoadDataTransform), + PValueTransform.UserName, PValueTransform.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// PValueTransform is a sequential transform that computes the empirical p-value of the current value in the series based on the other values in + /// the sliding window. + /// + public sealed class PValueTransform : SequentialTransformBase + { + internal const string Summary = "This P-Value transform calculates the p-value of the current input in the sequence with regard to the values in the sliding window."; + public const string LoaderSignature = "PValueTransform"; + public const string UserName = "p-Value Transform"; + public const string ShortName = "PVal"; + + public sealed class Arguments : TransformInputBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column", ShortName = "name", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The seed value of the random generator", ShortName = "seed", + SortOrder = 3)] + public int Seed = 0; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The flag that determines whether the p-values are calculated on the positive side", ShortName = "pos", + SortOrder = 4)] + public bool PositiveSide = true; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the sliding window for computing the p-value", ShortName = "wnd", + SortOrder = 5)] + public int WindowSize = 1; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the initial window for computing the p-value. The default value is set to 0, which means there is no initial window considered.", + ShortName = "initwnd", SortOrder = 6)] + public int InitialWindowSize = 0; + } + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo( + modelSignature: "PVALTRNS", + verWrittenCur: 0x00010001, // Initial + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(PValueTransform).Assembly.FullName); + } + + private readonly int _seed; + private readonly bool _isPositiveSide; + + public PValueTransform(IHostEnvironment env, Arguments args, IDataView input) + : base(args.WindowSize, args.InitialWindowSize, args.Source, args.Name, LoaderSignature, env, input) + { + Host.CheckUserArg(args.WindowSize >= 1, nameof(args.WindowSize), "The size of the sliding window should be at least 1."); + _seed = args.Seed; + _isPositiveSide = args.PositiveSide; + } + + public PValueTransform(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature, input) + { + // *** Binary format *** + // int: _percentile + // byte: _isPositiveSide + + _seed = ctx.Reader.ReadInt32(); + _isPositiveSide = ctx.Reader.ReadBoolByte(); + Host.CheckDecode(WindowSize >= 1); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + Host.Assert(WindowSize >= 1); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + // *** Binary format *** + // + // int: _percentile + // byte: _isPositiveSide + + base.Save(ctx); + ctx.Writer.Write(_seed); + ctx.Writer.WriteBoolByte(_isPositiveSide); + } + + public sealed class State : StateBase + { + private IRandom _randomGen; + + private PValueTransform _parent; + + protected override void SetNaOutput(ref Single dst) + { + dst = Single.NaN; + } + + protected override void TransformCore(ref Single input, FixedSizeQueue windowedBuffer, long iteration, ref Single dst) + { + int count; + int equalCount; + int totalCount; + + PercentileThresholdTransform.CountGreaterOrEqualValues(windowedBuffer, input, out count, out equalCount, out totalCount); + count = (_parent._isPositiveSide) ? count : totalCount - count - equalCount; + + dst = (Single)((count + _randomGen.NextDouble() * equalCount) / (totalCount + 1)); + // Based on the equation in http://arxiv.org/pdf/1204.3251.pdf + } + + protected override void InitializeStateCore() + { + _parent = (PValueTransform)ParentTransform; + _randomGen = RandomUtils.Create(_parent._seed); + } + + protected override void LearnStateFromDataCore(FixedSizeQueue data) + { + // This method is empty because there is no need for parameter learning from the initial windowed buffer for this transform. + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/PercentileThresholdTransform.cs b/src/Microsoft.ML.TimeSeries/PercentileThresholdTransform.cs new file mode 100644 index 0000000000..9d771ef21a --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/PercentileThresholdTransform.cs @@ -0,0 +1,159 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.EntryPoints; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(PercentileThresholdTransform.Summary, typeof(PercentileThresholdTransform), typeof(PercentileThresholdTransform.Arguments), typeof(SignatureDataTransform), + PercentileThresholdTransform.UserName, PercentileThresholdTransform.LoaderSignature, PercentileThresholdTransform.ShortName)] +[assembly: LoadableClass(PercentileThresholdTransform.Summary, typeof(PercentileThresholdTransform), null, typeof(SignatureLoadDataTransform), + PercentileThresholdTransform.UserName, PercentileThresholdTransform.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// PercentileThresholdTransform is a sequential transform that decides whether the current value of the time-series belongs to the 'percentile' % of the top values in + /// the sliding window. The output of the transform will be a boolean flag. + /// + public sealed class PercentileThresholdTransform : SequentialTransformBase + { + public const string Summary = "Detects the values of time-series that are in the top percentile of the sliding window."; + public const string LoaderSignature = "PercentThrTransform"; + public const string UserName = "Percentile Threshold Transform"; + public const string ShortName = "TopPcnt"; + + public sealed class Arguments : TransformInputBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column", ShortName = "name", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The percentile value for thresholding in the range [0, 100]", ShortName = "pcnt", + SortOrder = 3)] + public Double Percentile = 1; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the sliding window for computing the percentile threshold. " + + "The default value is set to 1.", ShortName = "wnd", + SortOrder = 4)] + public int WindowSize = 1; + } + + public const Double MinPercentile = 0; + public const Double MaxPercentile = 100; + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo( + modelSignature: "PCNTTRNS", + verWrittenCur: 0x00010001, // Initial + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(PercentileThresholdTransform).Assembly.FullName); + } + + private readonly Double _percentile; + + public PercentileThresholdTransform(IHostEnvironment env, Arguments args, IDataView input) + : base(args.WindowSize, args.WindowSize, args.Source, args.Name, LoaderSignature, env, input) + { + Host.CheckUserArg(args.WindowSize >= 1, nameof(args.WindowSize), "The size of the sliding window should be at least 1."); + Host.CheckUserArg(MinPercentile <= args.Percentile && args.Percentile <= MaxPercentile, nameof(args.Percentile), "The percentile value should be in [0, 100]."); + _percentile = args.Percentile; + } + + public PercentileThresholdTransform(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature,input) + { + // *** Binary format *** + // Double: _percentile + + _percentile = ctx.Reader.ReadDouble(); + + Host.CheckDecode(WindowSize >= 1); + Host.CheckDecode(MinPercentile <= _percentile && _percentile <= MaxPercentile); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + Host.Assert(MinPercentile <= _percentile && _percentile <= MaxPercentile); + Host.Assert(WindowSize >= 1); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + // *** Binary format *** + // + // Double: _percentile + + base.Save(ctx); + ctx.Writer.Write(_percentile); + } + + public static void CountGreaterOrEqualValues(FixedSizeQueue others, Single theValue, out int greaterVals, out int equalVals, out int totalVals) + { + // The current linear algorithm for counting greater and equal elements takes O(n), + // but it can be improved to O(log n) if a separate Binary Search Tree data structure is used. + + greaterVals = 1; + equalVals = 0; + totalVals = 0; + + var n = others.Count; + + for (int i = 0; i < n; ++i) + { + if (!Single.IsNaN(others[i])) + { + greaterVals += (others[i] > theValue) ? 1 : 0; + equalVals += (others[i] == theValue) ? 1 : 0; + totalVals++; + } + } + } + + public sealed class State : StateBase + { + /// + /// The number of elements in the top 'percentile' % of the top values. + /// + private PercentileThresholdTransform _parent; + + protected override void SetNaOutput(ref bool dst) + { + dst = false; + } + + protected override void TransformCore(ref Single input, FixedSizeQueue windowedBuffer, long iteration, ref bool dst) + { + int greaterCount; + int equalCount; + int totalCount; + + CountGreaterOrEqualValues(windowedBuffer, input, out greaterCount, out equalCount, out totalCount); + dst = greaterCount < (int)(_parent._percentile * totalCount / 100); + } + + protected override void InitializeStateCore() + { + _parent = (PercentileThresholdTransform)ParentTransform; + } + + protected override void LearnStateFromDataCore(FixedSizeQueue data) + { + // This method is empty because there is no need for parameter learning from the initial windowed buffer for this transform. + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/PolynomialUtils.cs b/src/Microsoft.ML.TimeSeries/PolynomialUtils.cs new file mode 100644 index 0000000000..6c3f27907d --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/PolynomialUtils.cs @@ -0,0 +1,392 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Numerics; +using Microsoft.ML.Runtime.Internal.Utilities; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + public static class PolynomialUtils + { + // Part 1: Computing the polynomial real and complex roots from its real coefficients + + private static Double _tol; + + private static bool IsZero(double x) + { + return Math.Abs(x) <= _tol; + } + + internal static void FindQuadraticRoots(Double b, Double c, out Complex root1, out Complex root2) + { + var delta = b * b - 4 * c; + var sqrtDelta = Math.Sqrt(Math.Abs(delta)); + + if (delta >= 0) + { + root1 = new Complex((-b + sqrtDelta) / 2, 0); + root2 = new Complex((-b - sqrtDelta) / 2, 0); + } + else + { + root1 = new Complex(-b / 2, sqrtDelta / 2); + root2 = new Complex(-b / 2, -sqrtDelta / 2); + } + } + + private static void CreateFullCompanionMatrix(Double[] coefficients, ref Double[] companionMatrix) + { + Contracts.Assert(Utils.Size(coefficients) > 1); + + var n = coefficients.Length; + var n2 = n * n; + if (Utils.Size(companionMatrix) < n2) + companionMatrix = new Double[n2]; + + int i; + for (i = 1; i <= n - 1; ++i) + companionMatrix[n * (i - 1) + i] = 1; + + for (i = 0; i < n; ++i) + companionMatrix[n2 - n + i] = -coefficients[i]; + } + + /// + /// Computes the real and the complex roots of a real monic polynomial represented as: + /// coefficients[0] + coefficients[1] * X + coefficients[2] * X^2 + ... + coefficients[n-1] * X^(n-1) + X^n + /// by computing the eigenvalues of the Companion matrix. (https://en.wikipedia.org/wiki/Companion_matrix) + /// + /// The monic polynomial coefficients in the ascending order + /// The computed (complex) roots + /// The number decimal digits to keep after round-off + /// The machine precision + /// A boolean flag indicating whether the algorithm was successful. + public static bool FindPolynomialRoots(Double[] coefficients, ref Complex[] roots, + int roundOffDigits = 6, Double doublePrecision = 2.22 * 1e-100) + { + Contracts.CheckParam(doublePrecision > 0, nameof(doublePrecision), "The double precision must be positive."); + Contracts.CheckParam(Utils.Size(coefficients) >= 1, nameof(coefficients), "There must be at least one input coefficient."); + + int i; + int n = coefficients.Length; + bool result = true; + + _tol = doublePrecision; + + if (Utils.Size(roots) < n) + roots = new Complex[n]; + + // Extracting the zero roots + for (i = 0; i < n; ++i) + { + if (IsZero(coefficients[i])) + roots[n - i - 1] = Complex.Zero; + else + break; + } + + if (i == n) // All zero roots + return true; + + if (i == n - 1) // Handling the linear case + roots[0] = new Complex(-coefficients[i], 0); + else if (i == n - 2) // Handling the quadratic case + FindQuadraticRoots(coefficients[i + 1], coefficients[i], out roots[0], out roots[1]); + else // Handling higher-order cases by computing the eigenvalues of the Companion matrix + { + var coeff = coefficients; + if (i > 0) + { + coeff = new Double[n - i]; + Array.Copy(coefficients, i, coeff, 0, n - i); + } + + // REVIEW: the eigen decomposition of the companion matrix should be done using the FactorizedCompanionMatrix class + // instead of MKL. + //FactorizedCompanionMatrix companionMatrix = new FactorizedCompanionMatrix(coeff); + //result = companionMatrix.ComputeEigenValues(ref roots); + + Double[] companionMatrix = null; + var realPart = new Double[n - i]; + var imaginaryPart = new Double[n - i]; + var dummy = new Double[1]; + + CreateFullCompanionMatrix(coeff, ref companionMatrix); + var info = EigenUtils.Dhseqr(EigenUtils.Layout.ColMajor, EigenUtils.Job.EigenValues, EigenUtils.Compz.None, + n - i, 1, n - i, companionMatrix, n - i, realPart, imaginaryPart, dummy, n - i); + + if (info != 0) + return false; + + for (var j = 0; j < n - i; ++j) + roots[j] = new Complex(realPart[j], imaginaryPart[j]); + } + + return result; + } + + // Part 2: Computing the polynomial coefficients from its real and complex roots + private sealed class FactorMultiplicity + { + public int Multiplicity; + + public FactorMultiplicity(int multiplicity = 1) + { + Contracts.Assert(multiplicity > 0); + Multiplicity = multiplicity; + } + } + + private sealed class PolynomialFactor + { + public List Coefficients; + public static decimal[] Destination; + + private decimal _key; + public decimal Key { get { return _key; } } + + private void SetKey() + { + decimal absVal = -1; + for (var i = 0; i < Coefficients.Count; ++i) + { + var temp = Math.Abs(Coefficients[i]); + if (temp > absVal) + { + absVal = temp; + _key = Coefficients[i]; + } + } + } + + public PolynomialFactor(decimal[] coefficients) + { + Coefficients = new List(coefficients); + SetKey(); + } + + internal PolynomialFactor(decimal key) + { + _key = key; + } + + public void Multiply(PolynomialFactor factor) + { + var len = Coefficients.Count; + Coefficients.AddRange(factor.Coefficients); + + PolynomialMultiplication(0, len, len, factor.Coefficients.Count, 0, 1, 1); + + for (var i = 0; i < Coefficients.Count; ++i) + Coefficients[i] = Destination[i]; + + SetKey(); + } + + private void PolynomialMultiplication(int uIndex, int uLen, int vIndex, int vLen, int dstIndex, decimal uCoeff, decimal vCoeff) + { + Contracts.Assert(uIndex >= 0); + Contracts.Assert(uLen >= 1); + Contracts.Assert(uIndex + uLen <= Utils.Size(Coefficients)); + Contracts.Assert(vIndex >= 0); + Contracts.Assert(vLen >= 1); + Contracts.Assert(vIndex + vLen <= Utils.Size(Coefficients)); + Contracts.Assert(uIndex + uLen <= vIndex || vIndex + vLen <= uIndex); // makes sure the input ranges are non-overlapping. + Contracts.Assert(dstIndex >= 0); + Contracts.Assert(dstIndex + uLen + vLen <= Utils.Size(Destination)); + + if (uLen == 1 && vLen == 1) + { + Destination[dstIndex] = Coefficients[uIndex] * Coefficients[vIndex]; + Destination[dstIndex + 1] = Coefficients[uIndex] + Coefficients[vIndex]; + } + else + NaivePolynomialMultiplication(uIndex, uLen, vIndex, vLen, dstIndex, uCoeff, vCoeff); + } + + private void NaivePolynomialMultiplication(int uIndex, int uLen, int vIndex, int vLen, int dstIndex, decimal uCoeff, decimal vCoeff) + { + int i; + int j; + int a; + int b; + int c; + var len = uLen + vLen - 1; + decimal temp; + + if (vLen < uLen) + { + var t = vLen; + vLen = uLen; + uLen = t; + + t = vIndex; + vIndex = uIndex; + uIndex = t; + } + + for (i = 0; i <= len; ++i) + { + b = Math.Min(uLen, i + 1) - 1; + a = i >= Math.Max(uLen, vLen) ? len - i : b + 1; + c = Math.Max(0, i - uLen + 1); + temp = 0; + + if (i >= uLen) + temp = uCoeff * Coefficients[i - uLen + vIndex]; + + if (i >= vLen) + temp += (vCoeff * Coefficients[i - vLen + uIndex]); + + for (j = 0; j < a; ++j) + temp += (Coefficients[b - j + uIndex] * Coefficients[c + j + vIndex]); + + Destination[i + dstIndex] = temp; + } + } + } + + private sealed class ByMaximumCoefficient : IComparer + { + public int Compare(PolynomialFactor x, PolynomialFactor y) + { + if (x.Key > y.Key) + return 1; + + if (x.Key < y.Key) + return -1; + + return 0; + } + } + + /// + /// Computes the coefficients of a real monic polynomial given its real and complex roots. + /// The final monic polynomial is represented as: + /// coefficients[0] + coefficients[1] * X + coefficients[2] * X^2 + ... + coefficients[n-1] * X^(n-1) + X^n + /// + /// Note: the constant 1 coefficient of the highest degree term is implicit and not included in the output of the method. + /// + /// The input (complex) roots + /// The output real coefficients + /// A boolean flag indicating whether the algorithm was successful. + public static bool FindPolynomialCoefficients(Complex[] roots, ref Double[] coefficients) + { + Contracts.CheckParam(Utils.Size(roots) > 0, nameof(roots), "There must be at least 1 input root."); + + int i; + int n = roots.Length; + var hash = new Dictionary(); + int destinationOffset = 0; + + var factors = new List(); + + for (i = 0; i < n; ++i) + { + if (Double.IsNaN(roots[i].Real) || Double.IsNaN(roots[i].Imaginary)) + return false; + + if (roots[i].Equals(Complex.Zero)) // Zero roots + destinationOffset++; + else if (roots[i].Imaginary == 0) // Real roots + { + var f = new PolynomialFactor(new[] { (decimal)-roots[i].Real }); + factors.Add(f); + } + else // Complex roots + { + var conj = Complex.Conjugate(roots[i]); + FactorMultiplicity temp; + if (hash.TryGetValue(conj, out temp)) + { + temp.Multiplicity--; + + var f = new PolynomialFactor(new[] + { + (decimal) (roots[i].Real*roots[i].Real + roots[i].Imaginary*roots[i].Imaginary), + (decimal) (-2*roots[i].Real) + }); + + factors.Add(f); + + if (temp.Multiplicity <= 0) + hash.Remove(conj); + } + else + { + if (hash.TryGetValue(roots[i], out temp)) + temp.Multiplicity++; + else + hash.Add(roots[i], new FactorMultiplicity()); + } + } + } + + if (hash.Count > 0) + return false; + + var comparer = new ByMaximumCoefficient(); + + factors.Sort(comparer); + + if (destinationOffset < n - 1) + { + if (Utils.Size(PolynomialFactor.Destination) < n) + PolynomialFactor.Destination = new decimal[n]; + + while (factors.Count > 1) + { + var k1 = Math.Abs(factors.ElementAt(0).Key); + var k2 = Math.Abs(factors.ElementAt(factors.Count - 1).Key); + + PolynomialFactor f1; + if (k1 < k2) + { + f1 = factors.ElementAt(0); + factors.RemoveAt(0); + } + else + { + f1 = factors.ElementAt(factors.Count - 1); + factors.RemoveAt(factors.Count - 1); + } + + var ind = factors.BinarySearch(new PolynomialFactor(-f1.Key), comparer); + if (ind < 0) + ind = ~ind; + + ind = Math.Min(factors.Count - 1, ind); + var f2 = factors.ElementAt(ind); + factors.RemoveAt(ind); + + f1.Multiply(f2); + + ind = factors.BinarySearch(f1, comparer); + if (ind >= 0) + factors.Insert(ind, f1); + else + factors.Insert(~ind, f1); + } + } + + if (Utils.Size(coefficients) < n) + coefficients = new Double[n]; + + for (i = 0; i < destinationOffset; ++i) + coefficients[i] = 0; + + if (destinationOffset < n) + { + var coeff = factors.ElementAt(0).Coefficients; + for (i = destinationOffset; i < n; ++i) + coefficients[i] = Decimal.ToDouble(coeff[i - destinationOffset]); + } + + return true; + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/SequentialAnomalyDetectionTransformBase.cs b/src/Microsoft.ML.TimeSeries/SequentialAnomalyDetectionTransformBase.cs new file mode 100644 index 0000000000..a6eb78165c --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/SequentialAnomalyDetectionTransformBase.cs @@ -0,0 +1,655 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Collections.Generic; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Internal.CpuMath; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + // REVIEW: This base class and its children classes generate one output column of type VBuffer to output 3 different anomaly scores as well as + // the alert flag. Ideally these 4 output information should be put in four seaparate columns instead of one VBuffer<> column. However, this is not currently + // possible due to our design restriction. This must be fixed in the next version and will potentially affect the children classes. + + /// + /// The base class for sequential anomaly detection transforms that supports the p-value as well as the martingales scores computation from the sequence of + /// raw anomaly scores whose calculation is specified by the children classes. This class also provides mechanism for the threshold-based alerting on + /// the raw anomaly score, the p-value score or the martingale score. Currently, this class supports Power and Mixture martingales. + /// For more details, please refer to http://arxiv.org/pdf/1204.3251.pdf + /// + /// The type of the input sequence + /// The type of the state object for sequential anomaly detection. Must be a class inherited from AnomalyDetectionStateBase + public abstract class SequentialAnomalyDetectionTransformBase : SequentialTransformBase, TState> + where TState : SequentialAnomalyDetectionTransformBase.AnomalyDetectionStateBase, new() + { + /// + /// The type of the martingale. + /// + public enum MartingaleType : byte + { + /// + /// (None) No martingale is used. + /// + None, + /// + /// (Power) The Power martingale is used. + /// + Power, + /// + /// (Mixture) The Mixture martingale is used. + /// + Mixture + } + + /// + /// The side of anomaly detection. + /// + public enum AnomalySide : byte + { + /// + /// (Positive) Only positive anomalies are detected. + /// + Positive, + /// + /// (Negative) Only negative anomalies are detected. + /// + Negative, + /// + /// (TwoSided) Both positive and negative anomalies are detected. + /// + TwoSided + } + + /// + /// The score that should be thresholded to generate alerts. + /// + public enum AlertingScore : byte + { + /// + /// (RawScore) The raw anomaly score is thresholded. + /// + RawScore, + /// + /// (PValueScore) The p-value score is thresholded. + /// + PValueScore, + /// + /// (MartingaleScore) The martingale score is thresholded. + /// + MartingaleScore + } + + /// + /// The base class that can be inherited by the 'Argument' classes in the derived classes containing the shared input parameters. + /// + public abstract class ArgumentsBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column", ShortName = "name", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The argument that determines whether to detect positive or negative anomalies, or both", ShortName = "side", + SortOrder = 3)] + public AnomalySide Side = AnomalySide.TwoSided; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the sliding window for computing the p-value.", ShortName = "wnd", + SortOrder = 4)] + public int WindowSize = 1; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the initial window for computing the p-value as well as training if needed. The default value is set to 0, which means there is no initial window considered.", + ShortName = "initwnd", SortOrder = 5)] + public int InitialWindowSize = 0; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The martingale used for scoring", + ShortName = "martingale", SortOrder = 6)] + public MartingaleType Martingale = MartingaleType.Power; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The argument that determines whether anomalies should be detected based on the raw anomaly score, the p-value or the martingale score", + ShortName = "alert", SortOrder = 7)] + public AlertingScore AlertOn = AlertingScore.MartingaleScore; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The epsilon parameter for the Power martingale", + ShortName = "eps", SortOrder = 8)] + public Double PowerMartingaleEpsilon = 0.1; + + [Argument(ArgumentType.Required, HelpText = "The threshold for alerting", + ShortName = "thr", SortOrder = 9)] + public Double AlertThreshold; + } + + // Determines the side of anomaly detection for this transform. + protected AnomalySide Side; + + // Determines the type of martingale used by this transform. + protected MartingaleType Martingale; + + // The epsilon parameter used by the Power martingale. + protected Double PowerMartingaleEpsilon; + + // Determines the score that should be thresholded to generate alerts by this transform. + protected AlertingScore ThresholdScore; + + // Determines the threshold for generating alerts. + protected Double AlertThreshold; + + // The size of the VBuffer in the dst column. + private int _outputLength; + + private readonly SchemaImpl _wrappedSchema; + + public override ISchema Schema => _wrappedSchema; + + private static int GetOutputLength(AlertingScore alertingScore, IHostEnvironment host) + { + switch (alertingScore) + { + case AlertingScore.RawScore: + return 2; + case AlertingScore.PValueScore: + return 3; + case AlertingScore.MartingaleScore: + return 4; + default: + throw host.Except("The alerting score can be only (0) RawScore, (1) PValueScore or (2) MartingaleScore."); + } + } + + private static SchemaImpl CreateSchema(ISchema parentSchema, string colName, int length) + { + Contracts.AssertValue(parentSchema); + Contracts.Assert(2 <= length && length <= 4); + + string[] names = { "Alert", "Raw Score", "P-Value Score", "Martingale Score" }; + int col; + bool result = parentSchema.TryGetColumnIndex(colName, out col); + Contracts.Assert(result); + + return new SchemaImpl(parentSchema, col, names, length); + } + + protected SequentialAnomalyDetectionTransformBase(int windowSize, int initialWindowSize, string inputColumnName, string outputColumnName, string name, IHostEnvironment env, IDataView input, + AnomalySide anomalySide, MartingaleType martingale, AlertingScore alertingScore, Double powerMartingaleEpsilon, + Double alertThreshold) + : base(windowSize, initialWindowSize, inputColumnName, outputColumnName, name, env, input, new VectorType(NumberType.R8, GetOutputLength(alertingScore, env))) + { + Host.CheckUserArg(Enum.IsDefined(typeof(MartingaleType), martingale), nameof(ArgumentsBase.Martingale), "Value is undefined."); + Host.CheckUserArg(Enum.IsDefined(typeof(AnomalySide), anomalySide), nameof(ArgumentsBase.Side), "Value is undefined."); + Host.CheckUserArg(Enum.IsDefined(typeof(AlertingScore), alertingScore), nameof(ArgumentsBase.AlertOn), "Value is undefined."); + Host.CheckUserArg(martingale != MartingaleType.None || alertingScore != AlertingScore.MartingaleScore, nameof(ArgumentsBase.Martingale), "A martingale type should be specified if alerting is based on the martingale score."); + Host.CheckUserArg(windowSize > 0 || alertingScore == AlertingScore.RawScore, nameof(ArgumentsBase.AlertOn), + "When there is no windowed buffering (i.e., " + nameof(ArgumentsBase.WindowSize) + " = 0), the alert can be generated only based on the raw score (i.e., " + + nameof(ArgumentsBase.AlertOn) + " = " + nameof(AlertingScore.RawScore) + ")"); + Host.CheckUserArg(0 < powerMartingaleEpsilon && powerMartingaleEpsilon < 1, nameof(ArgumentsBase.PowerMartingaleEpsilon), "Should be in (0,1)."); + Host.CheckUserArg(alertThreshold >= 0, nameof(ArgumentsBase.AlertThreshold), "Must be non-negative."); + Host.CheckUserArg(alertingScore != AlertingScore.PValueScore || (0 <= alertThreshold && alertThreshold <= 1), nameof(ArgumentsBase.AlertThreshold), "Must be in [0,1]."); + + ThresholdScore = alertingScore; + Side = anomalySide; + Martingale = martingale; + PowerMartingaleEpsilon = powerMartingaleEpsilon; + AlertThreshold = alertThreshold; + _outputLength = GetOutputLength(ThresholdScore, Host); + _wrappedSchema = CreateSchema(base.Schema, outputColumnName, _outputLength); + } + + protected SequentialAnomalyDetectionTransformBase(ArgumentsBase args, string name, IHostEnvironment env, IDataView input) + : this(args.WindowSize, args.InitialWindowSize, args.Source, args.Name, name, env, input, args.Side, args.Martingale, + args.AlertOn, args.PowerMartingaleEpsilon, args.AlertThreshold) + { + } + + protected SequentialAnomalyDetectionTransformBase(IHostEnvironment env, ModelLoadContext ctx, string name, IDataView input) + : base(env, ctx, name, input) + { + // *** Binary format *** + // + // byte: _martingale + // byte: _alertingScore + // byte: _anomalySide + // Double: _powerMartingaleEpsilon + // Double: _alertThreshold + + byte temp; + temp = ctx.Reader.ReadByte(); + Host.CheckDecode(Enum.IsDefined(typeof(MartingaleType), temp)); + Martingale = (MartingaleType)temp; + + temp = ctx.Reader.ReadByte(); + Host.CheckDecode(Enum.IsDefined(typeof(AlertingScore), temp)); + ThresholdScore = (AlertingScore)temp; + + Host.CheckDecode(Martingale != MartingaleType.None || ThresholdScore != AlertingScore.MartingaleScore); + Host.CheckDecode(WindowSize > 0 || ThresholdScore == AlertingScore.RawScore); + + temp = ctx.Reader.ReadByte(); + Host.CheckDecode(Enum.IsDefined(typeof(AnomalySide), temp)); + Side = (AnomalySide)temp; + + PowerMartingaleEpsilon = ctx.Reader.ReadDouble(); + Host.CheckDecode(0 < PowerMartingaleEpsilon && PowerMartingaleEpsilon < 1); + + AlertThreshold = ctx.Reader.ReadDouble(); + Host.CheckDecode(AlertThreshold >= 0); + Host.CheckDecode(ThresholdScore != AlertingScore.PValueScore || (0 <= AlertThreshold && AlertThreshold <= 1)); + + _outputLength = GetOutputLength(ThresholdScore, Host); + _wrappedSchema = CreateSchema(base.Schema, OutputColumnName, _outputLength); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + ctx.CheckAtModel(); + + Host.Assert(Enum.IsDefined(typeof(MartingaleType), Martingale)); + Host.Assert(Enum.IsDefined(typeof(AlertingScore), ThresholdScore)); + Host.Assert(Martingale != MartingaleType.None || ThresholdScore != AlertingScore.MartingaleScore); + Host.Assert(WindowSize > 0 || ThresholdScore == AlertingScore.RawScore); + Host.Assert(Enum.IsDefined(typeof(AnomalySide), Side)); + Host.Assert(0 < PowerMartingaleEpsilon && PowerMartingaleEpsilon < 1); + Host.Assert(AlertThreshold >= 0); + Host.Assert(ThresholdScore != AlertingScore.PValueScore || (0 <= AlertThreshold && AlertThreshold <= 1)); + + // *** Binary format *** + // + // byte: _martingale + // byte: _alertingScore + // byte: _anomalySide + // Double: _powerMartingaleEpsilon + // Double: _alertThreshold + + base.Save(ctx); + ctx.Writer.Write((byte)Martingale); + ctx.Writer.Write((byte)ThresholdScore); + ctx.Writer.Write((byte)Side); + ctx.Writer.Write(PowerMartingaleEpsilon); + ctx.Writer.Write(AlertThreshold); + } + + // The minimum value for p-values. The smaller p-values are ceiled to this value. + private const Double MinPValue = 1e-8; + + // The maximun value for p-values. The larger p-values are floored to this value. + private const Double MaxPValue = 1 - MinPValue; + + /// + /// Calculates the betting function for the Power martingale in the log scale. + /// For more details, please refer to http://arxiv.org/pdf/1204.3251.pdf. + /// + /// The p-value + /// The epsilon + /// The Power martingale betting function value in the natural logarithmic scale. + protected Double LogPowerMartigaleBettingFunc(Double p, Double epsilon) + { + Host.Assert(MinPValue > 0); + Host.Assert(MaxPValue < 1); + Host.Assert(MinPValue <= p && p <= MaxPValue); + Host.Assert(0 < epsilon && epsilon < 1); + + return Math.Log(epsilon) + (epsilon - 1) * Math.Log(p); + } + + /// + /// Calculates the betting function for the Mixture martingale in the log scale. + /// For more details, please refer to http://arxiv.org/pdf/1204.3251.pdf. + /// + /// The p-value + /// The Mixure (marginalized over epsilon) martingale betting function value in the natural logarithmic scale. + protected Double LogMixtureMartigaleBettingFunc(Double p) + { + Host.Assert(MinPValue > 0); + Host.Assert(MaxPValue < 1); + Host.Assert(MinPValue <= p && p <= MaxPValue); + + Double logP = Math.Log(p); + return Math.Log(p * logP + 1 - p) - 2 * Math.Log(-logP) - logP; + } + + /// + /// The base state class for sequential anomaly detection: this class implements the p-values and martinagle calculations for anomaly detection + /// given that the raw anomaly score calculation is specified by the derived classes. + /// + public abstract class AnomalyDetectionStateBase : StateBase + { + // A reference to the parent transform. + protected SequentialAnomalyDetectionTransformBase Parent; + + // A windowed buffer to cache the update values to the martingale score in the log scale. + private FixedSizeQueue _logMartingaleUpdateBuffer; + + // A windowed buffer to cache the raw anomaly scores for p-value calculation. + private FixedSizeQueue _rawScoreBuffer; + + // The current martingale score in the log scale. + private Double _logMartingaleValue; + + // Sum of the squared Euclidean distances among the raw socres in the buffer. + // Used for computing the optimal bandwidth for Kernel Density Estimation of p-values. + private Double _sumSquaredDist; + + private int _martingaleAlertCounter; + + protected Double LatestMartingaleScore { + get { return Math.Exp(_logMartingaleValue); } + } + + private Double ComputeKernelPValue(Double rawScore) + { + int i; + int n = _rawScoreBuffer.Count; + + if (n == 0) + return 0.5; + + Double pValue = 0; + Double bandWidth = Math.Sqrt(2) * ((n == 1) ? 1 : Math.Sqrt(_sumSquaredDist) / n); + bandWidth = Math.Max(bandWidth, 1e-6); + + Double diff; + for (i = 0; i < n; ++i) + { + diff = rawScore - _rawScoreBuffer[i]; + pValue -= ProbabilityFunctions.Erf(diff / bandWidth); + _sumSquaredDist += diff * diff; + } + + pValue = 0.5 + pValue / (2 * n); + if (_rawScoreBuffer.IsFull) + { + for (i = 1; i < n; ++i) + { + diff = _rawScoreBuffer[0] - _rawScoreBuffer[i]; + _sumSquaredDist -= diff * diff; + } + + diff = _rawScoreBuffer[0] - rawScore; + _sumSquaredDist -= diff * diff; + } + + return pValue; + } + + protected override void SetNaOutput(ref VBuffer dst) + { + var values = dst.Values; + var outputLength = Parent._outputLength; + if (Utils.Size(values) < outputLength) + values = new Double[outputLength]; + + for (int i = 0; i < outputLength; ++i) + values[i] = Double.NaN; + + dst = new VBuffer(Utils.Size(values), values, dst.Indices); + } + + protected override sealed void TransformCore(ref TInput input, FixedSizeQueue windowedBuffer, long iteration, ref VBuffer dst) + { + var outputLength = Parent._outputLength; + Host.Assert(outputLength >= 2); + + var result = dst.Values; + if (Utils.Size(result) < outputLength) + result = new Double[outputLength]; + + float rawScore = 0; + + for (int i = 0; i < outputLength; ++i) + result[i] = Double.NaN; + + // Step 1: Computing the raw anomaly score + result[1] = ComputeRawAnomalyScore(ref input, windowedBuffer, iteration); + + if (Double.IsNaN(result[1])) + result[0] = 0; + else + { + if (WindowSize > 0) + { + // Step 2: Computing the p-value score + rawScore = (float)result[1]; + if (Parent.ThresholdScore == AlertingScore.RawScore) + { + switch (Parent.Side) + { + case AnomalySide.Negative: + rawScore = (float)(-result[1]); + break; + + case AnomalySide.Positive: + break; + + default: + rawScore = (float)Math.Abs(result[1]); + break; + } + } + else + { + result[2] = ComputeKernelPValue(rawScore); + + switch (Parent.Side) + { + case AnomalySide.Negative: + result[2] = 1 - result[2]; + break; + + case AnomalySide.Positive: + break; + + default: + result[2] = Math.Min(result[2], 1 - result[2]); + break; + } + + // Keeping the p-value in the safe range + if (result[2] < MinPValue) + result[2] = MinPValue; + else if (result[2] > MaxPValue) + result[2] = MaxPValue; + + _rawScoreBuffer.AddLast(rawScore); + + // Step 3: Computing the martingale value + if (Parent.Martingale != MartingaleType.None && Parent.ThresholdScore == AlertingScore.MartingaleScore) + { + Double martingaleUpdate = 0; + switch (Parent.Martingale) + { + case MartingaleType.Power: + martingaleUpdate = Parent.LogPowerMartigaleBettingFunc(result[2], Parent.PowerMartingaleEpsilon); + break; + + case MartingaleType.Mixture: + martingaleUpdate = Parent.LogMixtureMartigaleBettingFunc(result[2]); + break; + } + + if (_logMartingaleUpdateBuffer.Count == 0) + { + for (int i = 0; i < _logMartingaleUpdateBuffer.Capacity; ++i) + _logMartingaleUpdateBuffer.AddLast(martingaleUpdate); + _logMartingaleValue += _logMartingaleUpdateBuffer.Capacity * martingaleUpdate; + } + else + { + _logMartingaleValue += martingaleUpdate; + _logMartingaleValue -= _logMartingaleUpdateBuffer.PeekFirst(); + _logMartingaleUpdateBuffer.AddLast(martingaleUpdate); + } + + result[3] = Math.Exp(_logMartingaleValue); + } + } + } + + // Generating alert + bool alert = false; + + if (_rawScoreBuffer.IsFull) // No alert until the buffer is completely full. + { + switch (Parent.ThresholdScore) + { + case AlertingScore.RawScore: + alert = rawScore >= Parent.AlertThreshold; + break; + case AlertingScore.PValueScore: + alert = result[2] <= Parent.AlertThreshold; + break; + case AlertingScore.MartingaleScore: + alert = (Parent.Martingale != MartingaleType.None) && (result[3] >= Parent.AlertThreshold); + + if (alert) + { + if (_martingaleAlertCounter > 0) + alert = false; + else + _martingaleAlertCounter = Parent.WindowSize; + } + + _martingaleAlertCounter--; + _martingaleAlertCounter = _martingaleAlertCounter < 0 ? 0 : _martingaleAlertCounter; + break; + } + } + + result[0] = Convert.ToDouble(alert); + } + + dst = new VBuffer(outputLength, result, dst.Indices); + } + + protected override sealed void InitializeStateCore() + { + Parent = (SequentialAnomalyDetectionTransformBase)ParentTransform; + Host.Assert(WindowSize >= 0); + + if (Parent.Martingale != MartingaleType.None) + _logMartingaleUpdateBuffer = new FixedSizeQueue(WindowSize == 0 ? 1 : WindowSize); + + _rawScoreBuffer = new FixedSizeQueue(WindowSize == 0 ? 1 : WindowSize); + + _logMartingaleValue = 0; + InitializeAnomalyDetector(); + } + + /// + /// The abstract method that realizes the initialization functionality for the anomaly detector. + /// + protected abstract void InitializeAnomalyDetector(); + + /// + /// The abstract method that realizes the main logic for calculating the raw anomaly score bfor the current input given a windowed buffer + /// + /// A reference to the input object. + /// A reference to the windowed buffer. + /// A long number that indicates the number of times ComputeRawAnomalyScore has been called so far (starting value = 0). + /// The raw anomaly score for the input. The Assumption is the higher absolute value of the raw score, the more anomalous the input is. + /// The sign of the score determines whether it's a positive anomaly or a negative one. + protected abstract Double ComputeRawAnomalyScore(ref TInput input, FixedSizeQueue windowedBuffer, long iteration); + } + + /// + /// Schema implementation to add slot name metadata to the produced output column. + /// + private sealed class SchemaImpl : ISchema + { + private readonly ISchema _parent; + private readonly int _col; + private readonly ColumnType _type; + private readonly string[] _names; + private readonly int _namesLength; + private readonly MetadataUtils.MetadataGetter>> _getter; + + public int ColumnCount { get { return _parent.ColumnCount; } } + + /// + /// Constructs the schema. + /// + /// The schema we will wrap. + /// Aside from presenting that additional piece of metadata, the constructed schema + /// will appear identical to this input schema. + /// The column in that has the metadata. + /// + /// + public SchemaImpl(ISchema schema, int col, string[] names, int length) + { + Contracts.Assert(length > 0); + Contracts.Assert(Utils.Size(names) >= length); + Contracts.AssertValue(schema); + Contracts.Assert(0 <= col && col < schema.ColumnCount); + _parent = schema; + _col = col; + + _names = names; + _namesLength = length; + + _type = new VectorType(TextType.Instance, _namesLength); + Contracts.AssertValue(_type); + _getter = GetSlotNames; + } + + public bool TryGetColumnIndex(string name, out int col) + { + return _parent.TryGetColumnIndex(name, out col); + } + + public string GetColumnName(int col) + { + return _parent.GetColumnName(col); + } + + public ColumnType GetColumnType(int col) + { + return _parent.GetColumnType(col); + } + + public IEnumerable> GetMetadataTypes(int col) + { + var result = _parent.GetMetadataTypes(col); + if (col == _col) + return result.Prepend(_type.GetPair(MetadataUtils.Kinds.SlotNames)); + return result; + } + + public ColumnType GetMetadataTypeOrNull(string kind, int col) + { + if (col == _col && kind == MetadataUtils.Kinds.SlotNames) + return _type; + return _parent.GetMetadataTypeOrNull(kind, col); + } + + public void GetSlotNames(int col, ref VBuffer> slotNames) + { + Contracts.Assert(col == _col); + + var result = slotNames.Values; + if (Utils.Size(result) < _namesLength) + result = new ReadOnlyMemory[_namesLength]; + + for (int i = 0; i < _namesLength; ++i) + result[i] = _names[i].AsMemory(); + + slotNames = new VBuffer>(_namesLength, result, slotNames.Indices); + } + + public void GetMetadata(string kind, int col, ref TValue value) + { + if (col == _col && kind == MetadataUtils.Kinds.SlotNames) + { + _getter.Marshal(col, ref value); + return; + } + _parent.GetMetadata(kind, col, ref value); + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/SequentialTransformBase.cs b/src/Microsoft.ML.TimeSeries/SequentialTransformBase.cs new file mode 100644 index 0000000000..8cccefda85 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/SequentialTransformBase.cs @@ -0,0 +1,405 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Data.IO; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.Api; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// The box class that is used to box the TInput and TOutput for the LambdaTransform. + /// + /// The type to be boxed, e.g. TInput or TOutput + internal sealed class DataBox + { + public T Value; + + public DataBox() + { + } + + public DataBox(T value) + { + Value = value; + } + } + + /// + /// The base class for sequential processing transforms. This class implements the basic sliding window buffering. The derived classes need to specify the transform logic, + /// the initialization logic and the learning logic via implementing the abstract methods TransformCore(), InitializeStateCore() and LearnStateFromDataCore(), respectively + /// + /// The input type of the sequential processing. + /// The dst type of the sequential processing. + /// The state type of the sequential processing. Must be a class inherited from StateBase + public abstract class SequentialTransformBase : TransformBase + where TState : SequentialTransformBase.StateBase, new() + { + /// + /// The base class for encapsulating the State object for sequential processing. This class implements a windowed buffer. + /// + public abstract class StateBase + { + // Ideally this class should be private. However, due to the current constraints with the LambdaTransform, we need to have + // access to the state class when inheriting from SequentialTransformBase. + protected IHost Host; + + /// + /// A reference to the parent transform that operates on the state object. + /// + protected SequentialTransformBase ParentTransform; + + /// + /// The internal windowed buffer for buffering the values in the input sequence. + /// + protected FixedSizeQueue WindowedBuffer; + + /// + /// The buffer used to buffer the training data points. + /// + protected FixedSizeQueue InitialWindowedBuffer; + + protected int WindowSize { get; private set; } + + protected int InitialWindowSize { get; private set; } + + /// + /// Counts the number of rows observed by the transform so far. + /// + protected int RowCounter { get; private set; } + + protected int IncrementRowCounter() + { + RowCounter++; + return RowCounter; + } + + private bool _isIniatilized; + + /// + /// This method sets the window size and initializes the buffer only once. + /// Since the class needs to implement a default constructor, this methods provides a mechanism to initialize the window size and buffer. + /// + /// The size of the windowed buffer + /// The size of the windowed initial buffer used for training + /// The parent transform of this state object + /// The host + public void InitState(int windowSize, int initialWindowSize, SequentialTransformBase parentTransform, IHost host) + { + Contracts.CheckValue(host, nameof(host), "The host cannot be null."); + host.Check(!_isIniatilized, "The window size can be set only once."); + host.CheckValue(parentTransform, nameof(parentTransform)); + host.CheckParam(windowSize >= 0, nameof(windowSize), "Must be non-negative."); + host.CheckParam(initialWindowSize >= 0, nameof(initialWindowSize), "Must be non-negative."); + + Host = host; + WindowSize = windowSize; + InitialWindowSize = initialWindowSize; + ParentTransform = parentTransform; + WindowedBuffer = (WindowSize > 0) ? new FixedSizeQueue(WindowSize) : new FixedSizeQueue(1); + InitialWindowedBuffer = (InitialWindowSize > 0) ? new FixedSizeQueue(InitialWindowSize) : new FixedSizeQueue(1); + RowCounter = 0; + + InitializeStateCore(); + _isIniatilized = true; + } + + /// + /// This method implements the basic resetting mechanism for a state object and clears the buffer. + /// + public virtual void Reset() + { + Host.Assert(_isIniatilized); + Host.Assert(WindowedBuffer != null); + Host.Assert(InitialWindowedBuffer != null); + + RowCounter = 0; + WindowedBuffer.Clear(); + InitialWindowedBuffer.Clear(); + } + + protected StateBase() + { + // Default constructor is required by the LambdaTransform. + } + + public void Process(ref TInput input, ref TOutput output) + { + if (InitialWindowedBuffer.Count < InitialWindowSize) + { + InitialWindowedBuffer.AddLast(input); + SetNaOutput(ref output); + + if (InitialWindowedBuffer.Count >= InitialWindowSize - WindowSize) + WindowedBuffer.AddLast(input); + + if (InitialWindowedBuffer.Count == InitialWindowSize) + LearnStateFromDataCore(InitialWindowedBuffer); + } + else + { + TransformCore(ref input, WindowedBuffer, RowCounter - InitialWindowSize, ref output); + WindowedBuffer.AddLast(input); + IncrementRowCounter(); + } + } + + public void ProcessWithoutBuffer(ref TInput input, ref TOutput output) + { + if (InitialWindowedBuffer.Count < InitialWindowSize) + { + InitialWindowedBuffer.AddLast(input); + SetNaOutput(ref output); + + if (InitialWindowedBuffer.Count == InitialWindowSize) + LearnStateFromDataCore(InitialWindowedBuffer); + } + else + { + TransformCore(ref input, WindowedBuffer, RowCounter - InitialWindowSize, ref output); + IncrementRowCounter(); + } + } + + /// + /// The abstract method that specifies the NA value for the dst type. + /// + /// + protected abstract void SetNaOutput(ref TOutput dst); + + /// + /// The abstract method that realizes the main logic for the transform. + /// + /// A reference to the input object. + /// A reference to the dst object. + /// A reference to the windowed buffer. + /// A long number that indicates the number of times TransformCore has been called so far (starting value = 0). + protected abstract void TransformCore(ref TInput input, FixedSizeQueue windowedBuffer, long iteration, ref TOutput dst); + + /// + /// The abstract method that realizes the logic for initializing the state object. + /// + protected abstract void InitializeStateCore(); + + /// + /// The abstract method that realizes the logic for learning the parameters and the initial state object from data. + /// + /// A queue of data points used for training + protected abstract void LearnStateFromDataCore(FixedSizeQueue data); + } + + /// + /// The inner stateful Lambda Transform object. + /// + private readonly IDataTransform _transform; + + /// + /// The window size for buffering. + /// + protected readonly int WindowSize; + + /// + /// The number of datapoints from the beginning of the sequence that are used for learning the initial state. + /// + protected int InitialWindowSize; + + protected string InputColumnName; + protected string OutputColumnName; + + private static IDataTransform CreateLambdaTransform(IHost host, IDataView input, string inputColumnName, string outputColumnName, + Action initFunction, bool hasBuffer, ColumnType outputColTypeOverride) + { + var inputSchema = SchemaDefinition.Create(typeof(DataBox)); + inputSchema[0].ColumnName = inputColumnName; + + var outputSchema = SchemaDefinition.Create(typeof(DataBox)); + outputSchema[0].ColumnName = outputColumnName; + + if (outputColTypeOverride != null) + outputSchema[0].ColumnType = outputColTypeOverride; + + Action, DataBox, TState> lambda; + if (hasBuffer) + lambda = MapFunction; + else + lambda = MapFunctionWithoutBuffer; + + return LambdaTransform.CreateMap(host, input, lambda, initFunction, inputSchema, outputSchema); + } + + /// + /// The main constructor for the sequential transform + /// + /// The size of buffer used for windowed buffering. + /// The number of datapoints picked from the beginning of the series for training the transform parameters if needed. + /// The name of the input column. + /// The name of the dst column. + /// + /// A reference to the environment variable. + /// A reference to the input data view. + /// + protected SequentialTransformBase(int windowSize, int initialWindowSize, string inputColumnName, string outputColumnName, + string name, IHostEnvironment env, IDataView input, ColumnType outputColTypeOverride = null) + : this(windowSize, initialWindowSize, inputColumnName, outputColumnName, Contracts.CheckRef(env, nameof(env)).Register(name), input, outputColTypeOverride) + { + } + + protected SequentialTransformBase(int windowSize, int initialWindowSize, string inputColumnName, string outputColumnName, + IHost host, IDataView input, ColumnType outputColTypeOverride = null) + : base(host, input) + { + Contracts.AssertValue(Host); + Host.CheckParam(initialWindowSize >= 0, nameof(initialWindowSize), "Must be non-negative."); + Host.CheckParam(windowSize >= 0, nameof(windowSize), "Must be non-negative."); + // REVIEW: Very bad design. This base class is responsible for reporting errors on + // the arguments, but the arguments themselves are not derived form any base class. + Host.CheckNonEmpty(inputColumnName, nameof(PercentileThresholdTransform.Arguments.Source)); + Host.CheckNonEmpty(outputColumnName, nameof(PercentileThresholdTransform.Arguments.Source)); + + InputColumnName = inputColumnName; + OutputColumnName = outputColumnName; + InitialWindowSize = initialWindowSize; + WindowSize = windowSize; + + _transform = CreateLambdaTransform(Host, input, InputColumnName, OutputColumnName, InitFunction, WindowSize > 0, outputColTypeOverride); + } + + protected SequentialTransformBase(IHostEnvironment env, ModelLoadContext ctx, string name, IDataView input) + : base(env, name, input) + { + Host.CheckValue(ctx, nameof(ctx)); + + // *** Binary format *** + // int: _windowSize + // int: _initialWindowSize + // int (string ID): _inputColumnName + // int (string ID): _outputColumnName + // ColumnType: _transform.Schema.GetColumnType(0) + + var windowSize = ctx.Reader.ReadInt32(); + Host.CheckDecode(windowSize >= 0); + + var initialWindowSize = ctx.Reader.ReadInt32(); + Host.CheckDecode(initialWindowSize >= 0); + + var inputColumnName = ctx.LoadNonEmptyString(); + var outputColumnName = ctx.LoadNonEmptyString(); + + InputColumnName = inputColumnName; + OutputColumnName = outputColumnName; + InitialWindowSize = initialWindowSize; + WindowSize = windowSize; + + BinarySaver bs = new BinarySaver(Host, new BinarySaver.Arguments()); + ColumnType ct = bs.LoadTypeDescriptionOrNull(ctx.Reader.BaseStream); + + _transform = CreateLambdaTransform(Host, input, InputColumnName, OutputColumnName, InitFunction, WindowSize > 0, ct); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + Host.Assert(InitialWindowSize >= 0); + Host.Assert(WindowSize >= 0); + + // *** Binary format *** + // int: _windowSize + // int: _initialWindowSize + // int (string ID): _inputColumnName + // int (string ID): _outputColumnName + // ColumnType: _transform.Schema.GetColumnType(0) + + ctx.Writer.Write(WindowSize); + ctx.Writer.Write(InitialWindowSize); + ctx.SaveNonEmptyString(InputColumnName); + ctx.SaveNonEmptyString(OutputColumnName); + + int byteWritten; + BinarySaver bs = new BinarySaver(Host, new BinarySaver.Arguments()); + + int colIndex; + if (!_transform.Schema.TryGetColumnIndex(OutputColumnName, out colIndex)) + throw Host.Except(String.Format("The column {0} does not exist in the schema.", OutputColumnName)); + + bs.TryWriteTypeDescription(ctx.Writer.BaseStream, _transform.Schema.GetColumnType(colIndex), out byteWritten); + } + + private static void MapFunction(DataBox input, DataBox output, TState state) + { + state.Process(ref input.Value, ref output.Value); + } + + private static void MapFunctionWithoutBuffer(DataBox input, DataBox output, TState state) + { + state.ProcessWithoutBuffer(ref input.Value, ref output.Value); + } + + private void InitFunction(TState state) + { + state.InitState(WindowSize, InitialWindowSize, this, Host); + } + + public override bool CanShuffle { get { return false; } } + + protected override bool? ShouldUseParallelCursors(Func predicate) + { + Host.AssertValue(predicate); + return false; + } + + protected override IRowCursor GetRowCursorCore(Func predicate, IRandom rand = null) + { + var srcCursor = _transform.GetRowCursor(predicate, rand); + return new Cursor(this, srcCursor); + } + + public override ISchema Schema + { + get { return _transform.Schema; } + } + + public override long? GetRowCount(bool lazy = true) + { + return _transform.GetRowCount(lazy); + } + + public override IRowCursor[] GetRowCursorSet(out IRowCursorConsolidator consolidator, Func predicate, int n, IRandom rand = null) + { + consolidator = null; + return new IRowCursor[] { GetRowCursorCore(predicate, rand) }; + } + + /// + /// A wrapper around the cursor which replaces the schema. + /// + private sealed class Cursor : SynchronizedCursorBase, IRowCursor + { + private readonly SequentialTransformBase _parent; + + public Cursor(SequentialTransformBase parent, IRowCursor input) + : base(parent.Host, input) + { + Ch.Assert(input.Schema.ColumnCount == parent.Schema.ColumnCount); + _parent = parent; + } + + public ISchema Schema { get { return _parent.Schema; } } + + public bool IsColumnActive(int col) + { + Ch.Check(0 <= col && col < Schema.ColumnCount, "col"); + return Input.IsColumnActive(col); + } + + public ValueGetter GetGetter(int col) + { + Ch.Check(IsColumnActive(col), "col"); + return Input.GetGetter(col); + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/SlidingWindowTransform.cs b/src/Microsoft.ML.TimeSeries/SlidingWindowTransform.cs new file mode 100644 index 0000000000..ce3bbf0092 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/SlidingWindowTransform.cs @@ -0,0 +1,62 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(SlidingWindowTransform.Summary, typeof(SlidingWindowTransform), typeof(SlidingWindowTransform.Arguments), typeof(SignatureDataTransform), + SlidingWindowTransform.UserName, SlidingWindowTransform.LoaderSignature, SlidingWindowTransform.ShortName)] +[assembly: LoadableClass(SlidingWindowTransform.Summary, typeof(SlidingWindowTransform), null, typeof(SignatureLoadDataTransform), + SlidingWindowTransform.UserName, SlidingWindowTransform.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// Outputs a sliding window on a time series of type Single. + /// + public sealed class SlidingWindowTransform : SlidingWindowTransformBase + { + public const string Summary = "Returns the last values for a time series [y(t-d-l+1), y(t-d-l+2), ..., y(t-l-1), y(t-l)] where d is the size of the window, l the lag and y is a Float."; + public const string LoaderSignature = "SlideWinTransform"; + public const string UserName = "Sliding Window Transform"; + public const string ShortName = "SlideWin"; + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo( + modelSignature: "SWINTRNS", + verWrittenCur: 0x00010001, // Initial + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(SlidingWindowTransform).Assembly.FullName); + } + + public SlidingWindowTransform(IHostEnvironment env, Arguments args, IDataView input) + : base(args, LoaderSignature, env, input) + { + } + + public SlidingWindowTransform(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature, input) + { + // *** Binary format *** + // + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + // *** Binary format *** + // + base.Save(ctx); + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/SlidingWindowTransformBase.cs b/src/Microsoft.ML.TimeSeries/SlidingWindowTransformBase.cs new file mode 100644 index 0000000000..c0d0ec0aed --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/SlidingWindowTransformBase.cs @@ -0,0 +1,194 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using System.Linq; +using System.Collections.Generic; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; +using Microsoft.ML.Runtime.Data.Conversion; +using Microsoft.ML.Runtime.EntryPoints; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// SlidingWindowTransformBase outputs a sliding window as a VBuffer from a series of any type. + /// The VBuffer contains n consecutives observations delayed or not from the current one. + /// Let's denote y(t) a timeseries, the transform returns a vector of values for each time t + /// which corresponds to [y(t-d-l+1), y(t-d-l+2), ..., y(t-l-1), y(t-l)] where d is the size of the window + /// and l is the delay. + /// + + public abstract class SlidingWindowTransformBase : SequentialTransformBase, SlidingWindowTransformBase.StateSlide> + { + /// + /// Defines what should be done about the first rows. + /// + public enum BeginOptions : byte + { + /// + /// Fill first rows with NaN values. + /// + NaNValues = 0, + + /// + /// Copy the first value of the series. + /// + FirstValue = 1 + } + + public sealed class Arguments : TransformInputBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the sliding window for computing the moving average", ShortName = "wnd", SortOrder = 3)] + public int WindowSize = 2; + + [Argument(ArgumentType.AtMostOnce, HelpText = "Lag between current observation and last observation from the sliding window", ShortName = "l", SortOrder = 4)] + public int Lag = 1; + + [Argument(ArgumentType.AtMostOnce, HelpText = "Define how to populate the first rows of the produced series", SortOrder = 5)] + public BeginOptions Begin = BeginOptions.NaNValues; + } + + private readonly int _lag; + private BeginOptions _begin; + private TInput _nanValue; + + protected SlidingWindowTransformBase(Arguments args, string loaderSignature, IHostEnvironment env, IDataView input) + : base(args.WindowSize + args.Lag - 1, args.WindowSize + args.Lag - 1, args.Source, args.Name, loaderSignature, env, input) + { + Host.CheckUserArg(args.WindowSize >= 1, nameof(args.WindowSize), "Must be at least 1."); + Host.CheckUserArg(args.Lag >= 0, nameof(args.Lag), "Must be positive."); + if (args.Lag == 0 && args.WindowSize <= 1) + { + Host.Assert(args.WindowSize == 1); + throw Host.ExceptUserArg(nameof(args.Lag), + $"If {args.Lag}=0 and {args.WindowSize}=1, the transform just copies the column. Use {CopyColumnsTransform.LoaderSignature} transform instead."); + } + Host.CheckUserArg(Enum.IsDefined(typeof(BeginOptions), args.Begin), nameof(args.Begin), "Undefined value."); + _lag = args.Lag; + _begin = args.Begin; + _nanValue = GetNaValue(); + } + + protected SlidingWindowTransformBase(IHostEnvironment env, ModelLoadContext ctx, string loaderSignature, IDataView input) + : base(env, ctx, loaderSignature, input) + { + // *** Binary format *** + // + // Int32 lag + // byte begin + + Host.CheckDecode(WindowSize >= 1); + _lag = ctx.Reader.ReadInt32(); + Host.CheckDecode(_lag >= 0); + byte r = ctx.Reader.ReadByte(); + Host.CheckDecode(Enum.IsDefined(typeof(BeginOptions), r)); + _begin = (BeginOptions)r; + _nanValue = GetNaValue(); + } + + private TInput GetNaValue() + { + var sch = Schema; + int index; + sch.TryGetColumnIndex(InputColumnName, out index); + ColumnType col = sch.GetColumnType(index); + TInput nanValue = Conversions.Instance.GetNAOrDefault(col); + + // We store the nan_value here to avoid getting it each time a state is instanciated. + return nanValue; + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + Host.Assert(WindowSize >= 1); + Host.Assert(_lag >= 0); + Host.Assert(Enum.IsDefined(typeof(BeginOptions), _begin)); + ctx.CheckAtModel(); + + // *** Binary format *** + // + // Int32 lag + // byte begin + + base.Save(ctx); + ctx.Writer.Write(_lag); + ctx.Writer.Write((byte)_begin); + } + + public sealed class StateSlide : StateBase + { + private SlidingWindowTransformBase _parentSliding; + + protected override void SetNaOutput(ref VBuffer output) + { + + int size = _parentSliding.WindowSize - _parentSliding._lag + 1; + var result = output.Values; + if (Utils.Size(result) < size) + result = new TInput[size]; + + TInput value = _parentSliding._nanValue; + switch (_parentSliding._begin) + { + case BeginOptions.NaNValues: + value = _parentSliding._nanValue; + break; + case BeginOptions.FirstValue: + // REVIEW: will complete the implementation + // if the design looks good + throw new NotImplementedException(); + } + + for (int i = 0; i < size; ++i) + result[i] = value; + output = new VBuffer(size, result, output.Indices); + } + + protected override void TransformCore(ref TInput input, FixedSizeQueue windowedBuffer, long iteration, ref VBuffer output) + { + int size = _parentSliding.WindowSize - _parentSliding._lag + 1; + var result = output.Values; + if (Utils.Size(result) < size) + result = new TInput[size]; + + if (_parentSliding._lag == 0) + { + for (int i = 0; i < _parentSliding.WindowSize; ++i) + result[i] = windowedBuffer[i]; + result[_parentSliding.WindowSize] = input; + } + else + { + for (int i = 0; i < size; ++i) + result[i] = windowedBuffer[i]; + } + output = new VBuffer(size, result, output.Indices); + } + + protected override void InitializeStateCore() + { + _parentSliding = (SlidingWindowTransformBase)base.ParentTransform; + } + + protected override void LearnStateFromDataCore(FixedSizeQueue data) + { + // This method is empty because there is no need for parameter learning from the initial windowed buffer for this transform. + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/SsaAnomalyDetectionBase.cs b/src/Microsoft.ML.TimeSeries/SsaAnomalyDetectionBase.cs new file mode 100644 index 0000000000..f4f7023b81 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/SsaAnomalyDetectionBase.cs @@ -0,0 +1,220 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.Internal.Utilities; +using Microsoft.ML.Runtime.Model; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// Provides the utility functions for different error functions for computing deviation. + /// + public static class ErrorFunctionUtils + { + public const string ErrorFunctionHelpText = "The error function should be either (0) SignedDifference, (1) AbsoluteDifference, (2) SignedProportion" + + " (3) AbsoluteProportion or (4) SquaredDifference."; + + public enum ErrorFunction : byte + { + SignedDifference, + AbsoluteDifference, + SignedProportion, + AbsoluteProportion, + SquaredDifference + } + + public static Double SignedDifference(Double actual, Double predicted) + { + return actual - predicted; + } + + public static Double AbsoluteDifference(Double actual, Double predicted) + { + return Math.Abs(actual - predicted); + } + + public static Double SignedProportion(Double actual, Double predicted) + { + return predicted == 0 ? 0 : (actual - predicted) / predicted; + } + + public static Double AbsoluteProportion(Double actual, Double predicted) + { + return predicted == 0 ? 0 : Math.Abs((actual - predicted) / predicted); + } + + public static Double SquaredDifference(Double actual, Double predicted) + { + Double temp = actual - predicted; + return temp * temp; + } + + public static Func GetErrorFunction(ErrorFunction errorFunction) + { + switch (errorFunction) + { + case ErrorFunction.SignedDifference: + return SignedDifference; + + case ErrorFunction.AbsoluteDifference: + return AbsoluteDifference; + + case ErrorFunction.SignedProportion: + return SignedProportion; + + case ErrorFunction.AbsoluteProportion: + return AbsoluteProportion; + + case ErrorFunction.SquaredDifference: + return SquaredDifference; + + default: + throw Contracts.Except(ErrorFunctionHelpText); + } + } + } + + /// + /// This base class that implements the general anomaly detection transform based on Singular Spectrum modeling of the time-series. + /// For the details of the Singular Spectrum Analysis (SSA), refer to http://arxiv.org/pdf/1206.6910.pdf. + /// + public abstract class SsaAnomalyDetectionBase : SequentialAnomalyDetectionTransformBase + { + public abstract class SsaArguments : ArgumentsBase + { + [Argument(ArgumentType.Required, HelpText = "The inner window size for SSA in [2, windowSize]", ShortName = "swnd", SortOrder = 11)] + public int SeasonalWindowSize; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The discount factor in [0, 1]", ShortName = "disc", SortOrder = 12)] + public Single DiscountFactor = 1; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The function used to compute the error between the expected and the observed value", ShortName = "err", SortOrder = 13)] + public ErrorFunctionUtils.ErrorFunction ErrorFunction = ErrorFunctionUtils.ErrorFunction.SignedDifference; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The flag determing whether the model is adaptive", ShortName = "adp", SortOrder = 14)] + public bool IsAdaptive = false; + } + + protected readonly int SeasonalWindowSize; + protected readonly Single DiscountFactor; + protected readonly bool IsAdaptive; + protected readonly ErrorFunctionUtils.ErrorFunction ErrorFunction; + protected readonly Func ErrorFunc; + protected readonly ISequenceModeler Model; + + public SsaAnomalyDetectionBase(SsaArguments args, string name, IHostEnvironment env, IDataView input) + : base(args.WindowSize, 0, args.Source, args.Name, name, env, input, args.Side, args.Martingale, args.AlertOn, args.PowerMartingaleEpsilon, args.AlertThreshold) + { + Host.CheckUserArg(2 <= args.SeasonalWindowSize, nameof(args.SeasonalWindowSize), "Must be at least 2."); + Host.CheckUserArg(0 <= args.DiscountFactor && args.DiscountFactor <= 1, nameof(args.DiscountFactor), "Must be in the range [0, 1]."); + Host.CheckUserArg(Enum.IsDefined(typeof(ErrorFunctionUtils.ErrorFunction), args.ErrorFunction), nameof(args.ErrorFunction), ErrorFunctionUtils.ErrorFunctionHelpText); + + SeasonalWindowSize = args.SeasonalWindowSize; + DiscountFactor = args.DiscountFactor; + ErrorFunction = args.ErrorFunction; + ErrorFunc = ErrorFunctionUtils.GetErrorFunction(ErrorFunction); + IsAdaptive = args.IsAdaptive; + + // Creating the master SSA model + Model = new AdaptiveSingularSpectrumSequenceModeler(Host, args.InitialWindowSize, SeasonalWindowSize + 1, SeasonalWindowSize, + DiscountFactor, null, AdaptiveSingularSpectrumSequenceModeler.RankSelectionMethod.Exact, null, SeasonalWindowSize / 2, false, false); + + // Training the master SSA model + var data = new RoleMappedData(input, null, InputColumnName); + Model.Train(data); + } + + public SsaAnomalyDetectionBase(IHostEnvironment env, ModelLoadContext ctx, string name, IDataView input) + : base(env, ctx, name, input) + { + // *** Binary format *** + // + // int: _seasonalWindowSize + // float: _discountFactor + // byte: _errorFunction + // bool: _isAdaptive + // AdaptiveSingularSpectrumSequenceModeler: _model + + Host.CheckDecode(InitialWindowSize == 0); + + SeasonalWindowSize = ctx.Reader.ReadInt32(); + Host.CheckDecode(2 <= SeasonalWindowSize); + + DiscountFactor = ctx.Reader.ReadSingle(); + Host.CheckDecode(0 <= DiscountFactor && DiscountFactor <= 1); + + byte temp; + temp = ctx.Reader.ReadByte(); + Host.CheckDecode(Enum.IsDefined(typeof(ErrorFunctionUtils.ErrorFunction), temp)); + ErrorFunction = (ErrorFunctionUtils.ErrorFunction)temp; + ErrorFunc = ErrorFunctionUtils.GetErrorFunction(ErrorFunction); + + IsAdaptive = ctx.Reader.ReadBoolean(); + + ctx.LoadModel, SignatureLoadModel>(env, out Model, "SSA"); + Host.CheckDecode(Model != null); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + ctx.CheckAtModel(); + + Host.Assert(InitialWindowSize == 0); + Host.Assert(2 <= SeasonalWindowSize); + Host.Assert(0 <= DiscountFactor && DiscountFactor <= 1); + Host.Assert(Enum.IsDefined(typeof(ErrorFunctionUtils.ErrorFunction), ErrorFunction)); + Host.Assert(Model != null); + + // *** Binary format *** + // + // int: _seasonalWindowSize + // float: _discountFactor + // byte: _errorFunction + // bool: _isAdaptive + // AdaptiveSingularSpectrumSequenceModeler: _model + + base.Save(ctx); + ctx.Writer.Write(SeasonalWindowSize); + ctx.Writer.Write(DiscountFactor); + ctx.Writer.Write((byte)ErrorFunction); + ctx.Writer.Write(IsAdaptive); + ctx.SaveModel(Model, "SSA"); + } + + public sealed class State : AnomalyDetectionStateBase + { + private ISequenceModeler _model; + private SsaAnomalyDetectionBase _parentAnomalyDetector; + + protected override void LearnStateFromDataCore(FixedSizeQueue data) + { + // This method is empty because there is no need to implement a training logic here. + } + + protected override void InitializeAnomalyDetector() + { + _parentAnomalyDetector = (SsaAnomalyDetectionBase)Parent; + _model = _parentAnomalyDetector.Model.Clone(); + _model.InitState(); + } + + protected override double ComputeRawAnomalyScore(ref Single input, FixedSizeQueue windowedBuffer, long iteration) + { + // Get the prediction for the next point opn the series + Single expectedValue = 0; + _model.PredictNext(ref expectedValue); + + // Feed the current point to the model + _model.Consume(ref input, _parentAnomalyDetector.IsAdaptive); + + // Return the error as the raw anomaly score + return _parentAnomalyDetector.ErrorFunc(input, expectedValue); + } + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/SsaChangePointDetector.cs b/src/Microsoft.ML.TimeSeries/SsaChangePointDetector.cs new file mode 100644 index 0000000000..8eca18a034 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/SsaChangePointDetector.cs @@ -0,0 +1,145 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.EntryPoints; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(SsaChangePointDetector.Summary, typeof(SsaChangePointDetector), typeof(SsaChangePointDetector.Arguments), typeof(SignatureDataTransform), + SsaChangePointDetector.UserName, SsaChangePointDetector.LoaderSignature, SsaChangePointDetector.ShortName)] +[assembly: LoadableClass(SsaChangePointDetector.Summary, typeof(SsaChangePointDetector), null, typeof(SignatureLoadDataTransform), + SsaChangePointDetector.UserName, SsaChangePointDetector.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// This class implements the change point detector transform based on Singular Spectrum modeling of the time-series. + /// For the details of the Singular Spectrum Analysis (SSA), refer to http://arxiv.org/pdf/1206.6910.pdf. + /// + public sealed class SsaChangePointDetector : SsaAnomalyDetectionBase + { + internal const string Summary = "This transform detects the change-points in a seasonal time-series using Singular Spectrum Analysis (SSA)."; + public const string LoaderSignature = "SsaChangePointDetector"; + public const string UserName = "SSA Change Point Detection"; + public const string ShortName = "chgpnt"; + + public sealed class Arguments : TransformInputBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column.", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column.", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The change history length.", ShortName = "wnd", + SortOrder = 102)] + public int ChangeHistoryLength = 20; + + [Argument(ArgumentType.Required, HelpText = "The number of points from the beginning of the sequence used for training.", + ShortName = "twnd", SortOrder = 3)] + public int TrainingWindowSize = 100; + + [Argument(ArgumentType.Required, HelpText = "The confidence for change point detection in the range [0, 100].", + ShortName = "cnf", SortOrder = 4)] + public double Confidence = 95; + + [Argument(ArgumentType.Required, HelpText = "An upper bound on the largest relevant seasonality in the input time-series.", ShortName = "swnd", SortOrder = 5)] + public int SeasonalWindowSize = 10; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The function used to compute the error between the expected and the observed value.", ShortName = "err", SortOrder = 103)] + public ErrorFunctionUtils.ErrorFunction ErrorFunction = ErrorFunctionUtils.ErrorFunction.SignedDifference; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The martingale used for scoring.", ShortName = "mart", SortOrder = 104)] + public MartingaleType Martingale = SequentialAnomalyDetectionTransformBase.MartingaleType.Power; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The epsilon parameter for the Power martingale.", + ShortName = "eps", SortOrder = 105)] + public double PowerMartingaleEpsilon = 0.1; + } + + private sealed class BaseArguments : SsaArguments + { + public BaseArguments(Arguments args) + { + Source = args.Source; + Name = args.Name; + Side = SequentialAnomalyDetectionTransformBase.AnomalySide.TwoSided; + WindowSize = args.ChangeHistoryLength; + InitialWindowSize = args.TrainingWindowSize; + SeasonalWindowSize = args.SeasonalWindowSize; + Martingale = args.Martingale; + PowerMartingaleEpsilon = args.PowerMartingaleEpsilon; + AlertOn = SequentialAnomalyDetectionTransformBase.AlertingScore.MartingaleScore; + DiscountFactor = 1; + IsAdaptive = false; + ErrorFunction = args.ErrorFunction; + } + } + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo(modelSignature: "SCHGTRNS", + verWrittenCur: 0x00010001, // Initial + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(SsaChangePointDetector).Assembly.FullName); + } + + public SsaChangePointDetector(IHostEnvironment env, Arguments args, IDataView input) + : base(new BaseArguments(args), LoaderSignature, env, input) + { + switch (Martingale) + { + case MartingaleType.None: + AlertThreshold = Double.MaxValue; + break; + case MartingaleType.Power: + AlertThreshold = Math.Exp(WindowSize * LogPowerMartigaleBettingFunc(1 - args.Confidence / 100, PowerMartingaleEpsilon)); + break; + case MartingaleType.Mixture: + AlertThreshold = Math.Exp(WindowSize * LogMixtureMartigaleBettingFunc(1 - args.Confidence / 100)); + break; + default: + Host.Assert(!Enum.IsDefined(typeof(MartingaleType), Martingale)); + throw Host.ExceptUserArg(nameof(args.Martingale), "Value not defined."); + } + } + + public SsaChangePointDetector(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature, input) + { + // *** Binary format *** + // + + Host.CheckDecode(ThresholdScore == AlertingScore.MartingaleScore); + Host.CheckDecode(Side == AnomalySide.TwoSided); + Host.CheckDecode(DiscountFactor == 1); + Host.CheckDecode(IsAdaptive == false); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + Host.Assert(ThresholdScore == AlertingScore.MartingaleScore); + Host.Assert(Side == AnomalySide.TwoSided); + Host.Assert(DiscountFactor == 1); + Host.Assert(IsAdaptive == false); + + // *** Binary format *** + // + + base.Save(ctx); + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/SsaSpikeDetector.cs b/src/Microsoft.ML.TimeSeries/SsaSpikeDetector.cs new file mode 100644 index 0000000000..79d6622ff5 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/SsaSpikeDetector.cs @@ -0,0 +1,126 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.ML.Runtime; +using Microsoft.ML.Runtime.CommandLine; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.EntryPoints; +using Microsoft.ML.Runtime.Model; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: LoadableClass(SsaSpikeDetector.Summary, typeof(SsaSpikeDetector), typeof(SsaSpikeDetector.Arguments), typeof(SignatureDataTransform), + SsaSpikeDetector.UserName, SsaSpikeDetector.LoaderSignature, SsaSpikeDetector.ShortName)] +[assembly: LoadableClass(SsaSpikeDetector.Summary, typeof(SsaSpikeDetector), null, typeof(SignatureLoadDataTransform), + SsaSpikeDetector.UserName, SsaSpikeDetector.LoaderSignature)] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// This class implements the spike detector transform based on Singular Spectrum modeling of the time-series. + /// For the details of the Singular Spectrum Analysis (SSA), refer to http://arxiv.org/pdf/1206.6910.pdf. + /// + public sealed class SsaSpikeDetector : SsaAnomalyDetectionBase + { + internal const string Summary = "This transform detects the spikes in a seasonal time-series using Singular Spectrum Analysis (SSA)."; + public const string LoaderSignature = "SsaSpikeDetector"; + public const string UserName = "SSA Spike Detection"; + public const string ShortName = "spike"; + + public sealed class Arguments : TransformInputBase + { + [Argument(ArgumentType.Required, HelpText = "The name of the source column.", ShortName = "src", + SortOrder = 1, Purpose = SpecialPurpose.ColumnName)] + public string Source; + + [Argument(ArgumentType.Required, HelpText = "The name of the new column.", + SortOrder = 2)] + public string Name; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The argument that determines whether to detect positive or negative anomalies, or both.", ShortName = "side", + SortOrder = 101)] + public AnomalySide Side = AnomalySide.TwoSided; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The size of the sliding window for computing the p-value.", ShortName = "wnd", + SortOrder = 102)] + public int PvalueHistoryLength = 100; + + [Argument(ArgumentType.Required, HelpText = "The number of points from the beginning of the sequence used for training.", + ShortName = "twnd", SortOrder = 3)] + public int TrainingWindowSize = 100; + + [Argument(ArgumentType.Required, HelpText = "The confidence for spike detection in the range [0, 100].", + ShortName = "cnf", SortOrder = 4)] + public double Confidence = 99; + + [Argument(ArgumentType.Required, HelpText = "An upper bound on the largest relevant seasonality in the input time-series.", ShortName = "swnd", SortOrder = 5)] + public int SeasonalWindowSize = 10; + + [Argument(ArgumentType.AtMostOnce, HelpText = "The function used to compute the error between the expected and the observed value.", ShortName = "err", SortOrder = 103)] + public ErrorFunctionUtils.ErrorFunction ErrorFunction = ErrorFunctionUtils.ErrorFunction.SignedDifference; + } + + private sealed class BaseArguments : SsaArguments + { + public BaseArguments(Arguments args) + { + Source = args.Source; + Name = args.Name; + Side = args.Side; + WindowSize = args.PvalueHistoryLength; + InitialWindowSize = args.TrainingWindowSize; + SeasonalWindowSize = args.SeasonalWindowSize; + AlertThreshold = 1 - args.Confidence / 100; + AlertOn = SequentialAnomalyDetectionTransformBase.AlertingScore.PValueScore; + DiscountFactor = 1; + IsAdaptive = false; + ErrorFunction = args.ErrorFunction; + Martingale = MartingaleType.None; + } + } + + private static VersionInfo GetVersionInfo() + { + return new VersionInfo( + modelSignature: "SSPKTRNS", + verWrittenCur: 0x00010001, // Initial + verReadableCur: 0x00010001, + verWeCanReadBack: 0x00010001, + loaderSignature: LoaderSignature, + loaderAssemblyName: typeof(SsaSpikeDetector).Assembly.FullName); + } + + public SsaSpikeDetector(IHostEnvironment env, Arguments args, IDataView input) + : base(new BaseArguments(args), LoaderSignature, env, input) + { + // This constructor is empty. + } + + public SsaSpikeDetector(IHostEnvironment env, ModelLoadContext ctx, IDataView input) + : base(env, ctx, LoaderSignature, input) + { + // *** Binary format *** + // + + Host.CheckDecode(ThresholdScore == AlertingScore.PValueScore); + Host.CheckDecode(DiscountFactor == 1); + Host.CheckDecode(IsAdaptive == false); + } + + public override void Save(ModelSaveContext ctx) + { + Host.CheckValue(ctx, nameof(ctx)); + ctx.CheckAtModel(); + ctx.SetVersionInfo(GetVersionInfo()); + + Host.Assert(ThresholdScore == AlertingScore.PValueScore); + Host.Assert(DiscountFactor == 1); + Host.Assert(IsAdaptive == false); + + // *** Binary format *** + // + + base.Save(ctx); + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/TimeSeriesProcessing.cs b/src/Microsoft.ML.TimeSeries/TimeSeriesProcessing.cs new file mode 100644 index 0000000000..6b4275ffa3 --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/TimeSeriesProcessing.cs @@ -0,0 +1,113 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.ML.Runtime.EntryPoints; +using Microsoft.ML.Runtime.TimeSeriesProcessing; + +[assembly: EntryPointModule(typeof(TimeSeriesProcessing))] + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// Entry points for text anylytics transforms. + /// + public static class TimeSeriesProcessing + { + [TlcModule.EntryPoint(Desc = ExponentialAverageTransform.Summary, UserName = ExponentialAverageTransform.UserName, ShortName = ExponentialAverageTransform.ShortName)] + public static CommonOutputs.TransformOutput ExponentialAverage(IHostEnvironment env, ExponentialAverageTransform.Arguments input) + { + var h = EntryPointUtils.CheckArgsAndCreateHost(env, "ExponentialAverageTransform", input); + var xf = new ExponentialAverageTransform(h, input, input.Data); + return new CommonOutputs.TransformOutput() + { + Model = new TransformModel(h, xf, input.Data), + OutputData = xf + }; + } + + [TlcModule.EntryPoint(Desc = Runtime.TimeSeriesProcessing.IidChangePointDetector.Summary, UserName = Runtime.TimeSeriesProcessing.IidChangePointDetector.UserName, ShortName = Runtime.TimeSeriesProcessing.IidChangePointDetector.ShortName)] + public static CommonOutputs.TransformOutput IidChangePointDetector(IHostEnvironment env, IidChangePointDetector.Arguments input) + { + var h = EntryPointUtils.CheckArgsAndCreateHost(env, "IidChangePointDetector", input); + var view = new IidChangePointDetector(h, input, input.Data); + return new CommonOutputs.TransformOutput() + { + Model = new TransformModel(h, view, input.Data), + OutputData = view + }; + } + + [TlcModule.EntryPoint(Desc = Runtime.TimeSeriesProcessing.IidSpikeDetector.Summary, UserName = Runtime.TimeSeriesProcessing.IidSpikeDetector.UserName, ShortName = Runtime.TimeSeriesProcessing.IidSpikeDetector.ShortName)] + public static CommonOutputs.TransformOutput IidSpikeDetector(IHostEnvironment env, IidSpikeDetector.Arguments input) + { + var h = EntryPointUtils.CheckArgsAndCreateHost(env, "IidSpikeDetector", input); + var view = new IidSpikeDetector(h, input, input.Data); + return new CommonOutputs.TransformOutput() + { + Model = new TransformModel(h, view, input.Data), + OutputData = view + }; + } + + [TlcModule.EntryPoint(Desc = Runtime.TimeSeriesProcessing.PercentileThresholdTransform.Summary, UserName = Runtime.TimeSeriesProcessing.PercentileThresholdTransform.UserName, ShortName = Runtime.TimeSeriesProcessing.PercentileThresholdTransform.ShortName)] + public static CommonOutputs.TransformOutput PercentileThresholdTransform(IHostEnvironment env, PercentileThresholdTransform.Arguments input) + { + var h = EntryPointUtils.CheckArgsAndCreateHost(env, "PercentileThresholdTransform", input); + var view = new PercentileThresholdTransform(h, input, input.Data); + return new CommonOutputs.TransformOutput() + { + Model = new TransformModel(h, view, input.Data), + OutputData = view + }; + } + + [TlcModule.EntryPoint(Desc = Runtime.TimeSeriesProcessing.PValueTransform.Summary, UserName = Runtime.TimeSeriesProcessing.PValueTransform.UserName, ShortName = Runtime.TimeSeriesProcessing.PValueTransform.ShortName)] + public static CommonOutputs.TransformOutput PValueTransform(IHostEnvironment env, PValueTransform.Arguments input) + { + var h = EntryPointUtils.CheckArgsAndCreateHost(env, "PValueTransform", input); + var view = new PValueTransform(h, input, input.Data); + return new CommonOutputs.TransformOutput() + { + Model = new TransformModel(h, view, input.Data), + OutputData = view + }; + } + + [TlcModule.EntryPoint(Desc = Runtime.TimeSeriesProcessing.SlidingWindowTransform.Summary, UserName = Runtime.TimeSeriesProcessing.SlidingWindowTransform.UserName, ShortName = Runtime.TimeSeriesProcessing.SlidingWindowTransform.ShortName)] + public static CommonOutputs.TransformOutput SlidingWindowTransform(IHostEnvironment env, SlidingWindowTransform.Arguments input) + { + var h = EntryPointUtils.CheckArgsAndCreateHost(env, "SlidingWindowTransform", input); + var view = new SlidingWindowTransform(h, input, input.Data); + return new CommonOutputs.TransformOutput() + { + Model = new TransformModel(h, view, input.Data), + OutputData = view + }; + } + + [TlcModule.EntryPoint(Desc = Runtime.TimeSeriesProcessing.SsaChangePointDetector.Summary, UserName = Runtime.TimeSeriesProcessing.SsaChangePointDetector.UserName, ShortName = Runtime.TimeSeriesProcessing.SsaChangePointDetector.ShortName)] + public static CommonOutputs.TransformOutput SsaChangePointDetector(IHostEnvironment env, SsaChangePointDetector.Arguments input) + { + var h = EntryPointUtils.CheckArgsAndCreateHost(env, "SsaChangePointDetector", input); + var view = new SsaChangePointDetector(h, input, input.Data); + return new CommonOutputs.TransformOutput() + { + Model = new TransformModel(h, view, input.Data), + OutputData = view + }; + } + + [TlcModule.EntryPoint(Desc = Runtime.TimeSeriesProcessing.SsaSpikeDetector.Summary, UserName = Runtime.TimeSeriesProcessing.SsaSpikeDetector.UserName, ShortName = Runtime.TimeSeriesProcessing.SsaSpikeDetector.ShortName)] + public static CommonOutputs.TransformOutput SsaSpikeDetector(IHostEnvironment env, SsaSpikeDetector.Arguments input) + { + var h = EntryPointUtils.CheckArgsAndCreateHost(env, "SsaSpikeDetector", input); + var view = new SsaSpikeDetector(h, input, input.Data); + return new CommonOutputs.TransformOutput() + { + Model = new TransformModel(h, view, input.Data), + OutputData = view + }; + } + } +} diff --git a/src/Microsoft.ML.TimeSeries/TrajectoryMatrix.cs b/src/Microsoft.ML.TimeSeries/TrajectoryMatrix.cs new file mode 100644 index 0000000000..229e3e9a3e --- /dev/null +++ b/src/Microsoft.ML.TimeSeries/TrajectoryMatrix.cs @@ -0,0 +1,666 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System; +using Microsoft.ML.Runtime.Internal.Utilities; + +namespace Microsoft.ML.Runtime.TimeSeriesProcessing +{ + /// + /// This class encapsulates the trajectory matrix of a time-series used in Singular Spectrum Analysis (SSA). + /// In particular, for a given series of length N and the window size of L, (such that N > L): + /// + /// x(1), x(2), x(3), ... , x(N) + /// + /// The trajectory matrix H is defined in the explicit form as: + /// + /// [x(1) x(2) x(3) ... x(N - L + 1)] + /// [x(2) x(3) x(4) ... x(N - L + 2)] + /// H = [x(3) x(4) x(5) ... x(N - L + 3)] + /// [ . . . . ] + /// [ . . . . ] + /// [x(L) x(L+1) x(L+2) ... x(N) ] + /// + /// of size L * K, where K = N - L + 1. + /// + /// This class does not explicitly store the trajectory matrix though. Furthermore, since the trajectory matrix is + /// a Hankel matrix, its multiplication by an arbitrary vector is implemented efficiently using the Discrete Fast Fourier Transform. + /// + public sealed class TrajectoryMatrix + { + /// + /// The time series data + /// + private Single[] _data; + + /// + /// The window length L + /// + private readonly int _windowSize; + + /// + /// The series length N + /// + private readonly int _seriesLength; + + /// + /// The real part of the Fourier transform of the input series. + /// + private Double[] _cachedSeriesFftRe; + + /// + /// The imaginary part of the Fourier transform of the input series. + /// + private Double[] _cachedSeriesFftIm; + + private Double[] _allZerosIm; + private Double[] _inputRe; + private Double[] _outputRe; + private Double[] _outputIm; + + private bool _isSeriesFftCached; + private readonly bool _shouldFftUsed; + private IExceptionContext _ectx; + private readonly int _k; + + private void ComputeBoundryIndices(int start, int end, out int us, out int ue, out int vs, out int ve) + { + _ectx.Assert(0 <= end && end < _seriesLength, "The end index must be in [0, seriesLength)."); + _ectx.Assert(0 <= start && start <= end, "The start index must be in [0, end index]."); + + if (start < _k) + { + us = 0; + vs = start; + } + else + { + us = start - _k + 1; + vs = _k - 1; + } + + if (end < _windowSize) + { + ue = end; + ve = 0; + } + else + { + ue = _windowSize - 1; + ve = end - _windowSize + 1; + } + } + + /// + /// Returns the length of the time-series represented by this trajectory matrix. + /// + public int SeriesLength { get { return _seriesLength; } } + + /// + /// Returns the window size (L) used for building this trajectory matrix. + /// + public int WindowSize { get { return _windowSize; } } + + /// + /// Constructs a trajectory matrix from the input series given the window length (L) + /// + /// The exception context + /// The input series + /// The window size L + /// The number of elements from the beginning of the input array to be used for building the trajectory matrix + public TrajectoryMatrix(IExceptionContext ectx, Single[] data, int windowSize, int seriesLength) + { + Contracts.CheckValueOrNull(ectx); + _ectx = ectx; + + _ectx.Check(windowSize > 0, "The window length should be greater than 0."); + _ectx.CheckValue(data, nameof(data), "The input data cannot be null."); + _ectx.Check(data.Length >= seriesLength, "The series length cannot be greater than the data length."); + + _seriesLength = seriesLength; + _ectx.Check(windowSize <= _seriesLength, "The length of the window should be less than or equal to the length of the data."); + + _data = data; + _windowSize = windowSize; + _k = _seriesLength - _windowSize + 1; + _shouldFftUsed = _windowSize * _k > (3 + 3 * Math.Log(_seriesLength)) * _seriesLength; + } + + /// + /// Sets the value of the underlying series to new values. + /// + /// The new series + public void SetSeries(Single[] data) + { + _ectx.Check(Utils.Size(data) >= _seriesLength, "The length of the input series cannot be less than that of the original series."); + + _data = data; + if (_isSeriesFftCached) + { + int i; + + for (i = _k - 1; i < _seriesLength; ++i) + _inputRe[i - _k + 1] = _data[i]; + + for (i = 0; i < _k - 1; ++i) + _inputRe[_windowSize + i] = _data[i]; + + FftUtils.ComputeForwardFft(_inputRe, _allZerosIm, _cachedSeriesFftRe, _cachedSeriesFftIm, _inputRe.Length); + } + } + + private static Single RoundUpToReal(Double re, Double im, Double coeff = 1) + { + return (Single)(coeff * Math.Sign(re) * Math.Sqrt(re * re + im * im)); + } + + private void CacheInputSeriesFft() + { + int i; + + _cachedSeriesFftRe = new Double[_seriesLength]; + _cachedSeriesFftIm = new Double[_seriesLength]; + _allZerosIm = new Double[_seriesLength]; + _inputRe = new Double[_seriesLength]; + _outputIm = new Double[_seriesLength]; + _outputRe = new Double[_seriesLength]; + + for (i = _k - 1; i < _seriesLength; ++i) + _inputRe[i - _k + 1] = _data[i]; + + for (i = 0; i < _k - 1; ++i) + _inputRe[_windowSize + i] = _data[i]; + + FftUtils.ComputeForwardFft(_inputRe, _allZerosIm, _cachedSeriesFftRe, _cachedSeriesFftIm, _inputRe.Length); + _isSeriesFftCached = true; + } + + /// + /// This function computes the unnormalized covariance of the trajectory matrix (which is a Hankel matrix of size L*K). + /// In particular, if H is the trajectory matrix of size L*K on the input series, this method computes H * H' (of size L*L). + /// This function does not form the trajectory matrix H explicitly. + /// Let k = N - L + 1 be the number of columns of the trajectory matrix. + /// In most applications, we have L smaller than K, though this is not a strict constraint. + /// The naive computational complexity for computing H * H' is O(L*L*K) while the naive memory complexity is O(K*L + L*L). + /// However, this function computes H * H' in O(L*L + M) time, where M = min(L*K, (L + K)*Log(L + K)) and O(L*L) memory. + /// + /// The output row-major vectorized covariance matrix of size L*L + public void ComputeUnnormalizedTrajectoryCovarianceMat(Single[] cov) + { + _ectx.Assert(Utils.Size(cov) >= _windowSize * _windowSize); + + int i; + int j; + + // Computing the first row of the covariance matrix + var temp = new Single[_k]; + + for (i = 0; i < _k; ++i) + temp[i] = _data[i]; + Multiply(temp, cov); + + // Computing the rest of the rows + for (i = 1; i < _windowSize; ++i) + { + // Copying the symmetric part + for (j = 0; j < i; ++j) + cov[i * _windowSize + j] = cov[j * _windowSize + i]; + + // Computing the novel part + for (j = i; j < _windowSize; ++j) + cov[i * _windowSize + j] = (float)((double)cov[(i - 1) * _windowSize + j - 1] - (double)_data[i - 1] * _data[j - 1] + (double)_data[i + _k - 1] * _data[j + _k - 1]); + } + } + + /// + /// This function computes the singular value decomposition of the trajectory matrix. + /// This function only computes the singular values and the left singular vectors. + /// + /// The output singular values of size L + /// The output singular vectors of size L*L + public bool ComputeSvd(out Single[] singularValues, out Single[] leftSingularvectors) + { + Single[] covariance = new Single[_windowSize * _windowSize]; + Single[] sVal; + Single[] sVec; + singularValues = new Single[_windowSize]; + leftSingularvectors = new Single[_windowSize * _windowSize]; + + // Computing the covariance matrix of the trajectory matrix on the input series + ComputeUnnormalizedTrajectoryCovarianceMat(covariance); + + // Computing the eigen decomposition of the covariance matrix + //EigenUtils.EigenDecomposition(covariance, out sVal, out sVec); + EigenUtils.MklSymmetricEigenDecomposition(covariance, _windowSize, out sVal, out sVec); + + var ind = new int[_windowSize]; + int i; + + for (i = 0; i < _windowSize; ++i) + ind[i] = i; + + Array.Sort(ind, (a, b) => sVal[b].CompareTo(sVal[a])); + for (i = 0; i < _windowSize; ++i) + { + singularValues[i] = sVal[ind[i]]; + Array.Copy(sVec, _windowSize * ind[i], leftSingularvectors, _windowSize * i, _windowSize); + } + + return true; + } + + /// + /// This function computes the naive multiplication of the trajectory matrix H by an arbitrary vector v, i.e. H * v. + /// + /// The input vector + /// The output vector allocated by the caller + /// Whether the multiplication result should be added to the current value in result + /// The starting index for the vector argument + /// The starting index for the result + private void NaiveMultiply(Single[] vector, Single[] result, bool add = false, int srcIndex = 0, int dstIndex = 0) + { + _ectx.Assert(srcIndex >= 0); + _ectx.Assert(dstIndex >= 0); + _ectx.Assert(Utils.Size(vector) >= _k + srcIndex); + _ectx.Assert(Utils.Size(result) >= _windowSize + dstIndex); + + int i; + int j; + + for (j = 0; j < _windowSize; ++j) + { + if (!add) + result[j + dstIndex] = 0; + for (i = 0; i < _k; ++i) + result[j + dstIndex] += (vector[i + srcIndex] * _data[i + j]); + } + } + + /// + /// This function computes the efficient multiplication of the trajectory matrix H by an arbitrary vector v, i.e. H * v. + /// Since the trajectory matrix is a Hankel matrix, using the Discrete Fourier Transform, + /// the multiplication is carried out in O(N.log(N)) instead of O(N^2), wheere N is the series length. + /// For details, refer to Algorithm 2 in http://arxiv.org/pdf/0911.4498.pdf. + /// + /// The input vector + /// The output vector allocated by the caller + /// Whether the multiplication result should be added to the current value in result + /// The starting index for the vector argument + /// The starting index for the result + private void FftMultiply(Single[] vector, Single[] result, bool add = false, int srcIndex = 0, int dstIndex = 0) + { + _ectx.Assert(srcIndex >= 0); + _ectx.Assert(dstIndex >= 0); + _ectx.Assert(Utils.Size(vector) >= _k + srcIndex); + _ectx.Assert(Utils.Size(result) >= _windowSize + dstIndex); + + int i; + + // Computing the FFT of the trajectory matrix + if (!_isSeriesFftCached) + CacheInputSeriesFft(); + + // Computing the FFT of the input vector + for (i = 0; i < _k; ++i) + _inputRe[i] = vector[_k - i - 1 + srcIndex]; + + for (i = _k; i < _seriesLength; ++i) + _inputRe[i] = 0; + + FftUtils.ComputeForwardFft(_inputRe, _allZerosIm, _outputRe, _outputIm, _inputRe.Length); + + // Computing the element-by-element product in the Fourier space + double re; + double im; + for (i = 0; i < _seriesLength; ++i) + { + re = _outputRe[i]; + im = _outputIm[i]; + + _outputRe[i] = _cachedSeriesFftRe[i] * re - _cachedSeriesFftIm[i] * im; + _outputIm[i] = _cachedSeriesFftRe[i] * im + _cachedSeriesFftIm[i] * re; + } + + // Computing the inverse FFT of the result + FftUtils.ComputeBackwardFft(_outputRe, _outputIm, _outputRe, _outputIm, _inputRe.Length); + + // Generating the output + if (add) + { + for (i = 0; i < _windowSize; ++i) + result[i + dstIndex] += RoundUpToReal(_outputRe[i], _outputIm[i]); + } + else + { + for (i = 0; i < _windowSize; ++i) + result[i + dstIndex] = RoundUpToReal(_outputRe[i], _outputIm[i]); + } + } + + /// + /// This function efficiently computes the multiplication of the trajectory matrix H by an arbitrary vector v, i.e. H * v. + /// + /// The input vector + /// The output vector allocated by the caller + /// Whether the multiplication result should be added to the current value in result + /// The starting index for the vector argument + /// The starting index for the result + public void Multiply(Single[] vector, Single[] result, bool add = false, int srcIndex = 0, int dstIndex = 0) + { + if (_shouldFftUsed) + FftMultiply(vector, result, add, srcIndex, dstIndex); + else + NaiveMultiply(vector, result, add, srcIndex, dstIndex); + } + + /// + /// This function computes the naive multiplication of the transpose of the trajectory matrix H by an arbitrary vector v, i.e. H' * v. + /// + /// The input vector + /// The output vector allocated by the caller + /// Whether the multiplication result should be added to the current value in result + /// The starting index for the vector argument + /// The starting index for the result + private void NaiveMultiplyTranspose(Single[] vector, Single[] result, bool add = false, int srcIndex = 0, int dstIndex = 0) + { + _ectx.Assert(srcIndex >= 0); + _ectx.Assert(dstIndex >= 0); + _ectx.Assert(Utils.Size(vector) >= _windowSize + srcIndex); + _ectx.Assert(Utils.Size(result) >= _k + dstIndex); + + int i; + int j; + + for (j = 0; j < _k; ++j) + { + if (!add) + result[j + dstIndex] = 0; + for (i = 0; i < _windowSize; ++i) + result[j + dstIndex] += (vector[i + srcIndex] * _data[i + j]); + } + } + + /// + /// This function computes the the multiplication of the transpose of the trajectory matrix H by an arbitrary vector v, i.e. H' * v. + /// Since the trajectory matrix is a Hankel matrix, using the Discrete Fourier Transform, + /// the multiplication is carried out in O(N.log(N)) instead of O(N^2), wheere N is the series length. + /// For details, refer to Algorithm 3 in http://arxiv.org/pdf/0911.4498.pdf. + /// + /// The input vector + /// The output vector allocated by the caller + /// Whether the multiplication result should be added to the current value in result + /// The starting index for the vector argument + /// The starting index for the result + private void FftMultiplyTranspose(Single[] vector, Single[] result, bool add = false, int srcIndex = 0, int dstIndex = 0) + { + _ectx.Assert(srcIndex >= 0); + _ectx.Assert(dstIndex >= 0); + _ectx.Assert(Utils.Size(vector) >= _windowSize + srcIndex); + _ectx.Assert(Utils.Size(result) >= _k + dstIndex); + + int i; + + // Computing the FFT of the trajectory matrix + if (!_isSeriesFftCached) + CacheInputSeriesFft(); + + // Computing the FFT of the input vector + for (i = 0; i < _k - 1; ++i) + _inputRe[i] = 0; + + for (i = _k - 1; i < _seriesLength; ++i) + _inputRe[i] = vector[_seriesLength - i - 1 + srcIndex]; + + FftUtils.ComputeForwardFft(_inputRe, _allZerosIm, _outputRe, _outputIm, _inputRe.Length); + + // Computing the element-by-element product in the Fourier space + double re; + double im; + for (i = 0; i < _seriesLength; ++i) + { + re = _outputRe[i]; + im = _outputIm[i]; + + _outputRe[i] = _cachedSeriesFftRe[i] * re - _cachedSeriesFftIm[i] * im; + _outputIm[i] = _cachedSeriesFftRe[i] * im + _cachedSeriesFftIm[i] * re; + } + + // Computing the inverse FFT of the result + FftUtils.ComputeBackwardFft(_outputRe, _outputIm, _outputRe, _outputIm, _inputRe.Length); + + // Generating the output + if (add) + { + for (i = 0; i < _k; ++i) + result[i + dstIndex] += RoundUpToReal(_outputRe[_windowSize - 1 + i], _outputIm[_windowSize - 1 + i]); + } + else + { + for (i = 0; i < _k; ++i) + result[i + dstIndex] = RoundUpToReal(_outputRe[_windowSize - 1 + i], _outputIm[_windowSize - 1 + i]); + } + } + + /// + /// This function efficiently computes the multiplication of the transpose of the trajectory matrix H by an arbitrary vector v, i.e. H' * v. + /// + /// The input vector + /// The output vector allocated by the caller + /// Whether the multiplication result should be added to the current value in result + /// The starting index for the vector argument + /// The starting index for the result + public void MultiplyTranspose(Single[] vector, Single[] result, bool add = false, int srcIndex = 0, int dstIndex = 0) + { + if (_shouldFftUsed) + FftMultiplyTranspose(vector, result, add, srcIndex, dstIndex); + else + NaiveMultiplyTranspose(vector, result, add, srcIndex, dstIndex); + } + + /// + /// This function computes the naive Hankelization of the matrix sigma * u * v' in O(L * K). + /// + /// The u vector + /// The v vector + /// The scalar coefficient + /// The output series + /// Whether the hankelization result should be added to the current value in result + /// The starting index for the u vector argument + /// The starting index for the v vector argument + /// The starting index for the result + /// The staring index of the series to be reconstructed (by default zero) + /// The ending index of the series to be reconstructed (by default series length) + private void NaiveRankOneHankelization(Single[] u, Single[] v, Single sigma, Single[] result, bool add = false, + int uIndex = 0, int vIndex = 0, int dstIndex = 0, int? start = null, int? end = null) + { + int s; + int e; + int us; + int ue; + int vs; + int ve; + + s = start ?? 0; + e = end ?? _seriesLength - 1; + + ComputeBoundryIndices(s, e, out us, out ue, out vs, out ve); + _ectx.Assert(0 <= ue && ue < _windowSize); + _ectx.Assert(0 <= us && us <= ue); + _ectx.Assert(0 <= ve && ve < _k); + _ectx.Assert(0 <= vs && vs <= ve); + + var len = e - s + 1; + var uLen = ue - us + 1; + var vLen = ve - vs + 1; + + _ectx.Assert(uIndex >= 0); + _ectx.Assert(vIndex >= 0); + _ectx.Assert(dstIndex >= 0); + _ectx.Assert(Utils.Size(u) >= _windowSize + uIndex); + _ectx.Assert(Utils.Size(v) >= _k + vIndex); + _ectx.Assert(Utils.Size(result) >= len + dstIndex); + _ectx.Assert(!Single.IsNaN(sigma)); + _ectx.Assert(!Single.IsInfinity(sigma)); + + int i; + int j; + int a; + int b; + int c; + Single temp; + + if (!add) + { + for (i = 0; i < len; ++i) + result[i + dstIndex] = 0; + } + + for (i = 0; i < len; ++i) + { + b = Math.Min(uLen, i + 1) - 1; + a = i >= Math.Max(uLen, vLen) ? len - i : b + 1; + c = Math.Max(0, i - uLen + 1); + temp = 0; + for (j = 0; j < a; ++j) + temp += u[us + b - j + uIndex] * v[vs + c + j + vIndex]; + + result[i + dstIndex] += (temp * sigma / a); + } + } + + /// + /// This function computes the efficient Hankelization of the matrix sigma * u * v' using Fast Fourier Transform in in O((L + K) * log(L + K)). + /// For details, refer to Algorithm 4 in http://arxiv.org/pdf/0911.4498.pdf. + /// + /// The u vector + /// The v vector + /// The scalar coefficient + /// The output series + /// Whether the hankelization result should be added to the current value in result + /// The starting index for the u vector argument + /// The starting index for the v vector argument + /// The starting index for the result + /// The staring index of the series to be reconstructed (by default zero) + /// The ending index of the series to be reconstructed (by default series length) + private void FftRankOneHankelization(Single[] u, Single[] v, Single sigma, Single[] result, bool add = false, + int uIndex = 0, int vIndex = 0, int dstIndex = 0, int? start = null, int? end = null) + { + int s; + int e; + int us; + int ue; + int vs; + int ve; + int i; + + s = start ?? 0; + e = end ?? _seriesLength - 1; + + ComputeBoundryIndices(s, e, out us, out ue, out vs, out ve); + _ectx.Assert(0 <= ue && ue < _windowSize); + _ectx.Assert(0 <= us && us <= ue); + _ectx.Assert(0 <= ve && ve < _k); + _ectx.Assert(0 <= vs && vs <= ve); + + var len = e - s + 1; + + _ectx.Assert(uIndex >= 0); + _ectx.Assert(vIndex >= 0); + _ectx.Assert(dstIndex >= 0); + _ectx.Assert(Utils.Size(u) >= _windowSize + uIndex); + _ectx.Assert(Utils.Size(v) >= _k + vIndex); + _ectx.Assert(Utils.Size(result) >= len + dstIndex); + _ectx.Assert(!Single.IsNaN(sigma)); + _ectx.Assert(!Single.IsInfinity(sigma)); + + if (!_isSeriesFftCached) + CacheInputSeriesFft(); + + // Computing the FFT of u + for (i = us; i <= ue; ++i) + _inputRe[i - us] = u[i + uIndex]; + + for (i = ue + 1; i < len + us; ++i) + _inputRe[i - us] = 0; + + FftUtils.ComputeForwardFft(_inputRe, _allZerosIm, _outputRe, _outputIm, len); + + // Computing the FFT of v + for (i = vs; i <= ve; ++i) + _inputRe[i - vs] = v[i + vIndex]; + + for (i = ve + 1; i < len + vs; ++i) + _inputRe[i - vs] = 0; + + FftUtils.ComputeForwardFft(_inputRe, _allZerosIm, _inputRe, _allZerosIm, len); + + // Computing the element-by-element product in the Fourier space + double re; + double im; + for (i = 0; i < len; ++i) + { + re = _outputRe[i]; + im = _outputIm[i]; + + _outputRe[i] = _inputRe[i] * re - _allZerosIm[i] * im; + _outputIm[i] = _inputRe[i] * im + _allZerosIm[i] * re; + } + + // Setting _allZerosIm to 0's again + for (i = 0; i < _seriesLength; ++i) + _allZerosIm[i] = 0; + + // Computing the inverse FFT of the result + FftUtils.ComputeBackwardFft(_outputRe, _outputIm, _outputRe, _outputIm, len); + + // Generating the output + int a = Math.Min(ue - us + 1, ve - vs + 1); + + if (add) + { + for (i = 0; i < a; ++i) + result[i + dstIndex] += RoundUpToReal(_outputRe[i], _outputIm[i], sigma / (i + 1)); + + for (i = a; i < len - a + 1; ++i) + result[i + dstIndex] += RoundUpToReal(_outputRe[i], _outputIm[i], sigma / a); + + for (i = len - a + 1; i < len; ++i) + result[i + dstIndex] += RoundUpToReal(_outputRe[i], _outputIm[i], sigma / (len - i)); + } + else + { + for (i = 0; i < a; ++i) + result[i + dstIndex] = RoundUpToReal(_outputRe[i], _outputIm[i], sigma / (i + 1)); + + for (i = a; i < len - a + 1; ++i) + result[i + dstIndex] = RoundUpToReal(_outputRe[i], _outputIm[i], sigma / a); + + for (i = len - a + 1; i < len; ++i) + result[i + dstIndex] = RoundUpToReal(_outputRe[i], _outputIm[i], sigma / (len - i)); + } + } + + /// + /// This function efficiently computes the Hankelization of the matrix sigma * u * v'. + /// + /// The u vector + /// The v vector + /// The scalar coefficient + /// The output series + /// Whether the hankelization result should be added to the current value in result + /// The starting index for the u vector argument + /// The starting index for the v vector argument + /// The starting index for the result + /// The staring index of the series to be reconstructed (by default zero) + /// The ending index of the series to be reconstructed (by default series length) + public void RankOneHankelization(Single[] u, Single[] v, Single sigma, Single[] result, bool add = false, + int uIndex = 0, int vIndex = 0, int dstIndex = 0, int? start = null, int? end = null) + { + if (_shouldFftUsed) + FftRankOneHankelization(u, v, sigma, result, add, uIndex, vIndex, dstIndex, start, end); + else + NaiveRankOneHankelization(u, v, sigma, result, add, uIndex, vIndex, dstIndex, start, end); + } + } +} diff --git a/src/Native/CMakeLists.txt b/src/Native/CMakeLists.txt index a0b06f864f..471b9aeff4 100644 --- a/src/Native/CMakeLists.txt +++ b/src/Native/CMakeLists.txt @@ -182,4 +182,5 @@ add_subdirectory(CpuMathNative) add_subdirectory(FastTreeNative) add_subdirectory(LdaNative) add_subdirectory(FactorizationMachineNative) -add_subdirectory(SymSgdNative) \ No newline at end of file +add_subdirectory(SymSgdNative) +add_subdirectory(MklProxyNative) \ No newline at end of file diff --git a/src/Native/MklProxyNative/CMakeLists.txt b/src/Native/MklProxyNative/CMakeLists.txt new file mode 100644 index 0000000000..caea9450cb --- /dev/null +++ b/src/Native/MklProxyNative/CMakeLists.txt @@ -0,0 +1,25 @@ +project (MklProxyNative) + +set(SOURCES + MklProxyNative.cpp +) + +find_library(MKL_LIBRARY MklImports HINTS ${MKL_LIB_PATH}) +if(NOT WIN32) + list(APPEND SOURCES ${VERSION_FILE_PATH}) + if(NOT APPLE) + SET(CMAKE_SKIP_BUILD_RPATH FALSE) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + SET(CMAKE_INSTALL_RPATH "$ORIGIN/") + endif() +endif() + +add_library(MklProxyNative SHARED ${SOURCES} ${RESOURCES}) +target_link_libraries(MklProxyNative PUBLIC ${MKL_LIBRARY}) + +if(APPLE) + set_target_properties(MklProxyNative PROPERTIES INSTALL_RPATH "@loader_path") +endif() + +install_library_and_symbols (MklProxyNative) \ No newline at end of file diff --git a/src/Native/MklProxyNative/MklProxyNative.cpp b/src/Native/MklProxyNative/MklProxyNative.cpp new file mode 100644 index 0000000000..28819c8494 --- /dev/null +++ b/src/Native/MklProxyNative/MklProxyNative.cpp @@ -0,0 +1,177 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +#include "../Stdafx.h" + +enum ConfigParam +{ + /* Domain for forward transform. No default value */ + ForwardDomain = 0, + + /* Dimensionality, or rank. No default value */ + Dimension = 1, + + /* Length(s) of transform. No default value */ + Lengths = 2, + + /* Floating point precision. No default value */ + Precision = 3, + + /* Scale factor for forward transform [1.0] */ + ForwardScale = 4, + + /* Scale factor for backward transform [1.0] */ + BackwardScale = 5, + + /* Exponent sign for forward transform [Negative] */ + /* ForwardSign = 6, ## NOT IMPLEMENTED */ + + /* Number of data sets to be transformed [1] */ + NumberOfTransforms = 7, + + /* Storage of finite complex-valued sequences in complex domain + [ComplexComplex] */ + ComplexStorage = 8, + + /* Storage of finite real-valued sequences in real domain + [RealReal] */ + RealStorage = 9, + + /* Storage of finite complex-valued sequences in conjugate-even + domain [ComplexReal] */ + ConjugateEvenStorage = 10, + + /* Placement of result [InPlace] */ + Placement = 11, + + /* Generalized strides for input data layout [tigth, row-major for + C] */ + InputStrides = 12, + + /* Generalized strides for output data layout [tight, row-major + for C] */ + OutputStrides = 13, + + /* Distance between first input elements for multiple transforms + [0] */ + InputDistance = 14, + + /* Distance between first output elements for multiple transforms + [0] */ + OutputDistance = 15, + + /* Effort spent in initialization [Medium] */ + /* InitializationEffort = 16, ## NOT IMPLEMENTED */ + + /* Use of workspace during computation [Allow] */ + /* Workspace = 17, ## NOT IMPLEMENTED */ + + /* Ordering of the result [Ordered] */ + Ordering = 18, + + /* Possible transposition of result [None] */ + Transpose = 19, + + /* User-settable descriptor name [""] */ + DescriptorName = 20, /* DEPRECATED */ + + /* Packing format for ComplexReal storage of finite + conjugate-even sequences [CcsFormat] */ + PackedFormat = 21, + + /* Commit status of the descriptor - R/O parameter */ + CommitStatus = 22, + + /* Version string for this DFTI implementation - R/O parameter */ + Version = 23, + + /* Ordering of the forward transform - R/O parameter */ + /* ForwardOrdering = 24, ## NOT IMPLEMENTED */ + + /* Ordering of the backward transform - R/O parameter */ + /* BackwardOrdering = 25, ## NOT IMPLEMENTED */ + + /* Number of user threads that share the descriptor [1] */ + NumberOfUserThreads = 26 +}; + +enum ConfigValue +{ + /* CommitStatus */ + Committed = 30, + Uncommitted = 31, + + /* ForwardDomain */ + Complex = 32, + Real = 33, + /* ConjugateEven = 34, ## NOT IMPLEMENTED */ + + /* Precision */ + Single = 35, + Double = 36, + + /* ForwardSign */ + /* Negative = 37, ## NOT IMPLEMENTED */ + /* Positive = 38, ## NOT IMPLEMENTED */ + + /* ComplexStorage and ConjugateEvenStorage */ + ComplexComplex = 39, + ComplexReal = 40, + + /* RealStorage */ + RealComplex = 41, + RealReal = 42, + + /* Placement */ + InPlace = 43, /* Result overwrites input */ + NotInPlace = 44, /* Have another place for result */ + + /* InitializationEffort */ + /* Low = 45, ## NOT IMPLEMENTED */ + /* Medium = 46, ## NOT IMPLEMENTED */ + /* High = 47, ## NOT IMPLEMENTED */ + + /* Ordering */ + Ordered = 48, + BackwardScrambled = 49, + /* ForwardScrambled = 50, ## NOT IMPLEMENTED */ + + /* Allow/avoid certain usages */ + Allow = 51, /* Allow transposition or workspace */ + /* Avoid = 52, ## NOT IMPLEMENTED */ + None = 53, + + /* PackedFormat (for storing congugate-even finite sequence + in real array) */ + CcsFormat = 54, /* Complex conjugate-symmetric */ + PackFormat = 55, /* Pack format for real DFT */ + PermFormat = 56, /* Perm format for real DFT */ + CceFormat = 57 /* Complex conjugate-even */ +}; + +//Proxy functions to handle variable length arguments in MKL functions. +EXPORT_API(int) DftiSetValue(void *handle, ConfigParam config_param, ...); +EXPORT_API(int) DftiCreateDescriptor(void **handle, ConfigValue precision, ConfigValue domain, int dim, ...); +EXPORT_API(int) DftiComputeForward(void *handle, ...); +EXPORT_API(int) DftiComputeBackward(void *handle, ...); + +EXPORT_API(int) MKLDftiSetValue(void *handle, ConfigParam config_param, int config_val) +{ + return DftiSetValue(handle, config_param, config_val); +} + +EXPORT_API(int) MKLDftiCreateDescriptor(void **handle, ConfigValue precision, ConfigValue domain, int dim, int sizes) +{ + return DftiCreateDescriptor(handle, precision,domain, dim, sizes); +} + +EXPORT_API(int) MKLDftiComputeForward(void *handle, double *inputRe, double * inputIm, double * outputRe, double * outputIm) +{ + return DftiComputeForward(handle, inputRe, inputIm, outputRe, outputIm); +} + +EXPORT_API(int) MKLDftiComputeBackward(void *handle, double *inputRe, double * inputIm, double * outputRe, double * outputIm) +{ + return DftiComputeBackward(handle, inputRe, inputIm, outputRe, outputIm); +} \ No newline at end of file diff --git a/src/Native/SymSgdNative/CMakeLists.txt b/src/Native/SymSgdNative/CMakeLists.txt index 56baa7138d..4bbf9f69d6 100644 --- a/src/Native/SymSgdNative/CMakeLists.txt +++ b/src/Native/SymSgdNative/CMakeLists.txt @@ -18,4 +18,8 @@ endif() add_library(SymSgdNative SHARED ${SOURCES} ${RESOURCES}) target_link_libraries(SymSgdNative PUBLIC ${MKL_LIBRARY}) +if(APPLE) + set_target_properties(SymSgdNative PROPERTIES INSTALL_RPATH "@loader_path;@loader_path/${MKL_LIB_RPATH}}") +endif() + install_library_and_symbols (SymSgdNative) \ No newline at end of file diff --git a/src/Native/build.cmd b/src/Native/build.cmd index 11684ac9d2..c5e0c9b9f7 100644 --- a/src/Native/build.cmd +++ b/src/Native/build.cmd @@ -27,7 +27,6 @@ if /i [%1] == [x64] ( set __BuildArch=x64&&set __VCBuildArch=x86_amd64&& if /i [%1] == [amd64] ( set __BuildArch=x64&&set __VCBuildArch=x86_amd64&&shift&goto Arg_Loop) if /i [%1] == [--mkllibpath] ( set MKL_LIB_PATH=%2&&shift&goto Arg_Loop) - shift goto :Arg_Loop diff --git a/src/Native/build.proj b/src/Native/build.proj index 19864816c5..d9d0b9b650 100644 --- a/src/Native/build.proj +++ b/src/Native/build.proj @@ -40,7 +40,11 @@ DependsOnTargets="GenerateVersionSourceFile"> --stripSymbols - --configuration $(Configuration) --arch $(TargetArchitecture) $(StripArgs) --mkllibpath $(PackagesDir)mlnetmkldeps/$(MlNetMklDepsPackageVersion)/runtimes/$(PackageRid)/native + + --configuration $(Configuration) --arch $(TargetArchitecture) $(StripArgs) --mkllibpath $(PackagesDir)mlnetmkldeps/$(MlNetMklDepsPackageVersion)/runtimes/$(PackageRid)/native --mkllibrpath ../../../../../microsoft.ml.mkl.redist/$(Version)/runtimes/$(PackageRid)/native @@ -67,7 +71,7 @@ + DestinationFolder="$(NativeAssetsBuiltPath)" /> + @@ -96,10 +102,11 @@ AND '%(NativePackageAsset.Identity)' != '$(PlaceholderFile)'" Include="@(NativePackageAsset->'%(RootDir)%(Directory)%(Filename)$(NativeLibSymbolExtension)')" /> - + + RelativePath="Microsoft.ML.Mkl.Redist\runtimes\$(PackageRid)\native" /> + + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' +---- ConvertTransform ---- +3 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' +---- IidChangePointDetector ---- +4 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + Anomaly2: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' +---- ConvertTransform ---- +5 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + Anomaly2: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly2: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' +---- ChooseColumnsTransform ---- +3 columns: + Features: R4 + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly2: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeIidSpike-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeIidSpike-Data.txt new file mode 100644 index 0000000000..5c33867c9d --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeIidSpike-Data.txt @@ -0,0 +1,1428 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Features:R4:0 +#@ col=fAnomaly:R4:1-3 +#@ col=fAnomaly2:R4:4-6 +#@ } +Features Alert Raw Score P-Value Score Alert Raw Score P-Value Score +7 3:0.5 6:0.5 +0.11 0 0.11 0.456204623 0 0.11 0.543795347 +0.111 0 0.111 0.257266462 0 0.111 0.742733538 +0.3333 0 0.3333 6.32245929E-06 0 0.3333 0.9999937 +0.4444 0 0.4444 0.04637583 0 0.4444 0.9536242 +0.111 0 0.111 0.627704442 0 0.111 0.3722956 +0.363 0 0.363 0.213761881 0 0.363 0.786238134 +0.413871437 0 0.413871437 0.189836681 0 0.413871437 0.8101633 +0.464742869 0 0.464742869 0.166525915 0 0.464742869 0.8334741 +0.5156143 0 0.5156143 0.147354573 0 0.5156143 0.852645457 +0.5664857 0 0.5664857 0.133305743 0 0.5664857 0.8666943 +0.617357135 0 0.617357135 0.1236946 0 0.617357135 0.8763054 +0.668228567 0 0.668228567 0.11735633 0 0.668228567 0.8826437 +0.7191 0 0.7191 0.113250025 0 0.7191 0.88675 +0.76997143 0 0.76997143 0.110613458 0 0.76997143 0.889386535 +0.820842862 0 0.820842862 0.108933933 0 0.820842862 0.8910661 +0.8717143 0 0.8717143 0.107878543 0 0.8717143 0.892121434 +0.9225857 0 0.9225857 0.107233316 0 0.9225857 0.892766654 +0.973457158 0 0.973457158 0.10686028 0 0.973457158 0.8931397 +1.02432859 0 1.02432859 0.106669575 0 1.02432859 0.893330455 +1.0752 0 1.0752 0.106601924 0 1.0752 0.8933981 +1.12607145 0 1.12607145 0.106617555 0 1.12607145 0.89338243 +1.17694283 0 1.17694283 0.106689692 0 1.17694283 0.8933103 +1.22781432 0 1.22781432 0.106799714 0 1.22781432 0.8932003 +1.27868569 0 1.27868569 0.106934905 0 1.27868569 0.8930651 +1.32955718 0 1.32955718 0.107086174 0 1.32955718 0.8929138 +1.38042855 0 1.38042855 0.107247278 0 1.38042855 0.8927527 +1.4313 0 1.4313 0.10741362 0 1.4313 0.8925864 +1.48217142 0 1.48217142 0.1075821 0 1.48217142 0.8924179 +1.53304291 0 1.53304291 0.107750386 0 1.53304291 0.892249644 +1.58391428 0 1.58391428 0.107916959 0 1.58391428 0.892083049 +1.63478577 0 1.63478577 0.108080626 0 1.63478577 0.8919194 +1.68565714 0 1.68565714 0.108240716 0 1.68565714 0.8917593 +1.73652852 0 1.73652852 0.108396679 0 1.73652852 0.8916033 +1.7874 0 1.7874 0.108548179 0 1.7874 0.891451836 +1.83827138 0 1.83827138 0.1086951 0 1.83827138 0.8913049 +1.88914287 0 1.88914287 0.108837292 0 1.88914287 0.8911627 +1.94001424 0 1.94001424 0.108974837 0 1.94001424 0.8910252 +1.99088573 0 1.99088573 0.1091077 0 1.99088573 0.8908923 +2.041757 0 2.041757 0.109236039 0 2.041757 0.890763938 +2.09262848 0 2.09262848 0.109359942 0 2.09262848 0.8906401 +2.1435 0 2.1435 0.109479472 0 2.1435 0.8905205 +2.19437146 0 2.19437146 0.109594889 0 2.19437146 0.8904051 +2.24524283 0 2.24524283 0.10970629 0 2.24524283 0.8902937 +2.29611421 0 2.29611421 0.109813809 0 2.29611421 0.8901862 +2.34698582 0 2.34698582 0.109917566 0 2.34698582 0.8900824 +2.39785719 0 2.39785719 0.1100178 0 2.39785719 0.8899822 +2.44872856 0 2.44872856 0.110114619 0 2.44872856 0.889885366 +2.4996 0 2.4996 0.110208154 0 2.4996 0.889791846 +2.55047154 0 2.55047154 0.110298507 0 2.55047154 0.8897015 +2.601343 0 2.601343 0.1103859 0 2.601343 0.8896141 +2.65221429 0 2.65221429 0.110470422 0 2.65221429 0.8895296 +2.70308566 0 2.70308566 0.110552184 0 2.70308566 0.8894478 +2.753957 0 2.753957 0.110631317 0 2.753957 0.8893687 +2.80482864 0 2.80482864 0.110707887 0 2.80482864 0.8892921 +2.8557 0 2.8557 0.110782087 0 2.8557 0.8892179 +2.90657139 0 2.90657139 0.110853978 0 2.90657139 0.88914603 +2.95744276 0 2.95744276 0.110923655 0 2.95744276 0.889076352 +3.00831437 0 3.00831437 0.110991172 0 3.00831437 0.8890088 +3.05918574 0 3.05918574 0.1110567 0 3.05918574 0.8889433 +3.110057 0 3.110057 0.111120284 0 3.110057 0.8888797 +3.16092849 0 3.16092849 0.111182004 0 3.16092849 0.888818 +3.2118 0 3.2118 0.111241892 0 3.2118 0.8887581 +3.26267147 0 3.26267147 0.1113001 0 3.26267147 0.8886999 +3.31354284 0 3.31354284 0.111356668 0 3.31354284 0.8886433 +3.36441422 0 3.36441422 0.111411653 0 3.36441422 0.888588369 +3.41528583 0 3.41528583 0.111465082 0 3.41528583 0.8885349 +3.4661572 0 3.4661572 0.111517087 0 3.4661572 0.8884829 +3.51702857 0 3.51702857 0.111567684 0 3.51702857 0.8884323 +3.5679 0 3.5679 0.111616932 0 3.5679 0.8883831 +3.61877131 0 3.61877131 0.111664884 0 3.61877131 0.8883351 +3.669643 0 3.669643 0.111711554 0 3.669643 0.888288438 +3.7205143 0 3.7205143 0.111757055 0 3.7205143 0.88824296 +3.77138567 0 3.77138567 0.111801393 0 3.77138567 0.8881986 +3.822257 0 3.822257 0.111844614 0 3.822257 0.8881554 +3.87312865 0 3.87312865 0.111886732 0 3.87312865 0.88811326 +3.924 0 3.924 0.111927837 0 3.924 0.888072133 +3.9748714 0 3.9748714 0.111967951 0 3.9748714 0.8880321 +4.025743 0 4.025743 0.112007059 0 4.025743 0.8879929 +4.07661438 0 4.07661438 0.112045273 0 4.07661438 0.8879547 +4.12748575 0 4.12748575 0.112082586 0 4.12748575 0.8879174 +4.178357 0 4.178357 0.112119026 0 4.178357 0.887881 +4.2292285 0 4.2292285 0.112154633 0 4.2292285 0.8878454 +4.2801 0 4.2801 0.11218942 0 4.2801 0.8878106 +4.33097124 0 4.33097124 0.112223424 0 4.33097124 0.887776554 +4.381843 0 4.381843 0.112256609 0 4.381843 0.8877434 +4.43271446 0 4.43271446 0.112289123 0 4.43271446 0.887710869 +4.483586 0 4.483586 0.112320922 0 4.483586 0.8876791 +4.534457 0 4.534457 0.112352036 0 4.534457 0.887648 +4.58532858 0 4.58532858 0.112382479 0 4.58532858 0.8876175 +4.6362 0 4.6362 0.112412281 0 4.6362 0.8875877 +4.68707132 0 4.68707132 0.11244145 0 4.68707132 0.8875586 +4.7379427 0 4.7379427 0.112470016 0 4.7379427 0.887529969 +4.788814 0 4.788814 0.112497985 0 4.788814 0.887502 +4.839686 0 4.839686 0.112525344 0 4.839686 0.887474656 +4.89055729 0 4.89055729 0.112552196 0 4.89055729 0.8874478 +4.94142866 0 4.94142866 0.112578511 0 4.94142866 0.8874215 +4.9923 0 4.9923 0.112604305 0 4.9923 0.8873957 +5.04317141 0 5.04317141 0.112629592 0 5.04317141 0.8873704 +5.094043 0 5.094043 0.112654388 0 5.094043 0.8873456 +5.144914 0 5.144914 0.112678707 0 5.144914 0.8873213 +5.19578552 0 5.19578552 0.112702556 0 5.19578552 0.887297451 +5.24665737 0 5.24665737 0.112725914 0 5.24665737 0.8872741 +5.29752874 0 5.29752874 0.112748876 0 5.29752874 0.887251139 +5.3484 0 5.3484 0.112771407 0 5.3484 0.8872286 +5.39927149 0 5.39927149 0.112793528 0 5.39927149 0.8872065 +5.450143 0 5.450143 0.112815246 0 5.450143 0.887184739 +5.501014 0 5.501014 0.11283657 0 5.501014 0.8871634 +5.5518856 0 5.5518856 0.112857513 0 5.5518856 0.8871425 +5.602757 0 5.602757 0.112878077 0 5.602757 0.8871219 +5.65362835 0 5.65362835 0.112898283 0 5.65362835 0.8871017 +5.7045 0 5.7045 0.112918094 0 5.7045 0.8870819 +5.75537157 0 5.75537157 0.1129376 0 5.75537157 0.8870624 +5.806243 0 5.806243 0.11295677 0 5.806243 0.887043238 +5.85711432 0 5.85711432 0.11297562 0 5.85711432 0.8870244 +5.90798569 0 5.90798569 0.112994142 0 5.90798569 0.887005866 +5.958857 0 5.958857 0.113012359 0 5.958857 0.8869876 +6.00972843 0 6.00972843 0.11303027 0 6.00972843 0.886969745 +6.0606 0 6.0606 0.11304789 0 6.0606 0.8869521 +6.11147165 0 6.11147165 0.113065176 0 6.11147165 0.8869348 +6.162343 0 6.162343 0.113082223 0 6.162343 0.88691777 +6.2132144 0 6.2132144 0.113098994 0 6.2132144 0.886901 +6.264086 0 6.264086 0.113115504 0 6.264086 0.8868845 +6.314957 0 6.314957 0.113131739 0 6.314957 0.886868238 +6.36582851 0 6.36582851 0.113147728 0 6.36582851 0.886852264 +6.4167 0 6.4167 0.113163464 0 6.4167 0.8868365 +6.46757126 0 6.46757126 0.113178954 0 6.46757126 0.886821032 +6.51844263 0 6.51844263 0.113194205 0 6.51844263 0.8868058 +6.56931448 0 6.56931448 0.113209188 0 6.56931448 0.8867908 +6.620186 0 6.620186 0.113223985 0 6.620186 0.88677603 +6.671057 0 6.671057 0.113238558 0 6.671057 0.8867614 +6.7219286 0 6.7219286 0.113252908 0 6.7219286 0.8867471 +6.7728 0 6.7728 0.113267049 0 6.7728 0.886732936 +6.82367134 0 6.82367134 0.113280974 0 6.82367134 0.886719048 +6.87454271 0 6.87454271 0.113294706 0 6.87454271 0.8867053 +6.925414 0 6.925414 0.113308229 0 6.925414 0.886691749 +6.976286 0 6.976286 0.113321528 0 6.976286 0.886678457 +7.02715731 0 7.02715731 0.113334671 0 7.02715731 0.886665344 +7.07802868 0 7.07802868 0.113347627 0 7.07802868 0.88665235 +7.1289 0 7.1289 0.1133604 0 7.1289 0.8866396 +7.17977142 0 7.17977142 0.113372989 0 7.17977142 0.886627 +7.230643 0 7.230643 0.113385409 0 7.230643 0.886614561 +7.281514 0 7.281514 0.113397658 0 7.281514 0.886602342 +7.33238554 0 7.33238554 0.113409735 0 7.33238554 0.886590242 +7.383257 0 7.383257 0.113421649 0 7.383257 0.8865784 +7.43412876 0 7.43412876 0.113433361 0 7.43412876 0.886566639 +7.485 0 7.485 0.113444962 0 7.485 0.886555 +7.53587151 0 7.53587151 0.1134564 0 7.53587151 0.886543632 +7.586743 0 7.586743 0.113467686 0 7.586743 0.8865323 +7.63761425 0 7.63761425 0.113478817 0 7.63761425 0.886521161 +7.68848562 0 7.68848562 0.113489814 0 7.68848562 0.8865102 +7.739357 0 7.739357 0.113500662 0 7.739357 0.886499345 +7.79022837 0 7.79022837 0.113511369 0 7.79022837 0.8864886 +7.8411 0 7.8411 0.113521904 0 7.8411 0.886478066 +7.89197159 0 7.89197159 0.113532342 0 7.89197159 0.886467636 +7.942843 0 7.942843 0.113542639 0 7.942843 0.8864574 +7.99371433 0 7.99371433 0.113552816 0 7.99371433 0.8864472 +8.044586 0 8.044586 0.11356283 0 8.044586 0.8864372 +8.095457 0 8.095457 0.113572776 0 8.095457 0.8864272 +8.146329 0 8.146329 0.113582544 0 8.146329 0.886417449 +8.1972 0 8.1972 0.113592245 0 8.1972 0.886407733 +8.248072 0 8.248072 0.113601774 0 8.248072 0.8863982 +8.298943 0 8.298943 0.113611244 0 8.298943 0.8863888 +8.349814 0 8.349814 0.113620542 0 8.349814 0.8863795 +8.400685 0 8.400685 0.113629781 0 8.400685 0.886370242 +8.451557 0 8.451557 0.113638856 0 8.451557 0.8863611 +8.502429 0 8.502429 0.113647826 0 8.502429 0.8863522 +8.5533 0 8.5533 0.113656744 0 8.5533 0.886343241 +8.604172 0 8.604172 0.1136655 0 8.604172 0.8863345 +8.655043 0 8.655043 0.113674209 0 8.655043 0.8863258 +8.7059145 0 8.7059145 0.113682762 0 8.7059145 0.886317253 +8.756785 0 8.756785 0.113691278 0 8.756785 0.8863087 +8.807657 0 8.807657 0.11369963 0 8.807657 0.8863004 +8.858528 0 8.858528 0.113707945 0 8.858528 0.88629204 +8.9094 0 8.9094 0.113716118 0 8.9094 0.8862839 +8.960272 0 8.960272 0.113724194 0 8.960272 0.8862758 +9.011143 0 9.011143 0.113732226 0 9.011143 0.8862678 +9.062015 0 9.062015 0.113740124 0 9.062015 0.886259854 +9.112885 0 9.112885 0.113747984 0 9.112885 0.886252 +9.163757 0 9.163757 0.11375571 0 9.163757 0.8862443 +9.214628 0 9.214628 0.113763392 0 9.214628 0.8862366 +9.2655 0 9.2655 0.113770947 0 9.2655 0.886229038 +9.316371 0 9.316371 0.113778472 0 9.316371 0.8862215 +9.367243 0 9.367243 0.113785855 0 9.367243 0.886214137 +9.418115 0 9.418115 0.113793172 0 9.418115 0.8862068 +9.468986 0 9.468986 0.113800451 0 9.468986 0.886199534 +9.519857 0 9.519857 0.1138076 0 9.519857 0.8861924 +9.570728 0 9.570728 0.113814734 0 9.570728 0.8861853 +9.6216 0 9.6216 0.113821737 0 9.6216 0.886178255 +9.672471 0 9.672471 0.113828719 0 9.672471 0.8861713 +9.723343 0 9.723343 0.113835581 0 9.723343 0.8861644 +9.774215 0 9.774215 0.113842368 0 9.774215 0.886157632 +9.825086 0 9.825086 0.113849133 0 9.825086 0.8861509 +9.87595749 0 9.87595749 0.113855779 0 9.87595749 0.8861442 +9.926828 0 9.926828 0.11386241 0 9.926828 0.8861376 +9.9777 0 9.9777 0.113868922 0 9.9777 0.886131048 +10.0285711 0 10.0285711 0.113875419 0 10.0285711 0.8861246 +10.079443 0 10.079443 0.1138818 0 10.079443 0.8861182 +10.1303139 0 10.1303139 0.113888167 0 10.1303139 0.886111856 +10.1811857 0 10.1811857 0.113894418 0 10.1811857 0.8861056 +10.2320576 0 10.2320576 0.113900617 0 10.2320576 0.8860994 +10.2829285 0 10.2829285 0.11388094 0 10.2829285 0.886119068 +10.3338 0 10.3338 0.113881171 0 10.3338 0.8861188 +10.3846712 0 10.3846712 0.113864474 0 10.3846712 0.8861355 +10.4355431 0 10.4355431 0.113905221 0 10.4355431 0.886094749 +10.486414 0 10.486414 0.113966189 0 10.486414 0.886033833 +10.5372858 0 10.5372858 0.113897361 0 10.5372858 0.8861026 +10.5881567 0 10.5881567 0.113897383 0 10.5881567 0.8861026 +10.6390285 0 10.6390285 0.113897368 0 10.6390285 0.8861026 +10.6899 0 10.6899 0.113897346 0 10.6899 0.8861027 +10.7407713 0 10.7407713 0.113897368 0 10.7407713 0.8861026 +10.7916431 0 10.7916431 0.113897353 0 10.7916431 0.8861027 +10.842514 0 10.842514 0.113897376 0 10.842514 0.8861026 +10.8933859 0 10.8933859 0.113897353 0 10.8933859 0.8861026 +10.9442568 0 10.9442568 0.113897383 0 10.9442568 0.8861026 +10.9951286 0 10.9951286 0.113897361 0 10.9951286 0.8861026 +11.046 0 11.046 0.113897391 0 11.046 0.8861026 +11.0968714 0 11.0968714 0.113897368 0 11.0968714 0.8861026 +11.1477432 0 11.1477432 0.113897346 0 11.1477432 0.8861027 +11.1986141 0 11.1986141 0.113897376 0 11.1986141 0.8861026 +11.249486 0 11.249486 0.113897353 0 11.249486 0.8861027 +11.3003569 0 11.3003569 0.113897376 0 11.3003569 0.8861026 +11.3512287 0 11.3512287 0.113897353 0 11.3512287 0.8861026 +11.4021 0 11.4021 0.113897383 0 11.4021 0.8861026 +11.4529715 0 11.4529715 0.113897361 0 11.4529715 0.8861026 +11.5038433 0 11.5038433 0.113897339 0 11.5038433 0.8861027 +11.5547142 0 11.5547142 0.113897368 0 11.5547142 0.8861026 +11.6055861 0 11.6055861 0.113897346 0 11.6055861 0.8861027 +11.6564569 0 11.6564569 0.113897376 0 11.6564569 0.8861026 +11.7073288 0 11.7073288 0.113897353 0 11.7073288 0.8861027 +11.7582 0 11.7582 0.113897383 0 11.7582 0.8861026 +11.8090715 0 11.8090715 0.113897361 0 11.8090715 0.8861026 +11.8599424 0 11.8599424 0.113897383 0 11.8599424 0.8861026 +11.9108143 0 11.9108143 0.113897361 0 11.9108143 0.8861026 +11.9616861 0 11.9616861 0.113897346 0 11.9616861 0.8861027 +12.012557 0 12.012557 0.113897368 0 12.012557 0.8861026 +12.0634289 0 12.0634289 0.113897346 0 12.0634289 0.8861027 +12.1143 0 12.1143 0.113897376 0 12.1143 0.8861026 +12.1651716 0 12.1651716 0.113897353 0 12.1651716 0.8861026 +12.2160425 0 12.2160425 0.113897383 0 12.2160425 0.8861026 +12.2669144 0 12.2669144 0.113897361 0 12.2669144 0.8861026 +12.3177853 0 12.3177853 0.113897383 0 12.3177853 0.8861026 +12.3686571 0 12.3686571 0.113897368 0 12.3686571 0.8861026 +12.419529 0 12.419529 0.113897346 0 12.419529 0.8861027 +12.4704 0 12.4704 0.113897368 0 12.4704 0.8861026 +12.5212717 0 12.5212717 0.113897353 0 12.5212717 0.8861027 +12.5721426 0 12.5721426 0.113897376 0 12.5721426 0.8861026 +12.6230145 0 12.6230145 0.113897353 0 12.6230145 0.8861026 +12.6738853 0 12.6738853 0.113897383 0 12.6738853 0.8861026 +12.7247572 0 12.7247572 0.113897361 0 12.7247572 0.8861026 +12.775629 0 12.775629 0.113897339 0 12.775629 0.8861027 +12.8265 0 12.8265 0.113897368 0 12.8265 0.8861026 +12.8773718 0 12.8773718 0.113897346 0 12.8773718 0.8861027 +12.9282427 0 12.9282427 0.113897376 0 12.9282427 0.8861026 +12.9791145 0 12.9791145 0.113897353 0 12.9791145 0.8861027 +13.0299854 0 13.0299854 0.113897376 0 13.0299854 0.8861026 +13.0808573 0 13.0808573 0.113897361 0 13.0808573 0.8861026 +13.1317282 0 13.1317282 0.113897383 0 13.1317282 0.8861026 +13.1826 0 13.1826 0.113897361 0 13.1826 0.8861026 +13.2334719 0 13.2334719 0.113897346 0 13.2334719 0.8861027 +13.2843428 0 13.2843428 0.113897368 0 13.2843428 0.8861026 +13.3352146 0 13.3352146 0.113897346 0 13.3352146 0.8861027 +13.3860855 0 13.3860855 0.113897376 0 13.3860855 0.8861026 +13.4369574 0 13.4369574 0.113897353 0 13.4369574 0.8861026 +13.4878283 0 13.4878283 0.113897383 0 13.4878283 0.8861026 +13.5387 0 13.5387 0.113897361 0 13.5387 0.8861026 +13.589571 0 13.589571 0.113897383 0 13.589571 0.8861026 +13.6404428 0 13.6404428 0.113897368 0 13.6404428 0.8861026 +13.6913147 0 13.6913147 0.113897346 0 13.6913147 0.8861027 +13.7421856 0 13.7421856 0.113897368 0 13.7421856 0.8861026 +13.7930574 0 13.7930574 0.113897353 0 13.7930574 0.8861027 +13.8439283 0 13.8439283 0.113897376 0 13.8439283 0.8861026 +13.8948 0 13.8948 0.113897353 0 13.8948 0.8861026 +13.9456711 0 13.9456711 0.113897383 0 13.9456711 0.8861026 +13.9965429 0 13.9965429 0.113897361 0 13.9965429 0.8861026 +14.0474138 0 14.0474138 0.113897383 0 14.0474138 0.8861026 +14.0982857 0 14.0982857 0.113897368 0 14.0982857 0.8861026 +14.1491575 0 14.1491575 0.113897346 0 14.1491575 0.8861027 +14.2000284 0 14.2000284 0.113897368 0 14.2000284 0.8861026 +14.2509 0 14.2509 0.113897353 0 14.2509 0.8861027 +14.3017712 0 14.3017712 0.113897376 0 14.3017712 0.8861026 +14.352643 0 14.352643 0.113897353 0 14.352643 0.8861026 +14.4035139 0 14.4035139 0.113897383 0 14.4035139 0.8861026 +14.4543858 0 14.4543858 0.113897361 0 14.4543858 0.8861026 +14.5052576 0 14.5052576 0.113897339 0 14.5052576 0.8861027 +14.5561285 0 14.5561285 0.113897368 0 14.5561285 0.8861026 +14.607 0 14.607 0.113897346 0 14.607 0.8861027 +14.6578712 0 14.6578712 0.113897376 0 14.6578712 0.8861026 +14.7087431 0 14.7087431 0.113897353 0 14.7087431 0.8861027 +14.759614 0 14.759614 0.113897376 0 14.759614 0.8861026 +14.8104858 0 14.8104858 0.113897361 0 14.8104858 0.8861026 +14.8613567 0 14.8613567 0.113897383 0 14.8613567 0.8861026 +14.9122286 0 14.9122286 0.113897361 0 14.9122286 0.8861026 +14.9631 0 14.9631 0.113897346 0 14.9631 0.8861027 +15.0139713 0 15.0139713 0.113897368 0 15.0139713 0.8861026 +15.0648432 0 15.0648432 0.113897346 0 15.0648432 0.8861027 +15.1157141 0 15.1157141 0.113897376 0 15.1157141 0.8861026 +15.1665859 0 15.1665859 0.113897353 0 15.1665859 0.8861026 +15.2174568 0 15.2174568 0.113897383 0 15.2174568 0.8861026 +15.2683287 0 15.2683287 0.113897361 0 15.2683287 0.8861026 +15.3192 0 15.3192 0.113897383 0 15.3192 0.8861026 +15.3700714 0 15.3700714 0.113897368 0 15.3700714 0.8861026 +15.4209433 0 15.4209433 0.113897346 0 15.4209433 0.8861027 +15.4718142 0 15.4718142 0.113897368 0 15.4718142 0.8861026 +15.522686 0 15.522686 0.113897353 0 15.522686 0.8861027 +15.5735569 0 15.5735569 0.113897376 0 15.5735569 0.8861026 +15.6244287 0 15.6244287 0.113897353 0 15.6244287 0.8861026 +15.6753 0 15.6753 0.113897383 0 15.6753 0.8861026 +15.7261715 0 15.7261715 0.113897361 0 15.7261715 0.8861026 +15.7770424 0 15.7770424 0.113897391 0 15.7770424 0.8861026 +15.8279142 0 15.8279142 0.113897368 0 15.8279142 0.8861026 +15.8787861 0 15.8787861 0.113897346 0 15.8787861 0.8861027 +15.929657 0 15.929657 0.113897376 0 15.929657 0.8861026 +15.9805288 0 15.9805288 0.113897353 0 15.9805288 0.8861027 +16.0314 0 16.0314 0.113897331 0 16.0314 0.8861027 +16.0822716 0 16.0822716 0.113897361 0 16.0822716 0.8861026 +16.1331425 0 16.1331425 0.113897383 0 16.1331425 0.8861026 +16.1840134 0 16.1840134 0.113897413 0 16.1840134 0.8861026 +16.2348862 0 16.2348862 0.113897339 0 16.2348862 0.8861027 +16.2857571 0 16.2857571 0.113897368 0 16.2857571 0.8861026 +16.336628 0 16.336628 0.113897391 0 16.336628 0.8861026 +16.3875 0 16.3875 0.113897324 0 16.3875 0.8861027 +16.4383717 0 16.4383717 0.113897353 0 16.4383717 0.8861027 +16.4892426 0 16.4892426 0.113897383 0 16.4892426 0.8861026 +16.5401134 0 16.5401134 0.113897406 0 16.5401134 0.8861026 +16.5909863 0 16.5909863 0.113897339 0 16.5909863 0.8861027 +16.6418571 0 16.6418571 0.113897361 0 16.6418571 0.8861026 +16.692728 0 16.692728 0.113897391 0 16.692728 0.8861026 +16.7436 0 16.7436 0.113897324 0 16.7436 0.8861027 +16.7944717 0 16.7944717 0.113897346 0 16.7944717 0.8861027 +16.8453426 0 16.8453426 0.113897376 0 16.8453426 0.8861026 +16.8962135 0 16.8962135 0.1138974 0 16.8962135 0.8861026 +16.9470863 0 16.9470863 0.113897331 0 16.9470863 0.8861027 +16.9979572 0 16.9979572 0.113897361 0 16.9979572 0.8861026 +17.0488281 0 17.0488281 0.113897383 0 17.0488281 0.8861026 +17.0997 0 17.0997 0.113897316 0 17.0997 0.8861027 +17.1505718 0 17.1505718 0.113897346 0 17.1505718 0.8861027 +17.2014427 0 17.2014427 0.113897368 0 17.2014427 0.8861026 +17.2523136 0 17.2523136 0.1138974 0 17.2523136 0.8861026 +17.3031864 0 17.3031864 0.113897331 0 17.3031864 0.8861027 +17.3540573 0 17.3540573 0.113897353 0 17.3540573 0.8861026 +17.4049282 0 17.4049282 0.113897383 0 17.4049282 0.8861026 +17.4558 0 17.4558 0.113897406 0 17.4558 0.8861026 +17.5066719 0 17.5066719 0.113897339 0 17.5066719 0.8861027 +17.5575428 0 17.5575428 0.113897368 0 17.5575428 0.8861026 +17.6084137 0 17.6084137 0.113897391 0 17.6084137 0.8861026 +17.6592865 0 17.6592865 0.113897324 0 17.6592865 0.8861027 +17.7101574 0 17.7101574 0.113897353 0 17.7101574 0.8861027 +17.7610283 0 17.7610283 0.113897376 0 17.7610283 0.8861026 +17.8119 0 17.8119 0.113897406 0 17.8119 0.8861026 +17.862772 0 17.862772 0.113897339 0 17.862772 0.8861027 +17.9136429 0 17.9136429 0.113897361 0 17.9136429 0.8861026 +17.9645138 0 17.9645138 0.113897391 0 17.9645138 0.8861026 +18.0153866 0 18.0153866 0.113897324 0 18.0153866 0.8861027 +18.0662575 0 18.0662575 0.113897346 0 18.0662575 0.8861027 +18.1171284 0 18.1171284 0.113897376 0 18.1171284 0.8861026 +18.168 0 18.168 0.1138974 0 18.168 0.8861026 +18.2188721 0 18.2188721 0.113897331 0 18.2188721 0.8861027 +18.269743 0 18.269743 0.113897361 0 18.269743 0.8861026 +18.3206139 0 18.3206139 0.113897383 0 18.3206139 0.8861026 +18.3714848 0 18.3714848 0.113897413 0 18.3714848 0.8861026 +18.4223576 0 18.4223576 0.113897346 0 18.4223576 0.8861027 +18.4732285 0 18.4732285 0.113897368 0 18.4732285 0.8861026 +18.5241 0 18.5241 0.1138974 0 18.5241 0.8861026 +18.5749722 0 18.5749722 0.113897331 0 18.5749722 0.8861027 +18.625843 0 18.625843 0.113897353 0 18.625843 0.8861026 +18.6767139 0 18.6767139 0.113897383 0 18.6767139 0.8861026 +18.7275848 0 18.7275848 0.113897406 0 18.7275848 0.8861026 +18.7784576 0 18.7784576 0.113897339 0 18.7784576 0.8861027 +18.8293285 0 18.8293285 0.113897368 0 18.8293285 0.8861026 +18.8802 0 18.8802 0.113897391 0 18.8802 0.8861026 +18.9310722 0 18.9310722 0.113897324 0 18.9310722 0.8861027 +18.9819431 0 18.9819431 0.113897353 0 18.9819431 0.8861027 +19.032814 0 19.032814 0.113897376 0 19.032814 0.8861026 +19.0836849 0 19.0836849 0.113897406 0 19.0836849 0.8861026 +19.1345577 0 19.1345577 0.113897331 0 19.1345577 0.8861027 +19.1854286 0 19.1854286 0.113897361 0 19.1854286 0.8861026 +19.2363 0 19.2363 0.113897391 0 19.2363 0.8861026 +19.2871723 0 19.2871723 0.113897316 0 19.2871723 0.8861027 +19.3380432 0 19.3380432 0.113897346 0 19.3380432 0.8861027 +19.3889141 0 19.3889141 0.113897376 0 19.3889141 0.8861026 +19.439785 0 19.439785 0.1138974 0 19.439785 0.8861026 +19.4906578 0 19.4906578 0.113897331 0 19.4906578 0.8861027 +19.5415287 0 19.5415287 0.113897361 0 19.5415287 0.8861026 +19.5924 0 19.5924 0.113897383 0 19.5924 0.8861026 +19.64327 0 19.64327 0.113897413 0 19.64327 0.8861026 +19.6941433 0 19.6941433 0.113897339 0 19.6941433 0.8861027 +19.7450142 0 19.7450142 0.113897368 0 19.7450142 0.8861026 +19.7958851 0 19.7958851 0.113897391 0 19.7958851 0.8861026 +19.8467579 0 19.8467579 0.113897324 0 19.8467579 0.8861027 +19.8976288 0 19.8976288 0.113897353 0 19.8976288 0.8861027 +19.9485 0 19.9485 0.113897376 0 19.9485 0.8861026 +19.99937 0 19.99937 0.113897406 0 19.99937 0.8861026 +20.0502434 0 20.0502434 0.113897339 0 20.0502434 0.8861027 +20.1011143 0 20.1011143 0.113897361 0 20.1011143 0.8861026 +20.1519852 0 20.1519852 0.113897391 0 20.1519852 0.8861026 +20.202858 0 20.202858 0.113897324 0 20.202858 0.8861027 +20.2537289 0 20.2537289 0.113897346 0 20.2537289 0.8861027 +20.3046 0 20.3046 0.113897376 0 20.3046 0.8861026 +20.35547 0 20.35547 0.1138974 0 20.35547 0.8861026 +20.4063435 0 20.4063435 0.113897331 0 20.4063435 0.8861027 +20.4572144 0 20.4572144 0.113897361 0 20.4572144 0.8861026 +20.5080853 0 20.5080853 0.113897383 0 20.5080853 0.8861026 +20.5589581 0 20.5589581 0.113897316 0 20.5589581 0.8861027 +20.6098289 0 20.6098289 0.113897346 0 20.6098289 0.8861027 +20.6607 0 20.6607 0.113897368 0 20.6607 0.8861026 +20.71157 0 20.71157 0.1138974 0 20.71157 0.8861026 +20.7624435 0 20.7624435 0.113897331 0 20.7624435 0.8861027 +20.8133144 0 20.8133144 0.113897353 0 20.8133144 0.8861026 +20.8641853 0 20.8641853 0.113897383 0 20.8641853 0.8861026 +20.9150562 0 20.9150562 0.113897406 0 20.9150562 0.8861026 +20.965929 0 20.965929 0.113897339 0 20.965929 0.8861027 +21.0168 0 21.0168 0.113897368 0 21.0168 0.8861026 +21.06767 0 21.06767 0.113897391 0 21.06767 0.8861026 +21.1185436 0 21.1185436 0.113897324 0 21.1185436 0.8861027 +21.1694145 0 21.1694145 0.113897353 0 21.1694145 0.8861027 +21.2202854 0 21.2202854 0.113897376 0 21.2202854 0.8861026 +21.2711563 0 21.2711563 0.113897406 0 21.2711563 0.8861026 +21.32203 0 21.32203 0.113897339 0 21.32203 0.8861027 +21.3729 0 21.3729 0.113897361 0 21.3729 0.8861026 +21.42377 0 21.42377 0.113897391 0 21.42377 0.8861026 +21.4746437 0 21.4746437 0.113897324 0 21.4746437 0.8861027 +21.5255146 0 21.5255146 0.113897346 0 21.5255146 0.8861027 +21.5763855 0 21.5763855 0.113897376 0 21.5763855 0.8861026 +21.6272564 0 21.6272564 0.1138974 0 21.6272564 0.8861026 +21.67813 0 21.67813 0.113897331 0 21.67813 0.8861027 +21.729 0 21.729 0.113897361 0 21.729 0.8861026 +21.779871 0 21.779871 0.113897383 0 21.779871 0.8861026 +21.8307438 0 21.8307438 0.113897316 0 21.8307438 0.8861027 +21.8816147 0 21.8816147 0.113897346 0 21.8816147 0.8861027 +21.9324856 0 21.9324856 0.113897368 0 21.9324856 0.8861026 +21.9833565 0 21.9833565 0.1138974 0 21.9833565 0.8861026 +22.03423 0 22.03423 0.113897331 0 22.03423 0.8861027 +22.0851 0 22.0851 0.113897353 0 22.0851 0.8861026 +22.1359711 0 22.1359711 0.113897383 0 22.1359711 0.8861026 +22.186842 0 22.186842 0.113897406 0 22.186842 0.8861026 +22.2377148 0 22.2377148 0.113897339 0 22.2377148 0.8861027 +22.2885857 0 22.2885857 0.113897368 0 22.2885857 0.8861026 +22.3394566 0 22.3394566 0.113897391 0 22.3394566 0.8861026 +22.39033 0 22.39033 0.113897324 0 22.39033 0.8861027 +22.4412 0 22.4412 0.113897353 0 22.4412 0.8861027 +22.4920712 0 22.4920712 0.113897376 0 22.4920712 0.8861026 +22.542942 0 22.542942 0.113897406 0 22.542942 0.8861026 +22.5938148 0 22.5938148 0.113897339 0 22.5938148 0.8861027 +22.6446857 0 22.6446857 0.113897361 0 22.6446857 0.8861026 +22.6955566 0 22.6955566 0.113897391 0 22.6955566 0.8861026 +22.74643 0 22.74643 0.113897324 0 22.74643 0.8861027 +22.7973 0 22.7973 0.113897346 0 22.7973 0.8861027 +22.8481712 0 22.8481712 0.113897376 0 22.8481712 0.8861026 +22.8990421 0 22.8990421 0.1138974 0 22.8990421 0.8861026 +22.9499149 0 22.9499149 0.113897331 0 22.9499149 0.8861027 +23.0007858 0 23.0007858 0.113897361 0 23.0007858 0.8861026 +23.0516567 0 23.0516567 0.113897383 0 23.0516567 0.8861026 +23.1025276 0 23.1025276 0.113897413 0 23.1025276 0.8861026 +23.1534 0 23.1534 0.113897346 0 23.1534 0.8861027 +23.2042713 0 23.2042713 0.113897368 0 23.2042713 0.8861026 +23.2551422 0 23.2551422 0.1138974 0 23.2551422 0.8861026 +23.306015 0 23.306015 0.113897331 0 23.306015 0.8861027 +23.3568859 0 23.3568859 0.113897353 0 23.3568859 0.8861026 +23.4077568 0 23.4077568 0.113897383 0 23.4077568 0.8861026 +23.4586277 0 23.4586277 0.113897406 0 23.4586277 0.8861026 +23.5095 0 23.5095 0.113897339 0 23.5095 0.8861027 +23.5603714 0 23.5603714 0.113897368 0 23.5603714 0.8861026 +23.6112423 0 23.6112423 0.113897391 0 23.6112423 0.8861026 +23.6621151 0 23.6621151 0.113897324 0 23.6621151 0.8861027 +23.712986 0 23.712986 0.113897353 0 23.712986 0.8861027 +23.7638569 0 23.7638569 0.113897376 0 23.7638569 0.8861026 +23.8147278 0 23.8147278 0.113897406 0 23.8147278 0.8861026 +23.8656 0 23.8656 0.113897331 0 23.8656 0.8861027 +23.9164715 0 23.9164715 0.113897361 0 23.9164715 0.8861026 +23.9673424 0 23.9673424 0.113897391 0 23.9673424 0.8861026 +24.0182152 0 24.0182152 0.113897316 0 24.0182152 0.8861027 +24.0690861 0 24.0690861 0.113897346 0 24.0690861 0.8861027 +24.119957 0 24.119957 0.113897376 0 24.119957 0.8861026 +24.1708279 0 24.1708279 0.1138974 0 24.1708279 0.8861026 +24.2217 0 24.2217 0.113897331 0 24.2217 0.8861027 +24.2725716 0 24.2725716 0.113897361 0 24.2725716 0.8861026 +24.3234425 0 24.3234425 0.113897383 0 24.3234425 0.8861026 +24.3743134 0 24.3743134 0.113897413 0 24.3743134 0.8861026 +24.4251862 0 24.4251862 0.113897339 0 24.4251862 0.8861027 +24.4760571 0 24.4760571 0.113897368 0 24.4760571 0.8861026 +24.5269279 0 24.5269279 0.113897391 0 24.5269279 0.8861026 +24.5778 0 24.5778 0.113897324 0 24.5778 0.8861027 +24.6286716 0 24.6286716 0.113897353 0 24.6286716 0.8861027 +24.6795425 0 24.6795425 0.113897376 0 24.6795425 0.8861026 +24.7304134 0 24.7304134 0.113897406 0 24.7304134 0.8861026 +24.7812862 0 24.7812862 0.113897339 0 24.7812862 0.8861027 +24.8321571 0 24.8321571 0.113897361 0 24.8321571 0.8861026 +24.883028 0 24.883028 0.113897391 0 24.883028 0.8861026 +24.9339 0 24.9339 0.113897324 0 24.9339 0.8861027 +24.9847717 0 24.9847717 0.113897346 0 24.9847717 0.8861027 +25.0356426 0 25.0356426 0.113897376 0 25.0356426 0.8861026 +25.0865135 0 25.0865135 0.1138974 0 25.0865135 0.8861026 +25.1373863 0 25.1373863 0.113897331 0 25.1373863 0.8861027 +25.1882572 0 25.1882572 0.113897361 0 25.1882572 0.8861026 +25.2391281 0 25.2391281 0.113897383 0 25.2391281 0.8861026 +25.29 0 25.29 0.113897316 0 25.29 0.8861027 +25.3408718 0 25.3408718 0.113897346 0 25.3408718 0.8861027 +25.3917427 0 25.3917427 0.113897368 0 25.3917427 0.8861026 +25.4426136 0 25.4426136 0.1138974 0 25.4426136 0.8861026 +25.4934864 0 25.4934864 0.113897331 0 25.4934864 0.8861027 +25.5443573 0 25.5443573 0.113897353 0 25.5443573 0.8861026 +25.5952282 0 25.5952282 0.113897383 0 25.5952282 0.8861026 +25.6461 0 25.6461 0.113897406 0 25.6461 0.8861026 +25.6969719 0 25.6969719 0.113897339 0 25.6969719 0.8861027 +25.7478428 0 25.7478428 0.113897368 0 25.7478428 0.8861026 +25.7987137 0 25.7987137 0.113897391 0 25.7987137 0.8861026 +25.8495865 0 25.8495865 0.113897324 0 25.8495865 0.8861027 +25.9004574 0 25.9004574 0.113897353 0 25.9004574 0.8861027 +25.9513283 0 25.9513283 0.113897376 0 25.9513283 0.8861026 +26.0022 0 26.0022 0.113897406 0 26.0022 0.8861026 +26.053072 0 26.053072 0.113897339 0 26.053072 0.8861027 +26.1039429 0 26.1039429 0.113897361 0 26.1039429 0.8861026 +26.1548138 0 26.1548138 0.113897391 0 26.1548138 0.8861026 +26.2056866 0 26.2056866 0.113897324 0 26.2056866 0.8861027 +26.2565575 0 26.2565575 0.113897346 0 26.2565575 0.8861027 +26.3074284 0 26.3074284 0.113897376 0 26.3074284 0.8861026 +26.3583 0 26.3583 0.1138974 0 26.3583 0.8861026 +26.4091721 0 26.4091721 0.113897331 0 26.4091721 0.8861027 +26.460043 0 26.460043 0.113897361 0 26.460043 0.8861026 +26.5109138 0 26.5109138 0.113897383 0 26.5109138 0.8861026 +26.5617867 0 26.5617867 0.113897316 0 26.5617867 0.8861027 +26.6126575 0 26.6126575 0.113897346 0 26.6126575 0.8861027 +26.6635284 0 26.6635284 0.113897368 0 26.6635284 0.8861026 +26.7144 0 26.7144 0.1138974 0 26.7144 0.8861026 +26.7652721 0 26.7652721 0.113897331 0 26.7652721 0.8861027 +26.816143 0 26.816143 0.113897353 0 26.816143 0.8861026 +26.8670139 0 26.8670139 0.113897383 0 26.8670139 0.8861026 +26.9178848 0 26.9178848 0.113897406 0 26.9178848 0.8861026 +26.9687576 0 26.9687576 0.113897339 0 26.9687576 0.8861027 +27.0196285 0 27.0196285 0.113897368 0 27.0196285 0.8861026 +27.0705 0 27.0705 0.113897391 0 27.0705 0.8861026 +27.1213722 0 27.1213722 0.113897324 0 27.1213722 0.8861027 +27.1722431 0 27.1722431 0.113897353 0 27.1722431 0.8861027 +27.223114 0 27.223114 0.113897376 0 27.223114 0.8861026 +27.2739849 0 27.2739849 0.113897406 0 27.2739849 0.8861026 +27.3248577 0 27.3248577 0.113897339 0 27.3248577 0.8861027 +27.3757286 0 27.3757286 0.113897361 0 27.3757286 0.8861026 +27.4266 0 27.4266 0.113897391 0 27.4266 0.8861026 +27.4774723 0 27.4774723 0.113897324 0 27.4774723 0.8861027 +27.5283432 0 27.5283432 0.113897346 0 27.5283432 0.8861027 +27.5792141 0 27.5792141 0.113897376 0 27.5792141 0.8861026 +27.630085 0 27.630085 0.1138974 0 27.630085 0.8861026 +27.6809578 0 27.6809578 0.113897331 0 27.6809578 0.8861027 +27.7318287 0 27.7318287 0.113897361 0 27.7318287 0.8861026 +27.7827 0 27.7827 0.113897383 0 27.7827 0.8861026 +27.83357 0 27.83357 0.113897413 0 27.83357 0.8861026 +27.8844433 0 27.8844433 0.113897346 0 27.8844433 0.8861027 +27.9353142 0 27.9353142 0.113897368 0 27.9353142 0.8861026 +27.9861851 0 27.9861851 0.1138974 0 27.9861851 0.8861026 +28.0370579 0 28.0370579 0.113897331 0 28.0370579 0.8861027 +28.0879288 0 28.0879288 0.113897353 0 28.0879288 0.8861026 +28.1388 0 28.1388 0.113897383 0 28.1388 0.8861026 +28.18967 0 28.18967 0.113897406 0 28.18967 0.8861026 +28.2405434 0 28.2405434 0.113897339 0 28.2405434 0.8861027 +28.2914143 0 28.2914143 0.113897368 0 28.2914143 0.8861026 +28.3422852 0 28.3422852 0.113897391 0 28.3422852 0.8861026 +28.393158 0 28.393158 0.113897324 0 28.393158 0.8861027 +28.4440289 0 28.4440289 0.113897353 0 28.4440289 0.8861027 +28.4949 0 28.4949 0.113897376 0 28.4949 0.8861026 +28.54577 0 28.54577 0.113897406 0 28.54577 0.8861026 +28.5966434 0 28.5966434 0.113897331 0 28.5966434 0.8861027 +28.6475143 0 28.6475143 0.113897361 0 28.6475143 0.8861026 +28.6983852 0 28.6983852 0.113897391 0 28.6983852 0.8861026 +28.749258 0 28.749258 0.113897316 0 28.749258 0.8861027 +28.8001289 0 28.8001289 0.113897346 0 28.8001289 0.8861027 +28.851 0 28.851 0.113897376 0 28.851 0.8861026 +28.90187 0 28.90187 0.1138974 0 28.90187 0.8861026 +28.9527435 0 28.9527435 0.113897331 0 28.9527435 0.8861027 +29.0036144 0 29.0036144 0.113897361 0 29.0036144 0.8861026 +29.0544853 0 29.0544853 0.113897383 0 29.0544853 0.8861026 +29.1053562 0 29.1053562 0.113897413 0 29.1053562 0.8861026 +29.156229 0 29.156229 0.113897339 0 29.156229 0.8861027 +29.2071 0 29.2071 0.113897368 0 29.2071 0.8861026 +29.25797 0 29.25797 0.113897391 0 29.25797 0.8861026 +29.3088436 0 29.3088436 0.113897324 0 29.3088436 0.8861027 +29.3597145 0 29.3597145 0.113897353 0 29.3597145 0.8861027 +29.4105854 0 29.4105854 0.113897376 0 29.4105854 0.8861026 +29.4614563 0 29.4614563 0.113897406 0 29.4614563 0.8861026 +29.51233 0 29.51233 0.113897339 0 29.51233 0.8861027 +29.5632 0 29.5632 0.113897361 0 29.5632 0.8861026 +29.61407 0 29.61407 0.113897391 0 29.61407 0.8861026 +29.6649437 0 29.6649437 0.113897324 0 29.6649437 0.8861027 +29.7158146 0 29.7158146 0.113897346 0 29.7158146 0.8861027 +29.7666855 0 29.7666855 0.113897376 0 29.7666855 0.8861026 +29.8175564 0 29.8175564 0.1138974 0 29.8175564 0.8861026 +29.86843 0 29.86843 0.113897331 0 29.86843 0.8861027 +29.9193 0 29.9193 0.113897361 0 29.9193 0.8861026 +29.970171 0 29.970171 0.113897383 0 29.970171 0.8861026 +30.0210438 0 30.0210438 0.113897316 0 30.0210438 0.8861027 +30.0719147 0 30.0719147 0.113897346 0 30.0719147 0.8861027 +30.1227856 0 30.1227856 0.113897368 0 30.1227856 0.8861026 +30.1736565 0 30.1736565 0.1138974 0 30.1736565 0.8861026 +30.22453 0 30.22453 0.113897331 0 30.22453 0.8861027 +30.2754 0 30.2754 0.113897353 0 30.2754 0.8861026 +30.3262711 0 30.3262711 0.113897383 0 30.3262711 0.8861026 +30.377142 0 30.377142 0.113897406 0 30.377142 0.8861026 +30.4280148 0 30.4280148 0.113897339 0 30.4280148 0.8861027 +30.4788857 0 30.4788857 0.113897368 0 30.4788857 0.8861026 +30.5297565 0 30.5297565 0.113897391 0 30.5297565 0.8861026 +30.58063 0 30.58063 0.113897324 0 30.58063 0.8861027 +30.6315 0 30.6315 0.113897353 0 30.6315 0.8861027 +30.6823711 0 30.6823711 0.113897376 0 30.6823711 0.8861026 +30.733242 0 30.733242 0.113897406 0 30.733242 0.8861026 +30.7841148 0 30.7841148 0.113897339 0 30.7841148 0.8861027 +30.8349857 0 30.8349857 0.113897361 0 30.8349857 0.8861026 +30.8858566 0 30.8858566 0.113897391 0 30.8858566 0.8861026 +30.93673 0 30.93673 0.113897324 0 30.93673 0.8861027 +30.9876 0 30.9876 0.113897346 0 30.9876 0.8861027 +31.0384712 0 31.0384712 0.113897376 0 31.0384712 0.8861026 +31.0893421 0 31.0893421 0.1138974 0 31.0893421 0.8861026 +31.1402149 0 31.1402149 0.113897331 0 31.1402149 0.8861027 +31.1910858 0 31.1910858 0.113897361 0 31.1910858 0.8861026 +31.2419567 0 31.2419567 0.113897383 0 31.2419567 0.8861026 +31.29283 0 31.29283 0.113897316 0 31.29283 0.8861027 +31.3437 0 31.3437 0.113897346 0 31.3437 0.8861027 +31.3945713 0 31.3945713 0.113897368 0 31.3945713 0.8861026 +31.4454422 0 31.4454422 0.1138974 0 31.4454422 0.8861026 +31.496315 0 31.496315 0.113897331 0 31.496315 0.8861027 +31.5471859 0 31.5471859 0.113897353 0 31.5471859 0.8861026 +31.5980568 0 31.5980568 0.113897383 0 31.5980568 0.8861026 +31.6489277 0 31.6489277 0.113897406 0 31.6489277 0.8861026 +31.6998 0 31.6998 0.113897339 0 31.6998 0.8861027 +31.7506714 0 31.7506714 0.113897368 0 31.7506714 0.8861026 +31.8015423 0 31.8015423 0.113897391 0 31.8015423 0.8861026 +31.8524151 0 31.8524151 0.113897324 0 31.8524151 0.8861027 +31.903286 0 31.903286 0.113897353 0 31.903286 0.8861027 +31.9541569 0 31.9541569 0.113897376 0 31.9541569 0.8861026 +32.0050278 0 32.0050278 0.113897406 0 32.0050278 0.8861026 +32.0559 0 32.0559 0.113897339 0 32.0559 0.8861027 +32.10677 0 32.10677 0.113897458 0 32.10677 0.886102557 +32.1576424 0 32.1576424 0.113897391 0 32.1576424 0.8861026 +32.2085152 0 32.2085152 0.113897316 0 32.2085152 0.8861027 +32.2593842 0 32.2593842 0.113897443 0 32.2593842 0.886102557 +32.310257 0 32.310257 0.113897368 0 32.310257 0.8861026 +32.36113 0 32.36113 0.1138973 0 32.36113 0.8861027 +32.412 0 32.412 0.11389742 0 32.412 0.886102557 +32.46287 0 32.46287 0.113897353 0 32.46287 0.8861026 +32.5137444 0 32.5137444 0.113897286 0 32.5137444 0.886102736 +32.5646133 0 32.5646133 0.113897406 0 32.5646133 0.8861026 +32.6154861 0 32.6154861 0.113897339 0 32.6154861 0.8861027 +32.66636 0 32.66636 0.113897271 0 32.66636 0.886102736 +32.7172279 0 32.7172279 0.1138974 0 32.7172279 0.8861026 +32.7681 0 32.7681 0.113897331 0 32.7681 0.8861027 +32.81897 0 32.81897 0.11389745 0 32.81897 0.886102557 +32.8698425 0 32.8698425 0.113897376 0 32.8698425 0.8861026 +32.9207153 0 32.9207153 0.113897309 0 32.9207153 0.8861027 +32.9715843 0 32.9715843 0.113897435 0 32.9715843 0.886102557 +33.0224571 0 33.0224571 0.113897361 0 33.0224571 0.8861026 +33.07333 0 33.07333 0.113897294 0 33.07333 0.8861027 +33.1242 0 33.1242 0.11389742 0 33.1242 0.886102557 +33.17507 0 33.17507 0.113897346 0 33.17507 0.8861027 +33.2259445 0 33.2259445 0.113897279 0 33.2259445 0.886102736 +33.2768135 0 33.2768135 0.113897406 0 33.2768135 0.8861026 +33.3276863 0 33.3276863 0.113897331 0 33.3276863 0.8861027 +33.3785553 0 33.3785553 0.113897458 0 33.3785553 0.886102557 +33.42943 0 33.42943 0.113897383 0 33.42943 0.8861026 +33.4803 0 33.4803 0.113897316 0 33.4803 0.8861027 +33.53117 0 33.53117 0.113897435 0 33.53117 0.886102557 +33.5820427 0 33.5820427 0.113897368 0 33.5820427 0.8861026 +33.6329155 0 33.6329155 0.1138973 0 33.6329155 0.8861027 +33.6837845 0 33.6837845 0.11389742 0 33.6837845 0.886102557 +33.7346573 0 33.7346573 0.113897353 0 33.7346573 0.8861026 +33.78553 0 33.78553 0.113897286 0 33.78553 0.886102736 +33.8364 0 33.8364 0.113897406 0 33.8364 0.8861026 +33.88727 0 33.88727 0.113897339 0 33.88727 0.8861027 +33.9381447 0 33.9381447 0.113897271 0 33.9381447 0.886102736 +33.9890137 0 33.9890137 0.1138974 0 33.9890137 0.8861026 +34.0398865 0 34.0398865 0.113897324 0 34.0398865 0.8861027 +34.0907555 0 34.0907555 0.11389745 0 34.0907555 0.886102557 +34.14163 0 34.14163 0.113897376 0 34.14163 0.8861026 +34.1925 0 34.1925 0.113897309 0 34.1925 0.8861027 +34.24337 0 34.24337 0.113897428 0 34.24337 0.886102557 +34.2942429 0 34.2942429 0.113897361 0 34.2942429 0.8861026 +34.3451157 0 34.3451157 0.113897294 0 34.3451157 0.8861027 +34.3959846 0 34.3959846 0.113897413 0 34.3959846 0.886102557 +34.4468575 0 34.4468575 0.113897346 0 34.4468575 0.8861027 +34.49773 0 34.49773 0.113897279 0 34.49773 0.886102736 +34.5486 0 34.5486 0.113897406 0 34.5486 0.8861026 +34.599472 0 34.599472 0.113897331 0 34.599472 0.8861027 +34.65034 0 34.65034 0.11389745 0 34.65034 0.886102557 +34.7012138 0 34.7012138 0.113897383 0 34.7012138 0.8861026 +34.7520866 0 34.7520866 0.113897316 0 34.7520866 0.8861027 +34.8029556 0 34.8029556 0.113897435 0 34.8029556 0.886102557 +34.85383 0 34.85383 0.113897368 0 34.85383 0.8861026 +34.9047 0 34.9047 0.1138973 0 34.9047 0.8861027 +34.95557 0 34.95557 0.11389742 0 34.95557 0.886102557 +35.006443 0 35.006443 0.113897353 0 35.006443 0.8861026 +35.0573158 0 35.0573158 0.113897286 0 35.0573158 0.886102736 +35.1081848 0 35.1081848 0.113897406 0 35.1081848 0.8861026 +35.1590576 0 35.1590576 0.113897339 0 35.1590576 0.8861027 +35.20993 0 35.20993 0.113897271 0 35.20993 0.886102736 +35.2608 0 35.2608 0.113897391 0 35.2608 0.8861026 +35.3116722 0 35.3116722 0.113897324 0 35.3116722 0.8861027 +35.36254 0 35.36254 0.113897443 0 35.36254 0.886102557 +35.413414 0 35.413414 0.113897376 0 35.413414 0.8861026 +35.4642868 0 35.4642868 0.113897309 0 35.4642868 0.8861027 +35.5151558 0 35.5151558 0.113897428 0 35.5151558 0.886102557 +35.56603 0 35.56603 0.113897361 0 35.56603 0.8861026 +35.6169 0 35.6169 0.113897294 0 35.6169 0.8861027 +35.66777 0 35.66777 0.113897413 0 35.66777 0.886102557 +35.7186432 0 35.7186432 0.113897346 0 35.7186432 0.8861027 +35.769516 0 35.769516 0.113897279 0 35.769516 0.886102736 +35.820385 0 35.820385 0.1138974 0 35.820385 0.8861026 +35.8712578 0 35.8712578 0.113897331 0 35.8712578 0.8861027 +35.9221268 0 35.9221268 0.11389745 0 35.9221268 0.886102557 +35.973 0 35.973 0.113897383 0 35.973 0.8861026 +36.0238724 0 36.0238724 0.113897316 0 36.0238724 0.8861027 +36.07474 0 36.07474 0.113897435 0 36.07474 0.886102557 +36.1256142 0 36.1256142 0.113897368 0 36.1256142 0.8861026 +36.176487 0 36.176487 0.1138973 0 36.176487 0.8861027 +36.227356 0 36.227356 0.11389742 0 36.227356 0.886102557 +36.27823 0 36.27823 0.113897353 0 36.27823 0.8861026 +36.3291 0 36.3291 0.113897286 0 36.3291 0.886102736 +36.37997 0 36.37997 0.113897406 0 36.37997 0.8861026 +36.4308434 0 36.4308434 0.113897339 0 36.4308434 0.8861027 +36.4817162 0 36.4817162 0.113897271 0 36.4817162 0.886102736 +36.5325851 0 36.5325851 0.113897391 0 36.5325851 0.8861026 +36.5834579 0 36.5834579 0.113897324 0 36.5834579 0.8861027 +36.6343269 0 36.6343269 0.113897443 0 36.6343269 0.886102557 +36.6852 0 36.6852 0.113897376 0 36.6852 0.8861026 +36.7360725 0 36.7360725 0.113897309 0 36.7360725 0.8861027 +36.78694 0 36.78694 0.113897428 0 36.78694 0.886102557 +36.8378143 0 36.8378143 0.113897361 0 36.8378143 0.8861026 +36.8886871 0 36.8886871 0.113897294 0 36.8886871 0.8861027 +36.9395561 0 36.9395561 0.113897413 0 36.9395561 0.886102557 +36.99043 0 36.99043 0.113897346 0 36.99043 0.8861027 +37.0413 0 37.0413 0.113897279 0 37.0413 0.886102736 +37.09217 0 37.09217 0.113897406 0 37.09217 0.8861026 +37.1430435 0 37.1430435 0.113897331 0 37.1430435 0.8861027 +37.1939125 0 37.1939125 0.11389745 0 37.1939125 0.886102557 +37.2447853 0 37.2447853 0.113897383 0 37.2447853 0.8861026 +37.29566 0 37.29566 0.113897316 0 37.29566 0.8861027 +37.3465271 0 37.3465271 0.113897435 0 37.3465271 0.886102557 +37.3974 0 37.3974 0.113897368 0 37.3974 0.8861026 +37.4482727 0 37.4482727 0.1138973 0 37.4482727 0.8861027 +37.49914 0 37.49914 0.11389742 0 37.49914 0.886102557 +37.5500145 0 37.5500145 0.113897353 0 37.5500145 0.8861026 +37.6008873 0 37.6008873 0.113897286 0 37.6008873 0.886102736 +37.6517563 0 37.6517563 0.113897406 0 37.6517563 0.8861026 +37.70263 0 37.70263 0.113897339 0 37.70263 0.8861027 +37.7535 0 37.7535 0.113897271 0 37.7535 0.886102736 +37.80437 0 37.80437 0.1138974 0 37.80437 0.8861026 +37.8552437 0 37.8552437 0.113897324 0 37.8552437 0.8861027 +37.9061127 0 37.9061127 0.11389745 0 37.9061127 0.886102557 +37.9569855 0 37.9569855 0.113897376 0 37.9569855 0.8861026 +38.00786 0 38.00786 0.113897309 0 38.00786 0.8861027 +38.0587273 0 38.0587273 0.113897428 0 38.0587273 0.886102557 +38.1096 0 38.1096 0.113897361 0 38.1096 0.8861026 +38.1604729 0 38.1604729 0.113897294 0 38.1604729 0.8861027 +38.21134 0 38.21134 0.113897413 0 38.21134 0.886102557 +38.2622147 0 38.2622147 0.113897346 0 38.2622147 0.8861027 +38.3130875 0 38.3130875 0.113897279 0 38.3130875 0.886102736 +38.3639565 0 38.3639565 0.113897406 0 38.3639565 0.8861026 +38.41483 0 38.41483 0.113897331 0 38.41483 0.8861027 +38.4657 0 38.4657 0.113897458 0 38.4657 0.886102557 +38.51657 0 38.51657 0.113897383 0 38.51657 0.8861026 +38.5674438 0 38.5674438 0.113897316 0 38.5674438 0.8861027 +38.6183128 0 38.6183128 0.113897435 0 38.6183128 0.886102557 +38.6691856 0 38.6691856 0.113897368 0 38.6691856 0.8861026 +38.72006 0 38.72006 0.1138973 0 38.72006 0.8861027 +38.7709274 0 38.7709274 0.11389742 0 38.7709274 0.886102557 +38.8218 0 38.8218 0.113897353 0 38.8218 0.8861026 +38.872673 0 38.872673 0.113897286 0 38.872673 0.886102736 +38.923542 0 38.923542 0.113897406 0 38.923542 0.8861026 +38.9744148 0 38.9744148 0.113897339 0 38.9744148 0.8861027 +39.0252838 0 39.0252838 0.113897458 0 39.0252838 0.886102557 +39.0761566 0 39.0761566 0.113897391 0 39.0761566 0.8861026 +39.12703 0 39.12703 0.113897324 0 39.12703 0.8861027 +39.1779 0 39.1779 0.113897443 0 39.1779 0.886102557 +39.22877 0 39.22877 0.113897376 0 39.22877 0.8861026 +39.279644 0 39.279644 0.113897309 0 39.279644 0.8861027 +39.330513 0 39.330513 0.113897428 0 39.330513 0.886102557 +39.3813858 0 39.3813858 0.113897361 0 39.3813858 0.8861026 +39.43226 0 39.43226 0.113897294 0 39.43226 0.886102736 +39.4831276 0 39.4831276 0.113897413 0 39.4831276 0.8861026 +39.534 0 39.534 0.113897346 0 39.534 0.8861027 +39.5848732 0 39.5848732 0.113897279 0 39.5848732 0.886102736 +39.6357422 0 39.6357422 0.1138974 0 39.6357422 0.8861026 +39.686615 0 39.686615 0.113897331 0 39.686615 0.8861027 +39.737484 0 39.737484 0.11389745 0 39.737484 0.886102557 +39.7883568 0 39.7883568 0.113897383 0 39.7883568 0.8861026 +39.83923 0 39.83923 0.113897316 0 39.83923 0.8861027 +39.8901 0 39.8901 0.113897435 0 39.8901 0.886102557 +39.94097 0 39.94097 0.113897368 0 39.94097 0.8861026 +39.9918442 0 39.9918442 0.1138973 0 39.9918442 0.8861027 +40.0427132 0 40.0427132 0.11389742 0 40.0427132 0.886102557 +40.093586 0 40.093586 0.113897353 0 40.093586 0.8861027 +40.14446 0 40.14446 0.113897286 0 40.14446 0.886102736 +40.1953278 0 40.1953278 0.113897406 0 40.1953278 0.8861026 +40.2462 0 40.2462 0.113897339 0 40.2462 0.8861027 +40.29707 0 40.29707 0.113897458 0 40.29707 0.886102557 +40.3479424 0 40.3479424 0.113897391 0 40.3479424 0.8861026 +40.3988152 0 40.3988152 0.113897324 0 40.3988152 0.8861027 +40.4496841 0 40.4496841 0.113897443 0 40.4496841 0.886102557 +40.5005569 0 40.5005569 0.113897376 0 40.5005569 0.8861026 +40.55143 0 40.55143 0.1138973 0 40.55143 0.8861027 +40.6023 0 40.6023 0.113897428 0 40.6023 0.886102557 +40.65317 0 40.65317 0.113897353 0 40.65317 0.8861026 +40.7040443 0 40.7040443 0.113897286 0 40.7040443 0.886102736 +40.7549133 0 40.7549133 0.113897413 0 40.7549133 0.8861026 +40.8057861 0 40.8057861 0.113897346 0 40.8057861 0.8861027 +40.85666 0 40.85666 0.113897279 0 40.85666 0.886102736 +40.9075279 0 40.9075279 0.1138974 0 40.9075279 0.8861026 +40.9584 0 40.9584 0.113897331 0 40.9584 0.8861027 +41.00927 0 41.00927 0.11389745 0 41.00927 0.886102557 +41.0601425 0 41.0601425 0.113897383 0 41.0601425 0.8861026 +41.1110153 0 41.1110153 0.113897309 0 41.1110153 0.8861027 +41.1618843 0 41.1618843 0.113897435 0 41.1618843 0.886102557 +41.2127571 0 41.2127571 0.113897361 0 41.2127571 0.8861026 +41.26363 0 41.26363 0.113897294 0 41.26363 0.8861027 +41.3145 0 41.3145 0.11389742 0 41.3145 0.886102557 +41.36537 0 41.36537 0.113897346 0 41.36537 0.8861027 +41.4162445 0 41.4162445 0.113897286 0 41.4162445 0.886102736 +41.4671135 0 41.4671135 0.113897406 0 41.4671135 0.8861026 +41.5179863 0 41.5179863 0.113897339 0 41.5179863 0.8861027 +41.5688553 0 41.5688553 0.113897458 0 41.5688553 0.886102557 +41.6197281 0 41.6197281 0.113897383 0 41.6197281 0.8861026 +41.6706 0 41.6706 0.113897316 0 41.6706 0.8861027 +41.72147 0 41.72147 0.113897443 0 41.72147 0.886102557 +41.7723427 0 41.7723427 0.113897368 0 41.7723427 0.8861026 +41.8232155 0 41.8232155 0.1138973 0 41.8232155 0.8861027 +41.8740845 0 41.8740845 0.11389742 0 41.8740845 0.886102557 +41.9249573 0 41.9249573 0.113897353 0 41.9249573 0.8861026 +41.97583 0 41.97583 0.113897286 0 41.97583 0.886102736 +42.0267 0 42.0267 0.113897406 0 42.0267 0.8861026 +42.07757 0 42.07757 0.113897339 0 42.07757 0.8861027 +42.1284447 0 42.1284447 0.113897271 0 42.1284447 0.886102736 +42.1793137 0 42.1793137 0.1138974 0 42.1793137 0.8861026 +42.2301865 0 42.2301865 0.113897331 0 42.2301865 0.8861027 +42.2810555 0 42.2810555 0.11389745 0 42.2810555 0.886102557 +42.33193 0 42.33193 0.113897376 0 42.33193 0.8861026 +42.3828 0 42.3828 0.113897309 0 42.3828 0.8861027 +42.43367 0 42.43367 0.113897428 0 42.43367 0.886102557 +42.4845428 0 42.4845428 0.113897361 0 42.4845428 0.8861026 +42.5354156 0 42.5354156 0.113897294 0 42.5354156 0.8861027 +42.5862846 0 42.5862846 0.113897413 0 42.5862846 0.886102557 +42.6371574 0 42.6371574 0.113897346 0 42.6371574 0.8861027 +42.68803 0 42.68803 0.113897279 0 42.68803 0.886102736 +42.7389 0 42.7389 0.113897406 0 42.7389 0.8861026 +42.789772 0 42.789772 0.113897331 0 42.789772 0.8861027 +42.84064 0 42.84064 0.11389745 0 42.84064 0.886102557 +42.8915138 0 42.8915138 0.113897383 0 42.8915138 0.8861026 +42.9423866 0 42.9423866 0.113897316 0 42.9423866 0.8861027 +42.9932556 0 42.9932556 0.113897435 0 42.9932556 0.886102557 +43.04413 0 43.04413 0.113897368 0 43.04413 0.8861026 +43.095 0 43.095 0.1138973 0 43.095 0.8861027 +43.14587 0 43.14587 0.11389742 0 43.14587 0.886102557 +43.196743 0 43.196743 0.113897353 0 43.196743 0.8861027 +43.2476158 0 43.2476158 0.113897286 0 43.2476158 0.886102736 +43.2984848 0 43.2984848 0.113897406 0 43.2984848 0.8861026 +43.3493576 0 43.3493576 0.113897339 0 43.3493576 0.8861027 +43.40023 0 43.40023 0.113897271 0 43.40023 0.886102736 +43.4511 0 43.4511 0.113897391 0 43.4511 0.8861026 +43.5019722 0 43.5019722 0.113897324 0 43.5019722 0.8861027 +43.55284 0 43.55284 0.113897443 0 43.55284 0.886102557 +43.603714 0 43.603714 0.113897376 0 43.603714 0.8861026 +43.6545868 0 43.6545868 0.113897309 0 43.6545868 0.8861027 +43.7054558 0 43.7054558 0.113897428 0 43.7054558 0.886102557 +43.75633 0 43.75633 0.113897361 0 43.75633 0.8861026 +43.8072 0 43.8072 0.113897294 0 43.8072 0.8861027 +43.85807 0 43.85807 0.113897413 0 43.85807 0.886102557 +43.9089432 0 43.9089432 0.113897346 0 43.9089432 0.8861027 +43.959816 0 43.959816 0.113897279 0 43.959816 0.886102736 +44.010685 0 44.010685 0.1138974 0 44.010685 0.8861026 +44.0615578 0 44.0615578 0.113897331 0 44.0615578 0.8861027 +44.1124268 0 44.1124268 0.11389745 0 44.1124268 0.886102557 +44.1633 0 44.1633 0.113897383 0 44.1633 0.8861026 +44.2141724 0 44.2141724 0.113897316 0 44.2141724 0.8861027 +44.26504 0 44.26504 0.113897435 0 44.26504 0.886102557 +44.3159142 0 44.3159142 0.113897368 0 44.3159142 0.8861026 +44.366787 0 44.366787 0.1138973 0 44.366787 0.8861027 +44.4176559 0 44.4176559 0.11389742 0 44.4176559 0.886102557 +44.46853 0 44.46853 0.113897353 0 44.46853 0.8861027 +44.5194 0 44.5194 0.113897286 0 44.5194 0.886102736 +44.57027 0 44.57027 0.113897406 0 44.57027 0.8861026 +44.6211433 0 44.6211433 0.113897339 0 44.6211433 0.8861027 +44.6720161 0 44.6720161 0.113897271 0 44.6720161 0.886102736 +44.7228851 0 44.7228851 0.113897391 0 44.7228851 0.8861026 +44.7737579 0 44.7737579 0.113897324 0 44.7737579 0.8861027 +44.8246269 0 44.8246269 0.113897443 0 44.8246269 0.886102557 +44.8755 0 44.8755 0.113897376 0 44.8755 0.8861026 +44.9263725 0 44.9263725 0.113897309 0 44.9263725 0.8861027 +44.97724 0 44.97724 0.113897428 0 44.97724 0.886102557 +45.0281143 0 45.0281143 0.113897361 0 45.0281143 0.8861026 +45.0789871 0 45.0789871 0.113897294 0 45.0789871 0.8861027 +45.1298561 0 45.1298561 0.113897413 0 45.1298561 0.886102557 +45.18073 0 45.18073 0.113897346 0 45.18073 0.8861027 +45.2316 0 45.2316 0.113897279 0 45.2316 0.886102736 +45.28247 0 45.28247 0.1138974 0 45.28247 0.8861026 +45.3333435 0 45.3333435 0.113897331 0 45.3333435 0.8861027 +45.3842125 0 45.3842125 0.11389745 0 45.3842125 0.886102557 +45.4350853 0 45.4350853 0.113897383 0 45.4350853 0.8861026 +45.48596 0 45.48596 0.113897316 0 45.48596 0.8861027 +45.5368271 0 45.5368271 0.113897435 0 45.5368271 0.886102557 +45.5877 0 45.5877 0.113897368 0 45.5877 0.8861026 +45.6385727 0 45.6385727 0.1138973 0 45.6385727 0.8861027 +45.68944 0 45.68944 0.11389742 0 45.68944 0.886102557 +45.7403145 0 45.7403145 0.113897353 0 45.7403145 0.8861027 +45.7911873 0 45.7911873 0.113897286 0 45.7911873 0.886102736 +45.8420563 0 45.8420563 0.113897406 0 45.8420563 0.8861026 +45.89293 0 45.89293 0.113897339 0 45.89293 0.8861027 +45.9438 0 45.9438 0.113897271 0 45.9438 0.886102736 +45.99467 0 45.99467 0.1138974 0 45.99467 0.8861026 +46.0455437 0 46.0455437 0.113897324 0 46.0455437 0.8861027 +46.0964127 0 46.0964127 0.11389745 0 46.0964127 0.886102557 +46.1472855 0 46.1472855 0.113897376 0 46.1472855 0.8861026 +46.19816 0 46.19816 0.113897309 0 46.19816 0.8861027 +46.2490273 0 46.2490273 0.113897428 0 46.2490273 0.886102557 +46.2999 0 46.2999 0.113897361 0 46.2999 0.8861026 +46.3507729 0 46.3507729 0.113897294 0 46.3507729 0.8861027 +46.40164 0 46.40164 0.113897413 0 46.40164 0.886102557 +46.4525146 0 46.4525146 0.113897346 0 46.4525146 0.8861027 +46.5033875 0 46.5033875 0.113897279 0 46.5033875 0.886102736 +46.5542564 0 46.5542564 0.1138974 0 46.5542564 0.8861026 +46.60513 0 46.60513 0.113897331 0 46.60513 0.8861027 +46.656 0 46.656 0.11389745 0 46.656 0.886102557 +46.70687 0 46.70687 0.113897383 0 46.70687 0.8861026 +46.7577438 0 46.7577438 0.113897316 0 46.7577438 0.8861027 +46.8086128 0 46.8086128 0.113897435 0 46.8086128 0.886102557 +46.8594856 0 46.8594856 0.113897368 0 46.8594856 0.8861026 +46.91036 0 46.91036 0.1138973 0 46.91036 0.8861027 +46.9612274 0 46.9612274 0.11389742 0 46.9612274 0.886102557 +47.0121 0 47.0121 0.113897353 0 47.0121 0.8861026 +47.062973 0 47.062973 0.113897286 0 47.062973 0.886102736 +47.113842 0 47.113842 0.113897406 0 47.113842 0.8861026 +47.1647148 0 47.1647148 0.113897339 0 47.1647148 0.8861027 +47.2155876 0 47.2155876 0.113897271 0 47.2155876 0.886102736 +47.2664566 0 47.2664566 0.1138974 0 47.2664566 0.8861026 +47.31733 0 47.31733 0.113897331 0 47.31733 0.8861027 +47.3682 0 47.3682 0.11389745 0 47.3682 0.886102557 +47.41907 0 47.41907 0.113897376 0 47.41907 0.8861026 +47.469944 0 47.469944 0.113897309 0 47.469944 0.8861027 +47.520813 0 47.520813 0.113897428 0 47.520813 0.886102557 +47.5716858 0 47.5716858 0.113897361 0 47.5716858 0.8861026 +47.62256 0 47.62256 0.113897294 0 47.62256 0.8861027 +47.6734276 0 47.6734276 0.113897413 0 47.6734276 0.886102557 +47.7243 0 47.7243 0.113897346 0 47.7243 0.8861027 +47.7751732 0 47.7751732 0.113897279 0 47.7751732 0.886102736 +47.8260422 0 47.8260422 0.113897406 0 47.8260422 0.8861026 +47.876915 0 47.876915 0.113897331 0 47.876915 0.8861027 +47.927784 0 47.927784 0.113897458 0 47.927784 0.886102557 +47.9786568 0 47.9786568 0.113897383 0 47.9786568 0.8861026 +48.02953 0 48.02953 0.113897316 0 48.02953 0.8861027 +48.0804 0 48.0804 0.113897435 0 48.0804 0.886102557 +48.13127 0 48.13127 0.113897368 0 48.13127 0.8861026 +48.1821442 0 48.1821442 0.1138973 0 48.1821442 0.8861027 +48.2330132 0 48.2330132 0.11389742 0 48.2330132 0.886102557 +48.283886 0 48.283886 0.113897353 0 48.283886 0.8861026 +48.33476 0 48.33476 0.113897286 0 48.33476 0.886102736 +48.3856277 0 48.3856277 0.113897413 0 48.3856277 0.8861026 +48.4365 0 48.4365 0.113897339 0 48.4365 0.8861027 +48.48737 0 48.48737 0.113897458 0 48.48737 0.886102557 +48.5382423 0 48.5382423 0.113897391 0 48.5382423 0.8861026 +48.5891151 0 48.5891151 0.113897324 0 48.5891151 0.8861027 +48.6399841 0 48.6399841 0.113897443 0 48.6399841 0.886102557 +48.6908569 0 48.6908569 0.113897376 0 48.6908569 0.8861026 +48.74173 0 48.74173 0.113897309 0 48.74173 0.8861027 +48.7926 0 48.7926 0.113897428 0 48.7926 0.886102557 +48.84347 0 48.84347 0.113897361 0 48.84347 0.8861026 +48.8943443 0 48.8943443 0.113897294 0 48.8943443 0.886102736 +48.9452133 0 48.9452133 0.113897413 0 48.9452133 0.886102557 +48.9960861 0 48.9960861 0.113897346 0 48.9960861 0.8861027 +49.04696 0 49.04696 0.113897279 0 49.04696 0.886102736 +49.0978279 0 49.0978279 0.1138974 0 49.0978279 0.8861026 +49.1487 0 49.1487 0.113897331 0 49.1487 0.8861027 +49.19957 0 49.19957 0.11389745 0 49.19957 0.886102557 +49.2504425 0 49.2504425 0.113897383 0 49.2504425 0.8861026 +49.3013153 0 49.3013153 0.113897316 0 49.3013153 0.8861027 +49.3521843 0 49.3521843 0.113897435 0 49.3521843 0.886102557 +49.4030571 0 49.4030571 0.113897368 0 49.4030571 0.8861026 +49.45393 0 49.45393 0.1138973 0 49.45393 0.8861027 +49.5048 0 49.5048 0.11389742 0 49.5048 0.886102557 +49.55567 0 49.55567 0.113897353 0 49.55567 0.8861027 +49.6065445 0 49.6065445 0.113897286 0 49.6065445 0.886102736 +49.6574135 0 49.6574135 0.113897406 0 49.6574135 0.8861026 +49.7082863 0 49.7082863 0.113897339 0 49.7082863 0.8861027 +49.7591553 0 49.7591553 0.113897458 0 49.7591553 0.886102557 +49.8100281 0 49.8100281 0.113897391 0 49.8100281 0.8861026 +49.8609 0 49.8609 0.113897324 0 49.8609 0.8861027 +49.91177 0 49.91177 0.113897443 0 49.91177 0.886102557 +49.9626427 0 49.9626427 0.113897376 0 49.9626427 0.8861026 +50.0135155 0 50.0135155 0.1138973 0 50.0135155 0.8861027 +50.0643845 0 50.0643845 0.113897428 0 50.0643845 0.886102557 +50.1152573 0 50.1152573 0.113897353 0 50.1152573 0.8861026 +50.16613 0 50.16613 0.113897286 0 50.16613 0.886102736 +50.217 0 50.217 0.113897413 0 50.217 0.8861026 +50.26787 0 50.26787 0.113897346 0 50.26787 0.8861027 +50.3187447 0 50.3187447 0.113897279 0 50.3187447 0.886102736 +50.3696136 0 50.3696136 0.1138974 0 50.3696136 0.8861026 +50.4204865 0 50.4204865 0.113897331 0 50.4204865 0.8861027 +50.4713554 0 50.4713554 0.11389745 0 50.4713554 0.886102557 +50.52223 0 50.52223 0.113897383 0 50.52223 0.8861026 +50.5731 0 50.5731 0.113897309 0 50.5731 0.8861027 +50.62397 0 50.62397 0.113897435 0 50.62397 0.886102557 +50.6748428 0 50.6748428 0.113897361 0 50.6748428 0.8861026 +50.7257156 0 50.7257156 0.113897294 0 50.7257156 0.8861027 +50.7765846 0 50.7765846 0.11389742 0 50.7765846 0.886102557 +50.8274574 0 50.8274574 0.113897346 0 50.8274574 0.8861027 +50.87833 0 50.87833 0.113897279 0 50.87833 0.886102736 +50.9292 0 50.9292 0.113897406 0 50.9292 0.8861026 +50.980072 0 50.980072 0.113897339 0 50.980072 0.8861027 +51.03094 0 51.03094 0.113897458 0 51.03094 0.886102557 +51.0818138 0 51.0818138 0.113897383 0 51.0818138 0.8861026 +51.1326866 0 51.1326866 0.113897316 0 51.1326866 0.8861027 +51.1835556 0 51.1835556 0.113897443 0 51.1835556 0.886102557 +51.23443 0 51.23443 0.113897368 0 51.23443 0.8861026 +51.2853 0 51.2853 0.1138973 0 51.2853 0.8861027 +51.33617 0 51.33617 0.11389742 0 51.33617 0.886102557 +51.387043 0 51.387043 0.113897353 0 51.387043 0.8861026 +51.4379158 0 51.4379158 0.113897286 0 51.4379158 0.886102736 +51.4887848 0 51.4887848 0.113897406 0 51.4887848 0.8861026 +51.5396576 0 51.5396576 0.113897339 0 51.5396576 0.8861027 +51.59053 0 51.59053 0.113897271 0 51.59053 0.886102736 +51.6414 0 51.6414 0.1138974 0 51.6414 0.8861026 +51.6922722 0 51.6922722 0.113897331 0 51.6922722 0.8861027 +51.74314 0 51.74314 0.11389745 0 51.74314 0.886102557 +51.794014 0 51.794014 0.113897376 0 51.794014 0.8861026 +51.8448868 0 51.8448868 0.113897309 0 51.8448868 0.8861027 +51.8957558 0 51.8957558 0.113897428 0 51.8957558 0.886102557 +51.94663 0 51.94663 0.113897361 0 51.94663 0.8861026 +51.9975 0 51.9975 0.113897294 0 51.9975 0.8861027 +52.04837 0 52.04837 0.113897413 0 52.04837 0.886102557 +52.0992432 0 52.0992432 0.113897346 0 52.0992432 0.8861027 +52.150116 0 52.150116 0.113897279 0 52.150116 0.886102736 +52.200985 0 52.200985 0.113897406 0 52.200985 0.8861026 +52.2518578 0 52.2518578 0.113897331 0 52.2518578 0.8861027 +52.3027267 0 52.3027267 0.11389745 0 52.3027267 0.886102557 +52.3536 0 52.3536 0.113897383 0 52.3536 0.8861026 +52.4044724 0 52.4044724 0.113897316 0 52.4044724 0.8861027 +52.45534 0 52.45534 0.113897435 0 52.45534 0.886102557 +52.5062141 0 52.5062141 0.113897368 0 52.5062141 0.8861026 +52.5570869 0 52.5570869 0.1138973 0 52.5570869 0.8861027 +52.6079559 0 52.6079559 0.11389742 0 52.6079559 0.886102557 +52.65883 0 52.65883 0.113897353 0 52.65883 0.8861027 +52.7097 0 52.7097 0.113897286 0 52.7097 0.886102736 +52.76057 0 52.76057 0.113897406 0 52.76057 0.8861026 +52.8114433 0 52.8114433 0.113897339 0 52.8114433 0.8861027 +52.8623161 0 52.8623161 0.113897271 0 52.8623161 0.886102736 +52.9131851 0 52.9131851 0.113897391 0 52.9131851 0.8861026 +52.9640579 0 52.9640579 0.113897324 0 52.9640579 0.8861027 +53.0149269 0 53.0149269 0.113897443 0 53.0149269 0.886102557 +53.0658 0 53.0658 0.113897376 0 53.0658 0.8861026 +53.1166725 0 53.1166725 0.113897309 0 53.1166725 0.8861027 +53.16754 0 53.16754 0.113897428 0 53.16754 0.886102557 +53.2184143 0 53.2184143 0.113897361 0 53.2184143 0.8861026 +53.2692871 0 53.2692871 0.113897294 0 53.2692871 0.8861027 +53.3201561 0 53.3201561 0.113897413 0 53.3201561 0.886102557 +53.37103 0 53.37103 0.113897346 0 53.37103 0.8861027 +53.4219 0 53.4219 0.113897279 0 53.4219 0.886102736 +53.47277 0 53.47277 0.1138974 0 53.47277 0.8861026 +53.5236435 0 53.5236435 0.113897331 0 53.5236435 0.8861027 +53.5745125 0 53.5745125 0.11389745 0 53.5745125 0.886102557 +53.6253853 0 53.6253853 0.113897383 0 53.6253853 0.8861026 +53.6762581 0 53.6762581 0.113897316 0 53.6762581 0.8861027 +53.7271271 0 53.7271271 0.113897435 0 53.7271271 0.886102557 +53.778 0 53.778 0.113897368 0 53.778 0.8861026 +53.8288727 0 53.8288727 0.1138973 0 53.8288727 0.8861027 +53.87974 0 53.87974 0.11389742 0 53.87974 0.886102557 +53.9306145 0 53.9306145 0.113897353 0 53.9306145 0.8861027 +53.9814873 0 53.9814873 0.113897286 0 53.9814873 0.886102736 +54.0323563 0 54.0323563 0.113897406 0 54.0323563 0.8861026 +54.08323 0 54.08323 0.113897339 0 54.08323 0.8861027 +54.1341 0 54.1341 0.113897271 0 54.1341 0.886102736 +54.18497 0 54.18497 0.113897391 0 54.18497 0.8861026 +54.2358437 0 54.2358437 0.113897324 0 54.2358437 0.8861027 +54.2867126 0 54.2867126 0.113897443 0 54.2867126 0.886102557 +54.3375854 0 54.3375854 0.113897376 0 54.3375854 0.8861026 +54.38846 0 54.38846 0.113897309 0 54.38846 0.8861027 +54.4393272 0 54.4393272 0.113897428 0 54.4393272 0.886102557 +54.4902 0 54.4902 0.113897361 0 54.4902 0.8861026 +54.5410728 0 54.5410728 0.113897294 0 54.5410728 0.8861027 +54.59194 0 54.59194 0.113897413 0 54.59194 0.886102557 +54.6428146 0 54.6428146 0.113897346 0 54.6428146 0.8861027 +54.6936874 0 54.6936874 0.113897279 0 54.6936874 0.886102736 +54.7445564 0 54.7445564 0.1138974 0 54.7445564 0.8861026 +54.79543 0 54.79543 0.113897331 0 54.79543 0.8861027 +54.8463 0 54.8463 0.11389745 0 54.8463 0.886102557 +54.89717 0 54.89717 0.113897383 0 54.89717 0.8861026 +54.9480438 0 54.9480438 0.113897316 0 54.9480438 0.8861027 +54.9989128 0 54.9989128 0.113897435 0 54.9989128 0.886102557 +55.0497856 0 55.0497856 0.113897368 0 55.0497856 0.8861026 +55.10066 0 55.10066 0.1138973 0 55.10066 0.8861027 +55.1515274 0 55.1515274 0.11389742 0 55.1515274 0.886102557 +55.2024 0 55.2024 0.113897353 0 55.2024 0.8861027 +55.253273 0 55.253273 0.113897286 0 55.253273 0.886102736 +55.304142 0 55.304142 0.113897406 0 55.304142 0.8861026 +55.3550148 0 55.3550148 0.113897339 0 55.3550148 0.8861027 +55.4058876 0 55.4058876 0.113897271 0 55.4058876 0.886102736 +55.4567566 0 55.4567566 0.1138974 0 55.4567566 0.8861026 +55.50763 0 55.50763 0.113897324 0 55.50763 0.8861027 +55.5585 0 55.5585 0.11389745 0 55.5585 0.886102557 +55.60937 0 55.60937 0.113897376 0 55.60937 0.8861026 +55.660244 0 55.660244 0.113897309 0 55.660244 0.8861027 +55.711113 0 55.711113 0.113897428 0 55.711113 0.886102557 +55.7619858 0 55.7619858 0.113897361 0 55.7619858 0.8861026 +55.81286 0 55.81286 0.113897294 0 55.81286 0.8861027 +55.8637276 0 55.8637276 0.113897413 0 55.8637276 0.886102557 +55.9146 0 55.9146 0.113897346 0 55.9146 0.8861027 +55.9654732 0 55.9654732 0.113897279 0 55.9654732 0.886102736 +56.0163422 0 56.0163422 0.1138974 0 56.0163422 0.8861026 +56.067215 0 56.067215 0.113897331 0 56.067215 0.8861027 +56.118084 0 56.118084 0.11389745 0 56.118084 0.886102557 +56.1689568 0 56.1689568 0.113897383 0 56.1689568 0.8861026 +56.21983 0 56.21983 0.113897316 0 56.21983 0.8861027 +56.2707 0 56.2707 0.113897435 0 56.2707 0.886102557 +56.32157 0 56.32157 0.113897368 0 56.32157 0.8861026 +56.3724442 0 56.3724442 0.1138973 0 56.3724442 0.8861027 +56.4233131 0 56.4233131 0.11389742 0 56.4233131 0.886102557 +56.4741859 0 56.4741859 0.113897353 0 56.4741859 0.8861026 +56.52506 0 56.52506 0.113897286 0 56.52506 0.886102736 +56.5759277 0 56.5759277 0.113897406 0 56.5759277 0.8861026 +56.6268 0 56.6268 0.113897339 0 56.6268 0.8861027 +56.67767 0 56.67767 0.113897458 0 56.67767 0.886102557 +56.7285423 0 56.7285423 0.113897391 0 56.7285423 0.8861026 +56.7794151 0 56.7794151 0.113897324 0 56.7794151 0.8861027 +56.8302841 0 56.8302841 0.113897443 0 56.8302841 0.886102557 +56.8811569 0 56.8811569 0.113897376 0 56.8811569 0.8861026 +56.93203 0 56.93203 0.113897309 0 56.93203 0.8861027 +56.9829 0 56.9829 0.113897428 0 56.9829 0.886102557 +57.03377 0 57.03377 0.113897361 0 57.03377 0.8861026 +57.0846443 0 57.0846443 0.113897294 0 57.0846443 0.886102736 +57.1355133 0 57.1355133 0.113897413 0 57.1355133 0.8861026 +57.1863861 0 57.1863861 0.113897346 0 57.1863861 0.8861027 +57.23726 0 57.23726 0.113897279 0 57.23726 0.886102736 +57.2881279 0 57.2881279 0.1138974 0 57.2881279 0.8861026 +57.339 0 57.339 0.113897331 0 57.339 0.8861027 +57.38987 0 57.38987 0.11389745 0 57.38987 0.886102557 +57.4407425 0 57.4407425 0.113897383 0 57.4407425 0.8861026 +57.4916153 0 57.4916153 0.113897316 0 57.4916153 0.8861027 +57.5424843 0 57.5424843 0.113897435 0 57.5424843 0.886102557 +57.5933571 0 57.5933571 0.113897368 0 57.5933571 0.8861026 +57.64423 0 57.64423 0.1138973 0 57.64423 0.8861027 +57.6951 0 57.6951 0.11389742 0 57.6951 0.886102557 +57.74597 0 57.74597 0.113897353 0 57.74597 0.8861027 +57.7968445 0 57.7968445 0.113897286 0 57.7968445 0.886102736 +57.8477135 0 57.8477135 0.113897406 0 57.8477135 0.8861026 +57.8985863 0 57.8985863 0.113897339 0 57.8985863 0.8861027 +57.9494553 0 57.9494553 0.113897458 0 57.9494553 0.886102557 +58.0003281 0 58.0003281 0.113897391 0 58.0003281 0.8861026 +58.0512 0 58.0512 0.113897324 0 58.0512 0.8861027 +58.10207 0 58.10207 0.113897443 0 58.10207 0.886102557 +58.1529427 0 58.1529427 0.113897376 0 58.1529427 0.8861026 +58.2038155 0 58.2038155 0.1138973 0 58.2038155 0.8861027 +58.2546844 0 58.2546844 0.113897428 0 58.2546844 0.886102557 +58.3055573 0 58.3055573 0.113897353 0 58.3055573 0.8861026 +58.35643 0 58.35643 0.113897286 0 58.35643 0.886102736 +58.4073 0 58.4073 0.113897413 0 58.4073 0.8861026 +58.45817 0 58.45817 0.113897346 0 58.45817 0.8861027 +58.5090446 0 58.5090446 0.113897279 0 58.5090446 0.886102736 +58.5599136 0 58.5599136 0.1138974 0 58.5599136 0.8861026 +58.6107864 0 58.6107864 0.113897331 0 58.6107864 0.8861027 +58.6616554 0 58.6616554 0.11389745 0 58.6616554 0.886102557 +58.71253 0 58.71253 0.113897383 0 58.71253 0.8861026 +58.7634 0 58.7634 0.113897309 0 58.7634 0.8861027 +58.81427 0 58.81427 0.113897435 0 58.81427 0.886102557 +58.8651428 0 58.8651428 0.113897361 0 58.8651428 0.8861026 +58.9160156 0 58.9160156 0.113897294 0 58.9160156 0.8861027 +58.9668846 0 58.9668846 0.11389742 0 58.9668846 0.886102557 +59.0177574 0 59.0177574 0.113897346 0 59.0177574 0.8861027 +59.06863 0 59.06863 0.113897279 0 59.06863 0.886102736 +59.1195 0 59.1195 0.113897406 0 59.1195 0.8861026 +59.170372 0 59.170372 0.113897339 0 59.170372 0.8861027 +59.22124 0 59.22124 0.113897458 0 59.22124 0.886102557 +59.2721138 0 59.2721138 0.113897383 0 59.2721138 0.8861026 +59.3229866 0 59.3229866 0.113897316 0 59.3229866 0.8861027 +59.3738556 0 59.3738556 0.113897443 0 59.3738556 0.886102557 +59.42473 0 59.42473 0.113897368 0 59.42473 0.8861026 +59.4756 0 59.4756 0.1138973 0 59.4756 0.8861027 +59.52647 0 59.52647 0.11389742 0 59.52647 0.886102557 +59.577343 0 59.577343 0.113897353 0 59.577343 0.8861026 +59.6282158 0 59.6282158 0.113897286 0 59.6282158 0.886102736 +59.6790848 0 59.6790848 0.113897406 0 59.6790848 0.8861026 +59.7299576 0 59.7299576 0.113897339 0 59.7299576 0.8861027 +59.78083 0 59.78083 0.113897271 0 59.78083 0.886102736 +59.8317 0 59.8317 0.1138974 0 59.8317 0.8861026 +59.8825722 0 59.8825722 0.113897331 0 59.8825722 0.8861027 +59.93344 0 59.93344 0.11389745 0 59.93344 0.886102557 +59.984314 0 59.984314 0.113897376 0 59.984314 0.8861026 +60.0351868 0 60.0351868 0.113897309 0 60.0351868 0.8861027 +60.0860558 0 60.0860558 0.113897428 0 60.0860558 0.886102557 +60.13693 0 60.13693 0.113897361 0 60.13693 0.8861026 +60.1878 0 60.1878 0.113897294 0 60.1878 0.8861027 +60.23867 0 60.23867 0.113897413 0 60.23867 0.886102557 +60.2895432 0 60.2895432 0.113897346 0 60.2895432 0.8861027 +60.340416 0 60.340416 0.113897279 0 60.340416 0.886102736 +60.3912849 0 60.3912849 0.113897406 0 60.3912849 0.8861026 +60.4421577 0 60.4421577 0.113897331 0 60.4421577 0.8861027 +60.4930267 0 60.4930267 0.11389745 0 60.4930267 0.886102557 +60.5439 0 60.5439 0.113897383 0 60.5439 0.8861026 +60.5947723 0 60.5947723 0.113897316 0 60.5947723 0.8861027 +60.64564 0 60.64564 0.113897435 0 60.64564 0.886102557 +60.6965141 0 60.6965141 0.113897368 0 60.6965141 0.8861026 +60.7473869 0 60.7473869 0.1138973 0 60.7473869 0.8861027 +60.7982559 0 60.7982559 0.11389742 0 60.7982559 0.886102557 +60.84913 0 60.84913 0.113897353 0 60.84913 0.8861027 +60.9 0 60.9 0.113897286 0 60.9 0.886102736 +60.95087 0 60.95087 0.113897406 0 60.95087 0.8861026 +61.0017433 0 61.0017433 0.113897339 0 61.0017433 0.8861027 +61.0526161 0 61.0526161 0.113897271 0 61.0526161 0.886102736 +61.1034851 0 61.1034851 0.113897391 0 61.1034851 0.8861026 +61.1543579 0 61.1543579 0.113897324 0 61.1543579 0.8861027 +61.2052269 0 61.2052269 0.113897443 0 61.2052269 0.886102557 +61.2561 0 61.2561 0.113897376 0 61.2561 0.8861026 +61.3069725 0 61.3069725 0.113897309 0 61.3069725 0.8861027 +61.35784 0 61.35784 0.113897428 0 61.35784 0.886102557 +61.4087143 0 61.4087143 0.113897361 0 61.4087143 0.8861026 +61.4595871 0 61.4595871 0.113897294 0 61.4595871 0.8861027 +61.5104561 0 61.5104561 0.113897413 0 61.5104561 0.886102557 +61.56133 0 61.56133 0.113897346 0 61.56133 0.8861027 +61.6122 0 61.6122 0.113897279 0 61.6122 0.886102736 +61.66307 0 61.66307 0.1138974 0 61.66307 0.8861026 +61.7139435 0 61.7139435 0.113897331 0 61.7139435 0.8861027 +61.7648125 0 61.7648125 0.11389745 0 61.7648125 0.886102557 +61.8156853 0 61.8156853 0.113897383 0 61.8156853 0.8861026 +61.8665581 0 61.8665581 0.113897316 0 61.8665581 0.8861027 +61.9174271 0 61.9174271 0.113897435 0 61.9174271 0.886102557 +61.9683 0 61.9683 0.113897368 0 61.9683 0.8861026 +62.0191727 0 62.0191727 0.1138973 0 62.0191727 0.8861027 +62.07004 0 62.07004 0.11389742 0 62.07004 0.886102557 +62.1209145 0 62.1209145 0.113897353 0 62.1209145 0.8861027 +62.1717873 0 62.1717873 0.113897286 0 62.1717873 0.886102736 +62.2226562 0 62.2226562 0.113897406 0 62.2226562 0.8861026 +62.27353 0 62.27353 0.113897339 0 62.27353 0.8861027 +62.3244 0 62.3244 0.113897271 0 62.3244 0.886102736 +62.37527 0 62.37527 0.113897391 0 62.37527 0.8861026 +62.4261436 0 62.4261436 0.113897324 0 62.4261436 0.8861027 +62.4770126 0 62.4770126 0.113897443 0 62.4770126 0.886102557 +62.5278854 0 62.5278854 0.113897376 0 62.5278854 0.8861026 +62.57876 0 62.57876 0.113897309 0 62.57876 0.8861027 +62.6296272 0 62.6296272 0.113897428 0 62.6296272 0.886102557 +62.6805 0 62.6805 0.113897361 0 62.6805 0.8861026 +62.7313728 0 62.7313728 0.113897294 0 62.7313728 0.8861027 +62.78224 0 62.78224 0.113897413 0 62.78224 0.886102557 +62.8331146 0 62.8331146 0.113897346 0 62.8331146 0.8861027 +62.8839874 0 62.8839874 0.113897279 0 62.8839874 0.886102736 +62.9348564 0 62.9348564 0.1138974 0 62.9348564 0.8861026 +62.98573 0 62.98573 0.113897331 0 62.98573 0.8861027 +63.0366 0 63.0366 0.11389745 0 63.0366 0.886102557 +63.08747 0 63.08747 0.113897383 0 63.08747 0.8861026 +63.1383438 0 63.1383438 0.113897316 0 63.1383438 0.8861027 +63.1892128 0 63.1892128 0.113897435 0 63.1892128 0.886102557 +63.2400856 0 63.2400856 0.113897368 0 63.2400856 0.8861026 +63.29096 0 63.29096 0.1138973 0 63.29096 0.8861027 +63.3418274 0 63.3418274 0.11389742 0 63.3418274 0.886102557 +63.3927 0 63.3927 0.113897353 0 63.3927 0.8861027 +63.443573 0 63.443573 0.113897286 0 63.443573 0.886102736 +63.494442 0 63.494442 0.113897406 0 63.494442 0.8861026 +63.5453148 0 63.5453148 0.113897339 0 63.5453148 0.8861027 +63.5961876 0 63.5961876 0.113897271 0 63.5961876 0.886102736 +63.6470566 0 63.6470566 0.1138974 0 63.6470566 0.8861026 +63.69793 0 63.69793 0.113897324 0 63.69793 0.8861027 +63.7488 0 63.7488 0.11389745 0 63.7488 0.886102557 +63.79967 0 63.79967 0.113897376 0 63.79967 0.8861026 +63.850544 0 63.850544 0.113897309 0 63.850544 0.8861027 +63.901413 0 63.901413 0.113897428 0 63.901413 0.886102557 +63.9522858 0 63.9522858 0.113897361 0 63.9522858 0.8861026 +64.00316 0 64.00316 0.113897294 0 64.00316 0.8861027 +64.05403 0 64.05403 0.113897227 0 64.05403 0.8861028 +64.1049 0 64.1049 0.11389754 0 64.1049 0.886102438 +64.15577 0 64.15577 0.113897465 0 64.15577 0.886102557 +64.20664 0 64.20664 0.1138974 0 64.20664 0.8861026 +64.257515 0 64.257515 0.113897331 0 64.257515 0.8861027 +64.30839 0 64.30839 0.113897264 0 64.30839 0.886102736 +64.35926 0 64.35926 0.1138972 0 64.35926 0.8861028 +64.4101257 0 64.4101257 0.11389751 0 64.4101257 0.8861025 +64.461 0 64.461 0.113897435 0 64.461 0.886102557 +64.51187 0 64.51187 0.113897368 0 64.51187 0.8861026 +64.5627441 0 64.5627441 0.1138973 0 64.5627441 0.8861027 +64.61362 0 64.61362 0.113897234 0 64.61362 0.886102736 +64.66448 0 64.66448 0.113897547 0 64.66448 0.886102438 +64.7153549 0 64.7153549 0.113897473 0 64.7153549 0.8861025 +64.76623 0 64.76623 0.113897406 0 64.76623 0.8861026 +64.8171 0 64.8171 0.113897339 0 64.8171 0.8861027 +64.86797 0 64.86797 0.113897271 0 64.86797 0.886102736 +64.9188461 0 64.9188461 0.113897204 0 64.9188461 0.8861028 +64.96971 0 64.96971 0.11389751 0 64.96971 0.8861025 +65.0205841 0 65.0205841 0.113897443 0 65.0205841 0.886102557 +65.07146 0 65.07146 0.113897376 0 65.07146 0.8861026 +65.12233 0 65.12233 0.113897309 0 65.12233 0.8861027 +65.1732 0 65.1732 0.113897242 0 65.1732 0.886102736 +65.22407 0 65.22407 0.113897547 0 65.22407 0.886102438 +65.27494 0 65.27494 0.11389748 0 65.27494 0.8861025 +65.32581 0 65.32581 0.113897406 0 65.32581 0.8861026 +65.3766861 0 65.3766861 0.113897339 0 65.3766861 0.8861027 +65.42756 0 65.42756 0.113897271 0 65.42756 0.886102736 +65.47843 0 65.47843 0.113897212 0 65.47843 0.8861028 +65.5293 0 65.5293 0.113897517 0 65.5293 0.8861025 +65.58017 0 65.58017 0.11389745 0 65.58017 0.886102557 +65.63104 0 65.63104 0.113897376 0 65.63104 0.8861026 +65.6819153 0 65.6819153 0.113897309 0 65.6819153 0.8861027 +65.73279 0 65.73279 0.113897249 0 65.73279 0.886102736 +65.78366 0 65.78366 0.113897182 0 65.78366 0.8861028 +65.8345261 0 65.8345261 0.113897488 0 65.8345261 0.8861025 +65.8854 0 65.8854 0.11389742 0 65.8854 0.886102557 +65.93627 0 65.93627 0.113897353 0 65.93627 0.8861027 +65.9871445 0 65.9871445 0.113897286 0 65.9871445 0.886102736 +66.03802 0 66.03802 0.113897219 0 66.03802 0.8861028 +66.08888 0 66.08888 0.113897525 0 66.08888 0.8861025 +66.1397552 0 66.1397552 0.113897458 0 66.1397552 0.886102557 +66.19063 0 66.19063 0.113897391 0 66.19063 0.8861026 +66.2415 0 66.2415 0.113897324 0 66.2415 0.8861027 +66.29237 0 66.29237 0.113897257 0 66.29237 0.886102736 +66.34325 0 66.34325 0.113897189 0 66.34325 0.8861028 +66.39411 0 66.39411 0.1138975 0 66.39411 0.8861025 +66.4449844 0 66.4449844 0.113897428 0 66.4449844 0.886102557 +66.49586 0 66.49586 0.113897361 0 66.49586 0.8861026 +66.54673 0 66.54673 0.113897294 0 66.54673 0.8861027 +66.5976 0 66.5976 0.113897227 0 66.5976 0.8861028 +66.64847 0 66.64847 0.11389754 0 66.64847 0.886102438 +66.69934 0 66.69934 0.113897465 0 66.69934 0.886102557 +66.75021 0 66.75021 0.1138974 0 66.75021 0.8861026 +66.80109 0 66.80109 0.113897331 0 66.80109 0.8861027 +66.85196 0 66.85196 0.113897264 0 66.85196 0.886102736 +66.90283 0 66.90283 0.1138972 0 66.90283 0.8861028 +66.9537 0 66.9537 0.11389751 0 66.9537 0.8861025 +67.00457 0 67.00457 0.113897435 0 67.00457 0.886102557 +67.05544 0 67.05544 0.113897368 0 67.05544 0.8861026 +67.1063156 0 67.1063156 0.1138973 0 67.1063156 0.8861027 +67.15719 0 67.15719 0.113897234 0 67.15719 0.886102736 +67.20805 0 67.20805 0.11389754 0 67.20805 0.886102438 +67.25893 0 67.25893 0.113897473 0 67.25893 0.886102557 +67.3098 0 67.3098 0.113897406 0 67.3098 0.8861026 +67.36067 0 67.36067 0.113897339 0 67.36067 0.8861027 +67.4115448 0 67.4115448 0.113897271 0 67.4115448 0.886102736 +67.46242 0 67.46242 0.113897204 0 67.46242 0.8861028 +67.51328 0 67.51328 0.11389751 0 67.51328 0.8861025 +67.5641556 0 67.5641556 0.113897443 0 67.5641556 0.886102557 +67.61503 0 67.61503 0.113897376 0 67.61503 0.8861026 +67.6659 0 67.6659 0.113897309 0 67.6659 0.8861027 +67.716774 0 67.716774 0.113897242 0 67.716774 0.886102736 +67.76764 0 67.76764 0.113897547 0 67.76764 0.886102438 +67.81851 0 67.81851 0.11389748 0 67.81851 0.8861025 +67.8693848 0 67.8693848 0.113897406 0 67.8693848 0.8861026 +67.92026 0 67.92026 0.113897339 0 67.92026 0.8861027 +67.97113 0 67.97113 0.113897271 0 67.97113 0.886102736 +68.022 0 68.022 0.113897212 0 68.022 0.8861028 +68.07287 0 68.07287 0.113897517 0 68.07287 0.8861025 +68.12374 0 68.12374 0.11389745 0 68.12374 0.886102557 +68.174614 0 68.174614 0.113897376 0 68.174614 0.8861026 +68.22549 0 68.22549 0.113897309 0 68.22549 0.8861027 +68.27636 0 68.27636 0.113897242 0 68.27636 0.886102736 +68.32723 0 68.32723 0.113897182 0 68.32723 0.8861028 +68.3781 0 68.3781 0.113897488 0 68.3781 0.8861025 +68.42897 0 68.42897 0.11389742 0 68.42897 0.886102557 +68.47984 0 68.47984 0.113897353 0 68.47984 0.8861027 +68.5307159 0 68.5307159 0.113897286 0 68.5307159 0.886102736 +68.58159 0 68.58159 0.113897219 0 68.58159 0.8861028 +68.6324539 0 68.6324539 0.113897525 0 68.6324539 0.8861025 +68.68333 0 68.68333 0.113897458 0 68.68333 0.886102557 +68.7342 0 68.7342 0.113897391 0 68.7342 0.8861026 +68.78507 0 68.78507 0.113897324 0 68.78507 0.8861027 +68.8359451 0 68.8359451 0.113897257 0 68.8359451 0.886102736 +68.88682 0 68.88682 0.113897189 0 68.88682 0.8861028 +68.93768 0 68.93768 0.113897495 0 68.93768 0.8861025 +68.9885559 0 68.9885559 0.113897428 0 68.9885559 0.886102557 +69.03943 0 69.03943 0.113897361 0 69.03943 0.8861026 +69.0903 0 69.0903 0.113897294 0 69.0903 0.886102736 +69.1411743 0 69.1411743 0.113897227 0 69.1411743 0.8861028 +69.19204 0 69.19204 0.113897532 0 69.19204 0.886102438 +69.24291 0 69.24291 0.113897465 0 69.24291 0.886102557 +69.2937851 0 69.2937851 0.1138974 0 69.2937851 0.8861026 +69.34466 0 69.34466 0.113897331 0 69.34466 0.8861027 +69.39553 0 69.39553 0.113897264 0 69.39553 0.886102736 +69.4464 0 69.4464 0.1138972 0 69.4464 0.8861028 +69.49727 0 69.49727 0.1138975 0 69.49727 0.8861025 +69.54814 0 69.54814 0.113897435 0 69.54814 0.886102557 +69.5990143 0 69.5990143 0.113897368 0 69.5990143 0.8861026 +69.64989 0 69.64989 0.1138973 0 69.64989 0.8861027 +69.70076 0 69.70076 0.113897234 0 69.70076 0.886102736 +69.7516251 0 69.7516251 0.11389754 0 69.7516251 0.886102438 +69.8025 0 69.8025 0.113897473 0 69.8025 0.886102557 +69.85337 0 69.85337 0.113897406 0 69.85337 0.8861026 +69.90424 0 69.90424 0.113897331 0 69.90424 0.8861027 +69.95512 0 69.95512 0.113897271 0 69.95512 0.886102736 +70.00599 0 70.00599 0.113897204 0 70.00599 0.8861028 +70.0568542 0 70.0568542 0.11389751 0 70.0568542 0.8861025 +70.10773 0 70.10773 0.113897443 0 70.10773 0.886102557 +70.1586 0 70.1586 0.113897376 0 70.1586 0.8861026 +70.20947 0 70.20947 0.113897309 0 70.20947 0.8861027 +70.2603455 0 70.2603455 0.113897242 0 70.2603455 0.886102736 +70.31121 0 70.31121 0.113897547 0 70.31121 0.886102438 +70.36208 0 70.36208 0.11389748 0 70.36208 0.8861025 +70.41296 0 70.41296 0.113897406 0 70.41296 0.8861026 +70.46383 0 70.46383 0.113897339 0 70.46383 0.8861027 +70.5147 0 70.5147 0.113897271 0 70.5147 0.886102736 +70.5655746 0 70.5655746 0.113897212 0 70.5655746 0.8861028 +70.61644 0 70.61644 0.113897517 0 70.61644 0.8861025 +70.66731 0 70.66731 0.11389745 0 70.66731 0.886102557 +70.7181854 0 70.7181854 0.113897376 0 70.7181854 0.8861026 +70.76906 0 70.76906 0.113897309 0 70.76906 0.8861027 +70.81993 0 70.81993 0.113897242 0 70.81993 0.886102736 +70.8708 0 70.8708 0.113897555 0 70.8708 0.886102438 +70.92167 0 70.92167 0.11389748 0 70.92167 0.8861025 +70.97254 0 70.97254 0.113897413 0 70.97254 0.8861026 +71.0234146 0 71.0234146 0.113897346 0 71.0234146 0.8861027 +71.07429 0 71.07429 0.113897279 0 71.07429 0.886102736 +71.12516 0 71.12516 0.113897212 0 71.12516 0.8861028 +71.1760254 0 71.1760254 0.113897517 0 71.1760254 0.8861025 +71.2269 0 71.2269 0.11389745 0 71.2269 0.886102557 +71.27777 0 71.27777 0.113897383 0 71.27777 0.8861026 +71.32864 0 71.32864 0.113897316 0 71.32864 0.8861027 +71.37952 0 71.37952 0.113897249 0 71.37952 0.886102736 +71.43039 0 71.43039 0.113897182 0 71.43039 0.8861028 +71.4812546 0 71.4812546 0.113897488 0 71.4812546 0.8861025 +71.53213 0 71.53213 0.11389742 0 71.53213 0.886102557 +71.583 0 71.583 0.113897353 0 71.583 0.8861027 +71.63387 0 71.63387 0.113897286 0 71.63387 0.886102736 +71.6847458 0 71.6847458 0.113897219 0 71.6847458 0.8861028 +71.73561 0 71.73561 0.113897532 0 71.73561 0.8861025 +71.78648 0 71.78648 0.113897458 0 71.78648 0.886102557 +71.83736 0 71.83736 0.113897391 0 71.83736 0.8861026 +71.88823 0 71.88823 0.113897324 0 71.88823 0.8861027 +71.9391 0 71.9391 0.113897257 0 71.9391 0.886102736 +71.989975 0 71.989975 0.113897189 0 71.989975 0.8861028 +72.04084 0 72.04084 0.1138975 0 72.04084 0.8861025 +72.09171 0 72.09171 0.113897428 0 72.09171 0.886102557 +72.1425858 0 72.1425858 0.113897361 0 72.1425858 0.8861026 +72.19346 0 72.19346 0.113897294 0 72.19346 0.8861027 +72.24433 0 72.24433 0.113897227 0 72.24433 0.8861028 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeIidSpike-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeIidSpike-Schema.txt new file mode 100644 index 0000000000..8b7eac8b58 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeIidSpike-Schema.txt @@ -0,0 +1,54 @@ +---- BoundLoader ---- +1 columns: + Features: R4 +---- IidSpikeDetector ---- +2 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' +---- ConvertTransform ---- +3 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' +---- IidSpikeDetector ---- +4 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + Anomaly2: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' +---- ConvertTransform ---- +5 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + Anomaly2: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly2: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' +---- ChooseColumnsTransform ---- +3 columns: + Features: R4 + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly2: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageNonUniform-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageNonUniform-Data.txt new file mode 100644 index 0000000000..5cdbc7365a --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageNonUniform-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1 +#@ } +Input Output +5 ? +5 ? +3 4.111111 +6 4.77777767 +4 4.44444466 +8 6.22222233 +1 4 +2 3 +2 1.77777779 +4 2.88888884 +1 2.22222233 +2 2.11111116 +5 3.11111116 +1 2.55555558 +8 5 +7 6 +4 5.888889 +4 4.66666651 +10 6.66666651 +6 6.888889 +7 7.33333349 +10 8.111111 +3 6.22222233 +8 6.77777767 +1 3.77777767 +5 4.33333349 +3 3.22222233 +5 4.33333349 +2 3.22222233 +1 2.22222233 +3 2.11111116 +2 2.11111116 +10 5.77777767 +2 4.66666651 +3 4.22222233 +2 2.33333325 +10 5.77777767 +6 6.44444466 +5 6.44444466 +2 3.88888884 +6 4.44444466 +10 6.888889 +6 7.33333349 +5 6.44444466 +10 7.44444466 +1 4.888889 +3 3.88888884 +1 1.66666663 +4 2.77777767 +7 4.66666651 +9 7.22222233 +5 6.77777767 +10 8.111111 +5 6.66666651 +10 8.333333 +10 8.888889 +8 9.111111 +8 8.444445 +5 6.66666651 +9 7.44444466 +5 6.33333349 +1 4.111111 +9 5.44444466 +6 5.888889 +1 4.44444466 +10 6.111111 +4 5.33333349 +5 5.77777767 +8 6.111111 +1 4.22222233 +5 4.33333349 +6 4.55555534 +1 3.55555558 +9 5.66666651 +10 7.66666651 +1 5.77777767 +1 3 +5 2.77777767 +3 3.22222233 +2 3 +2 2.22222233 +4 2.88888884 +5 4 +3 3.88888884 +3 3.44444442 +5 3.88888884 +3 3.66666675 +3 3.44444442 +4 3.44444442 +2 2.88888884 +1 2 +3 2.11111116 +4 3 +1 2.44444442 +2 2.11111116 +1 1.33333337 +2 1.66666663 +5 3.11111116 +9 6.111111 +7 7.22222233 +10 8.777778 +2 5.77777767 +4 4.66666651 +8 5.33333349 +10 8 +7 8.222222 +10 9 +1 5.33333349 +1 3 +6 3.22222233 +1 2.66666675 +8 5.22222233 +10 7.33333349 +10 9.555555 +3 6.888889 +1 3.66666675 +8 4.55555534 +4 4.66666651 +1 3.55555558 +3 2.55555558 +1 1.66666663 +4 2.77777767 +10 6 +5 6.44444466 +5 6.111111 +1 3.22222233 +7 4.55555534 +3 3.88888884 +8 6.111111 +1 3.77777767 +5 4.33333349 +2 2.77777767 +5 4 +3 3.44444442 +3 3.44444442 +5 3.88888884 +4 4.111111 +3 3.77777767 +4 3.66666675 +1 2.44444442 +3 2.55555558 +2 2.11111116 +9 5.33333349 +1 3.88888884 +2 3.22222233 +1 1.33333337 +3 2.11111116 +1 1.66666663 +3 2.33333325 +8 4.77777767 +1 3.77777767 +7 5.22222233 +10 7 +4 6.66666651 +1 4 +5 3.44444442 +1 2.33333325 +2 2.33333325 +1 1.33333337 +9 4.77777767 +10 7.66666651 +4 7.111111 +3 4.888889 +1 2.33333325 +5 3.22222233 +4 3.66666675 +5 4.66666651 +10 7 +3 5.77777767 +1 3.66666675 +3 2.33333325 +1 1.66666663 +1 1.44444442 +6 3.22222233 +8 5.77777767 +5 6.22222233 +2 4.33333349 +5 4 +4 3.88888884 +5 4.66666651 +1 3 +1 1.88888884 +6 3.22222233 +5 4.44444466 +8 6.55555534 +2 4.66666651 +1 2.88888884 +10 5.22222233 +5 5.77777767 +1 4.33333349 +10 5.888889 +7 6.66666651 +5 6.77777767 +1 3.66666675 +3 2.77777767 +4 3 +8 5.55555534 +5 5.77777767 +1 3.88888884 +3 2.77777767 +9 5.22222233 +10 8.111111 +1 5.77777767 +5 4.77777767 +1 2.33333325 +5 3.66666675 +10 6.33333349 +1 4.888889 +1 3 +5 2.77777767 +8 5.44444466 +8 7.33333349 +1 4.888889 +10 6.55555534 +10 8 +8 9.111111 +1 5.33333349 +1 2.55555558 +6 3.22222233 +6 4.888889 +1 3.77777767 +10 6.111111 +4 5.33333349 +7 6.66666651 +10 7.66666651 +1 5.33333349 +10 7 +8 7.111111 +1 5.33333349 +10 6.55555534 +7 6.66666651 +6 7.22222233 +8 7.111111 +10 8.444445 +3 6.44444466 +3 4.55555534 +10 6.111111 +9 8 +8 8.777778 +10 9.111111 +5 7.33333349 +3 5.22222233 +2 3 +1 1.77777779 +1 1.22222221 +5 2.77777767 +8 5.44444466 +8 7.33333349 +4 6.22222233 +3 4.44444466 +1 2.33333325 +10 5.44444466 +6 6.22222233 +6 6.888889 +9 7.33333349 +5 6.55555534 +3 5 +3 3.44444442 +3 3 +5 3.88888884 +10 6.77777767 +5 6.66666651 +8 7.44444466 +10 8.222222 +7 8.222222 +5 6.77777767 +10 7.66666651 +3 5.77777767 +10 7.66666651 +1 4.44444466 +8 6.111111 +5 5.111111 +3 4.77777767 +7 5.22222233 +3 4.33333349 +3 3.88888884 +3 3 +1 2.11111116 +1 1.44444442 +10 5 +3 4.888889 +2 4.111111 +1 1.77777779 +10 5.22222233 +7 6.66666651 +8 8.111111 +10 8.666667 +3 6.44444466 +6 5.888889 +5 4.888889 +1 3.44444442 +1 1.88888884 +8 4.111111 +10 7.33333349 +1 5.55555534 +5 4.77777767 +5 4.111111 +5 5 +8 6.33333349 +9 7.77777767 +8 8.333333 +1 5.111111 +10 6.55555534 +1 4 +8 6.111111 +10 7.33333349 +1 5.55555534 +1 3 +7 3.66666675 +3 3.88888884 +2 3.44444442 +1 1.77777779 +8 4.33333349 +1 3.33333325 +1 2.55555558 +4 2.33333325 +5 3.77777767 +6 5.22222233 +1 3.55555558 +4 3.44444442 +7 4.66666651 +3 4.55555534 +3 3.88888884 +5 3.88888884 +1 2.77777767 +3 2.77777767 +10 5.66666651 +1 4.44444466 +8 6.111111 +10 7.33333349 +10 9.555555 +5 7.77777767 +5 6.111111 +5 5 +8 6.33333349 +1 4.22222233 +6 4.77777767 +1 2.66666675 +1 2.11111116 +8 4.111111 +10 7.33333349 +1 5.55555534 +2 3.44444442 +1 1.33333337 +7 3.88888884 +1 3 +5 4.111111 +1 2.33333325 +3 2.77777767 +4 3 +5 4.22222233 +2 3.44444442 +3 3.11111116 +2 2.33333325 +1 1.77777779 +4 2.55555558 +5 3.77777767 +8 6.111111 +8 7.33333349 +10 8.888889 +6 7.77777767 +3 5.55555534 +3 3.66666675 +4 3.44444442 +2 2.88888884 +2 2.44444442 +6 3.77777767 +5 4.66666651 +1 3.44444442 +1 1.88888884 +4 2.33333325 +1 2 +4 3 +5 3.77777767 +3 3.88888884 +1 2.55555558 +1 1.44444442 +1 1 +3 1.88888884 +5 3.44444442 +1 2.77777767 +10 5.888889 +3 4.888889 +2 4.111111 +2 2.22222233 +3 2.44444442 +7 4.55555534 +5 5.22222233 +2 4.111111 +5 4 +1 2.55555558 +10 5.888889 +3 4.888889 +1 3.66666675 +1 1.44444442 +3 1.88888884 +3 2.55555558 +4 3.44444442 +3 3.33333325 +1 2.33333325 +3 2.33333325 +3 2.55555558 +5 3.88888884 +3 3.66666675 +1 2.55555558 +1 1.44444442 +4 2.33333325 +1 2 +2 2.11111116 +3 2.22222233 +1 1.88888884 +1 1.44444442 +10 5 +5 5.77777767 +8 7.44444466 +3 5.111111 +8 6.33333349 +1 3.77777767 +5 4.33333349 +2 2.77777767 +3 3.11111116 +10 5.888889 +4 5.77777767 +5 5.77777767 +3 3.88888884 +9 6.111111 +5 5.888889 +8 7.22222233 +1 4.22222233 +2 3 +1 1.33333337 +5 3 +5 4.111111 +3 4.111111 +6 4.77777767 +10 7.111111 +10 9.111111 +4 7.33333349 +4 5.33333349 +5 4.44444466 +10 7 +5 6.66666651 +1 4.33333349 +1 1.88888884 +5 2.77777767 +2 2.77777767 +1 2.22222233 +5 3 +1 2.33333325 +5 3.66666675 +4 3.66666675 +5 4.66666651 +3 3.88888884 +4 3.88888884 +2 2.88888884 +10 6 +10 8.222222 +8 9.111111 +5 7.111111 +5 5.66666651 +5 5 +3 4.111111 +6 4.77777767 +4 4.44444466 +4 4.44444466 +10 6.66666651 +10 8.666667 +6 8.222222 +4 6 +1 3.11111116 +3 2.55555558 +6 3.88888884 +6 5.33333349 +4 5.111111 +5 4.888889 +3 3.88888884 +4 3.88888884 +4 3.77777767 +5 4.44444466 +4 4.33333349 +5 4.66666651 +5 4.77777767 +9 6.77777767 +8 7.66666651 +5 6.888889 +1 3.88888884 +3 2.77777767 +10 5.66666651 +3 5.33333349 +6 5.888889 +1 3.11111116 +5 3.88888884 +4 3.66666675 +5 4.66666651 +5 4.77777767 +3 4.111111 +1 2.55555558 +4 2.77777767 +4 3.33333325 +4 4 +6 4.888889 +4 4.66666651 +4 4.44444466 +4 4 +1 2.66666675 +3 2.55555558 +8 4.77777767 +1 3.77777767 +5 4.33333349 +2 2.77777767 +1 2.22222233 +5 3 +5 4.111111 +3 4.111111 +6 4.77777767 +4 4.44444466 +1 3.11111116 +1 1.66666663 +3 1.88888884 +4 3 +1 2.44444442 +4 3 +10 6 +7 7.33333349 +3 5.888889 +3 3.88888884 +4 3.44444442 +4 3.77777767 +6 4.888889 +4 4.66666651 +7 5.77777767 +4 5 +1 3.33333325 +3 2.55555558 +2 2.11111116 +1 1.77777779 +5 3 +5 4.111111 +4 4.55555534 +6 5.111111 +5 5.111111 +3 4.33333349 +5 4.33333349 +4 4.111111 +2 3.33333325 +5 3.77777767 +6 4.77777767 +2 4 +3 3.33333325 +7 4.55555534 +3 4.33333349 +1 3 +3 2.33333325 +4 3 +3 3.33333325 +4 3.66666675 +5 4.22222233 +5 4.77777767 +2 3.66666675 +5 4 +5 4.33333349 +5 5 +1 3.22222233 +3 2.77777767 +4 3 +5 4.22222233 +3 3.88888884 +4 3.88888884 +8 5.55555534 +10 8 +8 8.666667 +7 8 +3 5.44444466 +1 3 +10 5.44444466 +5 5.77777767 +5 6.111111 +1 3.22222233 +1 1.88888884 +1 1 +5 2.77777767 +5 4.111111 +6 5.44444466 +3 4.44444466 +5 4.55555534 +1 2.77777767 +8 5 +5 5.111111 +9 7.44444466 +5 6.33333349 +4 5.44444466 +2 3.33333325 +10 6 +5 6 +4 5.66666651 +5 4.66666651 +4 4.33333349 +5 4.66666651 +3 3.88888884 +5 4.33333349 +3 3.66666675 +1 2.55555558 +4 2.77777767 +5 3.77777767 +5 4.77777767 +10 7.22222233 +4 6.22222233 +1 4 +5 3.44444442 +5 4.111111 +10 7.22222233 +5 6.66666651 +8 7.44444466 +2 4.66666651 +2 3.33333325 +4 2.88888884 +3 3.11111116 +1 2.33333325 +4 2.77777767 +5 3.77777767 +3 3.88888884 +6 4.77777767 +7 5.77777767 +1 4.111111 +5 4.111111 +3 3.22222233 +4 3.88888884 +2 2.88888884 +2 2.44444442 +4 2.88888884 +6 4.44444466 +5 5.111111 +1 3.44444442 +8 5 +3 4.22222233 +3 4.111111 +10 6.111111 +4 5.77777767 +4 5.33333349 +5 4.44444466 +4 4.33333349 +3 3.77777767 +3 3.22222233 +1 2.11111116 +2 1.88888884 +3 2.22222233 +1 1.88888884 +1 1.44444442 +5 2.77777767 +3 3.22222233 +3 3.44444442 +1 2.11111116 +5 3.22222233 +4 3.66666675 +3 3.77777767 +3 3.22222233 +5 3.88888884 +5 4.55555534 +7 5.888889 +1 3.88888884 +1 2.33333325 +4 2.33333325 +1 2 +1 1.66666663 +3 1.88888884 +1 1.66666663 +5 3.22222233 +3 3.22222233 +5 4.33333349 +5 4.55555534 +3 4.111111 +3 3.44444442 +2 2.55555558 +5 3.55555558 +1 2.55555558 +4 3.22222233 +1 2 +5 3.44444442 +1 2.33333325 +2 2.33333325 +10 5.33333349 +5 6 +5 6.111111 +1 3.22222233 +1 1.88888884 +1 1 +1 1 +3 1.88888884 +4 3 +1 2.44444442 +1 1.66666663 +5 2.77777767 +3 3.22222233 +3 3.44444442 +3 3 +2 2.55555558 +5 3.55555558 +4 3.88888884 +4 4.22222233 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageNonUniform-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageNonUniform-Schema.txt new file mode 100644 index 0000000000..6e765671a3 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageNonUniform-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- MovingAverageTransform ---- +2 columns: + Input: R4 + Output: R4 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageUniform-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageUniform-Data.txt new file mode 100644 index 0000000000..e29a40992b --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageUniform-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1 +#@ } +Input Output +5 ? +5 5 +3 4 +6 4.5 +4 5 +8 6 +1 4.5 +2 1.5 +2 2 +4 3 +1 2.5 +2 1.5 +5 3.5 +1 3 +8 4.5 +7 7.5 +4 5.5 +4 4 +10 7 +6 8 +7 6.5 +10 8.5 +3 6.5 +8 5.5 +1 4.5 +5 3 +3 4 +5 4 +2 3.5 +1 1.5 +3 2 +2 2.5 +10 6 +2 6 +3 2.5 +2 2.5 +10 6 +6 8 +5 5.5 +2 3.5 +6 4 +10 8 +6 8 +5 5.5 +10 7.5 +1 5.5 +3 2 +1 2 +4 2.5 +7 5.5 +9 8 +5 7 +10 7.5 +5 7.5 +10 7.5 +10 10 +8 9 +8 8 +5 6.5 +9 7 +5 7 +1 3 +9 5 +6 7.5 +1 3.5 +10 5.5 +4 7 +5 4.5 +8 6.5 +1 4.5 +5 3 +6 5.5 +1 3.5 +9 5 +10 9.5 +1 5.5 +1 1 +5 3 +3 4 +2 2.5 +2 2 +4 3 +5 4.5 +3 4 +3 3 +5 4 +3 4 +3 3 +4 3.5 +2 3 +1 1.5 +3 2 +4 3.5 +1 2.5 +2 1.5 +1 1.5 +2 1.5 +5 3.5 +9 7 +7 8 +10 8.5 +2 6 +4 3 +8 6 +10 9 +7 8.5 +10 8.5 +1 5.5 +1 1 +6 3.5 +1 3.5 +8 4.5 +10 9 +10 10 +3 6.5 +1 2 +8 4.5 +4 6 +1 2.5 +3 2 +1 2 +4 2.5 +10 7 +5 7.5 +5 5 +1 3 +7 4 +3 5 +8 5.5 +1 4.5 +5 3 +2 3.5 +5 3.5 +3 4 +3 3 +5 4 +4 4.5 +3 3.5 +4 3.5 +1 2.5 +3 2 +2 2.5 +9 5.5 +1 5 +2 1.5 +1 1.5 +3 2 +1 2 +3 2 +8 5.5 +1 4.5 +7 4 +10 8.5 +4 7 +1 2.5 +5 3 +1 3 +2 1.5 +1 1.5 +9 5 +10 9.5 +4 7 +3 3.5 +1 2 +5 3 +4 4.5 +5 4.5 +10 7.5 +3 6.5 +1 2 +3 2 +1 2 +1 1 +6 3.5 +8 7 +5 6.5 +2 3.5 +5 3.5 +4 4.5 +5 4.5 +1 3 +1 1 +6 3.5 +5 5.5 +8 6.5 +2 5 +1 1.5 +10 5.5 +5 7.5 +1 3 +10 5.5 +7 8.5 +5 6 +1 3 +3 2 +4 3.5 +8 6 +5 6.5 +1 3 +3 2 +9 6 +10 9.5 +1 5.5 +5 3 +1 3 +5 3 +10 7.5 +1 5.5 +1 1 +5 3 +8 6.5 +8 8 +1 4.5 +10 5.5 +10 10 +8 9 +1 4.5 +1 1 +6 3.5 +6 6 +1 3.5 +10 5.5 +4 7 +7 5.5 +10 8.5 +1 5.5 +10 5.5 +8 9 +1 4.5 +10 5.5 +7 8.5 +6 6.5 +8 7 +10 9 +3 6.5 +3 3 +10 6.5 +9 9.5 +8 8.5 +10 9 +5 7.5 +3 4 +2 2.5 +1 1.5 +1 1 +5 3 +8 6.5 +8 8 +4 6 +3 3.5 +1 2 +10 5.5 +6 8 +6 6 +9 7.5 +5 7 +3 4 +3 3 +3 3 +5 4 +10 7.5 +5 7.5 +8 6.5 +10 9 +7 8.5 +5 6 +10 7.5 +3 6.5 +10 6.5 +1 5.5 +8 4.5 +5 6.5 +3 4 +7 5 +3 5 +3 3 +3 3 +1 2 +1 1 +10 5.5 +3 6.5 +2 2.5 +1 1.5 +10 5.5 +7 8.5 +8 7.5 +10 9 +3 6.5 +6 4.5 +5 5.5 +1 3 +1 1 +8 4.5 +10 9 +1 5.5 +5 3 +5 5 +5 5 +8 6.5 +9 8.5 +8 8.5 +1 4.5 +10 5.5 +1 5.5 +8 4.5 +10 9 +1 5.5 +1 1 +7 4 +3 5 +2 2.5 +1 1.5 +8 4.5 +1 4.5 +1 1 +4 2.5 +5 4.5 +6 5.5 +1 3.5 +4 2.5 +7 5.5 +3 5 +3 3 +5 4 +1 3 +3 2 +10 6.5 +1 5.5 +8 4.5 +10 9 +10 10 +5 7.5 +5 5 +5 5 +8 6.5 +1 4.5 +6 3.5 +1 3.5 +1 1 +8 4.5 +10 9 +1 5.5 +2 1.5 +1 1.5 +7 4 +1 4 +5 3 +1 3 +3 2 +4 3.5 +5 4.5 +2 3.5 +3 2.5 +2 2.5 +1 1.5 +4 2.5 +5 4.5 +8 6.5 +8 8 +10 9 +6 8 +3 4.5 +3 3 +4 3.5 +2 3 +2 2 +6 4 +5 5.5 +1 3 +1 1 +4 2.5 +1 2.5 +4 2.5 +5 4.5 +3 4 +1 2 +1 1 +1 1 +3 2 +5 4 +1 3 +10 5.5 +3 6.5 +2 2.5 +2 2 +3 2.5 +7 5 +5 6 +2 3.5 +5 3.5 +1 3 +10 5.5 +3 6.5 +1 2 +1 1 +3 2 +3 3 +4 3.5 +3 3.5 +1 2 +3 2 +3 3 +5 4 +3 4 +1 2 +1 1 +4 2.5 +1 2.5 +2 1.5 +3 2.5 +1 2 +1 1 +10 5.5 +5 7.5 +8 6.5 +3 5.5 +8 5.5 +1 4.5 +5 3 +2 3.5 +3 2.5 +10 6.5 +4 7 +5 4.5 +3 4 +9 6 +5 7 +8 6.5 +1 4.5 +2 1.5 +1 1.5 +5 3 +5 5 +3 4 +6 4.5 +10 8 +10 10 +4 7 +4 4 +5 4.5 +10 7.5 +5 7.5 +1 3 +1 1 +5 3 +2 3.5 +1 1.5 +5 3 +1 3 +5 3 +4 4.5 +5 4.5 +3 4 +4 3.5 +2 3 +10 6 +10 10 +8 9 +5 6.5 +5 5 +5 5 +3 4 +6 4.5 +4 5 +4 4 +10 7 +10 10 +6 8 +4 5 +1 2.5 +3 2 +6 4.5 +6 6 +4 5 +5 4.5 +3 4 +4 3.5 +4 4 +5 4.5 +4 4.5 +5 4.5 +5 5 +9 7 +8 8.5 +5 6.5 +1 3 +3 2 +10 6.5 +3 6.5 +6 4.5 +1 3.5 +5 3 +4 4.5 +5 4.5 +5 5 +3 4 +1 2 +4 2.5 +4 4 +4 4 +6 5 +4 5 +4 4 +4 4 +1 2.5 +3 2 +8 5.5 +1 4.5 +5 3 +2 3.5 +1 1.5 +5 3 +5 5 +3 4 +6 4.5 +4 5 +1 2.5 +1 1 +3 2 +4 3.5 +1 2.5 +4 2.5 +10 7 +7 8.5 +3 5 +3 3 +4 3.5 +4 4 +6 5 +4 5 +7 5.5 +4 5.5 +1 2.5 +3 2 +2 2.5 +1 1.5 +5 3 +5 5 +4 4.5 +6 5 +5 5.5 +3 4 +5 4 +4 4.5 +2 3 +5 3.5 +6 5.5 +2 4 +3 2.5 +7 5 +3 5 +1 2 +3 2 +4 3.5 +3 3.5 +4 3.5 +5 4.5 +5 5 +2 3.5 +5 3.5 +5 5 +5 5 +1 3 +3 2 +4 3.5 +5 4.5 +3 4 +4 3.5 +8 6 +10 9 +8 9 +7 7.5 +3 5 +1 2 +10 5.5 +5 7.5 +5 5 +1 3 +1 1 +1 1 +5 3 +5 5 +6 5.5 +3 4.5 +5 4 +1 3 +8 4.5 +5 6.5 +9 7 +5 7 +4 4.5 +2 3 +10 6 +5 7.5 +4 4.5 +5 4.5 +4 4.5 +5 4.5 +3 4 +5 4 +3 4 +1 2 +4 2.5 +5 4.5 +5 5 +10 7.5 +4 7 +1 2.5 +5 3 +5 5 +10 7.5 +5 7.5 +8 6.5 +2 5 +2 2 +4 3 +3 3.5 +1 2 +4 2.5 +5 4.5 +3 4 +6 4.5 +7 6.5 +1 4 +5 3 +3 4 +4 3.5 +2 3 +2 2 +4 3 +6 5 +5 5.5 +1 3 +8 4.5 +3 5.5 +3 3 +10 6.5 +4 7 +4 4 +5 4.5 +4 4.5 +3 3.5 +3 3 +1 2 +2 1.5 +3 2.5 +1 2 +1 1 +5 3 +3 4 +3 3 +1 2 +5 3 +4 4.5 +3 3.5 +3 3 +5 4 +5 5 +7 6 +1 4 +1 1 +4 2.5 +1 2.5 +1 1 +3 2 +1 2 +5 3 +3 4 +5 4 +5 5 +3 4 +3 3 +2 2.5 +5 3.5 +1 3 +4 2.5 +1 2.5 +5 3 +1 3 +2 1.5 +10 6 +5 7.5 +5 5 +1 3 +1 1 +1 1 +1 1 +3 2 +4 3.5 +1 2.5 +1 1 +5 3 +3 4 +3 3 +3 3 +2 2.5 +5 3.5 +4 4.5 +4 4 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageUniform-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageUniform-Schema.txt new file mode 100644 index 0000000000..6e765671a3 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeMovingAverageUniform-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- MovingAverageTransform ---- +2 columns: + Input: R4 + Output: R4 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipePValue-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipePValue-Data.txt new file mode 100644 index 0000000000..34a9eb6082 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipePValue-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1 +#@ } +Input Output +5 1 +5 0.67724824 +3 1 +6 0.25 +4 0.8 +8 0.166666672 +1 1 +2 0.875 +2 0.7854611 +4 0.5740328 +1 0.9589244 +2 0.7228794 +5 0.272727281 +1 0.8969128 +8 0.14733927 +7 0.272727281 +4 0.4337017 +4 0.399984866 +10 0.09090909 +6 0.363636374 +7 0.334344774 +10 0.145531043 +3 0.909090936 +8 0.28252244 +1 1 +5 0.6363636 +3 0.8325536 +5 0.6155287 +2 0.909090936 +1 0.9093551 +3 0.661118746 +2 0.7528194 +10 0.09090909 +2 0.680000246 +3 0.368536383 +2 0.8267545 +10 0.121140651 +6 0.272727281 +5 0.363636374 +2 0.6439812 +6 0.285026431 +10 0.241532773 +6 0.392474532 +5 0.615853548 +10 0.22275129 +1 1 +3 0.8181818 +1 0.942523956 +4 0.6363636 +7 0.272727281 +9 0.272727281 +5 0.559340358 +10 0.167032644 +5 0.489836335 +10 0.146203086 +10 0.267976582 +8 0.454545468 +8 0.5328245 +5 0.8224906 +9 0.437735528 +5 0.728627741 +1 1 +9 0.399119973 +6 0.6363636 +1 0.9357464 +10 0.114698865 +4 0.8181818 +5 0.576868534 +8 0.363636374 +1 0.9565652 +5 0.5146173 +6 0.367678761 +1 0.8274701 +9 0.181818187 +10 0.106354795 +1 0.987836 +1 0.9099998 +5 0.59828943 +3 0.6363636 +2 0.6363636 +2 0.640976 +4 0.454545468 +5 0.3385074 +3 0.5527238 +3 0.5172669 +5 0.23269853 +3 0.6480279 +3 0.572897732 +4 0.348414332 +2 0.8681465 +1 1 +3 0.5078737 +4 0.318912238 +1 0.972162247 +2 0.7526057 +1 0.9581379 +2 0.5557997 +5 0.09090909 +9 0.09090909 +7 0.181818187 +10 0.09090909 +2 0.694301248 +4 0.5246275 +8 0.272727281 +10 0.149171308 +7 0.5022328 +10 0.224793568 +1 1 +1 0.913189352 +6 0.6363636 +1 0.8613943 +8 0.311439753 +10 0.130599514 +10 0.162753269 +3 0.727272749 +1 0.814144254 +8 0.381827384 +4 0.545454562 +1 0.9672585 +3 0.723939061 +1 0.992237568 +4 0.524444163 +10 0.23016645 +5 0.363636374 +5 0.344330758 +1 0.963756144 +7 0.272727281 +3 0.6671371 +8 0.181818187 +1 0.84266144 +5 0.4286802 +2 0.8181818 +5 0.39648667 +3 0.6499636 +3 0.6745726 +5 0.439955145 +4 0.545454562 +3 0.77230823 +4 0.5218466 +1 0.973230243 +3 0.6251988 +2 0.860421 +9 0.09090909 +1 0.9488389 +2 0.788549244 +1 0.890313566 +3 0.402053356 +1 0.749919 +3 0.295057267 +8 0.181818187 +1 0.7340951 +7 0.272727281 +10 0.09090909 +4 0.363636374 +1 0.885279953 +5 0.363636374 +1 0.983989954 +2 0.6363636 +1 0.92186904 +9 0.181818187 +10 0.109586149 +4 0.5584908 +3 0.6363636 +1 0.8549338 +5 0.343668848 +4 0.455887169 +5 0.3475949 +10 0.149302766 +3 0.7884052 +1 0.9400207 +3 0.7456703 +1 0.85511595 +1 0.791361451 +6 0.181818187 +8 0.181818187 +5 0.403921038 +2 0.727272749 +5 0.412166536 +4 0.454545468 +5 0.372099727 +1 0.849823058 +1 0.8782018 +6 0.19046621 +5 0.364953935 +8 0.142870486 +2 0.7523053 +1 0.9275337 +10 0.09090909 +5 0.45550254 +1 0.8085711 +10 0.154814124 +7 0.363636374 +5 0.69810313 +1 0.968209445 +3 0.6363636 +4 0.545454562 +8 0.272727281 +5 0.5367962 +1 0.9350541 +3 0.6484481 +9 0.181818187 +10 0.09090909 +1 0.8862705 +5 0.441305 +1 0.9416581 +5 0.469091117 +10 0.163443834 +1 0.9364225 +1 0.908844 +5 0.4144748 +8 0.363636374 +8 0.305728972 +1 0.8059212 +10 0.177512854 +10 0.217571646 +8 0.5011175 +1 0.8951562 +1 0.8840561 +6 0.545454562 +6 0.5750356 +1 0.740747631 +10 0.183787331 +4 0.6363636 +7 0.454545468 +10 0.223520443 +1 0.8946871 +10 0.207720429 +8 0.363636374 +1 0.916785836 +10 0.333905965 +7 0.5937079 +6 0.727272749 +8 0.367397249 +10 0.106754616 +3 0.8181818 +3 0.7294258 +10 0.313402861 +9 0.363636374 +8 0.4944481 +10 0.314687341 +5 0.8181818 +3 0.8735733 +2 1 +1 1 +1 0.9532511 +5 0.476910233 +8 0.379007369 +8 0.3471949 +4 0.6363636 +3 0.7163466 +1 0.900700033 +10 0.09090909 +6 0.363636374 +6 0.3653258 +9 0.181818187 +5 0.677533865 +3 0.824237049 +3 0.739362 +3 0.691915631 +5 0.5321044 +10 0.148391455 +5 0.545639753 +8 0.272727281 +10 0.168714538 +7 0.454545468 +5 0.467858434 +10 0.171352744 +3 0.860319257 +10 0.0954514444 +1 1 +8 0.461132824 +5 0.65796417 +3 0.890868 +7 0.544946253 +3 0.760424733 +3 0.671040833 +3 0.7360114 +1 0.9931545 +1 0.901879847 +10 0.09090909 +3 0.535336733 +2 0.8181818 +1 0.8628028 +10 0.127520159 +7 0.272727281 +8 0.272727281 +10 0.1165555 +3 0.5496179 +6 0.545454562 +5 0.6363636 +1 0.9255227 +1 0.9031256 +8 0.296668172 +10 0.216935679 +1 0.9797361 +5 0.551610231 +5 0.572749138 +5 0.395487577 +8 0.210969761 +9 0.181818187 +8 0.366248965 +1 0.995037854 +10 0.172745287 +1 0.984862864 +8 0.3890801 +10 0.108154535 +1 0.879870832 +1 0.7760568 +7 0.6363636 +3 0.6363636 +2 0.6363636 +1 0.8443887 +8 0.332467347 +1 0.681041658 +1 0.996511161 +4 0.363636374 +5 0.272727281 +6 0.272727281 +1 0.8829549 +4 0.417978525 +7 0.181818187 +3 0.6363636 +3 0.655908 +5 0.3602997 +1 0.9462807 +3 0.784368753 +10 0.09090909 +1 0.995902061 +8 0.181818187 +10 0.09233158 +10 0.125129163 +5 0.512630641 +5 0.4901322 +5 0.6648411 +8 0.409078836 +1 0.9939319 +6 0.545454562 +1 0.8581617 +1 0.88222003 +8 0.278109163 +10 0.167751029 +1 0.8899551 +2 0.6363636 +1 0.84825635 +7 0.363636374 +1 0.732380152 +5 0.454545468 +1 0.860485256 +3 0.454545468 +4 0.454545468 +5 0.324250251 +2 0.6027172 +3 0.523231149 +2 0.6629901 +1 0.9473943 +4 0.3179539 +5 0.139423847 +8 0.09090909 +8 0.160955936 +10 0.09090909 +6 0.363636374 +3 0.707062244 +3 0.7456907 +4 0.6276858 +2 0.909090936 +2 0.984455347 +6 0.3935735 +5 0.545454562 +1 1 +1 0.9212061 +4 0.4539985 +1 0.8561171 +4 0.288723141 +5 0.234696686 +3 0.545454562 +1 0.941684842 +1 0.8379912 +1 0.725884557 +3 0.396365255 +5 0.160947353 +1 0.840907753 +10 0.09090909 +3 0.55476743 +2 0.6363636 +2 0.578473032 +3 0.4165619 +7 0.181818187 +5 0.340624779 +2 0.90683794 +5 0.3154729 +1 0.949149668 +10 0.104174 +3 0.5378938 +1 0.9428833 +1 0.858884037 +3 0.463312 +3 0.56291914 +4 0.363636374 +3 0.381359845 +1 0.9785474 +3 0.616064 +3 0.599981368 +5 0.09090909 +3 0.318158627 +1 0.839379 +1 0.91915673 +4 0.221696168 +1 0.939768732 +2 0.6363636 +3 0.5440647 +1 0.9044986 +1 0.674405 +10 0.09090909 +5 0.181818187 +8 0.181818187 +3 0.474476755 +8 0.19971709 +1 0.8803639 +5 0.3996809 +2 0.727272749 +3 0.569248259 +10 0.121764518 +4 0.6363636 +5 0.398269981 +3 0.7870521 +9 0.181818187 +5 0.486302733 +8 0.272727281 +1 1 +2 0.8479825 +1 0.968556 +5 0.5218097 +5 0.445178866 +3 0.654234648 +6 0.272727281 +10 0.09090909 +10 0.119187057 +4 0.6363636 +4 0.556266367 +5 0.5196065 +10 0.104417115 +5 0.631046951 +1 1 +1 0.9590292 +5 0.5178429 +2 0.8181818 +1 0.8795123 +5 0.217087045 +1 0.9121801 +5 0.297860056 +4 0.545454562 +5 0.245706275 +3 0.545454562 +4 0.484356076 +2 0.7391402 +10 0.09090909 +10 0.1139638 +8 0.272727281 +5 0.4974126 +5 0.464024752 +5 0.5978673 +3 0.9000305 +6 0.363636374 +4 0.814810455 +4 0.73805207 +10 0.2562919 +10 0.109586142 +6 0.447875321 +4 0.8737396 +1 1 +3 0.8719057 +6 0.31129542 +6 0.389982939 +4 0.6647366 +5 0.545454562 +3 0.867078 +4 0.6205549 +4 0.6272626 +5 0.290590137 +4 0.504943848 +5 0.299601376 +5 0.495504349 +9 0.09090909 +8 0.181818187 +5 0.4735013 +1 1 +3 0.909090936 +10 0.09090909 +3 0.8604604 +6 0.363636374 +1 0.9443387 +5 0.5833764 +4 0.6363636 +5 0.38317275 +5 0.34949258 +3 0.7349538 +1 0.9954943 +4 0.6334044 +4 0.6306032 +4 0.6642208 +6 0.09090909 +4 0.665120661 +4 0.5852974 +4 0.7868041 +1 0.9451516 +3 0.7865967 +8 0.09090909 +1 0.971796155 +5 0.272727281 +2 0.8181818 +1 0.895550668 +5 0.265158653 +5 0.310825139 +3 0.608651 +6 0.181818187 +4 0.545454562 +1 0.9886279 +1 0.8893849 +3 0.557302237 +4 0.4533775 +1 0.729088068 +4 0.497636467 +10 0.09090909 +7 0.181818187 +3 0.6748641 +3 0.6505249 +4 0.372654766 +4 0.295031 +6 0.272727281 +4 0.537067831 +7 0.2242293 +4 0.6374568 +1 1 +3 0.8704981 +2 0.909090936 +1 0.974947155 +5 0.272727281 +5 0.349041671 +4 0.539139569 +6 0.181818187 +5 0.442963928 +3 0.7090445 +5 0.328877151 +4 0.6303283 +2 0.8740101 +5 0.340447277 +6 0.16025649 +2 0.984302461 +3 0.8095803 +7 0.09090909 +3 0.7326923 +1 1 +3 0.7059403 +4 0.4487561 +3 0.5511656 +4 0.39225167 +5 0.272727281 +5 0.219714016 +2 0.909090936 +5 0.289596319 +5 0.245398685 +5 0.210765988 +1 1 +3 0.796564162 +4 0.5986337 +5 0.398065865 +3 0.7543564 +4 0.6075292 +8 0.09090909 +10 0.09090909 +8 0.237029776 +7 0.363636374 +3 0.7482466 +1 1 +10 0.106426656 +5 0.551951647 +5 0.5530232 +1 0.910909951 +1 0.9055377 +1 0.7326479 +5 0.387349159 +5 0.502768159 +6 0.181818187 +3 0.6363636 +5 0.3768508 +1 0.8015215 +8 0.09090909 +5 0.2928952 +9 0.09090909 +5 0.417686075 +4 0.8181818 +2 0.909090936 +10 0.09090909 +5 0.565179348 +4 0.7372478 +5 0.411596715 +4 0.7647299 +5 0.3257723 +3 0.909090936 +5 0.487032026 +3 0.8243184 +1 1 +4 0.636648536 +5 0.24010466 +5 0.441147119 +10 0.09090909 +4 0.6845645 +1 0.9215487 +5 0.3449822 +5 0.193249479 +10 0.173848376 +5 0.27435258 +8 0.272727281 +2 0.909090936 +2 0.837528169 +4 0.651384234 +3 0.727272749 +1 0.9226808 +4 0.577480435 +5 0.324079484 +3 0.696873844 +6 0.181818187 +7 0.181818187 +1 0.9914505 +5 0.3354559 +3 0.7013664 +4 0.5209869 +2 0.8181818 +2 0.864079356 +4 0.466819137 +6 0.220339686 +5 0.3713796 +1 0.9347191 +8 0.09090909 +3 0.6703649 +3 0.687106133 +10 0.09090909 +4 0.4625498 +4 0.63540256 +5 0.429197 +4 0.5984183 +3 0.754156053 +3 0.8948213 +1 1 +2 0.909090936 +3 0.6130304 +1 0.9264184 +1 0.9738972 +5 0.151729017 +3 0.5702898 +3 0.4818108 +1 0.7910032 +5 0.168775931 +4 0.272727281 +3 0.493914 +3 0.496514678 +5 0.124498948 +5 0.21097295 +7 0.09090909 +1 0.984740734 +1 0.8905695 +4 0.5316517 +1 0.844643354 +1 0.846752644 +3 0.462555 +1 0.7273109 +5 0.316857576 +3 0.478257 +5 0.257308483 +5 0.09290838 +3 0.5510434 +3 0.5617856 +2 0.727272749 +5 0.150430918 +1 0.9573383 +4 0.454545468 +1 0.944630861 +5 0.251721174 +1 0.9449819 +2 0.711378 +10 0.09090909 +5 0.2464249 +5 0.226547778 +1 0.96894294 +1 0.833415151 +1 0.8450047 +1 0.924681246 +3 0.454545468 +4 0.363636374 +1 0.94199127 +1 0.6516124 +5 0.210350782 +3 0.386591464 +3 0.2798103 +3 0.2814521 +2 0.6363636 +5 0.11612238 +4 0.306363285 +4 0.3822979 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipePValue-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipePValue-Schema.txt new file mode 100644 index 0000000000..775a3308c9 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipePValue-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- PValueTransform ---- +2 columns: + Input: R4 + Output: R4 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipePercentileThreshold-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipePercentileThreshold-Data.txt new file mode 100644 index 0000000000..f3d17a98af --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipePercentileThreshold-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:BL:1 +#@ } +Input Output +5 0 +5 0 +3 0 +6 0 +4 0 +8 0 +1 0 +2 0 +2 0 +4 0 +1 0 +2 0 +5 0 +1 0 +8 0 +7 0 +4 0 +4 0 +10 0 +6 0 +7 0 +10 0 +3 0 +8 0 +1 0 +5 0 +3 0 +5 0 +2 0 +1 0 +3 0 +2 0 +10 0 +2 0 +3 0 +2 0 +10 0 +6 0 +5 0 +2 0 +6 0 +10 0 +6 0 +5 0 +10 0 +1 0 +3 0 +1 0 +4 0 +7 0 +9 0 +5 0 +10 0 +5 0 +10 0 +10 0 +8 0 +8 0 +5 0 +9 0 +5 0 +1 0 +9 0 +6 0 +1 0 +10 0 +4 0 +5 0 +8 0 +1 0 +5 0 +6 0 +1 0 +9 0 +10 0 +1 0 +1 0 +5 0 +3 0 +2 0 +2 0 +4 0 +5 0 +3 0 +3 0 +5 0 +3 0 +3 0 +4 0 +2 0 +1 0 +3 0 +4 0 +1 0 +2 0 +1 0 +2 0 +5 0 +9 0 +7 0 +10 0 +2 0 +4 0 +8 0 +10 0 +7 0 +10 0 +1 0 +1 0 +6 0 +1 0 +8 0 +10 0 +10 0 +3 0 +1 0 +8 0 +4 0 +1 0 +3 0 +1 0 +4 0 +10 0 +5 0 +5 0 +1 0 +7 0 +3 0 +8 0 +1 0 +5 0 +2 0 +5 0 +3 0 +3 0 +5 0 +4 0 +3 0 +4 0 +1 0 +3 0 +2 0 +9 0 +1 0 +2 0 +1 0 +3 0 +1 0 +3 0 +8 0 +1 0 +7 0 +10 0 +4 0 +1 0 +5 0 +1 0 +2 0 +1 0 +9 0 +10 0 +4 0 +3 0 +1 0 +5 0 +4 0 +5 0 +10 0 +3 0 +1 0 +3 0 +1 0 +1 0 +6 0 +8 0 +5 0 +2 0 +5 0 +4 0 +5 0 +1 0 +1 0 +6 0 +5 0 +8 0 +2 0 +1 0 +10 0 +5 0 +1 0 +10 0 +7 0 +5 0 +1 0 +3 0 +4 0 +8 0 +5 0 +1 0 +3 0 +9 0 +10 0 +1 0 +5 0 +1 0 +5 0 +10 0 +1 0 +1 0 +5 0 +8 0 +8 0 +1 0 +10 0 +10 0 +8 0 +1 0 +1 0 +6 0 +6 0 +1 0 +10 0 +4 0 +7 0 +10 0 +1 0 +10 0 +8 0 +1 0 +10 0 +7 0 +6 0 +8 0 +10 0 +3 0 +3 0 +10 0 +9 0 +8 0 +10 0 +5 0 +3 0 +2 0 +1 0 +1 0 +5 0 +8 0 +8 0 +4 0 +3 0 +1 0 +10 0 +6 0 +6 0 +9 0 +5 0 +3 0 +3 0 +3 0 +5 0 +10 0 +5 0 +8 0 +10 0 +7 0 +5 0 +10 0 +3 0 +10 0 +1 0 +8 0 +5 0 +3 0 +7 0 +3 0 +3 0 +3 0 +1 0 +1 0 +10 0 +3 0 +2 0 +1 0 +10 0 +7 0 +8 0 +10 0 +3 0 +6 0 +5 0 +1 0 +1 0 +8 0 +10 0 +1 0 +5 0 +5 0 +5 0 +8 0 +9 0 +8 0 +1 0 +10 0 +1 0 +8 0 +10 0 +1 0 +1 0 +7 0 +3 0 +2 0 +1 0 +8 0 +1 0 +1 0 +4 0 +5 0 +6 0 +1 0 +4 0 +7 0 +3 0 +3 0 +5 0 +1 0 +3 0 +10 0 +1 0 +8 0 +10 0 +10 0 +5 0 +5 0 +5 0 +8 0 +1 0 +6 0 +1 0 +1 0 +8 0 +10 0 +1 0 +2 0 +1 0 +7 0 +1 0 +5 0 +1 0 +3 0 +4 0 +5 0 +2 0 +3 0 +2 0 +1 0 +4 0 +5 0 +8 0 +8 0 +10 0 +6 0 +3 0 +3 0 +4 0 +2 0 +2 0 +6 0 +5 0 +1 0 +1 0 +4 0 +1 0 +4 0 +5 0 +3 0 +1 0 +1 0 +1 0 +3 0 +5 0 +1 0 +10 0 +3 0 +2 0 +2 0 +3 0 +7 0 +5 0 +2 0 +5 0 +1 0 +10 0 +3 0 +1 0 +1 0 +3 0 +3 0 +4 0 +3 0 +1 0 +3 0 +3 0 +5 0 +3 0 +1 0 +1 0 +4 0 +1 0 +2 0 +3 0 +1 0 +1 0 +10 0 +5 0 +8 0 +3 0 +8 0 +1 0 +5 0 +2 0 +3 0 +10 0 +4 0 +5 0 +3 0 +9 0 +5 0 +8 0 +1 0 +2 0 +1 0 +5 0 +5 0 +3 0 +6 0 +10 0 +10 0 +4 0 +4 0 +5 0 +10 0 +5 0 +1 0 +1 0 +5 0 +2 0 +1 0 +5 0 +1 0 +5 0 +4 0 +5 0 +3 0 +4 0 +2 0 +10 0 +10 0 +8 0 +5 0 +5 0 +5 0 +3 0 +6 0 +4 0 +4 0 +10 0 +10 0 +6 0 +4 0 +1 0 +3 0 +6 0 +6 0 +4 0 +5 0 +3 0 +4 0 +4 0 +5 0 +4 0 +5 0 +5 0 +9 0 +8 0 +5 0 +1 0 +3 0 +10 0 +3 0 +6 0 +1 0 +5 0 +4 0 +5 0 +5 0 +3 0 +1 0 +4 0 +4 0 +4 0 +6 0 +4 0 +4 0 +4 0 +1 0 +3 0 +8 0 +1 0 +5 0 +2 0 +1 0 +5 0 +5 0 +3 0 +6 0 +4 0 +1 0 +1 0 +3 0 +4 0 +1 0 +4 0 +10 0 +7 0 +3 0 +3 0 +4 0 +4 0 +6 0 +4 0 +7 0 +4 0 +1 0 +3 0 +2 0 +1 0 +5 0 +5 0 +4 0 +6 0 +5 0 +3 0 +5 0 +4 0 +2 0 +5 0 +6 0 +2 0 +3 0 +7 0 +3 0 +1 0 +3 0 +4 0 +3 0 +4 0 +5 0 +5 0 +2 0 +5 0 +5 0 +5 0 +1 0 +3 0 +4 0 +5 0 +3 0 +4 0 +8 0 +10 0 +8 0 +7 0 +3 0 +1 0 +10 0 +5 0 +5 0 +1 0 +1 0 +1 0 +5 0 +5 0 +6 0 +3 0 +5 0 +1 0 +8 0 +5 0 +9 0 +5 0 +4 0 +2 0 +10 0 +5 0 +4 0 +5 0 +4 0 +5 0 +3 0 +5 0 +3 0 +1 0 +4 0 +5 0 +5 0 +10 0 +4 0 +1 0 +5 0 +5 0 +10 0 +5 0 +8 0 +2 0 +2 0 +4 0 +3 0 +1 0 +4 0 +5 0 +3 0 +6 0 +7 0 +1 0 +5 0 +3 0 +4 0 +2 0 +2 0 +4 0 +6 0 +5 0 +1 0 +8 0 +3 0 +3 0 +10 0 +4 0 +4 0 +5 0 +4 0 +3 0 +3 0 +1 0 +2 0 +3 0 +1 0 +1 0 +5 0 +3 0 +3 0 +1 0 +5 0 +4 0 +3 0 +3 0 +5 0 +5 0 +7 0 +1 0 +1 0 +4 0 +1 0 +1 0 +3 0 +1 0 +5 0 +3 0 +5 0 +5 0 +3 0 +3 0 +2 0 +5 0 +1 0 +4 0 +1 0 +5 0 +1 0 +2 0 +10 0 +5 0 +5 0 +1 0 +1 0 +1 0 +1 0 +3 0 +4 0 +1 0 +1 0 +5 0 +3 0 +3 0 +3 0 +2 0 +5 0 +4 0 +4 0 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipePercentileThreshold-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipePercentileThreshold-Schema.txt new file mode 100644 index 0000000000..d4d263f2a4 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipePercentileThreshold-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- PercentileThresholdTransform ---- +2 columns: + Input: R4 + Output: Bool diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindow-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindow-Data.txt new file mode 100644 index 0000000000..d69300c776 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindow-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1-** +#@ } +Input +5 ? ? ? +5 ? ? ? +3 5 5 3 +6 5 3 6 +4 3 6 4 +8 6 4 8 +1 4 8 1 +2 8 1 2 +2 1 2 2 +4 2 2 4 +1 2 4 1 +2 4 1 2 +5 1 2 5 +1 2 5 1 +8 5 1 8 +7 1 8 7 +4 8 7 4 +4 7 4 4 +10 4 4 10 +6 4 10 6 +7 10 6 7 +10 6 7 10 +3 7 10 3 +8 10 3 8 +1 3 8 1 +5 8 1 5 +3 1 5 3 +5 5 3 5 +2 3 5 2 +1 5 2 1 +3 2 1 3 +2 1 3 2 +10 3 2 10 +2 2 10 2 +3 10 2 3 +2 2 3 2 +10 3 2 10 +6 2 10 6 +5 10 6 5 +2 6 5 2 +6 5 2 6 +10 2 6 10 +6 6 10 6 +5 10 6 5 +10 6 5 10 +1 5 10 1 +3 10 1 3 +1 1 3 1 +4 3 1 4 +7 1 4 7 +9 4 7 9 +5 7 9 5 +10 9 5 10 +5 5 10 5 +10 10 5 10 +10 5 10 10 +8 10 10 8 +8 10 8 8 +5 8 8 5 +9 8 5 9 +5 5 9 5 +1 9 5 1 +9 5 1 9 +6 1 9 6 +1 9 6 1 +10 6 1 10 +4 1 10 4 +5 10 4 5 +8 4 5 8 +1 5 8 1 +5 8 1 5 +6 1 5 6 +1 5 6 1 +9 6 1 9 +10 1 9 10 +1 9 10 1 +1 10 1 1 +5 1 1 5 +3 1 5 3 +2 5 3 2 +2 3 2 2 +4 2 2 4 +5 2 4 5 +3 4 5 3 +3 5 3 3 +5 3 3 5 +3 3 5 3 +3 5 3 3 +4 3 3 4 +2 3 4 2 +1 4 2 1 +3 2 1 3 +4 1 3 4 +1 3 4 1 +2 4 1 2 +1 1 2 1 +2 2 1 2 +5 1 2 5 +9 2 5 9 +7 5 9 7 +10 9 7 10 +2 7 10 2 +4 10 2 4 +8 2 4 8 +10 4 8 10 +7 8 10 7 +10 10 7 10 +1 7 10 1 +1 10 1 1 +6 1 1 6 +1 1 6 1 +8 6 1 8 +10 1 8 10 +10 8 10 10 +3 10 10 3 +1 10 3 1 +8 3 1 8 +4 1 8 4 +1 8 4 1 +3 4 1 3 +1 1 3 1 +4 3 1 4 +10 1 4 10 +5 4 10 5 +5 10 5 5 +1 5 5 1 +7 5 1 7 +3 1 7 3 +8 7 3 8 +1 3 8 1 +5 8 1 5 +2 1 5 2 +5 5 2 5 +3 2 5 3 +3 5 3 3 +5 3 3 5 +4 3 5 4 +3 5 4 3 +4 4 3 4 +1 3 4 1 +3 4 1 3 +2 1 3 2 +9 3 2 9 +1 2 9 1 +2 9 1 2 +1 1 2 1 +3 2 1 3 +1 1 3 1 +3 3 1 3 +8 1 3 8 +1 3 8 1 +7 8 1 7 +10 1 7 10 +4 7 10 4 +1 10 4 1 +5 4 1 5 +1 1 5 1 +2 5 1 2 +1 1 2 1 +9 2 1 9 +10 1 9 10 +4 9 10 4 +3 10 4 3 +1 4 3 1 +5 3 1 5 +4 1 5 4 +5 5 4 5 +10 4 5 10 +3 5 10 3 +1 10 3 1 +3 3 1 3 +1 1 3 1 +1 3 1 1 +6 1 1 6 +8 1 6 8 +5 6 8 5 +2 8 5 2 +5 5 2 5 +4 2 5 4 +5 5 4 5 +1 4 5 1 +1 5 1 1 +6 1 1 6 +5 1 6 5 +8 6 5 8 +2 5 8 2 +1 8 2 1 +10 2 1 10 +5 1 10 5 +1 10 5 1 +10 5 1 10 +7 1 10 7 +5 10 7 5 +1 7 5 1 +3 5 1 3 +4 1 3 4 +8 3 4 8 +5 4 8 5 +1 8 5 1 +3 5 1 3 +9 1 3 9 +10 3 9 10 +1 9 10 1 +5 10 1 5 +1 1 5 1 +5 5 1 5 +10 1 5 10 +1 5 10 1 +1 10 1 1 +5 1 1 5 +8 1 5 8 +8 5 8 8 +1 8 8 1 +10 8 1 10 +10 1 10 10 +8 10 10 8 +1 10 8 1 +1 8 1 1 +6 1 1 6 +6 1 6 6 +1 6 6 1 +10 6 1 10 +4 1 10 4 +7 10 4 7 +10 4 7 10 +1 7 10 1 +10 10 1 10 +8 1 10 8 +1 10 8 1 +10 8 1 10 +7 1 10 7 +6 10 7 6 +8 7 6 8 +10 6 8 10 +3 8 10 3 +3 10 3 3 +10 3 3 10 +9 3 10 9 +8 10 9 8 +10 9 8 10 +5 8 10 5 +3 10 5 3 +2 5 3 2 +1 3 2 1 +1 2 1 1 +5 1 1 5 +8 1 5 8 +8 5 8 8 +4 8 8 4 +3 8 4 3 +1 4 3 1 +10 3 1 10 +6 1 10 6 +6 10 6 6 +9 6 6 9 +5 6 9 5 +3 9 5 3 +3 5 3 3 +3 3 3 3 +5 3 3 5 +10 3 5 10 +5 5 10 5 +8 10 5 8 +10 5 8 10 +7 8 10 7 +5 10 7 5 +10 7 5 10 +3 5 10 3 +10 10 3 10 +1 3 10 1 +8 10 1 8 +5 1 8 5 +3 8 5 3 +7 5 3 7 +3 3 7 3 +3 7 3 3 +3 3 3 3 +1 3 3 1 +1 3 1 1 +10 1 1 10 +3 1 10 3 +2 10 3 2 +1 3 2 1 +10 2 1 10 +7 1 10 7 +8 10 7 8 +10 7 8 10 +3 8 10 3 +6 10 3 6 +5 3 6 5 +1 6 5 1 +1 5 1 1 +8 1 1 8 +10 1 8 10 +1 8 10 1 +5 10 1 5 +5 1 5 5 +5 5 5 5 +8 5 5 8 +9 5 8 9 +8 8 9 8 +1 9 8 1 +10 8 1 10 +1 1 10 1 +8 10 1 8 +10 1 8 10 +1 8 10 1 +1 10 1 1 +7 1 1 7 +3 1 7 3 +2 7 3 2 +1 3 2 1 +8 2 1 8 +1 1 8 1 +1 8 1 1 +4 1 1 4 +5 1 4 5 +6 4 5 6 +1 5 6 1 +4 6 1 4 +7 1 4 7 +3 4 7 3 +3 7 3 3 +5 3 3 5 +1 3 5 1 +3 5 1 3 +10 1 3 10 +1 3 10 1 +8 10 1 8 +10 1 8 10 +10 8 10 10 +5 10 10 5 +5 10 5 5 +5 5 5 5 +8 5 5 8 +1 5 8 1 +6 8 1 6 +1 1 6 1 +1 6 1 1 +8 1 1 8 +10 1 8 10 +1 8 10 1 +2 10 1 2 +1 1 2 1 +7 2 1 7 +1 1 7 1 +5 7 1 5 +1 1 5 1 +3 5 1 3 +4 1 3 4 +5 3 4 5 +2 4 5 2 +3 5 2 3 +2 2 3 2 +1 3 2 1 +4 2 1 4 +5 1 4 5 +8 4 5 8 +8 5 8 8 +10 8 8 10 +6 8 10 6 +3 10 6 3 +3 6 3 3 +4 3 3 4 +2 3 4 2 +2 4 2 2 +6 2 2 6 +5 2 6 5 +1 6 5 1 +1 5 1 1 +4 1 1 4 +1 1 4 1 +4 4 1 4 +5 1 4 5 +3 4 5 3 +1 5 3 1 +1 3 1 1 +1 1 1 1 +3 1 1 3 +5 1 3 5 +1 3 5 1 +10 5 1 10 +3 1 10 3 +2 10 3 2 +2 3 2 2 +3 2 2 3 +7 2 3 7 +5 3 7 5 +2 7 5 2 +5 5 2 5 +1 2 5 1 +10 5 1 10 +3 1 10 3 +1 10 3 1 +1 3 1 1 +3 1 1 3 +3 1 3 3 +4 3 3 4 +3 3 4 3 +1 4 3 1 +3 3 1 3 +3 1 3 3 +5 3 3 5 +3 3 5 3 +1 5 3 1 +1 3 1 1 +4 1 1 4 +1 1 4 1 +2 4 1 2 +3 1 2 3 +1 2 3 1 +1 3 1 1 +10 1 1 10 +5 1 10 5 +8 10 5 8 +3 5 8 3 +8 8 3 8 +1 3 8 1 +5 8 1 5 +2 1 5 2 +3 5 2 3 +10 2 3 10 +4 3 10 4 +5 10 4 5 +3 4 5 3 +9 5 3 9 +5 3 9 5 +8 9 5 8 +1 5 8 1 +2 8 1 2 +1 1 2 1 +5 2 1 5 +5 1 5 5 +3 5 5 3 +6 5 3 6 +10 3 6 10 +10 6 10 10 +4 10 10 4 +4 10 4 4 +5 4 4 5 +10 4 5 10 +5 5 10 5 +1 10 5 1 +1 5 1 1 +5 1 1 5 +2 1 5 2 +1 5 2 1 +5 2 1 5 +1 1 5 1 +5 5 1 5 +4 1 5 4 +5 5 4 5 +3 4 5 3 +4 5 3 4 +2 3 4 2 +10 4 2 10 +10 2 10 10 +8 10 10 8 +5 10 8 5 +5 8 5 5 +5 5 5 5 +3 5 5 3 +6 5 3 6 +4 3 6 4 +4 6 4 4 +10 4 4 10 +10 4 10 10 +6 10 10 6 +4 10 6 4 +1 6 4 1 +3 4 1 3 +6 1 3 6 +6 3 6 6 +4 6 6 4 +5 6 4 5 +3 4 5 3 +4 5 3 4 +4 3 4 4 +5 4 4 5 +4 4 5 4 +5 5 4 5 +5 4 5 5 +9 5 5 9 +8 5 9 8 +5 9 8 5 +1 8 5 1 +3 5 1 3 +10 1 3 10 +3 3 10 3 +6 10 3 6 +1 3 6 1 +5 6 1 5 +4 1 5 4 +5 5 4 5 +5 4 5 5 +3 5 5 3 +1 5 3 1 +4 3 1 4 +4 1 4 4 +4 4 4 4 +6 4 4 6 +4 4 6 4 +4 6 4 4 +4 4 4 4 +1 4 4 1 +3 4 1 3 +8 1 3 8 +1 3 8 1 +5 8 1 5 +2 1 5 2 +1 5 2 1 +5 2 1 5 +5 1 5 5 +3 5 5 3 +6 5 3 6 +4 3 6 4 +1 6 4 1 +1 4 1 1 +3 1 1 3 +4 1 3 4 +1 3 4 1 +4 4 1 4 +10 1 4 10 +7 4 10 7 +3 10 7 3 +3 7 3 3 +4 3 3 4 +4 3 4 4 +6 4 4 6 +4 4 6 4 +7 6 4 7 +4 4 7 4 +1 7 4 1 +3 4 1 3 +2 1 3 2 +1 3 2 1 +5 2 1 5 +5 1 5 5 +4 5 5 4 +6 5 4 6 +5 4 6 5 +3 6 5 3 +5 5 3 5 +4 3 5 4 +2 5 4 2 +5 4 2 5 +6 2 5 6 +2 5 6 2 +3 6 2 3 +7 2 3 7 +3 3 7 3 +1 7 3 1 +3 3 1 3 +4 1 3 4 +3 3 4 3 +4 4 3 4 +5 3 4 5 +5 4 5 5 +2 5 5 2 +5 5 2 5 +5 2 5 5 +5 5 5 5 +1 5 5 1 +3 5 1 3 +4 1 3 4 +5 3 4 5 +3 4 5 3 +4 5 3 4 +8 3 4 8 +10 4 8 10 +8 8 10 8 +7 10 8 7 +3 8 7 3 +1 7 3 1 +10 3 1 10 +5 1 10 5 +5 10 5 5 +1 5 5 1 +1 5 1 1 +1 1 1 1 +5 1 1 5 +5 1 5 5 +6 5 5 6 +3 5 6 3 +5 6 3 5 +1 3 5 1 +8 5 1 8 +5 1 8 5 +9 8 5 9 +5 5 9 5 +4 9 5 4 +2 5 4 2 +10 4 2 10 +5 2 10 5 +4 10 5 4 +5 5 4 5 +4 4 5 4 +5 5 4 5 +3 4 5 3 +5 5 3 5 +3 3 5 3 +1 5 3 1 +4 3 1 4 +5 1 4 5 +5 4 5 5 +10 5 5 10 +4 5 10 4 +1 10 4 1 +5 4 1 5 +5 1 5 5 +10 5 5 10 +5 5 10 5 +8 10 5 8 +2 5 8 2 +2 8 2 2 +4 2 2 4 +3 2 4 3 +1 4 3 1 +4 3 1 4 +5 1 4 5 +3 4 5 3 +6 5 3 6 +7 3 6 7 +1 6 7 1 +5 7 1 5 +3 1 5 3 +4 5 3 4 +2 3 4 2 +2 4 2 2 +4 2 2 4 +6 2 4 6 +5 4 6 5 +1 6 5 1 +8 5 1 8 +3 1 8 3 +3 8 3 3 +10 3 3 10 +4 3 10 4 +4 10 4 4 +5 4 4 5 +4 4 5 4 +3 5 4 3 +3 4 3 3 +1 3 3 1 +2 3 1 2 +3 1 2 3 +1 2 3 1 +1 3 1 1 +5 1 1 5 +3 1 5 3 +3 5 3 3 +1 3 3 1 +5 3 1 5 +4 1 5 4 +3 5 4 3 +3 4 3 3 +5 3 3 5 +5 3 5 5 +7 5 5 7 +1 5 7 1 +1 7 1 1 +4 1 1 4 +1 1 4 1 +1 4 1 1 +3 1 1 3 +1 1 3 1 +5 3 1 5 +3 1 5 3 +5 5 3 5 +5 3 5 5 +3 5 5 3 +3 5 3 3 +2 3 3 2 +5 3 2 5 +1 2 5 1 +4 5 1 4 +1 1 4 1 +5 4 1 5 +1 1 5 1 +2 5 1 2 +10 1 2 10 +5 2 10 5 +5 10 5 5 +1 5 5 1 +1 5 1 1 +1 1 1 1 +1 1 1 1 +3 1 1 3 +4 1 3 4 +1 3 4 1 +1 4 1 1 +5 1 1 5 +3 1 5 3 +3 5 3 3 +3 3 3 3 +2 3 3 2 +5 3 2 5 +4 2 5 4 +4 5 4 4 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindow-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindow-Schema.txt new file mode 100644 index 0000000000..1cdb547e6d --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindow-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- SlidingWindowTransform ---- +2 columns: + Input: R4 + Output: Vec diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L1-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L1-Data.txt new file mode 100644 index 0000000000..1c1508d4dd --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L1-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1-** +#@ } +Input +5 ? +5 5 +3 5 +6 3 +4 6 +8 4 +1 8 +2 1 +2 2 +4 2 +1 4 +2 1 +5 2 +1 5 +8 1 +7 8 +4 7 +4 4 +10 4 +6 10 +7 6 +10 7 +3 10 +8 3 +1 8 +5 1 +3 5 +5 3 +2 5 +1 2 +3 1 +2 3 +10 2 +2 10 +3 2 +2 3 +10 2 +6 10 +5 6 +2 5 +6 2 +10 6 +6 10 +5 6 +10 5 +1 10 +3 1 +1 3 +4 1 +7 4 +9 7 +5 9 +10 5 +5 10 +10 5 +10 10 +8 10 +8 8 +5 8 +9 5 +5 9 +1 5 +9 1 +6 9 +1 6 +10 1 +4 10 +5 4 +8 5 +1 8 +5 1 +6 5 +1 6 +9 1 +10 9 +1 10 +1 1 +5 1 +3 5 +2 3 +2 2 +4 2 +5 4 +3 5 +3 3 +5 3 +3 5 +3 3 +4 3 +2 4 +1 2 +3 1 +4 3 +1 4 +2 1 +1 2 +2 1 +5 2 +9 5 +7 9 +10 7 +2 10 +4 2 +8 4 +10 8 +7 10 +10 7 +1 10 +1 1 +6 1 +1 6 +8 1 +10 8 +10 10 +3 10 +1 3 +8 1 +4 8 +1 4 +3 1 +1 3 +4 1 +10 4 +5 10 +5 5 +1 5 +7 1 +3 7 +8 3 +1 8 +5 1 +2 5 +5 2 +3 5 +3 3 +5 3 +4 5 +3 4 +4 3 +1 4 +3 1 +2 3 +9 2 +1 9 +2 1 +1 2 +3 1 +1 3 +3 1 +8 3 +1 8 +7 1 +10 7 +4 10 +1 4 +5 1 +1 5 +2 1 +1 2 +9 1 +10 9 +4 10 +3 4 +1 3 +5 1 +4 5 +5 4 +10 5 +3 10 +1 3 +3 1 +1 3 +1 1 +6 1 +8 6 +5 8 +2 5 +5 2 +4 5 +5 4 +1 5 +1 1 +6 1 +5 6 +8 5 +2 8 +1 2 +10 1 +5 10 +1 5 +10 1 +7 10 +5 7 +1 5 +3 1 +4 3 +8 4 +5 8 +1 5 +3 1 +9 3 +10 9 +1 10 +5 1 +1 5 +5 1 +10 5 +1 10 +1 1 +5 1 +8 5 +8 8 +1 8 +10 1 +10 10 +8 10 +1 8 +1 1 +6 1 +6 6 +1 6 +10 1 +4 10 +7 4 +10 7 +1 10 +10 1 +8 10 +1 8 +10 1 +7 10 +6 7 +8 6 +10 8 +3 10 +3 3 +10 3 +9 10 +8 9 +10 8 +5 10 +3 5 +2 3 +1 2 +1 1 +5 1 +8 5 +8 8 +4 8 +3 4 +1 3 +10 1 +6 10 +6 6 +9 6 +5 9 +3 5 +3 3 +3 3 +5 3 +10 5 +5 10 +8 5 +10 8 +7 10 +5 7 +10 5 +3 10 +10 3 +1 10 +8 1 +5 8 +3 5 +7 3 +3 7 +3 3 +3 3 +1 3 +1 1 +10 1 +3 10 +2 3 +1 2 +10 1 +7 10 +8 7 +10 8 +3 10 +6 3 +5 6 +1 5 +1 1 +8 1 +10 8 +1 10 +5 1 +5 5 +5 5 +8 5 +9 8 +8 9 +1 8 +10 1 +1 10 +8 1 +10 8 +1 10 +1 1 +7 1 +3 7 +2 3 +1 2 +8 1 +1 8 +1 1 +4 1 +5 4 +6 5 +1 6 +4 1 +7 4 +3 7 +3 3 +5 3 +1 5 +3 1 +10 3 +1 10 +8 1 +10 8 +10 10 +5 10 +5 5 +5 5 +8 5 +1 8 +6 1 +1 6 +1 1 +8 1 +10 8 +1 10 +2 1 +1 2 +7 1 +1 7 +5 1 +1 5 +3 1 +4 3 +5 4 +2 5 +3 2 +2 3 +1 2 +4 1 +5 4 +8 5 +8 8 +10 8 +6 10 +3 6 +3 3 +4 3 +2 4 +2 2 +6 2 +5 6 +1 5 +1 1 +4 1 +1 4 +4 1 +5 4 +3 5 +1 3 +1 1 +1 1 +3 1 +5 3 +1 5 +10 1 +3 10 +2 3 +2 2 +3 2 +7 3 +5 7 +2 5 +5 2 +1 5 +10 1 +3 10 +1 3 +1 1 +3 1 +3 3 +4 3 +3 4 +1 3 +3 1 +3 3 +5 3 +3 5 +1 3 +1 1 +4 1 +1 4 +2 1 +3 2 +1 3 +1 1 +10 1 +5 10 +8 5 +3 8 +8 3 +1 8 +5 1 +2 5 +3 2 +10 3 +4 10 +5 4 +3 5 +9 3 +5 9 +8 5 +1 8 +2 1 +1 2 +5 1 +5 5 +3 5 +6 3 +10 6 +10 10 +4 10 +4 4 +5 4 +10 5 +5 10 +1 5 +1 1 +5 1 +2 5 +1 2 +5 1 +1 5 +5 1 +4 5 +5 4 +3 5 +4 3 +2 4 +10 2 +10 10 +8 10 +5 8 +5 5 +5 5 +3 5 +6 3 +4 6 +4 4 +10 4 +10 10 +6 10 +4 6 +1 4 +3 1 +6 3 +6 6 +4 6 +5 4 +3 5 +4 3 +4 4 +5 4 +4 5 +5 4 +5 5 +9 5 +8 9 +5 8 +1 5 +3 1 +10 3 +3 10 +6 3 +1 6 +5 1 +4 5 +5 4 +5 5 +3 5 +1 3 +4 1 +4 4 +4 4 +6 4 +4 6 +4 4 +4 4 +1 4 +3 1 +8 3 +1 8 +5 1 +2 5 +1 2 +5 1 +5 5 +3 5 +6 3 +4 6 +1 4 +1 1 +3 1 +4 3 +1 4 +4 1 +10 4 +7 10 +3 7 +3 3 +4 3 +4 4 +6 4 +4 6 +7 4 +4 7 +1 4 +3 1 +2 3 +1 2 +5 1 +5 5 +4 5 +6 4 +5 6 +3 5 +5 3 +4 5 +2 4 +5 2 +6 5 +2 6 +3 2 +7 3 +3 7 +1 3 +3 1 +4 3 +3 4 +4 3 +5 4 +5 5 +2 5 +5 2 +5 5 +5 5 +1 5 +3 1 +4 3 +5 4 +3 5 +4 3 +8 4 +10 8 +8 10 +7 8 +3 7 +1 3 +10 1 +5 10 +5 5 +1 5 +1 1 +1 1 +5 1 +5 5 +6 5 +3 6 +5 3 +1 5 +8 1 +5 8 +9 5 +5 9 +4 5 +2 4 +10 2 +5 10 +4 5 +5 4 +4 5 +5 4 +3 5 +5 3 +3 5 +1 3 +4 1 +5 4 +5 5 +10 5 +4 10 +1 4 +5 1 +5 5 +10 5 +5 10 +8 5 +2 8 +2 2 +4 2 +3 4 +1 3 +4 1 +5 4 +3 5 +6 3 +7 6 +1 7 +5 1 +3 5 +4 3 +2 4 +2 2 +4 2 +6 4 +5 6 +1 5 +8 1 +3 8 +3 3 +10 3 +4 10 +4 4 +5 4 +4 5 +3 4 +3 3 +1 3 +2 1 +3 2 +1 3 +1 1 +5 1 +3 5 +3 3 +1 3 +5 1 +4 5 +3 4 +3 3 +5 3 +5 5 +7 5 +1 7 +1 1 +4 1 +1 4 +1 1 +3 1 +1 3 +5 1 +3 5 +5 3 +5 5 +3 5 +3 3 +2 3 +5 2 +1 5 +4 1 +1 4 +5 1 +1 5 +2 1 +10 2 +5 10 +5 5 +1 5 +1 1 +1 1 +1 1 +3 1 +4 3 +1 4 +1 1 +5 1 +3 5 +3 3 +3 3 +2 3 +5 2 +4 5 +4 4 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L1-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L1-Schema.txt new file mode 100644 index 0000000000..1cdb547e6d --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L1-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- SlidingWindowTransform ---- +2 columns: + Input: R4 + Output: Vec diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L2-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L2-Data.txt new file mode 100644 index 0000000000..fb3551cfb4 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L2-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1-** +#@ } +Input +5 ? +5 ? +3 5 +6 5 +4 3 +8 6 +1 4 +2 8 +2 1 +4 2 +1 2 +2 4 +5 1 +1 2 +8 5 +7 1 +4 8 +4 7 +10 4 +6 4 +7 10 +10 6 +3 7 +8 10 +1 3 +5 8 +3 1 +5 5 +2 3 +1 5 +3 2 +2 1 +10 3 +2 2 +3 10 +2 2 +10 3 +6 2 +5 10 +2 6 +6 5 +10 2 +6 6 +5 10 +10 6 +1 5 +3 10 +1 1 +4 3 +7 1 +9 4 +5 7 +10 9 +5 5 +10 10 +10 5 +8 10 +8 10 +5 8 +9 8 +5 5 +1 9 +9 5 +6 1 +1 9 +10 6 +4 1 +5 10 +8 4 +1 5 +5 8 +6 1 +1 5 +9 6 +10 1 +1 9 +1 10 +5 1 +3 1 +2 5 +2 3 +4 2 +5 2 +3 4 +3 5 +5 3 +3 3 +3 5 +4 3 +2 3 +1 4 +3 2 +4 1 +1 3 +2 4 +1 1 +2 2 +5 1 +9 2 +7 5 +10 9 +2 7 +4 10 +8 2 +10 4 +7 8 +10 10 +1 7 +1 10 +6 1 +1 1 +8 6 +10 1 +10 8 +3 10 +1 10 +8 3 +4 1 +1 8 +3 4 +1 1 +4 3 +10 1 +5 4 +5 10 +1 5 +7 5 +3 1 +8 7 +1 3 +5 8 +2 1 +5 5 +3 2 +3 5 +5 3 +4 3 +3 5 +4 4 +1 3 +3 4 +2 1 +9 3 +1 2 +2 9 +1 1 +3 2 +1 1 +3 3 +8 1 +1 3 +7 8 +10 1 +4 7 +1 10 +5 4 +1 1 +2 5 +1 1 +9 2 +10 1 +4 9 +3 10 +1 4 +5 3 +4 1 +5 5 +10 4 +3 5 +1 10 +3 3 +1 1 +1 3 +6 1 +8 1 +5 6 +2 8 +5 5 +4 2 +5 5 +1 4 +1 5 +6 1 +5 1 +8 6 +2 5 +1 8 +10 2 +5 1 +1 10 +10 5 +7 1 +5 10 +1 7 +3 5 +4 1 +8 3 +5 4 +1 8 +3 5 +9 1 +10 3 +1 9 +5 10 +1 1 +5 5 +10 1 +1 5 +1 10 +5 1 +8 1 +8 5 +1 8 +10 8 +10 1 +8 10 +1 10 +1 8 +6 1 +6 1 +1 6 +10 6 +4 1 +7 10 +10 4 +1 7 +10 10 +8 1 +1 10 +10 8 +7 1 +6 10 +8 7 +10 6 +3 8 +3 10 +10 3 +9 3 +8 10 +10 9 +5 8 +3 10 +2 5 +1 3 +1 2 +5 1 +8 1 +8 5 +4 8 +3 8 +1 4 +10 3 +6 1 +6 10 +9 6 +5 6 +3 9 +3 5 +3 3 +5 3 +10 3 +5 5 +8 10 +10 5 +7 8 +5 10 +10 7 +3 5 +10 10 +1 3 +8 10 +5 1 +3 8 +7 5 +3 3 +3 7 +3 3 +1 3 +1 3 +10 1 +3 1 +2 10 +1 3 +10 2 +7 1 +8 10 +10 7 +3 8 +6 10 +5 3 +1 6 +1 5 +8 1 +10 1 +1 8 +5 10 +5 1 +5 5 +8 5 +9 5 +8 8 +1 9 +10 8 +1 1 +8 10 +10 1 +1 8 +1 10 +7 1 +3 1 +2 7 +1 3 +8 2 +1 1 +1 8 +4 1 +5 1 +6 4 +1 5 +4 6 +7 1 +3 4 +3 7 +5 3 +1 3 +3 5 +10 1 +1 3 +8 10 +10 1 +10 8 +5 10 +5 10 +5 5 +8 5 +1 5 +6 8 +1 1 +1 6 +8 1 +10 1 +1 8 +2 10 +1 1 +7 2 +1 1 +5 7 +1 1 +3 5 +4 1 +5 3 +2 4 +3 5 +2 2 +1 3 +4 2 +5 1 +8 4 +8 5 +10 8 +6 8 +3 10 +3 6 +4 3 +2 3 +2 4 +6 2 +5 2 +1 6 +1 5 +4 1 +1 1 +4 4 +5 1 +3 4 +1 5 +1 3 +1 1 +3 1 +5 1 +1 3 +10 5 +3 1 +2 10 +2 3 +3 2 +7 2 +5 3 +2 7 +5 5 +1 2 +10 5 +3 1 +1 10 +1 3 +3 1 +3 1 +4 3 +3 3 +1 4 +3 3 +3 1 +5 3 +3 3 +1 5 +1 3 +4 1 +1 1 +2 4 +3 1 +1 2 +1 3 +10 1 +5 1 +8 10 +3 5 +8 8 +1 3 +5 8 +2 1 +3 5 +10 2 +4 3 +5 10 +3 4 +9 5 +5 3 +8 9 +1 5 +2 8 +1 1 +5 2 +5 1 +3 5 +6 5 +10 3 +10 6 +4 10 +4 10 +5 4 +10 4 +5 5 +1 10 +1 5 +5 1 +2 1 +1 5 +5 2 +1 1 +5 5 +4 1 +5 5 +3 4 +4 5 +2 3 +10 4 +10 2 +8 10 +5 10 +5 8 +5 5 +3 5 +6 5 +4 3 +4 6 +10 4 +10 4 +6 10 +4 10 +1 6 +3 4 +6 1 +6 3 +4 6 +5 6 +3 4 +4 5 +4 3 +5 4 +4 4 +5 5 +5 4 +9 5 +8 5 +5 9 +1 8 +3 5 +10 1 +3 3 +6 10 +1 3 +5 6 +4 1 +5 5 +5 4 +3 5 +1 5 +4 3 +4 1 +4 4 +6 4 +4 4 +4 6 +4 4 +1 4 +3 4 +8 1 +1 3 +5 8 +2 1 +1 5 +5 2 +5 1 +3 5 +6 5 +4 3 +1 6 +1 4 +3 1 +4 1 +1 3 +4 4 +10 1 +7 4 +3 10 +3 7 +4 3 +4 3 +6 4 +4 4 +7 6 +4 4 +1 7 +3 4 +2 1 +1 3 +5 2 +5 1 +4 5 +6 5 +5 4 +3 6 +5 5 +4 3 +2 5 +5 4 +6 2 +2 5 +3 6 +7 2 +3 3 +1 7 +3 3 +4 1 +3 3 +4 4 +5 3 +5 4 +2 5 +5 5 +5 2 +5 5 +1 5 +3 5 +4 1 +5 3 +3 4 +4 5 +8 3 +10 4 +8 8 +7 10 +3 8 +1 7 +10 3 +5 1 +5 10 +1 5 +1 5 +1 1 +5 1 +5 1 +6 5 +3 5 +5 6 +1 3 +8 5 +5 1 +9 8 +5 5 +4 9 +2 5 +10 4 +5 2 +4 10 +5 5 +4 4 +5 5 +3 4 +5 5 +3 3 +1 5 +4 3 +5 1 +5 4 +10 5 +4 5 +1 10 +5 4 +5 1 +10 5 +5 5 +8 10 +2 5 +2 8 +4 2 +3 2 +1 4 +4 3 +5 1 +3 4 +6 5 +7 3 +1 6 +5 7 +3 1 +4 5 +2 3 +2 4 +4 2 +6 2 +5 4 +1 6 +8 5 +3 1 +3 8 +10 3 +4 3 +4 10 +5 4 +4 4 +3 5 +3 4 +1 3 +2 3 +3 1 +1 2 +1 3 +5 1 +3 1 +3 5 +1 3 +5 3 +4 1 +3 5 +3 4 +5 3 +5 3 +7 5 +1 5 +1 7 +4 1 +1 1 +1 4 +3 1 +1 1 +5 3 +3 1 +5 5 +5 3 +3 5 +3 5 +2 3 +5 3 +1 2 +4 5 +1 1 +5 4 +1 1 +2 5 +10 1 +5 2 +5 10 +1 5 +1 5 +1 1 +1 1 +3 1 +4 1 +1 3 +1 4 +5 1 +3 1 +3 5 +3 3 +2 3 +5 3 +4 2 +4 5 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L2-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L2-Schema.txt new file mode 100644 index 0000000000..1cdb547e6d --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW1L2-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- SlidingWindowTransform ---- +2 columns: + Input: R4 + Output: Vec diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW2L1-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW2L1-Data.txt new file mode 100644 index 0000000000..cecc641039 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW2L1-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1-** +#@ } +Input +5 ? ? +5 ? ? +3 5 5 +6 5 3 +4 3 6 +8 6 4 +1 4 8 +2 8 1 +2 1 2 +4 2 2 +1 2 4 +2 4 1 +5 1 2 +1 2 5 +8 5 1 +7 1 8 +4 8 7 +4 7 4 +10 4 4 +6 4 10 +7 10 6 +10 6 7 +3 7 10 +8 10 3 +1 3 8 +5 8 1 +3 1 5 +5 5 3 +2 3 5 +1 5 2 +3 2 1 +2 1 3 +10 3 2 +2 2 10 +3 10 2 +2 2 3 +10 3 2 +6 2 10 +5 10 6 +2 6 5 +6 5 2 +10 2 6 +6 6 10 +5 10 6 +10 6 5 +1 5 10 +3 10 1 +1 1 3 +4 3 1 +7 1 4 +9 4 7 +5 7 9 +10 9 5 +5 5 10 +10 10 5 +10 5 10 +8 10 10 +8 10 8 +5 8 8 +9 8 5 +5 5 9 +1 9 5 +9 5 1 +6 1 9 +1 9 6 +10 6 1 +4 1 10 +5 10 4 +8 4 5 +1 5 8 +5 8 1 +6 1 5 +1 5 6 +9 6 1 +10 1 9 +1 9 10 +1 10 1 +5 1 1 +3 1 5 +2 5 3 +2 3 2 +4 2 2 +5 2 4 +3 4 5 +3 5 3 +5 3 3 +3 3 5 +3 5 3 +4 3 3 +2 3 4 +1 4 2 +3 2 1 +4 1 3 +1 3 4 +2 4 1 +1 1 2 +2 2 1 +5 1 2 +9 2 5 +7 5 9 +10 9 7 +2 7 10 +4 10 2 +8 2 4 +10 4 8 +7 8 10 +10 10 7 +1 7 10 +1 10 1 +6 1 1 +1 1 6 +8 6 1 +10 1 8 +10 8 10 +3 10 10 +1 10 3 +8 3 1 +4 1 8 +1 8 4 +3 4 1 +1 1 3 +4 3 1 +10 1 4 +5 4 10 +5 10 5 +1 5 5 +7 5 1 +3 1 7 +8 7 3 +1 3 8 +5 8 1 +2 1 5 +5 5 2 +3 2 5 +3 5 3 +5 3 3 +4 3 5 +3 5 4 +4 4 3 +1 3 4 +3 4 1 +2 1 3 +9 3 2 +1 2 9 +2 9 1 +1 1 2 +3 2 1 +1 1 3 +3 3 1 +8 1 3 +1 3 8 +7 8 1 +10 1 7 +4 7 10 +1 10 4 +5 4 1 +1 1 5 +2 5 1 +1 1 2 +9 2 1 +10 1 9 +4 9 10 +3 10 4 +1 4 3 +5 3 1 +4 1 5 +5 5 4 +10 4 5 +3 5 10 +1 10 3 +3 3 1 +1 1 3 +1 3 1 +6 1 1 +8 1 6 +5 6 8 +2 8 5 +5 5 2 +4 2 5 +5 5 4 +1 4 5 +1 5 1 +6 1 1 +5 1 6 +8 6 5 +2 5 8 +1 8 2 +10 2 1 +5 1 10 +1 10 5 +10 5 1 +7 1 10 +5 10 7 +1 7 5 +3 5 1 +4 1 3 +8 3 4 +5 4 8 +1 8 5 +3 5 1 +9 1 3 +10 3 9 +1 9 10 +5 10 1 +1 1 5 +5 5 1 +10 1 5 +1 5 10 +1 10 1 +5 1 1 +8 1 5 +8 5 8 +1 8 8 +10 8 1 +10 1 10 +8 10 10 +1 10 8 +1 8 1 +6 1 1 +6 1 6 +1 6 6 +10 6 1 +4 1 10 +7 10 4 +10 4 7 +1 7 10 +10 10 1 +8 1 10 +1 10 8 +10 8 1 +7 1 10 +6 10 7 +8 7 6 +10 6 8 +3 8 10 +3 10 3 +10 3 3 +9 3 10 +8 10 9 +10 9 8 +5 8 10 +3 10 5 +2 5 3 +1 3 2 +1 2 1 +5 1 1 +8 1 5 +8 5 8 +4 8 8 +3 8 4 +1 4 3 +10 3 1 +6 1 10 +6 10 6 +9 6 6 +5 6 9 +3 9 5 +3 5 3 +3 3 3 +5 3 3 +10 3 5 +5 5 10 +8 10 5 +10 5 8 +7 8 10 +5 10 7 +10 7 5 +3 5 10 +10 10 3 +1 3 10 +8 10 1 +5 1 8 +3 8 5 +7 5 3 +3 3 7 +3 7 3 +3 3 3 +1 3 3 +1 3 1 +10 1 1 +3 1 10 +2 10 3 +1 3 2 +10 2 1 +7 1 10 +8 10 7 +10 7 8 +3 8 10 +6 10 3 +5 3 6 +1 6 5 +1 5 1 +8 1 1 +10 1 8 +1 8 10 +5 10 1 +5 1 5 +5 5 5 +8 5 5 +9 5 8 +8 8 9 +1 9 8 +10 8 1 +1 1 10 +8 10 1 +10 1 8 +1 8 10 +1 10 1 +7 1 1 +3 1 7 +2 7 3 +1 3 2 +8 2 1 +1 1 8 +1 8 1 +4 1 1 +5 1 4 +6 4 5 +1 5 6 +4 6 1 +7 1 4 +3 4 7 +3 7 3 +5 3 3 +1 3 5 +3 5 1 +10 1 3 +1 3 10 +8 10 1 +10 1 8 +10 8 10 +5 10 10 +5 10 5 +5 5 5 +8 5 5 +1 5 8 +6 8 1 +1 1 6 +1 6 1 +8 1 1 +10 1 8 +1 8 10 +2 10 1 +1 1 2 +7 2 1 +1 1 7 +5 7 1 +1 1 5 +3 5 1 +4 1 3 +5 3 4 +2 4 5 +3 5 2 +2 2 3 +1 3 2 +4 2 1 +5 1 4 +8 4 5 +8 5 8 +10 8 8 +6 8 10 +3 10 6 +3 6 3 +4 3 3 +2 3 4 +2 4 2 +6 2 2 +5 2 6 +1 6 5 +1 5 1 +4 1 1 +1 1 4 +4 4 1 +5 1 4 +3 4 5 +1 5 3 +1 3 1 +1 1 1 +3 1 1 +5 1 3 +1 3 5 +10 5 1 +3 1 10 +2 10 3 +2 3 2 +3 2 2 +7 2 3 +5 3 7 +2 7 5 +5 5 2 +1 2 5 +10 5 1 +3 1 10 +1 10 3 +1 3 1 +3 1 1 +3 1 3 +4 3 3 +3 3 4 +1 4 3 +3 3 1 +3 1 3 +5 3 3 +3 3 5 +1 5 3 +1 3 1 +4 1 1 +1 1 4 +2 4 1 +3 1 2 +1 2 3 +1 3 1 +10 1 1 +5 1 10 +8 10 5 +3 5 8 +8 8 3 +1 3 8 +5 8 1 +2 1 5 +3 5 2 +10 2 3 +4 3 10 +5 10 4 +3 4 5 +9 5 3 +5 3 9 +8 9 5 +1 5 8 +2 8 1 +1 1 2 +5 2 1 +5 1 5 +3 5 5 +6 5 3 +10 3 6 +10 6 10 +4 10 10 +4 10 4 +5 4 4 +10 4 5 +5 5 10 +1 10 5 +1 5 1 +5 1 1 +2 1 5 +1 5 2 +5 2 1 +1 1 5 +5 5 1 +4 1 5 +5 5 4 +3 4 5 +4 5 3 +2 3 4 +10 4 2 +10 2 10 +8 10 10 +5 10 8 +5 8 5 +5 5 5 +3 5 5 +6 5 3 +4 3 6 +4 6 4 +10 4 4 +10 4 10 +6 10 10 +4 10 6 +1 6 4 +3 4 1 +6 1 3 +6 3 6 +4 6 6 +5 6 4 +3 4 5 +4 5 3 +4 3 4 +5 4 4 +4 4 5 +5 5 4 +5 4 5 +9 5 5 +8 5 9 +5 9 8 +1 8 5 +3 5 1 +10 1 3 +3 3 10 +6 10 3 +1 3 6 +5 6 1 +4 1 5 +5 5 4 +5 4 5 +3 5 5 +1 5 3 +4 3 1 +4 1 4 +4 4 4 +6 4 4 +4 4 6 +4 6 4 +4 4 4 +1 4 4 +3 4 1 +8 1 3 +1 3 8 +5 8 1 +2 1 5 +1 5 2 +5 2 1 +5 1 5 +3 5 5 +6 5 3 +4 3 6 +1 6 4 +1 4 1 +3 1 1 +4 1 3 +1 3 4 +4 4 1 +10 1 4 +7 4 10 +3 10 7 +3 7 3 +4 3 3 +4 3 4 +6 4 4 +4 4 6 +7 6 4 +4 4 7 +1 7 4 +3 4 1 +2 1 3 +1 3 2 +5 2 1 +5 1 5 +4 5 5 +6 5 4 +5 4 6 +3 6 5 +5 5 3 +4 3 5 +2 5 4 +5 4 2 +6 2 5 +2 5 6 +3 6 2 +7 2 3 +3 3 7 +1 7 3 +3 3 1 +4 1 3 +3 3 4 +4 4 3 +5 3 4 +5 4 5 +2 5 5 +5 5 2 +5 2 5 +5 5 5 +1 5 5 +3 5 1 +4 1 3 +5 3 4 +3 4 5 +4 5 3 +8 3 4 +10 4 8 +8 8 10 +7 10 8 +3 8 7 +1 7 3 +10 3 1 +5 1 10 +5 10 5 +1 5 5 +1 5 1 +1 1 1 +5 1 1 +5 1 5 +6 5 5 +3 5 6 +5 6 3 +1 3 5 +8 5 1 +5 1 8 +9 8 5 +5 5 9 +4 9 5 +2 5 4 +10 4 2 +5 2 10 +4 10 5 +5 5 4 +4 4 5 +5 5 4 +3 4 5 +5 5 3 +3 3 5 +1 5 3 +4 3 1 +5 1 4 +5 4 5 +10 5 5 +4 5 10 +1 10 4 +5 4 1 +5 1 5 +10 5 5 +5 5 10 +8 10 5 +2 5 8 +2 8 2 +4 2 2 +3 2 4 +1 4 3 +4 3 1 +5 1 4 +3 4 5 +6 5 3 +7 3 6 +1 6 7 +5 7 1 +3 1 5 +4 5 3 +2 3 4 +2 4 2 +4 2 2 +6 2 4 +5 4 6 +1 6 5 +8 5 1 +3 1 8 +3 8 3 +10 3 3 +4 3 10 +4 10 4 +5 4 4 +4 4 5 +3 5 4 +3 4 3 +1 3 3 +2 3 1 +3 1 2 +1 2 3 +1 3 1 +5 1 1 +3 1 5 +3 5 3 +1 3 3 +5 3 1 +4 1 5 +3 5 4 +3 4 3 +5 3 3 +5 3 5 +7 5 5 +1 5 7 +1 7 1 +4 1 1 +1 1 4 +1 4 1 +3 1 1 +1 1 3 +5 3 1 +3 1 5 +5 5 3 +5 3 5 +3 5 5 +3 5 3 +2 3 3 +5 3 2 +1 2 5 +4 5 1 +1 1 4 +5 4 1 +1 1 5 +2 5 1 +10 1 2 +5 2 10 +5 10 5 +1 5 5 +1 5 1 +1 1 1 +1 1 1 +3 1 1 +4 1 3 +1 3 4 +1 4 1 +5 1 1 +3 1 5 +3 5 3 +3 3 3 +2 3 3 +5 3 2 +4 2 5 +4 5 4 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW2L1-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW2L1-Schema.txt new file mode 100644 index 0000000000..1cdb547e6d --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSlidingWindowW2L1-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- SlidingWindowTransform ---- +2 columns: + Input: R4 + Output: Vec diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSsaSpikeNoData-Data.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSsaSpikeNoData-Data.txt new file mode 100644 index 0000000000..8007bc905a --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSsaSpikeNoData-Data.txt @@ -0,0 +1,57 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Features:R4:0 +#@ col=Anomaly:R8:1-3 +#@ } +Features Alert Raw Score P-Value Score +0 0 0 0.5 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 diff --git a/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSsaSpikeNoData-Schema.txt b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSsaSpikeNoData-Schema.txt new file mode 100644 index 0000000000..764b0f98c0 --- /dev/null +++ b/test/BaselineOutput/SingleDebug/SavePipe/SavePipeSsaSpikeNoData-Schema.txt @@ -0,0 +1,9 @@ +---- BoundLoader ---- +1 columns: + Features: R4 +---- SsaSpikeDetector ---- +2 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeExponentialAverage-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeExponentialAverage-Data.txt new file mode 100644 index 0000000000..8b849aae01 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeExponentialAverage-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1 +#@ } +Input Output +5 ? +5 5 +3 3.19999981 +6 5.72 +4 4.172 +8 7.6172 +1 1.66172016 +2 1.966172 +2 1.9966172 +4 3.79966164 +1 1.27996624 +2 1.92799664 +5 4.69279957 +1 1.3692801 +8 7.336928 +7 7.033693 +4 4.30336952 +4 4.030337 +10 9.403034 +6 6.34030342 +7 6.93403 +10 9.693403 +3 3.66934037 +8 7.566934 +1 1.65669358 +5 4.66566944 +3 3.16656685 +5 4.81665659 +2 2.2816658 +1 1.12816668 +3 2.81281662 +2 2.08128166 +10 9.208128 +2 2.720813 +3 2.97208118 +2 2.097208 +10 9.209721 +6 6.320972 +5 5.13209724 +2 2.31320977 +6 5.63132048 +10 9.563132 +6 6.356313 +5 5.13563156 +10 9.513563 +1 1.85135651 +3 2.88513541 +1 1.18851352 +4 3.71885133 +7 6.671885 +9 8.767188 +5 5.376719 +10 9.537672 +5 5.4537673 +10 9.545377 +10 9.954538 +8 8.195454 +8 8.019546 +5 5.30195475 +9 8.630195 +5 5.36301947 +1 1.43630207 +9 8.243629 +6 6.224363 +1 1.52243638 +10 9.152244 +4 4.51522446 +5 4.95152235 +8 7.69515228 +1 1.66951537 +5 4.66695166 +6 5.866695 +1 1.48666954 +9 8.248667 +10 9.824867 +1 1.88248694 +1 1.08824873 +5 4.60882473 +3 3.16088247 +2 2.11608839 +2 2.01160884 +4 3.80116081 +5 4.880116 +3 3.18801165 +3 3.018801 +5 4.80188036 +3 3.180188 +3 3.01801872 +4 3.90180182 +2 2.1901803 +1 1.11901808 +3 2.81190157 +4 3.88119 +1 1.28811908 +2 1.92881191 +1 1.0928812 +2 1.909288 +5 4.690929 +9 8.569093 +7 7.156909 +10 9.715691 +2 2.77156925 +4 3.877157 +8 7.58771563 +10 9.758772 +7 7.275877 +10 9.727588 +1 1.872759 +1 1.087276 +6 5.508727 +1 1.4508729 +8 7.345087 +10 9.73450851 +10 9.973451 +3 3.69734526 +1 1.26973462 +8 7.32697344 +4 4.33269739 +1 1.33326983 +3 2.83332682 +1 1.18333268 +4 3.71833324 +10 9.371834 +5 5.43718338 +5 5.04371834 +1 1.404372 +7 6.440437 +3 3.34404373 +8 7.53440428 +1 1.65344059 +5 4.665344 +2 2.26653457 +5 4.72665358 +3 3.17266536 +3 3.01726651 +5 4.801727 +4 4.08017254 +3 3.10801721 +4 3.91080165 +1 1.29108024 +3 2.82910776 +2 2.08291078 +9 8.30829048 +1 1.73082924 +2 1.9730829 +1 1.09730828 +3 2.80973077 +1 1.180973 +3 2.818097 +8 7.48180962 +1 1.6481812 +7 6.464818 +10 9.64648151 +4 4.564648 +1 1.35646486 +5 4.63564634 +1 1.36356473 +2 1.93635643 +1 1.09363568 +9 8.209363 +10 9.820936 +4 4.58209372 +3 3.15820932 +1 1.215821 +5 4.621582 +4 4.062158 +5 4.90621567 +10 9.490622 +3 3.64906216 +1 1.26490629 +3 2.8264904 +1 1.18264914 +1 1.01826489 +6 5.50182629 +8 7.75018263 +5 5.27501869 +2 2.327502 +5 4.73275042 +4 4.073275 +5 4.90732765 +1 1.39073288 +1 1.03907335 +6 5.503907 +5 5.05039072 +8 7.705039 +2 2.570504 +1 1.15705037 +10 9.11570549 +5 5.41157055 +1 1.4411571 +10 9.144115 +7 7.21441174 +5 5.22144127 +1 1.42214417 +3 2.84221435 +4 3.88422132 +8 7.588422 +5 5.25884247 +1 1.42588437 +3 2.84258819 +9 8.384258 +10 9.838426 +1 1.88384271 +5 4.68838453 +1 1.36883855 +5 4.63688374 +10 9.463689 +1 1.846369 +1 1.08463693 +5 4.608464 +8 7.660846 +8 7.96608448 +1 1.69660854 +10 9.169661 +10 9.916966 +8 8.191697 +1 1.71916986 +1 1.071917 +6 5.507191 +6 5.950719 +1 1.495072 +10 9.14950752 +4 4.51495075 +7 6.751495 +10 9.67515 +1 1.86751521 +10 9.186751 +8 8.118675 +1 1.71186769 +10 9.171186 +7 7.21711874 +6 6.12171173 +8 7.812171 +10 9.781218 +3 3.67812181 +3 3.067812 +10 9.306781 +9 9.030678 +8 8.103067 +10 9.810307 +5 5.481031 +3 3.24810314 +2 2.12481022 +1 1.112481 +1 1.01124811 +5 4.601125 +8 7.66011238 +8 7.966011 +4 4.396601 +3 3.13966012 +1 1.21396613 +10 9.121397 +6 6.31213951 +6 6.03121376 +9 8.703121 +5 5.370312 +3 3.23703122 +3 3.023703 +3 3.00237 +5 4.800237 +10 9.480023 +5 5.448003 +8 7.7448 +10 9.77448 +7 7.2774477 +5 5.227745 +10 9.522775 +3 3.65227747 +10 9.365228 +1 1.836523 +8 7.383652 +5 5.238365 +3 3.22383642 +7 6.62238359 +3 3.36223841 +3 3.03622365 +3 3.00362229 +1 1.20036221 +1 1.02003622 +10 9.102004 +3 3.61020041 +2 2.16102 +1 1.116102 +10 9.11161 +7 7.211161 +8 7.921116 +10 9.792111 +3 3.67921114 +6 5.767921 +5 5.07679224 +1 1.40767932 +1 1.04076791 +8 7.30407667 +10 9.730408 +1 1.87304091 +5 4.687304 +5 4.96873045 +5 4.99687338 +8 7.69968748 +9 8.869968 +8 8.086997 +1 1.7087 +10 9.17087 +1 1.81708717 +8 7.38170862 +10 9.738171 +1 1.87381721 +1 1.08738172 +7 6.408738 +3 3.34087372 +2 2.13408732 +1 1.1134088 +8 7.311341 +1 1.63113427 +1 1.06311345 +4 3.70631123 +5 4.870631 +6 5.887063 +1 1.48870635 +4 3.74887061 +7 6.6748867 +3 3.36748862 +3 3.03674865 +5 4.8036747 +1 1.38036752 +3 2.83803654 +10 9.283804 +1 1.82838058 +8 7.382838 +10 9.738284 +10 9.973828 +5 5.497383 +5 5.04973841 +5 5.004974 +8 7.700497 +1 1.67004991 +6 5.56700468 +1 1.45670056 +1 1.04567 +8 7.304567 +10 9.730457 +1 1.87304592 +2 1.98730457 +1 1.09873044 +7 6.409873 +1 1.54098749 +5 4.654099 +1 1.36541 +3 2.836541 +4 3.883654 +5 4.88836575 +2 2.28883672 +3 2.92888355 +2 2.09288836 +1 1.10928881 +4 3.710929 +5 4.871093 +8 7.687109 +8 7.968711 +10 9.796871 +6 6.379687 +3 3.33796859 +3 3.03379679 +4 3.90337968 +2 2.19033813 +2 2.019034 +6 5.601903 +5 5.06019 +1 1.40601909 +1 1.040602 +4 3.70406 +1 1.270406 +4 3.72704053 +5 4.872704 +3 3.1872704 +1 1.21872711 +1 1.02187276 +1 1.00218725 +3 2.80021858 +5 4.780022 +1 1.37800229 +10 9.1378 +3 3.61378 +2 2.161378 +2 2.01613784 +3 2.90161371 +7 6.59016132 +5 5.159016 +2 2.31590176 +5 4.73159027 +1 1.37315917 +10 9.137316 +3 3.61373162 +1 1.26137328 +1 1.02613735 +3 2.8026135 +3 2.98026133 +4 3.898026 +3 3.0898025 +1 1.20898032 +3 2.82089782 +3 2.98208976 +5 4.798209 +3 3.17982078 +1 1.21798217 +1 1.02179825 +4 3.70217967 +1 1.270218 +2 1.92702174 +3 2.892702 +1 1.18927026 +1 1.018927 +10 9.101892 +5 5.41018963 +8 7.741019 +3 3.47410178 +8 7.54741 +1 1.65474117 +5 4.665474 +2 2.26654744 +3 2.92665458 +10 9.29266548 +4 4.529267 +5 4.95292664 +3 3.19529247 +9 8.419529 +5 5.34195328 +8 7.734195 +1 1.67341971 +2 1.9673419 +1 1.09673417 +5 4.6096735 +5 4.96096754 +3 3.19609666 +6 5.71960926 +10 9.571961 +10 9.957196 +4 4.59572 +4 4.059572 +5 4.905957 +10 9.490596 +5 5.44906 +1 1.44490612 +1 1.04449058 +5 4.60444927 +2 2.260445 +1 1.12604451 +5 4.61260462 +1 1.36126053 +5 4.636126 +4 4.06361246 +5 4.90636158 +3 3.19063616 +4 3.91906357 +2 2.19190645 +10 9.219191 +10 9.921919 +8 8.192192 +5 5.31921959 +5 5.03192234 +5 5.00319242 +3 3.20031929 +6 5.72003174 +4 4.17200327 +4 4.01720047 +10 9.40172 +10 9.940172 +6 6.394017 +4 4.239402 +1 1.32394028 +3 2.832394 +6 5.683239 +6 5.96832371 +4 4.19683266 +5 4.91968346 +3 3.1919682 +4 3.91919684 +4 3.99191976 +5 4.899192 +4 4.089919 +5 4.908992 +5 4.990899 +9 8.59909 +8 8.059909 +5 5.305991 +1 1.43059921 +3 2.84305978 +10 9.284306 +3 3.6284306 +6 5.76284266 +1 1.47628438 +5 4.64762831 +4 4.064763 +5 4.9064765 +5 4.990648 +3 3.19906473 +1 1.21990657 +4 3.72199059 +4 3.972199 +4 3.9972198 +6 5.79972172 +4 4.179972 +4 4.01799726 +4 4.00179958 +1 1.30018 +3 2.83001781 +8 7.48300171 +1 1.64830041 +5 4.66483 +2 2.266483 +1 1.12664831 +5 4.6126647 +5 4.96126652 +3 3.19612646 +6 5.719612 +4 4.17196131 +1 1.31719625 +1 1.03171968 +3 2.80317187 +4 3.88031721 +1 1.28803182 +4 3.72880316 +10 9.37288 +7 7.237288 +3 3.4237287 +3 3.0423727 +4 3.90423727 +4 3.99042368 +6 5.799042 +4 4.17990446 +7 6.7179904 +4 4.271799 +1 1.32718 +3 2.832718 +2 2.08327174 +1 1.10832715 +5 4.61083269 +5 4.96108341 +4 4.09610844 +6 5.80961037 +5 5.080961 +3 3.208096 +5 4.82081 +4 4.082081 +2 2.208208 +5 4.720821 +6 5.87208176 +2 2.38720822 +3 2.9387207 +7 6.593872 +3 3.35938716 +1 1.23593879 +3 2.82359362 +4 3.88235927 +3 3.08823586 +4 3.90882349 +5 4.89088249 +5 4.98908854 +2 2.298909 +5 4.729891 +5 4.972989 +5 4.997299 +1 1.39973 +3 2.83997273 +4 3.8839972 +5 4.8883996 +3 3.18884 +4 3.918884 +8 7.59188843 +10 9.759189 +8 8.175919 +7 7.117592 +3 3.41175914 +1 1.241176 +10 9.124118 +5 5.412412 +5 5.041241 +1 1.40412426 +1 1.04041243 +1 1.00404119 +5 4.60040426 +5 4.96004057 +6 5.89600372 +3 3.28960037 +5 4.82896 +1 1.38289607 +8 7.33828926 +5 5.233829 +9 8.623383 +5 5.36233854 +4 4.136234 +2 2.21362352 +10 9.221362 +5 5.42213631 +4 4.142214 +5 4.91422129 +4 4.091422 +5 4.90914249 +3 3.19091415 +5 4.81909132 +3 3.181909 +1 1.21819091 +4 3.721819 +5 4.872182 +5 4.98721838 +10 9.498722 +4 4.5498724 +1 1.35498738 +5 4.635499 +5 4.96355 +10 9.496355 +5 5.44963551 +8 7.74496365 +2 2.57449651 +2 2.05744958 +4 3.805745 +3 3.08057451 +1 1.20805752 +4 3.72080564 +5 4.872081 +3 3.187208 +6 5.71872044 +7 6.871872 +1 1.58718729 +5 4.65871859 +3 3.16587186 +4 3.916587 +2 2.19165874 +2 2.019166 +4 3.8019166 +6 5.78019142 +5 5.078019 +1 1.407802 +8 7.34078026 +3 3.434078 +3 3.04340768 +10 9.30434 +4 4.530434 +4 4.05304337 +5 4.90530443 +4 4.0905304 +3 3.109053 +3 3.01090527 +1 1.20109057 +2 1.920109 +3 2.89201069 +1 1.18920112 +1 1.01892006 +5 4.601892 +3 3.16018915 +3 3.01601887 +1 1.201602 +5 4.62016 +4 4.062016 +3 3.10620141 +3 3.01062 +5 4.801062 +5 4.98010635 +7 6.79801035 +1 1.5798012 +1 1.05798018 +4 3.705798 +1 1.27057981 +1 1.027058 +3 2.80270553 +1 1.18027055 +5 4.618027 +3 3.16180277 +5 4.81618 +5 4.981618 +3 3.1981616 +3 3.019816 +2 2.10198164 +5 4.7101984 +1 1.37102 +4 3.737102 +1 1.27371025 +5 4.627371 +1 1.36273718 +2 1.93627369 +10 9.193627 +5 5.419363 +5 5.0419364 +1 1.40419376 +1 1.04041934 +1 1.00404191 +1 1.00040424 +3 2.80004025 +4 3.880004 +1 1.28800046 +1 1.0288 +5 4.60288 +3 3.16028786 +3 3.01602864 +3 3.00160265 +2 2.10016036 +5 4.71001625 +4 4.07100153 +4 4.0071 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeExponentialAverage-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeExponentialAverage-Schema.txt new file mode 100644 index 0000000000..1ccbb5622c --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeExponentialAverage-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- ExponentialAverageTransform ---- +2 columns: + Input: R4 + Output: R4 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidChangePoint-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidChangePoint-Data.txt new file mode 100644 index 0000000000..64d38ec3dc --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidChangePoint-Data.txt @@ -0,0 +1,1447 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Features:R4:0 +#@ col=fAnomaly:R4:1-4 +#@ col=fAnomaly2:R4:5-8 +#@ } +Features Alert Raw Score P-Value Score Martingale Score Alert Raw Score P-Value Score Martingale Score +1123 0 1123 0.5 0 0 1123 0.5 3.37224863E-20 +1333 0 1333 1E-08 0 0 1333 1E-08 1.55606949E-14 +4322 0 4322 1E-08 0 0 4322 1E-08 7.18022974E-09 +5678 0 5678 0.0596862175 0 0 5678 0.0596862175 1.83047266E-08 +7277.5 0 7277.5 0.06804853 0 0 7277.5 0.06804853 4.367963E-08 +8942.9 0 8942.9 0.07229354 0 0 8942.9 0.07229354 1.0113606E-07 +10608.3 0 10608.3 0.07748185 0 0 10608.3 0.07748185 2.26291036E-07 +12273.7 0 12273.7 0.08197603 0 0 12273.7 0.08197603 4.925317E-07 +13939.1 0 13939.1 0.0856551751 0 0 13939.1 0.0856551751 1.04935623E-06 +15604.5 0 15604.5 0.08865729 0 0 15604.5 0.08865729 2.198717E-06 +17269.9 0 17269.9 0.09113133 0 0 17269.9 0.09113133 4.54624933E-06 +18935.3 0 18935.3 0.0931964 0 0 18935.3 0.0931964 9.299538E-06 +20600.7 0 20600.7 0.09494212 0 0 20600.7 0.09494212 1.88541744E-05 +22266.1 0 22266.1 0.09643511 0 0 22266.1 0.09643511 3.794148E-05 +23931.5 0 23931.5 0.09772548 0 0 23931.5 0.09772548 7.5869415E-05 +25596.9 0 25596.9 0.09885122 0 0 25596.9 0.09885122 0.000150886321 +27262.3 0 27262.3 0.09984156 0 0 27262.3 0.09984156 0.000298657746 +28927.7 0 28927.7 0.100719325 0 0 28927.7 0.100719325 0.0005886971 +30593.1 0 30593.1 0.101502463 0 0 30593.1 0.101502463 0.0011561492 +32258.5 0 32258.5 0.102205418 0 0 32258.5 0.102205418 0.00226315879 +33923.9 0 33923.9 0.102839857 0 0 33923.9 0.102839857 0.00441716239 +35589.3 0 35589.3 0.103415206 0 0 35589.3 0.103415206 0.008598548 +37254.7 0 37254.7 0.103939407 0 0 37254.7 0.103939407 0.0166981556 +38920.1 0 38920.1 0.104418866 1.401298E-45 0 38920.1 0.104418866 0.03235693 +40585.5 0 40585.5 0.104859158 4.203895E-45 0 40585.5 0.104859158 0.06257532 +42250.9 0 42250.9 0.105264835 1.541428E-44 0 42250.9 0.105264835 0.120794535 +43916.3 0 43916.3 0.105639756 6.165713E-44 0 43916.3 0.105639756 0.2327893 +45581.7 0 45581.7 0.105987377 2.494311E-43 0 45581.7 0.105987377 0.447925657 +47247.1 0 47247.1 0.106310479 1.007534E-42 0 47247.1 0.106310479 0.860648334 +48912.5 0 48912.5 0.106611647 4.048351E-42 0 48912.5 0.106611647 1.65145481 +50577.9 0 50577.9 0.106892996 1.622984E-41 0 50577.9 0.106892996 3.16496229 +52243.3 0 52243.3 0.107156381 6.491655E-41 0 52243.3 0.107156381 6.05852842 +53908.7 0 53908.7 0.107403532 2.591267E-40 0 53908.7 0.107403532 11.5849686 +55574.1 0 55574.1 0.107635841 1.032342E-39 0 55574.1 0.107635841 22.129982 +57239.5 0 57239.5 0.107854664 4.105269E-39 0 57239.5 0.107854664 42.23304 +58904.9 0 58904.9 0.108061112 1.62971656E-38 0 58904.9 0.108061112 80.52543 +60570.3 0 60570.3 0.108256176 6.45918438E-38 0 60570.3 0.108256176 153.40712 +62235.7 0 62235.7 0.108440824 2.556096E-37 0 62235.7 0.108440824 292.0183 +63901.1 0 63901.1 0.108615816 1.01005818E-36 0 63901.1 0.108615816 555.4508 +65566.5 0 65566.5 0.108781949 3.98582519E-36 0 65566.5 0.108781949 1055.7699 +67231.9 0 67231.9 0.108939841 1.57080828E-35 0 67231.9 0.108939841 2005.38159 +68897.3 0 68897.3 0.10909009 6.18286037E-35 0 68897.3 0.10909009 3806.65649 +70562.7 0 70562.7 0.109233193 2.43076666E-34 0 70562.7 0.109233193 7221.42725 +72228.1 0 72228.1 0.109369747 9.545722E-34 0 72228.1 0.109369747 13691.3926 +73893.5 0 73893.5 0.10950014 3.74462725E-33 0 73893.5 0.10950014 25943.5469 +75558.9 0 75558.9 0.109624773 1.46745159E-32 0 75558.9 0.109624773 49133.668 +77224.3 0 77224.3 0.109744035 5.745052E-32 0 77224.3 0.109744035 93005.25 +78889.7 0 78889.7 0.1098582 2.24707571E-31 0 78889.7 0.1098582 175964.016 +80555.1 0 80555.1 0.109967694 8.781165E-31 0 80555.1 0.109967694 332764.75 +82220.5 0 82220.5 0.110072747 3.428572E-30 0 82220.5 0.110072747 629008.1 +83885.9 0 83885.9 0.110173628 1.33756963E-29 0 83885.9 0.110173628 1188471.12 +85551.3 0 85551.3 0.110270567 5.214057E-29 0 85551.3 0.110270567 2244615 +87216.7 0 87216.7 0.110363767 2.03097642E-28 0 87216.7 0.110363767 4237630.5 +88882.1 0 88882.1 0.110453509 7.90526353E-28 0 88882.1 0.110453509 7997215.5 +90547.5 0 90547.5 0.11053995 3.07483652E-27 0 90547.5 0.11053995 15086735 +92212.9 0 92212.9 0.110623263 1.19517974E-26 0 92212.9 0.110623263 28451052 +93878.3 0 93878.3 0.110703617 4.6425928E-26 0 93878.3 0.110703617 5.363566E+07 +95543.7 0 95543.7 0.110781118 1.8022474E-25 0 95543.7 0.110781118 101080296 +97209.1 0 97209.1 0.110856012 6.992043E-25 0 97209.1 0.110856012 190432832 +98874.5 0 98874.5 0.110928379 2.71105737E-24 0 98874.5 0.110928379 3.586612E+08 +100539.9 0 100539.9 0.11099834 1.0505745E-23 0 100539.9 0.11099834 6.753029E+08 +102205.3 0 102205.3 0.111066021 4.06889753E-23 0 102205.3 0.111066021 1.27112678E+09 +103870.7 0 103870.7 0.1111315 1.5750571E-22 0 103870.7 0.1111315 2.39198925E+09 +105536.1 0 105536.1 0.111194938 6.093865E-22 0 105536.1 0.111194938 4.50001E+09 +107201.5 0 107201.5 0.111256406 2.35653174E-21 0 107201.5 0.111256406 8.463604E+09 +108866.9 0 108866.9 0.111315988 9.108451E-21 0 108866.9 0.111315988 1.59143281E+10 +110532.3 0 110532.3 0.111373775 3.518948E-20 0 110532.3 0.111373775 2.991684E+10 +112197.7 0 112197.7 0.111429811 1.358891E-19 0 112197.7 0.111429811 5.622647E+10 +113863.1 0 113863.1 0.111484237 5.2452417E-19 0 113863.1 0.111484237 1.05649316E+11 +115528.5 0 115528.5 0.111537091 2.02376975E-18 0 115528.5 0.111537091 1.98470582E+11 +117193.9 0 117193.9 0.111588448 7.80507E-18 0 117193.9 0.111588448 3.727623E+11 +118859.3 0 118859.3 0.11163836 3.008969E-17 0 118859.3 0.11163836 6.99966E+11 +120524.7 0 120524.7 0.111686856 1.15954827E-16 0 120524.7 0.111686856 1.31411568E+12 +122190.1 0 122190.1 0.11173407 4.46678272E-16 0 122190.1 0.11173407 2.466632E+12 +123855.5 0 123855.5 0.11178 1.72004619E-15 0 123855.5 0.11178 4.629047E+12 +125520.9 0 125520.9 0.111824721 6.62108375E-15 0 125520.9 0.111824721 8.68555266E+12 +127186.3 0 127186.3 0.111868262 2.54780311E-14 0 127186.3 0.111868262 1.629387E+13 +128851.7 0 128851.7 0.111910649 9.80064351E-14 0 128851.7 0.111910649 3.05614564E+13 +130517.1 0 130517.1 0.111951984 3.76876427E-13 0 130517.1 0.111951984 5.73124253E+13 +132182.5 0 132182.5 0.111992277 1.44878087E-12 0 132182.5 0.111992277 1.07460879E+14 +133847.9 0 133847.9 0.112031534 5.56761841E-12 0 133847.9 0.112031534 2.0145628E+14 +135513.3 0 135513.3 0.11206989 2.1389588E-11 0 135513.3 0.11206989 3.776084E+14 +137178.7 0 137178.7 0.112107247 8.214953E-11 0 137178.7 0.112107247 7.076765E+14 +138844.1 0 138844.1 0.11214377 3.1541364E-10 0 138844.1 0.11214377 1.32605558E+15 +140509.5 0 140509.5 0.112179361 1.21068677E-09 0 140509.5 0.112179361 2.48441551E+15 +142174.9 0 142174.9 0.112214126 4.645816E-09 0 142174.9 0.112214126 4.653972E+15 +143840.3 0 143840.3 0.112248138 1.78227122E-08 0 143840.3 0.112248138 8.71689329E+15 +145505.7 0 145505.7 0.112281315 6.835496E-08 0 145505.7 0.112281315 1.6324491E+16 +147171.1 0 147171.1 0.1123138 2.62091675E-07 0 147171.1 0.1123138 3.0567424E+16 +148836.5 0 148836.5 0.112345494 1.00467628E-06 0 148836.5 0.112345494 5.72295974E+16 +150501.9 0 150501.9 0.112376496 3.85027033E-06 0 150501.9 0.112376496 1.071338E+17 +152167.3 0 152167.3 0.112406865 1.47519913E-05 0 152167.3 0.112406865 2.0052912E+17 +153832.7 0 153832.7 0.112436526 5.65076152E-05 0 153832.7 0.112436526 3.75296751E+17 +155498.1 0 155498.1 0.112465605 0.000216402477 0 155498.1 0.112465605 7.022951E+17 +157163.5 0 157163.5 0.112494007 0.000828550139 0 157163.5 0.112494007 1.314054E+18 +158828.9 0 158828.9 0.11252182 0.00317160226 0 158828.9 0.11252182 2.45842279E+18 +160494.3 0 160494.3 0.112549104 0.0121379085 0 160494.3 0.112549104 4.59886516E+18 +162159.7 0 162159.7 0.112575777 0.0464425869 0 162159.7 0.112575777 8.601945E+18 +163825.1 0 163825.1 0.112601958 0.177663445 0 163825.1 0.112601958 1.60877562E+19 +165490.5 1 165490.5 0.112627558 0.6795022 1 165490.5 0.112627558 3.00848657E+19 +167155.9 0 167155.9 0.112652652 2.59834361 0 167155.9 0.112652652 5.625427E+19 +168821.3 0 168821.3 0.112673722 1.16965077E-06 0 168821.3 0.112673722 2.27937371E+14 +170486.7 0 170486.7 0.112634428 5.26686442E-13 0 170486.7 0.112634428 923732864 +172152.1 0 172152.1 0.112649672 2.97359522E-13 0 172152.1 0.112649672 677538944 +173817.5 0 173817.5 0.112652339 1.88908961E-13 0 173817.5 0.112652339 5.309168E+08 +175482.9 0 175482.9 0.112652317 1.2672899E-13 0 175482.9 0.112652317 428753248 +177148.3 0 177148.3 0.112652346 9.048774E-14 0 177148.3 0.112652346 3.58306E+08 +178813.7 0 178813.7 0.112652332 6.797383E-14 0 178813.7 0.112652332 307818848 +180479.1 0 180479.1 0.112652354 5.311947E-14 0 180479.1 0.112652354 270155840 +182144.5 0 182144.5 0.112652339 4.281841E-14 0 182144.5 0.112652339 241088160 +183809.9 0 183809.9 0.112652317 3.53806136E-14 0 183809.9 0.112652317 218021840 +185475.3 0 185475.3 0.112652346 2.98303523E-14 0 185475.3 0.112652346 199296576 +187140.7 0 187140.7 0.112652332 2.55743878E-14 0 187140.7 0.112652332 183806816 +188806.1 0 188806.1 0.112652354 2.22356923E-14 0 188806.1 0.112652354 170790144 +190471.5 0 190471.5 0.112652339 1.95655243E-14 0 190471.5 0.112652339 159704912 +192136.9 0 192136.9 0.112652317 1.73943891E-14 0 192136.9 0.112652317 150156160 +193802.3 0 193802.3 0.112652346 1.56035412E-14 0 193802.3 0.112652346 1.418493E+08 +195467.7 0 195467.7 0.112652332 1.41077759E-14 0 195467.7 0.112652332 134560336 +197133.1 0 197133.1 0.112652354 1.28446185E-14 0 197133.1 0.112652354 128115888 +198798.5 0 198798.5 0.112652339 1.17674281E-14 0 198798.5 0.112652339 122379808 +200463.9 0 200463.9 0.112652317 1.08407859E-14 0 200463.9 0.112652317 117243680 +202129.3 0 202129.3 0.112652346 1.00373828E-14 0 202129.3 0.112652346 112620032 +203794.7 0 203794.7 0.112652332 9.335907E-15 0 203794.7 0.112652332 108437688 +205460.1 0 205460.1 0.112652354 8.719496E-15 0 205460.1 0.112652354 104637984 +207125.5 0 207125.5 0.112652339 8.174684E-15 0 207125.5 0.112652339 101172280 +208790.9 0 208790.9 0.112652317 7.69059245E-15 0 208790.9 0.112652317 9.799983E+07 +210456.3 0 210456.3 0.112652346 7.258355E-15 0 210456.3 0.112652346 9.508621E+07 +212121.7 0 212121.7 0.112652332 6.87069674E-15 0 212121.7 0.112652332 9.240226E+07 +213787.1 0 213787.1 0.112652354 6.521583E-15 0 213787.1 0.112652354 89922984 +215452.5 0 215452.5 0.112652339 6.205989E-15 0 215452.5 0.112652339 8.762695E+07 +217117.9 0 217117.9 0.112652317 5.91969346E-15 0 217117.9 0.112652317 8.549562E+07 +218783.3 0 218783.3 0.112652346 5.659124E-15 0 218783.3 0.112652346 83512824 +220448.7 0 220448.7 0.112652332 5.421254E-15 0 220448.7 0.112652332 8.166453E+07 +222114.1 0 222114.1 0.112652354 5.20349E-15 0 222114.1 0.112652354 7.993835E+07 +223779.5 0 223779.5 0.112652339 5.00361124E-15 0 223779.5 0.112652339 78323464 +225444.9 0 225444.9 0.112652317 4.819699E-15 0 225444.9 0.112652317 7.681025E+07 +227110.3 0 227110.3 0.112652346 4.65008764E-15 0 227110.3 0.112652346 7.539015E+07 +228775.7 0 228775.7 0.112652332 4.493332E-15 0 228775.7 0.112652332 7.405562E+07 +230441.1 0 230441.1 0.112652354 4.34816528E-15 0 230441.1 0.112652354 7.279984E+07 +232106.5 0 232106.5 0.112652339 4.21348069E-15 0 232106.5 0.112652339 7.161677E+07 +233771.9 0 233771.9 0.112652317 4.08830151E-15 0 233771.9 0.112652317 7.050094E+07 +235437.3 0 235437.3 0.112652346 3.971764E-15 0 235437.3 0.112652346 6.944744E+07 +237102.7 0 237102.7 0.112652332 3.86310467E-15 0 237102.7 0.112652332 6.84518E+07 +238768.1 0 238768.1 0.112652354 3.761644E-15 0 238768.1 0.112652354 6.751001E+07 +240433.5 0 240433.5 0.112652339 3.666779E-15 0 240433.5 0.112652339 66618436 +242098.9 0 242098.9 0.112652317 3.577968E-15 0 242098.9 0.112652317 65773744 +243764.3 0 243764.3 0.112652346 3.49472517E-15 0 243764.3 0.112652346 6.49729E+07 +245429.7 0 245429.7 0.112652332 3.4166156E-15 0 245429.7 0.112652332 6.421313E+07 +247095.1 0 247095.1 0.112652354 3.343247E-15 0 247095.1 0.112652354 63491896 +248760.5 0 248760.5 0.112652339 3.27426727E-15 0 248760.5 0.112652339 62806892 +250425.9 0 250425.9 0.112652317 3.20935574E-15 0 250425.9 0.112652317 62155984 +252091.3 0 252091.3 0.112652346 3.14822178E-15 0 252091.3 0.112652346 61537188 +253756.7 0 253756.7 0.112652332 3.09060151E-15 0 253756.7 0.112652332 60948696 +255422.1 0 255422.1 0.112652354 3.03625546E-15 0 255422.1 0.112652354 60388828 +257087.5 0 257087.5 0.112652339 2.98496655E-15 0 257087.5 0.112652339 5.985606E+07 +258752.9 0 258752.9 0.112652317 2.936535E-15 0 258752.9 0.112652317 59348948 +260418.3 0 260418.3 0.112652346 2.8907767E-15 0 260418.3 0.112652346 5.886615E+07 +262083.7 0 262083.7 0.112652332 2.84752529E-15 0 262083.7 0.112652332 58406444 +263749.1 0 263749.1 0.112652354 2.80662673E-15 0 263749.1 0.112652354 57968676 +265414.5 0 265414.5 0.112652339 2.76794125E-15 0 265414.5 0.112652339 57551784 +267079.9 0 267079.9 0.112652317 2.73133884E-15 0 267079.9 0.112652317 57154776 +268745.3 0 268745.3 0.1126523 2.6967E-15 0 268745.3 0.1126523 5.677672E+07 +270410.7 0 270410.7 0.112652376 2.66391121E-15 0 270410.7 0.112652376 5.641672E+07 +272076.1 0 272076.1 0.112652354 2.63287359E-15 0 272076.1 0.112652354 56073996 +273741.5 0 273741.5 0.112652339 2.60349256E-15 0 273741.5 0.112652339 55747784 +275406.9 0 275406.9 0.112652317 2.57568066E-15 0 275406.9 0.112652317 55437372 +277072.3 0 277072.3 0.1126523 2.54935678E-15 0 277072.3 0.1126523 55142092 +278737.7 0 278737.7 0.112652376 2.52444279E-15 0 278737.7 0.112652376 5.486129E+07 +280403.1 0 280403.1 0.112652354 2.50087155E-15 0 280403.1 0.112652354 5.45944E+07 +282068.5 0 282068.5 0.112652339 2.478578E-15 0 282068.5 0.112652339 5.434087E+07 +283733.9 0 283733.9 0.112652317 2.45750156E-15 0 283733.9 0.112652317 54100184 +285399.3 0 285399.3 0.1126523 2.43758549E-15 0 285399.3 0.1126523 5.387184E+07 +287064.7 0 287064.7 0.112652376 2.41877458E-15 0 287064.7 0.112652376 5.365535E+07 +288730.1 0 288730.1 0.112652354 2.40102225E-15 0 288730.1 0.112652354 53450308 +290395.5 0 290395.5 0.112652339 2.38428255E-15 0 290395.5 0.112652339 53256296 +292060.9 0 292060.9 0.112652317 2.36851228E-15 0 292060.9 0.112652317 5.307293E+07 +293726.3 0 293726.3 0.1126523 2.353671E-15 0 293726.3 0.1126523 5.289983E+07 +295391.7 0 295391.7 0.112652376 2.339719E-15 0 295391.7 0.112652376 5.273663E+07 +297057.1 0 297057.1 0.112652354 2.32662354E-15 0 297057.1 0.112652354 52583028 +298722.5 0 298722.5 0.112652339 2.31435066E-15 0 298722.5 0.112652339 5.24387E+07 +300387.9 0 300387.9 0.112652317 2.30286955E-15 0 300387.9 0.112652317 5.230335E+07 +302053.3 0 302053.3 0.1126523 2.29215141E-15 0 302053.3 0.1126523 52176708 +303718.7 0 303718.7 0.112652376 2.28216638E-15 0 303718.7 0.112652376 52058476 +305384.1 0 305384.1 0.112652354 2.27289136E-15 0 305384.1 0.112652354 51948428 +307049.5 0 307049.5 0.112652339 2.264301E-15 0 307049.5 0.112652339 51846316 +308714.9 0 308714.9 0.112652317 2.25637274E-15 0 308714.9 0.112652317 51751904 +310380.3 0 310380.3 0.1126523 2.24908572E-15 0 310380.3 0.1126523 51664996 +312045.7 0 312045.7 0.112652376 2.24241745E-15 0 312045.7 0.112652376 51585348 +313711.1 0 313711.1 0.112652354 2.23635121E-15 0 313711.1 0.112652354 51512796 +315376.5 0 315376.5 0.112652339 2.23086815E-15 0 315376.5 0.112652339 51447136 +317041.9 0 317041.9 0.112652317 2.22595176E-15 0 317041.9 0.112652317 51388196 +318707.3 0 318707.3 0.1126523 2.22158658E-15 0 318707.3 0.1126523 51335816 +320372.7 0 320372.7 0.112652376 2.217755E-15 0 320372.7 0.112652376 5.12898E+07 +322038.1 0 322038.1 0.112652354 2.21444588E-15 0 322038.1 0.112652354 51250024 +323703.5 0 323703.5 0.112652339 2.21164474E-15 0 323703.5 0.112652339 51216332 +325368.9 0 325368.9 0.112652317 2.20933869E-15 0 325368.9 0.112652317 51188584 +327034.3 0 327034.3 0.1126523 2.20751715E-15 0 327034.3 0.1126523 51166656 +328699.7 0 328699.7 0.112652376 2.20616613E-15 0 328699.7 0.112652376 51150384 +330365.1 0 330365.1 0.112652354 2.20527781E-15 0 330365.1 0.112652354 51139684 +332030.5 1 332030.5 0.112652339 2.20484137E-15 1 332030.5 0.112652339 51134428 +333695.9 0 333695.9 0.112652317 2.2048473E-15 0 333695.9 0.112652317 5.11345E+07 +335361.3 0 335361.3 0.1126523 2.20522466E-15 0 335361.3 0.1126523 51139044 +337026.7 0 337026.7 0.112652376 2.2049085E-15 0 337026.7 0.112652376 51135236 +338692.1 0 338692.1 0.112652354 2.204861E-15 0 338692.1 0.112652354 51134664 +340357.5 0 340357.5 0.112652339 2.20486128E-15 0 340357.5 0.112652339 51134664 +342022.9 0 342022.9 0.112652317 2.20486128E-15 0 342022.9 0.112652317 51134664 +343688.3 0 343688.3 0.1126523 2.204862E-15 0 343688.3 0.1126523 51134676 +345353.7 0 345353.7 0.112652376 2.20486128E-15 0 345353.7 0.112652376 51134664 +347019.1 0 347019.1 0.112652354 2.20486128E-15 0 347019.1 0.112652354 51134664 +348684.5 0 348684.5 0.112652339 2.20486128E-15 0 348684.5 0.112652339 51134664 +350349.9 0 350349.9 0.112652317 2.20486128E-15 0 350349.9 0.112652317 51134664 +352015.3 0 352015.3 0.1126523 2.20486213E-15 0 352015.3 0.1126523 51134676 +353680.7 0 353680.7 0.112652376 2.20486128E-15 0 353680.7 0.112652376 51134664 +355346.1 0 355346.1 0.112652354 2.20486128E-15 0 355346.1 0.112652354 51134664 +357011.5 0 357011.5 0.112652339 2.20486128E-15 0 357011.5 0.112652339 51134664 +358676.9 0 358676.9 0.112652317 2.20486128E-15 0 358676.9 0.112652317 51134664 +360342.3 0 360342.3 0.1126523 2.20486213E-15 0 360342.3 0.1126523 51134676 +362007.7 0 362007.7 0.112652376 2.20486128E-15 0 362007.7 0.112652376 51134664 +363673.1 0 363673.1 0.112652354 2.20486128E-15 0 363673.1 0.112652354 51134664 +365338.5 0 365338.5 0.112652339 2.20486128E-15 0 365338.5 0.112652339 51134668 +367003.9 0 367003.9 0.112652317 2.20486128E-15 0 367003.9 0.112652317 51134668 +368669.3 0 368669.3 0.1126523 2.20486213E-15 0 368669.3 0.1126523 51134676 +370334.7 0 370334.7 0.112652376 2.20486128E-15 0 370334.7 0.112652376 51134664 +372000.1 0 372000.1 0.112652354 2.20486128E-15 0 372000.1 0.112652354 51134668 +373665.5 0 373665.5 0.112652339 2.20486128E-15 0 373665.5 0.112652339 51134668 +375330.9 0 375330.9 0.112652317 2.20486128E-15 0 375330.9 0.112652317 51134668 +376996.3 0 376996.3 0.1126523 2.20486213E-15 0 376996.3 0.1126523 51134676 +378661.7 0 378661.7 0.112652376 2.20486128E-15 0 378661.7 0.112652376 51134668 +380327.1 0 380327.1 0.112652354 2.20486128E-15 0 380327.1 0.112652354 51134668 +381992.5 0 381992.5 0.112652339 2.20486128E-15 0 381992.5 0.112652339 51134668 +383657.9 0 383657.9 0.112652317 2.20486128E-15 0 383657.9 0.112652317 51134668 +385323.3 0 385323.3 0.1126523 2.20486213E-15 0 385323.3 0.1126523 51134676 +386988.7 0 386988.7 0.112652376 2.20486128E-15 0 386988.7 0.112652376 51134668 +388654.1 0 388654.1 0.112652354 2.20486128E-15 0 388654.1 0.112652354 51134668 +390319.5 0 390319.5 0.112652339 2.20486128E-15 0 390319.5 0.112652339 51134668 +391984.9 0 391984.9 0.112652317 2.20486128E-15 0 391984.9 0.112652317 51134668 +393650.3 0 393650.3 0.1126523 2.20486213E-15 0 393650.3 0.1126523 51134676 +395315.7 0 395315.7 0.112652376 2.20486128E-15 0 395315.7 0.112652376 51134668 +396981.1 0 396981.1 0.112652354 2.20486128E-15 0 396981.1 0.112652354 51134668 +398646.5 0 398646.5 0.112652339 2.20486128E-15 0 398646.5 0.112652339 51134668 +400311.9 0 400311.9 0.112652317 2.20486128E-15 0 400311.9 0.112652317 51134668 +401977.3 0 401977.3 0.1126523 2.20486213E-15 0 401977.3 0.1126523 51134676 +403642.7 0 403642.7 0.112652376 2.20486128E-15 0 403642.7 0.112652376 51134668 +405308.1 0 405308.1 0.112652354 2.20486128E-15 0 405308.1 0.112652354 51134668 +406973.5 0 406973.5 0.112652339 2.20486128E-15 0 406973.5 0.112652339 51134668 +408638.9 0 408638.9 0.112652317 2.20486128E-15 0 408638.9 0.112652317 51134668 +410304.3 0 410304.3 0.1126523 2.20486213E-15 0 410304.3 0.1126523 51134676 +411969.7 0 411969.7 0.112652376 2.20486128E-15 0 411969.7 0.112652376 51134668 +413635.1 0 413635.1 0.112652354 2.20486128E-15 0 413635.1 0.112652354 51134668 +415300.5 0 415300.5 0.112652339 2.20486128E-15 0 415300.5 0.112652339 51134668 +416965.9 0 416965.9 0.112652317 2.20486128E-15 0 416965.9 0.112652317 51134668 +418631.3 0 418631.3 0.1126523 2.20486213E-15 0 418631.3 0.1126523 51134676 +420296.7 0 420296.7 0.112652376 2.20486128E-15 0 420296.7 0.112652376 51134668 +421962.1 0 421962.1 0.112652354 2.20486128E-15 0 421962.1 0.112652354 51134668 +423627.5 0 423627.5 0.112652339 2.20486128E-15 0 423627.5 0.112652339 51134668 +425292.9 0 425292.9 0.112652317 2.20486128E-15 0 425292.9 0.112652317 51134668 +426958.3 0 426958.3 0.1126523 2.20486213E-15 0 426958.3 0.1126523 51134676 +428623.7 0 428623.7 0.112652376 2.20486128E-15 0 428623.7 0.112652376 51134668 +430289.1 0 430289.1 0.112652354 2.20486128E-15 0 430289.1 0.112652354 51134668 +431954.5 0 431954.5 0.112652339 2.20486128E-15 0 431954.5 0.112652339 51134668 +433619.9 0 433619.9 0.112652317 2.20486128E-15 0 433619.9 0.112652317 51134668 +435285.3 0 435285.3 0.1126523 2.20486128E-15 0 435285.3 0.1126523 51134668 +436950.7 0 436950.7 0.112652376 2.20486128E-15 0 436950.7 0.112652376 51134668 +438616.1 0 438616.1 0.112652354 2.20486128E-15 0 438616.1 0.112652354 51134668 +440281.5 0 440281.5 0.112652339 2.20486128E-15 0 440281.5 0.112652339 51134668 +441946.9 0 441946.9 0.112652317 2.20486128E-15 0 441946.9 0.112652317 51134668 +443612.3 0 443612.3 0.1126523 2.20486128E-15 0 443612.3 0.1126523 51134668 +445277.7 0 445277.7 0.112652376 2.20486128E-15 0 445277.7 0.112652376 51134668 +446943.1 0 446943.1 0.112652354 2.20486128E-15 0 446943.1 0.112652354 51134668 +448608.5 0 448608.5 0.112652339 2.20486128E-15 0 448608.5 0.112652339 51134668 +450273.9 0 450273.9 0.112652317 2.20486128E-15 0 450273.9 0.112652317 51134668 +451939.3 0 451939.3 0.1126523 2.20486128E-15 0 451939.3 0.1126523 51134668 +453604.7 0 453604.7 0.112652376 2.20486128E-15 0 453604.7 0.112652376 51134668 +455270.1 0 455270.1 0.112652354 2.20486128E-15 0 455270.1 0.112652354 51134668 +456935.5 0 456935.5 0.112652339 2.20486149E-15 0 456935.5 0.112652339 51134668 +458600.9 0 458600.9 0.112652317 2.20486149E-15 0 458600.9 0.112652317 51134668 +460266.3 0 460266.3 0.1126523 2.20486149E-15 0 460266.3 0.1126523 51134668 +461931.7 0 461931.7 0.112652376 2.20486149E-15 0 461931.7 0.112652376 51134668 +463597.1 0 463597.1 0.112652354 2.20486149E-15 0 463597.1 0.112652354 51134668 +465262.5 0 465262.5 0.112652339 2.20486149E-15 0 465262.5 0.112652339 51134668 +466927.9 0 466927.9 0.112652317 2.20486149E-15 0 466927.9 0.112652317 51134668 +468593.3 0 468593.3 0.1126523 2.20486149E-15 0 468593.3 0.1126523 51134668 +470258.7 0 470258.7 0.112652376 2.20486149E-15 0 470258.7 0.112652376 51134668 +471924.1 0 471924.1 0.112652354 2.20486149E-15 0 471924.1 0.112652354 51134668 +473589.5 0 473589.5 0.112652339 2.20486149E-15 0 473589.5 0.112652339 51134668 +475254.9 0 475254.9 0.112652317 2.20486149E-15 0 475254.9 0.112652317 51134668 +476920.3 0 476920.3 0.1126523 2.20486149E-15 0 476920.3 0.1126523 51134668 +478585.7 0 478585.7 0.112652376 2.20486149E-15 0 478585.7 0.112652376 51134668 +480251.1 0 480251.1 0.112652354 2.20486149E-15 0 480251.1 0.112652354 51134668 +481916.5 0 481916.5 0.112652339 2.20486149E-15 0 481916.5 0.112652339 51134668 +483581.9 0 483581.9 0.112652317 2.20486149E-15 0 483581.9 0.112652317 51134668 +485247.3 0 485247.3 0.1126523 2.20486149E-15 0 485247.3 0.1126523 51134668 +486912.7 0 486912.7 0.112652376 2.20486149E-15 0 486912.7 0.112652376 51134668 +488578.1 0 488578.1 0.112652354 2.20486149E-15 0 488578.1 0.112652354 51134668 +490243.5 0 490243.5 0.112652339 2.20486149E-15 0 490243.5 0.112652339 51134668 +491908.9 0 491908.9 0.112652317 2.20486149E-15 0 491908.9 0.112652317 51134668 +493574.3 0 493574.3 0.1126523 2.20486149E-15 0 493574.3 0.1126523 51134668 +495239.7 0 495239.7 0.112652376 2.20486149E-15 0 495239.7 0.112652376 51134668 +496905.1 0 496905.1 0.112652354 2.20486149E-15 0 496905.1 0.112652354 51134668 +498570.5 1 498570.5 0.112652339 2.20486149E-15 1 498570.5 0.112652339 51134668 +500235.9 0 500235.9 0.112652317 2.20486149E-15 0 500235.9 0.112652317 51134668 +501901.3 0 501901.3 0.1126523 2.20486149E-15 0 501901.3 0.1126523 51134668 +503566.7 0 503566.7 0.112652376 2.20486149E-15 0 503566.7 0.112652376 51134668 +505232.1 0 505232.1 0.112652354 2.20486149E-15 0 505232.1 0.112652354 51134668 +506897.5 0 506897.5 0.112652339 2.20486149E-15 0 506897.5 0.112652339 51134668 +508562.9 0 508562.9 0.112652317 2.20486149E-15 0 508562.9 0.112652317 51134668 +510228.3 0 510228.3 0.1126523 2.20486149E-15 0 510228.3 0.1126523 51134668 +511893.7 0 511893.7 0.112652376 2.20486149E-15 0 511893.7 0.112652376 51134668 +513559.1 0 513559.1 0.112652354 2.20486149E-15 0 513559.1 0.112652354 51134668 +515224.5 0 515224.5 0.112652339 2.20486149E-15 0 515224.5 0.112652339 51134668 +516889.9 0 516889.9 0.112652317 2.20486149E-15 0 516889.9 0.112652317 51134668 +518555.3 0 518555.3 0.1126523 2.20486149E-15 0 518555.3 0.1126523 51134668 +520220.7 0 520220.7 0.112652376 2.20486149E-15 0 520220.7 0.112652376 51134668 +521886.1 0 521886.1 0.112652354 2.20486149E-15 0 521886.1 0.112652354 51134668 +523551.5 0 523551.5 0.112652339 2.20486149E-15 0 523551.5 0.112652339 51134668 +525216.9 0 525216.9 0.112652414 2.2048598E-15 0 525216.9 0.112652414 5.113465E+07 +526882.3 0 526882.3 0.112652294 2.20486E-15 0 526882.3 0.112652294 51134652 +528547.7 0 528547.7 0.112652376 2.20486E-15 0 528547.7 0.112652376 51134652 +530213.1 0 530213.1 0.112652257 2.2048617E-15 0 530213.1 0.112652257 5.113467E+07 +531878.5 0 531878.5 0.112652339 2.2048617E-15 0 531878.5 0.112652339 5.113467E+07 +533543.9 0 533543.9 0.112652414 2.20486E-15 0 533543.9 0.112652414 51134652 +535209.3 0 535209.3 0.112652294 2.20486022E-15 0 535209.3 0.112652294 51134652 +536874.7 0 536874.7 0.112652376 2.20486022E-15 0 536874.7 0.112652376 51134652 +538540.1 0 538540.1 0.112652257 2.204862E-15 0 538540.1 0.112652257 5.113467E+07 +540205.5 0 540205.5 0.112652339 2.204862E-15 0 540205.5 0.112652339 5.113467E+07 +541870.9 0 541870.9 0.112652414 2.20486022E-15 0 541870.9 0.112652414 51134656 +543536.3 0 543536.3 0.112652294 2.20486022E-15 0 543536.3 0.112652294 51134656 +545201.7 0 545201.7 0.112652376 2.20486043E-15 0 545201.7 0.112652376 51134656 +546867.1 0 546867.1 0.112652257 2.20486213E-15 0 546867.1 0.112652257 51134676 +548532.5 0 548532.5 0.112652339 2.20486213E-15 0 548532.5 0.112652339 51134676 +550197.9 0 550197.9 0.112652414 2.20486043E-15 0 550197.9 0.112652414 51134656 +551863.3 0 551863.3 0.112652294 2.20486043E-15 0 551863.3 0.112652294 51134656 +553528.7 0 553528.7 0.112652376 2.20486043E-15 0 553528.7 0.112652376 51134656 +555194.1 0 555194.1 0.112652257 2.20486213E-15 0 555194.1 0.112652257 51134676 +556859.5 0 556859.5 0.112652339 2.20486213E-15 0 556859.5 0.112652339 51134676 +558524.9 0 558524.9 0.112652414 2.20486064E-15 0 558524.9 0.112652414 51134656 +560190.3 0 560190.3 0.112652294 2.20486064E-15 0 560190.3 0.112652294 5.113466E+07 +561855.7 0 561855.7 0.112652376 2.20486064E-15 0 561855.7 0.112652376 5.113466E+07 +563521.1 0 563521.1 0.112652257 2.20486234E-15 0 563521.1 0.112652257 5.113468E+07 +565186.5 0 565186.5 0.112652339 2.20486234E-15 0 565186.5 0.112652339 5.113468E+07 +566851.9 0 566851.9 0.112652414 2.20486064E-15 0 566851.9 0.112652414 5.113466E+07 +568517.3 0 568517.3 0.112652294 2.20486085E-15 0 568517.3 0.112652294 5.113466E+07 +570182.7 0 570182.7 0.112652376 2.20486085E-15 0 570182.7 0.112652376 5.113466E+07 +571848.1 0 571848.1 0.112652257 2.20486255E-15 0 571848.1 0.112652257 5.113468E+07 +573513.5 0 573513.5 0.112652339 2.20486255E-15 0 573513.5 0.112652339 5.113468E+07 +575178.9 0 575178.9 0.112652414 2.20486085E-15 0 575178.9 0.112652414 5.113466E+07 +576844.3 0 576844.3 0.112652294 2.20486085E-15 0 576844.3 0.112652294 5.113466E+07 +578509.7 0 578509.7 0.112652376 2.20486085E-15 0 578509.7 0.112652376 5.113466E+07 +580175.1 0 580175.1 0.112652265 2.20486255E-15 0 580175.1 0.112652265 5.113468E+07 +581840.5 0 581840.5 0.112652339 2.20486255E-15 0 581840.5 0.112652339 5.113468E+07 +583505.9 0 583505.9 0.112652414 2.20486085E-15 0 583505.9 0.112652414 5.113466E+07 +585171.3 0 585171.3 0.1126523 2.20486085E-15 0 585171.3 0.1126523 51134664 +586836.7 0 586836.7 0.112652376 2.20486085E-15 0 586836.7 0.112652376 51134664 +588502.1 0 588502.1 0.112652265 2.20486255E-15 0 588502.1 0.112652265 51134684 +590167.5 0 590167.5 0.112652339 2.20486255E-15 0 590167.5 0.112652339 51134684 +591832.9 0 591832.9 0.112652414 2.20486085E-15 0 591832.9 0.112652414 51134664 +593498.3 0 593498.3 0.1126523 2.204861E-15 0 593498.3 0.1126523 51134664 +595163.7 0 595163.7 0.112652376 2.204861E-15 0 595163.7 0.112652376 51134664 +596829.1 0 596829.1 0.112652265 2.20486276E-15 0 596829.1 0.112652265 51134684 +598494.5 0 598494.5 0.112652339 2.20486255E-15 0 598494.5 0.112652339 51134684 +600159.9 0 600159.9 0.112652414 2.204861E-15 0 600159.9 0.112652414 51134664 +601825.3 0 601825.3 0.1126523 2.204861E-15 0 601825.3 0.1126523 51134664 +603490.7 0 603490.7 0.112652376 2.204861E-15 0 603490.7 0.112652376 51134664 +605156.1 0 605156.1 0.112652265 2.20486276E-15 0 605156.1 0.112652265 51134684 +606821.5 0 606821.5 0.112652339 2.20486276E-15 0 606821.5 0.112652339 51134684 +608486.9 0 608486.9 0.112652414 2.204861E-15 0 608486.9 0.112652414 51134664 +610152.3 0 610152.3 0.1126523 2.204861E-15 0 610152.3 0.1126523 51134664 +611817.7 0 611817.7 0.112652376 2.204861E-15 0 611817.7 0.112652376 51134664 +613483.1 0 613483.1 0.112652265 2.20486276E-15 0 613483.1 0.112652265 51134684 +615148.5 0 615148.5 0.112652339 2.20486276E-15 0 615148.5 0.112652339 51134684 +616813.9 0 616813.9 0.112652414 2.204861E-15 0 616813.9 0.112652414 51134664 +618479.3 0 618479.3 0.1126523 2.204861E-15 0 618479.3 0.1126523 51134664 +620144.7 0 620144.7 0.112652376 2.204861E-15 0 620144.7 0.112652376 51134664 +621810.1 0 621810.1 0.112652265 2.20486276E-15 0 621810.1 0.112652265 51134684 +623475.5 0 623475.5 0.112652339 2.20486276E-15 0 623475.5 0.112652339 51134684 +625140.9 0 625140.9 0.112652414 2.204861E-15 0 625140.9 0.112652414 51134664 +626806.3 0 626806.3 0.1126523 2.204861E-15 0 626806.3 0.1126523 51134664 +628471.7 0 628471.7 0.112652376 2.204861E-15 0 628471.7 0.112652376 51134664 +630137.1 0 630137.1 0.112652265 2.20486276E-15 0 630137.1 0.112652265 51134684 +631802.5 0 631802.5 0.112652339 2.20486276E-15 0 631802.5 0.112652339 51134684 +633467.9 0 633467.9 0.112652414 2.204861E-15 0 633467.9 0.112652414 51134664 +635133.3 0 635133.3 0.1126523 2.204861E-15 0 635133.3 0.1126523 51134664 +636798.7 0 636798.7 0.112652376 2.204861E-15 0 636798.7 0.112652376 51134664 +638464.1 0 638464.1 0.112652265 2.20486276E-15 0 638464.1 0.112652265 51134684 +640129.5 0 640129.5 0.112652339 2.20486276E-15 0 640129.5 0.112652339 51134684 +641794.9 0 641794.9 0.112652414 2.204861E-15 0 641794.9 0.112652414 51134664 +643460.3 0 643460.3 0.1126523 2.204861E-15 0 643460.3 0.1126523 51134664 +645125.7 0 645125.7 0.112652376 2.204861E-15 0 645125.7 0.112652376 51134664 +646791.1 0 646791.1 0.112652265 2.20486276E-15 0 646791.1 0.112652265 51134684 +648456.5 0 648456.5 0.112652339 2.20486276E-15 0 648456.5 0.112652339 51134684 +650121.9 0 650121.9 0.112652414 2.204861E-15 0 650121.9 0.112652414 51134664 +651787.3 0 651787.3 0.1126523 2.204861E-15 0 651787.3 0.1126523 51134664 +653452.7 0 653452.7 0.112652376 2.204861E-15 0 653452.7 0.112652376 51134664 +655118.1 0 655118.1 0.112652265 2.20486276E-15 0 655118.1 0.112652265 51134684 +656783.5 0 656783.5 0.112652339 2.20486255E-15 0 656783.5 0.112652339 51134684 +658448.9 0 658448.9 0.112652414 2.20486085E-15 0 658448.9 0.112652414 51134664 +660114.3 0 660114.3 0.1126523 2.204861E-15 0 660114.3 0.1126523 51134664 +661779.7 0 661779.7 0.112652376 2.204861E-15 0 661779.7 0.112652376 51134664 +663445.1 0 663445.1 0.112652265 2.20486255E-15 0 663445.1 0.112652265 51134684 +665110.5 1 665110.5 0.112652339 2.20486255E-15 1 665110.5 0.112652339 51134684 +666775.9 0 666775.9 0.112652414 2.20486085E-15 0 666775.9 0.112652414 51134664 +668441.3 0 668441.3 0.1126523 2.20486085E-15 0 668441.3 0.1126523 51134664 +670106.7 0 670106.7 0.112652376 2.20486085E-15 0 670106.7 0.112652376 51134664 +671772.1 0 671772.1 0.112652265 2.20486255E-15 0 671772.1 0.112652265 51134684 +673437.5 0 673437.5 0.112652339 2.20486255E-15 0 673437.5 0.112652339 5.113468E+07 +675102.9 0 675102.9 0.112652414 2.20486085E-15 0 675102.9 0.112652414 5.113466E+07 +676768.3 0 676768.3 0.1126523 2.20486085E-15 0 676768.3 0.1126523 5.113466E+07 +678433.7 0 678433.7 0.112652376 2.20486085E-15 0 678433.7 0.112652376 5.113466E+07 +680099.1 0 680099.1 0.112652265 2.20486255E-15 0 680099.1 0.112652265 5.113468E+07 +681764.5 0 681764.5 0.112652339 2.20486255E-15 0 681764.5 0.112652339 5.113468E+07 +683429.9 0 683429.9 0.112652414 2.20486085E-15 0 683429.9 0.112652414 5.113466E+07 +685095.3 0 685095.3 0.1126523 2.20486085E-15 0 685095.3 0.1126523 5.113466E+07 +686760.7 0 686760.7 0.112652376 2.20486085E-15 0 686760.7 0.112652376 5.113466E+07 +688426.1 0 688426.1 0.112652265 2.20486255E-15 0 688426.1 0.112652265 5.113468E+07 +690091.5 0 690091.5 0.112652339 2.20486234E-15 0 690091.5 0.112652339 5.113468E+07 +691756.9 0 691756.9 0.112652414 2.20486234E-15 0 691756.9 0.112652414 5.113468E+07 +693422.3 0 693422.3 0.1126523 2.20486234E-15 0 693422.3 0.1126523 5.113468E+07 +695087.7 0 695087.7 0.112652376 2.20486234E-15 0 695087.7 0.112652376 5.113468E+07 +696753.1 0 696753.1 0.112652265 2.20486234E-15 0 696753.1 0.112652265 5.113468E+07 +698418.5 0 698418.5 0.112652339 2.20486213E-15 0 698418.5 0.112652339 51134676 +700083.9 0 700083.9 0.112652414 2.20486213E-15 0 700083.9 0.112652414 51134676 +701749.3 0 701749.3 0.1126523 2.20486213E-15 0 701749.3 0.1126523 51134676 +703414.7 0 703414.7 0.112652376 2.20486213E-15 0 703414.7 0.112652376 51134676 +705080.1 0 705080.1 0.112652265 2.20486213E-15 0 705080.1 0.112652265 51134676 +706745.5 0 706745.5 0.112652339 2.20486213E-15 0 706745.5 0.112652339 51134676 +708410.9 0 708410.9 0.112652414 2.204862E-15 0 708410.9 0.112652414 51134676 +710076.3 0 710076.3 0.1126523 2.204862E-15 0 710076.3 0.1126523 51134676 +711741.7 0 711741.7 0.112652376 2.204862E-15 0 711741.7 0.112652376 51134676 +713407.1 0 713407.1 0.112652265 2.204862E-15 0 713407.1 0.112652265 5.113467E+07 +715072.5 0 715072.5 0.112652339 2.204862E-15 0 715072.5 0.112652339 5.113467E+07 +716737.9 0 716737.9 0.112652414 2.204862E-15 0 716737.9 0.112652414 5.113467E+07 +718403.3 0 718403.3 0.1126523 2.2048617E-15 0 718403.3 0.1126523 5.113467E+07 +720068.7 0 720068.7 0.112652376 2.2048617E-15 0 720068.7 0.112652376 5.113467E+07 +721734.1 0 721734.1 0.112652265 2.2048617E-15 0 721734.1 0.112652265 5.113467E+07 +723399.5 0 723399.5 0.112652339 2.2048617E-15 0 723399.5 0.112652339 5.113467E+07 +725064.9 0 725064.9 0.112652414 2.2048617E-15 0 725064.9 0.112652414 5.113467E+07 +726730.3 0 726730.3 0.1126523 2.2048617E-15 0 726730.3 0.1126523 5.113467E+07 +728395.7 0 728395.7 0.112652376 2.2048617E-15 0 728395.7 0.112652376 5.113467E+07 +730061.1 0 730061.1 0.112652265 2.2048617E-15 0 730061.1 0.112652265 5.113467E+07 +731726.5 0 731726.5 0.112652339 2.20486149E-15 0 731726.5 0.112652339 51134668 +733391.9 0 733391.9 0.112652414 2.20486149E-15 0 733391.9 0.112652414 51134668 +735057.3 0 735057.3 0.1126523 2.20486149E-15 0 735057.3 0.1126523 51134668 +736722.7 0 736722.7 0.112652376 2.20486149E-15 0 736722.7 0.112652376 51134668 +738388.1 0 738388.1 0.112652265 2.20486149E-15 0 738388.1 0.112652265 51134668 +740053.5 0 740053.5 0.112652339 2.20486149E-15 0 740053.5 0.112652339 51134668 +741718.9 0 741718.9 0.112652414 2.20486149E-15 0 741718.9 0.112652414 51134668 +743384.3 0 743384.3 0.1126523 2.20486149E-15 0 743384.3 0.1126523 51134668 +745049.7 0 745049.7 0.112652376 2.20486149E-15 0 745049.7 0.112652376 51134668 +746715.1 0 746715.1 0.112652265 2.20486128E-15 0 746715.1 0.112652265 51134668 +748380.5 0 748380.5 0.112652339 2.20486128E-15 0 748380.5 0.112652339 51134668 +750045.9 0 750045.9 0.112652414 2.20486128E-15 0 750045.9 0.112652414 51134668 +751711.3 0 751711.3 0.1126523 2.20486128E-15 0 751711.3 0.1126523 51134668 +753376.7 0 753376.7 0.112652376 2.20486128E-15 0 753376.7 0.112652376 51134668 +755042.1 0 755042.1 0.112652265 2.20486128E-15 0 755042.1 0.112652265 51134668 +756707.5 0 756707.5 0.112652339 2.20486128E-15 0 756707.5 0.112652339 51134668 +758372.9 0 758372.9 0.112652414 2.20486128E-15 0 758372.9 0.112652414 51134668 +760038.3 0 760038.3 0.1126523 2.20486128E-15 0 760038.3 0.1126523 51134668 +761703.7 0 761703.7 0.112652376 2.20486128E-15 0 761703.7 0.112652376 51134668 +763369.1 0 763369.1 0.112652265 2.20486128E-15 0 763369.1 0.112652265 51134668 +765034.5 0 765034.5 0.112652339 2.20486128E-15 0 765034.5 0.112652339 51134664 +766699.9 0 766699.9 0.112652414 2.20486128E-15 0 766699.9 0.112652414 51134664 +768365.3 0 768365.3 0.1126523 2.20486128E-15 0 768365.3 0.1126523 51134664 +770030.7 0 770030.7 0.112652376 2.20486128E-15 0 770030.7 0.112652376 51134664 +771696.1 0 771696.1 0.112652265 2.20486128E-15 0 771696.1 0.112652265 51134664 +773361.5 0 773361.5 0.112652339 2.20486128E-15 0 773361.5 0.112652339 51134664 +775026.9 0 775026.9 0.112652414 2.204861E-15 0 775026.9 0.112652414 51134664 +776692.3 0 776692.3 0.1126523 2.204861E-15 0 776692.3 0.1126523 51134664 +778357.7 0 778357.7 0.112652376 2.204861E-15 0 778357.7 0.112652376 51134664 +780023.1 0 780023.1 0.112652265 2.20486128E-15 0 780023.1 0.112652265 51134664 +781688.5 0 781688.5 0.112652339 2.204861E-15 0 781688.5 0.112652339 51134664 +783353.9 0 783353.9 0.112652414 2.204861E-15 0 783353.9 0.112652414 51134664 +785019.3 0 785019.3 0.1126523 2.204861E-15 0 785019.3 0.1126523 51134664 +786684.7 0 786684.7 0.112652376 2.204861E-15 0 786684.7 0.112652376 51134664 +788350.1 0 788350.1 0.112652265 2.204861E-15 0 788350.1 0.112652265 51134664 +790015.5 0 790015.5 0.112652339 2.204861E-15 0 790015.5 0.112652339 51134664 +791680.9 0 791680.9 0.112652414 2.204861E-15 0 791680.9 0.112652414 51134664 +793346.3 0 793346.3 0.1126523 2.204861E-15 0 793346.3 0.1126523 51134664 +795011.7 0 795011.7 0.112652376 2.204861E-15 0 795011.7 0.112652376 51134664 +796677.1 0 796677.1 0.112652265 2.204861E-15 0 796677.1 0.112652265 51134664 +798342.5 0 798342.5 0.112652339 2.204861E-15 0 798342.5 0.112652339 51134664 +800007.9 0 800007.9 0.112652414 2.204861E-15 0 800007.9 0.112652414 51134664 +801673.3 0 801673.3 0.1126523 2.204861E-15 0 801673.3 0.1126523 51134664 +803338.7 0 803338.7 0.112652376 2.204861E-15 0 803338.7 0.112652376 51134664 +805004.1 0 805004.1 0.112652265 2.20486128E-15 0 805004.1 0.112652265 51134664 +806669.5 0 806669.5 0.112652339 2.204861E-15 0 806669.5 0.112652339 51134664 +808334.9 0 808334.9 0.112652414 2.204861E-15 0 808334.9 0.112652414 51134664 +810000.3 0 810000.3 0.1126523 2.20486128E-15 0 810000.3 0.1126523 51134664 +811665.7 0 811665.7 0.112652376 2.20486128E-15 0 811665.7 0.112652376 51134664 +813331.1 0 813331.1 0.112652265 2.20486128E-15 0 813331.1 0.112652265 51134664 +814996.5 0 814996.5 0.112652339 2.20486128E-15 0 814996.5 0.112652339 51134664 +816661.9 0 816661.9 0.112652414 2.20486128E-15 0 816661.9 0.112652414 51134664 +818327.3 0 818327.3 0.1126523 2.20486128E-15 0 818327.3 0.1126523 51134664 +819992.7 0 819992.7 0.112652376 2.20486128E-15 0 819992.7 0.112652376 51134664 +821658.1 0 821658.1 0.112652265 2.20486128E-15 0 821658.1 0.112652265 51134664 +823323.5 0 823323.5 0.112652339 2.20486128E-15 0 823323.5 0.112652339 51134664 +824988.9 0 824988.9 0.112652414 2.20486128E-15 0 824988.9 0.112652414 51134664 +826654.3 0 826654.3 0.1126523 2.20486128E-15 0 826654.3 0.1126523 51134668 +828319.7 0 828319.7 0.112652376 2.20486128E-15 0 828319.7 0.112652376 51134668 +829985.1 0 829985.1 0.112652265 2.20486128E-15 0 829985.1 0.112652265 51134668 +831650.5 1 831650.5 0.112652339 2.20486128E-15 1 831650.5 0.112652339 51134668 +833315.9 0 833315.9 0.112652414 2.20486128E-15 0 833315.9 0.112652414 51134668 +834981.3 0 834981.3 0.1126523 2.20486128E-15 0 834981.3 0.1126523 51134668 +836646.7 0 836646.7 0.112652376 2.20486128E-15 0 836646.7 0.112652376 51134668 +838312.1 0 838312.1 0.112652265 2.20486128E-15 0 838312.1 0.112652265 51134668 +839977.5 0 839977.5 0.112652339 2.20486128E-15 0 839977.5 0.112652339 51134668 +841642.9 0 841642.9 0.112652414 2.20486128E-15 0 841642.9 0.112652414 51134668 +843308.3 0 843308.3 0.1126523 2.20486128E-15 0 843308.3 0.1126523 51134668 +844973.7 0 844973.7 0.112652376 2.20486128E-15 0 844973.7 0.112652376 51134668 +846639.1 0 846639.1 0.112652265 2.20486128E-15 0 846639.1 0.112652265 51134668 +848304.5 0 848304.5 0.112652339 2.20486128E-15 0 848304.5 0.112652339 51134668 +849969.9 0 849969.9 0.112652414 2.20486128E-15 0 849969.9 0.112652414 51134668 +851635.3 0 851635.3 0.1126523 2.20486149E-15 0 851635.3 0.1126523 51134668 +853300.7 0 853300.7 0.112652376 2.20486149E-15 0 853300.7 0.112652376 51134668 +854966.1 0 854966.1 0.112652265 2.20486149E-15 0 854966.1 0.112652265 51134668 +856631.5 0 856631.5 0.112652339 2.20486149E-15 0 856631.5 0.112652339 51134668 +858296.9 0 858296.9 0.112652414 2.20486149E-15 0 858296.9 0.112652414 51134668 +859962.3 0 859962.3 0.1126523 2.20486149E-15 0 859962.3 0.1126523 51134668 +861627.7 0 861627.7 0.112652376 2.20486149E-15 0 861627.7 0.112652376 51134668 +863293.1 0 863293.1 0.112652265 2.20486149E-15 0 863293.1 0.112652265 51134668 +864958.5 0 864958.5 0.112652339 2.20486149E-15 0 864958.5 0.112652339 51134668 +866623.9 0 866623.9 0.112652414 2.20486149E-15 0 866623.9 0.112652414 51134668 +868289.3 0 868289.3 0.1126523 2.20486149E-15 0 868289.3 0.1126523 51134668 +869954.7 0 869954.7 0.112652376 2.20486149E-15 0 869954.7 0.112652376 51134668 +871620.1 0 871620.1 0.112652265 2.20486149E-15 0 871620.1 0.112652265 51134668 +873285.5 0 873285.5 0.112652339 2.20486149E-15 0 873285.5 0.112652339 51134668 +874950.9 0 874950.9 0.112652414 2.20486149E-15 0 874950.9 0.112652414 51134668 +876616.3 0 876616.3 0.1126523 2.20486149E-15 0 876616.3 0.1126523 51134668 +878281.7 0 878281.7 0.112652376 2.20486149E-15 0 878281.7 0.112652376 51134668 +879947.1 0 879947.1 0.112652265 2.20486149E-15 0 879947.1 0.112652265 51134668 +881612.5 0 881612.5 0.112652339 2.20486149E-15 0 881612.5 0.112652339 51134668 +883277.9 0 883277.9 0.112652414 2.20486149E-15 0 883277.9 0.112652414 51134668 +884943.3 0 884943.3 0.1126523 2.20486149E-15 0 884943.3 0.1126523 51134668 +886608.7 0 886608.7 0.112652376 2.20486149E-15 0 886608.7 0.112652376 51134668 +888274.1 0 888274.1 0.112652265 2.20486149E-15 0 888274.1 0.112652265 51134668 +889939.5 0 889939.5 0.112652339 2.20486149E-15 0 889939.5 0.112652339 51134668 +891604.9 0 891604.9 0.112652414 2.20486149E-15 0 891604.9 0.112652414 51134668 +893270.3 0 893270.3 0.1126523 2.20486149E-15 0 893270.3 0.1126523 51134668 +894935.7 0 894935.7 0.112652376 2.20486149E-15 0 894935.7 0.112652376 51134668 +896601.1 0 896601.1 0.112652265 2.20486149E-15 0 896601.1 0.112652265 51134668 +898266.5 0 898266.5 0.112652339 2.20486149E-15 0 898266.5 0.112652339 51134668 +899931.9 0 899931.9 0.112652414 2.20486149E-15 0 899931.9 0.112652414 51134668 +901597.3 0 901597.3 0.1126523 2.20486149E-15 0 901597.3 0.1126523 51134668 +903262.7 0 903262.7 0.112652376 2.20486149E-15 0 903262.7 0.112652376 51134668 +904928.1 0 904928.1 0.112652265 2.20486149E-15 0 904928.1 0.112652265 51134668 +906593.5 0 906593.5 0.112652339 2.20486149E-15 0 906593.5 0.112652339 51134668 +908258.9 0 908258.9 0.112652414 2.20486149E-15 0 908258.9 0.112652414 51134668 +909924.3 0 909924.3 0.1126523 2.20486149E-15 0 909924.3 0.1126523 51134668 +911589.7 0 911589.7 0.112652376 2.20486149E-15 0 911589.7 0.112652376 51134668 +913255.1 0 913255.1 0.112652265 2.20486149E-15 0 913255.1 0.112652265 51134668 +914920.5 0 914920.5 0.112652339 2.20486149E-15 0 914920.5 0.112652339 51134668 +916585.9 0 916585.9 0.112652414 2.20486149E-15 0 916585.9 0.112652414 51134668 +918251.3 0 918251.3 0.1126523 2.20486149E-15 0 918251.3 0.1126523 51134668 +919916.7 0 919916.7 0.112652376 2.20486149E-15 0 919916.7 0.112652376 51134668 +921582.1 0 921582.1 0.112652265 2.20486149E-15 0 921582.1 0.112652265 51134668 +923247.5 0 923247.5 0.112652339 2.20486149E-15 0 923247.5 0.112652339 51134668 +924912.9 0 924912.9 0.112652414 2.20486149E-15 0 924912.9 0.112652414 51134668 +926578.3 0 926578.3 0.1126523 2.20486149E-15 0 926578.3 0.1126523 51134668 +928243.7 0 928243.7 0.112652376 2.20486149E-15 0 928243.7 0.112652376 51134668 +929909.1 0 929909.1 0.112652265 2.20486149E-15 0 929909.1 0.112652265 51134668 +931574.5 0 931574.5 0.112652339 2.20486149E-15 0 931574.5 0.112652339 51134668 +933239.9 0 933239.9 0.112652414 2.20486149E-15 0 933239.9 0.112652414 51134668 +934905.3 0 934905.3 0.1126523 2.20486149E-15 0 934905.3 0.1126523 51134668 +936570.7 0 936570.7 0.112652376 2.20486149E-15 0 936570.7 0.112652376 51134668 +938236.1 0 938236.1 0.112652265 2.20486149E-15 0 938236.1 0.112652265 51134668 +939901.5 0 939901.5 0.112652339 2.20486149E-15 0 939901.5 0.112652339 51134668 +941566.9 0 941566.9 0.112652414 2.20486149E-15 0 941566.9 0.112652414 51134668 +943232.3 0 943232.3 0.1126523 2.20486149E-15 0 943232.3 0.1126523 51134668 +944897.7 0 944897.7 0.112652376 2.20486149E-15 0 944897.7 0.112652376 51134668 +946563.1 0 946563.1 0.112652265 2.20486149E-15 0 946563.1 0.112652265 51134668 +948228.5 0 948228.5 0.112652339 2.20486149E-15 0 948228.5 0.112652339 51134668 +949893.9 0 949893.9 0.112652414 2.20486149E-15 0 949893.9 0.112652414 51134668 +951559.3 0 951559.3 0.1126523 2.20486149E-15 0 951559.3 0.1126523 51134668 +953224.7 0 953224.7 0.112652376 2.20486149E-15 0 953224.7 0.112652376 51134668 +954890.1 0 954890.1 0.112652265 2.20486149E-15 0 954890.1 0.112652265 51134668 +956555.5 0 956555.5 0.112652339 2.20486149E-15 0 956555.5 0.112652339 51134668 +958220.9 0 958220.9 0.112652414 2.20486149E-15 0 958220.9 0.112652414 51134668 +959886.3 0 959886.3 0.1126523 2.20486149E-15 0 959886.3 0.1126523 51134668 +961551.7 0 961551.7 0.112652376 2.20486149E-15 0 961551.7 0.112652376 51134668 +963217.1 0 963217.1 0.112652265 2.20486149E-15 0 963217.1 0.112652265 51134668 +964882.5 0 964882.5 0.112652339 2.20486149E-15 0 964882.5 0.112652339 51134668 +966547.9 0 966547.9 0.112652414 2.20486149E-15 0 966547.9 0.112652414 51134668 +968213.3 0 968213.3 0.1126523 2.20486149E-15 0 968213.3 0.1126523 51134668 +969878.7 0 969878.7 0.112652376 2.20486149E-15 0 969878.7 0.112652376 51134668 +971544.1 0 971544.1 0.112652265 2.20486149E-15 0 971544.1 0.112652265 51134668 +973209.5 0 973209.5 0.112652339 2.20486149E-15 0 973209.5 0.112652339 51134668 +974874.9 0 974874.9 0.112652414 2.20486149E-15 0 974874.9 0.112652414 51134668 +976540.3 0 976540.3 0.1126523 2.20486149E-15 0 976540.3 0.1126523 51134668 +978205.7 0 978205.7 0.112652376 2.20486149E-15 0 978205.7 0.112652376 51134668 +979871.1 0 979871.1 0.112652265 2.20486149E-15 0 979871.1 0.112652265 51134668 +981536.5 0 981536.5 0.112652339 2.20486149E-15 0 981536.5 0.112652339 51134668 +983201.9 0 983201.9 0.112652414 2.20486149E-15 0 983201.9 0.112652414 51134668 +984867.3 0 984867.3 0.1126523 2.20486149E-15 0 984867.3 0.1126523 51134668 +986532.7 0 986532.7 0.112652376 2.20486149E-15 0 986532.7 0.112652376 51134668 +988198.1 0 988198.1 0.112652265 2.20486149E-15 0 988198.1 0.112652265 51134668 +989863.5 0 989863.5 0.112652339 2.20486149E-15 0 989863.5 0.112652339 51134668 +991528.9 0 991528.9 0.112652414 2.20486149E-15 0 991528.9 0.112652414 51134668 +993194.3 0 993194.3 0.1126523 2.20486149E-15 0 993194.3 0.1126523 51134668 +994859.7 0 994859.7 0.112652376 2.20486149E-15 0 994859.7 0.112652376 51134668 +996525.1 0 996525.1 0.112652265 2.20486149E-15 0 996525.1 0.112652265 51134668 +998190.5 1 998190.5 0.112652339 2.20486149E-15 1 998190.5 0.112652339 51134668 +999855.9 0 999855.9 0.112652414 2.20486149E-15 0 999855.9 0.112652414 51134668 +1001521.31 0 1001521.31 0.1126523 2.20486149E-15 0 1001521.31 0.1126523 51134668 +1003186.69 0 1003186.69 0.112652376 2.20486149E-15 0 1003186.69 0.112652376 51134668 +1004852.12 0 1004852.12 0.112652265 2.20486149E-15 0 1004852.12 0.112652265 51134668 +1006517.5 0 1006517.5 0.112652339 2.20486149E-15 0 1006517.5 0.112652339 51134668 +1008182.88 0 1008182.88 0.112652414 2.20486149E-15 0 1008182.88 0.112652414 51134668 +1009848.31 0 1009848.31 0.1126523 2.20486149E-15 0 1009848.31 0.1126523 51134668 +1011513.69 0 1011513.69 0.112652376 2.20486149E-15 0 1011513.69 0.112652376 51134668 +1013179.12 0 1013179.12 0.112652265 2.20486149E-15 0 1013179.12 0.112652265 51134668 +1014844.5 0 1014844.5 0.112652339 2.20486149E-15 0 1014844.5 0.112652339 51134668 +1016509.88 0 1016509.88 0.112652414 2.20486149E-15 0 1016509.88 0.112652414 51134668 +1018175.31 0 1018175.31 0.1126523 2.20486149E-15 0 1018175.31 0.1126523 51134668 +1019840.69 0 1019840.69 0.112652376 2.20486149E-15 0 1019840.69 0.112652376 51134668 +1021506.12 0 1021506.12 0.112652265 2.20486149E-15 0 1021506.12 0.112652265 51134668 +1023171.5 0 1023171.5 0.112652339 2.20486149E-15 0 1023171.5 0.112652339 51134668 +1024836.88 0 1024836.88 0.112652414 2.20486149E-15 0 1024836.88 0.112652414 51134668 +1026502.31 0 1026502.31 0.1126523 2.20486149E-15 0 1026502.31 0.1126523 51134668 +1028167.69 0 1028167.69 0.112652376 2.20486149E-15 0 1028167.69 0.112652376 51134668 +1029833.12 0 1029833.12 0.112652265 2.20486149E-15 0 1029833.12 0.112652265 51134668 +1031498.5 0 1031498.5 0.112652339 2.20486149E-15 0 1031498.5 0.112652339 51134668 +1033163.88 0 1033163.88 0.112652414 2.20486149E-15 0 1033163.88 0.112652414 51134668 +1034829.31 0 1034829.31 0.1126523 2.20486149E-15 0 1034829.31 0.1126523 51134668 +1036494.69 0 1036494.69 0.112652376 2.20486149E-15 0 1036494.69 0.112652376 51134668 +1038160.12 0 1038160.12 0.112652265 2.20486149E-15 0 1038160.12 0.112652265 51134668 +1039825.5 0 1039825.5 0.112652339 2.20486149E-15 0 1039825.5 0.112652339 51134668 +1041490.88 0 1041490.88 0.112652414 2.20486149E-15 0 1041490.88 0.112652414 51134668 +1043156.31 0 1043156.31 0.1126523 2.20486149E-15 0 1043156.31 0.1126523 51134668 +1044821.69 0 1044821.69 0.112652376 2.20486149E-15 0 1044821.69 0.112652376 51134668 +1046487.12 0 1046487.12 0.112652265 2.20486149E-15 0 1046487.12 0.112652265 51134668 +1048152.5 0 1048152.5 0.112652339 2.20486149E-15 0 1048152.5 0.112652339 51134668 +1049817.88 0 1049817.88 0.112652414 2.20486149E-15 0 1049817.88 0.112652414 51134668 +1051483.25 0 1051483.25 0.112652481 2.204858E-15 0 1051483.25 0.112652481 51134628 +1053148.75 0 1053148.75 0.112652183 2.20486149E-15 0 1053148.75 0.112652183 5.113467E+07 +1054814.12 0 1054814.12 0.112652265 2.20486149E-15 0 1054814.12 0.112652265 5.113467E+07 +1056479.5 0 1056479.5 0.112652339 2.20486149E-15 0 1056479.5 0.112652339 5.113467E+07 +1058144.88 0 1058144.88 0.112652414 2.20486149E-15 0 1058144.88 0.112652414 5.113467E+07 +1059810.25 0 1059810.25 0.112652481 2.20485831E-15 0 1059810.25 0.112652481 5.113463E+07 +1061475.75 0 1061475.75 0.112652183 2.2048617E-15 0 1061475.75 0.112652183 5.113467E+07 +1063141.12 0 1063141.12 0.112652265 2.2048617E-15 0 1063141.12 0.112652265 5.113467E+07 +1064806.5 0 1064806.5 0.112652339 2.2048617E-15 0 1064806.5 0.112652339 5.113467E+07 +1066471.88 0 1066471.88 0.112652414 2.2048617E-15 0 1066471.88 0.112652414 5.113467E+07 +1068137.25 0 1068137.25 0.112652481 2.20485853E-15 0 1068137.25 0.112652481 5.113463E+07 +1069802.75 0 1069802.75 0.112652183 2.204862E-15 0 1069802.75 0.112652183 5.113467E+07 +1071468.12 0 1071468.12 0.112652265 2.204862E-15 0 1071468.12 0.112652265 5.113467E+07 +1073133.5 0 1073133.5 0.112652339 2.204862E-15 0 1073133.5 0.112652339 5.113467E+07 +1074798.88 0 1074798.88 0.112652414 2.204862E-15 0 1074798.88 0.112652414 5.113467E+07 +1076464.25 0 1076464.25 0.112652481 2.20485853E-15 0 1076464.25 0.112652481 5.113463E+07 +1078129.75 0 1078129.75 0.112652183 2.204862E-15 0 1078129.75 0.112652183 51134676 +1079795.12 0 1079795.12 0.112652265 2.204862E-15 0 1079795.12 0.112652265 51134676 +1081460.5 0 1081460.5 0.112652339 2.204862E-15 0 1081460.5 0.112652339 51134676 +1083125.88 0 1083125.88 0.112652414 2.204862E-15 0 1083125.88 0.112652414 51134676 +1084791.25 0 1084791.25 0.112652481 2.20485874E-15 0 1084791.25 0.112652481 51134636 +1086456.75 0 1086456.75 0.112652183 2.20486213E-15 0 1086456.75 0.112652183 51134676 +1088122.12 0 1088122.12 0.112652265 2.20486213E-15 0 1088122.12 0.112652265 51134676 +1089787.5 0 1089787.5 0.112652339 2.204862E-15 0 1089787.5 0.112652339 51134676 +1091452.88 0 1091452.88 0.112652414 2.204862E-15 0 1091452.88 0.112652414 51134676 +1093118.25 0 1093118.25 0.112652481 2.20485874E-15 0 1093118.25 0.112652481 51134636 +1094783.75 0 1094783.75 0.112652183 2.20486213E-15 0 1094783.75 0.112652183 51134676 +1096449.12 0 1096449.12 0.112652265 2.20486213E-15 0 1096449.12 0.112652265 51134676 +1098114.5 0 1098114.5 0.112652339 2.20486213E-15 0 1098114.5 0.112652339 51134676 +1099779.88 0 1099779.88 0.112652414 2.20486213E-15 0 1099779.88 0.112652414 51134676 +1101445.25 0 1101445.25 0.112652481 2.20485874E-15 0 1101445.25 0.112652481 51134636 +1103110.75 0 1103110.75 0.112652183 2.20486213E-15 0 1103110.75 0.112652183 51134676 +1104776.12 0 1104776.12 0.112652265 2.20486213E-15 0 1104776.12 0.112652265 51134676 +1106441.5 0 1106441.5 0.112652339 2.20486213E-15 0 1106441.5 0.112652339 51134676 +1108106.88 0 1108106.88 0.112652414 2.20486213E-15 0 1108106.88 0.112652414 51134676 +1109772.25 0 1109772.25 0.112652488 2.204859E-15 0 1109772.25 0.112652488 51134636 +1111437.75 0 1111437.75 0.112652183 2.20486234E-15 0 1111437.75 0.112652183 5.113468E+07 +1113103.12 0 1113103.12 0.112652265 2.20486213E-15 0 1113103.12 0.112652265 51134676 +1114768.5 0 1114768.5 0.112652339 2.20486213E-15 0 1114768.5 0.112652339 51134676 +1116433.88 0 1116433.88 0.112652414 2.20486213E-15 0 1116433.88 0.112652414 51134676 +1118099.25 0 1118099.25 0.112652488 2.204859E-15 0 1118099.25 0.112652488 51134636 +1119764.75 0 1119764.75 0.112652183 2.20486234E-15 0 1119764.75 0.112652183 5.113468E+07 +1121430.12 0 1121430.12 0.112652265 2.20486234E-15 0 1121430.12 0.112652265 5.113468E+07 +1123095.5 0 1123095.5 0.112652339 2.20486234E-15 0 1123095.5 0.112652339 5.113468E+07 +1124760.88 0 1124760.88 0.112652414 2.20486213E-15 0 1124760.88 0.112652414 51134676 +1126426.25 0 1126426.25 0.112652488 2.204859E-15 0 1126426.25 0.112652488 5.113464E+07 +1128091.75 0 1128091.75 0.112652183 2.20486234E-15 0 1128091.75 0.112652183 5.113468E+07 +1129757.12 0 1129757.12 0.112652265 2.20486234E-15 0 1129757.12 0.112652265 5.113468E+07 +1131422.5 0 1131422.5 0.112652339 2.20486234E-15 0 1131422.5 0.112652339 5.113468E+07 +1133087.88 0 1133087.88 0.112652414 2.20486234E-15 0 1133087.88 0.112652414 5.113468E+07 +1134753.25 0 1134753.25 0.112652488 2.204859E-15 0 1134753.25 0.112652488 5.113464E+07 +1136418.75 0 1136418.75 0.112652183 2.20486234E-15 0 1136418.75 0.112652183 5.113468E+07 +1138084.12 0 1138084.12 0.112652265 2.20486234E-15 0 1138084.12 0.112652265 5.113468E+07 +1139749.5 0 1139749.5 0.112652339 2.20486234E-15 0 1139749.5 0.112652339 5.113468E+07 +1141414.88 0 1141414.88 0.112652414 2.20486234E-15 0 1141414.88 0.112652414 5.113468E+07 +1143080.25 0 1143080.25 0.112652488 2.204859E-15 0 1143080.25 0.112652488 5.113464E+07 +1144745.75 0 1144745.75 0.112652183 2.20486234E-15 0 1144745.75 0.112652183 5.113468E+07 +1146411.12 0 1146411.12 0.112652265 2.20486234E-15 0 1146411.12 0.112652265 5.113468E+07 +1148076.5 0 1148076.5 0.112652339 2.20486234E-15 0 1148076.5 0.112652339 5.113468E+07 +1149741.88 0 1149741.88 0.112652414 2.20486234E-15 0 1149741.88 0.112652414 5.113468E+07 +1151407.25 0 1151407.25 0.112652488 2.204859E-15 0 1151407.25 0.112652488 5.113464E+07 +1153072.75 0 1153072.75 0.112652183 2.20486234E-15 0 1153072.75 0.112652183 5.113468E+07 +1154738.12 0 1154738.12 0.112652265 2.20486234E-15 0 1154738.12 0.112652265 5.113468E+07 +1156403.5 0 1156403.5 0.112652339 2.20486234E-15 0 1156403.5 0.112652339 5.113468E+07 +1158068.88 0 1158068.88 0.112652414 2.20486234E-15 0 1158068.88 0.112652414 5.113468E+07 +1159734.25 0 1159734.25 0.112652488 2.204859E-15 0 1159734.25 0.112652488 5.113464E+07 +1161399.75 0 1161399.75 0.112652183 2.20486234E-15 0 1161399.75 0.112652183 5.113468E+07 +1163065.12 0 1163065.12 0.112652265 2.20486234E-15 0 1163065.12 0.112652265 5.113468E+07 +1164730.5 1 1164730.5 0.112652339 2.20486234E-15 1 1164730.5 0.112652339 5.113468E+07 +1166395.88 0 1166395.88 0.112652414 2.20486234E-15 0 1166395.88 0.112652414 5.113468E+07 +1168061.25 0 1168061.25 0.112652488 2.204859E-15 0 1168061.25 0.112652488 5.113464E+07 +1169726.75 0 1169726.75 0.112652183 2.20486234E-15 0 1169726.75 0.112652183 5.113468E+07 +1171392.12 0 1171392.12 0.112652265 2.20486234E-15 0 1171392.12 0.112652265 5.113468E+07 +1173057.5 0 1173057.5 0.112652339 2.20486234E-15 0 1173057.5 0.112652339 5.113468E+07 +1174722.88 0 1174722.88 0.112652414 2.20486213E-15 0 1174722.88 0.112652414 51134676 +1176388.25 0 1176388.25 0.112652488 2.204859E-15 0 1176388.25 0.112652488 5.113464E+07 +1178053.75 0 1178053.75 0.112652183 2.20486234E-15 0 1178053.75 0.112652183 5.113468E+07 +1179719.12 0 1179719.12 0.112652265 2.20486234E-15 0 1179719.12 0.112652265 5.113468E+07 +1181384.5 0 1181384.5 0.112652339 2.20486234E-15 0 1181384.5 0.112652339 5.113468E+07 +1183049.88 0 1183049.88 0.112652414 2.20486213E-15 0 1183049.88 0.112652414 51134676 +1184715.25 0 1184715.25 0.112652488 2.204859E-15 0 1184715.25 0.112652488 51134636 +1186380.75 0 1186380.75 0.112652183 2.20486234E-15 0 1186380.75 0.112652183 5.113468E+07 +1188046.12 0 1188046.12 0.112652265 2.20486234E-15 0 1188046.12 0.112652265 5.113468E+07 +1189711.5 0 1189711.5 0.112652339 2.20486213E-15 0 1189711.5 0.112652339 51134676 +1191376.88 0 1191376.88 0.112652414 2.20486213E-15 0 1191376.88 0.112652414 51134676 +1193042.25 0 1193042.25 0.112652488 2.204859E-15 0 1193042.25 0.112652488 51134636 +1194707.75 0 1194707.75 0.112652183 2.20486234E-15 0 1194707.75 0.112652183 5.113468E+07 +1196373.12 0 1196373.12 0.112652265 2.20486213E-15 0 1196373.12 0.112652265 51134676 +1198038.5 0 1198038.5 0.112652339 2.20486213E-15 0 1198038.5 0.112652339 51134676 +1199703.88 0 1199703.88 0.112652414 2.20486213E-15 0 1199703.88 0.112652414 51134676 +1201369.25 0 1201369.25 0.112652488 2.204859E-15 0 1201369.25 0.112652488 51134636 +1203034.75 0 1203034.75 0.112652183 2.20486213E-15 0 1203034.75 0.112652183 51134676 +1204700.12 0 1204700.12 0.112652265 2.20486213E-15 0 1204700.12 0.112652265 51134676 +1206365.5 0 1206365.5 0.112652339 2.20486213E-15 0 1206365.5 0.112652339 51134676 +1208030.88 0 1208030.88 0.112652414 2.20486213E-15 0 1208030.88 0.112652414 51134676 +1209696.25 0 1209696.25 0.112652488 2.20485874E-15 0 1209696.25 0.112652488 51134636 +1211361.75 0 1211361.75 0.112652183 2.20486213E-15 0 1211361.75 0.112652183 51134676 +1213027.12 0 1213027.12 0.112652265 2.20486213E-15 0 1213027.12 0.112652265 51134676 +1214692.5 0 1214692.5 0.112652339 2.20486213E-15 0 1214692.5 0.112652339 51134676 +1216357.88 0 1216357.88 0.112652414 2.20486213E-15 0 1216357.88 0.112652414 51134676 +1218023.25 0 1218023.25 0.112652488 2.20486213E-15 0 1218023.25 0.112652488 51134676 +1219688.75 0 1219688.75 0.112652183 2.20486213E-15 0 1219688.75 0.112652183 51134676 +1221354.12 0 1221354.12 0.112652265 2.204862E-15 0 1221354.12 0.112652265 51134676 +1223019.5 0 1223019.5 0.112652339 2.204862E-15 0 1223019.5 0.112652339 51134676 +1224684.88 0 1224684.88 0.112652414 2.204862E-15 0 1224684.88 0.112652414 51134676 +1226350.25 0 1226350.25 0.112652488 2.204862E-15 0 1226350.25 0.112652488 5.113467E+07 +1228015.75 0 1228015.75 0.112652183 2.204862E-15 0 1228015.75 0.112652183 5.113467E+07 +1229681.12 0 1229681.12 0.112652265 2.204862E-15 0 1229681.12 0.112652265 5.113467E+07 +1231346.5 0 1231346.5 0.112652339 2.204862E-15 0 1231346.5 0.112652339 5.113467E+07 +1233011.88 0 1233011.88 0.112652414 2.2048617E-15 0 1233011.88 0.112652414 5.113467E+07 +1234677.25 0 1234677.25 0.112652488 2.2048617E-15 0 1234677.25 0.112652488 5.113467E+07 +1236342.75 0 1236342.75 0.112652183 2.2048617E-15 0 1236342.75 0.112652183 5.113467E+07 +1238008.12 0 1238008.12 0.112652265 2.2048617E-15 0 1238008.12 0.112652265 5.113467E+07 +1239673.5 0 1239673.5 0.112652339 2.2048617E-15 0 1239673.5 0.112652339 5.113467E+07 +1241338.88 0 1241338.88 0.112652414 2.2048617E-15 0 1241338.88 0.112652414 5.113467E+07 +1243004.25 0 1243004.25 0.112652488 2.2048617E-15 0 1243004.25 0.112652488 5.113467E+07 +1244669.75 0 1244669.75 0.112652183 2.2048617E-15 0 1244669.75 0.112652183 5.113467E+07 +1246335.12 0 1246335.12 0.112652265 2.2048617E-15 0 1246335.12 0.112652265 5.113467E+07 +1248000.5 0 1248000.5 0.112652339 2.2048617E-15 0 1248000.5 0.112652339 5.113467E+07 +1249665.88 0 1249665.88 0.112652414 2.20486149E-15 0 1249665.88 0.112652414 5.113467E+07 +1251331.25 0 1251331.25 0.112652488 2.20486149E-15 0 1251331.25 0.112652488 51134668 +1252996.75 0 1252996.75 0.112652183 2.20486149E-15 0 1252996.75 0.112652183 5.113467E+07 +1254662.12 0 1254662.12 0.112652265 2.20486149E-15 0 1254662.12 0.112652265 51134668 +1256327.5 0 1256327.5 0.112652339 2.20486149E-15 0 1256327.5 0.112652339 51134668 +1257992.88 0 1257992.88 0.112652414 2.20486149E-15 0 1257992.88 0.112652414 51134668 +1259658.25 0 1259658.25 0.112652488 2.20486149E-15 0 1259658.25 0.112652488 51134668 +1261323.75 0 1261323.75 0.112652183 2.20486149E-15 0 1261323.75 0.112652183 51134668 +1262989.12 0 1262989.12 0.112652265 2.20486149E-15 0 1262989.12 0.112652265 51134668 +1264654.5 0 1264654.5 0.112652339 2.20486149E-15 0 1264654.5 0.112652339 51134668 +1266319.88 0 1266319.88 0.112652414 2.20486149E-15 0 1266319.88 0.112652414 51134668 +1267985.25 0 1267985.25 0.112652488 2.20486149E-15 0 1267985.25 0.112652488 51134668 +1269650.75 0 1269650.75 0.112652183 2.20486149E-15 0 1269650.75 0.112652183 51134668 +1271316.12 0 1271316.12 0.112652265 2.20486149E-15 0 1271316.12 0.112652265 51134668 +1272981.5 0 1272981.5 0.112652339 2.20486128E-15 0 1272981.5 0.112652339 51134668 +1274646.88 0 1274646.88 0.112652414 2.20486128E-15 0 1274646.88 0.112652414 51134668 +1276312.25 0 1276312.25 0.112652488 2.20486128E-15 0 1276312.25 0.112652488 51134668 +1277977.75 0 1277977.75 0.112652183 2.20486128E-15 0 1277977.75 0.112652183 51134668 +1279643.12 0 1279643.12 0.112652265 2.20486128E-15 0 1279643.12 0.112652265 51134668 +1281308.5 0 1281308.5 0.112652339 2.20486128E-15 0 1281308.5 0.112652339 51134668 +1282973.88 0 1282973.88 0.112652414 2.20486128E-15 0 1282973.88 0.112652414 51134668 +1284639.25 0 1284639.25 0.112652488 2.20486128E-15 0 1284639.25 0.112652488 51134668 +1286304.75 0 1286304.75 0.112652183 2.20486128E-15 0 1286304.75 0.112652183 51134668 +1287970.12 0 1287970.12 0.112652265 2.20486128E-15 0 1287970.12 0.112652265 51134668 +1289635.5 0 1289635.5 0.112652339 2.20486128E-15 0 1289635.5 0.112652339 51134668 +1291300.88 0 1291300.88 0.112652414 2.20486128E-15 0 1291300.88 0.112652414 51134668 +1292966.25 0 1292966.25 0.112652488 2.20486128E-15 0 1292966.25 0.112652488 51134668 +1294631.75 0 1294631.75 0.112652183 2.20486128E-15 0 1294631.75 0.112652183 51134668 +1296297.12 0 1296297.12 0.112652265 2.20486128E-15 0 1296297.12 0.112652265 51134668 +1297962.5 0 1297962.5 0.112652339 2.20486128E-15 0 1297962.5 0.112652339 51134668 +1299627.88 0 1299627.88 0.112652414 2.20486128E-15 0 1299627.88 0.112652414 51134668 +1301293.25 0 1301293.25 0.112652488 2.20486128E-15 0 1301293.25 0.112652488 51134668 +1302958.75 0 1302958.75 0.112652183 2.20486128E-15 0 1302958.75 0.112652183 51134668 +1304624.12 0 1304624.12 0.112652265 2.20486128E-15 0 1304624.12 0.112652265 51134668 +1306289.5 0 1306289.5 0.112652339 2.20486128E-15 0 1306289.5 0.112652339 51134668 +1307954.88 0 1307954.88 0.112652414 2.20486128E-15 0 1307954.88 0.112652414 51134668 +1309620.25 0 1309620.25 0.112652488 2.20486128E-15 0 1309620.25 0.112652488 51134664 +1311285.75 0 1311285.75 0.112652183 2.20486128E-15 0 1311285.75 0.112652183 51134668 +1312951.12 0 1312951.12 0.112652265 2.20486128E-15 0 1312951.12 0.112652265 51134668 +1314616.5 0 1314616.5 0.112652339 2.20486128E-15 0 1314616.5 0.112652339 51134668 +1316281.88 0 1316281.88 0.112652414 2.20486128E-15 0 1316281.88 0.112652414 51134664 +1317947.25 0 1317947.25 0.112652488 2.20486128E-15 0 1317947.25 0.112652488 51134664 +1319612.75 0 1319612.75 0.112652183 2.20486128E-15 0 1319612.75 0.112652183 51134668 +1321278.12 0 1321278.12 0.112652265 2.20486128E-15 0 1321278.12 0.112652265 51134668 +1322943.5 0 1322943.5 0.112652339 2.20486128E-15 0 1322943.5 0.112652339 51134668 +1324608.88 0 1324608.88 0.112652414 2.20486128E-15 0 1324608.88 0.112652414 51134668 +1326274.25 0 1326274.25 0.112652488 2.20486128E-15 0 1326274.25 0.112652488 51134664 +1327939.75 0 1327939.75 0.112652183 2.20486128E-15 0 1327939.75 0.112652183 51134668 +1329605.12 0 1329605.12 0.112652265 2.20486128E-15 0 1329605.12 0.112652265 51134668 +1331270.5 1 1331270.5 0.112652339 2.20486128E-15 1 1331270.5 0.112652339 51134668 +1332935.88 0 1332935.88 0.112652414 2.20486128E-15 0 1332935.88 0.112652414 51134668 +1334601.25 0 1334601.25 0.112652488 2.20486128E-15 0 1334601.25 0.112652488 51134668 +1336266.75 0 1336266.75 0.112652183 2.20486128E-15 0 1336266.75 0.112652183 51134668 +1337932.12 0 1337932.12 0.112652265 2.20486128E-15 0 1337932.12 0.112652265 51134668 +1339597.5 0 1339597.5 0.112652339 2.20486128E-15 0 1339597.5 0.112652339 51134668 +1341262.88 0 1341262.88 0.112652414 2.20486128E-15 0 1341262.88 0.112652414 51134668 +1342928.25 0 1342928.25 0.112652488 2.20486128E-15 0 1342928.25 0.112652488 51134668 +1344593.75 0 1344593.75 0.112652183 2.20486128E-15 0 1344593.75 0.112652183 51134668 +1346259.12 0 1346259.12 0.112652265 2.20486128E-15 0 1346259.12 0.112652265 51134668 +1347924.5 0 1347924.5 0.112652339 2.20486128E-15 0 1347924.5 0.112652339 51134668 +1349589.88 0 1349589.88 0.112652414 2.20486128E-15 0 1349589.88 0.112652414 51134668 +1351255.25 0 1351255.25 0.112652488 2.20486128E-15 0 1351255.25 0.112652488 51134668 +1352920.75 0 1352920.75 0.112652183 2.20486128E-15 0 1352920.75 0.112652183 51134668 +1354586.12 0 1354586.12 0.112652265 2.20486128E-15 0 1354586.12 0.112652265 51134668 +1356251.5 0 1356251.5 0.112652339 2.20486128E-15 0 1356251.5 0.112652339 51134668 +1357916.88 0 1357916.88 0.112652414 2.20486128E-15 0 1357916.88 0.112652414 51134668 +1359582.25 0 1359582.25 0.112652488 2.20486128E-15 0 1359582.25 0.112652488 51134668 +1361247.75 0 1361247.75 0.112652183 2.20486128E-15 0 1361247.75 0.112652183 51134668 +1362913.12 0 1362913.12 0.112652265 2.20486128E-15 0 1362913.12 0.112652265 51134668 +1364578.5 0 1364578.5 0.112652339 2.20486128E-15 0 1364578.5 0.112652339 51134668 +1366243.88 0 1366243.88 0.112652414 2.20486128E-15 0 1366243.88 0.112652414 51134668 +1367909.25 0 1367909.25 0.112652488 2.20486128E-15 0 1367909.25 0.112652488 51134668 +1369574.75 0 1369574.75 0.112652183 2.20486149E-15 0 1369574.75 0.112652183 51134668 +1371240.12 0 1371240.12 0.112652265 2.20486149E-15 0 1371240.12 0.112652265 51134668 +1372905.5 0 1372905.5 0.112652339 2.20486149E-15 0 1372905.5 0.112652339 51134668 +1374570.88 0 1374570.88 0.112652414 2.20486149E-15 0 1374570.88 0.112652414 51134668 +1376236.25 0 1376236.25 0.112652488 2.20486149E-15 0 1376236.25 0.112652488 51134668 +1377901.75 0 1377901.75 0.112652183 2.20486149E-15 0 1377901.75 0.112652183 51134668 +1379567.12 0 1379567.12 0.112652265 2.20486149E-15 0 1379567.12 0.112652265 51134668 +1381232.5 0 1381232.5 0.112652339 2.20486149E-15 0 1381232.5 0.112652339 51134668 +1382897.88 0 1382897.88 0.112652414 2.20486149E-15 0 1382897.88 0.112652414 51134668 +1384563.25 0 1384563.25 0.112652488 2.20486149E-15 0 1384563.25 0.112652488 51134668 +1386228.75 0 1386228.75 0.112652183 2.20486149E-15 0 1386228.75 0.112652183 51134668 +1387894.12 0 1387894.12 0.112652265 2.20486149E-15 0 1387894.12 0.112652265 51134668 +1389559.5 0 1389559.5 0.112652339 2.20486149E-15 0 1389559.5 0.112652339 51134668 +1391224.88 0 1391224.88 0.112652414 2.20486149E-15 0 1391224.88 0.112652414 51134668 +1392890.25 0 1392890.25 0.112652488 2.20486149E-15 0 1392890.25 0.112652488 51134668 +1394555.75 0 1394555.75 0.112652183 2.20486149E-15 0 1394555.75 0.112652183 51134668 +1396221.12 0 1396221.12 0.112652265 2.20486149E-15 0 1396221.12 0.112652265 51134668 +1397886.5 0 1397886.5 0.112652339 2.20486149E-15 0 1397886.5 0.112652339 51134668 +1399551.88 0 1399551.88 0.112652414 2.20486149E-15 0 1399551.88 0.112652414 51134668 +1401217.25 0 1401217.25 0.112652488 2.20486149E-15 0 1401217.25 0.112652488 51134668 +1402882.75 0 1402882.75 0.112652183 2.20486149E-15 0 1402882.75 0.112652183 51134668 +1404548.12 0 1404548.12 0.112652265 2.20486149E-15 0 1404548.12 0.112652265 51134668 +1406213.5 0 1406213.5 0.112652339 2.20486149E-15 0 1406213.5 0.112652339 51134668 +1407878.88 0 1407878.88 0.112652414 2.20486149E-15 0 1407878.88 0.112652414 51134668 +1409544.25 0 1409544.25 0.112652488 2.20486149E-15 0 1409544.25 0.112652488 51134668 +1411209.75 0 1411209.75 0.112652183 2.20486149E-15 0 1411209.75 0.112652183 51134668 +1412875.12 0 1412875.12 0.112652265 2.20486149E-15 0 1412875.12 0.112652265 51134668 +1414540.5 0 1414540.5 0.112652339 2.20486149E-15 0 1414540.5 0.112652339 51134668 +1416205.88 0 1416205.88 0.112652414 2.20486149E-15 0 1416205.88 0.112652414 51134668 +1417871.25 0 1417871.25 0.112652488 2.20486149E-15 0 1417871.25 0.112652488 51134668 +1419536.75 0 1419536.75 0.112652183 2.20486149E-15 0 1419536.75 0.112652183 51134668 +1421202.12 0 1421202.12 0.112652265 2.20486149E-15 0 1421202.12 0.112652265 51134668 +1422867.5 0 1422867.5 0.112652339 2.20486149E-15 0 1422867.5 0.112652339 51134668 +1424532.88 0 1424532.88 0.112652414 2.20486149E-15 0 1424532.88 0.112652414 51134668 +1426198.25 0 1426198.25 0.112652488 2.20486149E-15 0 1426198.25 0.112652488 51134668 +1427863.75 0 1427863.75 0.112652183 2.20486149E-15 0 1427863.75 0.112652183 51134668 +1429529.12 0 1429529.12 0.112652265 2.20486149E-15 0 1429529.12 0.112652265 51134668 +1431194.5 0 1431194.5 0.112652339 2.20486149E-15 0 1431194.5 0.112652339 51134668 +1432859.88 0 1432859.88 0.112652414 2.20486149E-15 0 1432859.88 0.112652414 51134668 +1434525.25 0 1434525.25 0.112652488 2.20486149E-15 0 1434525.25 0.112652488 51134668 +1436190.75 0 1436190.75 0.112652183 2.20486149E-15 0 1436190.75 0.112652183 51134668 +1437856.12 0 1437856.12 0.112652265 2.20486149E-15 0 1437856.12 0.112652265 51134668 +1439521.5 0 1439521.5 0.112652339 2.20486149E-15 0 1439521.5 0.112652339 51134668 +1441186.88 0 1441186.88 0.112652414 2.20486149E-15 0 1441186.88 0.112652414 51134668 +1442852.25 0 1442852.25 0.112652488 2.20486149E-15 0 1442852.25 0.112652488 51134668 +1444517.75 0 1444517.75 0.112652183 2.20486149E-15 0 1444517.75 0.112652183 51134668 +1446183.12 0 1446183.12 0.112652265 2.20486149E-15 0 1446183.12 0.112652265 51134668 +1447848.5 0 1447848.5 0.112652339 2.20486149E-15 0 1447848.5 0.112652339 51134668 +1449513.88 0 1449513.88 0.112652414 2.20486149E-15 0 1449513.88 0.112652414 51134668 +1451179.25 0 1451179.25 0.112652488 2.20486149E-15 0 1451179.25 0.112652488 51134668 +1452844.75 0 1452844.75 0.112652183 2.20486149E-15 0 1452844.75 0.112652183 51134668 +1454510.12 0 1454510.12 0.112652265 2.20486149E-15 0 1454510.12 0.112652265 51134668 +1456175.5 0 1456175.5 0.112652339 2.20486149E-15 0 1456175.5 0.112652339 51134668 +1457840.88 0 1457840.88 0.112652414 2.20486149E-15 0 1457840.88 0.112652414 51134668 +1459506.25 0 1459506.25 0.112652488 2.20486149E-15 0 1459506.25 0.112652488 51134668 +1461171.75 0 1461171.75 0.112652183 2.20486149E-15 0 1461171.75 0.112652183 51134668 +1462837.12 0 1462837.12 0.112652265 2.20486149E-15 0 1462837.12 0.112652265 51134668 +1464502.5 0 1464502.5 0.112652339 2.20486149E-15 0 1464502.5 0.112652339 51134668 +1466167.88 0 1466167.88 0.112652414 2.20486149E-15 0 1466167.88 0.112652414 51134668 +1467833.25 0 1467833.25 0.112652488 2.20486149E-15 0 1467833.25 0.112652488 51134668 +1469498.75 0 1469498.75 0.112652183 2.20486149E-15 0 1469498.75 0.112652183 51134668 +1471164.12 0 1471164.12 0.112652265 2.20486149E-15 0 1471164.12 0.112652265 51134668 +1472829.5 0 1472829.5 0.112652339 2.20486149E-15 0 1472829.5 0.112652339 51134668 +1474494.88 0 1474494.88 0.112652414 2.20486149E-15 0 1474494.88 0.112652414 51134668 +1476160.25 0 1476160.25 0.112652488 2.20486149E-15 0 1476160.25 0.112652488 51134668 +1477825.75 0 1477825.75 0.112652183 2.20486149E-15 0 1477825.75 0.112652183 51134668 +1479491.12 0 1479491.12 0.112652265 2.20486149E-15 0 1479491.12 0.112652265 51134668 +1481156.5 0 1481156.5 0.112652339 2.20486149E-15 0 1481156.5 0.112652339 51134668 +1482821.88 0 1482821.88 0.112652414 2.20486149E-15 0 1482821.88 0.112652414 51134668 +1484487.25 0 1484487.25 0.112652488 2.20486149E-15 0 1484487.25 0.112652488 51134668 +1486152.75 0 1486152.75 0.112652183 2.20486149E-15 0 1486152.75 0.112652183 51134668 +1487818.12 0 1487818.12 0.112652265 2.20486149E-15 0 1487818.12 0.112652265 51134668 +1489483.5 0 1489483.5 0.112652339 2.20486149E-15 0 1489483.5 0.112652339 51134668 +1491148.88 0 1491148.88 0.112652414 2.20486149E-15 0 1491148.88 0.112652414 51134668 +1492814.25 0 1492814.25 0.112652488 2.20486149E-15 0 1492814.25 0.112652488 51134668 +1494479.75 0 1494479.75 0.112652183 2.20486149E-15 0 1494479.75 0.112652183 51134668 +1496145.12 0 1496145.12 0.112652265 2.20486149E-15 0 1496145.12 0.112652265 51134668 +1497810.5 1 1497810.5 0.112652339 2.20486149E-15 1 1497810.5 0.112652339 51134668 +1499475.88 0 1499475.88 0.112652414 2.20486149E-15 0 1499475.88 0.112652414 51134668 +1501141.25 0 1501141.25 0.112652488 2.20486149E-15 0 1501141.25 0.112652488 51134668 +1502806.75 0 1502806.75 0.112652183 2.20486149E-15 0 1502806.75 0.112652183 51134668 +1504472.12 0 1504472.12 0.112652265 2.20486149E-15 0 1504472.12 0.112652265 51134668 +1506137.5 0 1506137.5 0.112652339 2.20486149E-15 0 1506137.5 0.112652339 51134668 +1507802.88 0 1507802.88 0.112652414 2.20486149E-15 0 1507802.88 0.112652414 51134668 +1509468.25 0 1509468.25 0.112652488 2.20486149E-15 0 1509468.25 0.112652488 51134668 +1511133.75 0 1511133.75 0.112652183 2.20486149E-15 0 1511133.75 0.112652183 51134668 +1512799.12 0 1512799.12 0.112652265 2.20486149E-15 0 1512799.12 0.112652265 51134668 +1514464.5 0 1514464.5 0.112652339 2.20486149E-15 0 1514464.5 0.112652339 51134668 +1516129.88 0 1516129.88 0.112652414 2.20486149E-15 0 1516129.88 0.112652414 51134668 +1517795.25 0 1517795.25 0.112652488 2.20486149E-15 0 1517795.25 0.112652488 51134668 +1519460.75 0 1519460.75 0.112652183 2.20486149E-15 0 1519460.75 0.112652183 51134668 +1521126.12 0 1521126.12 0.112652265 2.20486149E-15 0 1521126.12 0.112652265 51134668 +1522791.5 0 1522791.5 0.112652339 2.20486149E-15 0 1522791.5 0.112652339 51134668 +1524456.88 0 1524456.88 0.112652414 2.20486149E-15 0 1524456.88 0.112652414 51134668 +1526122.25 0 1526122.25 0.112652488 2.20486149E-15 0 1526122.25 0.112652488 51134668 +1527787.75 0 1527787.75 0.112652183 2.20486149E-15 0 1527787.75 0.112652183 51134668 +1529453.12 0 1529453.12 0.112652265 2.20486149E-15 0 1529453.12 0.112652265 51134668 +1531118.5 0 1531118.5 0.112652339 2.20486149E-15 0 1531118.5 0.112652339 51134668 +1532783.88 0 1532783.88 0.112652414 2.20486149E-15 0 1532783.88 0.112652414 51134668 +1534449.25 0 1534449.25 0.112652488 2.20486149E-15 0 1534449.25 0.112652488 51134668 +1536114.75 0 1536114.75 0.112652183 2.20486149E-15 0 1536114.75 0.112652183 51134668 +1537780.12 0 1537780.12 0.112652265 2.20486149E-15 0 1537780.12 0.112652265 51134668 +1539445.5 0 1539445.5 0.112652339 2.20486149E-15 0 1539445.5 0.112652339 51134668 +1541110.88 0 1541110.88 0.112652414 2.20486149E-15 0 1541110.88 0.112652414 51134668 +1542776.25 0 1542776.25 0.112652488 2.20486149E-15 0 1542776.25 0.112652488 51134668 +1544441.75 0 1544441.75 0.112652183 2.20486149E-15 0 1544441.75 0.112652183 51134668 +1546107.12 0 1546107.12 0.112652265 2.20486149E-15 0 1546107.12 0.112652265 51134668 +1547772.5 0 1547772.5 0.112652339 2.20486149E-15 0 1547772.5 0.112652339 51134668 +1549437.88 0 1549437.88 0.112652414 2.20486149E-15 0 1549437.88 0.112652414 51134668 +1551103.25 0 1551103.25 0.112652488 2.20486149E-15 0 1551103.25 0.112652488 51134668 +1552768.75 0 1552768.75 0.112652183 2.20486149E-15 0 1552768.75 0.112652183 51134668 +1554434.12 0 1554434.12 0.112652265 2.20486149E-15 0 1554434.12 0.112652265 51134668 +1556099.5 0 1556099.5 0.112652339 2.20486149E-15 0 1556099.5 0.112652339 51134668 +1557764.88 0 1557764.88 0.112652414 2.20486149E-15 0 1557764.88 0.112652414 51134668 +1559430.25 0 1559430.25 0.112652488 2.20486149E-15 0 1559430.25 0.112652488 51134668 +1561095.75 0 1561095.75 0.112652183 2.20486149E-15 0 1561095.75 0.112652183 51134668 +1562761.12 0 1562761.12 0.112652265 2.20486149E-15 0 1562761.12 0.112652265 51134668 +1564426.5 0 1564426.5 0.112652339 2.20486149E-15 0 1564426.5 0.112652339 51134668 +1566091.88 0 1566091.88 0.112652414 2.20486149E-15 0 1566091.88 0.112652414 51134668 +1567757.25 0 1567757.25 0.112652488 2.20486149E-15 0 1567757.25 0.112652488 51134668 +1569422.75 0 1569422.75 0.112652183 2.20486149E-15 0 1569422.75 0.112652183 51134668 +1571088.12 0 1571088.12 0.112652265 2.20486149E-15 0 1571088.12 0.112652265 51134668 +1572753.5 0 1572753.5 0.112652339 2.20486149E-15 0 1572753.5 0.112652339 51134668 +1574418.88 0 1574418.88 0.112652414 2.20486149E-15 0 1574418.88 0.112652414 51134668 +1576084.25 0 1576084.25 0.112652488 2.20486149E-15 0 1576084.25 0.112652488 51134668 +1577749.75 0 1577749.75 0.112652183 2.20486149E-15 0 1577749.75 0.112652183 51134668 +1579415.12 0 1579415.12 0.112652265 2.20486149E-15 0 1579415.12 0.112652265 51134668 +1581080.5 0 1581080.5 0.112652339 2.20486149E-15 0 1581080.5 0.112652339 51134668 +1582745.88 0 1582745.88 0.112652414 2.20486149E-15 0 1582745.88 0.112652414 51134668 +1584411.25 0 1584411.25 0.112652488 2.20486149E-15 0 1584411.25 0.112652488 51134668 +1586076.75 0 1586076.75 0.112652183 2.20486149E-15 0 1586076.75 0.112652183 51134668 +1587742.12 0 1587742.12 0.112652265 2.20486149E-15 0 1587742.12 0.112652265 51134668 +1589407.5 0 1589407.5 0.112652339 2.20486149E-15 0 1589407.5 0.112652339 51134668 +1591072.88 0 1591072.88 0.112652414 2.20486149E-15 0 1591072.88 0.112652414 51134668 +1592738.25 0 1592738.25 0.112652488 2.20486149E-15 0 1592738.25 0.112652488 51134668 +1594403.75 0 1594403.75 0.112652183 2.20486149E-15 0 1594403.75 0.112652183 51134668 +1596069.12 0 1596069.12 0.112652265 2.20486149E-15 0 1596069.12 0.112652265 51134668 +1597734.5 0 1597734.5 0.112652339 2.20486149E-15 0 1597734.5 0.112652339 51134668 +1599399.88 0 1599399.88 0.112652414 2.20486149E-15 0 1599399.88 0.112652414 51134668 +1601065.25 0 1601065.25 0.112652488 2.20486149E-15 0 1601065.25 0.112652488 51134668 +1602730.75 0 1602730.75 0.112652183 2.20486149E-15 0 1602730.75 0.112652183 51134668 +1604396.12 0 1604396.12 0.112652265 2.20486149E-15 0 1604396.12 0.112652265 51134668 +1606061.5 0 1606061.5 0.112652339 2.20486149E-15 0 1606061.5 0.112652339 51134668 +1607726.88 0 1607726.88 0.112652414 2.20486149E-15 0 1607726.88 0.112652414 51134668 +1609392.25 0 1609392.25 0.112652488 2.20486149E-15 0 1609392.25 0.112652488 51134668 +1611057.75 0 1611057.75 0.112652183 2.20486149E-15 0 1611057.75 0.112652183 51134668 +1612723.12 0 1612723.12 0.112652265 2.20486149E-15 0 1612723.12 0.112652265 51134668 +1614388.5 0 1614388.5 0.112652339 2.20486149E-15 0 1614388.5 0.112652339 51134668 +1616053.88 0 1616053.88 0.112652414 2.20486149E-15 0 1616053.88 0.112652414 51134668 +1617719.25 0 1617719.25 0.112652488 2.20486149E-15 0 1617719.25 0.112652488 51134668 +1619384.75 0 1619384.75 0.112652183 2.20486149E-15 0 1619384.75 0.112652183 51134668 +1621050.12 0 1621050.12 0.112652265 2.20486149E-15 0 1621050.12 0.112652265 51134668 +1622715.5 0 1622715.5 0.112652339 2.20486149E-15 0 1622715.5 0.112652339 51134668 +1624380.88 0 1624380.88 0.112652414 2.20486149E-15 0 1624380.88 0.112652414 51134668 +1626046.25 0 1626046.25 0.112652488 2.20486149E-15 0 1626046.25 0.112652488 51134668 +1627711.75 0 1627711.75 0.112652183 2.20486149E-15 0 1627711.75 0.112652183 51134668 +1629377.12 0 1629377.12 0.112652265 2.20486149E-15 0 1629377.12 0.112652265 51134668 +1631042.5 0 1631042.5 0.112652339 2.20486149E-15 0 1631042.5 0.112652339 51134668 +1632707.88 0 1632707.88 0.112652414 2.20486149E-15 0 1632707.88 0.112652414 51134668 +1634373.25 0 1634373.25 0.112652488 2.20486149E-15 0 1634373.25 0.112652488 51134668 +1636038.75 0 1636038.75 0.112652183 2.20486149E-15 0 1636038.75 0.112652183 51134668 +1637704.12 0 1637704.12 0.112652265 2.20486149E-15 0 1637704.12 0.112652265 51134668 +1639369.5 0 1639369.5 0.112652339 2.20486149E-15 0 1639369.5 0.112652339 51134668 +1641034.88 0 1641034.88 0.112652414 2.20486149E-15 0 1641034.88 0.112652414 51134668 +1642700.25 0 1642700.25 0.112652488 2.20486149E-15 0 1642700.25 0.112652488 51134668 +1644365.75 0 1644365.75 0.112652183 2.20486149E-15 0 1644365.75 0.112652183 51134668 +1646031.12 0 1646031.12 0.112652265 2.20486149E-15 0 1646031.12 0.112652265 51134668 +1647696.5 0 1647696.5 0.112652339 2.20486149E-15 0 1647696.5 0.112652339 51134668 +1649361.88 0 1649361.88 0.112652414 2.20486149E-15 0 1649361.88 0.112652414 51134668 +1651027.25 0 1651027.25 0.112652488 2.20486149E-15 0 1651027.25 0.112652488 51134668 +1652692.75 0 1652692.75 0.112652183 2.20486149E-15 0 1652692.75 0.112652183 51134668 +1654358.12 0 1654358.12 0.112652265 2.20486149E-15 0 1654358.12 0.112652265 51134668 +1656023.5 0 1656023.5 0.112652339 2.20486149E-15 0 1656023.5 0.112652339 51134668 +1657688.88 0 1657688.88 0.112652414 2.20486149E-15 0 1657688.88 0.112652414 51134668 +1659354.25 0 1659354.25 0.112652488 2.20486149E-15 0 1659354.25 0.112652488 51134668 +1661019.75 0 1661019.75 0.112652183 2.20486149E-15 0 1661019.75 0.112652183 51134668 +1662685.12 0 1662685.12 0.112652265 2.20486149E-15 0 1662685.12 0.112652265 51134668 +1664350.5 1 1664350.5 0.112652339 2.20486149E-15 1 1664350.5 0.112652339 51134668 +1666015.88 0 1666015.88 0.112652414 2.20486149E-15 0 1666015.88 0.112652414 51134668 +1667681.25 0 1667681.25 0.112652488 2.20486149E-15 0 1667681.25 0.112652488 51134668 +1669346.75 0 1669346.75 0.112652183 2.20486149E-15 0 1669346.75 0.112652183 51134668 +1671012.12 0 1671012.12 0.112652265 2.20486149E-15 0 1671012.12 0.112652265 51134668 +1672677.5 0 1672677.5 0.112652339 2.20486149E-15 0 1672677.5 0.112652339 51134668 +1674342.88 0 1674342.88 0.112652414 2.20486149E-15 0 1674342.88 0.112652414 51134668 +1676008.25 0 1676008.25 0.112652488 2.20486149E-15 0 1676008.25 0.112652488 51134668 +1677673.75 0 1677673.75 0.112652183 2.20486149E-15 0 1677673.75 0.112652183 51134668 +1679339.12 0 1679339.12 0.112652265 2.20486149E-15 0 1679339.12 0.112652265 51134668 +1681004.5 0 1681004.5 0.112652339 2.20486149E-15 0 1681004.5 0.112652339 51134668 +1682669.88 0 1682669.88 0.112652414 2.20486149E-15 0 1682669.88 0.112652414 51134668 +1684335.25 0 1684335.25 0.112652488 2.20486149E-15 0 1684335.25 0.112652488 51134668 +1686000.75 0 1686000.75 0.112652183 2.20486149E-15 0 1686000.75 0.112652183 51134668 +1687666.12 0 1687666.12 0.112652265 2.20486149E-15 0 1687666.12 0.112652265 51134668 +1689331.5 0 1689331.5 0.112652339 2.20486149E-15 0 1689331.5 0.112652339 51134668 +1690996.88 0 1690996.88 0.112652414 2.20486149E-15 0 1690996.88 0.112652414 51134668 +1692662.25 0 1692662.25 0.112652488 2.20486149E-15 0 1692662.25 0.112652488 51134668 +1694327.75 0 1694327.75 0.112652183 2.20486149E-15 0 1694327.75 0.112652183 51134668 +1695993.12 0 1695993.12 0.112652265 2.20486149E-15 0 1695993.12 0.112652265 51134668 +1697658.5 0 1697658.5 0.112652339 2.20486149E-15 0 1697658.5 0.112652339 51134668 +1699323.88 0 1699323.88 0.112652414 2.20486149E-15 0 1699323.88 0.112652414 51134668 +1700989.25 0 1700989.25 0.112652488 2.20486149E-15 0 1700989.25 0.112652488 51134668 +1702654.75 0 1702654.75 0.112652183 2.20486149E-15 0 1702654.75 0.112652183 51134668 +1704320.12 0 1704320.12 0.112652265 2.20486149E-15 0 1704320.12 0.112652265 51134668 +1705985.5 0 1705985.5 0.112652339 2.20486149E-15 0 1705985.5 0.112652339 51134668 +1707650.88 0 1707650.88 0.112652414 2.20486149E-15 0 1707650.88 0.112652414 51134668 +1709316.25 0 1709316.25 0.112652488 2.20486149E-15 0 1709316.25 0.112652488 51134668 +1710981.75 0 1710981.75 0.112652183 2.20486149E-15 0 1710981.75 0.112652183 51134668 +1712647.12 0 1712647.12 0.112652265 2.20486149E-15 0 1712647.12 0.112652265 51134668 +1714312.5 0 1714312.5 0.112652339 2.20486149E-15 0 1714312.5 0.112652339 51134668 +1715977.88 0 1715977.88 0.112652414 2.20486149E-15 0 1715977.88 0.112652414 51134668 +1717643.25 0 1717643.25 0.112652488 2.20486149E-15 0 1717643.25 0.112652488 51134668 +1719308.75 0 1719308.75 0.112652183 2.20486149E-15 0 1719308.75 0.112652183 51134668 +1720974.12 0 1720974.12 0.112652265 2.20486149E-15 0 1720974.12 0.112652265 51134668 +1722639.5 0 1722639.5 0.112652339 2.20486149E-15 0 1722639.5 0.112652339 51134668 +1724304.88 0 1724304.88 0.112652414 2.20486149E-15 0 1724304.88 0.112652414 51134668 +1725970.25 0 1725970.25 0.112652488 2.20486149E-15 0 1725970.25 0.112652488 51134668 +1727635.75 0 1727635.75 0.112652183 2.20486149E-15 0 1727635.75 0.112652183 51134668 +1729301.12 0 1729301.12 0.112652265 2.20486149E-15 0 1729301.12 0.112652265 51134668 +1730966.5 0 1730966.5 0.112652339 2.20486149E-15 0 1730966.5 0.112652339 51134668 +1732631.88 0 1732631.88 0.112652414 2.20486149E-15 0 1732631.88 0.112652414 51134668 +1734297.25 0 1734297.25 0.112652488 2.20486149E-15 0 1734297.25 0.112652488 51134668 +1735962.75 0 1735962.75 0.112652183 2.20486149E-15 0 1735962.75 0.112652183 51134668 +1737628.12 0 1737628.12 0.112652265 2.20486149E-15 0 1737628.12 0.112652265 51134668 +1739293.5 0 1739293.5 0.112652339 2.20486149E-15 0 1739293.5 0.112652339 51134668 +1740958.88 0 1740958.88 0.112652414 2.20486149E-15 0 1740958.88 0.112652414 51134668 +1742624.25 0 1742624.25 0.112652488 2.20486149E-15 0 1742624.25 0.112652488 51134668 +1744289.75 0 1744289.75 0.112652183 2.20486149E-15 0 1744289.75 0.112652183 51134668 +1745955.12 0 1745955.12 0.112652265 2.20486149E-15 0 1745955.12 0.112652265 51134668 +1747620.5 0 1747620.5 0.112652339 2.20486149E-15 0 1747620.5 0.112652339 51134668 +1749285.88 0 1749285.88 0.112652414 2.20486149E-15 0 1749285.88 0.112652414 51134668 +1750951.25 0 1750951.25 0.112652488 2.20486149E-15 0 1750951.25 0.112652488 51134668 +1752616.75 0 1752616.75 0.112652183 2.20486149E-15 0 1752616.75 0.112652183 51134668 +1754282.12 0 1754282.12 0.112652265 2.20486149E-15 0 1754282.12 0.112652265 51134668 +1755947.5 0 1755947.5 0.112652339 2.20486149E-15 0 1755947.5 0.112652339 51134668 +1757612.88 0 1757612.88 0.112652414 2.20486149E-15 0 1757612.88 0.112652414 51134668 +1759278.25 0 1759278.25 0.112652488 2.20486149E-15 0 1759278.25 0.112652488 51134668 +1760943.75 0 1760943.75 0.112652183 2.20486149E-15 0 1760943.75 0.112652183 51134668 +1762609.12 0 1762609.12 0.112652265 2.20486149E-15 0 1762609.12 0.112652265 51134668 +1764274.5 0 1764274.5 0.112652339 2.20486149E-15 0 1764274.5 0.112652339 51134668 +1765939.88 0 1765939.88 0.112652414 2.20486149E-15 0 1765939.88 0.112652414 51134668 +1767605.25 0 1767605.25 0.112652488 2.20486149E-15 0 1767605.25 0.112652488 51134668 +1769270.75 0 1769270.75 0.112652183 2.20486149E-15 0 1769270.75 0.112652183 51134668 +1770936.12 0 1770936.12 0.112652265 2.20486149E-15 0 1770936.12 0.112652265 51134668 +1772601.5 0 1772601.5 0.112652339 2.20486149E-15 0 1772601.5 0.112652339 51134668 +1774266.88 0 1774266.88 0.112652414 2.20486149E-15 0 1774266.88 0.112652414 51134668 +1775932.25 0 1775932.25 0.112652488 2.20486149E-15 0 1775932.25 0.112652488 51134668 +1777597.75 0 1777597.75 0.112652183 2.20486149E-15 0 1777597.75 0.112652183 51134668 +1779263.12 0 1779263.12 0.112652265 2.20486149E-15 0 1779263.12 0.112652265 51134668 +1780928.5 0 1780928.5 0.112652339 2.20486149E-15 0 1780928.5 0.112652339 51134668 +1782593.88 0 1782593.88 0.112652414 2.20486149E-15 0 1782593.88 0.112652414 51134668 +1784259.25 0 1784259.25 0.112652488 2.20486149E-15 0 1784259.25 0.112652488 51134668 +1785924.75 0 1785924.75 0.112652183 2.20486149E-15 0 1785924.75 0.112652183 51134668 +1787590.12 0 1787590.12 0.112652265 2.20486149E-15 0 1787590.12 0.112652265 51134668 +1789255.5 0 1789255.5 0.112652339 2.20486149E-15 0 1789255.5 0.112652339 51134668 +1790920.88 0 1790920.88 0.112652414 2.20486149E-15 0 1790920.88 0.112652414 51134668 +1792586.25 0 1792586.25 0.112652488 2.20486149E-15 0 1792586.25 0.112652488 51134668 +1794251.75 0 1794251.75 0.112652183 2.20486149E-15 0 1794251.75 0.112652183 51134668 +1795917.12 0 1795917.12 0.112652265 2.20486149E-15 0 1795917.12 0.112652265 51134668 +1797582.5 0 1797582.5 0.112652339 2.20486149E-15 0 1797582.5 0.112652339 51134668 +1799247.88 0 1799247.88 0.112652414 2.20486149E-15 0 1799247.88 0.112652414 51134668 +1800913.25 0 1800913.25 0.112652488 2.20486149E-15 0 1800913.25 0.112652488 51134668 +1802578.75 0 1802578.75 0.112652183 2.20486149E-15 0 1802578.75 0.112652183 51134668 +1804244.12 0 1804244.12 0.112652265 2.20486149E-15 0 1804244.12 0.112652265 51134668 +1805909.5 0 1805909.5 0.112652339 2.20486149E-15 0 1805909.5 0.112652339 51134668 +1807574.88 0 1807574.88 0.112652414 2.20486149E-15 0 1807574.88 0.112652414 51134668 +1809240.25 0 1809240.25 0.112652488 2.20486149E-15 0 1809240.25 0.112652488 51134668 +1810905.75 0 1810905.75 0.112652183 2.20486149E-15 0 1810905.75 0.112652183 51134668 +1812571.12 0 1812571.12 0.112652265 2.20486149E-15 0 1812571.12 0.112652265 51134668 +1814236.5 0 1814236.5 0.112652339 2.20486149E-15 0 1814236.5 0.112652339 51134668 +1815901.88 0 1815901.88 0.112652414 2.20486149E-15 0 1815901.88 0.112652414 51134668 +1817567.25 0 1817567.25 0.112652488 2.20486149E-15 0 1817567.25 0.112652488 51134668 +1819232.75 0 1819232.75 0.112652183 2.20486149E-15 0 1819232.75 0.112652183 51134668 +1820898.12 0 1820898.12 0.112652265 2.20486149E-15 0 1820898.12 0.112652265 51134668 +1822563.5 0 1822563.5 0.112652339 2.20486149E-15 0 1822563.5 0.112652339 51134668 +1824228.88 0 1824228.88 0.112652414 2.20486149E-15 0 1824228.88 0.112652414 51134668 +1825894.25 0 1825894.25 0.112652488 2.20486149E-15 0 1825894.25 0.112652488 51134668 +1827559.75 0 1827559.75 0.112652183 2.20486149E-15 0 1827559.75 0.112652183 51134668 +1829225.12 0 1829225.12 0.112652265 2.20486149E-15 0 1829225.12 0.112652265 51134668 +1830890.5 1 1830890.5 0.112652339 2.20486149E-15 1 1830890.5 0.112652339 51134668 +1832555.88 0 1832555.88 0.112652414 2.20486149E-15 0 1832555.88 0.112652414 51134668 +1834221.25 0 1834221.25 0.112652488 2.20486149E-15 0 1834221.25 0.112652488 51134668 +1835886.75 0 1835886.75 0.112652183 2.20486149E-15 0 1835886.75 0.112652183 51134668 +1837552.12 0 1837552.12 0.112652265 2.20486149E-15 0 1837552.12 0.112652265 51134668 +1839217.5 0 1839217.5 0.112652339 2.20486149E-15 0 1839217.5 0.112652339 51134668 +1840882.88 0 1840882.88 0.112652414 2.20486149E-15 0 1840882.88 0.112652414 51134668 +1842548.25 0 1842548.25 0.112652488 2.20486149E-15 0 1842548.25 0.112652488 51134668 +1844213.75 0 1844213.75 0.112652183 2.20486149E-15 0 1844213.75 0.112652183 51134668 +1845879.12 0 1845879.12 0.112652265 2.20486149E-15 0 1845879.12 0.112652265 51134668 +1847544.5 0 1847544.5 0.112652339 2.20486149E-15 0 1847544.5 0.112652339 51134668 +1849209.88 0 1849209.88 0.112652414 2.20486149E-15 0 1849209.88 0.112652414 51134668 +1850875.25 0 1850875.25 0.112652488 2.20486149E-15 0 1850875.25 0.112652488 51134668 +1852540.75 0 1852540.75 0.112652183 2.20486149E-15 0 1852540.75 0.112652183 51134668 +1854206.12 0 1854206.12 0.112652265 2.20486149E-15 0 1854206.12 0.112652265 51134668 +1855871.5 0 1855871.5 0.112652339 2.20486149E-15 0 1855871.5 0.112652339 51134668 +1857536.88 0 1857536.88 0.112652414 2.20486149E-15 0 1857536.88 0.112652414 51134668 +1859202.25 0 1859202.25 0.112652488 2.20486149E-15 0 1859202.25 0.112652488 51134668 +1860867.75 0 1860867.75 0.112652183 2.20486149E-15 0 1860867.75 0.112652183 51134668 +1862533.12 0 1862533.12 0.112652265 2.20486149E-15 0 1862533.12 0.112652265 51134668 +1864198.5 0 1864198.5 0.112652339 2.20486149E-15 0 1864198.5 0.112652339 51134668 +1865863.88 0 1865863.88 0.112652414 2.20486149E-15 0 1865863.88 0.112652414 51134668 +1867529.25 0 1867529.25 0.112652488 2.20486149E-15 0 1867529.25 0.112652488 51134668 +1869194.75 0 1869194.75 0.112652183 2.20486149E-15 0 1869194.75 0.112652183 51134668 +1870860.12 0 1870860.12 0.112652265 2.20486149E-15 0 1870860.12 0.112652265 51134668 +1872525.5 0 1872525.5 0.112652339 2.20486149E-15 0 1872525.5 0.112652339 51134668 +1874190.88 0 1874190.88 0.112652414 2.20486149E-15 0 1874190.88 0.112652414 51134668 +1875856.25 0 1875856.25 0.112652488 2.20486149E-15 0 1875856.25 0.112652488 51134668 +1877521.75 0 1877521.75 0.112652183 2.20486149E-15 0 1877521.75 0.112652183 51134668 +1879187.12 0 1879187.12 0.112652265 2.20486149E-15 0 1879187.12 0.112652265 51134668 +1880852.5 0 1880852.5 0.112652339 2.20486149E-15 0 1880852.5 0.112652339 51134668 +1882517.88 0 1882517.88 0.112652414 2.20486149E-15 0 1882517.88 0.112652414 51134668 +1884183.25 0 1884183.25 0.112652488 2.20486149E-15 0 1884183.25 0.112652488 51134668 +1885848.75 0 1885848.75 0.112652183 2.20486149E-15 0 1885848.75 0.112652183 51134668 +1887514.12 0 1887514.12 0.112652265 2.20486149E-15 0 1887514.12 0.112652265 51134668 +1889179.5 0 1889179.5 0.112652339 2.20486149E-15 0 1889179.5 0.112652339 51134668 +1890844.88 0 1890844.88 0.112652414 2.20486149E-15 0 1890844.88 0.112652414 51134668 +1892510.25 0 1892510.25 0.112652488 2.20486149E-15 0 1892510.25 0.112652488 51134668 +1894175.75 0 1894175.75 0.112652183 2.20486149E-15 0 1894175.75 0.112652183 51134668 +1895841.12 0 1895841.12 0.112652265 2.20486149E-15 0 1895841.12 0.112652265 51134668 +1897506.5 0 1897506.5 0.112652339 2.20486149E-15 0 1897506.5 0.112652339 51134668 +1899171.88 0 1899171.88 0.112652414 2.20486149E-15 0 1899171.88 0.112652414 51134668 +1900837.25 0 1900837.25 0.112652488 2.20486149E-15 0 1900837.25 0.112652488 51134668 +1902502.75 0 1902502.75 0.112652183 2.20486149E-15 0 1902502.75 0.112652183 51134668 +1904168.12 0 1904168.12 0.112652265 2.20486149E-15 0 1904168.12 0.112652265 51134668 +1905833.5 0 1905833.5 0.112652339 2.20486149E-15 0 1905833.5 0.112652339 51134668 +1907498.88 0 1907498.88 0.112652414 2.20486149E-15 0 1907498.88 0.112652414 51134668 +1909164.25 0 1909164.25 0.112652488 2.20486149E-15 0 1909164.25 0.112652488 51134668 +1910829.75 0 1910829.75 0.112652183 2.20486149E-15 0 1910829.75 0.112652183 51134668 +1912495.12 0 1912495.12 0.112652265 2.20486149E-15 0 1912495.12 0.112652265 51134668 +1914160.5 0 1914160.5 0.112652339 2.20486149E-15 0 1914160.5 0.112652339 51134668 +1915825.88 0 1915825.88 0.112652414 2.20486149E-15 0 1915825.88 0.112652414 51134668 +1917491.25 0 1917491.25 0.112652488 2.20486149E-15 0 1917491.25 0.112652488 51134668 +1919156.75 0 1919156.75 0.112652183 2.20486149E-15 0 1919156.75 0.112652183 51134668 +1920822.12 0 1920822.12 0.112652265 2.20486149E-15 0 1920822.12 0.112652265 51134668 +1922487.5 0 1922487.5 0.112652339 2.20486149E-15 0 1922487.5 0.112652339 51134668 +1924152.88 0 1924152.88 0.112652414 2.20486149E-15 0 1924152.88 0.112652414 51134668 +1925818.25 0 1925818.25 0.112652488 2.20486149E-15 0 1925818.25 0.112652488 51134668 +1927483.75 0 1927483.75 0.112652183 2.20486149E-15 0 1927483.75 0.112652183 51134668 +1929149.12 0 1929149.12 0.112652265 2.20486149E-15 0 1929149.12 0.112652265 51134668 +1930814.5 0 1930814.5 0.112652339 2.20486149E-15 0 1930814.5 0.112652339 51134668 +1932479.88 0 1932479.88 0.112652414 2.20486149E-15 0 1932479.88 0.112652414 51134668 +1934145.25 0 1934145.25 0.112652488 2.20486149E-15 0 1934145.25 0.112652488 51134668 +1935810.75 0 1935810.75 0.112652183 2.20486149E-15 0 1935810.75 0.112652183 51134668 +1937476.12 0 1937476.12 0.112652265 2.20486149E-15 0 1937476.12 0.112652265 51134668 +1939141.5 0 1939141.5 0.112652339 2.20486149E-15 0 1939141.5 0.112652339 51134668 +1940806.88 0 1940806.88 0.112652414 2.20486149E-15 0 1940806.88 0.112652414 51134668 +1942472.25 0 1942472.25 0.112652488 2.20486149E-15 0 1942472.25 0.112652488 51134668 +1944137.75 0 1944137.75 0.112652183 2.20486149E-15 0 1944137.75 0.112652183 51134668 +1945803.12 0 1945803.12 0.112652265 2.20486149E-15 0 1945803.12 0.112652265 51134668 +1947468.5 0 1947468.5 0.112652339 2.20486149E-15 0 1947468.5 0.112652339 51134668 +1949133.88 0 1949133.88 0.112652414 2.20486149E-15 0 1949133.88 0.112652414 51134668 +1950799.25 0 1950799.25 0.112652488 2.20486149E-15 0 1950799.25 0.112652488 51134668 +1952464.75 0 1952464.75 0.112652183 2.20486149E-15 0 1952464.75 0.112652183 51134668 +1954130.12 0 1954130.12 0.112652265 2.20486149E-15 0 1954130.12 0.112652265 51134668 +1955795.5 0 1955795.5 0.112652339 2.20486149E-15 0 1955795.5 0.112652339 51134668 +1957460.88 0 1957460.88 0.112652414 2.20486149E-15 0 1957460.88 0.112652414 51134668 +1959126.25 0 1959126.25 0.112652488 2.20486149E-15 0 1959126.25 0.112652488 51134668 +1960791.75 0 1960791.75 0.112652183 2.20486149E-15 0 1960791.75 0.112652183 51134668 +1962457.12 0 1962457.12 0.112652265 2.20486149E-15 0 1962457.12 0.112652265 51134668 +1964122.5 0 1964122.5 0.112652339 2.20486149E-15 0 1964122.5 0.112652339 51134668 +1965787.88 0 1965787.88 0.112652414 2.20486149E-15 0 1965787.88 0.112652414 51134668 +1967453.25 0 1967453.25 0.112652488 2.20486149E-15 0 1967453.25 0.112652488 51134668 +1969118.75 0 1969118.75 0.112652183 2.20486149E-15 0 1969118.75 0.112652183 51134668 +1970784.12 0 1970784.12 0.112652265 2.20486149E-15 0 1970784.12 0.112652265 51134668 +1972449.5 0 1972449.5 0.112652339 2.20486149E-15 0 1972449.5 0.112652339 51134668 +1974114.88 0 1974114.88 0.112652414 2.20486149E-15 0 1974114.88 0.112652414 51134668 +1975780.25 0 1975780.25 0.112652488 2.20486149E-15 0 1975780.25 0.112652488 51134668 +1977445.75 0 1977445.75 0.112652183 2.20486149E-15 0 1977445.75 0.112652183 51134668 +1979111.12 0 1979111.12 0.112652265 2.20486149E-15 0 1979111.12 0.112652265 51134668 +1980776.5 0 1980776.5 0.112652339 2.20486149E-15 0 1980776.5 0.112652339 51134668 +1982441.88 0 1982441.88 0.112652414 2.20486149E-15 0 1982441.88 0.112652414 51134668 +1984107.25 0 1984107.25 0.112652488 2.20486149E-15 0 1984107.25 0.112652488 51134668 +1985772.75 0 1985772.75 0.112652183 2.20486149E-15 0 1985772.75 0.112652183 51134668 +1987438.12 0 1987438.12 0.112652265 2.20486149E-15 0 1987438.12 0.112652265 51134668 +1989103.5 0 1989103.5 0.112652339 2.20486149E-15 0 1989103.5 0.112652339 51134668 +1990768.88 0 1990768.88 0.112652414 2.20486149E-15 0 1990768.88 0.112652414 51134668 +1992434.25 0 1992434.25 0.112652488 2.20486149E-15 0 1992434.25 0.112652488 51134668 +1994099.75 0 1994099.75 0.112652183 2.20486149E-15 0 1994099.75 0.112652183 51134668 +1995765.12 0 1995765.12 0.112652265 2.20486149E-15 0 1995765.12 0.112652265 51134668 +1997430.5 1 1997430.5 0.112652339 2.20486149E-15 1 1997430.5 0.112652339 51134668 +1999095.88 0 1999095.88 0.112652414 2.20486149E-15 0 1999095.88 0.112652414 51134668 +2000761.25 0 2000761.25 0.112652488 2.20486149E-15 0 2000761.25 0.112652488 51134668 +2002426.75 0 2002426.75 0.112652183 2.20486149E-15 0 2002426.75 0.112652183 51134668 +2004092.12 0 2004092.12 0.112652265 2.20486149E-15 0 2004092.12 0.112652265 51134668 +2005757.5 0 2005757.5 0.112652339 2.20486149E-15 0 2005757.5 0.112652339 51134668 +2007422.88 0 2007422.88 0.112652414 2.20486149E-15 0 2007422.88 0.112652414 51134668 +2009088.25 0 2009088.25 0.112652488 2.20486149E-15 0 2009088.25 0.112652488 51134668 +2010753.75 0 2010753.75 0.112652183 2.20486149E-15 0 2010753.75 0.112652183 51134668 +2012419.12 0 2012419.12 0.112652265 2.20486149E-15 0 2012419.12 0.112652265 51134668 +2014084.5 0 2014084.5 0.112652339 2.20486149E-15 0 2014084.5 0.112652339 51134668 +2015749.88 0 2015749.88 0.112652414 2.20486149E-15 0 2015749.88 0.112652414 51134668 +2017415.25 0 2017415.25 0.112652488 2.20486149E-15 0 2017415.25 0.112652488 51134668 +2019080.75 0 2019080.75 0.112652183 2.20486149E-15 0 2019080.75 0.112652183 51134668 +2020746.12 0 2020746.12 0.112652265 2.20486149E-15 0 2020746.12 0.112652265 51134668 +2022411.5 0 2022411.5 0.112652339 2.20486149E-15 0 2022411.5 0.112652339 51134668 +2024076.88 0 2024076.88 0.112652414 2.20486149E-15 0 2024076.88 0.112652414 51134668 +2025742.25 0 2025742.25 0.112652488 2.20486149E-15 0 2025742.25 0.112652488 51134668 +2027407.75 0 2027407.75 0.112652183 2.20486149E-15 0 2027407.75 0.112652183 51134668 +2029073.12 0 2029073.12 0.112652265 2.20486149E-15 0 2029073.12 0.112652265 51134668 +2030738.5 0 2030738.5 0.112652339 2.20486149E-15 0 2030738.5 0.112652339 51134668 +2032403.88 0 2032403.88 0.112652414 2.20486149E-15 0 2032403.88 0.112652414 51134668 +2034069.25 0 2034069.25 0.112652488 2.20486149E-15 0 2034069.25 0.112652488 51134668 +2035734.75 0 2035734.75 0.112652183 2.20486149E-15 0 2035734.75 0.112652183 51134668 +2037400.12 0 2037400.12 0.112652265 2.20486149E-15 0 2037400.12 0.112652265 51134668 +2039065.5 0 2039065.5 0.112652339 2.20486149E-15 0 2039065.5 0.112652339 51134668 +2040730.88 0 2040730.88 0.112652414 2.20486149E-15 0 2040730.88 0.112652414 51134668 +2042396.25 0 2042396.25 0.112652488 2.20486149E-15 0 2042396.25 0.112652488 51134668 +2044061.75 0 2044061.75 0.112652183 2.20486149E-15 0 2044061.75 0.112652183 51134668 +2045727.12 0 2045727.12 0.112652265 2.20486149E-15 0 2045727.12 0.112652265 51134668 +2047392.5 0 2047392.5 0.112652339 2.20486149E-15 0 2047392.5 0.112652339 51134668 +2049057.88 0 2049057.88 0.112652414 2.20486149E-15 0 2049057.88 0.112652414 51134668 +2050723.25 0 2050723.25 0.112652488 2.20486149E-15 0 2050723.25 0.112652488 51134668 +2052388.75 0 2052388.75 0.112652183 2.20486149E-15 0 2052388.75 0.112652183 51134668 +2054054.12 0 2054054.12 0.112652265 2.20486149E-15 0 2054054.12 0.112652265 51134668 +2055719.5 0 2055719.5 0.112652339 2.20486149E-15 0 2055719.5 0.112652339 51134668 +2057384.88 0 2057384.88 0.112652414 2.20486149E-15 0 2057384.88 0.112652414 51134668 +2059050.25 0 2059050.25 0.112652488 2.20486149E-15 0 2059050.25 0.112652488 51134668 +2060715.75 0 2060715.75 0.112652183 2.20486149E-15 0 2060715.75 0.112652183 51134668 +2062381.12 0 2062381.12 0.112652265 2.20486149E-15 0 2062381.12 0.112652265 51134668 +2064046.5 0 2064046.5 0.112652339 2.20486149E-15 0 2064046.5 0.112652339 51134668 +2065711.88 0 2065711.88 0.112652414 2.20486149E-15 0 2065711.88 0.112652414 51134668 +2067377.25 0 2067377.25 0.112652488 2.20486149E-15 0 2067377.25 0.112652488 51134668 +2069042.75 0 2069042.75 0.112652183 2.20486149E-15 0 2069042.75 0.112652183 51134668 +2070708.12 0 2070708.12 0.112652265 2.20486149E-15 0 2070708.12 0.112652265 51134668 +2072373.5 0 2072373.5 0.112652339 2.20486149E-15 0 2072373.5 0.112652339 51134668 +2074038.88 0 2074038.88 0.112652414 2.20486149E-15 0 2074038.88 0.112652414 51134668 +2075704.25 0 2075704.25 0.112652488 2.20486149E-15 0 2075704.25 0.112652488 51134668 +2077369.75 0 2077369.75 0.112652183 2.20486149E-15 0 2077369.75 0.112652183 51134668 +2079035.12 0 2079035.12 0.112652265 2.20486149E-15 0 2079035.12 0.112652265 51134668 +2080700.5 0 2080700.5 0.112652339 2.20486149E-15 0 2080700.5 0.112652339 51134668 +2082365.88 0 2082365.88 0.112652414 2.20486149E-15 0 2082365.88 0.112652414 51134668 +2084031.25 0 2084031.25 0.112652488 2.20486149E-15 0 2084031.25 0.112652488 51134668 +2085696.75 0 2085696.75 0.112652183 2.20486149E-15 0 2085696.75 0.112652183 51134668 +2087362.12 0 2087362.12 0.112652265 2.20486149E-15 0 2087362.12 0.112652265 51134668 +2089027.5 0 2089027.5 0.112652339 2.20486149E-15 0 2089027.5 0.112652339 51134668 +2090692.88 0 2090692.88 0.112652414 2.20486149E-15 0 2090692.88 0.112652414 51134668 +2092358.25 0 2092358.25 0.112652488 2.20486149E-15 0 2092358.25 0.112652488 51134668 +2094023.75 0 2094023.75 0.112652183 2.20486149E-15 0 2094023.75 0.112652183 51134668 +2095689.12 0 2095689.12 0.112652265 2.20486149E-15 0 2095689.12 0.112652265 51134668 +2097354.5 0 2097354.5 0.112652339 2.20486149E-15 0 2097354.5 0.112652339 51134668 +2099020 0 2099020 0.112652048 2.204868E-15 0 2099020 0.112652048 51134748 +2100685.25 0 2100685.25 0.1126525 2.20486763E-15 0 2100685.25 0.1126525 51134744 +2102350.75 0 2102350.75 0.1126522 2.20486742E-15 0 2102350.75 0.1126522 5.113474E+07 +2104016 0 2104016 0.112652652 2.20486064E-15 0 2104016 0.112652652 5.113466E+07 +2105681.5 0 2105681.5 0.112652339 2.20486064E-15 0 2105681.5 0.112652339 5.113466E+07 +2107347 0 2107347 0.112652048 2.20486721E-15 0 2107347 0.112652048 51134736 +2109012.25 0 2109012.25 0.1126525 2.204867E-15 0 2109012.25 0.1126525 51134736 +2110677.75 0 2110677.75 0.1126522 2.20486657E-15 0 2110677.75 0.1126522 51134732 +2112343 0 2112343 0.112652645 2.2048598E-15 0 2112343 0.112652645 5.113465E+07 +2114008.5 0 2114008.5 0.112652339 2.2048598E-15 0 2114008.5 0.112652339 5.113465E+07 +2115674 0 2115674 0.112652041 2.20486636E-15 0 2115674 0.112652041 5.113473E+07 +2117339.25 0 2117339.25 0.1126525 2.20486615E-15 0 2117339.25 0.1126525 51134724 +2119004.75 0 2119004.75 0.1126522 2.204866E-15 0 2119004.75 0.1126522 51134724 +2120670 0 2120670 0.112652645 2.20485916E-15 0 2120670 0.112652645 5.113464E+07 +2122335.5 0 2122335.5 0.112652339 2.20485916E-15 0 2122335.5 0.112652339 5.113464E+07 +2124001 0 2124001 0.112652041 2.20486573E-15 0 2124001 0.112652041 5.113472E+07 +2125666.25 0 2125666.25 0.112652496 2.20486551E-15 0 2125666.25 0.112652496 51134716 +2127331.75 0 2127331.75 0.1126522 2.2048653E-15 0 2127331.75 0.1126522 51134716 +2128997 0 2128997 0.112652645 2.20485853E-15 0 2128997 0.112652645 5.113463E+07 +2130662.5 0 2130662.5 0.112652339 2.20485853E-15 0 2130662.5 0.112652339 5.113463E+07 +2132328 0 2132328 0.112652041 2.204865E-15 0 2132328 0.112652041 5.113471E+07 +2133993.25 0 2133993.25 0.112652496 2.20486488E-15 0 2133993.25 0.112652496 51134708 +2135658.75 0 2135658.75 0.11265219 2.20486467E-15 0 2135658.75 0.11265219 51134708 +2137324 0 2137324 0.112652645 2.20485789E-15 0 2137324 0.112652645 51134628 +2138989.5 0 2138989.5 0.112652339 2.204858E-15 0 2138989.5 0.112652339 51134628 +2140655 0 2140655 0.112652041 2.20486467E-15 0 2140655 0.112652041 51134708 +2142320.25 0 2142320.25 0.112652496 2.20486445E-15 0 2142320.25 0.112652496 51134704 +2143985.75 0 2143985.75 0.11265219 2.20486424E-15 0 2143985.75 0.11265219 5.11347E+07 +2145651 0 2145651 0.112652645 2.20485747E-15 0 2145651 0.112652645 5.113462E+07 +2147316.5 0 2147316.5 0.112652339 2.20485747E-15 0 2147316.5 0.112652339 5.113462E+07 +2148982 0 2148982 0.112652041 2.204864E-15 0 2148982 0.112652041 5.11347E+07 +2150647.25 0 2150647.25 0.112652496 2.204864E-15 0 2150647.25 0.112652496 5.11347E+07 +2152312.75 0 2152312.75 0.11265219 2.20486382E-15 0 2152312.75 0.11265219 51134696 +2153978 0 2153978 0.112652645 2.204857E-15 0 2153978 0.112652645 51134616 +2155643.5 0 2155643.5 0.112652339 2.20485725E-15 0 2155643.5 0.112652339 51134616 +2157309 0 2157309 0.112652041 2.20486382E-15 0 2157309 0.112652041 51134696 +2158974.25 0 2158974.25 0.112652496 2.20486361E-15 0 2158974.25 0.112652496 51134696 +2160639.75 0 2160639.75 0.11265219 2.2048634E-15 0 2160639.75 0.11265219 51134692 +2162305 0 2162305 0.112652645 2.20485683E-15 0 2162305 0.112652645 51134612 +2163970.5 1 2163970.5 0.112652339 2.20485683E-15 1 2163970.5 0.112652339 51134612 +2165636 0 2165636 0.112652041 2.2048634E-15 0 2165636 0.112652041 51134692 +2167301.25 0 2167301.25 0.112652496 2.2048634E-15 0 2167301.25 0.112652496 51134692 +2168966.75 0 2168966.75 0.11265219 2.20486318E-15 0 2168966.75 0.11265219 5.113469E+07 +2170632 0 2170632 0.112652645 2.20485641E-15 0 2170632 0.112652645 5.113461E+07 +2172297.5 0 2172297.5 0.112652332 2.20485662E-15 0 2172297.5 0.112652332 51134612 +2173963 0 2173963 0.112652041 2.20486318E-15 0 2173963 0.112652041 51134692 +2175628.25 0 2175628.25 0.112652496 2.20486318E-15 0 2175628.25 0.112652496 5.113469E+07 +2177293.75 0 2177293.75 0.11265219 2.204863E-15 0 2177293.75 0.11265219 5.113469E+07 +2178959 0 2178959 0.112652645 2.20485641E-15 0 2178959 0.112652645 5.113461E+07 +2180624.5 0 2180624.5 0.112652332 2.20485641E-15 0 2180624.5 0.112652332 5.113461E+07 +2182290 0 2182290 0.112652041 2.20486318E-15 0 2182290 0.112652041 5.113469E+07 +2183955.25 0 2183955.25 0.112652496 2.204863E-15 0 2183955.25 0.112652496 5.113469E+07 +2185620.75 0 2185620.75 0.11265219 2.204863E-15 0 2185620.75 0.11265219 51134684 +2187286 0 2187286 0.112652637 2.2048562E-15 0 2187286 0.112652637 51134604 +2188951.5 0 2188951.5 0.112652332 2.20485641E-15 0 2188951.5 0.112652332 5.113461E+07 +2190617 0 2190617 0.112652034 2.204863E-15 0 2190617 0.112652034 5.113469E+07 +2192282.25 0 2192282.25 0.112652496 2.204863E-15 0 2192282.25 0.112652496 5.113469E+07 +2193947.75 0 2193947.75 0.11265219 2.20486276E-15 0 2193947.75 0.11265219 51134684 +2195613 0 2195613 0.112652637 2.2048562E-15 0 2195613 0.112652637 51134604 +2197278.5 0 2197278.5 0.112652332 2.20485641E-15 0 2197278.5 0.112652332 5.113461E+07 +2198944 0 2198944 0.112652034 2.204863E-15 0 2198944 0.112652034 5.113469E+07 +2200609.25 0 2200609.25 0.112652488 2.204863E-15 0 2200609.25 0.112652488 5.113469E+07 +2202274.75 0 2202274.75 0.11265219 2.20486276E-15 0 2202274.75 0.11265219 51134684 +2203940 0 2203940 0.112652637 2.2048562E-15 0 2203940 0.112652637 51134604 +2205605.5 0 2205605.5 0.112652332 2.20485641E-15 0 2205605.5 0.112652332 5.113461E+07 +2207271 0 2207271 0.112652034 2.204863E-15 0 2207271 0.112652034 5.113469E+07 +2208936.25 0 2208936.25 0.112652488 2.204863E-15 0 2208936.25 0.112652488 5.113469E+07 +2210601.75 0 2210601.75 0.11265219 2.204863E-15 0 2210601.75 0.11265219 51134684 +2212267 0 2212267 0.112652637 2.2048562E-15 0 2212267 0.112652637 5.113461E+07 +2213932.5 0 2213932.5 0.112652332 2.20485641E-15 0 2213932.5 0.112652332 5.113461E+07 +2215598 0 2215598 0.112652034 2.20486318E-15 0 2215598 0.112652034 5.113469E+07 +2217263.25 0 2217263.25 0.112652488 2.204863E-15 0 2217263.25 0.112652488 5.113469E+07 +2218928.75 0 2218928.75 0.11265219 2.204863E-15 0 2218928.75 0.11265219 5.113469E+07 +2220594 0 2220594 0.112652637 2.20485641E-15 0 2220594 0.112652637 5.113461E+07 +2222259.5 0 2222259.5 0.112652332 2.20485662E-15 0 2222259.5 0.112652332 5.113461E+07 +2223925 0 2223925 0.112652034 2.20486318E-15 0 2223925 0.112652034 51134692 +2225590.25 0 2225590.25 0.112652488 2.20486318E-15 0 2225590.25 0.112652488 5.113469E+07 +2227255.75 0 2227255.75 0.112652183 2.20486318E-15 0 2227255.75 0.112652183 5.113469E+07 +2228921 0 2228921 0.112652637 2.20485641E-15 0 2228921 0.112652637 5.113461E+07 +2230586.5 0 2230586.5 0.112652332 2.20485662E-15 0 2230586.5 0.112652332 51134612 +2232252 0 2232252 0.112652034 2.2048634E-15 0 2232252 0.112652034 51134692 +2233917.25 0 2233917.25 0.112652488 2.2048634E-15 0 2233917.25 0.112652488 51134692 +2235582.75 0 2235582.75 0.112652183 2.20486318E-15 0 2235582.75 0.112652183 51134692 +2237248 0 2237248 0.112652637 2.20485662E-15 0 2237248 0.112652637 51134612 +2238913.5 0 2238913.5 0.112652332 2.20485683E-15 0 2238913.5 0.112652332 51134612 +2240579 0 2240579 0.112652034 2.20486361E-15 0 2240579 0.112652034 51134696 +2242244.25 0 2242244.25 0.112652488 2.2048634E-15 0 2242244.25 0.112652488 51134692 +2243909.75 0 2243909.75 0.112652183 2.2048634E-15 0 2243909.75 0.112652183 51134692 +2245575 0 2245575 0.112652637 2.20485683E-15 0 2245575 0.112652637 51134612 +2247240.5 0 2247240.5 0.112652332 2.204857E-15 0 2247240.5 0.112652332 51134616 +2248906 0 2248906 0.112652034 2.20486382E-15 0 2248906 0.112652034 51134696 +2250571.25 0 2250571.25 0.112652488 2.20486361E-15 0 2250571.25 0.112652488 51134696 +2252236.75 0 2252236.75 0.112652183 2.20486361E-15 0 2252236.75 0.112652183 51134696 +2253902 0 2253902 0.112652637 2.204857E-15 0 2253902 0.112652637 51134616 +2255567.5 0 2255567.5 0.112652332 2.20485725E-15 0 2255567.5 0.112652332 5.113462E+07 +2257233 0 2257233 0.112652034 2.204864E-15 0 2257233 0.112652034 5.11347E+07 +2258898.25 0 2258898.25 0.112652488 2.204864E-15 0 2258898.25 0.112652488 5.11347E+07 +2260563.75 0 2260563.75 0.112652183 2.20486382E-15 0 2260563.75 0.112652183 51134696 +2262229 0 2262229 0.112652637 2.20485725E-15 0 2262229 0.112652637 5.113462E+07 +2263894.5 0 2263894.5 0.112652332 2.20485747E-15 0 2263894.5 0.112652332 5.113462E+07 +2265560 0 2265560 0.112652034 2.20485768E-15 0 2265560 0.112652034 51134624 +2267225.25 0 2267225.25 0.112652496 2.20485789E-15 0 2267225.25 0.112652496 51134624 +2268890.75 0 2268890.75 0.11265219 2.204858E-15 0 2268890.75 0.11265219 51134628 +2270556 0 2270556 0.112652645 2.204858E-15 0 2270556 0.112652645 51134628 +2272221.5 0 2272221.5 0.112652332 2.20485831E-15 0 2272221.5 0.112652332 5.113463E+07 +2273887 0 2273887 0.112652034 2.20485853E-15 0 2273887 0.112652034 5.113463E+07 +2275552.25 0 2275552.25 0.112652496 2.20485874E-15 0 2275552.25 0.112652496 51134636 +2277217.75 0 2277217.75 0.11265219 2.20485874E-15 0 2277217.75 0.11265219 51134636 +2278883 0 2278883 0.112652645 2.204859E-15 0 2278883 0.112652645 51134636 +2280548.5 0 2280548.5 0.112652332 2.20485916E-15 0 2280548.5 0.112652332 5.113464E+07 +2282214 0 2282214 0.112652034 2.20485937E-15 0 2282214 0.112652034 51134644 +2283879.25 0 2283879.25 0.112652496 2.20485937E-15 0 2283879.25 0.112652496 51134644 +2285544.75 0 2285544.75 0.11265219 2.20485958E-15 0 2285544.75 0.11265219 51134644 +2287210 0 2287210 0.112652645 2.20485958E-15 0 2287210 0.112652645 5.113465E+07 +2288875.5 0 2288875.5 0.112652332 2.2048598E-15 0 2288875.5 0.112652332 5.113465E+07 +2290541 0 2290541 0.112652034 2.20486E-15 0 2290541 0.112652034 51134652 +2292206.25 0 2292206.25 0.112652496 2.20486E-15 0 2292206.25 0.112652496 51134652 +2293871.75 0 2293871.75 0.11265219 2.20486022E-15 0 2293871.75 0.11265219 51134652 +2295537 0 2295537 0.112652645 2.20486022E-15 0 2295537 0.112652645 51134656 +2297202.5 0 2297202.5 0.112652332 2.20486043E-15 0 2297202.5 0.112652332 51134656 +2298868 0 2298868 0.112652034 2.20486064E-15 0 2298868 0.112652034 5.113466E+07 +2300533.25 0 2300533.25 0.112652496 2.20486064E-15 0 2300533.25 0.112652496 5.113466E+07 +2302198.75 0 2302198.75 0.11265219 2.20486085E-15 0 2302198.75 0.11265219 5.113466E+07 +2303864 0 2303864 0.112652645 2.20486085E-15 0 2303864 0.112652645 5.113466E+07 +2305529.5 0 2305529.5 0.112652332 2.204861E-15 0 2305529.5 0.112652332 51134664 +2307195 0 2307195 0.112652034 2.204861E-15 0 2307195 0.112652034 51134664 +2308860.25 0 2308860.25 0.112652496 2.20486128E-15 0 2308860.25 0.112652496 51134664 +2310525.75 0 2310525.75 0.11265219 2.20486128E-15 0 2310525.75 0.11265219 51134668 +2312191 0 2312191 0.112652645 2.20486128E-15 0 2312191 0.112652645 51134668 +2313856.5 0 2313856.5 0.112652332 2.20486149E-15 0 2313856.5 0.112652332 51134668 +2315522 0 2315522 0.112652034 2.20486149E-15 0 2315522 0.112652034 5.113467E+07 +2317187.25 0 2317187.25 0.112652496 2.2048617E-15 0 2317187.25 0.112652496 5.113467E+07 +2318852.75 0 2318852.75 0.11265219 2.2048617E-15 0 2318852.75 0.11265219 5.113467E+07 +2320518 0 2320518 0.112652645 2.2048617E-15 0 2320518 0.112652645 5.113467E+07 +2322183.5 0 2322183.5 0.112652332 2.204862E-15 0 2322183.5 0.112652332 5.113467E+07 +2323849 0 2323849 0.112652034 2.204862E-15 0 2323849 0.112652034 51134676 +2325514.25 0 2325514.25 0.112652496 2.204862E-15 0 2325514.25 0.112652496 51134676 +2327179.75 0 2327179.75 0.11265219 2.204862E-15 0 2327179.75 0.11265219 51134676 +2328845 0 2328845 0.112652645 2.204862E-15 0 2328845 0.112652645 51134676 +2330510.5 1 2330510.5 0.112652332 2.20486213E-15 1 2330510.5 0.112652332 51134676 +2332176 0 2332176 0.112652034 2.20486213E-15 0 2332176 0.112652034 51134676 +2333841.25 0 2333841.25 0.112652496 2.20486234E-15 0 2333841.25 0.112652496 5.113468E+07 +2335506.75 0 2335506.75 0.11265219 2.20486234E-15 0 2335506.75 0.11265219 5.113468E+07 +2337172 0 2337172 0.112652645 2.20486234E-15 0 2337172 0.112652645 5.113468E+07 +2338837.5 0 2338837.5 0.112652332 2.20486234E-15 0 2338837.5 0.112652332 5.113468E+07 +2340503 0 2340503 0.112652034 2.20486234E-15 0 2340503 0.112652034 5.113468E+07 +2342168.25 0 2342168.25 0.112652496 2.20486234E-15 0 2342168.25 0.112652496 5.113468E+07 +2343833.75 0 2343833.75 0.11265219 2.20486234E-15 0 2343833.75 0.11265219 5.113468E+07 +2345499 0 2345499 0.112652645 2.20486234E-15 0 2345499 0.112652645 5.113468E+07 +2347164.5 0 2347164.5 0.112652332 2.20486255E-15 0 2347164.5 0.112652332 5.113468E+07 +2348830 0 2348830 0.112652034 2.20486255E-15 0 2348830 0.112652034 51134684 +2350495.25 0 2350495.25 0.112652496 2.20486255E-15 0 2350495.25 0.112652496 5.113468E+07 +2352160.75 0 2352160.75 0.11265219 2.20486255E-15 0 2352160.75 0.11265219 5.113468E+07 +2353826 0 2353826 0.112652645 2.20486255E-15 0 2353826 0.112652645 5.113468E+07 +2355491.5 0 2355491.5 0.112652332 2.20486255E-15 0 2355491.5 0.112652332 51134684 +2357157 0 2357157 0.112652034 2.20486255E-15 0 2357157 0.112652034 51134684 +2358822.25 0 2358822.25 0.112652496 2.20486255E-15 0 2358822.25 0.112652496 51134684 +2360487.75 0 2360487.75 0.11265219 2.20486255E-15 0 2360487.75 0.11265219 51134684 +2362153 0 2362153 0.112652645 2.20486255E-15 0 2362153 0.112652645 5.113468E+07 +2363818.5 0 2363818.5 0.112652332 2.20486255E-15 0 2363818.5 0.112652332 51134684 +2365484 0 2365484 0.112652034 2.20486276E-15 0 2365484 0.112652034 51134684 +2367149.25 0 2367149.25 0.112652496 2.20486255E-15 0 2367149.25 0.112652496 51134684 +2368814.75 0 2368814.75 0.11265219 2.20486255E-15 0 2368814.75 0.11265219 51134684 +2370480 0 2370480 0.112652645 2.20486255E-15 0 2370480 0.112652645 5.113468E+07 +2372145.5 0 2372145.5 0.112652332 2.20486255E-15 0 2372145.5 0.112652332 51134684 +2373811 0 2373811 0.112652034 2.20486255E-15 0 2373811 0.112652034 51134684 +2375476.25 0 2375476.25 0.112652496 2.20486255E-15 0 2375476.25 0.112652496 51134684 +2377141.75 0 2377141.75 0.11265219 2.20486255E-15 0 2377141.75 0.11265219 5.113468E+07 +2378807 0 2378807 0.112652645 2.20486255E-15 0 2378807 0.112652645 5.113468E+07 +2380472.5 0 2380472.5 0.112652332 2.20486255E-15 0 2380472.5 0.112652332 5.113468E+07 +2382138 0 2382138 0.112652034 2.20486255E-15 0 2382138 0.112652034 51134684 +2383803.25 0 2383803.25 0.112652496 2.20486255E-15 0 2383803.25 0.112652496 5.113468E+07 +2385468.75 0 2385468.75 0.11265219 2.20486255E-15 0 2385468.75 0.11265219 5.113468E+07 +2387134 0 2387134 0.112652645 2.20486234E-15 0 2387134 0.112652645 5.113468E+07 +2388799.5 0 2388799.5 0.112652332 2.20486234E-15 0 2388799.5 0.112652332 5.113468E+07 +2390465 0 2390465 0.112652034 2.20486255E-15 0 2390465 0.112652034 5.113468E+07 +2392130.25 0 2392130.25 0.112652496 2.20486234E-15 0 2392130.25 0.112652496 5.113468E+07 +2393795.75 0 2393795.75 0.11265219 2.20486234E-15 0 2393795.75 0.11265219 5.113468E+07 +2395461 0 2395461 0.112652645 2.20486234E-15 0 2395461 0.112652645 5.113468E+07 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidChangePoint-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidChangePoint-Schema.txt new file mode 100644 index 0000000000..2ac4990857 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidChangePoint-Schema.txt @@ -0,0 +1,54 @@ +---- BoundLoader ---- +1 columns: + Features: R4 +---- IidChangePointDetector ---- +2 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' +---- ConvertTransform ---- +3 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' +---- IidChangePointDetector ---- +4 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + Anomaly2: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' +---- ConvertTransform ---- +5 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + Anomaly2: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly2: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' +---- ChooseColumnsTransform ---- +3 columns: + Features: R4 + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' + fAnomaly2: Vec + Metadata 'SlotNames': Vec: Length=4, Count=4 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score', [3] 'Martingale Score' diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidSpike-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidSpike-Data.txt new file mode 100644 index 0000000000..5c33867c9d --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidSpike-Data.txt @@ -0,0 +1,1428 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Features:R4:0 +#@ col=fAnomaly:R4:1-3 +#@ col=fAnomaly2:R4:4-6 +#@ } +Features Alert Raw Score P-Value Score Alert Raw Score P-Value Score +7 3:0.5 6:0.5 +0.11 0 0.11 0.456204623 0 0.11 0.543795347 +0.111 0 0.111 0.257266462 0 0.111 0.742733538 +0.3333 0 0.3333 6.32245929E-06 0 0.3333 0.9999937 +0.4444 0 0.4444 0.04637583 0 0.4444 0.9536242 +0.111 0 0.111 0.627704442 0 0.111 0.3722956 +0.363 0 0.363 0.213761881 0 0.363 0.786238134 +0.413871437 0 0.413871437 0.189836681 0 0.413871437 0.8101633 +0.464742869 0 0.464742869 0.166525915 0 0.464742869 0.8334741 +0.5156143 0 0.5156143 0.147354573 0 0.5156143 0.852645457 +0.5664857 0 0.5664857 0.133305743 0 0.5664857 0.8666943 +0.617357135 0 0.617357135 0.1236946 0 0.617357135 0.8763054 +0.668228567 0 0.668228567 0.11735633 0 0.668228567 0.8826437 +0.7191 0 0.7191 0.113250025 0 0.7191 0.88675 +0.76997143 0 0.76997143 0.110613458 0 0.76997143 0.889386535 +0.820842862 0 0.820842862 0.108933933 0 0.820842862 0.8910661 +0.8717143 0 0.8717143 0.107878543 0 0.8717143 0.892121434 +0.9225857 0 0.9225857 0.107233316 0 0.9225857 0.892766654 +0.973457158 0 0.973457158 0.10686028 0 0.973457158 0.8931397 +1.02432859 0 1.02432859 0.106669575 0 1.02432859 0.893330455 +1.0752 0 1.0752 0.106601924 0 1.0752 0.8933981 +1.12607145 0 1.12607145 0.106617555 0 1.12607145 0.89338243 +1.17694283 0 1.17694283 0.106689692 0 1.17694283 0.8933103 +1.22781432 0 1.22781432 0.106799714 0 1.22781432 0.8932003 +1.27868569 0 1.27868569 0.106934905 0 1.27868569 0.8930651 +1.32955718 0 1.32955718 0.107086174 0 1.32955718 0.8929138 +1.38042855 0 1.38042855 0.107247278 0 1.38042855 0.8927527 +1.4313 0 1.4313 0.10741362 0 1.4313 0.8925864 +1.48217142 0 1.48217142 0.1075821 0 1.48217142 0.8924179 +1.53304291 0 1.53304291 0.107750386 0 1.53304291 0.892249644 +1.58391428 0 1.58391428 0.107916959 0 1.58391428 0.892083049 +1.63478577 0 1.63478577 0.108080626 0 1.63478577 0.8919194 +1.68565714 0 1.68565714 0.108240716 0 1.68565714 0.8917593 +1.73652852 0 1.73652852 0.108396679 0 1.73652852 0.8916033 +1.7874 0 1.7874 0.108548179 0 1.7874 0.891451836 +1.83827138 0 1.83827138 0.1086951 0 1.83827138 0.8913049 +1.88914287 0 1.88914287 0.108837292 0 1.88914287 0.8911627 +1.94001424 0 1.94001424 0.108974837 0 1.94001424 0.8910252 +1.99088573 0 1.99088573 0.1091077 0 1.99088573 0.8908923 +2.041757 0 2.041757 0.109236039 0 2.041757 0.890763938 +2.09262848 0 2.09262848 0.109359942 0 2.09262848 0.8906401 +2.1435 0 2.1435 0.109479472 0 2.1435 0.8905205 +2.19437146 0 2.19437146 0.109594889 0 2.19437146 0.8904051 +2.24524283 0 2.24524283 0.10970629 0 2.24524283 0.8902937 +2.29611421 0 2.29611421 0.109813809 0 2.29611421 0.8901862 +2.34698582 0 2.34698582 0.109917566 0 2.34698582 0.8900824 +2.39785719 0 2.39785719 0.1100178 0 2.39785719 0.8899822 +2.44872856 0 2.44872856 0.110114619 0 2.44872856 0.889885366 +2.4996 0 2.4996 0.110208154 0 2.4996 0.889791846 +2.55047154 0 2.55047154 0.110298507 0 2.55047154 0.8897015 +2.601343 0 2.601343 0.1103859 0 2.601343 0.8896141 +2.65221429 0 2.65221429 0.110470422 0 2.65221429 0.8895296 +2.70308566 0 2.70308566 0.110552184 0 2.70308566 0.8894478 +2.753957 0 2.753957 0.110631317 0 2.753957 0.8893687 +2.80482864 0 2.80482864 0.110707887 0 2.80482864 0.8892921 +2.8557 0 2.8557 0.110782087 0 2.8557 0.8892179 +2.90657139 0 2.90657139 0.110853978 0 2.90657139 0.88914603 +2.95744276 0 2.95744276 0.110923655 0 2.95744276 0.889076352 +3.00831437 0 3.00831437 0.110991172 0 3.00831437 0.8890088 +3.05918574 0 3.05918574 0.1110567 0 3.05918574 0.8889433 +3.110057 0 3.110057 0.111120284 0 3.110057 0.8888797 +3.16092849 0 3.16092849 0.111182004 0 3.16092849 0.888818 +3.2118 0 3.2118 0.111241892 0 3.2118 0.8887581 +3.26267147 0 3.26267147 0.1113001 0 3.26267147 0.8886999 +3.31354284 0 3.31354284 0.111356668 0 3.31354284 0.8886433 +3.36441422 0 3.36441422 0.111411653 0 3.36441422 0.888588369 +3.41528583 0 3.41528583 0.111465082 0 3.41528583 0.8885349 +3.4661572 0 3.4661572 0.111517087 0 3.4661572 0.8884829 +3.51702857 0 3.51702857 0.111567684 0 3.51702857 0.8884323 +3.5679 0 3.5679 0.111616932 0 3.5679 0.8883831 +3.61877131 0 3.61877131 0.111664884 0 3.61877131 0.8883351 +3.669643 0 3.669643 0.111711554 0 3.669643 0.888288438 +3.7205143 0 3.7205143 0.111757055 0 3.7205143 0.88824296 +3.77138567 0 3.77138567 0.111801393 0 3.77138567 0.8881986 +3.822257 0 3.822257 0.111844614 0 3.822257 0.8881554 +3.87312865 0 3.87312865 0.111886732 0 3.87312865 0.88811326 +3.924 0 3.924 0.111927837 0 3.924 0.888072133 +3.9748714 0 3.9748714 0.111967951 0 3.9748714 0.8880321 +4.025743 0 4.025743 0.112007059 0 4.025743 0.8879929 +4.07661438 0 4.07661438 0.112045273 0 4.07661438 0.8879547 +4.12748575 0 4.12748575 0.112082586 0 4.12748575 0.8879174 +4.178357 0 4.178357 0.112119026 0 4.178357 0.887881 +4.2292285 0 4.2292285 0.112154633 0 4.2292285 0.8878454 +4.2801 0 4.2801 0.11218942 0 4.2801 0.8878106 +4.33097124 0 4.33097124 0.112223424 0 4.33097124 0.887776554 +4.381843 0 4.381843 0.112256609 0 4.381843 0.8877434 +4.43271446 0 4.43271446 0.112289123 0 4.43271446 0.887710869 +4.483586 0 4.483586 0.112320922 0 4.483586 0.8876791 +4.534457 0 4.534457 0.112352036 0 4.534457 0.887648 +4.58532858 0 4.58532858 0.112382479 0 4.58532858 0.8876175 +4.6362 0 4.6362 0.112412281 0 4.6362 0.8875877 +4.68707132 0 4.68707132 0.11244145 0 4.68707132 0.8875586 +4.7379427 0 4.7379427 0.112470016 0 4.7379427 0.887529969 +4.788814 0 4.788814 0.112497985 0 4.788814 0.887502 +4.839686 0 4.839686 0.112525344 0 4.839686 0.887474656 +4.89055729 0 4.89055729 0.112552196 0 4.89055729 0.8874478 +4.94142866 0 4.94142866 0.112578511 0 4.94142866 0.8874215 +4.9923 0 4.9923 0.112604305 0 4.9923 0.8873957 +5.04317141 0 5.04317141 0.112629592 0 5.04317141 0.8873704 +5.094043 0 5.094043 0.112654388 0 5.094043 0.8873456 +5.144914 0 5.144914 0.112678707 0 5.144914 0.8873213 +5.19578552 0 5.19578552 0.112702556 0 5.19578552 0.887297451 +5.24665737 0 5.24665737 0.112725914 0 5.24665737 0.8872741 +5.29752874 0 5.29752874 0.112748876 0 5.29752874 0.887251139 +5.3484 0 5.3484 0.112771407 0 5.3484 0.8872286 +5.39927149 0 5.39927149 0.112793528 0 5.39927149 0.8872065 +5.450143 0 5.450143 0.112815246 0 5.450143 0.887184739 +5.501014 0 5.501014 0.11283657 0 5.501014 0.8871634 +5.5518856 0 5.5518856 0.112857513 0 5.5518856 0.8871425 +5.602757 0 5.602757 0.112878077 0 5.602757 0.8871219 +5.65362835 0 5.65362835 0.112898283 0 5.65362835 0.8871017 +5.7045 0 5.7045 0.112918094 0 5.7045 0.8870819 +5.75537157 0 5.75537157 0.1129376 0 5.75537157 0.8870624 +5.806243 0 5.806243 0.11295677 0 5.806243 0.887043238 +5.85711432 0 5.85711432 0.11297562 0 5.85711432 0.8870244 +5.90798569 0 5.90798569 0.112994142 0 5.90798569 0.887005866 +5.958857 0 5.958857 0.113012359 0 5.958857 0.8869876 +6.00972843 0 6.00972843 0.11303027 0 6.00972843 0.886969745 +6.0606 0 6.0606 0.11304789 0 6.0606 0.8869521 +6.11147165 0 6.11147165 0.113065176 0 6.11147165 0.8869348 +6.162343 0 6.162343 0.113082223 0 6.162343 0.88691777 +6.2132144 0 6.2132144 0.113098994 0 6.2132144 0.886901 +6.264086 0 6.264086 0.113115504 0 6.264086 0.8868845 +6.314957 0 6.314957 0.113131739 0 6.314957 0.886868238 +6.36582851 0 6.36582851 0.113147728 0 6.36582851 0.886852264 +6.4167 0 6.4167 0.113163464 0 6.4167 0.8868365 +6.46757126 0 6.46757126 0.113178954 0 6.46757126 0.886821032 +6.51844263 0 6.51844263 0.113194205 0 6.51844263 0.8868058 +6.56931448 0 6.56931448 0.113209188 0 6.56931448 0.8867908 +6.620186 0 6.620186 0.113223985 0 6.620186 0.88677603 +6.671057 0 6.671057 0.113238558 0 6.671057 0.8867614 +6.7219286 0 6.7219286 0.113252908 0 6.7219286 0.8867471 +6.7728 0 6.7728 0.113267049 0 6.7728 0.886732936 +6.82367134 0 6.82367134 0.113280974 0 6.82367134 0.886719048 +6.87454271 0 6.87454271 0.113294706 0 6.87454271 0.8867053 +6.925414 0 6.925414 0.113308229 0 6.925414 0.886691749 +6.976286 0 6.976286 0.113321528 0 6.976286 0.886678457 +7.02715731 0 7.02715731 0.113334671 0 7.02715731 0.886665344 +7.07802868 0 7.07802868 0.113347627 0 7.07802868 0.88665235 +7.1289 0 7.1289 0.1133604 0 7.1289 0.8866396 +7.17977142 0 7.17977142 0.113372989 0 7.17977142 0.886627 +7.230643 0 7.230643 0.113385409 0 7.230643 0.886614561 +7.281514 0 7.281514 0.113397658 0 7.281514 0.886602342 +7.33238554 0 7.33238554 0.113409735 0 7.33238554 0.886590242 +7.383257 0 7.383257 0.113421649 0 7.383257 0.8865784 +7.43412876 0 7.43412876 0.113433361 0 7.43412876 0.886566639 +7.485 0 7.485 0.113444962 0 7.485 0.886555 +7.53587151 0 7.53587151 0.1134564 0 7.53587151 0.886543632 +7.586743 0 7.586743 0.113467686 0 7.586743 0.8865323 +7.63761425 0 7.63761425 0.113478817 0 7.63761425 0.886521161 +7.68848562 0 7.68848562 0.113489814 0 7.68848562 0.8865102 +7.739357 0 7.739357 0.113500662 0 7.739357 0.886499345 +7.79022837 0 7.79022837 0.113511369 0 7.79022837 0.8864886 +7.8411 0 7.8411 0.113521904 0 7.8411 0.886478066 +7.89197159 0 7.89197159 0.113532342 0 7.89197159 0.886467636 +7.942843 0 7.942843 0.113542639 0 7.942843 0.8864574 +7.99371433 0 7.99371433 0.113552816 0 7.99371433 0.8864472 +8.044586 0 8.044586 0.11356283 0 8.044586 0.8864372 +8.095457 0 8.095457 0.113572776 0 8.095457 0.8864272 +8.146329 0 8.146329 0.113582544 0 8.146329 0.886417449 +8.1972 0 8.1972 0.113592245 0 8.1972 0.886407733 +8.248072 0 8.248072 0.113601774 0 8.248072 0.8863982 +8.298943 0 8.298943 0.113611244 0 8.298943 0.8863888 +8.349814 0 8.349814 0.113620542 0 8.349814 0.8863795 +8.400685 0 8.400685 0.113629781 0 8.400685 0.886370242 +8.451557 0 8.451557 0.113638856 0 8.451557 0.8863611 +8.502429 0 8.502429 0.113647826 0 8.502429 0.8863522 +8.5533 0 8.5533 0.113656744 0 8.5533 0.886343241 +8.604172 0 8.604172 0.1136655 0 8.604172 0.8863345 +8.655043 0 8.655043 0.113674209 0 8.655043 0.8863258 +8.7059145 0 8.7059145 0.113682762 0 8.7059145 0.886317253 +8.756785 0 8.756785 0.113691278 0 8.756785 0.8863087 +8.807657 0 8.807657 0.11369963 0 8.807657 0.8863004 +8.858528 0 8.858528 0.113707945 0 8.858528 0.88629204 +8.9094 0 8.9094 0.113716118 0 8.9094 0.8862839 +8.960272 0 8.960272 0.113724194 0 8.960272 0.8862758 +9.011143 0 9.011143 0.113732226 0 9.011143 0.8862678 +9.062015 0 9.062015 0.113740124 0 9.062015 0.886259854 +9.112885 0 9.112885 0.113747984 0 9.112885 0.886252 +9.163757 0 9.163757 0.11375571 0 9.163757 0.8862443 +9.214628 0 9.214628 0.113763392 0 9.214628 0.8862366 +9.2655 0 9.2655 0.113770947 0 9.2655 0.886229038 +9.316371 0 9.316371 0.113778472 0 9.316371 0.8862215 +9.367243 0 9.367243 0.113785855 0 9.367243 0.886214137 +9.418115 0 9.418115 0.113793172 0 9.418115 0.8862068 +9.468986 0 9.468986 0.113800451 0 9.468986 0.886199534 +9.519857 0 9.519857 0.1138076 0 9.519857 0.8861924 +9.570728 0 9.570728 0.113814734 0 9.570728 0.8861853 +9.6216 0 9.6216 0.113821737 0 9.6216 0.886178255 +9.672471 0 9.672471 0.113828719 0 9.672471 0.8861713 +9.723343 0 9.723343 0.113835581 0 9.723343 0.8861644 +9.774215 0 9.774215 0.113842368 0 9.774215 0.886157632 +9.825086 0 9.825086 0.113849133 0 9.825086 0.8861509 +9.87595749 0 9.87595749 0.113855779 0 9.87595749 0.8861442 +9.926828 0 9.926828 0.11386241 0 9.926828 0.8861376 +9.9777 0 9.9777 0.113868922 0 9.9777 0.886131048 +10.0285711 0 10.0285711 0.113875419 0 10.0285711 0.8861246 +10.079443 0 10.079443 0.1138818 0 10.079443 0.8861182 +10.1303139 0 10.1303139 0.113888167 0 10.1303139 0.886111856 +10.1811857 0 10.1811857 0.113894418 0 10.1811857 0.8861056 +10.2320576 0 10.2320576 0.113900617 0 10.2320576 0.8860994 +10.2829285 0 10.2829285 0.11388094 0 10.2829285 0.886119068 +10.3338 0 10.3338 0.113881171 0 10.3338 0.8861188 +10.3846712 0 10.3846712 0.113864474 0 10.3846712 0.8861355 +10.4355431 0 10.4355431 0.113905221 0 10.4355431 0.886094749 +10.486414 0 10.486414 0.113966189 0 10.486414 0.886033833 +10.5372858 0 10.5372858 0.113897361 0 10.5372858 0.8861026 +10.5881567 0 10.5881567 0.113897383 0 10.5881567 0.8861026 +10.6390285 0 10.6390285 0.113897368 0 10.6390285 0.8861026 +10.6899 0 10.6899 0.113897346 0 10.6899 0.8861027 +10.7407713 0 10.7407713 0.113897368 0 10.7407713 0.8861026 +10.7916431 0 10.7916431 0.113897353 0 10.7916431 0.8861027 +10.842514 0 10.842514 0.113897376 0 10.842514 0.8861026 +10.8933859 0 10.8933859 0.113897353 0 10.8933859 0.8861026 +10.9442568 0 10.9442568 0.113897383 0 10.9442568 0.8861026 +10.9951286 0 10.9951286 0.113897361 0 10.9951286 0.8861026 +11.046 0 11.046 0.113897391 0 11.046 0.8861026 +11.0968714 0 11.0968714 0.113897368 0 11.0968714 0.8861026 +11.1477432 0 11.1477432 0.113897346 0 11.1477432 0.8861027 +11.1986141 0 11.1986141 0.113897376 0 11.1986141 0.8861026 +11.249486 0 11.249486 0.113897353 0 11.249486 0.8861027 +11.3003569 0 11.3003569 0.113897376 0 11.3003569 0.8861026 +11.3512287 0 11.3512287 0.113897353 0 11.3512287 0.8861026 +11.4021 0 11.4021 0.113897383 0 11.4021 0.8861026 +11.4529715 0 11.4529715 0.113897361 0 11.4529715 0.8861026 +11.5038433 0 11.5038433 0.113897339 0 11.5038433 0.8861027 +11.5547142 0 11.5547142 0.113897368 0 11.5547142 0.8861026 +11.6055861 0 11.6055861 0.113897346 0 11.6055861 0.8861027 +11.6564569 0 11.6564569 0.113897376 0 11.6564569 0.8861026 +11.7073288 0 11.7073288 0.113897353 0 11.7073288 0.8861027 +11.7582 0 11.7582 0.113897383 0 11.7582 0.8861026 +11.8090715 0 11.8090715 0.113897361 0 11.8090715 0.8861026 +11.8599424 0 11.8599424 0.113897383 0 11.8599424 0.8861026 +11.9108143 0 11.9108143 0.113897361 0 11.9108143 0.8861026 +11.9616861 0 11.9616861 0.113897346 0 11.9616861 0.8861027 +12.012557 0 12.012557 0.113897368 0 12.012557 0.8861026 +12.0634289 0 12.0634289 0.113897346 0 12.0634289 0.8861027 +12.1143 0 12.1143 0.113897376 0 12.1143 0.8861026 +12.1651716 0 12.1651716 0.113897353 0 12.1651716 0.8861026 +12.2160425 0 12.2160425 0.113897383 0 12.2160425 0.8861026 +12.2669144 0 12.2669144 0.113897361 0 12.2669144 0.8861026 +12.3177853 0 12.3177853 0.113897383 0 12.3177853 0.8861026 +12.3686571 0 12.3686571 0.113897368 0 12.3686571 0.8861026 +12.419529 0 12.419529 0.113897346 0 12.419529 0.8861027 +12.4704 0 12.4704 0.113897368 0 12.4704 0.8861026 +12.5212717 0 12.5212717 0.113897353 0 12.5212717 0.8861027 +12.5721426 0 12.5721426 0.113897376 0 12.5721426 0.8861026 +12.6230145 0 12.6230145 0.113897353 0 12.6230145 0.8861026 +12.6738853 0 12.6738853 0.113897383 0 12.6738853 0.8861026 +12.7247572 0 12.7247572 0.113897361 0 12.7247572 0.8861026 +12.775629 0 12.775629 0.113897339 0 12.775629 0.8861027 +12.8265 0 12.8265 0.113897368 0 12.8265 0.8861026 +12.8773718 0 12.8773718 0.113897346 0 12.8773718 0.8861027 +12.9282427 0 12.9282427 0.113897376 0 12.9282427 0.8861026 +12.9791145 0 12.9791145 0.113897353 0 12.9791145 0.8861027 +13.0299854 0 13.0299854 0.113897376 0 13.0299854 0.8861026 +13.0808573 0 13.0808573 0.113897361 0 13.0808573 0.8861026 +13.1317282 0 13.1317282 0.113897383 0 13.1317282 0.8861026 +13.1826 0 13.1826 0.113897361 0 13.1826 0.8861026 +13.2334719 0 13.2334719 0.113897346 0 13.2334719 0.8861027 +13.2843428 0 13.2843428 0.113897368 0 13.2843428 0.8861026 +13.3352146 0 13.3352146 0.113897346 0 13.3352146 0.8861027 +13.3860855 0 13.3860855 0.113897376 0 13.3860855 0.8861026 +13.4369574 0 13.4369574 0.113897353 0 13.4369574 0.8861026 +13.4878283 0 13.4878283 0.113897383 0 13.4878283 0.8861026 +13.5387 0 13.5387 0.113897361 0 13.5387 0.8861026 +13.589571 0 13.589571 0.113897383 0 13.589571 0.8861026 +13.6404428 0 13.6404428 0.113897368 0 13.6404428 0.8861026 +13.6913147 0 13.6913147 0.113897346 0 13.6913147 0.8861027 +13.7421856 0 13.7421856 0.113897368 0 13.7421856 0.8861026 +13.7930574 0 13.7930574 0.113897353 0 13.7930574 0.8861027 +13.8439283 0 13.8439283 0.113897376 0 13.8439283 0.8861026 +13.8948 0 13.8948 0.113897353 0 13.8948 0.8861026 +13.9456711 0 13.9456711 0.113897383 0 13.9456711 0.8861026 +13.9965429 0 13.9965429 0.113897361 0 13.9965429 0.8861026 +14.0474138 0 14.0474138 0.113897383 0 14.0474138 0.8861026 +14.0982857 0 14.0982857 0.113897368 0 14.0982857 0.8861026 +14.1491575 0 14.1491575 0.113897346 0 14.1491575 0.8861027 +14.2000284 0 14.2000284 0.113897368 0 14.2000284 0.8861026 +14.2509 0 14.2509 0.113897353 0 14.2509 0.8861027 +14.3017712 0 14.3017712 0.113897376 0 14.3017712 0.8861026 +14.352643 0 14.352643 0.113897353 0 14.352643 0.8861026 +14.4035139 0 14.4035139 0.113897383 0 14.4035139 0.8861026 +14.4543858 0 14.4543858 0.113897361 0 14.4543858 0.8861026 +14.5052576 0 14.5052576 0.113897339 0 14.5052576 0.8861027 +14.5561285 0 14.5561285 0.113897368 0 14.5561285 0.8861026 +14.607 0 14.607 0.113897346 0 14.607 0.8861027 +14.6578712 0 14.6578712 0.113897376 0 14.6578712 0.8861026 +14.7087431 0 14.7087431 0.113897353 0 14.7087431 0.8861027 +14.759614 0 14.759614 0.113897376 0 14.759614 0.8861026 +14.8104858 0 14.8104858 0.113897361 0 14.8104858 0.8861026 +14.8613567 0 14.8613567 0.113897383 0 14.8613567 0.8861026 +14.9122286 0 14.9122286 0.113897361 0 14.9122286 0.8861026 +14.9631 0 14.9631 0.113897346 0 14.9631 0.8861027 +15.0139713 0 15.0139713 0.113897368 0 15.0139713 0.8861026 +15.0648432 0 15.0648432 0.113897346 0 15.0648432 0.8861027 +15.1157141 0 15.1157141 0.113897376 0 15.1157141 0.8861026 +15.1665859 0 15.1665859 0.113897353 0 15.1665859 0.8861026 +15.2174568 0 15.2174568 0.113897383 0 15.2174568 0.8861026 +15.2683287 0 15.2683287 0.113897361 0 15.2683287 0.8861026 +15.3192 0 15.3192 0.113897383 0 15.3192 0.8861026 +15.3700714 0 15.3700714 0.113897368 0 15.3700714 0.8861026 +15.4209433 0 15.4209433 0.113897346 0 15.4209433 0.8861027 +15.4718142 0 15.4718142 0.113897368 0 15.4718142 0.8861026 +15.522686 0 15.522686 0.113897353 0 15.522686 0.8861027 +15.5735569 0 15.5735569 0.113897376 0 15.5735569 0.8861026 +15.6244287 0 15.6244287 0.113897353 0 15.6244287 0.8861026 +15.6753 0 15.6753 0.113897383 0 15.6753 0.8861026 +15.7261715 0 15.7261715 0.113897361 0 15.7261715 0.8861026 +15.7770424 0 15.7770424 0.113897391 0 15.7770424 0.8861026 +15.8279142 0 15.8279142 0.113897368 0 15.8279142 0.8861026 +15.8787861 0 15.8787861 0.113897346 0 15.8787861 0.8861027 +15.929657 0 15.929657 0.113897376 0 15.929657 0.8861026 +15.9805288 0 15.9805288 0.113897353 0 15.9805288 0.8861027 +16.0314 0 16.0314 0.113897331 0 16.0314 0.8861027 +16.0822716 0 16.0822716 0.113897361 0 16.0822716 0.8861026 +16.1331425 0 16.1331425 0.113897383 0 16.1331425 0.8861026 +16.1840134 0 16.1840134 0.113897413 0 16.1840134 0.8861026 +16.2348862 0 16.2348862 0.113897339 0 16.2348862 0.8861027 +16.2857571 0 16.2857571 0.113897368 0 16.2857571 0.8861026 +16.336628 0 16.336628 0.113897391 0 16.336628 0.8861026 +16.3875 0 16.3875 0.113897324 0 16.3875 0.8861027 +16.4383717 0 16.4383717 0.113897353 0 16.4383717 0.8861027 +16.4892426 0 16.4892426 0.113897383 0 16.4892426 0.8861026 +16.5401134 0 16.5401134 0.113897406 0 16.5401134 0.8861026 +16.5909863 0 16.5909863 0.113897339 0 16.5909863 0.8861027 +16.6418571 0 16.6418571 0.113897361 0 16.6418571 0.8861026 +16.692728 0 16.692728 0.113897391 0 16.692728 0.8861026 +16.7436 0 16.7436 0.113897324 0 16.7436 0.8861027 +16.7944717 0 16.7944717 0.113897346 0 16.7944717 0.8861027 +16.8453426 0 16.8453426 0.113897376 0 16.8453426 0.8861026 +16.8962135 0 16.8962135 0.1138974 0 16.8962135 0.8861026 +16.9470863 0 16.9470863 0.113897331 0 16.9470863 0.8861027 +16.9979572 0 16.9979572 0.113897361 0 16.9979572 0.8861026 +17.0488281 0 17.0488281 0.113897383 0 17.0488281 0.8861026 +17.0997 0 17.0997 0.113897316 0 17.0997 0.8861027 +17.1505718 0 17.1505718 0.113897346 0 17.1505718 0.8861027 +17.2014427 0 17.2014427 0.113897368 0 17.2014427 0.8861026 +17.2523136 0 17.2523136 0.1138974 0 17.2523136 0.8861026 +17.3031864 0 17.3031864 0.113897331 0 17.3031864 0.8861027 +17.3540573 0 17.3540573 0.113897353 0 17.3540573 0.8861026 +17.4049282 0 17.4049282 0.113897383 0 17.4049282 0.8861026 +17.4558 0 17.4558 0.113897406 0 17.4558 0.8861026 +17.5066719 0 17.5066719 0.113897339 0 17.5066719 0.8861027 +17.5575428 0 17.5575428 0.113897368 0 17.5575428 0.8861026 +17.6084137 0 17.6084137 0.113897391 0 17.6084137 0.8861026 +17.6592865 0 17.6592865 0.113897324 0 17.6592865 0.8861027 +17.7101574 0 17.7101574 0.113897353 0 17.7101574 0.8861027 +17.7610283 0 17.7610283 0.113897376 0 17.7610283 0.8861026 +17.8119 0 17.8119 0.113897406 0 17.8119 0.8861026 +17.862772 0 17.862772 0.113897339 0 17.862772 0.8861027 +17.9136429 0 17.9136429 0.113897361 0 17.9136429 0.8861026 +17.9645138 0 17.9645138 0.113897391 0 17.9645138 0.8861026 +18.0153866 0 18.0153866 0.113897324 0 18.0153866 0.8861027 +18.0662575 0 18.0662575 0.113897346 0 18.0662575 0.8861027 +18.1171284 0 18.1171284 0.113897376 0 18.1171284 0.8861026 +18.168 0 18.168 0.1138974 0 18.168 0.8861026 +18.2188721 0 18.2188721 0.113897331 0 18.2188721 0.8861027 +18.269743 0 18.269743 0.113897361 0 18.269743 0.8861026 +18.3206139 0 18.3206139 0.113897383 0 18.3206139 0.8861026 +18.3714848 0 18.3714848 0.113897413 0 18.3714848 0.8861026 +18.4223576 0 18.4223576 0.113897346 0 18.4223576 0.8861027 +18.4732285 0 18.4732285 0.113897368 0 18.4732285 0.8861026 +18.5241 0 18.5241 0.1138974 0 18.5241 0.8861026 +18.5749722 0 18.5749722 0.113897331 0 18.5749722 0.8861027 +18.625843 0 18.625843 0.113897353 0 18.625843 0.8861026 +18.6767139 0 18.6767139 0.113897383 0 18.6767139 0.8861026 +18.7275848 0 18.7275848 0.113897406 0 18.7275848 0.8861026 +18.7784576 0 18.7784576 0.113897339 0 18.7784576 0.8861027 +18.8293285 0 18.8293285 0.113897368 0 18.8293285 0.8861026 +18.8802 0 18.8802 0.113897391 0 18.8802 0.8861026 +18.9310722 0 18.9310722 0.113897324 0 18.9310722 0.8861027 +18.9819431 0 18.9819431 0.113897353 0 18.9819431 0.8861027 +19.032814 0 19.032814 0.113897376 0 19.032814 0.8861026 +19.0836849 0 19.0836849 0.113897406 0 19.0836849 0.8861026 +19.1345577 0 19.1345577 0.113897331 0 19.1345577 0.8861027 +19.1854286 0 19.1854286 0.113897361 0 19.1854286 0.8861026 +19.2363 0 19.2363 0.113897391 0 19.2363 0.8861026 +19.2871723 0 19.2871723 0.113897316 0 19.2871723 0.8861027 +19.3380432 0 19.3380432 0.113897346 0 19.3380432 0.8861027 +19.3889141 0 19.3889141 0.113897376 0 19.3889141 0.8861026 +19.439785 0 19.439785 0.1138974 0 19.439785 0.8861026 +19.4906578 0 19.4906578 0.113897331 0 19.4906578 0.8861027 +19.5415287 0 19.5415287 0.113897361 0 19.5415287 0.8861026 +19.5924 0 19.5924 0.113897383 0 19.5924 0.8861026 +19.64327 0 19.64327 0.113897413 0 19.64327 0.8861026 +19.6941433 0 19.6941433 0.113897339 0 19.6941433 0.8861027 +19.7450142 0 19.7450142 0.113897368 0 19.7450142 0.8861026 +19.7958851 0 19.7958851 0.113897391 0 19.7958851 0.8861026 +19.8467579 0 19.8467579 0.113897324 0 19.8467579 0.8861027 +19.8976288 0 19.8976288 0.113897353 0 19.8976288 0.8861027 +19.9485 0 19.9485 0.113897376 0 19.9485 0.8861026 +19.99937 0 19.99937 0.113897406 0 19.99937 0.8861026 +20.0502434 0 20.0502434 0.113897339 0 20.0502434 0.8861027 +20.1011143 0 20.1011143 0.113897361 0 20.1011143 0.8861026 +20.1519852 0 20.1519852 0.113897391 0 20.1519852 0.8861026 +20.202858 0 20.202858 0.113897324 0 20.202858 0.8861027 +20.2537289 0 20.2537289 0.113897346 0 20.2537289 0.8861027 +20.3046 0 20.3046 0.113897376 0 20.3046 0.8861026 +20.35547 0 20.35547 0.1138974 0 20.35547 0.8861026 +20.4063435 0 20.4063435 0.113897331 0 20.4063435 0.8861027 +20.4572144 0 20.4572144 0.113897361 0 20.4572144 0.8861026 +20.5080853 0 20.5080853 0.113897383 0 20.5080853 0.8861026 +20.5589581 0 20.5589581 0.113897316 0 20.5589581 0.8861027 +20.6098289 0 20.6098289 0.113897346 0 20.6098289 0.8861027 +20.6607 0 20.6607 0.113897368 0 20.6607 0.8861026 +20.71157 0 20.71157 0.1138974 0 20.71157 0.8861026 +20.7624435 0 20.7624435 0.113897331 0 20.7624435 0.8861027 +20.8133144 0 20.8133144 0.113897353 0 20.8133144 0.8861026 +20.8641853 0 20.8641853 0.113897383 0 20.8641853 0.8861026 +20.9150562 0 20.9150562 0.113897406 0 20.9150562 0.8861026 +20.965929 0 20.965929 0.113897339 0 20.965929 0.8861027 +21.0168 0 21.0168 0.113897368 0 21.0168 0.8861026 +21.06767 0 21.06767 0.113897391 0 21.06767 0.8861026 +21.1185436 0 21.1185436 0.113897324 0 21.1185436 0.8861027 +21.1694145 0 21.1694145 0.113897353 0 21.1694145 0.8861027 +21.2202854 0 21.2202854 0.113897376 0 21.2202854 0.8861026 +21.2711563 0 21.2711563 0.113897406 0 21.2711563 0.8861026 +21.32203 0 21.32203 0.113897339 0 21.32203 0.8861027 +21.3729 0 21.3729 0.113897361 0 21.3729 0.8861026 +21.42377 0 21.42377 0.113897391 0 21.42377 0.8861026 +21.4746437 0 21.4746437 0.113897324 0 21.4746437 0.8861027 +21.5255146 0 21.5255146 0.113897346 0 21.5255146 0.8861027 +21.5763855 0 21.5763855 0.113897376 0 21.5763855 0.8861026 +21.6272564 0 21.6272564 0.1138974 0 21.6272564 0.8861026 +21.67813 0 21.67813 0.113897331 0 21.67813 0.8861027 +21.729 0 21.729 0.113897361 0 21.729 0.8861026 +21.779871 0 21.779871 0.113897383 0 21.779871 0.8861026 +21.8307438 0 21.8307438 0.113897316 0 21.8307438 0.8861027 +21.8816147 0 21.8816147 0.113897346 0 21.8816147 0.8861027 +21.9324856 0 21.9324856 0.113897368 0 21.9324856 0.8861026 +21.9833565 0 21.9833565 0.1138974 0 21.9833565 0.8861026 +22.03423 0 22.03423 0.113897331 0 22.03423 0.8861027 +22.0851 0 22.0851 0.113897353 0 22.0851 0.8861026 +22.1359711 0 22.1359711 0.113897383 0 22.1359711 0.8861026 +22.186842 0 22.186842 0.113897406 0 22.186842 0.8861026 +22.2377148 0 22.2377148 0.113897339 0 22.2377148 0.8861027 +22.2885857 0 22.2885857 0.113897368 0 22.2885857 0.8861026 +22.3394566 0 22.3394566 0.113897391 0 22.3394566 0.8861026 +22.39033 0 22.39033 0.113897324 0 22.39033 0.8861027 +22.4412 0 22.4412 0.113897353 0 22.4412 0.8861027 +22.4920712 0 22.4920712 0.113897376 0 22.4920712 0.8861026 +22.542942 0 22.542942 0.113897406 0 22.542942 0.8861026 +22.5938148 0 22.5938148 0.113897339 0 22.5938148 0.8861027 +22.6446857 0 22.6446857 0.113897361 0 22.6446857 0.8861026 +22.6955566 0 22.6955566 0.113897391 0 22.6955566 0.8861026 +22.74643 0 22.74643 0.113897324 0 22.74643 0.8861027 +22.7973 0 22.7973 0.113897346 0 22.7973 0.8861027 +22.8481712 0 22.8481712 0.113897376 0 22.8481712 0.8861026 +22.8990421 0 22.8990421 0.1138974 0 22.8990421 0.8861026 +22.9499149 0 22.9499149 0.113897331 0 22.9499149 0.8861027 +23.0007858 0 23.0007858 0.113897361 0 23.0007858 0.8861026 +23.0516567 0 23.0516567 0.113897383 0 23.0516567 0.8861026 +23.1025276 0 23.1025276 0.113897413 0 23.1025276 0.8861026 +23.1534 0 23.1534 0.113897346 0 23.1534 0.8861027 +23.2042713 0 23.2042713 0.113897368 0 23.2042713 0.8861026 +23.2551422 0 23.2551422 0.1138974 0 23.2551422 0.8861026 +23.306015 0 23.306015 0.113897331 0 23.306015 0.8861027 +23.3568859 0 23.3568859 0.113897353 0 23.3568859 0.8861026 +23.4077568 0 23.4077568 0.113897383 0 23.4077568 0.8861026 +23.4586277 0 23.4586277 0.113897406 0 23.4586277 0.8861026 +23.5095 0 23.5095 0.113897339 0 23.5095 0.8861027 +23.5603714 0 23.5603714 0.113897368 0 23.5603714 0.8861026 +23.6112423 0 23.6112423 0.113897391 0 23.6112423 0.8861026 +23.6621151 0 23.6621151 0.113897324 0 23.6621151 0.8861027 +23.712986 0 23.712986 0.113897353 0 23.712986 0.8861027 +23.7638569 0 23.7638569 0.113897376 0 23.7638569 0.8861026 +23.8147278 0 23.8147278 0.113897406 0 23.8147278 0.8861026 +23.8656 0 23.8656 0.113897331 0 23.8656 0.8861027 +23.9164715 0 23.9164715 0.113897361 0 23.9164715 0.8861026 +23.9673424 0 23.9673424 0.113897391 0 23.9673424 0.8861026 +24.0182152 0 24.0182152 0.113897316 0 24.0182152 0.8861027 +24.0690861 0 24.0690861 0.113897346 0 24.0690861 0.8861027 +24.119957 0 24.119957 0.113897376 0 24.119957 0.8861026 +24.1708279 0 24.1708279 0.1138974 0 24.1708279 0.8861026 +24.2217 0 24.2217 0.113897331 0 24.2217 0.8861027 +24.2725716 0 24.2725716 0.113897361 0 24.2725716 0.8861026 +24.3234425 0 24.3234425 0.113897383 0 24.3234425 0.8861026 +24.3743134 0 24.3743134 0.113897413 0 24.3743134 0.8861026 +24.4251862 0 24.4251862 0.113897339 0 24.4251862 0.8861027 +24.4760571 0 24.4760571 0.113897368 0 24.4760571 0.8861026 +24.5269279 0 24.5269279 0.113897391 0 24.5269279 0.8861026 +24.5778 0 24.5778 0.113897324 0 24.5778 0.8861027 +24.6286716 0 24.6286716 0.113897353 0 24.6286716 0.8861027 +24.6795425 0 24.6795425 0.113897376 0 24.6795425 0.8861026 +24.7304134 0 24.7304134 0.113897406 0 24.7304134 0.8861026 +24.7812862 0 24.7812862 0.113897339 0 24.7812862 0.8861027 +24.8321571 0 24.8321571 0.113897361 0 24.8321571 0.8861026 +24.883028 0 24.883028 0.113897391 0 24.883028 0.8861026 +24.9339 0 24.9339 0.113897324 0 24.9339 0.8861027 +24.9847717 0 24.9847717 0.113897346 0 24.9847717 0.8861027 +25.0356426 0 25.0356426 0.113897376 0 25.0356426 0.8861026 +25.0865135 0 25.0865135 0.1138974 0 25.0865135 0.8861026 +25.1373863 0 25.1373863 0.113897331 0 25.1373863 0.8861027 +25.1882572 0 25.1882572 0.113897361 0 25.1882572 0.8861026 +25.2391281 0 25.2391281 0.113897383 0 25.2391281 0.8861026 +25.29 0 25.29 0.113897316 0 25.29 0.8861027 +25.3408718 0 25.3408718 0.113897346 0 25.3408718 0.8861027 +25.3917427 0 25.3917427 0.113897368 0 25.3917427 0.8861026 +25.4426136 0 25.4426136 0.1138974 0 25.4426136 0.8861026 +25.4934864 0 25.4934864 0.113897331 0 25.4934864 0.8861027 +25.5443573 0 25.5443573 0.113897353 0 25.5443573 0.8861026 +25.5952282 0 25.5952282 0.113897383 0 25.5952282 0.8861026 +25.6461 0 25.6461 0.113897406 0 25.6461 0.8861026 +25.6969719 0 25.6969719 0.113897339 0 25.6969719 0.8861027 +25.7478428 0 25.7478428 0.113897368 0 25.7478428 0.8861026 +25.7987137 0 25.7987137 0.113897391 0 25.7987137 0.8861026 +25.8495865 0 25.8495865 0.113897324 0 25.8495865 0.8861027 +25.9004574 0 25.9004574 0.113897353 0 25.9004574 0.8861027 +25.9513283 0 25.9513283 0.113897376 0 25.9513283 0.8861026 +26.0022 0 26.0022 0.113897406 0 26.0022 0.8861026 +26.053072 0 26.053072 0.113897339 0 26.053072 0.8861027 +26.1039429 0 26.1039429 0.113897361 0 26.1039429 0.8861026 +26.1548138 0 26.1548138 0.113897391 0 26.1548138 0.8861026 +26.2056866 0 26.2056866 0.113897324 0 26.2056866 0.8861027 +26.2565575 0 26.2565575 0.113897346 0 26.2565575 0.8861027 +26.3074284 0 26.3074284 0.113897376 0 26.3074284 0.8861026 +26.3583 0 26.3583 0.1138974 0 26.3583 0.8861026 +26.4091721 0 26.4091721 0.113897331 0 26.4091721 0.8861027 +26.460043 0 26.460043 0.113897361 0 26.460043 0.8861026 +26.5109138 0 26.5109138 0.113897383 0 26.5109138 0.8861026 +26.5617867 0 26.5617867 0.113897316 0 26.5617867 0.8861027 +26.6126575 0 26.6126575 0.113897346 0 26.6126575 0.8861027 +26.6635284 0 26.6635284 0.113897368 0 26.6635284 0.8861026 +26.7144 0 26.7144 0.1138974 0 26.7144 0.8861026 +26.7652721 0 26.7652721 0.113897331 0 26.7652721 0.8861027 +26.816143 0 26.816143 0.113897353 0 26.816143 0.8861026 +26.8670139 0 26.8670139 0.113897383 0 26.8670139 0.8861026 +26.9178848 0 26.9178848 0.113897406 0 26.9178848 0.8861026 +26.9687576 0 26.9687576 0.113897339 0 26.9687576 0.8861027 +27.0196285 0 27.0196285 0.113897368 0 27.0196285 0.8861026 +27.0705 0 27.0705 0.113897391 0 27.0705 0.8861026 +27.1213722 0 27.1213722 0.113897324 0 27.1213722 0.8861027 +27.1722431 0 27.1722431 0.113897353 0 27.1722431 0.8861027 +27.223114 0 27.223114 0.113897376 0 27.223114 0.8861026 +27.2739849 0 27.2739849 0.113897406 0 27.2739849 0.8861026 +27.3248577 0 27.3248577 0.113897339 0 27.3248577 0.8861027 +27.3757286 0 27.3757286 0.113897361 0 27.3757286 0.8861026 +27.4266 0 27.4266 0.113897391 0 27.4266 0.8861026 +27.4774723 0 27.4774723 0.113897324 0 27.4774723 0.8861027 +27.5283432 0 27.5283432 0.113897346 0 27.5283432 0.8861027 +27.5792141 0 27.5792141 0.113897376 0 27.5792141 0.8861026 +27.630085 0 27.630085 0.1138974 0 27.630085 0.8861026 +27.6809578 0 27.6809578 0.113897331 0 27.6809578 0.8861027 +27.7318287 0 27.7318287 0.113897361 0 27.7318287 0.8861026 +27.7827 0 27.7827 0.113897383 0 27.7827 0.8861026 +27.83357 0 27.83357 0.113897413 0 27.83357 0.8861026 +27.8844433 0 27.8844433 0.113897346 0 27.8844433 0.8861027 +27.9353142 0 27.9353142 0.113897368 0 27.9353142 0.8861026 +27.9861851 0 27.9861851 0.1138974 0 27.9861851 0.8861026 +28.0370579 0 28.0370579 0.113897331 0 28.0370579 0.8861027 +28.0879288 0 28.0879288 0.113897353 0 28.0879288 0.8861026 +28.1388 0 28.1388 0.113897383 0 28.1388 0.8861026 +28.18967 0 28.18967 0.113897406 0 28.18967 0.8861026 +28.2405434 0 28.2405434 0.113897339 0 28.2405434 0.8861027 +28.2914143 0 28.2914143 0.113897368 0 28.2914143 0.8861026 +28.3422852 0 28.3422852 0.113897391 0 28.3422852 0.8861026 +28.393158 0 28.393158 0.113897324 0 28.393158 0.8861027 +28.4440289 0 28.4440289 0.113897353 0 28.4440289 0.8861027 +28.4949 0 28.4949 0.113897376 0 28.4949 0.8861026 +28.54577 0 28.54577 0.113897406 0 28.54577 0.8861026 +28.5966434 0 28.5966434 0.113897331 0 28.5966434 0.8861027 +28.6475143 0 28.6475143 0.113897361 0 28.6475143 0.8861026 +28.6983852 0 28.6983852 0.113897391 0 28.6983852 0.8861026 +28.749258 0 28.749258 0.113897316 0 28.749258 0.8861027 +28.8001289 0 28.8001289 0.113897346 0 28.8001289 0.8861027 +28.851 0 28.851 0.113897376 0 28.851 0.8861026 +28.90187 0 28.90187 0.1138974 0 28.90187 0.8861026 +28.9527435 0 28.9527435 0.113897331 0 28.9527435 0.8861027 +29.0036144 0 29.0036144 0.113897361 0 29.0036144 0.8861026 +29.0544853 0 29.0544853 0.113897383 0 29.0544853 0.8861026 +29.1053562 0 29.1053562 0.113897413 0 29.1053562 0.8861026 +29.156229 0 29.156229 0.113897339 0 29.156229 0.8861027 +29.2071 0 29.2071 0.113897368 0 29.2071 0.8861026 +29.25797 0 29.25797 0.113897391 0 29.25797 0.8861026 +29.3088436 0 29.3088436 0.113897324 0 29.3088436 0.8861027 +29.3597145 0 29.3597145 0.113897353 0 29.3597145 0.8861027 +29.4105854 0 29.4105854 0.113897376 0 29.4105854 0.8861026 +29.4614563 0 29.4614563 0.113897406 0 29.4614563 0.8861026 +29.51233 0 29.51233 0.113897339 0 29.51233 0.8861027 +29.5632 0 29.5632 0.113897361 0 29.5632 0.8861026 +29.61407 0 29.61407 0.113897391 0 29.61407 0.8861026 +29.6649437 0 29.6649437 0.113897324 0 29.6649437 0.8861027 +29.7158146 0 29.7158146 0.113897346 0 29.7158146 0.8861027 +29.7666855 0 29.7666855 0.113897376 0 29.7666855 0.8861026 +29.8175564 0 29.8175564 0.1138974 0 29.8175564 0.8861026 +29.86843 0 29.86843 0.113897331 0 29.86843 0.8861027 +29.9193 0 29.9193 0.113897361 0 29.9193 0.8861026 +29.970171 0 29.970171 0.113897383 0 29.970171 0.8861026 +30.0210438 0 30.0210438 0.113897316 0 30.0210438 0.8861027 +30.0719147 0 30.0719147 0.113897346 0 30.0719147 0.8861027 +30.1227856 0 30.1227856 0.113897368 0 30.1227856 0.8861026 +30.1736565 0 30.1736565 0.1138974 0 30.1736565 0.8861026 +30.22453 0 30.22453 0.113897331 0 30.22453 0.8861027 +30.2754 0 30.2754 0.113897353 0 30.2754 0.8861026 +30.3262711 0 30.3262711 0.113897383 0 30.3262711 0.8861026 +30.377142 0 30.377142 0.113897406 0 30.377142 0.8861026 +30.4280148 0 30.4280148 0.113897339 0 30.4280148 0.8861027 +30.4788857 0 30.4788857 0.113897368 0 30.4788857 0.8861026 +30.5297565 0 30.5297565 0.113897391 0 30.5297565 0.8861026 +30.58063 0 30.58063 0.113897324 0 30.58063 0.8861027 +30.6315 0 30.6315 0.113897353 0 30.6315 0.8861027 +30.6823711 0 30.6823711 0.113897376 0 30.6823711 0.8861026 +30.733242 0 30.733242 0.113897406 0 30.733242 0.8861026 +30.7841148 0 30.7841148 0.113897339 0 30.7841148 0.8861027 +30.8349857 0 30.8349857 0.113897361 0 30.8349857 0.8861026 +30.8858566 0 30.8858566 0.113897391 0 30.8858566 0.8861026 +30.93673 0 30.93673 0.113897324 0 30.93673 0.8861027 +30.9876 0 30.9876 0.113897346 0 30.9876 0.8861027 +31.0384712 0 31.0384712 0.113897376 0 31.0384712 0.8861026 +31.0893421 0 31.0893421 0.1138974 0 31.0893421 0.8861026 +31.1402149 0 31.1402149 0.113897331 0 31.1402149 0.8861027 +31.1910858 0 31.1910858 0.113897361 0 31.1910858 0.8861026 +31.2419567 0 31.2419567 0.113897383 0 31.2419567 0.8861026 +31.29283 0 31.29283 0.113897316 0 31.29283 0.8861027 +31.3437 0 31.3437 0.113897346 0 31.3437 0.8861027 +31.3945713 0 31.3945713 0.113897368 0 31.3945713 0.8861026 +31.4454422 0 31.4454422 0.1138974 0 31.4454422 0.8861026 +31.496315 0 31.496315 0.113897331 0 31.496315 0.8861027 +31.5471859 0 31.5471859 0.113897353 0 31.5471859 0.8861026 +31.5980568 0 31.5980568 0.113897383 0 31.5980568 0.8861026 +31.6489277 0 31.6489277 0.113897406 0 31.6489277 0.8861026 +31.6998 0 31.6998 0.113897339 0 31.6998 0.8861027 +31.7506714 0 31.7506714 0.113897368 0 31.7506714 0.8861026 +31.8015423 0 31.8015423 0.113897391 0 31.8015423 0.8861026 +31.8524151 0 31.8524151 0.113897324 0 31.8524151 0.8861027 +31.903286 0 31.903286 0.113897353 0 31.903286 0.8861027 +31.9541569 0 31.9541569 0.113897376 0 31.9541569 0.8861026 +32.0050278 0 32.0050278 0.113897406 0 32.0050278 0.8861026 +32.0559 0 32.0559 0.113897339 0 32.0559 0.8861027 +32.10677 0 32.10677 0.113897458 0 32.10677 0.886102557 +32.1576424 0 32.1576424 0.113897391 0 32.1576424 0.8861026 +32.2085152 0 32.2085152 0.113897316 0 32.2085152 0.8861027 +32.2593842 0 32.2593842 0.113897443 0 32.2593842 0.886102557 +32.310257 0 32.310257 0.113897368 0 32.310257 0.8861026 +32.36113 0 32.36113 0.1138973 0 32.36113 0.8861027 +32.412 0 32.412 0.11389742 0 32.412 0.886102557 +32.46287 0 32.46287 0.113897353 0 32.46287 0.8861026 +32.5137444 0 32.5137444 0.113897286 0 32.5137444 0.886102736 +32.5646133 0 32.5646133 0.113897406 0 32.5646133 0.8861026 +32.6154861 0 32.6154861 0.113897339 0 32.6154861 0.8861027 +32.66636 0 32.66636 0.113897271 0 32.66636 0.886102736 +32.7172279 0 32.7172279 0.1138974 0 32.7172279 0.8861026 +32.7681 0 32.7681 0.113897331 0 32.7681 0.8861027 +32.81897 0 32.81897 0.11389745 0 32.81897 0.886102557 +32.8698425 0 32.8698425 0.113897376 0 32.8698425 0.8861026 +32.9207153 0 32.9207153 0.113897309 0 32.9207153 0.8861027 +32.9715843 0 32.9715843 0.113897435 0 32.9715843 0.886102557 +33.0224571 0 33.0224571 0.113897361 0 33.0224571 0.8861026 +33.07333 0 33.07333 0.113897294 0 33.07333 0.8861027 +33.1242 0 33.1242 0.11389742 0 33.1242 0.886102557 +33.17507 0 33.17507 0.113897346 0 33.17507 0.8861027 +33.2259445 0 33.2259445 0.113897279 0 33.2259445 0.886102736 +33.2768135 0 33.2768135 0.113897406 0 33.2768135 0.8861026 +33.3276863 0 33.3276863 0.113897331 0 33.3276863 0.8861027 +33.3785553 0 33.3785553 0.113897458 0 33.3785553 0.886102557 +33.42943 0 33.42943 0.113897383 0 33.42943 0.8861026 +33.4803 0 33.4803 0.113897316 0 33.4803 0.8861027 +33.53117 0 33.53117 0.113897435 0 33.53117 0.886102557 +33.5820427 0 33.5820427 0.113897368 0 33.5820427 0.8861026 +33.6329155 0 33.6329155 0.1138973 0 33.6329155 0.8861027 +33.6837845 0 33.6837845 0.11389742 0 33.6837845 0.886102557 +33.7346573 0 33.7346573 0.113897353 0 33.7346573 0.8861026 +33.78553 0 33.78553 0.113897286 0 33.78553 0.886102736 +33.8364 0 33.8364 0.113897406 0 33.8364 0.8861026 +33.88727 0 33.88727 0.113897339 0 33.88727 0.8861027 +33.9381447 0 33.9381447 0.113897271 0 33.9381447 0.886102736 +33.9890137 0 33.9890137 0.1138974 0 33.9890137 0.8861026 +34.0398865 0 34.0398865 0.113897324 0 34.0398865 0.8861027 +34.0907555 0 34.0907555 0.11389745 0 34.0907555 0.886102557 +34.14163 0 34.14163 0.113897376 0 34.14163 0.8861026 +34.1925 0 34.1925 0.113897309 0 34.1925 0.8861027 +34.24337 0 34.24337 0.113897428 0 34.24337 0.886102557 +34.2942429 0 34.2942429 0.113897361 0 34.2942429 0.8861026 +34.3451157 0 34.3451157 0.113897294 0 34.3451157 0.8861027 +34.3959846 0 34.3959846 0.113897413 0 34.3959846 0.886102557 +34.4468575 0 34.4468575 0.113897346 0 34.4468575 0.8861027 +34.49773 0 34.49773 0.113897279 0 34.49773 0.886102736 +34.5486 0 34.5486 0.113897406 0 34.5486 0.8861026 +34.599472 0 34.599472 0.113897331 0 34.599472 0.8861027 +34.65034 0 34.65034 0.11389745 0 34.65034 0.886102557 +34.7012138 0 34.7012138 0.113897383 0 34.7012138 0.8861026 +34.7520866 0 34.7520866 0.113897316 0 34.7520866 0.8861027 +34.8029556 0 34.8029556 0.113897435 0 34.8029556 0.886102557 +34.85383 0 34.85383 0.113897368 0 34.85383 0.8861026 +34.9047 0 34.9047 0.1138973 0 34.9047 0.8861027 +34.95557 0 34.95557 0.11389742 0 34.95557 0.886102557 +35.006443 0 35.006443 0.113897353 0 35.006443 0.8861026 +35.0573158 0 35.0573158 0.113897286 0 35.0573158 0.886102736 +35.1081848 0 35.1081848 0.113897406 0 35.1081848 0.8861026 +35.1590576 0 35.1590576 0.113897339 0 35.1590576 0.8861027 +35.20993 0 35.20993 0.113897271 0 35.20993 0.886102736 +35.2608 0 35.2608 0.113897391 0 35.2608 0.8861026 +35.3116722 0 35.3116722 0.113897324 0 35.3116722 0.8861027 +35.36254 0 35.36254 0.113897443 0 35.36254 0.886102557 +35.413414 0 35.413414 0.113897376 0 35.413414 0.8861026 +35.4642868 0 35.4642868 0.113897309 0 35.4642868 0.8861027 +35.5151558 0 35.5151558 0.113897428 0 35.5151558 0.886102557 +35.56603 0 35.56603 0.113897361 0 35.56603 0.8861026 +35.6169 0 35.6169 0.113897294 0 35.6169 0.8861027 +35.66777 0 35.66777 0.113897413 0 35.66777 0.886102557 +35.7186432 0 35.7186432 0.113897346 0 35.7186432 0.8861027 +35.769516 0 35.769516 0.113897279 0 35.769516 0.886102736 +35.820385 0 35.820385 0.1138974 0 35.820385 0.8861026 +35.8712578 0 35.8712578 0.113897331 0 35.8712578 0.8861027 +35.9221268 0 35.9221268 0.11389745 0 35.9221268 0.886102557 +35.973 0 35.973 0.113897383 0 35.973 0.8861026 +36.0238724 0 36.0238724 0.113897316 0 36.0238724 0.8861027 +36.07474 0 36.07474 0.113897435 0 36.07474 0.886102557 +36.1256142 0 36.1256142 0.113897368 0 36.1256142 0.8861026 +36.176487 0 36.176487 0.1138973 0 36.176487 0.8861027 +36.227356 0 36.227356 0.11389742 0 36.227356 0.886102557 +36.27823 0 36.27823 0.113897353 0 36.27823 0.8861026 +36.3291 0 36.3291 0.113897286 0 36.3291 0.886102736 +36.37997 0 36.37997 0.113897406 0 36.37997 0.8861026 +36.4308434 0 36.4308434 0.113897339 0 36.4308434 0.8861027 +36.4817162 0 36.4817162 0.113897271 0 36.4817162 0.886102736 +36.5325851 0 36.5325851 0.113897391 0 36.5325851 0.8861026 +36.5834579 0 36.5834579 0.113897324 0 36.5834579 0.8861027 +36.6343269 0 36.6343269 0.113897443 0 36.6343269 0.886102557 +36.6852 0 36.6852 0.113897376 0 36.6852 0.8861026 +36.7360725 0 36.7360725 0.113897309 0 36.7360725 0.8861027 +36.78694 0 36.78694 0.113897428 0 36.78694 0.886102557 +36.8378143 0 36.8378143 0.113897361 0 36.8378143 0.8861026 +36.8886871 0 36.8886871 0.113897294 0 36.8886871 0.8861027 +36.9395561 0 36.9395561 0.113897413 0 36.9395561 0.886102557 +36.99043 0 36.99043 0.113897346 0 36.99043 0.8861027 +37.0413 0 37.0413 0.113897279 0 37.0413 0.886102736 +37.09217 0 37.09217 0.113897406 0 37.09217 0.8861026 +37.1430435 0 37.1430435 0.113897331 0 37.1430435 0.8861027 +37.1939125 0 37.1939125 0.11389745 0 37.1939125 0.886102557 +37.2447853 0 37.2447853 0.113897383 0 37.2447853 0.8861026 +37.29566 0 37.29566 0.113897316 0 37.29566 0.8861027 +37.3465271 0 37.3465271 0.113897435 0 37.3465271 0.886102557 +37.3974 0 37.3974 0.113897368 0 37.3974 0.8861026 +37.4482727 0 37.4482727 0.1138973 0 37.4482727 0.8861027 +37.49914 0 37.49914 0.11389742 0 37.49914 0.886102557 +37.5500145 0 37.5500145 0.113897353 0 37.5500145 0.8861026 +37.6008873 0 37.6008873 0.113897286 0 37.6008873 0.886102736 +37.6517563 0 37.6517563 0.113897406 0 37.6517563 0.8861026 +37.70263 0 37.70263 0.113897339 0 37.70263 0.8861027 +37.7535 0 37.7535 0.113897271 0 37.7535 0.886102736 +37.80437 0 37.80437 0.1138974 0 37.80437 0.8861026 +37.8552437 0 37.8552437 0.113897324 0 37.8552437 0.8861027 +37.9061127 0 37.9061127 0.11389745 0 37.9061127 0.886102557 +37.9569855 0 37.9569855 0.113897376 0 37.9569855 0.8861026 +38.00786 0 38.00786 0.113897309 0 38.00786 0.8861027 +38.0587273 0 38.0587273 0.113897428 0 38.0587273 0.886102557 +38.1096 0 38.1096 0.113897361 0 38.1096 0.8861026 +38.1604729 0 38.1604729 0.113897294 0 38.1604729 0.8861027 +38.21134 0 38.21134 0.113897413 0 38.21134 0.886102557 +38.2622147 0 38.2622147 0.113897346 0 38.2622147 0.8861027 +38.3130875 0 38.3130875 0.113897279 0 38.3130875 0.886102736 +38.3639565 0 38.3639565 0.113897406 0 38.3639565 0.8861026 +38.41483 0 38.41483 0.113897331 0 38.41483 0.8861027 +38.4657 0 38.4657 0.113897458 0 38.4657 0.886102557 +38.51657 0 38.51657 0.113897383 0 38.51657 0.8861026 +38.5674438 0 38.5674438 0.113897316 0 38.5674438 0.8861027 +38.6183128 0 38.6183128 0.113897435 0 38.6183128 0.886102557 +38.6691856 0 38.6691856 0.113897368 0 38.6691856 0.8861026 +38.72006 0 38.72006 0.1138973 0 38.72006 0.8861027 +38.7709274 0 38.7709274 0.11389742 0 38.7709274 0.886102557 +38.8218 0 38.8218 0.113897353 0 38.8218 0.8861026 +38.872673 0 38.872673 0.113897286 0 38.872673 0.886102736 +38.923542 0 38.923542 0.113897406 0 38.923542 0.8861026 +38.9744148 0 38.9744148 0.113897339 0 38.9744148 0.8861027 +39.0252838 0 39.0252838 0.113897458 0 39.0252838 0.886102557 +39.0761566 0 39.0761566 0.113897391 0 39.0761566 0.8861026 +39.12703 0 39.12703 0.113897324 0 39.12703 0.8861027 +39.1779 0 39.1779 0.113897443 0 39.1779 0.886102557 +39.22877 0 39.22877 0.113897376 0 39.22877 0.8861026 +39.279644 0 39.279644 0.113897309 0 39.279644 0.8861027 +39.330513 0 39.330513 0.113897428 0 39.330513 0.886102557 +39.3813858 0 39.3813858 0.113897361 0 39.3813858 0.8861026 +39.43226 0 39.43226 0.113897294 0 39.43226 0.886102736 +39.4831276 0 39.4831276 0.113897413 0 39.4831276 0.8861026 +39.534 0 39.534 0.113897346 0 39.534 0.8861027 +39.5848732 0 39.5848732 0.113897279 0 39.5848732 0.886102736 +39.6357422 0 39.6357422 0.1138974 0 39.6357422 0.8861026 +39.686615 0 39.686615 0.113897331 0 39.686615 0.8861027 +39.737484 0 39.737484 0.11389745 0 39.737484 0.886102557 +39.7883568 0 39.7883568 0.113897383 0 39.7883568 0.8861026 +39.83923 0 39.83923 0.113897316 0 39.83923 0.8861027 +39.8901 0 39.8901 0.113897435 0 39.8901 0.886102557 +39.94097 0 39.94097 0.113897368 0 39.94097 0.8861026 +39.9918442 0 39.9918442 0.1138973 0 39.9918442 0.8861027 +40.0427132 0 40.0427132 0.11389742 0 40.0427132 0.886102557 +40.093586 0 40.093586 0.113897353 0 40.093586 0.8861027 +40.14446 0 40.14446 0.113897286 0 40.14446 0.886102736 +40.1953278 0 40.1953278 0.113897406 0 40.1953278 0.8861026 +40.2462 0 40.2462 0.113897339 0 40.2462 0.8861027 +40.29707 0 40.29707 0.113897458 0 40.29707 0.886102557 +40.3479424 0 40.3479424 0.113897391 0 40.3479424 0.8861026 +40.3988152 0 40.3988152 0.113897324 0 40.3988152 0.8861027 +40.4496841 0 40.4496841 0.113897443 0 40.4496841 0.886102557 +40.5005569 0 40.5005569 0.113897376 0 40.5005569 0.8861026 +40.55143 0 40.55143 0.1138973 0 40.55143 0.8861027 +40.6023 0 40.6023 0.113897428 0 40.6023 0.886102557 +40.65317 0 40.65317 0.113897353 0 40.65317 0.8861026 +40.7040443 0 40.7040443 0.113897286 0 40.7040443 0.886102736 +40.7549133 0 40.7549133 0.113897413 0 40.7549133 0.8861026 +40.8057861 0 40.8057861 0.113897346 0 40.8057861 0.8861027 +40.85666 0 40.85666 0.113897279 0 40.85666 0.886102736 +40.9075279 0 40.9075279 0.1138974 0 40.9075279 0.8861026 +40.9584 0 40.9584 0.113897331 0 40.9584 0.8861027 +41.00927 0 41.00927 0.11389745 0 41.00927 0.886102557 +41.0601425 0 41.0601425 0.113897383 0 41.0601425 0.8861026 +41.1110153 0 41.1110153 0.113897309 0 41.1110153 0.8861027 +41.1618843 0 41.1618843 0.113897435 0 41.1618843 0.886102557 +41.2127571 0 41.2127571 0.113897361 0 41.2127571 0.8861026 +41.26363 0 41.26363 0.113897294 0 41.26363 0.8861027 +41.3145 0 41.3145 0.11389742 0 41.3145 0.886102557 +41.36537 0 41.36537 0.113897346 0 41.36537 0.8861027 +41.4162445 0 41.4162445 0.113897286 0 41.4162445 0.886102736 +41.4671135 0 41.4671135 0.113897406 0 41.4671135 0.8861026 +41.5179863 0 41.5179863 0.113897339 0 41.5179863 0.8861027 +41.5688553 0 41.5688553 0.113897458 0 41.5688553 0.886102557 +41.6197281 0 41.6197281 0.113897383 0 41.6197281 0.8861026 +41.6706 0 41.6706 0.113897316 0 41.6706 0.8861027 +41.72147 0 41.72147 0.113897443 0 41.72147 0.886102557 +41.7723427 0 41.7723427 0.113897368 0 41.7723427 0.8861026 +41.8232155 0 41.8232155 0.1138973 0 41.8232155 0.8861027 +41.8740845 0 41.8740845 0.11389742 0 41.8740845 0.886102557 +41.9249573 0 41.9249573 0.113897353 0 41.9249573 0.8861026 +41.97583 0 41.97583 0.113897286 0 41.97583 0.886102736 +42.0267 0 42.0267 0.113897406 0 42.0267 0.8861026 +42.07757 0 42.07757 0.113897339 0 42.07757 0.8861027 +42.1284447 0 42.1284447 0.113897271 0 42.1284447 0.886102736 +42.1793137 0 42.1793137 0.1138974 0 42.1793137 0.8861026 +42.2301865 0 42.2301865 0.113897331 0 42.2301865 0.8861027 +42.2810555 0 42.2810555 0.11389745 0 42.2810555 0.886102557 +42.33193 0 42.33193 0.113897376 0 42.33193 0.8861026 +42.3828 0 42.3828 0.113897309 0 42.3828 0.8861027 +42.43367 0 42.43367 0.113897428 0 42.43367 0.886102557 +42.4845428 0 42.4845428 0.113897361 0 42.4845428 0.8861026 +42.5354156 0 42.5354156 0.113897294 0 42.5354156 0.8861027 +42.5862846 0 42.5862846 0.113897413 0 42.5862846 0.886102557 +42.6371574 0 42.6371574 0.113897346 0 42.6371574 0.8861027 +42.68803 0 42.68803 0.113897279 0 42.68803 0.886102736 +42.7389 0 42.7389 0.113897406 0 42.7389 0.8861026 +42.789772 0 42.789772 0.113897331 0 42.789772 0.8861027 +42.84064 0 42.84064 0.11389745 0 42.84064 0.886102557 +42.8915138 0 42.8915138 0.113897383 0 42.8915138 0.8861026 +42.9423866 0 42.9423866 0.113897316 0 42.9423866 0.8861027 +42.9932556 0 42.9932556 0.113897435 0 42.9932556 0.886102557 +43.04413 0 43.04413 0.113897368 0 43.04413 0.8861026 +43.095 0 43.095 0.1138973 0 43.095 0.8861027 +43.14587 0 43.14587 0.11389742 0 43.14587 0.886102557 +43.196743 0 43.196743 0.113897353 0 43.196743 0.8861027 +43.2476158 0 43.2476158 0.113897286 0 43.2476158 0.886102736 +43.2984848 0 43.2984848 0.113897406 0 43.2984848 0.8861026 +43.3493576 0 43.3493576 0.113897339 0 43.3493576 0.8861027 +43.40023 0 43.40023 0.113897271 0 43.40023 0.886102736 +43.4511 0 43.4511 0.113897391 0 43.4511 0.8861026 +43.5019722 0 43.5019722 0.113897324 0 43.5019722 0.8861027 +43.55284 0 43.55284 0.113897443 0 43.55284 0.886102557 +43.603714 0 43.603714 0.113897376 0 43.603714 0.8861026 +43.6545868 0 43.6545868 0.113897309 0 43.6545868 0.8861027 +43.7054558 0 43.7054558 0.113897428 0 43.7054558 0.886102557 +43.75633 0 43.75633 0.113897361 0 43.75633 0.8861026 +43.8072 0 43.8072 0.113897294 0 43.8072 0.8861027 +43.85807 0 43.85807 0.113897413 0 43.85807 0.886102557 +43.9089432 0 43.9089432 0.113897346 0 43.9089432 0.8861027 +43.959816 0 43.959816 0.113897279 0 43.959816 0.886102736 +44.010685 0 44.010685 0.1138974 0 44.010685 0.8861026 +44.0615578 0 44.0615578 0.113897331 0 44.0615578 0.8861027 +44.1124268 0 44.1124268 0.11389745 0 44.1124268 0.886102557 +44.1633 0 44.1633 0.113897383 0 44.1633 0.8861026 +44.2141724 0 44.2141724 0.113897316 0 44.2141724 0.8861027 +44.26504 0 44.26504 0.113897435 0 44.26504 0.886102557 +44.3159142 0 44.3159142 0.113897368 0 44.3159142 0.8861026 +44.366787 0 44.366787 0.1138973 0 44.366787 0.8861027 +44.4176559 0 44.4176559 0.11389742 0 44.4176559 0.886102557 +44.46853 0 44.46853 0.113897353 0 44.46853 0.8861027 +44.5194 0 44.5194 0.113897286 0 44.5194 0.886102736 +44.57027 0 44.57027 0.113897406 0 44.57027 0.8861026 +44.6211433 0 44.6211433 0.113897339 0 44.6211433 0.8861027 +44.6720161 0 44.6720161 0.113897271 0 44.6720161 0.886102736 +44.7228851 0 44.7228851 0.113897391 0 44.7228851 0.8861026 +44.7737579 0 44.7737579 0.113897324 0 44.7737579 0.8861027 +44.8246269 0 44.8246269 0.113897443 0 44.8246269 0.886102557 +44.8755 0 44.8755 0.113897376 0 44.8755 0.8861026 +44.9263725 0 44.9263725 0.113897309 0 44.9263725 0.8861027 +44.97724 0 44.97724 0.113897428 0 44.97724 0.886102557 +45.0281143 0 45.0281143 0.113897361 0 45.0281143 0.8861026 +45.0789871 0 45.0789871 0.113897294 0 45.0789871 0.8861027 +45.1298561 0 45.1298561 0.113897413 0 45.1298561 0.886102557 +45.18073 0 45.18073 0.113897346 0 45.18073 0.8861027 +45.2316 0 45.2316 0.113897279 0 45.2316 0.886102736 +45.28247 0 45.28247 0.1138974 0 45.28247 0.8861026 +45.3333435 0 45.3333435 0.113897331 0 45.3333435 0.8861027 +45.3842125 0 45.3842125 0.11389745 0 45.3842125 0.886102557 +45.4350853 0 45.4350853 0.113897383 0 45.4350853 0.8861026 +45.48596 0 45.48596 0.113897316 0 45.48596 0.8861027 +45.5368271 0 45.5368271 0.113897435 0 45.5368271 0.886102557 +45.5877 0 45.5877 0.113897368 0 45.5877 0.8861026 +45.6385727 0 45.6385727 0.1138973 0 45.6385727 0.8861027 +45.68944 0 45.68944 0.11389742 0 45.68944 0.886102557 +45.7403145 0 45.7403145 0.113897353 0 45.7403145 0.8861027 +45.7911873 0 45.7911873 0.113897286 0 45.7911873 0.886102736 +45.8420563 0 45.8420563 0.113897406 0 45.8420563 0.8861026 +45.89293 0 45.89293 0.113897339 0 45.89293 0.8861027 +45.9438 0 45.9438 0.113897271 0 45.9438 0.886102736 +45.99467 0 45.99467 0.1138974 0 45.99467 0.8861026 +46.0455437 0 46.0455437 0.113897324 0 46.0455437 0.8861027 +46.0964127 0 46.0964127 0.11389745 0 46.0964127 0.886102557 +46.1472855 0 46.1472855 0.113897376 0 46.1472855 0.8861026 +46.19816 0 46.19816 0.113897309 0 46.19816 0.8861027 +46.2490273 0 46.2490273 0.113897428 0 46.2490273 0.886102557 +46.2999 0 46.2999 0.113897361 0 46.2999 0.8861026 +46.3507729 0 46.3507729 0.113897294 0 46.3507729 0.8861027 +46.40164 0 46.40164 0.113897413 0 46.40164 0.886102557 +46.4525146 0 46.4525146 0.113897346 0 46.4525146 0.8861027 +46.5033875 0 46.5033875 0.113897279 0 46.5033875 0.886102736 +46.5542564 0 46.5542564 0.1138974 0 46.5542564 0.8861026 +46.60513 0 46.60513 0.113897331 0 46.60513 0.8861027 +46.656 0 46.656 0.11389745 0 46.656 0.886102557 +46.70687 0 46.70687 0.113897383 0 46.70687 0.8861026 +46.7577438 0 46.7577438 0.113897316 0 46.7577438 0.8861027 +46.8086128 0 46.8086128 0.113897435 0 46.8086128 0.886102557 +46.8594856 0 46.8594856 0.113897368 0 46.8594856 0.8861026 +46.91036 0 46.91036 0.1138973 0 46.91036 0.8861027 +46.9612274 0 46.9612274 0.11389742 0 46.9612274 0.886102557 +47.0121 0 47.0121 0.113897353 0 47.0121 0.8861026 +47.062973 0 47.062973 0.113897286 0 47.062973 0.886102736 +47.113842 0 47.113842 0.113897406 0 47.113842 0.8861026 +47.1647148 0 47.1647148 0.113897339 0 47.1647148 0.8861027 +47.2155876 0 47.2155876 0.113897271 0 47.2155876 0.886102736 +47.2664566 0 47.2664566 0.1138974 0 47.2664566 0.8861026 +47.31733 0 47.31733 0.113897331 0 47.31733 0.8861027 +47.3682 0 47.3682 0.11389745 0 47.3682 0.886102557 +47.41907 0 47.41907 0.113897376 0 47.41907 0.8861026 +47.469944 0 47.469944 0.113897309 0 47.469944 0.8861027 +47.520813 0 47.520813 0.113897428 0 47.520813 0.886102557 +47.5716858 0 47.5716858 0.113897361 0 47.5716858 0.8861026 +47.62256 0 47.62256 0.113897294 0 47.62256 0.8861027 +47.6734276 0 47.6734276 0.113897413 0 47.6734276 0.886102557 +47.7243 0 47.7243 0.113897346 0 47.7243 0.8861027 +47.7751732 0 47.7751732 0.113897279 0 47.7751732 0.886102736 +47.8260422 0 47.8260422 0.113897406 0 47.8260422 0.8861026 +47.876915 0 47.876915 0.113897331 0 47.876915 0.8861027 +47.927784 0 47.927784 0.113897458 0 47.927784 0.886102557 +47.9786568 0 47.9786568 0.113897383 0 47.9786568 0.8861026 +48.02953 0 48.02953 0.113897316 0 48.02953 0.8861027 +48.0804 0 48.0804 0.113897435 0 48.0804 0.886102557 +48.13127 0 48.13127 0.113897368 0 48.13127 0.8861026 +48.1821442 0 48.1821442 0.1138973 0 48.1821442 0.8861027 +48.2330132 0 48.2330132 0.11389742 0 48.2330132 0.886102557 +48.283886 0 48.283886 0.113897353 0 48.283886 0.8861026 +48.33476 0 48.33476 0.113897286 0 48.33476 0.886102736 +48.3856277 0 48.3856277 0.113897413 0 48.3856277 0.8861026 +48.4365 0 48.4365 0.113897339 0 48.4365 0.8861027 +48.48737 0 48.48737 0.113897458 0 48.48737 0.886102557 +48.5382423 0 48.5382423 0.113897391 0 48.5382423 0.8861026 +48.5891151 0 48.5891151 0.113897324 0 48.5891151 0.8861027 +48.6399841 0 48.6399841 0.113897443 0 48.6399841 0.886102557 +48.6908569 0 48.6908569 0.113897376 0 48.6908569 0.8861026 +48.74173 0 48.74173 0.113897309 0 48.74173 0.8861027 +48.7926 0 48.7926 0.113897428 0 48.7926 0.886102557 +48.84347 0 48.84347 0.113897361 0 48.84347 0.8861026 +48.8943443 0 48.8943443 0.113897294 0 48.8943443 0.886102736 +48.9452133 0 48.9452133 0.113897413 0 48.9452133 0.886102557 +48.9960861 0 48.9960861 0.113897346 0 48.9960861 0.8861027 +49.04696 0 49.04696 0.113897279 0 49.04696 0.886102736 +49.0978279 0 49.0978279 0.1138974 0 49.0978279 0.8861026 +49.1487 0 49.1487 0.113897331 0 49.1487 0.8861027 +49.19957 0 49.19957 0.11389745 0 49.19957 0.886102557 +49.2504425 0 49.2504425 0.113897383 0 49.2504425 0.8861026 +49.3013153 0 49.3013153 0.113897316 0 49.3013153 0.8861027 +49.3521843 0 49.3521843 0.113897435 0 49.3521843 0.886102557 +49.4030571 0 49.4030571 0.113897368 0 49.4030571 0.8861026 +49.45393 0 49.45393 0.1138973 0 49.45393 0.8861027 +49.5048 0 49.5048 0.11389742 0 49.5048 0.886102557 +49.55567 0 49.55567 0.113897353 0 49.55567 0.8861027 +49.6065445 0 49.6065445 0.113897286 0 49.6065445 0.886102736 +49.6574135 0 49.6574135 0.113897406 0 49.6574135 0.8861026 +49.7082863 0 49.7082863 0.113897339 0 49.7082863 0.8861027 +49.7591553 0 49.7591553 0.113897458 0 49.7591553 0.886102557 +49.8100281 0 49.8100281 0.113897391 0 49.8100281 0.8861026 +49.8609 0 49.8609 0.113897324 0 49.8609 0.8861027 +49.91177 0 49.91177 0.113897443 0 49.91177 0.886102557 +49.9626427 0 49.9626427 0.113897376 0 49.9626427 0.8861026 +50.0135155 0 50.0135155 0.1138973 0 50.0135155 0.8861027 +50.0643845 0 50.0643845 0.113897428 0 50.0643845 0.886102557 +50.1152573 0 50.1152573 0.113897353 0 50.1152573 0.8861026 +50.16613 0 50.16613 0.113897286 0 50.16613 0.886102736 +50.217 0 50.217 0.113897413 0 50.217 0.8861026 +50.26787 0 50.26787 0.113897346 0 50.26787 0.8861027 +50.3187447 0 50.3187447 0.113897279 0 50.3187447 0.886102736 +50.3696136 0 50.3696136 0.1138974 0 50.3696136 0.8861026 +50.4204865 0 50.4204865 0.113897331 0 50.4204865 0.8861027 +50.4713554 0 50.4713554 0.11389745 0 50.4713554 0.886102557 +50.52223 0 50.52223 0.113897383 0 50.52223 0.8861026 +50.5731 0 50.5731 0.113897309 0 50.5731 0.8861027 +50.62397 0 50.62397 0.113897435 0 50.62397 0.886102557 +50.6748428 0 50.6748428 0.113897361 0 50.6748428 0.8861026 +50.7257156 0 50.7257156 0.113897294 0 50.7257156 0.8861027 +50.7765846 0 50.7765846 0.11389742 0 50.7765846 0.886102557 +50.8274574 0 50.8274574 0.113897346 0 50.8274574 0.8861027 +50.87833 0 50.87833 0.113897279 0 50.87833 0.886102736 +50.9292 0 50.9292 0.113897406 0 50.9292 0.8861026 +50.980072 0 50.980072 0.113897339 0 50.980072 0.8861027 +51.03094 0 51.03094 0.113897458 0 51.03094 0.886102557 +51.0818138 0 51.0818138 0.113897383 0 51.0818138 0.8861026 +51.1326866 0 51.1326866 0.113897316 0 51.1326866 0.8861027 +51.1835556 0 51.1835556 0.113897443 0 51.1835556 0.886102557 +51.23443 0 51.23443 0.113897368 0 51.23443 0.8861026 +51.2853 0 51.2853 0.1138973 0 51.2853 0.8861027 +51.33617 0 51.33617 0.11389742 0 51.33617 0.886102557 +51.387043 0 51.387043 0.113897353 0 51.387043 0.8861026 +51.4379158 0 51.4379158 0.113897286 0 51.4379158 0.886102736 +51.4887848 0 51.4887848 0.113897406 0 51.4887848 0.8861026 +51.5396576 0 51.5396576 0.113897339 0 51.5396576 0.8861027 +51.59053 0 51.59053 0.113897271 0 51.59053 0.886102736 +51.6414 0 51.6414 0.1138974 0 51.6414 0.8861026 +51.6922722 0 51.6922722 0.113897331 0 51.6922722 0.8861027 +51.74314 0 51.74314 0.11389745 0 51.74314 0.886102557 +51.794014 0 51.794014 0.113897376 0 51.794014 0.8861026 +51.8448868 0 51.8448868 0.113897309 0 51.8448868 0.8861027 +51.8957558 0 51.8957558 0.113897428 0 51.8957558 0.886102557 +51.94663 0 51.94663 0.113897361 0 51.94663 0.8861026 +51.9975 0 51.9975 0.113897294 0 51.9975 0.8861027 +52.04837 0 52.04837 0.113897413 0 52.04837 0.886102557 +52.0992432 0 52.0992432 0.113897346 0 52.0992432 0.8861027 +52.150116 0 52.150116 0.113897279 0 52.150116 0.886102736 +52.200985 0 52.200985 0.113897406 0 52.200985 0.8861026 +52.2518578 0 52.2518578 0.113897331 0 52.2518578 0.8861027 +52.3027267 0 52.3027267 0.11389745 0 52.3027267 0.886102557 +52.3536 0 52.3536 0.113897383 0 52.3536 0.8861026 +52.4044724 0 52.4044724 0.113897316 0 52.4044724 0.8861027 +52.45534 0 52.45534 0.113897435 0 52.45534 0.886102557 +52.5062141 0 52.5062141 0.113897368 0 52.5062141 0.8861026 +52.5570869 0 52.5570869 0.1138973 0 52.5570869 0.8861027 +52.6079559 0 52.6079559 0.11389742 0 52.6079559 0.886102557 +52.65883 0 52.65883 0.113897353 0 52.65883 0.8861027 +52.7097 0 52.7097 0.113897286 0 52.7097 0.886102736 +52.76057 0 52.76057 0.113897406 0 52.76057 0.8861026 +52.8114433 0 52.8114433 0.113897339 0 52.8114433 0.8861027 +52.8623161 0 52.8623161 0.113897271 0 52.8623161 0.886102736 +52.9131851 0 52.9131851 0.113897391 0 52.9131851 0.8861026 +52.9640579 0 52.9640579 0.113897324 0 52.9640579 0.8861027 +53.0149269 0 53.0149269 0.113897443 0 53.0149269 0.886102557 +53.0658 0 53.0658 0.113897376 0 53.0658 0.8861026 +53.1166725 0 53.1166725 0.113897309 0 53.1166725 0.8861027 +53.16754 0 53.16754 0.113897428 0 53.16754 0.886102557 +53.2184143 0 53.2184143 0.113897361 0 53.2184143 0.8861026 +53.2692871 0 53.2692871 0.113897294 0 53.2692871 0.8861027 +53.3201561 0 53.3201561 0.113897413 0 53.3201561 0.886102557 +53.37103 0 53.37103 0.113897346 0 53.37103 0.8861027 +53.4219 0 53.4219 0.113897279 0 53.4219 0.886102736 +53.47277 0 53.47277 0.1138974 0 53.47277 0.8861026 +53.5236435 0 53.5236435 0.113897331 0 53.5236435 0.8861027 +53.5745125 0 53.5745125 0.11389745 0 53.5745125 0.886102557 +53.6253853 0 53.6253853 0.113897383 0 53.6253853 0.8861026 +53.6762581 0 53.6762581 0.113897316 0 53.6762581 0.8861027 +53.7271271 0 53.7271271 0.113897435 0 53.7271271 0.886102557 +53.778 0 53.778 0.113897368 0 53.778 0.8861026 +53.8288727 0 53.8288727 0.1138973 0 53.8288727 0.8861027 +53.87974 0 53.87974 0.11389742 0 53.87974 0.886102557 +53.9306145 0 53.9306145 0.113897353 0 53.9306145 0.8861027 +53.9814873 0 53.9814873 0.113897286 0 53.9814873 0.886102736 +54.0323563 0 54.0323563 0.113897406 0 54.0323563 0.8861026 +54.08323 0 54.08323 0.113897339 0 54.08323 0.8861027 +54.1341 0 54.1341 0.113897271 0 54.1341 0.886102736 +54.18497 0 54.18497 0.113897391 0 54.18497 0.8861026 +54.2358437 0 54.2358437 0.113897324 0 54.2358437 0.8861027 +54.2867126 0 54.2867126 0.113897443 0 54.2867126 0.886102557 +54.3375854 0 54.3375854 0.113897376 0 54.3375854 0.8861026 +54.38846 0 54.38846 0.113897309 0 54.38846 0.8861027 +54.4393272 0 54.4393272 0.113897428 0 54.4393272 0.886102557 +54.4902 0 54.4902 0.113897361 0 54.4902 0.8861026 +54.5410728 0 54.5410728 0.113897294 0 54.5410728 0.8861027 +54.59194 0 54.59194 0.113897413 0 54.59194 0.886102557 +54.6428146 0 54.6428146 0.113897346 0 54.6428146 0.8861027 +54.6936874 0 54.6936874 0.113897279 0 54.6936874 0.886102736 +54.7445564 0 54.7445564 0.1138974 0 54.7445564 0.8861026 +54.79543 0 54.79543 0.113897331 0 54.79543 0.8861027 +54.8463 0 54.8463 0.11389745 0 54.8463 0.886102557 +54.89717 0 54.89717 0.113897383 0 54.89717 0.8861026 +54.9480438 0 54.9480438 0.113897316 0 54.9480438 0.8861027 +54.9989128 0 54.9989128 0.113897435 0 54.9989128 0.886102557 +55.0497856 0 55.0497856 0.113897368 0 55.0497856 0.8861026 +55.10066 0 55.10066 0.1138973 0 55.10066 0.8861027 +55.1515274 0 55.1515274 0.11389742 0 55.1515274 0.886102557 +55.2024 0 55.2024 0.113897353 0 55.2024 0.8861027 +55.253273 0 55.253273 0.113897286 0 55.253273 0.886102736 +55.304142 0 55.304142 0.113897406 0 55.304142 0.8861026 +55.3550148 0 55.3550148 0.113897339 0 55.3550148 0.8861027 +55.4058876 0 55.4058876 0.113897271 0 55.4058876 0.886102736 +55.4567566 0 55.4567566 0.1138974 0 55.4567566 0.8861026 +55.50763 0 55.50763 0.113897324 0 55.50763 0.8861027 +55.5585 0 55.5585 0.11389745 0 55.5585 0.886102557 +55.60937 0 55.60937 0.113897376 0 55.60937 0.8861026 +55.660244 0 55.660244 0.113897309 0 55.660244 0.8861027 +55.711113 0 55.711113 0.113897428 0 55.711113 0.886102557 +55.7619858 0 55.7619858 0.113897361 0 55.7619858 0.8861026 +55.81286 0 55.81286 0.113897294 0 55.81286 0.8861027 +55.8637276 0 55.8637276 0.113897413 0 55.8637276 0.886102557 +55.9146 0 55.9146 0.113897346 0 55.9146 0.8861027 +55.9654732 0 55.9654732 0.113897279 0 55.9654732 0.886102736 +56.0163422 0 56.0163422 0.1138974 0 56.0163422 0.8861026 +56.067215 0 56.067215 0.113897331 0 56.067215 0.8861027 +56.118084 0 56.118084 0.11389745 0 56.118084 0.886102557 +56.1689568 0 56.1689568 0.113897383 0 56.1689568 0.8861026 +56.21983 0 56.21983 0.113897316 0 56.21983 0.8861027 +56.2707 0 56.2707 0.113897435 0 56.2707 0.886102557 +56.32157 0 56.32157 0.113897368 0 56.32157 0.8861026 +56.3724442 0 56.3724442 0.1138973 0 56.3724442 0.8861027 +56.4233131 0 56.4233131 0.11389742 0 56.4233131 0.886102557 +56.4741859 0 56.4741859 0.113897353 0 56.4741859 0.8861026 +56.52506 0 56.52506 0.113897286 0 56.52506 0.886102736 +56.5759277 0 56.5759277 0.113897406 0 56.5759277 0.8861026 +56.6268 0 56.6268 0.113897339 0 56.6268 0.8861027 +56.67767 0 56.67767 0.113897458 0 56.67767 0.886102557 +56.7285423 0 56.7285423 0.113897391 0 56.7285423 0.8861026 +56.7794151 0 56.7794151 0.113897324 0 56.7794151 0.8861027 +56.8302841 0 56.8302841 0.113897443 0 56.8302841 0.886102557 +56.8811569 0 56.8811569 0.113897376 0 56.8811569 0.8861026 +56.93203 0 56.93203 0.113897309 0 56.93203 0.8861027 +56.9829 0 56.9829 0.113897428 0 56.9829 0.886102557 +57.03377 0 57.03377 0.113897361 0 57.03377 0.8861026 +57.0846443 0 57.0846443 0.113897294 0 57.0846443 0.886102736 +57.1355133 0 57.1355133 0.113897413 0 57.1355133 0.8861026 +57.1863861 0 57.1863861 0.113897346 0 57.1863861 0.8861027 +57.23726 0 57.23726 0.113897279 0 57.23726 0.886102736 +57.2881279 0 57.2881279 0.1138974 0 57.2881279 0.8861026 +57.339 0 57.339 0.113897331 0 57.339 0.8861027 +57.38987 0 57.38987 0.11389745 0 57.38987 0.886102557 +57.4407425 0 57.4407425 0.113897383 0 57.4407425 0.8861026 +57.4916153 0 57.4916153 0.113897316 0 57.4916153 0.8861027 +57.5424843 0 57.5424843 0.113897435 0 57.5424843 0.886102557 +57.5933571 0 57.5933571 0.113897368 0 57.5933571 0.8861026 +57.64423 0 57.64423 0.1138973 0 57.64423 0.8861027 +57.6951 0 57.6951 0.11389742 0 57.6951 0.886102557 +57.74597 0 57.74597 0.113897353 0 57.74597 0.8861027 +57.7968445 0 57.7968445 0.113897286 0 57.7968445 0.886102736 +57.8477135 0 57.8477135 0.113897406 0 57.8477135 0.8861026 +57.8985863 0 57.8985863 0.113897339 0 57.8985863 0.8861027 +57.9494553 0 57.9494553 0.113897458 0 57.9494553 0.886102557 +58.0003281 0 58.0003281 0.113897391 0 58.0003281 0.8861026 +58.0512 0 58.0512 0.113897324 0 58.0512 0.8861027 +58.10207 0 58.10207 0.113897443 0 58.10207 0.886102557 +58.1529427 0 58.1529427 0.113897376 0 58.1529427 0.8861026 +58.2038155 0 58.2038155 0.1138973 0 58.2038155 0.8861027 +58.2546844 0 58.2546844 0.113897428 0 58.2546844 0.886102557 +58.3055573 0 58.3055573 0.113897353 0 58.3055573 0.8861026 +58.35643 0 58.35643 0.113897286 0 58.35643 0.886102736 +58.4073 0 58.4073 0.113897413 0 58.4073 0.8861026 +58.45817 0 58.45817 0.113897346 0 58.45817 0.8861027 +58.5090446 0 58.5090446 0.113897279 0 58.5090446 0.886102736 +58.5599136 0 58.5599136 0.1138974 0 58.5599136 0.8861026 +58.6107864 0 58.6107864 0.113897331 0 58.6107864 0.8861027 +58.6616554 0 58.6616554 0.11389745 0 58.6616554 0.886102557 +58.71253 0 58.71253 0.113897383 0 58.71253 0.8861026 +58.7634 0 58.7634 0.113897309 0 58.7634 0.8861027 +58.81427 0 58.81427 0.113897435 0 58.81427 0.886102557 +58.8651428 0 58.8651428 0.113897361 0 58.8651428 0.8861026 +58.9160156 0 58.9160156 0.113897294 0 58.9160156 0.8861027 +58.9668846 0 58.9668846 0.11389742 0 58.9668846 0.886102557 +59.0177574 0 59.0177574 0.113897346 0 59.0177574 0.8861027 +59.06863 0 59.06863 0.113897279 0 59.06863 0.886102736 +59.1195 0 59.1195 0.113897406 0 59.1195 0.8861026 +59.170372 0 59.170372 0.113897339 0 59.170372 0.8861027 +59.22124 0 59.22124 0.113897458 0 59.22124 0.886102557 +59.2721138 0 59.2721138 0.113897383 0 59.2721138 0.8861026 +59.3229866 0 59.3229866 0.113897316 0 59.3229866 0.8861027 +59.3738556 0 59.3738556 0.113897443 0 59.3738556 0.886102557 +59.42473 0 59.42473 0.113897368 0 59.42473 0.8861026 +59.4756 0 59.4756 0.1138973 0 59.4756 0.8861027 +59.52647 0 59.52647 0.11389742 0 59.52647 0.886102557 +59.577343 0 59.577343 0.113897353 0 59.577343 0.8861026 +59.6282158 0 59.6282158 0.113897286 0 59.6282158 0.886102736 +59.6790848 0 59.6790848 0.113897406 0 59.6790848 0.8861026 +59.7299576 0 59.7299576 0.113897339 0 59.7299576 0.8861027 +59.78083 0 59.78083 0.113897271 0 59.78083 0.886102736 +59.8317 0 59.8317 0.1138974 0 59.8317 0.8861026 +59.8825722 0 59.8825722 0.113897331 0 59.8825722 0.8861027 +59.93344 0 59.93344 0.11389745 0 59.93344 0.886102557 +59.984314 0 59.984314 0.113897376 0 59.984314 0.8861026 +60.0351868 0 60.0351868 0.113897309 0 60.0351868 0.8861027 +60.0860558 0 60.0860558 0.113897428 0 60.0860558 0.886102557 +60.13693 0 60.13693 0.113897361 0 60.13693 0.8861026 +60.1878 0 60.1878 0.113897294 0 60.1878 0.8861027 +60.23867 0 60.23867 0.113897413 0 60.23867 0.886102557 +60.2895432 0 60.2895432 0.113897346 0 60.2895432 0.8861027 +60.340416 0 60.340416 0.113897279 0 60.340416 0.886102736 +60.3912849 0 60.3912849 0.113897406 0 60.3912849 0.8861026 +60.4421577 0 60.4421577 0.113897331 0 60.4421577 0.8861027 +60.4930267 0 60.4930267 0.11389745 0 60.4930267 0.886102557 +60.5439 0 60.5439 0.113897383 0 60.5439 0.8861026 +60.5947723 0 60.5947723 0.113897316 0 60.5947723 0.8861027 +60.64564 0 60.64564 0.113897435 0 60.64564 0.886102557 +60.6965141 0 60.6965141 0.113897368 0 60.6965141 0.8861026 +60.7473869 0 60.7473869 0.1138973 0 60.7473869 0.8861027 +60.7982559 0 60.7982559 0.11389742 0 60.7982559 0.886102557 +60.84913 0 60.84913 0.113897353 0 60.84913 0.8861027 +60.9 0 60.9 0.113897286 0 60.9 0.886102736 +60.95087 0 60.95087 0.113897406 0 60.95087 0.8861026 +61.0017433 0 61.0017433 0.113897339 0 61.0017433 0.8861027 +61.0526161 0 61.0526161 0.113897271 0 61.0526161 0.886102736 +61.1034851 0 61.1034851 0.113897391 0 61.1034851 0.8861026 +61.1543579 0 61.1543579 0.113897324 0 61.1543579 0.8861027 +61.2052269 0 61.2052269 0.113897443 0 61.2052269 0.886102557 +61.2561 0 61.2561 0.113897376 0 61.2561 0.8861026 +61.3069725 0 61.3069725 0.113897309 0 61.3069725 0.8861027 +61.35784 0 61.35784 0.113897428 0 61.35784 0.886102557 +61.4087143 0 61.4087143 0.113897361 0 61.4087143 0.8861026 +61.4595871 0 61.4595871 0.113897294 0 61.4595871 0.8861027 +61.5104561 0 61.5104561 0.113897413 0 61.5104561 0.886102557 +61.56133 0 61.56133 0.113897346 0 61.56133 0.8861027 +61.6122 0 61.6122 0.113897279 0 61.6122 0.886102736 +61.66307 0 61.66307 0.1138974 0 61.66307 0.8861026 +61.7139435 0 61.7139435 0.113897331 0 61.7139435 0.8861027 +61.7648125 0 61.7648125 0.11389745 0 61.7648125 0.886102557 +61.8156853 0 61.8156853 0.113897383 0 61.8156853 0.8861026 +61.8665581 0 61.8665581 0.113897316 0 61.8665581 0.8861027 +61.9174271 0 61.9174271 0.113897435 0 61.9174271 0.886102557 +61.9683 0 61.9683 0.113897368 0 61.9683 0.8861026 +62.0191727 0 62.0191727 0.1138973 0 62.0191727 0.8861027 +62.07004 0 62.07004 0.11389742 0 62.07004 0.886102557 +62.1209145 0 62.1209145 0.113897353 0 62.1209145 0.8861027 +62.1717873 0 62.1717873 0.113897286 0 62.1717873 0.886102736 +62.2226562 0 62.2226562 0.113897406 0 62.2226562 0.8861026 +62.27353 0 62.27353 0.113897339 0 62.27353 0.8861027 +62.3244 0 62.3244 0.113897271 0 62.3244 0.886102736 +62.37527 0 62.37527 0.113897391 0 62.37527 0.8861026 +62.4261436 0 62.4261436 0.113897324 0 62.4261436 0.8861027 +62.4770126 0 62.4770126 0.113897443 0 62.4770126 0.886102557 +62.5278854 0 62.5278854 0.113897376 0 62.5278854 0.8861026 +62.57876 0 62.57876 0.113897309 0 62.57876 0.8861027 +62.6296272 0 62.6296272 0.113897428 0 62.6296272 0.886102557 +62.6805 0 62.6805 0.113897361 0 62.6805 0.8861026 +62.7313728 0 62.7313728 0.113897294 0 62.7313728 0.8861027 +62.78224 0 62.78224 0.113897413 0 62.78224 0.886102557 +62.8331146 0 62.8331146 0.113897346 0 62.8331146 0.8861027 +62.8839874 0 62.8839874 0.113897279 0 62.8839874 0.886102736 +62.9348564 0 62.9348564 0.1138974 0 62.9348564 0.8861026 +62.98573 0 62.98573 0.113897331 0 62.98573 0.8861027 +63.0366 0 63.0366 0.11389745 0 63.0366 0.886102557 +63.08747 0 63.08747 0.113897383 0 63.08747 0.8861026 +63.1383438 0 63.1383438 0.113897316 0 63.1383438 0.8861027 +63.1892128 0 63.1892128 0.113897435 0 63.1892128 0.886102557 +63.2400856 0 63.2400856 0.113897368 0 63.2400856 0.8861026 +63.29096 0 63.29096 0.1138973 0 63.29096 0.8861027 +63.3418274 0 63.3418274 0.11389742 0 63.3418274 0.886102557 +63.3927 0 63.3927 0.113897353 0 63.3927 0.8861027 +63.443573 0 63.443573 0.113897286 0 63.443573 0.886102736 +63.494442 0 63.494442 0.113897406 0 63.494442 0.8861026 +63.5453148 0 63.5453148 0.113897339 0 63.5453148 0.8861027 +63.5961876 0 63.5961876 0.113897271 0 63.5961876 0.886102736 +63.6470566 0 63.6470566 0.1138974 0 63.6470566 0.8861026 +63.69793 0 63.69793 0.113897324 0 63.69793 0.8861027 +63.7488 0 63.7488 0.11389745 0 63.7488 0.886102557 +63.79967 0 63.79967 0.113897376 0 63.79967 0.8861026 +63.850544 0 63.850544 0.113897309 0 63.850544 0.8861027 +63.901413 0 63.901413 0.113897428 0 63.901413 0.886102557 +63.9522858 0 63.9522858 0.113897361 0 63.9522858 0.8861026 +64.00316 0 64.00316 0.113897294 0 64.00316 0.8861027 +64.05403 0 64.05403 0.113897227 0 64.05403 0.8861028 +64.1049 0 64.1049 0.11389754 0 64.1049 0.886102438 +64.15577 0 64.15577 0.113897465 0 64.15577 0.886102557 +64.20664 0 64.20664 0.1138974 0 64.20664 0.8861026 +64.257515 0 64.257515 0.113897331 0 64.257515 0.8861027 +64.30839 0 64.30839 0.113897264 0 64.30839 0.886102736 +64.35926 0 64.35926 0.1138972 0 64.35926 0.8861028 +64.4101257 0 64.4101257 0.11389751 0 64.4101257 0.8861025 +64.461 0 64.461 0.113897435 0 64.461 0.886102557 +64.51187 0 64.51187 0.113897368 0 64.51187 0.8861026 +64.5627441 0 64.5627441 0.1138973 0 64.5627441 0.8861027 +64.61362 0 64.61362 0.113897234 0 64.61362 0.886102736 +64.66448 0 64.66448 0.113897547 0 64.66448 0.886102438 +64.7153549 0 64.7153549 0.113897473 0 64.7153549 0.8861025 +64.76623 0 64.76623 0.113897406 0 64.76623 0.8861026 +64.8171 0 64.8171 0.113897339 0 64.8171 0.8861027 +64.86797 0 64.86797 0.113897271 0 64.86797 0.886102736 +64.9188461 0 64.9188461 0.113897204 0 64.9188461 0.8861028 +64.96971 0 64.96971 0.11389751 0 64.96971 0.8861025 +65.0205841 0 65.0205841 0.113897443 0 65.0205841 0.886102557 +65.07146 0 65.07146 0.113897376 0 65.07146 0.8861026 +65.12233 0 65.12233 0.113897309 0 65.12233 0.8861027 +65.1732 0 65.1732 0.113897242 0 65.1732 0.886102736 +65.22407 0 65.22407 0.113897547 0 65.22407 0.886102438 +65.27494 0 65.27494 0.11389748 0 65.27494 0.8861025 +65.32581 0 65.32581 0.113897406 0 65.32581 0.8861026 +65.3766861 0 65.3766861 0.113897339 0 65.3766861 0.8861027 +65.42756 0 65.42756 0.113897271 0 65.42756 0.886102736 +65.47843 0 65.47843 0.113897212 0 65.47843 0.8861028 +65.5293 0 65.5293 0.113897517 0 65.5293 0.8861025 +65.58017 0 65.58017 0.11389745 0 65.58017 0.886102557 +65.63104 0 65.63104 0.113897376 0 65.63104 0.8861026 +65.6819153 0 65.6819153 0.113897309 0 65.6819153 0.8861027 +65.73279 0 65.73279 0.113897249 0 65.73279 0.886102736 +65.78366 0 65.78366 0.113897182 0 65.78366 0.8861028 +65.8345261 0 65.8345261 0.113897488 0 65.8345261 0.8861025 +65.8854 0 65.8854 0.11389742 0 65.8854 0.886102557 +65.93627 0 65.93627 0.113897353 0 65.93627 0.8861027 +65.9871445 0 65.9871445 0.113897286 0 65.9871445 0.886102736 +66.03802 0 66.03802 0.113897219 0 66.03802 0.8861028 +66.08888 0 66.08888 0.113897525 0 66.08888 0.8861025 +66.1397552 0 66.1397552 0.113897458 0 66.1397552 0.886102557 +66.19063 0 66.19063 0.113897391 0 66.19063 0.8861026 +66.2415 0 66.2415 0.113897324 0 66.2415 0.8861027 +66.29237 0 66.29237 0.113897257 0 66.29237 0.886102736 +66.34325 0 66.34325 0.113897189 0 66.34325 0.8861028 +66.39411 0 66.39411 0.1138975 0 66.39411 0.8861025 +66.4449844 0 66.4449844 0.113897428 0 66.4449844 0.886102557 +66.49586 0 66.49586 0.113897361 0 66.49586 0.8861026 +66.54673 0 66.54673 0.113897294 0 66.54673 0.8861027 +66.5976 0 66.5976 0.113897227 0 66.5976 0.8861028 +66.64847 0 66.64847 0.11389754 0 66.64847 0.886102438 +66.69934 0 66.69934 0.113897465 0 66.69934 0.886102557 +66.75021 0 66.75021 0.1138974 0 66.75021 0.8861026 +66.80109 0 66.80109 0.113897331 0 66.80109 0.8861027 +66.85196 0 66.85196 0.113897264 0 66.85196 0.886102736 +66.90283 0 66.90283 0.1138972 0 66.90283 0.8861028 +66.9537 0 66.9537 0.11389751 0 66.9537 0.8861025 +67.00457 0 67.00457 0.113897435 0 67.00457 0.886102557 +67.05544 0 67.05544 0.113897368 0 67.05544 0.8861026 +67.1063156 0 67.1063156 0.1138973 0 67.1063156 0.8861027 +67.15719 0 67.15719 0.113897234 0 67.15719 0.886102736 +67.20805 0 67.20805 0.11389754 0 67.20805 0.886102438 +67.25893 0 67.25893 0.113897473 0 67.25893 0.886102557 +67.3098 0 67.3098 0.113897406 0 67.3098 0.8861026 +67.36067 0 67.36067 0.113897339 0 67.36067 0.8861027 +67.4115448 0 67.4115448 0.113897271 0 67.4115448 0.886102736 +67.46242 0 67.46242 0.113897204 0 67.46242 0.8861028 +67.51328 0 67.51328 0.11389751 0 67.51328 0.8861025 +67.5641556 0 67.5641556 0.113897443 0 67.5641556 0.886102557 +67.61503 0 67.61503 0.113897376 0 67.61503 0.8861026 +67.6659 0 67.6659 0.113897309 0 67.6659 0.8861027 +67.716774 0 67.716774 0.113897242 0 67.716774 0.886102736 +67.76764 0 67.76764 0.113897547 0 67.76764 0.886102438 +67.81851 0 67.81851 0.11389748 0 67.81851 0.8861025 +67.8693848 0 67.8693848 0.113897406 0 67.8693848 0.8861026 +67.92026 0 67.92026 0.113897339 0 67.92026 0.8861027 +67.97113 0 67.97113 0.113897271 0 67.97113 0.886102736 +68.022 0 68.022 0.113897212 0 68.022 0.8861028 +68.07287 0 68.07287 0.113897517 0 68.07287 0.8861025 +68.12374 0 68.12374 0.11389745 0 68.12374 0.886102557 +68.174614 0 68.174614 0.113897376 0 68.174614 0.8861026 +68.22549 0 68.22549 0.113897309 0 68.22549 0.8861027 +68.27636 0 68.27636 0.113897242 0 68.27636 0.886102736 +68.32723 0 68.32723 0.113897182 0 68.32723 0.8861028 +68.3781 0 68.3781 0.113897488 0 68.3781 0.8861025 +68.42897 0 68.42897 0.11389742 0 68.42897 0.886102557 +68.47984 0 68.47984 0.113897353 0 68.47984 0.8861027 +68.5307159 0 68.5307159 0.113897286 0 68.5307159 0.886102736 +68.58159 0 68.58159 0.113897219 0 68.58159 0.8861028 +68.6324539 0 68.6324539 0.113897525 0 68.6324539 0.8861025 +68.68333 0 68.68333 0.113897458 0 68.68333 0.886102557 +68.7342 0 68.7342 0.113897391 0 68.7342 0.8861026 +68.78507 0 68.78507 0.113897324 0 68.78507 0.8861027 +68.8359451 0 68.8359451 0.113897257 0 68.8359451 0.886102736 +68.88682 0 68.88682 0.113897189 0 68.88682 0.8861028 +68.93768 0 68.93768 0.113897495 0 68.93768 0.8861025 +68.9885559 0 68.9885559 0.113897428 0 68.9885559 0.886102557 +69.03943 0 69.03943 0.113897361 0 69.03943 0.8861026 +69.0903 0 69.0903 0.113897294 0 69.0903 0.886102736 +69.1411743 0 69.1411743 0.113897227 0 69.1411743 0.8861028 +69.19204 0 69.19204 0.113897532 0 69.19204 0.886102438 +69.24291 0 69.24291 0.113897465 0 69.24291 0.886102557 +69.2937851 0 69.2937851 0.1138974 0 69.2937851 0.8861026 +69.34466 0 69.34466 0.113897331 0 69.34466 0.8861027 +69.39553 0 69.39553 0.113897264 0 69.39553 0.886102736 +69.4464 0 69.4464 0.1138972 0 69.4464 0.8861028 +69.49727 0 69.49727 0.1138975 0 69.49727 0.8861025 +69.54814 0 69.54814 0.113897435 0 69.54814 0.886102557 +69.5990143 0 69.5990143 0.113897368 0 69.5990143 0.8861026 +69.64989 0 69.64989 0.1138973 0 69.64989 0.8861027 +69.70076 0 69.70076 0.113897234 0 69.70076 0.886102736 +69.7516251 0 69.7516251 0.11389754 0 69.7516251 0.886102438 +69.8025 0 69.8025 0.113897473 0 69.8025 0.886102557 +69.85337 0 69.85337 0.113897406 0 69.85337 0.8861026 +69.90424 0 69.90424 0.113897331 0 69.90424 0.8861027 +69.95512 0 69.95512 0.113897271 0 69.95512 0.886102736 +70.00599 0 70.00599 0.113897204 0 70.00599 0.8861028 +70.0568542 0 70.0568542 0.11389751 0 70.0568542 0.8861025 +70.10773 0 70.10773 0.113897443 0 70.10773 0.886102557 +70.1586 0 70.1586 0.113897376 0 70.1586 0.8861026 +70.20947 0 70.20947 0.113897309 0 70.20947 0.8861027 +70.2603455 0 70.2603455 0.113897242 0 70.2603455 0.886102736 +70.31121 0 70.31121 0.113897547 0 70.31121 0.886102438 +70.36208 0 70.36208 0.11389748 0 70.36208 0.8861025 +70.41296 0 70.41296 0.113897406 0 70.41296 0.8861026 +70.46383 0 70.46383 0.113897339 0 70.46383 0.8861027 +70.5147 0 70.5147 0.113897271 0 70.5147 0.886102736 +70.5655746 0 70.5655746 0.113897212 0 70.5655746 0.8861028 +70.61644 0 70.61644 0.113897517 0 70.61644 0.8861025 +70.66731 0 70.66731 0.11389745 0 70.66731 0.886102557 +70.7181854 0 70.7181854 0.113897376 0 70.7181854 0.8861026 +70.76906 0 70.76906 0.113897309 0 70.76906 0.8861027 +70.81993 0 70.81993 0.113897242 0 70.81993 0.886102736 +70.8708 0 70.8708 0.113897555 0 70.8708 0.886102438 +70.92167 0 70.92167 0.11389748 0 70.92167 0.8861025 +70.97254 0 70.97254 0.113897413 0 70.97254 0.8861026 +71.0234146 0 71.0234146 0.113897346 0 71.0234146 0.8861027 +71.07429 0 71.07429 0.113897279 0 71.07429 0.886102736 +71.12516 0 71.12516 0.113897212 0 71.12516 0.8861028 +71.1760254 0 71.1760254 0.113897517 0 71.1760254 0.8861025 +71.2269 0 71.2269 0.11389745 0 71.2269 0.886102557 +71.27777 0 71.27777 0.113897383 0 71.27777 0.8861026 +71.32864 0 71.32864 0.113897316 0 71.32864 0.8861027 +71.37952 0 71.37952 0.113897249 0 71.37952 0.886102736 +71.43039 0 71.43039 0.113897182 0 71.43039 0.8861028 +71.4812546 0 71.4812546 0.113897488 0 71.4812546 0.8861025 +71.53213 0 71.53213 0.11389742 0 71.53213 0.886102557 +71.583 0 71.583 0.113897353 0 71.583 0.8861027 +71.63387 0 71.63387 0.113897286 0 71.63387 0.886102736 +71.6847458 0 71.6847458 0.113897219 0 71.6847458 0.8861028 +71.73561 0 71.73561 0.113897532 0 71.73561 0.8861025 +71.78648 0 71.78648 0.113897458 0 71.78648 0.886102557 +71.83736 0 71.83736 0.113897391 0 71.83736 0.8861026 +71.88823 0 71.88823 0.113897324 0 71.88823 0.8861027 +71.9391 0 71.9391 0.113897257 0 71.9391 0.886102736 +71.989975 0 71.989975 0.113897189 0 71.989975 0.8861028 +72.04084 0 72.04084 0.1138975 0 72.04084 0.8861025 +72.09171 0 72.09171 0.113897428 0 72.09171 0.886102557 +72.1425858 0 72.1425858 0.113897361 0 72.1425858 0.8861026 +72.19346 0 72.19346 0.113897294 0 72.19346 0.8861027 +72.24433 0 72.24433 0.113897227 0 72.24433 0.8861028 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidSpike-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidSpike-Schema.txt new file mode 100644 index 0000000000..8b7eac8b58 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeIidSpike-Schema.txt @@ -0,0 +1,54 @@ +---- BoundLoader ---- +1 columns: + Features: R4 +---- IidSpikeDetector ---- +2 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' +---- ConvertTransform ---- +3 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' +---- IidSpikeDetector ---- +4 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + Anomaly2: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' +---- ConvertTransform ---- +5 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + Anomaly2: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly2: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' +---- ChooseColumnsTransform ---- +3 columns: + Features: R4 + fAnomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' + fAnomaly2: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageNonUniform-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageNonUniform-Data.txt new file mode 100644 index 0000000000..5cdbc7365a --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageNonUniform-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1 +#@ } +Input Output +5 ? +5 ? +3 4.111111 +6 4.77777767 +4 4.44444466 +8 6.22222233 +1 4 +2 3 +2 1.77777779 +4 2.88888884 +1 2.22222233 +2 2.11111116 +5 3.11111116 +1 2.55555558 +8 5 +7 6 +4 5.888889 +4 4.66666651 +10 6.66666651 +6 6.888889 +7 7.33333349 +10 8.111111 +3 6.22222233 +8 6.77777767 +1 3.77777767 +5 4.33333349 +3 3.22222233 +5 4.33333349 +2 3.22222233 +1 2.22222233 +3 2.11111116 +2 2.11111116 +10 5.77777767 +2 4.66666651 +3 4.22222233 +2 2.33333325 +10 5.77777767 +6 6.44444466 +5 6.44444466 +2 3.88888884 +6 4.44444466 +10 6.888889 +6 7.33333349 +5 6.44444466 +10 7.44444466 +1 4.888889 +3 3.88888884 +1 1.66666663 +4 2.77777767 +7 4.66666651 +9 7.22222233 +5 6.77777767 +10 8.111111 +5 6.66666651 +10 8.333333 +10 8.888889 +8 9.111111 +8 8.444445 +5 6.66666651 +9 7.44444466 +5 6.33333349 +1 4.111111 +9 5.44444466 +6 5.888889 +1 4.44444466 +10 6.111111 +4 5.33333349 +5 5.77777767 +8 6.111111 +1 4.22222233 +5 4.33333349 +6 4.55555534 +1 3.55555558 +9 5.66666651 +10 7.66666651 +1 5.77777767 +1 3 +5 2.77777767 +3 3.22222233 +2 3 +2 2.22222233 +4 2.88888884 +5 4 +3 3.88888884 +3 3.44444442 +5 3.88888884 +3 3.66666675 +3 3.44444442 +4 3.44444442 +2 2.88888884 +1 2 +3 2.11111116 +4 3 +1 2.44444442 +2 2.11111116 +1 1.33333337 +2 1.66666663 +5 3.11111116 +9 6.111111 +7 7.22222233 +10 8.777778 +2 5.77777767 +4 4.66666651 +8 5.33333349 +10 8 +7 8.222222 +10 9 +1 5.33333349 +1 3 +6 3.22222233 +1 2.66666675 +8 5.22222233 +10 7.33333349 +10 9.555555 +3 6.888889 +1 3.66666675 +8 4.55555534 +4 4.66666651 +1 3.55555558 +3 2.55555558 +1 1.66666663 +4 2.77777767 +10 6 +5 6.44444466 +5 6.111111 +1 3.22222233 +7 4.55555534 +3 3.88888884 +8 6.111111 +1 3.77777767 +5 4.33333349 +2 2.77777767 +5 4 +3 3.44444442 +3 3.44444442 +5 3.88888884 +4 4.111111 +3 3.77777767 +4 3.66666675 +1 2.44444442 +3 2.55555558 +2 2.11111116 +9 5.33333349 +1 3.88888884 +2 3.22222233 +1 1.33333337 +3 2.11111116 +1 1.66666663 +3 2.33333325 +8 4.77777767 +1 3.77777767 +7 5.22222233 +10 7 +4 6.66666651 +1 4 +5 3.44444442 +1 2.33333325 +2 2.33333325 +1 1.33333337 +9 4.77777767 +10 7.66666651 +4 7.111111 +3 4.888889 +1 2.33333325 +5 3.22222233 +4 3.66666675 +5 4.66666651 +10 7 +3 5.77777767 +1 3.66666675 +3 2.33333325 +1 1.66666663 +1 1.44444442 +6 3.22222233 +8 5.77777767 +5 6.22222233 +2 4.33333349 +5 4 +4 3.88888884 +5 4.66666651 +1 3 +1 1.88888884 +6 3.22222233 +5 4.44444466 +8 6.55555534 +2 4.66666651 +1 2.88888884 +10 5.22222233 +5 5.77777767 +1 4.33333349 +10 5.888889 +7 6.66666651 +5 6.77777767 +1 3.66666675 +3 2.77777767 +4 3 +8 5.55555534 +5 5.77777767 +1 3.88888884 +3 2.77777767 +9 5.22222233 +10 8.111111 +1 5.77777767 +5 4.77777767 +1 2.33333325 +5 3.66666675 +10 6.33333349 +1 4.888889 +1 3 +5 2.77777767 +8 5.44444466 +8 7.33333349 +1 4.888889 +10 6.55555534 +10 8 +8 9.111111 +1 5.33333349 +1 2.55555558 +6 3.22222233 +6 4.888889 +1 3.77777767 +10 6.111111 +4 5.33333349 +7 6.66666651 +10 7.66666651 +1 5.33333349 +10 7 +8 7.111111 +1 5.33333349 +10 6.55555534 +7 6.66666651 +6 7.22222233 +8 7.111111 +10 8.444445 +3 6.44444466 +3 4.55555534 +10 6.111111 +9 8 +8 8.777778 +10 9.111111 +5 7.33333349 +3 5.22222233 +2 3 +1 1.77777779 +1 1.22222221 +5 2.77777767 +8 5.44444466 +8 7.33333349 +4 6.22222233 +3 4.44444466 +1 2.33333325 +10 5.44444466 +6 6.22222233 +6 6.888889 +9 7.33333349 +5 6.55555534 +3 5 +3 3.44444442 +3 3 +5 3.88888884 +10 6.77777767 +5 6.66666651 +8 7.44444466 +10 8.222222 +7 8.222222 +5 6.77777767 +10 7.66666651 +3 5.77777767 +10 7.66666651 +1 4.44444466 +8 6.111111 +5 5.111111 +3 4.77777767 +7 5.22222233 +3 4.33333349 +3 3.88888884 +3 3 +1 2.11111116 +1 1.44444442 +10 5 +3 4.888889 +2 4.111111 +1 1.77777779 +10 5.22222233 +7 6.66666651 +8 8.111111 +10 8.666667 +3 6.44444466 +6 5.888889 +5 4.888889 +1 3.44444442 +1 1.88888884 +8 4.111111 +10 7.33333349 +1 5.55555534 +5 4.77777767 +5 4.111111 +5 5 +8 6.33333349 +9 7.77777767 +8 8.333333 +1 5.111111 +10 6.55555534 +1 4 +8 6.111111 +10 7.33333349 +1 5.55555534 +1 3 +7 3.66666675 +3 3.88888884 +2 3.44444442 +1 1.77777779 +8 4.33333349 +1 3.33333325 +1 2.55555558 +4 2.33333325 +5 3.77777767 +6 5.22222233 +1 3.55555558 +4 3.44444442 +7 4.66666651 +3 4.55555534 +3 3.88888884 +5 3.88888884 +1 2.77777767 +3 2.77777767 +10 5.66666651 +1 4.44444466 +8 6.111111 +10 7.33333349 +10 9.555555 +5 7.77777767 +5 6.111111 +5 5 +8 6.33333349 +1 4.22222233 +6 4.77777767 +1 2.66666675 +1 2.11111116 +8 4.111111 +10 7.33333349 +1 5.55555534 +2 3.44444442 +1 1.33333337 +7 3.88888884 +1 3 +5 4.111111 +1 2.33333325 +3 2.77777767 +4 3 +5 4.22222233 +2 3.44444442 +3 3.11111116 +2 2.33333325 +1 1.77777779 +4 2.55555558 +5 3.77777767 +8 6.111111 +8 7.33333349 +10 8.888889 +6 7.77777767 +3 5.55555534 +3 3.66666675 +4 3.44444442 +2 2.88888884 +2 2.44444442 +6 3.77777767 +5 4.66666651 +1 3.44444442 +1 1.88888884 +4 2.33333325 +1 2 +4 3 +5 3.77777767 +3 3.88888884 +1 2.55555558 +1 1.44444442 +1 1 +3 1.88888884 +5 3.44444442 +1 2.77777767 +10 5.888889 +3 4.888889 +2 4.111111 +2 2.22222233 +3 2.44444442 +7 4.55555534 +5 5.22222233 +2 4.111111 +5 4 +1 2.55555558 +10 5.888889 +3 4.888889 +1 3.66666675 +1 1.44444442 +3 1.88888884 +3 2.55555558 +4 3.44444442 +3 3.33333325 +1 2.33333325 +3 2.33333325 +3 2.55555558 +5 3.88888884 +3 3.66666675 +1 2.55555558 +1 1.44444442 +4 2.33333325 +1 2 +2 2.11111116 +3 2.22222233 +1 1.88888884 +1 1.44444442 +10 5 +5 5.77777767 +8 7.44444466 +3 5.111111 +8 6.33333349 +1 3.77777767 +5 4.33333349 +2 2.77777767 +3 3.11111116 +10 5.888889 +4 5.77777767 +5 5.77777767 +3 3.88888884 +9 6.111111 +5 5.888889 +8 7.22222233 +1 4.22222233 +2 3 +1 1.33333337 +5 3 +5 4.111111 +3 4.111111 +6 4.77777767 +10 7.111111 +10 9.111111 +4 7.33333349 +4 5.33333349 +5 4.44444466 +10 7 +5 6.66666651 +1 4.33333349 +1 1.88888884 +5 2.77777767 +2 2.77777767 +1 2.22222233 +5 3 +1 2.33333325 +5 3.66666675 +4 3.66666675 +5 4.66666651 +3 3.88888884 +4 3.88888884 +2 2.88888884 +10 6 +10 8.222222 +8 9.111111 +5 7.111111 +5 5.66666651 +5 5 +3 4.111111 +6 4.77777767 +4 4.44444466 +4 4.44444466 +10 6.66666651 +10 8.666667 +6 8.222222 +4 6 +1 3.11111116 +3 2.55555558 +6 3.88888884 +6 5.33333349 +4 5.111111 +5 4.888889 +3 3.88888884 +4 3.88888884 +4 3.77777767 +5 4.44444466 +4 4.33333349 +5 4.66666651 +5 4.77777767 +9 6.77777767 +8 7.66666651 +5 6.888889 +1 3.88888884 +3 2.77777767 +10 5.66666651 +3 5.33333349 +6 5.888889 +1 3.11111116 +5 3.88888884 +4 3.66666675 +5 4.66666651 +5 4.77777767 +3 4.111111 +1 2.55555558 +4 2.77777767 +4 3.33333325 +4 4 +6 4.888889 +4 4.66666651 +4 4.44444466 +4 4 +1 2.66666675 +3 2.55555558 +8 4.77777767 +1 3.77777767 +5 4.33333349 +2 2.77777767 +1 2.22222233 +5 3 +5 4.111111 +3 4.111111 +6 4.77777767 +4 4.44444466 +1 3.11111116 +1 1.66666663 +3 1.88888884 +4 3 +1 2.44444442 +4 3 +10 6 +7 7.33333349 +3 5.888889 +3 3.88888884 +4 3.44444442 +4 3.77777767 +6 4.888889 +4 4.66666651 +7 5.77777767 +4 5 +1 3.33333325 +3 2.55555558 +2 2.11111116 +1 1.77777779 +5 3 +5 4.111111 +4 4.55555534 +6 5.111111 +5 5.111111 +3 4.33333349 +5 4.33333349 +4 4.111111 +2 3.33333325 +5 3.77777767 +6 4.77777767 +2 4 +3 3.33333325 +7 4.55555534 +3 4.33333349 +1 3 +3 2.33333325 +4 3 +3 3.33333325 +4 3.66666675 +5 4.22222233 +5 4.77777767 +2 3.66666675 +5 4 +5 4.33333349 +5 5 +1 3.22222233 +3 2.77777767 +4 3 +5 4.22222233 +3 3.88888884 +4 3.88888884 +8 5.55555534 +10 8 +8 8.666667 +7 8 +3 5.44444466 +1 3 +10 5.44444466 +5 5.77777767 +5 6.111111 +1 3.22222233 +1 1.88888884 +1 1 +5 2.77777767 +5 4.111111 +6 5.44444466 +3 4.44444466 +5 4.55555534 +1 2.77777767 +8 5 +5 5.111111 +9 7.44444466 +5 6.33333349 +4 5.44444466 +2 3.33333325 +10 6 +5 6 +4 5.66666651 +5 4.66666651 +4 4.33333349 +5 4.66666651 +3 3.88888884 +5 4.33333349 +3 3.66666675 +1 2.55555558 +4 2.77777767 +5 3.77777767 +5 4.77777767 +10 7.22222233 +4 6.22222233 +1 4 +5 3.44444442 +5 4.111111 +10 7.22222233 +5 6.66666651 +8 7.44444466 +2 4.66666651 +2 3.33333325 +4 2.88888884 +3 3.11111116 +1 2.33333325 +4 2.77777767 +5 3.77777767 +3 3.88888884 +6 4.77777767 +7 5.77777767 +1 4.111111 +5 4.111111 +3 3.22222233 +4 3.88888884 +2 2.88888884 +2 2.44444442 +4 2.88888884 +6 4.44444466 +5 5.111111 +1 3.44444442 +8 5 +3 4.22222233 +3 4.111111 +10 6.111111 +4 5.77777767 +4 5.33333349 +5 4.44444466 +4 4.33333349 +3 3.77777767 +3 3.22222233 +1 2.11111116 +2 1.88888884 +3 2.22222233 +1 1.88888884 +1 1.44444442 +5 2.77777767 +3 3.22222233 +3 3.44444442 +1 2.11111116 +5 3.22222233 +4 3.66666675 +3 3.77777767 +3 3.22222233 +5 3.88888884 +5 4.55555534 +7 5.888889 +1 3.88888884 +1 2.33333325 +4 2.33333325 +1 2 +1 1.66666663 +3 1.88888884 +1 1.66666663 +5 3.22222233 +3 3.22222233 +5 4.33333349 +5 4.55555534 +3 4.111111 +3 3.44444442 +2 2.55555558 +5 3.55555558 +1 2.55555558 +4 3.22222233 +1 2 +5 3.44444442 +1 2.33333325 +2 2.33333325 +10 5.33333349 +5 6 +5 6.111111 +1 3.22222233 +1 1.88888884 +1 1 +1 1 +3 1.88888884 +4 3 +1 2.44444442 +1 1.66666663 +5 2.77777767 +3 3.22222233 +3 3.44444442 +3 3 +2 2.55555558 +5 3.55555558 +4 3.88888884 +4 4.22222233 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageNonUniform-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageNonUniform-Schema.txt new file mode 100644 index 0000000000..6e765671a3 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageNonUniform-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- MovingAverageTransform ---- +2 columns: + Input: R4 + Output: R4 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageUniform-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageUniform-Data.txt new file mode 100644 index 0000000000..e29a40992b --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageUniform-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1 +#@ } +Input Output +5 ? +5 5 +3 4 +6 4.5 +4 5 +8 6 +1 4.5 +2 1.5 +2 2 +4 3 +1 2.5 +2 1.5 +5 3.5 +1 3 +8 4.5 +7 7.5 +4 5.5 +4 4 +10 7 +6 8 +7 6.5 +10 8.5 +3 6.5 +8 5.5 +1 4.5 +5 3 +3 4 +5 4 +2 3.5 +1 1.5 +3 2 +2 2.5 +10 6 +2 6 +3 2.5 +2 2.5 +10 6 +6 8 +5 5.5 +2 3.5 +6 4 +10 8 +6 8 +5 5.5 +10 7.5 +1 5.5 +3 2 +1 2 +4 2.5 +7 5.5 +9 8 +5 7 +10 7.5 +5 7.5 +10 7.5 +10 10 +8 9 +8 8 +5 6.5 +9 7 +5 7 +1 3 +9 5 +6 7.5 +1 3.5 +10 5.5 +4 7 +5 4.5 +8 6.5 +1 4.5 +5 3 +6 5.5 +1 3.5 +9 5 +10 9.5 +1 5.5 +1 1 +5 3 +3 4 +2 2.5 +2 2 +4 3 +5 4.5 +3 4 +3 3 +5 4 +3 4 +3 3 +4 3.5 +2 3 +1 1.5 +3 2 +4 3.5 +1 2.5 +2 1.5 +1 1.5 +2 1.5 +5 3.5 +9 7 +7 8 +10 8.5 +2 6 +4 3 +8 6 +10 9 +7 8.5 +10 8.5 +1 5.5 +1 1 +6 3.5 +1 3.5 +8 4.5 +10 9 +10 10 +3 6.5 +1 2 +8 4.5 +4 6 +1 2.5 +3 2 +1 2 +4 2.5 +10 7 +5 7.5 +5 5 +1 3 +7 4 +3 5 +8 5.5 +1 4.5 +5 3 +2 3.5 +5 3.5 +3 4 +3 3 +5 4 +4 4.5 +3 3.5 +4 3.5 +1 2.5 +3 2 +2 2.5 +9 5.5 +1 5 +2 1.5 +1 1.5 +3 2 +1 2 +3 2 +8 5.5 +1 4.5 +7 4 +10 8.5 +4 7 +1 2.5 +5 3 +1 3 +2 1.5 +1 1.5 +9 5 +10 9.5 +4 7 +3 3.5 +1 2 +5 3 +4 4.5 +5 4.5 +10 7.5 +3 6.5 +1 2 +3 2 +1 2 +1 1 +6 3.5 +8 7 +5 6.5 +2 3.5 +5 3.5 +4 4.5 +5 4.5 +1 3 +1 1 +6 3.5 +5 5.5 +8 6.5 +2 5 +1 1.5 +10 5.5 +5 7.5 +1 3 +10 5.5 +7 8.5 +5 6 +1 3 +3 2 +4 3.5 +8 6 +5 6.5 +1 3 +3 2 +9 6 +10 9.5 +1 5.5 +5 3 +1 3 +5 3 +10 7.5 +1 5.5 +1 1 +5 3 +8 6.5 +8 8 +1 4.5 +10 5.5 +10 10 +8 9 +1 4.5 +1 1 +6 3.5 +6 6 +1 3.5 +10 5.5 +4 7 +7 5.5 +10 8.5 +1 5.5 +10 5.5 +8 9 +1 4.5 +10 5.5 +7 8.5 +6 6.5 +8 7 +10 9 +3 6.5 +3 3 +10 6.5 +9 9.5 +8 8.5 +10 9 +5 7.5 +3 4 +2 2.5 +1 1.5 +1 1 +5 3 +8 6.5 +8 8 +4 6 +3 3.5 +1 2 +10 5.5 +6 8 +6 6 +9 7.5 +5 7 +3 4 +3 3 +3 3 +5 4 +10 7.5 +5 7.5 +8 6.5 +10 9 +7 8.5 +5 6 +10 7.5 +3 6.5 +10 6.5 +1 5.5 +8 4.5 +5 6.5 +3 4 +7 5 +3 5 +3 3 +3 3 +1 2 +1 1 +10 5.5 +3 6.5 +2 2.5 +1 1.5 +10 5.5 +7 8.5 +8 7.5 +10 9 +3 6.5 +6 4.5 +5 5.5 +1 3 +1 1 +8 4.5 +10 9 +1 5.5 +5 3 +5 5 +5 5 +8 6.5 +9 8.5 +8 8.5 +1 4.5 +10 5.5 +1 5.5 +8 4.5 +10 9 +1 5.5 +1 1 +7 4 +3 5 +2 2.5 +1 1.5 +8 4.5 +1 4.5 +1 1 +4 2.5 +5 4.5 +6 5.5 +1 3.5 +4 2.5 +7 5.5 +3 5 +3 3 +5 4 +1 3 +3 2 +10 6.5 +1 5.5 +8 4.5 +10 9 +10 10 +5 7.5 +5 5 +5 5 +8 6.5 +1 4.5 +6 3.5 +1 3.5 +1 1 +8 4.5 +10 9 +1 5.5 +2 1.5 +1 1.5 +7 4 +1 4 +5 3 +1 3 +3 2 +4 3.5 +5 4.5 +2 3.5 +3 2.5 +2 2.5 +1 1.5 +4 2.5 +5 4.5 +8 6.5 +8 8 +10 9 +6 8 +3 4.5 +3 3 +4 3.5 +2 3 +2 2 +6 4 +5 5.5 +1 3 +1 1 +4 2.5 +1 2.5 +4 2.5 +5 4.5 +3 4 +1 2 +1 1 +1 1 +3 2 +5 4 +1 3 +10 5.5 +3 6.5 +2 2.5 +2 2 +3 2.5 +7 5 +5 6 +2 3.5 +5 3.5 +1 3 +10 5.5 +3 6.5 +1 2 +1 1 +3 2 +3 3 +4 3.5 +3 3.5 +1 2 +3 2 +3 3 +5 4 +3 4 +1 2 +1 1 +4 2.5 +1 2.5 +2 1.5 +3 2.5 +1 2 +1 1 +10 5.5 +5 7.5 +8 6.5 +3 5.5 +8 5.5 +1 4.5 +5 3 +2 3.5 +3 2.5 +10 6.5 +4 7 +5 4.5 +3 4 +9 6 +5 7 +8 6.5 +1 4.5 +2 1.5 +1 1.5 +5 3 +5 5 +3 4 +6 4.5 +10 8 +10 10 +4 7 +4 4 +5 4.5 +10 7.5 +5 7.5 +1 3 +1 1 +5 3 +2 3.5 +1 1.5 +5 3 +1 3 +5 3 +4 4.5 +5 4.5 +3 4 +4 3.5 +2 3 +10 6 +10 10 +8 9 +5 6.5 +5 5 +5 5 +3 4 +6 4.5 +4 5 +4 4 +10 7 +10 10 +6 8 +4 5 +1 2.5 +3 2 +6 4.5 +6 6 +4 5 +5 4.5 +3 4 +4 3.5 +4 4 +5 4.5 +4 4.5 +5 4.5 +5 5 +9 7 +8 8.5 +5 6.5 +1 3 +3 2 +10 6.5 +3 6.5 +6 4.5 +1 3.5 +5 3 +4 4.5 +5 4.5 +5 5 +3 4 +1 2 +4 2.5 +4 4 +4 4 +6 5 +4 5 +4 4 +4 4 +1 2.5 +3 2 +8 5.5 +1 4.5 +5 3 +2 3.5 +1 1.5 +5 3 +5 5 +3 4 +6 4.5 +4 5 +1 2.5 +1 1 +3 2 +4 3.5 +1 2.5 +4 2.5 +10 7 +7 8.5 +3 5 +3 3 +4 3.5 +4 4 +6 5 +4 5 +7 5.5 +4 5.5 +1 2.5 +3 2 +2 2.5 +1 1.5 +5 3 +5 5 +4 4.5 +6 5 +5 5.5 +3 4 +5 4 +4 4.5 +2 3 +5 3.5 +6 5.5 +2 4 +3 2.5 +7 5 +3 5 +1 2 +3 2 +4 3.5 +3 3.5 +4 3.5 +5 4.5 +5 5 +2 3.5 +5 3.5 +5 5 +5 5 +1 3 +3 2 +4 3.5 +5 4.5 +3 4 +4 3.5 +8 6 +10 9 +8 9 +7 7.5 +3 5 +1 2 +10 5.5 +5 7.5 +5 5 +1 3 +1 1 +1 1 +5 3 +5 5 +6 5.5 +3 4.5 +5 4 +1 3 +8 4.5 +5 6.5 +9 7 +5 7 +4 4.5 +2 3 +10 6 +5 7.5 +4 4.5 +5 4.5 +4 4.5 +5 4.5 +3 4 +5 4 +3 4 +1 2 +4 2.5 +5 4.5 +5 5 +10 7.5 +4 7 +1 2.5 +5 3 +5 5 +10 7.5 +5 7.5 +8 6.5 +2 5 +2 2 +4 3 +3 3.5 +1 2 +4 2.5 +5 4.5 +3 4 +6 4.5 +7 6.5 +1 4 +5 3 +3 4 +4 3.5 +2 3 +2 2 +4 3 +6 5 +5 5.5 +1 3 +8 4.5 +3 5.5 +3 3 +10 6.5 +4 7 +4 4 +5 4.5 +4 4.5 +3 3.5 +3 3 +1 2 +2 1.5 +3 2.5 +1 2 +1 1 +5 3 +3 4 +3 3 +1 2 +5 3 +4 4.5 +3 3.5 +3 3 +5 4 +5 5 +7 6 +1 4 +1 1 +4 2.5 +1 2.5 +1 1 +3 2 +1 2 +5 3 +3 4 +5 4 +5 5 +3 4 +3 3 +2 2.5 +5 3.5 +1 3 +4 2.5 +1 2.5 +5 3 +1 3 +2 1.5 +10 6 +5 7.5 +5 5 +1 3 +1 1 +1 1 +1 1 +3 2 +4 3.5 +1 2.5 +1 1 +5 3 +3 4 +3 3 +3 3 +2 2.5 +5 3.5 +4 4.5 +4 4 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageUniform-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageUniform-Schema.txt new file mode 100644 index 0000000000..6e765671a3 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeMovingAverageUniform-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- MovingAverageTransform ---- +2 columns: + Input: R4 + Output: R4 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipePValue-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipePValue-Data.txt new file mode 100644 index 0000000000..34a9eb6082 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipePValue-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1 +#@ } +Input Output +5 1 +5 0.67724824 +3 1 +6 0.25 +4 0.8 +8 0.166666672 +1 1 +2 0.875 +2 0.7854611 +4 0.5740328 +1 0.9589244 +2 0.7228794 +5 0.272727281 +1 0.8969128 +8 0.14733927 +7 0.272727281 +4 0.4337017 +4 0.399984866 +10 0.09090909 +6 0.363636374 +7 0.334344774 +10 0.145531043 +3 0.909090936 +8 0.28252244 +1 1 +5 0.6363636 +3 0.8325536 +5 0.6155287 +2 0.909090936 +1 0.9093551 +3 0.661118746 +2 0.7528194 +10 0.09090909 +2 0.680000246 +3 0.368536383 +2 0.8267545 +10 0.121140651 +6 0.272727281 +5 0.363636374 +2 0.6439812 +6 0.285026431 +10 0.241532773 +6 0.392474532 +5 0.615853548 +10 0.22275129 +1 1 +3 0.8181818 +1 0.942523956 +4 0.6363636 +7 0.272727281 +9 0.272727281 +5 0.559340358 +10 0.167032644 +5 0.489836335 +10 0.146203086 +10 0.267976582 +8 0.454545468 +8 0.5328245 +5 0.8224906 +9 0.437735528 +5 0.728627741 +1 1 +9 0.399119973 +6 0.6363636 +1 0.9357464 +10 0.114698865 +4 0.8181818 +5 0.576868534 +8 0.363636374 +1 0.9565652 +5 0.5146173 +6 0.367678761 +1 0.8274701 +9 0.181818187 +10 0.106354795 +1 0.987836 +1 0.9099998 +5 0.59828943 +3 0.6363636 +2 0.6363636 +2 0.640976 +4 0.454545468 +5 0.3385074 +3 0.5527238 +3 0.5172669 +5 0.23269853 +3 0.6480279 +3 0.572897732 +4 0.348414332 +2 0.8681465 +1 1 +3 0.5078737 +4 0.318912238 +1 0.972162247 +2 0.7526057 +1 0.9581379 +2 0.5557997 +5 0.09090909 +9 0.09090909 +7 0.181818187 +10 0.09090909 +2 0.694301248 +4 0.5246275 +8 0.272727281 +10 0.149171308 +7 0.5022328 +10 0.224793568 +1 1 +1 0.913189352 +6 0.6363636 +1 0.8613943 +8 0.311439753 +10 0.130599514 +10 0.162753269 +3 0.727272749 +1 0.814144254 +8 0.381827384 +4 0.545454562 +1 0.9672585 +3 0.723939061 +1 0.992237568 +4 0.524444163 +10 0.23016645 +5 0.363636374 +5 0.344330758 +1 0.963756144 +7 0.272727281 +3 0.6671371 +8 0.181818187 +1 0.84266144 +5 0.4286802 +2 0.8181818 +5 0.39648667 +3 0.6499636 +3 0.6745726 +5 0.439955145 +4 0.545454562 +3 0.77230823 +4 0.5218466 +1 0.973230243 +3 0.6251988 +2 0.860421 +9 0.09090909 +1 0.9488389 +2 0.788549244 +1 0.890313566 +3 0.402053356 +1 0.749919 +3 0.295057267 +8 0.181818187 +1 0.7340951 +7 0.272727281 +10 0.09090909 +4 0.363636374 +1 0.885279953 +5 0.363636374 +1 0.983989954 +2 0.6363636 +1 0.92186904 +9 0.181818187 +10 0.109586149 +4 0.5584908 +3 0.6363636 +1 0.8549338 +5 0.343668848 +4 0.455887169 +5 0.3475949 +10 0.149302766 +3 0.7884052 +1 0.9400207 +3 0.7456703 +1 0.85511595 +1 0.791361451 +6 0.181818187 +8 0.181818187 +5 0.403921038 +2 0.727272749 +5 0.412166536 +4 0.454545468 +5 0.372099727 +1 0.849823058 +1 0.8782018 +6 0.19046621 +5 0.364953935 +8 0.142870486 +2 0.7523053 +1 0.9275337 +10 0.09090909 +5 0.45550254 +1 0.8085711 +10 0.154814124 +7 0.363636374 +5 0.69810313 +1 0.968209445 +3 0.6363636 +4 0.545454562 +8 0.272727281 +5 0.5367962 +1 0.9350541 +3 0.6484481 +9 0.181818187 +10 0.09090909 +1 0.8862705 +5 0.441305 +1 0.9416581 +5 0.469091117 +10 0.163443834 +1 0.9364225 +1 0.908844 +5 0.4144748 +8 0.363636374 +8 0.305728972 +1 0.8059212 +10 0.177512854 +10 0.217571646 +8 0.5011175 +1 0.8951562 +1 0.8840561 +6 0.545454562 +6 0.5750356 +1 0.740747631 +10 0.183787331 +4 0.6363636 +7 0.454545468 +10 0.223520443 +1 0.8946871 +10 0.207720429 +8 0.363636374 +1 0.916785836 +10 0.333905965 +7 0.5937079 +6 0.727272749 +8 0.367397249 +10 0.106754616 +3 0.8181818 +3 0.7294258 +10 0.313402861 +9 0.363636374 +8 0.4944481 +10 0.314687341 +5 0.8181818 +3 0.8735733 +2 1 +1 1 +1 0.9532511 +5 0.476910233 +8 0.379007369 +8 0.3471949 +4 0.6363636 +3 0.7163466 +1 0.900700033 +10 0.09090909 +6 0.363636374 +6 0.3653258 +9 0.181818187 +5 0.677533865 +3 0.824237049 +3 0.739362 +3 0.691915631 +5 0.5321044 +10 0.148391455 +5 0.545639753 +8 0.272727281 +10 0.168714538 +7 0.454545468 +5 0.467858434 +10 0.171352744 +3 0.860319257 +10 0.0954514444 +1 1 +8 0.461132824 +5 0.65796417 +3 0.890868 +7 0.544946253 +3 0.760424733 +3 0.671040833 +3 0.7360114 +1 0.9931545 +1 0.901879847 +10 0.09090909 +3 0.535336733 +2 0.8181818 +1 0.8628028 +10 0.127520159 +7 0.272727281 +8 0.272727281 +10 0.1165555 +3 0.5496179 +6 0.545454562 +5 0.6363636 +1 0.9255227 +1 0.9031256 +8 0.296668172 +10 0.216935679 +1 0.9797361 +5 0.551610231 +5 0.572749138 +5 0.395487577 +8 0.210969761 +9 0.181818187 +8 0.366248965 +1 0.995037854 +10 0.172745287 +1 0.984862864 +8 0.3890801 +10 0.108154535 +1 0.879870832 +1 0.7760568 +7 0.6363636 +3 0.6363636 +2 0.6363636 +1 0.8443887 +8 0.332467347 +1 0.681041658 +1 0.996511161 +4 0.363636374 +5 0.272727281 +6 0.272727281 +1 0.8829549 +4 0.417978525 +7 0.181818187 +3 0.6363636 +3 0.655908 +5 0.3602997 +1 0.9462807 +3 0.784368753 +10 0.09090909 +1 0.995902061 +8 0.181818187 +10 0.09233158 +10 0.125129163 +5 0.512630641 +5 0.4901322 +5 0.6648411 +8 0.409078836 +1 0.9939319 +6 0.545454562 +1 0.8581617 +1 0.88222003 +8 0.278109163 +10 0.167751029 +1 0.8899551 +2 0.6363636 +1 0.84825635 +7 0.363636374 +1 0.732380152 +5 0.454545468 +1 0.860485256 +3 0.454545468 +4 0.454545468 +5 0.324250251 +2 0.6027172 +3 0.523231149 +2 0.6629901 +1 0.9473943 +4 0.3179539 +5 0.139423847 +8 0.09090909 +8 0.160955936 +10 0.09090909 +6 0.363636374 +3 0.707062244 +3 0.7456907 +4 0.6276858 +2 0.909090936 +2 0.984455347 +6 0.3935735 +5 0.545454562 +1 1 +1 0.9212061 +4 0.4539985 +1 0.8561171 +4 0.288723141 +5 0.234696686 +3 0.545454562 +1 0.941684842 +1 0.8379912 +1 0.725884557 +3 0.396365255 +5 0.160947353 +1 0.840907753 +10 0.09090909 +3 0.55476743 +2 0.6363636 +2 0.578473032 +3 0.4165619 +7 0.181818187 +5 0.340624779 +2 0.90683794 +5 0.3154729 +1 0.949149668 +10 0.104174 +3 0.5378938 +1 0.9428833 +1 0.858884037 +3 0.463312 +3 0.56291914 +4 0.363636374 +3 0.381359845 +1 0.9785474 +3 0.616064 +3 0.599981368 +5 0.09090909 +3 0.318158627 +1 0.839379 +1 0.91915673 +4 0.221696168 +1 0.939768732 +2 0.6363636 +3 0.5440647 +1 0.9044986 +1 0.674405 +10 0.09090909 +5 0.181818187 +8 0.181818187 +3 0.474476755 +8 0.19971709 +1 0.8803639 +5 0.3996809 +2 0.727272749 +3 0.569248259 +10 0.121764518 +4 0.6363636 +5 0.398269981 +3 0.7870521 +9 0.181818187 +5 0.486302733 +8 0.272727281 +1 1 +2 0.8479825 +1 0.968556 +5 0.5218097 +5 0.445178866 +3 0.654234648 +6 0.272727281 +10 0.09090909 +10 0.119187057 +4 0.6363636 +4 0.556266367 +5 0.5196065 +10 0.104417115 +5 0.631046951 +1 1 +1 0.9590292 +5 0.5178429 +2 0.8181818 +1 0.8795123 +5 0.217087045 +1 0.9121801 +5 0.297860056 +4 0.545454562 +5 0.245706275 +3 0.545454562 +4 0.484356076 +2 0.7391402 +10 0.09090909 +10 0.1139638 +8 0.272727281 +5 0.4974126 +5 0.464024752 +5 0.5978673 +3 0.9000305 +6 0.363636374 +4 0.814810455 +4 0.73805207 +10 0.2562919 +10 0.109586142 +6 0.447875321 +4 0.8737396 +1 1 +3 0.8719057 +6 0.31129542 +6 0.389982939 +4 0.6647366 +5 0.545454562 +3 0.867078 +4 0.6205549 +4 0.6272626 +5 0.290590137 +4 0.504943848 +5 0.299601376 +5 0.495504349 +9 0.09090909 +8 0.181818187 +5 0.4735013 +1 1 +3 0.909090936 +10 0.09090909 +3 0.8604604 +6 0.363636374 +1 0.9443387 +5 0.5833764 +4 0.6363636 +5 0.38317275 +5 0.34949258 +3 0.7349538 +1 0.9954943 +4 0.6334044 +4 0.6306032 +4 0.6642208 +6 0.09090909 +4 0.665120661 +4 0.5852974 +4 0.7868041 +1 0.9451516 +3 0.7865967 +8 0.09090909 +1 0.971796155 +5 0.272727281 +2 0.8181818 +1 0.895550668 +5 0.265158653 +5 0.310825139 +3 0.608651 +6 0.181818187 +4 0.545454562 +1 0.9886279 +1 0.8893849 +3 0.557302237 +4 0.4533775 +1 0.729088068 +4 0.497636467 +10 0.09090909 +7 0.181818187 +3 0.6748641 +3 0.6505249 +4 0.372654766 +4 0.295031 +6 0.272727281 +4 0.537067831 +7 0.2242293 +4 0.6374568 +1 1 +3 0.8704981 +2 0.909090936 +1 0.974947155 +5 0.272727281 +5 0.349041671 +4 0.539139569 +6 0.181818187 +5 0.442963928 +3 0.7090445 +5 0.328877151 +4 0.6303283 +2 0.8740101 +5 0.340447277 +6 0.16025649 +2 0.984302461 +3 0.8095803 +7 0.09090909 +3 0.7326923 +1 1 +3 0.7059403 +4 0.4487561 +3 0.5511656 +4 0.39225167 +5 0.272727281 +5 0.219714016 +2 0.909090936 +5 0.289596319 +5 0.245398685 +5 0.210765988 +1 1 +3 0.796564162 +4 0.5986337 +5 0.398065865 +3 0.7543564 +4 0.6075292 +8 0.09090909 +10 0.09090909 +8 0.237029776 +7 0.363636374 +3 0.7482466 +1 1 +10 0.106426656 +5 0.551951647 +5 0.5530232 +1 0.910909951 +1 0.9055377 +1 0.7326479 +5 0.387349159 +5 0.502768159 +6 0.181818187 +3 0.6363636 +5 0.3768508 +1 0.8015215 +8 0.09090909 +5 0.2928952 +9 0.09090909 +5 0.417686075 +4 0.8181818 +2 0.909090936 +10 0.09090909 +5 0.565179348 +4 0.7372478 +5 0.411596715 +4 0.7647299 +5 0.3257723 +3 0.909090936 +5 0.487032026 +3 0.8243184 +1 1 +4 0.636648536 +5 0.24010466 +5 0.441147119 +10 0.09090909 +4 0.6845645 +1 0.9215487 +5 0.3449822 +5 0.193249479 +10 0.173848376 +5 0.27435258 +8 0.272727281 +2 0.909090936 +2 0.837528169 +4 0.651384234 +3 0.727272749 +1 0.9226808 +4 0.577480435 +5 0.324079484 +3 0.696873844 +6 0.181818187 +7 0.181818187 +1 0.9914505 +5 0.3354559 +3 0.7013664 +4 0.5209869 +2 0.8181818 +2 0.864079356 +4 0.466819137 +6 0.220339686 +5 0.3713796 +1 0.9347191 +8 0.09090909 +3 0.6703649 +3 0.687106133 +10 0.09090909 +4 0.4625498 +4 0.63540256 +5 0.429197 +4 0.5984183 +3 0.754156053 +3 0.8948213 +1 1 +2 0.909090936 +3 0.6130304 +1 0.9264184 +1 0.9738972 +5 0.151729017 +3 0.5702898 +3 0.4818108 +1 0.7910032 +5 0.168775931 +4 0.272727281 +3 0.493914 +3 0.496514678 +5 0.124498948 +5 0.21097295 +7 0.09090909 +1 0.984740734 +1 0.8905695 +4 0.5316517 +1 0.844643354 +1 0.846752644 +3 0.462555 +1 0.7273109 +5 0.316857576 +3 0.478257 +5 0.257308483 +5 0.09290838 +3 0.5510434 +3 0.5617856 +2 0.727272749 +5 0.150430918 +1 0.9573383 +4 0.454545468 +1 0.944630861 +5 0.251721174 +1 0.9449819 +2 0.711378 +10 0.09090909 +5 0.2464249 +5 0.226547778 +1 0.96894294 +1 0.833415151 +1 0.8450047 +1 0.924681246 +3 0.454545468 +4 0.363636374 +1 0.94199127 +1 0.6516124 +5 0.210350782 +3 0.386591464 +3 0.2798103 +3 0.2814521 +2 0.6363636 +5 0.11612238 +4 0.306363285 +4 0.3822979 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipePValue-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipePValue-Schema.txt new file mode 100644 index 0000000000..775a3308c9 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipePValue-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- PValueTransform ---- +2 columns: + Input: R4 + Output: R4 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipePercentileThreshold-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipePercentileThreshold-Data.txt new file mode 100644 index 0000000000..f3d17a98af --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipePercentileThreshold-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:BL:1 +#@ } +Input Output +5 0 +5 0 +3 0 +6 0 +4 0 +8 0 +1 0 +2 0 +2 0 +4 0 +1 0 +2 0 +5 0 +1 0 +8 0 +7 0 +4 0 +4 0 +10 0 +6 0 +7 0 +10 0 +3 0 +8 0 +1 0 +5 0 +3 0 +5 0 +2 0 +1 0 +3 0 +2 0 +10 0 +2 0 +3 0 +2 0 +10 0 +6 0 +5 0 +2 0 +6 0 +10 0 +6 0 +5 0 +10 0 +1 0 +3 0 +1 0 +4 0 +7 0 +9 0 +5 0 +10 0 +5 0 +10 0 +10 0 +8 0 +8 0 +5 0 +9 0 +5 0 +1 0 +9 0 +6 0 +1 0 +10 0 +4 0 +5 0 +8 0 +1 0 +5 0 +6 0 +1 0 +9 0 +10 0 +1 0 +1 0 +5 0 +3 0 +2 0 +2 0 +4 0 +5 0 +3 0 +3 0 +5 0 +3 0 +3 0 +4 0 +2 0 +1 0 +3 0 +4 0 +1 0 +2 0 +1 0 +2 0 +5 0 +9 0 +7 0 +10 0 +2 0 +4 0 +8 0 +10 0 +7 0 +10 0 +1 0 +1 0 +6 0 +1 0 +8 0 +10 0 +10 0 +3 0 +1 0 +8 0 +4 0 +1 0 +3 0 +1 0 +4 0 +10 0 +5 0 +5 0 +1 0 +7 0 +3 0 +8 0 +1 0 +5 0 +2 0 +5 0 +3 0 +3 0 +5 0 +4 0 +3 0 +4 0 +1 0 +3 0 +2 0 +9 0 +1 0 +2 0 +1 0 +3 0 +1 0 +3 0 +8 0 +1 0 +7 0 +10 0 +4 0 +1 0 +5 0 +1 0 +2 0 +1 0 +9 0 +10 0 +4 0 +3 0 +1 0 +5 0 +4 0 +5 0 +10 0 +3 0 +1 0 +3 0 +1 0 +1 0 +6 0 +8 0 +5 0 +2 0 +5 0 +4 0 +5 0 +1 0 +1 0 +6 0 +5 0 +8 0 +2 0 +1 0 +10 0 +5 0 +1 0 +10 0 +7 0 +5 0 +1 0 +3 0 +4 0 +8 0 +5 0 +1 0 +3 0 +9 0 +10 0 +1 0 +5 0 +1 0 +5 0 +10 0 +1 0 +1 0 +5 0 +8 0 +8 0 +1 0 +10 0 +10 0 +8 0 +1 0 +1 0 +6 0 +6 0 +1 0 +10 0 +4 0 +7 0 +10 0 +1 0 +10 0 +8 0 +1 0 +10 0 +7 0 +6 0 +8 0 +10 0 +3 0 +3 0 +10 0 +9 0 +8 0 +10 0 +5 0 +3 0 +2 0 +1 0 +1 0 +5 0 +8 0 +8 0 +4 0 +3 0 +1 0 +10 0 +6 0 +6 0 +9 0 +5 0 +3 0 +3 0 +3 0 +5 0 +10 0 +5 0 +8 0 +10 0 +7 0 +5 0 +10 0 +3 0 +10 0 +1 0 +8 0 +5 0 +3 0 +7 0 +3 0 +3 0 +3 0 +1 0 +1 0 +10 0 +3 0 +2 0 +1 0 +10 0 +7 0 +8 0 +10 0 +3 0 +6 0 +5 0 +1 0 +1 0 +8 0 +10 0 +1 0 +5 0 +5 0 +5 0 +8 0 +9 0 +8 0 +1 0 +10 0 +1 0 +8 0 +10 0 +1 0 +1 0 +7 0 +3 0 +2 0 +1 0 +8 0 +1 0 +1 0 +4 0 +5 0 +6 0 +1 0 +4 0 +7 0 +3 0 +3 0 +5 0 +1 0 +3 0 +10 0 +1 0 +8 0 +10 0 +10 0 +5 0 +5 0 +5 0 +8 0 +1 0 +6 0 +1 0 +1 0 +8 0 +10 0 +1 0 +2 0 +1 0 +7 0 +1 0 +5 0 +1 0 +3 0 +4 0 +5 0 +2 0 +3 0 +2 0 +1 0 +4 0 +5 0 +8 0 +8 0 +10 0 +6 0 +3 0 +3 0 +4 0 +2 0 +2 0 +6 0 +5 0 +1 0 +1 0 +4 0 +1 0 +4 0 +5 0 +3 0 +1 0 +1 0 +1 0 +3 0 +5 0 +1 0 +10 0 +3 0 +2 0 +2 0 +3 0 +7 0 +5 0 +2 0 +5 0 +1 0 +10 0 +3 0 +1 0 +1 0 +3 0 +3 0 +4 0 +3 0 +1 0 +3 0 +3 0 +5 0 +3 0 +1 0 +1 0 +4 0 +1 0 +2 0 +3 0 +1 0 +1 0 +10 0 +5 0 +8 0 +3 0 +8 0 +1 0 +5 0 +2 0 +3 0 +10 0 +4 0 +5 0 +3 0 +9 0 +5 0 +8 0 +1 0 +2 0 +1 0 +5 0 +5 0 +3 0 +6 0 +10 0 +10 0 +4 0 +4 0 +5 0 +10 0 +5 0 +1 0 +1 0 +5 0 +2 0 +1 0 +5 0 +1 0 +5 0 +4 0 +5 0 +3 0 +4 0 +2 0 +10 0 +10 0 +8 0 +5 0 +5 0 +5 0 +3 0 +6 0 +4 0 +4 0 +10 0 +10 0 +6 0 +4 0 +1 0 +3 0 +6 0 +6 0 +4 0 +5 0 +3 0 +4 0 +4 0 +5 0 +4 0 +5 0 +5 0 +9 0 +8 0 +5 0 +1 0 +3 0 +10 0 +3 0 +6 0 +1 0 +5 0 +4 0 +5 0 +5 0 +3 0 +1 0 +4 0 +4 0 +4 0 +6 0 +4 0 +4 0 +4 0 +1 0 +3 0 +8 0 +1 0 +5 0 +2 0 +1 0 +5 0 +5 0 +3 0 +6 0 +4 0 +1 0 +1 0 +3 0 +4 0 +1 0 +4 0 +10 0 +7 0 +3 0 +3 0 +4 0 +4 0 +6 0 +4 0 +7 0 +4 0 +1 0 +3 0 +2 0 +1 0 +5 0 +5 0 +4 0 +6 0 +5 0 +3 0 +5 0 +4 0 +2 0 +5 0 +6 0 +2 0 +3 0 +7 0 +3 0 +1 0 +3 0 +4 0 +3 0 +4 0 +5 0 +5 0 +2 0 +5 0 +5 0 +5 0 +1 0 +3 0 +4 0 +5 0 +3 0 +4 0 +8 0 +10 0 +8 0 +7 0 +3 0 +1 0 +10 0 +5 0 +5 0 +1 0 +1 0 +1 0 +5 0 +5 0 +6 0 +3 0 +5 0 +1 0 +8 0 +5 0 +9 0 +5 0 +4 0 +2 0 +10 0 +5 0 +4 0 +5 0 +4 0 +5 0 +3 0 +5 0 +3 0 +1 0 +4 0 +5 0 +5 0 +10 0 +4 0 +1 0 +5 0 +5 0 +10 0 +5 0 +8 0 +2 0 +2 0 +4 0 +3 0 +1 0 +4 0 +5 0 +3 0 +6 0 +7 0 +1 0 +5 0 +3 0 +4 0 +2 0 +2 0 +4 0 +6 0 +5 0 +1 0 +8 0 +3 0 +3 0 +10 0 +4 0 +4 0 +5 0 +4 0 +3 0 +3 0 +1 0 +2 0 +3 0 +1 0 +1 0 +5 0 +3 0 +3 0 +1 0 +5 0 +4 0 +3 0 +3 0 +5 0 +5 0 +7 0 +1 0 +1 0 +4 0 +1 0 +1 0 +3 0 +1 0 +5 0 +3 0 +5 0 +5 0 +3 0 +3 0 +2 0 +5 0 +1 0 +4 0 +1 0 +5 0 +1 0 +2 0 +10 0 +5 0 +5 0 +1 0 +1 0 +1 0 +1 0 +3 0 +4 0 +1 0 +1 0 +5 0 +3 0 +3 0 +3 0 +2 0 +5 0 +4 0 +4 0 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipePercentileThreshold-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipePercentileThreshold-Schema.txt new file mode 100644 index 0000000000..d4d263f2a4 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipePercentileThreshold-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- PercentileThresholdTransform ---- +2 columns: + Input: R4 + Output: Bool diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindow-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindow-Data.txt new file mode 100644 index 0000000000..d69300c776 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindow-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1-** +#@ } +Input +5 ? ? ? +5 ? ? ? +3 5 5 3 +6 5 3 6 +4 3 6 4 +8 6 4 8 +1 4 8 1 +2 8 1 2 +2 1 2 2 +4 2 2 4 +1 2 4 1 +2 4 1 2 +5 1 2 5 +1 2 5 1 +8 5 1 8 +7 1 8 7 +4 8 7 4 +4 7 4 4 +10 4 4 10 +6 4 10 6 +7 10 6 7 +10 6 7 10 +3 7 10 3 +8 10 3 8 +1 3 8 1 +5 8 1 5 +3 1 5 3 +5 5 3 5 +2 3 5 2 +1 5 2 1 +3 2 1 3 +2 1 3 2 +10 3 2 10 +2 2 10 2 +3 10 2 3 +2 2 3 2 +10 3 2 10 +6 2 10 6 +5 10 6 5 +2 6 5 2 +6 5 2 6 +10 2 6 10 +6 6 10 6 +5 10 6 5 +10 6 5 10 +1 5 10 1 +3 10 1 3 +1 1 3 1 +4 3 1 4 +7 1 4 7 +9 4 7 9 +5 7 9 5 +10 9 5 10 +5 5 10 5 +10 10 5 10 +10 5 10 10 +8 10 10 8 +8 10 8 8 +5 8 8 5 +9 8 5 9 +5 5 9 5 +1 9 5 1 +9 5 1 9 +6 1 9 6 +1 9 6 1 +10 6 1 10 +4 1 10 4 +5 10 4 5 +8 4 5 8 +1 5 8 1 +5 8 1 5 +6 1 5 6 +1 5 6 1 +9 6 1 9 +10 1 9 10 +1 9 10 1 +1 10 1 1 +5 1 1 5 +3 1 5 3 +2 5 3 2 +2 3 2 2 +4 2 2 4 +5 2 4 5 +3 4 5 3 +3 5 3 3 +5 3 3 5 +3 3 5 3 +3 5 3 3 +4 3 3 4 +2 3 4 2 +1 4 2 1 +3 2 1 3 +4 1 3 4 +1 3 4 1 +2 4 1 2 +1 1 2 1 +2 2 1 2 +5 1 2 5 +9 2 5 9 +7 5 9 7 +10 9 7 10 +2 7 10 2 +4 10 2 4 +8 2 4 8 +10 4 8 10 +7 8 10 7 +10 10 7 10 +1 7 10 1 +1 10 1 1 +6 1 1 6 +1 1 6 1 +8 6 1 8 +10 1 8 10 +10 8 10 10 +3 10 10 3 +1 10 3 1 +8 3 1 8 +4 1 8 4 +1 8 4 1 +3 4 1 3 +1 1 3 1 +4 3 1 4 +10 1 4 10 +5 4 10 5 +5 10 5 5 +1 5 5 1 +7 5 1 7 +3 1 7 3 +8 7 3 8 +1 3 8 1 +5 8 1 5 +2 1 5 2 +5 5 2 5 +3 2 5 3 +3 5 3 3 +5 3 3 5 +4 3 5 4 +3 5 4 3 +4 4 3 4 +1 3 4 1 +3 4 1 3 +2 1 3 2 +9 3 2 9 +1 2 9 1 +2 9 1 2 +1 1 2 1 +3 2 1 3 +1 1 3 1 +3 3 1 3 +8 1 3 8 +1 3 8 1 +7 8 1 7 +10 1 7 10 +4 7 10 4 +1 10 4 1 +5 4 1 5 +1 1 5 1 +2 5 1 2 +1 1 2 1 +9 2 1 9 +10 1 9 10 +4 9 10 4 +3 10 4 3 +1 4 3 1 +5 3 1 5 +4 1 5 4 +5 5 4 5 +10 4 5 10 +3 5 10 3 +1 10 3 1 +3 3 1 3 +1 1 3 1 +1 3 1 1 +6 1 1 6 +8 1 6 8 +5 6 8 5 +2 8 5 2 +5 5 2 5 +4 2 5 4 +5 5 4 5 +1 4 5 1 +1 5 1 1 +6 1 1 6 +5 1 6 5 +8 6 5 8 +2 5 8 2 +1 8 2 1 +10 2 1 10 +5 1 10 5 +1 10 5 1 +10 5 1 10 +7 1 10 7 +5 10 7 5 +1 7 5 1 +3 5 1 3 +4 1 3 4 +8 3 4 8 +5 4 8 5 +1 8 5 1 +3 5 1 3 +9 1 3 9 +10 3 9 10 +1 9 10 1 +5 10 1 5 +1 1 5 1 +5 5 1 5 +10 1 5 10 +1 5 10 1 +1 10 1 1 +5 1 1 5 +8 1 5 8 +8 5 8 8 +1 8 8 1 +10 8 1 10 +10 1 10 10 +8 10 10 8 +1 10 8 1 +1 8 1 1 +6 1 1 6 +6 1 6 6 +1 6 6 1 +10 6 1 10 +4 1 10 4 +7 10 4 7 +10 4 7 10 +1 7 10 1 +10 10 1 10 +8 1 10 8 +1 10 8 1 +10 8 1 10 +7 1 10 7 +6 10 7 6 +8 7 6 8 +10 6 8 10 +3 8 10 3 +3 10 3 3 +10 3 3 10 +9 3 10 9 +8 10 9 8 +10 9 8 10 +5 8 10 5 +3 10 5 3 +2 5 3 2 +1 3 2 1 +1 2 1 1 +5 1 1 5 +8 1 5 8 +8 5 8 8 +4 8 8 4 +3 8 4 3 +1 4 3 1 +10 3 1 10 +6 1 10 6 +6 10 6 6 +9 6 6 9 +5 6 9 5 +3 9 5 3 +3 5 3 3 +3 3 3 3 +5 3 3 5 +10 3 5 10 +5 5 10 5 +8 10 5 8 +10 5 8 10 +7 8 10 7 +5 10 7 5 +10 7 5 10 +3 5 10 3 +10 10 3 10 +1 3 10 1 +8 10 1 8 +5 1 8 5 +3 8 5 3 +7 5 3 7 +3 3 7 3 +3 7 3 3 +3 3 3 3 +1 3 3 1 +1 3 1 1 +10 1 1 10 +3 1 10 3 +2 10 3 2 +1 3 2 1 +10 2 1 10 +7 1 10 7 +8 10 7 8 +10 7 8 10 +3 8 10 3 +6 10 3 6 +5 3 6 5 +1 6 5 1 +1 5 1 1 +8 1 1 8 +10 1 8 10 +1 8 10 1 +5 10 1 5 +5 1 5 5 +5 5 5 5 +8 5 5 8 +9 5 8 9 +8 8 9 8 +1 9 8 1 +10 8 1 10 +1 1 10 1 +8 10 1 8 +10 1 8 10 +1 8 10 1 +1 10 1 1 +7 1 1 7 +3 1 7 3 +2 7 3 2 +1 3 2 1 +8 2 1 8 +1 1 8 1 +1 8 1 1 +4 1 1 4 +5 1 4 5 +6 4 5 6 +1 5 6 1 +4 6 1 4 +7 1 4 7 +3 4 7 3 +3 7 3 3 +5 3 3 5 +1 3 5 1 +3 5 1 3 +10 1 3 10 +1 3 10 1 +8 10 1 8 +10 1 8 10 +10 8 10 10 +5 10 10 5 +5 10 5 5 +5 5 5 5 +8 5 5 8 +1 5 8 1 +6 8 1 6 +1 1 6 1 +1 6 1 1 +8 1 1 8 +10 1 8 10 +1 8 10 1 +2 10 1 2 +1 1 2 1 +7 2 1 7 +1 1 7 1 +5 7 1 5 +1 1 5 1 +3 5 1 3 +4 1 3 4 +5 3 4 5 +2 4 5 2 +3 5 2 3 +2 2 3 2 +1 3 2 1 +4 2 1 4 +5 1 4 5 +8 4 5 8 +8 5 8 8 +10 8 8 10 +6 8 10 6 +3 10 6 3 +3 6 3 3 +4 3 3 4 +2 3 4 2 +2 4 2 2 +6 2 2 6 +5 2 6 5 +1 6 5 1 +1 5 1 1 +4 1 1 4 +1 1 4 1 +4 4 1 4 +5 1 4 5 +3 4 5 3 +1 5 3 1 +1 3 1 1 +1 1 1 1 +3 1 1 3 +5 1 3 5 +1 3 5 1 +10 5 1 10 +3 1 10 3 +2 10 3 2 +2 3 2 2 +3 2 2 3 +7 2 3 7 +5 3 7 5 +2 7 5 2 +5 5 2 5 +1 2 5 1 +10 5 1 10 +3 1 10 3 +1 10 3 1 +1 3 1 1 +3 1 1 3 +3 1 3 3 +4 3 3 4 +3 3 4 3 +1 4 3 1 +3 3 1 3 +3 1 3 3 +5 3 3 5 +3 3 5 3 +1 5 3 1 +1 3 1 1 +4 1 1 4 +1 1 4 1 +2 4 1 2 +3 1 2 3 +1 2 3 1 +1 3 1 1 +10 1 1 10 +5 1 10 5 +8 10 5 8 +3 5 8 3 +8 8 3 8 +1 3 8 1 +5 8 1 5 +2 1 5 2 +3 5 2 3 +10 2 3 10 +4 3 10 4 +5 10 4 5 +3 4 5 3 +9 5 3 9 +5 3 9 5 +8 9 5 8 +1 5 8 1 +2 8 1 2 +1 1 2 1 +5 2 1 5 +5 1 5 5 +3 5 5 3 +6 5 3 6 +10 3 6 10 +10 6 10 10 +4 10 10 4 +4 10 4 4 +5 4 4 5 +10 4 5 10 +5 5 10 5 +1 10 5 1 +1 5 1 1 +5 1 1 5 +2 1 5 2 +1 5 2 1 +5 2 1 5 +1 1 5 1 +5 5 1 5 +4 1 5 4 +5 5 4 5 +3 4 5 3 +4 5 3 4 +2 3 4 2 +10 4 2 10 +10 2 10 10 +8 10 10 8 +5 10 8 5 +5 8 5 5 +5 5 5 5 +3 5 5 3 +6 5 3 6 +4 3 6 4 +4 6 4 4 +10 4 4 10 +10 4 10 10 +6 10 10 6 +4 10 6 4 +1 6 4 1 +3 4 1 3 +6 1 3 6 +6 3 6 6 +4 6 6 4 +5 6 4 5 +3 4 5 3 +4 5 3 4 +4 3 4 4 +5 4 4 5 +4 4 5 4 +5 5 4 5 +5 4 5 5 +9 5 5 9 +8 5 9 8 +5 9 8 5 +1 8 5 1 +3 5 1 3 +10 1 3 10 +3 3 10 3 +6 10 3 6 +1 3 6 1 +5 6 1 5 +4 1 5 4 +5 5 4 5 +5 4 5 5 +3 5 5 3 +1 5 3 1 +4 3 1 4 +4 1 4 4 +4 4 4 4 +6 4 4 6 +4 4 6 4 +4 6 4 4 +4 4 4 4 +1 4 4 1 +3 4 1 3 +8 1 3 8 +1 3 8 1 +5 8 1 5 +2 1 5 2 +1 5 2 1 +5 2 1 5 +5 1 5 5 +3 5 5 3 +6 5 3 6 +4 3 6 4 +1 6 4 1 +1 4 1 1 +3 1 1 3 +4 1 3 4 +1 3 4 1 +4 4 1 4 +10 1 4 10 +7 4 10 7 +3 10 7 3 +3 7 3 3 +4 3 3 4 +4 3 4 4 +6 4 4 6 +4 4 6 4 +7 6 4 7 +4 4 7 4 +1 7 4 1 +3 4 1 3 +2 1 3 2 +1 3 2 1 +5 2 1 5 +5 1 5 5 +4 5 5 4 +6 5 4 6 +5 4 6 5 +3 6 5 3 +5 5 3 5 +4 3 5 4 +2 5 4 2 +5 4 2 5 +6 2 5 6 +2 5 6 2 +3 6 2 3 +7 2 3 7 +3 3 7 3 +1 7 3 1 +3 3 1 3 +4 1 3 4 +3 3 4 3 +4 4 3 4 +5 3 4 5 +5 4 5 5 +2 5 5 2 +5 5 2 5 +5 2 5 5 +5 5 5 5 +1 5 5 1 +3 5 1 3 +4 1 3 4 +5 3 4 5 +3 4 5 3 +4 5 3 4 +8 3 4 8 +10 4 8 10 +8 8 10 8 +7 10 8 7 +3 8 7 3 +1 7 3 1 +10 3 1 10 +5 1 10 5 +5 10 5 5 +1 5 5 1 +1 5 1 1 +1 1 1 1 +5 1 1 5 +5 1 5 5 +6 5 5 6 +3 5 6 3 +5 6 3 5 +1 3 5 1 +8 5 1 8 +5 1 8 5 +9 8 5 9 +5 5 9 5 +4 9 5 4 +2 5 4 2 +10 4 2 10 +5 2 10 5 +4 10 5 4 +5 5 4 5 +4 4 5 4 +5 5 4 5 +3 4 5 3 +5 5 3 5 +3 3 5 3 +1 5 3 1 +4 3 1 4 +5 1 4 5 +5 4 5 5 +10 5 5 10 +4 5 10 4 +1 10 4 1 +5 4 1 5 +5 1 5 5 +10 5 5 10 +5 5 10 5 +8 10 5 8 +2 5 8 2 +2 8 2 2 +4 2 2 4 +3 2 4 3 +1 4 3 1 +4 3 1 4 +5 1 4 5 +3 4 5 3 +6 5 3 6 +7 3 6 7 +1 6 7 1 +5 7 1 5 +3 1 5 3 +4 5 3 4 +2 3 4 2 +2 4 2 2 +4 2 2 4 +6 2 4 6 +5 4 6 5 +1 6 5 1 +8 5 1 8 +3 1 8 3 +3 8 3 3 +10 3 3 10 +4 3 10 4 +4 10 4 4 +5 4 4 5 +4 4 5 4 +3 5 4 3 +3 4 3 3 +1 3 3 1 +2 3 1 2 +3 1 2 3 +1 2 3 1 +1 3 1 1 +5 1 1 5 +3 1 5 3 +3 5 3 3 +1 3 3 1 +5 3 1 5 +4 1 5 4 +3 5 4 3 +3 4 3 3 +5 3 3 5 +5 3 5 5 +7 5 5 7 +1 5 7 1 +1 7 1 1 +4 1 1 4 +1 1 4 1 +1 4 1 1 +3 1 1 3 +1 1 3 1 +5 3 1 5 +3 1 5 3 +5 5 3 5 +5 3 5 5 +3 5 5 3 +3 5 3 3 +2 3 3 2 +5 3 2 5 +1 2 5 1 +4 5 1 4 +1 1 4 1 +5 4 1 5 +1 1 5 1 +2 5 1 2 +10 1 2 10 +5 2 10 5 +5 10 5 5 +1 5 5 1 +1 5 1 1 +1 1 1 1 +1 1 1 1 +3 1 1 3 +4 1 3 4 +1 3 4 1 +1 4 1 1 +5 1 1 5 +3 1 5 3 +3 5 3 3 +3 3 3 3 +2 3 3 2 +5 3 2 5 +4 2 5 4 +4 5 4 4 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindow-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindow-Schema.txt new file mode 100644 index 0000000000..1cdb547e6d --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindow-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- SlidingWindowTransform ---- +2 columns: + Input: R4 + Output: Vec diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L1-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L1-Data.txt new file mode 100644 index 0000000000..1c1508d4dd --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L1-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1-** +#@ } +Input +5 ? +5 5 +3 5 +6 3 +4 6 +8 4 +1 8 +2 1 +2 2 +4 2 +1 4 +2 1 +5 2 +1 5 +8 1 +7 8 +4 7 +4 4 +10 4 +6 10 +7 6 +10 7 +3 10 +8 3 +1 8 +5 1 +3 5 +5 3 +2 5 +1 2 +3 1 +2 3 +10 2 +2 10 +3 2 +2 3 +10 2 +6 10 +5 6 +2 5 +6 2 +10 6 +6 10 +5 6 +10 5 +1 10 +3 1 +1 3 +4 1 +7 4 +9 7 +5 9 +10 5 +5 10 +10 5 +10 10 +8 10 +8 8 +5 8 +9 5 +5 9 +1 5 +9 1 +6 9 +1 6 +10 1 +4 10 +5 4 +8 5 +1 8 +5 1 +6 5 +1 6 +9 1 +10 9 +1 10 +1 1 +5 1 +3 5 +2 3 +2 2 +4 2 +5 4 +3 5 +3 3 +5 3 +3 5 +3 3 +4 3 +2 4 +1 2 +3 1 +4 3 +1 4 +2 1 +1 2 +2 1 +5 2 +9 5 +7 9 +10 7 +2 10 +4 2 +8 4 +10 8 +7 10 +10 7 +1 10 +1 1 +6 1 +1 6 +8 1 +10 8 +10 10 +3 10 +1 3 +8 1 +4 8 +1 4 +3 1 +1 3 +4 1 +10 4 +5 10 +5 5 +1 5 +7 1 +3 7 +8 3 +1 8 +5 1 +2 5 +5 2 +3 5 +3 3 +5 3 +4 5 +3 4 +4 3 +1 4 +3 1 +2 3 +9 2 +1 9 +2 1 +1 2 +3 1 +1 3 +3 1 +8 3 +1 8 +7 1 +10 7 +4 10 +1 4 +5 1 +1 5 +2 1 +1 2 +9 1 +10 9 +4 10 +3 4 +1 3 +5 1 +4 5 +5 4 +10 5 +3 10 +1 3 +3 1 +1 3 +1 1 +6 1 +8 6 +5 8 +2 5 +5 2 +4 5 +5 4 +1 5 +1 1 +6 1 +5 6 +8 5 +2 8 +1 2 +10 1 +5 10 +1 5 +10 1 +7 10 +5 7 +1 5 +3 1 +4 3 +8 4 +5 8 +1 5 +3 1 +9 3 +10 9 +1 10 +5 1 +1 5 +5 1 +10 5 +1 10 +1 1 +5 1 +8 5 +8 8 +1 8 +10 1 +10 10 +8 10 +1 8 +1 1 +6 1 +6 6 +1 6 +10 1 +4 10 +7 4 +10 7 +1 10 +10 1 +8 10 +1 8 +10 1 +7 10 +6 7 +8 6 +10 8 +3 10 +3 3 +10 3 +9 10 +8 9 +10 8 +5 10 +3 5 +2 3 +1 2 +1 1 +5 1 +8 5 +8 8 +4 8 +3 4 +1 3 +10 1 +6 10 +6 6 +9 6 +5 9 +3 5 +3 3 +3 3 +5 3 +10 5 +5 10 +8 5 +10 8 +7 10 +5 7 +10 5 +3 10 +10 3 +1 10 +8 1 +5 8 +3 5 +7 3 +3 7 +3 3 +3 3 +1 3 +1 1 +10 1 +3 10 +2 3 +1 2 +10 1 +7 10 +8 7 +10 8 +3 10 +6 3 +5 6 +1 5 +1 1 +8 1 +10 8 +1 10 +5 1 +5 5 +5 5 +8 5 +9 8 +8 9 +1 8 +10 1 +1 10 +8 1 +10 8 +1 10 +1 1 +7 1 +3 7 +2 3 +1 2 +8 1 +1 8 +1 1 +4 1 +5 4 +6 5 +1 6 +4 1 +7 4 +3 7 +3 3 +5 3 +1 5 +3 1 +10 3 +1 10 +8 1 +10 8 +10 10 +5 10 +5 5 +5 5 +8 5 +1 8 +6 1 +1 6 +1 1 +8 1 +10 8 +1 10 +2 1 +1 2 +7 1 +1 7 +5 1 +1 5 +3 1 +4 3 +5 4 +2 5 +3 2 +2 3 +1 2 +4 1 +5 4 +8 5 +8 8 +10 8 +6 10 +3 6 +3 3 +4 3 +2 4 +2 2 +6 2 +5 6 +1 5 +1 1 +4 1 +1 4 +4 1 +5 4 +3 5 +1 3 +1 1 +1 1 +3 1 +5 3 +1 5 +10 1 +3 10 +2 3 +2 2 +3 2 +7 3 +5 7 +2 5 +5 2 +1 5 +10 1 +3 10 +1 3 +1 1 +3 1 +3 3 +4 3 +3 4 +1 3 +3 1 +3 3 +5 3 +3 5 +1 3 +1 1 +4 1 +1 4 +2 1 +3 2 +1 3 +1 1 +10 1 +5 10 +8 5 +3 8 +8 3 +1 8 +5 1 +2 5 +3 2 +10 3 +4 10 +5 4 +3 5 +9 3 +5 9 +8 5 +1 8 +2 1 +1 2 +5 1 +5 5 +3 5 +6 3 +10 6 +10 10 +4 10 +4 4 +5 4 +10 5 +5 10 +1 5 +1 1 +5 1 +2 5 +1 2 +5 1 +1 5 +5 1 +4 5 +5 4 +3 5 +4 3 +2 4 +10 2 +10 10 +8 10 +5 8 +5 5 +5 5 +3 5 +6 3 +4 6 +4 4 +10 4 +10 10 +6 10 +4 6 +1 4 +3 1 +6 3 +6 6 +4 6 +5 4 +3 5 +4 3 +4 4 +5 4 +4 5 +5 4 +5 5 +9 5 +8 9 +5 8 +1 5 +3 1 +10 3 +3 10 +6 3 +1 6 +5 1 +4 5 +5 4 +5 5 +3 5 +1 3 +4 1 +4 4 +4 4 +6 4 +4 6 +4 4 +4 4 +1 4 +3 1 +8 3 +1 8 +5 1 +2 5 +1 2 +5 1 +5 5 +3 5 +6 3 +4 6 +1 4 +1 1 +3 1 +4 3 +1 4 +4 1 +10 4 +7 10 +3 7 +3 3 +4 3 +4 4 +6 4 +4 6 +7 4 +4 7 +1 4 +3 1 +2 3 +1 2 +5 1 +5 5 +4 5 +6 4 +5 6 +3 5 +5 3 +4 5 +2 4 +5 2 +6 5 +2 6 +3 2 +7 3 +3 7 +1 3 +3 1 +4 3 +3 4 +4 3 +5 4 +5 5 +2 5 +5 2 +5 5 +5 5 +1 5 +3 1 +4 3 +5 4 +3 5 +4 3 +8 4 +10 8 +8 10 +7 8 +3 7 +1 3 +10 1 +5 10 +5 5 +1 5 +1 1 +1 1 +5 1 +5 5 +6 5 +3 6 +5 3 +1 5 +8 1 +5 8 +9 5 +5 9 +4 5 +2 4 +10 2 +5 10 +4 5 +5 4 +4 5 +5 4 +3 5 +5 3 +3 5 +1 3 +4 1 +5 4 +5 5 +10 5 +4 10 +1 4 +5 1 +5 5 +10 5 +5 10 +8 5 +2 8 +2 2 +4 2 +3 4 +1 3 +4 1 +5 4 +3 5 +6 3 +7 6 +1 7 +5 1 +3 5 +4 3 +2 4 +2 2 +4 2 +6 4 +5 6 +1 5 +8 1 +3 8 +3 3 +10 3 +4 10 +4 4 +5 4 +4 5 +3 4 +3 3 +1 3 +2 1 +3 2 +1 3 +1 1 +5 1 +3 5 +3 3 +1 3 +5 1 +4 5 +3 4 +3 3 +5 3 +5 5 +7 5 +1 7 +1 1 +4 1 +1 4 +1 1 +3 1 +1 3 +5 1 +3 5 +5 3 +5 5 +3 5 +3 3 +2 3 +5 2 +1 5 +4 1 +1 4 +5 1 +1 5 +2 1 +10 2 +5 10 +5 5 +1 5 +1 1 +1 1 +1 1 +3 1 +4 3 +1 4 +1 1 +5 1 +3 5 +3 3 +3 3 +2 3 +5 2 +4 5 +4 4 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L1-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L1-Schema.txt new file mode 100644 index 0000000000..1cdb547e6d --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L1-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- SlidingWindowTransform ---- +2 columns: + Input: R4 + Output: Vec diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L2-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L2-Data.txt new file mode 100644 index 0000000000..fb3551cfb4 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L2-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1-** +#@ } +Input +5 ? +5 ? +3 5 +6 5 +4 3 +8 6 +1 4 +2 8 +2 1 +4 2 +1 2 +2 4 +5 1 +1 2 +8 5 +7 1 +4 8 +4 7 +10 4 +6 4 +7 10 +10 6 +3 7 +8 10 +1 3 +5 8 +3 1 +5 5 +2 3 +1 5 +3 2 +2 1 +10 3 +2 2 +3 10 +2 2 +10 3 +6 2 +5 10 +2 6 +6 5 +10 2 +6 6 +5 10 +10 6 +1 5 +3 10 +1 1 +4 3 +7 1 +9 4 +5 7 +10 9 +5 5 +10 10 +10 5 +8 10 +8 10 +5 8 +9 8 +5 5 +1 9 +9 5 +6 1 +1 9 +10 6 +4 1 +5 10 +8 4 +1 5 +5 8 +6 1 +1 5 +9 6 +10 1 +1 9 +1 10 +5 1 +3 1 +2 5 +2 3 +4 2 +5 2 +3 4 +3 5 +5 3 +3 3 +3 5 +4 3 +2 3 +1 4 +3 2 +4 1 +1 3 +2 4 +1 1 +2 2 +5 1 +9 2 +7 5 +10 9 +2 7 +4 10 +8 2 +10 4 +7 8 +10 10 +1 7 +1 10 +6 1 +1 1 +8 6 +10 1 +10 8 +3 10 +1 10 +8 3 +4 1 +1 8 +3 4 +1 1 +4 3 +10 1 +5 4 +5 10 +1 5 +7 5 +3 1 +8 7 +1 3 +5 8 +2 1 +5 5 +3 2 +3 5 +5 3 +4 3 +3 5 +4 4 +1 3 +3 4 +2 1 +9 3 +1 2 +2 9 +1 1 +3 2 +1 1 +3 3 +8 1 +1 3 +7 8 +10 1 +4 7 +1 10 +5 4 +1 1 +2 5 +1 1 +9 2 +10 1 +4 9 +3 10 +1 4 +5 3 +4 1 +5 5 +10 4 +3 5 +1 10 +3 3 +1 1 +1 3 +6 1 +8 1 +5 6 +2 8 +5 5 +4 2 +5 5 +1 4 +1 5 +6 1 +5 1 +8 6 +2 5 +1 8 +10 2 +5 1 +1 10 +10 5 +7 1 +5 10 +1 7 +3 5 +4 1 +8 3 +5 4 +1 8 +3 5 +9 1 +10 3 +1 9 +5 10 +1 1 +5 5 +10 1 +1 5 +1 10 +5 1 +8 1 +8 5 +1 8 +10 8 +10 1 +8 10 +1 10 +1 8 +6 1 +6 1 +1 6 +10 6 +4 1 +7 10 +10 4 +1 7 +10 10 +8 1 +1 10 +10 8 +7 1 +6 10 +8 7 +10 6 +3 8 +3 10 +10 3 +9 3 +8 10 +10 9 +5 8 +3 10 +2 5 +1 3 +1 2 +5 1 +8 1 +8 5 +4 8 +3 8 +1 4 +10 3 +6 1 +6 10 +9 6 +5 6 +3 9 +3 5 +3 3 +5 3 +10 3 +5 5 +8 10 +10 5 +7 8 +5 10 +10 7 +3 5 +10 10 +1 3 +8 10 +5 1 +3 8 +7 5 +3 3 +3 7 +3 3 +1 3 +1 3 +10 1 +3 1 +2 10 +1 3 +10 2 +7 1 +8 10 +10 7 +3 8 +6 10 +5 3 +1 6 +1 5 +8 1 +10 1 +1 8 +5 10 +5 1 +5 5 +8 5 +9 5 +8 8 +1 9 +10 8 +1 1 +8 10 +10 1 +1 8 +1 10 +7 1 +3 1 +2 7 +1 3 +8 2 +1 1 +1 8 +4 1 +5 1 +6 4 +1 5 +4 6 +7 1 +3 4 +3 7 +5 3 +1 3 +3 5 +10 1 +1 3 +8 10 +10 1 +10 8 +5 10 +5 10 +5 5 +8 5 +1 5 +6 8 +1 1 +1 6 +8 1 +10 1 +1 8 +2 10 +1 1 +7 2 +1 1 +5 7 +1 1 +3 5 +4 1 +5 3 +2 4 +3 5 +2 2 +1 3 +4 2 +5 1 +8 4 +8 5 +10 8 +6 8 +3 10 +3 6 +4 3 +2 3 +2 4 +6 2 +5 2 +1 6 +1 5 +4 1 +1 1 +4 4 +5 1 +3 4 +1 5 +1 3 +1 1 +3 1 +5 1 +1 3 +10 5 +3 1 +2 10 +2 3 +3 2 +7 2 +5 3 +2 7 +5 5 +1 2 +10 5 +3 1 +1 10 +1 3 +3 1 +3 1 +4 3 +3 3 +1 4 +3 3 +3 1 +5 3 +3 3 +1 5 +1 3 +4 1 +1 1 +2 4 +3 1 +1 2 +1 3 +10 1 +5 1 +8 10 +3 5 +8 8 +1 3 +5 8 +2 1 +3 5 +10 2 +4 3 +5 10 +3 4 +9 5 +5 3 +8 9 +1 5 +2 8 +1 1 +5 2 +5 1 +3 5 +6 5 +10 3 +10 6 +4 10 +4 10 +5 4 +10 4 +5 5 +1 10 +1 5 +5 1 +2 1 +1 5 +5 2 +1 1 +5 5 +4 1 +5 5 +3 4 +4 5 +2 3 +10 4 +10 2 +8 10 +5 10 +5 8 +5 5 +3 5 +6 5 +4 3 +4 6 +10 4 +10 4 +6 10 +4 10 +1 6 +3 4 +6 1 +6 3 +4 6 +5 6 +3 4 +4 5 +4 3 +5 4 +4 4 +5 5 +5 4 +9 5 +8 5 +5 9 +1 8 +3 5 +10 1 +3 3 +6 10 +1 3 +5 6 +4 1 +5 5 +5 4 +3 5 +1 5 +4 3 +4 1 +4 4 +6 4 +4 4 +4 6 +4 4 +1 4 +3 4 +8 1 +1 3 +5 8 +2 1 +1 5 +5 2 +5 1 +3 5 +6 5 +4 3 +1 6 +1 4 +3 1 +4 1 +1 3 +4 4 +10 1 +7 4 +3 10 +3 7 +4 3 +4 3 +6 4 +4 4 +7 6 +4 4 +1 7 +3 4 +2 1 +1 3 +5 2 +5 1 +4 5 +6 5 +5 4 +3 6 +5 5 +4 3 +2 5 +5 4 +6 2 +2 5 +3 6 +7 2 +3 3 +1 7 +3 3 +4 1 +3 3 +4 4 +5 3 +5 4 +2 5 +5 5 +5 2 +5 5 +1 5 +3 5 +4 1 +5 3 +3 4 +4 5 +8 3 +10 4 +8 8 +7 10 +3 8 +1 7 +10 3 +5 1 +5 10 +1 5 +1 5 +1 1 +5 1 +5 1 +6 5 +3 5 +5 6 +1 3 +8 5 +5 1 +9 8 +5 5 +4 9 +2 5 +10 4 +5 2 +4 10 +5 5 +4 4 +5 5 +3 4 +5 5 +3 3 +1 5 +4 3 +5 1 +5 4 +10 5 +4 5 +1 10 +5 4 +5 1 +10 5 +5 5 +8 10 +2 5 +2 8 +4 2 +3 2 +1 4 +4 3 +5 1 +3 4 +6 5 +7 3 +1 6 +5 7 +3 1 +4 5 +2 3 +2 4 +4 2 +6 2 +5 4 +1 6 +8 5 +3 1 +3 8 +10 3 +4 3 +4 10 +5 4 +4 4 +3 5 +3 4 +1 3 +2 3 +3 1 +1 2 +1 3 +5 1 +3 1 +3 5 +1 3 +5 3 +4 1 +3 5 +3 4 +5 3 +5 3 +7 5 +1 5 +1 7 +4 1 +1 1 +1 4 +3 1 +1 1 +5 3 +3 1 +5 5 +5 3 +3 5 +3 5 +2 3 +5 3 +1 2 +4 5 +1 1 +5 4 +1 1 +2 5 +10 1 +5 2 +5 10 +1 5 +1 5 +1 1 +1 1 +3 1 +4 1 +1 3 +1 4 +5 1 +3 1 +3 5 +3 3 +2 3 +5 3 +4 2 +4 5 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L2-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L2-Schema.txt new file mode 100644 index 0000000000..1cdb547e6d --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW1L2-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- SlidingWindowTransform ---- +2 columns: + Input: R4 + Output: Vec diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW2L1-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW2L1-Data.txt new file mode 100644 index 0000000000..cecc641039 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW2L1-Data.txt @@ -0,0 +1,706 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Input:R4:0 +#@ col=Output:R4:1-** +#@ } +Input +5 ? ? +5 ? ? +3 5 5 +6 5 3 +4 3 6 +8 6 4 +1 4 8 +2 8 1 +2 1 2 +4 2 2 +1 2 4 +2 4 1 +5 1 2 +1 2 5 +8 5 1 +7 1 8 +4 8 7 +4 7 4 +10 4 4 +6 4 10 +7 10 6 +10 6 7 +3 7 10 +8 10 3 +1 3 8 +5 8 1 +3 1 5 +5 5 3 +2 3 5 +1 5 2 +3 2 1 +2 1 3 +10 3 2 +2 2 10 +3 10 2 +2 2 3 +10 3 2 +6 2 10 +5 10 6 +2 6 5 +6 5 2 +10 2 6 +6 6 10 +5 10 6 +10 6 5 +1 5 10 +3 10 1 +1 1 3 +4 3 1 +7 1 4 +9 4 7 +5 7 9 +10 9 5 +5 5 10 +10 10 5 +10 5 10 +8 10 10 +8 10 8 +5 8 8 +9 8 5 +5 5 9 +1 9 5 +9 5 1 +6 1 9 +1 9 6 +10 6 1 +4 1 10 +5 10 4 +8 4 5 +1 5 8 +5 8 1 +6 1 5 +1 5 6 +9 6 1 +10 1 9 +1 9 10 +1 10 1 +5 1 1 +3 1 5 +2 5 3 +2 3 2 +4 2 2 +5 2 4 +3 4 5 +3 5 3 +5 3 3 +3 3 5 +3 5 3 +4 3 3 +2 3 4 +1 4 2 +3 2 1 +4 1 3 +1 3 4 +2 4 1 +1 1 2 +2 2 1 +5 1 2 +9 2 5 +7 5 9 +10 9 7 +2 7 10 +4 10 2 +8 2 4 +10 4 8 +7 8 10 +10 10 7 +1 7 10 +1 10 1 +6 1 1 +1 1 6 +8 6 1 +10 1 8 +10 8 10 +3 10 10 +1 10 3 +8 3 1 +4 1 8 +1 8 4 +3 4 1 +1 1 3 +4 3 1 +10 1 4 +5 4 10 +5 10 5 +1 5 5 +7 5 1 +3 1 7 +8 7 3 +1 3 8 +5 8 1 +2 1 5 +5 5 2 +3 2 5 +3 5 3 +5 3 3 +4 3 5 +3 5 4 +4 4 3 +1 3 4 +3 4 1 +2 1 3 +9 3 2 +1 2 9 +2 9 1 +1 1 2 +3 2 1 +1 1 3 +3 3 1 +8 1 3 +1 3 8 +7 8 1 +10 1 7 +4 7 10 +1 10 4 +5 4 1 +1 1 5 +2 5 1 +1 1 2 +9 2 1 +10 1 9 +4 9 10 +3 10 4 +1 4 3 +5 3 1 +4 1 5 +5 5 4 +10 4 5 +3 5 10 +1 10 3 +3 3 1 +1 1 3 +1 3 1 +6 1 1 +8 1 6 +5 6 8 +2 8 5 +5 5 2 +4 2 5 +5 5 4 +1 4 5 +1 5 1 +6 1 1 +5 1 6 +8 6 5 +2 5 8 +1 8 2 +10 2 1 +5 1 10 +1 10 5 +10 5 1 +7 1 10 +5 10 7 +1 7 5 +3 5 1 +4 1 3 +8 3 4 +5 4 8 +1 8 5 +3 5 1 +9 1 3 +10 3 9 +1 9 10 +5 10 1 +1 1 5 +5 5 1 +10 1 5 +1 5 10 +1 10 1 +5 1 1 +8 1 5 +8 5 8 +1 8 8 +10 8 1 +10 1 10 +8 10 10 +1 10 8 +1 8 1 +6 1 1 +6 1 6 +1 6 6 +10 6 1 +4 1 10 +7 10 4 +10 4 7 +1 7 10 +10 10 1 +8 1 10 +1 10 8 +10 8 1 +7 1 10 +6 10 7 +8 7 6 +10 6 8 +3 8 10 +3 10 3 +10 3 3 +9 3 10 +8 10 9 +10 9 8 +5 8 10 +3 10 5 +2 5 3 +1 3 2 +1 2 1 +5 1 1 +8 1 5 +8 5 8 +4 8 8 +3 8 4 +1 4 3 +10 3 1 +6 1 10 +6 10 6 +9 6 6 +5 6 9 +3 9 5 +3 5 3 +3 3 3 +5 3 3 +10 3 5 +5 5 10 +8 10 5 +10 5 8 +7 8 10 +5 10 7 +10 7 5 +3 5 10 +10 10 3 +1 3 10 +8 10 1 +5 1 8 +3 8 5 +7 5 3 +3 3 7 +3 7 3 +3 3 3 +1 3 3 +1 3 1 +10 1 1 +3 1 10 +2 10 3 +1 3 2 +10 2 1 +7 1 10 +8 10 7 +10 7 8 +3 8 10 +6 10 3 +5 3 6 +1 6 5 +1 5 1 +8 1 1 +10 1 8 +1 8 10 +5 10 1 +5 1 5 +5 5 5 +8 5 5 +9 5 8 +8 8 9 +1 9 8 +10 8 1 +1 1 10 +8 10 1 +10 1 8 +1 8 10 +1 10 1 +7 1 1 +3 1 7 +2 7 3 +1 3 2 +8 2 1 +1 1 8 +1 8 1 +4 1 1 +5 1 4 +6 4 5 +1 5 6 +4 6 1 +7 1 4 +3 4 7 +3 7 3 +5 3 3 +1 3 5 +3 5 1 +10 1 3 +1 3 10 +8 10 1 +10 1 8 +10 8 10 +5 10 10 +5 10 5 +5 5 5 +8 5 5 +1 5 8 +6 8 1 +1 1 6 +1 6 1 +8 1 1 +10 1 8 +1 8 10 +2 10 1 +1 1 2 +7 2 1 +1 1 7 +5 7 1 +1 1 5 +3 5 1 +4 1 3 +5 3 4 +2 4 5 +3 5 2 +2 2 3 +1 3 2 +4 2 1 +5 1 4 +8 4 5 +8 5 8 +10 8 8 +6 8 10 +3 10 6 +3 6 3 +4 3 3 +2 3 4 +2 4 2 +6 2 2 +5 2 6 +1 6 5 +1 5 1 +4 1 1 +1 1 4 +4 4 1 +5 1 4 +3 4 5 +1 5 3 +1 3 1 +1 1 1 +3 1 1 +5 1 3 +1 3 5 +10 5 1 +3 1 10 +2 10 3 +2 3 2 +3 2 2 +7 2 3 +5 3 7 +2 7 5 +5 5 2 +1 2 5 +10 5 1 +3 1 10 +1 10 3 +1 3 1 +3 1 1 +3 1 3 +4 3 3 +3 3 4 +1 4 3 +3 3 1 +3 1 3 +5 3 3 +3 3 5 +1 5 3 +1 3 1 +4 1 1 +1 1 4 +2 4 1 +3 1 2 +1 2 3 +1 3 1 +10 1 1 +5 1 10 +8 10 5 +3 5 8 +8 8 3 +1 3 8 +5 8 1 +2 1 5 +3 5 2 +10 2 3 +4 3 10 +5 10 4 +3 4 5 +9 5 3 +5 3 9 +8 9 5 +1 5 8 +2 8 1 +1 1 2 +5 2 1 +5 1 5 +3 5 5 +6 5 3 +10 3 6 +10 6 10 +4 10 10 +4 10 4 +5 4 4 +10 4 5 +5 5 10 +1 10 5 +1 5 1 +5 1 1 +2 1 5 +1 5 2 +5 2 1 +1 1 5 +5 5 1 +4 1 5 +5 5 4 +3 4 5 +4 5 3 +2 3 4 +10 4 2 +10 2 10 +8 10 10 +5 10 8 +5 8 5 +5 5 5 +3 5 5 +6 5 3 +4 3 6 +4 6 4 +10 4 4 +10 4 10 +6 10 10 +4 10 6 +1 6 4 +3 4 1 +6 1 3 +6 3 6 +4 6 6 +5 6 4 +3 4 5 +4 5 3 +4 3 4 +5 4 4 +4 4 5 +5 5 4 +5 4 5 +9 5 5 +8 5 9 +5 9 8 +1 8 5 +3 5 1 +10 1 3 +3 3 10 +6 10 3 +1 3 6 +5 6 1 +4 1 5 +5 5 4 +5 4 5 +3 5 5 +1 5 3 +4 3 1 +4 1 4 +4 4 4 +6 4 4 +4 4 6 +4 6 4 +4 4 4 +1 4 4 +3 4 1 +8 1 3 +1 3 8 +5 8 1 +2 1 5 +1 5 2 +5 2 1 +5 1 5 +3 5 5 +6 5 3 +4 3 6 +1 6 4 +1 4 1 +3 1 1 +4 1 3 +1 3 4 +4 4 1 +10 1 4 +7 4 10 +3 10 7 +3 7 3 +4 3 3 +4 3 4 +6 4 4 +4 4 6 +7 6 4 +4 4 7 +1 7 4 +3 4 1 +2 1 3 +1 3 2 +5 2 1 +5 1 5 +4 5 5 +6 5 4 +5 4 6 +3 6 5 +5 5 3 +4 3 5 +2 5 4 +5 4 2 +6 2 5 +2 5 6 +3 6 2 +7 2 3 +3 3 7 +1 7 3 +3 3 1 +4 1 3 +3 3 4 +4 4 3 +5 3 4 +5 4 5 +2 5 5 +5 5 2 +5 2 5 +5 5 5 +1 5 5 +3 5 1 +4 1 3 +5 3 4 +3 4 5 +4 5 3 +8 3 4 +10 4 8 +8 8 10 +7 10 8 +3 8 7 +1 7 3 +10 3 1 +5 1 10 +5 10 5 +1 5 5 +1 5 1 +1 1 1 +5 1 1 +5 1 5 +6 5 5 +3 5 6 +5 6 3 +1 3 5 +8 5 1 +5 1 8 +9 8 5 +5 5 9 +4 9 5 +2 5 4 +10 4 2 +5 2 10 +4 10 5 +5 5 4 +4 4 5 +5 5 4 +3 4 5 +5 5 3 +3 3 5 +1 5 3 +4 3 1 +5 1 4 +5 4 5 +10 5 5 +4 5 10 +1 10 4 +5 4 1 +5 1 5 +10 5 5 +5 5 10 +8 10 5 +2 5 8 +2 8 2 +4 2 2 +3 2 4 +1 4 3 +4 3 1 +5 1 4 +3 4 5 +6 5 3 +7 3 6 +1 6 7 +5 7 1 +3 1 5 +4 5 3 +2 3 4 +2 4 2 +4 2 2 +6 2 4 +5 4 6 +1 6 5 +8 5 1 +3 1 8 +3 8 3 +10 3 3 +4 3 10 +4 10 4 +5 4 4 +4 4 5 +3 5 4 +3 4 3 +1 3 3 +2 3 1 +3 1 2 +1 2 3 +1 3 1 +5 1 1 +3 1 5 +3 5 3 +1 3 3 +5 3 1 +4 1 5 +3 5 4 +3 4 3 +5 3 3 +5 3 5 +7 5 5 +1 5 7 +1 7 1 +4 1 1 +1 1 4 +1 4 1 +3 1 1 +1 1 3 +5 3 1 +3 1 5 +5 5 3 +5 3 5 +3 5 5 +3 5 3 +2 3 3 +5 3 2 +1 2 5 +4 5 1 +1 1 4 +5 4 1 +1 1 5 +2 5 1 +10 1 2 +5 2 10 +5 10 5 +1 5 5 +1 5 1 +1 1 1 +1 1 1 +3 1 1 +4 1 3 +1 3 4 +1 4 1 +5 1 1 +3 1 5 +3 5 3 +3 3 3 +2 3 3 +5 3 2 +4 2 5 +4 5 4 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW2L1-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW2L1-Schema.txt new file mode 100644 index 0000000000..1cdb547e6d --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSlidingWindowW2L1-Schema.txt @@ -0,0 +1,7 @@ +---- BoundLoader ---- +1 columns: + Input: R4 +---- SlidingWindowTransform ---- +2 columns: + Input: R4 + Output: Vec diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSsaSpikeNoData-Data.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSsaSpikeNoData-Data.txt new file mode 100644 index 0000000000..8007bc905a --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSsaSpikeNoData-Data.txt @@ -0,0 +1,57 @@ +#@ TextLoader{ +#@ header+ +#@ sep=tab +#@ col=Features:R4:0 +#@ col=Anomaly:R8:1-3 +#@ } +Features Alert Raw Score P-Value Score +0 0 0 0.5 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 +0 0 0 0.49999999950000001 diff --git a/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSsaSpikeNoData-Schema.txt b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSsaSpikeNoData-Schema.txt new file mode 100644 index 0000000000..764b0f98c0 --- /dev/null +++ b/test/BaselineOutput/SingleRelease/SavePipe/SavePipeSsaSpikeNoData-Schema.txt @@ -0,0 +1,9 @@ +---- BoundLoader ---- +1 columns: + Features: R4 +---- SsaSpikeDetector ---- +2 columns: + Features: R4 + Anomaly: Vec + Metadata 'SlotNames': Vec: Length=3, Count=3 + [0] 'Alert', [1] 'Raw Score', [2] 'P-Value Score' diff --git a/test/Microsoft.ML.Core.Tests/Microsoft.ML.Core.Tests.csproj b/test/Microsoft.ML.Core.Tests/Microsoft.ML.Core.Tests.csproj index b1af1b5a1f..13673ae245 100644 --- a/test/Microsoft.ML.Core.Tests/Microsoft.ML.Core.Tests.csproj +++ b/test/Microsoft.ML.Core.Tests/Microsoft.ML.Core.Tests.csproj @@ -17,13 +17,16 @@ + + + diff --git a/test/Microsoft.ML.Core.Tests/UnitTests/TestEntryPoints.cs b/test/Microsoft.ML.Core.Tests/UnitTests/TestEntryPoints.cs index 9cdfdaae0d..c695e183f2 100644 --- a/test/Microsoft.ML.Core.Tests/UnitTests/TestEntryPoints.cs +++ b/test/Microsoft.ML.Core.Tests/UnitTests/TestEntryPoints.cs @@ -25,6 +25,7 @@ using Microsoft.ML.Runtime.PipelineInference; using Microsoft.ML.Runtime.SymSgd; using Microsoft.ML.Runtime.TextAnalytics; +using Microsoft.ML.Runtime.TimeSeriesProcessing; using Microsoft.ML.Transforms; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -37,6 +38,7 @@ public partial class TestEntryPoints : CoreBaseTestClass { public TestEntryPoints(ITestOutputHelper output) : base(output) { + Env.ComponentCatalog.RegisterAssembly(typeof(ExponentialAverageTransform).Assembly); } private IDataView GetBreastCancerDataView() @@ -306,6 +308,7 @@ public void EntryPointCatalog() Env.ComponentCatalog.RegisterAssembly(typeof(SymSgdClassificationTrainer).Assembly); Env.ComponentCatalog.RegisterAssembly(typeof(AutoInference).Assembly); Env.ComponentCatalog.RegisterAssembly(typeof(SaveOnnxCommand).Assembly); + Env.ComponentCatalog.RegisterAssembly(typeof(TimeSeriesProcessing.TimeSeriesProcessing).Assembly); var catalog = Env.ComponentCatalog; @@ -3746,5 +3749,161 @@ public void EntryPointTensorFlowTransform() 'OutputColumns': [ 'Softmax' ]" }); } + + [Fact(Skip = "Needs real time series dataset. https://github.com/dotnet/machinelearning/issues/1120")] + public void EntryPointSsaChangePoint() + { + TestEntryPointPipelineRoutine(GetDataPath(Path.Combine("Timeseries", "A4Benchmark-TS1.csv")), "sep=, col=Features:R4:1 header=+", + new[] + { + "TimeSeriesProcessing.SsaChangePointDetector", + "TimeSeriesProcessing.SsaChangePointDetector", + }, + new[] + { + @"'Src': 'Features', + 'Name': 'Anomaly', + 'Twnd': '500', + 'Swnd': '50', + 'Cnf': '93', + 'Wnd': '20', + 'Mart': 'Power', + 'Eps': '0.1'", + @"'Src': 'Features', + 'Name': 'Anomaly2', + 'Twnd': '500', + 'Swnd': '50', + 'Cnf': '93', + 'Wnd': '20', + 'Mart': 'Mixture'" + }); + } + + [Fact] + public void EntryPointIidSpikeDetector() + { + TestEntryPointPipelineRoutine(GetDataPath(Path.Combine("Timeseries", "real_1.csv")), "sep=, col=Features:R4:1 header=+", + new[] + { + "TimeSeriesProcessing.IidSpikeDetector", + "TimeSeriesProcessing.IidSpikeDetector", + }, + new[] + { + @"'Src': 'Features', + 'Name': 'Anomaly', + 'Cnf': '99.5', + 'Wnd': '200', + 'Side': 'Positive'", + @"'Src': 'Features', + 'Name': 'Anomaly2', + 'Cnf': '99.5', + 'Wnd': '200', + 'Side': 'Negative'", + }); + } + + [Fact(Skip = "Needs real time series dataset. https://github.com/dotnet/machinelearning/issues/1120")] + public void EntryPointSsaSpikeDetector() + { + TestEntryPointPipelineRoutine(GetDataPath(Path.Combine("Timeseries", "A4Benchmark-TS2.csv")), "sep=, col=Features:R4:1 header=+", + new[] + { + "TimeSeriesProcessing.SsaSpikeDetector", + "TimeSeriesProcessing.SsaSpikeDetector", + "TimeSeriesProcessing.SsaSpikeDetector", + }, + new[] + { + @"'Src': 'Features', + 'Name': 'Anomaly', + 'Twnd': '500', + 'Swnd': '50', + 'Err': 'SignedDifference', + 'Cnf': '99.5', + 'Wnd': '100', + 'Side': 'Negative'", + @"'Src': 'Features', + 'Name': 'Anomaly2', + 'Twnd': '500', + 'Swnd': '50', + 'Err': 'SignedDifference', + 'Cnf': '99.5', + 'Wnd': '100', + 'Side': 'Positive'", + @"'Src': 'Features', + 'Name': 'Anomaly3', + 'Twnd': '500', + 'Swnd': '50', + 'Err': 'SignedDifference', + 'Cnf': '99.5', + 'Wnd': '100'", + }); + } + + [Fact] + public void EntryPointPercentileThreshold() + { + TestEntryPointPipelineRoutine(GetDataPath("breast-cancer.txt"), "col=Input:R4:1", + new[] + { + "TimeSeriesProcessing.PercentileThresholdTransform" + }, + new[] + { + @"'Src': 'Input', + 'Name': 'Output', + 'Wnd': '10', + 'Pcnt': '10'" + }); + } + + [Fact] + public void EntryPointPValue() + { + TestEntryPointPipelineRoutine(GetDataPath("breast-cancer.txt"), "col=Input:R4:1", + new[] + { + "TimeSeriesProcessing.PValueTransform" + }, + new[] + { + @"'Src': 'Input', + 'Name': 'Output', + 'Wnd': '10'" + }); + } + + [Fact] + public void EntryPointSlidingWindow() + { + TestEntryPointPipelineRoutine(GetDataPath("breast-cancer.txt"), "col=Input:R4:1", + new[] + { + "TimeSeriesProcessing.SlidingWindowTransform", + "TimeSeriesProcessing.SlidingWindowTransform", + "TimeSeriesProcessing.SlidingWindowTransform", + "TimeSeriesProcessing.SlidingWindowTransform", + }, + new[] + { + @"'Src': 'Input', + 'Name': 'Output', + 'Wnd': '3', + 'L': '0'", + @"'Src': 'Input', + 'Name': 'Output1', + 'Wnd': '1', + 'L': '1'", + @"'Src': 'Input', + 'Name': 'Output2', + 'Wnd': '1', + 'L': '2'", + @"'Src': 'Input', + 'Name': 'Output3', + 'Wnd': '2', + 'L': '1'" + }); + } } } \ No newline at end of file diff --git a/test/Microsoft.ML.TestFramework/Microsoft.ML.TestFramework.csproj b/test/Microsoft.ML.TestFramework/Microsoft.ML.TestFramework.csproj index b191c08a91..942e056f2a 100644 --- a/test/Microsoft.ML.TestFramework/Microsoft.ML.TestFramework.csproj +++ b/test/Microsoft.ML.TestFramework/Microsoft.ML.TestFramework.csproj @@ -21,5 +21,7 @@ + + \ No newline at end of file diff --git a/test/Microsoft.ML.TestFramework/Properties/AssemblyInfo.cs b/test/Microsoft.ML.TestFramework/Properties/AssemblyInfo.cs index 8584f4e0e6..7b003b45d1 100644 --- a/test/Microsoft.ML.TestFramework/Properties/AssemblyInfo.cs +++ b/test/Microsoft.ML.TestFramework/Properties/AssemblyInfo.cs @@ -4,3 +4,4 @@ using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo(assemblyName: "Microsoft.ML.Predictor.Tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010015c01ae1f50e8cc09ba9eac9147cf8fd9fce2cfe9f8dce4f7301c4132ca9fb50ce8cbf1df4dc18dd4d210e4345c744ecb3365ed327efdbc52603faa5e21daa11234c8c4a73e51f03bf192544581ebe107adee3a34928e39d04e524a9ce729d5090bfd7dad9d10c722c0def9ccc08ff0a03790e48bcd1f9b6c476063e1966a1c4")] +[assembly: InternalsVisibleTo(assemblyName: "Microsoft.ML.TimeSeries.Tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010015c01ae1f50e8cc09ba9eac9147cf8fd9fce2cfe9f8dce4f7301c4132ca9fb50ce8cbf1df4dc18dd4d210e4345c744ecb3365ed327efdbc52603faa5e21daa11234c8c4a73e51f03bf192544581ebe107adee3a34928e39d04e524a9ce729d5090bfd7dad9d10c722c0def9ccc08ff0a03790e48bcd1f9b6c476063e1966a1c4")] diff --git a/test/Microsoft.ML.Tests/Microsoft.ML.Tests.csproj b/test/Microsoft.ML.Tests/Microsoft.ML.Tests.csproj index 3f9bfc949e..42ed876add 100644 --- a/test/Microsoft.ML.Tests/Microsoft.ML.Tests.csproj +++ b/test/Microsoft.ML.Tests/Microsoft.ML.Tests.csproj @@ -22,6 +22,7 @@ + @@ -32,6 +33,7 @@ + diff --git a/test/Microsoft.ML.TimeSeries.Tests/Microsoft.ML.TimeSeries.Tests.csproj b/test/Microsoft.ML.TimeSeries.Tests/Microsoft.ML.TimeSeries.Tests.csproj new file mode 100644 index 0000000000..41b7f2c380 --- /dev/null +++ b/test/Microsoft.ML.TimeSeries.Tests/Microsoft.ML.TimeSeries.Tests.csproj @@ -0,0 +1,17 @@ + + + CORECLR + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/Microsoft.ML.TimeSeries.Tests/TimeSeries.cs b/test/Microsoft.ML.TimeSeries.Tests/TimeSeries.cs new file mode 100644 index 0000000000..4f764f80c4 --- /dev/null +++ b/test/Microsoft.ML.TimeSeries.Tests/TimeSeries.cs @@ -0,0 +1,182 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.TimeSeriesProcessing; +using System; +using System.IO; +using System.Linq; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.ML.Runtime.RunTests +{ + public sealed class TestTimeSeries : TestDataPipeBase + { + protected override void Initialize() + { + base.Initialize(); + Env.ComponentCatalog.RegisterAssembly(typeof(ExponentialAverageTransform).Assembly); + } + + public TestTimeSeries(ITestOutputHelper helper) + : base(helper) + { + } + + [Fact] + public void SavePipeIidSpike() + { + TestCore(GetDataPath(Path.Combine("Timeseries", "real_1.csv")), + true, + new[]{"loader=TextLoader{sep=, col=Features:R4:1 header=+}", + "xf=IidSpikeDetector{src=Features name=Anomaly cnf=99.5 wnd=200 side=Positive}", + "xf=Convert{col=fAnomaly:R4:Anomaly}", + "xf=IidSpikeDetector{src=Features name=Anomaly2 cnf=99.5 wnd=200 side=Negative}", + "xf=Convert{col=fAnomaly2:R4:Anomaly2}", + "xf=Choose{col=Features col=fAnomaly col=fAnomaly2}" }); + + Done(); + } + + [Fact] + public void SavePipeIidChangePoint() + { + TestCore(GetDataPath(Path.Combine("Timeseries", "real_11.csv")), + true, + new[]{"loader=TextLoader{sep=, col=Features:R4:1 header=+}", + @"xf=IidChangePointDetector{src=Features name=Anomaly cnf=83 wnd=100 mart=Power eps=0.1}", + "xf=Convert{col=fAnomaly:R4:Anomaly}", + "xf=IidChangePointDetector{src=Features name=Anomaly2 cnf=83 wnd=100 mart=Mixture}", + "xf=Convert{col=fAnomaly2:R4:Anomaly2}", + "xf=Choose{col=Features col=fAnomaly col=fAnomaly2}" }); + + Done(); + } + + [Fact(Skip = "Randomly generated dataset causes asserts to fire. Temporarily disabling this test until we find a real TS dataset.")] + public void SavePipeSsaSpike() + { + TestCore(GetDataPath(Path.Combine("Timeseries", "A4Benchmark-TS2.csv")), + true, + new[]{"loader=TextLoader{sep=, col=Features:R4:1 header=+}", + @"xf=SsaSpikeDetector{src=Features name=Anomaly twnd=500 swnd=50 err=SignedDifference cnf=99.5 wnd=100 side=Negative}", + "xf=Convert{col=fAnomaly:R4:Anomaly}", + "xf=SsaSpikeDetector{src=Features name=Anomaly2 twnd=500 swnd=50 err=SignedDifference cnf=99.5 wnd=100 side=Positive}", + "xf=Convert{col=fAnomaly2:R4:Anomaly2}", + "xf=SsaSpikeDetector{src=Features name=Anomaly3 twnd=500 swnd=50 err=SignedDifference cnf=99.5 wnd=100}", + "xf=Convert{col=fAnomaly3:R4:Anomaly3}", + "xf=Choose{col=Features col=fAnomaly col=fAnomaly2 col=fAnomaly3}" }); + + Done(); + } + + [Fact] + public void SavePipeSsaSpikeNoData() + { + string pathData = DeleteOutputPath("SavePipe", "SsaSpikeNoData.txt"); + File.WriteAllLines(pathData, Enumerable.Repeat("0", 50)); + + // The rank should not be equivalent to window size if input data is all zeros. This is a regression test. + TestCore(pathData, + true, + new[]{"loader=TextLoader{col=Features:R4:0}", + "xf=SsaSpikeDetector{src=Features name=Anomaly twnd=50 swnd=5 err=SignedDifference cnf=99.5 wnd=10}" }); + + Done(); + } + + [Fact] + public void SavePipeExponentialAverage() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=ExpAvg{src=Input name=Output d=0.9}" }); + + Done(); + } + + [Fact] + public void SavePipeSlidingWindow() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=SlideWinTransform{src=Input name=Output wnd=3 l=0}" }); + + Done(); + } + + [Fact] + public void SavePipeSlidingWindowW1L1() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=SlideWinTransform{src=Input name=Output wnd=1 l=1}" }); + + Done(); + } + + [Fact] + public void SavePipeSlidingWindowW2L1() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=SlideWinTransform{src=Input name=Output wnd=2 l=1}" }); + + Done(); + } + + [Fact] + public void SavePipeSlidingWindowW1L2() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=SlideWinTransform{src=Input name=Output wnd=1 l=2}" }); + + Done(); + } + + + [Fact] + public void SavePipePValue() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=PVal{src=Input name=Output wnd=10}"}); + + Done(); + } + + [Fact] + public void SavePipePercentileThreshold() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=TopPcnt{src=Input name=Output wnd=10 pcnt=10}" }); + + Done(); + } + + [Fact] + public void SavePipeMovingAverageUniform() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=MoAv{src=Input name=Output wnd=2 l=0}" }); + + Done(); + } + + [Fact] + public void SavePipeMovingAverageNonUniform() + { + TestCore(null, true, + new[]{"loader=Text{col=Input:R4:1}", + "xf=MoAv{src=Input name=Output wnd=3 weights=1,1.5,2 l=0}" }); + + Done(); + } + + } +} \ No newline at end of file diff --git a/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs b/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs new file mode 100644 index 0000000000..50591e07d4 --- /dev/null +++ b/test/Microsoft.ML.TimeSeries.Tests/TimeSeriesDirectApi.cs @@ -0,0 +1,128 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections.Generic; +using Microsoft.ML.Runtime.Api; +using Microsoft.ML.Runtime.Data; +using Microsoft.ML.Runtime.TimeSeriesProcessing; +using Xunit; + +namespace Microsoft.ML.Tests +{ + public sealed class TimeSeries + { + + public class Prediction + { + [VectorType(4)] + public double[] Change; + } + + sealed class Data + { + public float Value; + + public Data(float value) + { + Value = value; + } + } + + [Fact] + public void ChangeDetection() + { + using (var env = new ConsoleEnvironment(conc: 1)) + { + const int size = 10; + List data = new List(size); + var dataView = env.CreateStreamingDataView(data); + List tempData = new List(); + for (int i = 0; i < size / 2; i++) + tempData.Add(new Data(5)); + + for (int i = 0; i < size / 2; i++) + tempData.Add(new Data((float)(5 + i * 1.1))); + + foreach (var d in tempData) + data.Add(new Data(d.Value)); + + var args = new IidChangePointDetector.Arguments() + { + Confidence = 80, + Source = "Value", + Name = "Change", + ChangeHistoryLength = size, + Data = dataView + }; + + var detector = TimeSeriesProcessing.IidChangePointDetector(env, args); + var output = detector.Model.Apply(env, dataView); + var enumerator = output.AsEnumerable(env, true).GetEnumerator(); + Prediction row = null; + List expectedValues = new List() { 0, 5, 0.5, 5.1200000000000114E-08, 0, 5, 0.4999999995, 5.1200000046080209E-08, 0, 5, 0.4999999995, 5.1200000092160303E-08, + 0, 5, 0.4999999995, 5.12000001382404E-08}; + int index = 0; + while (enumerator.MoveNext() && index < expectedValues.Count) + { + row = enumerator.Current; + + Assert.Equal(expectedValues[index++], row.Change[0]); + Assert.Equal(expectedValues[index++], row.Change[1]); + Assert.Equal(expectedValues[index++], row.Change[2]); + Assert.Equal(expectedValues[index++], row.Change[3]); + } + } + } + + [Fact] + public void ChangePointDetectionWithSeasonality() + { + using (var env = new ConsoleEnvironment(conc: 1)) + { + const int ChangeHistorySize = 2000; + const int SeasonalitySize = 1000; + const int NumberOfSeasonsInTraining = 5; + const int MaxTrainingSize = NumberOfSeasonsInTraining * SeasonalitySize; + + List data = new List(); + var dataView = env.CreateStreamingDataView(data); + + var args = new SsaChangePointDetector.Arguments() + { + Confidence = 95, + Source = "Value", + Name = "Change", + ChangeHistoryLength = ChangeHistorySize, + Data = dataView, + TrainingWindowSize = MaxTrainingSize, + SeasonalWindowSize = SeasonalitySize + }; + + for (int j = 0; j < NumberOfSeasonsInTraining; j++) + for (int i = 0; i < SeasonalitySize; i++) + data.Add(new Data(i)); + + for (int i = 0; i < ChangeHistorySize; i++) + data.Add(new Data(i * 100)); + + var detector = TimeSeriesProcessing.SsaChangePointDetector(env, args); + var output = detector.Model.Apply(env, dataView); + var enumerator = output.AsEnumerable(env, true).GetEnumerator(); + Prediction row = null; + List expectedValues = new List() { 0, 0, 0.5, 0, 0, 1, 0.15865526383236372, + 0, 0, 1.6069464981555939, 0.05652458872960725, 0, 0, 2.0183047652244568, 0.11021633531076747, 0}; + + int index = 0; + while (enumerator.MoveNext() && index < expectedValues.Count) + { + row = enumerator.Current; + Assert.Equal(expectedValues[index++], row.Change[0]); + Assert.Equal(expectedValues[index++], row.Change[1]); + Assert.Equal(expectedValues[index++], row.Change[2]); + Assert.Equal(expectedValues[index++], row.Change[3]); + } + } + } + } +} diff --git a/test/data/Timeseries/A4Benchmark-TS1.csv b/test/data/Timeseries/A4Benchmark-TS1.csv new file mode 100644 index 0000000000..cd6151e22e --- /dev/null +++ b/test/data/Timeseries/A4Benchmark-TS1.csv @@ -0,0 +1,90 @@ +timestamp,value,anomaly,changepoint,trend,noise,seasonality1,seasonality2,seasonality3 +1,4.1,0,0,1,-1,2.22,1.11,1.2 +2,200.3,0,0,2,-5.5,3.555,2.22,4.123 +3,45.5,0,0,5,3,7.123,2.24,3.23 +4,123.1,0,0,9,-4,2.22,0.211,4.1 +5,143.8,0,0,10,-10,1,0.999,5.115 +6,164.02,0,0,12.9,-11.1,2.11,0.6867,5.8957 +7,184.24,0,0,15.4,14.2,1.7262,0.4636,6.6764 +8,204.46,0,0,17.9,1,1.3514,0.2405,7.4571 +9,224.68,0,0,20.4,1.764285714,0.9766,0.0174,8.2378 +10,244.9,0,0,22.9,2.528571429,0.6018,-0.2057,9.0185 +11,265.12,0,0,25.4,3.292857143,0.227,-0.4288,9.7992 +12,285.34,0,0,27.9,4.057142857,-0.1478,-0.6519,10.5799 +13,305.56,0,0,30.4,4.821428571,-0.5226,-0.875,11.3606 +14,325.78,0,0,32.9,5.585714286,-0.8974,-1.0981,12.1413 +15,346,0,0,35.4,6.35,-1.2722,-1.3212,12.922 +16,366.22,0,0,37.9,7.114285714,-1.647,-1.5443,13.7027 +17,386.44,0,0,40.4,7.878571429,-2.0218,-1.7674,14.4834 +18,406.66,0,0,42.9,8.642857143,-2.3966,-1.9905,15.2641 +19,426.88,0,0,45.4,9.407142857,-2.7714,-2.2136,16.0448 +20,447.1,0,0,47.9,10.17142857,-3.1462,-2.4367,16.8255 +21,467.32,0,0,50.4,10.93571429,-3.521,-2.6598,17.6062 +22,487.54,0,0,52.9,11.7,-3.8958,-2.8829,18.3869 +23,507.76,0,0,55.4,12.46428571,-4.2706,-3.106,19.1676 +24,527.98,0,0,57.9,13.22857143,-4.6454,-3.3291,19.9483 +25,548.2,0,0,60.4,13.99285714,-5.0202,-3.5522,20.729 +26,568.42,0,0,62.9,14.75714286,-5.395,-3.7753,21.5097 +27,588.64,0,0,65.4,15.52142857,-5.7698,-3.9984,22.2904 +28,608.86,0,0,67.9,16.28571429,-6.1446,-4.2215,23.0711 +29,629.08,0,0,70.4,17.05,-6.5194,-4.4446,23.8518 +30,649.3,0,0,72.9,17.81428571,-6.8942,-4.6677,24.6325 +31,669.52,0,0,75.4,18.57857143,-7.269,-4.8908,25.4132 +32,689.74,0,0,77.9,19.34285714,-7.6438,-5.1139,26.1939 +33,709.96,0,0,80.4,20.10714286,-8.0186,-5.337,26.9746 +34,730.18,0,0,82.9,20.87142857,-8.3934,-5.5601,27.7553 +35,750.4,0,0,85.4,21.63571429,-8.7682,-5.7832,28.536 +36,770.62,0,0,87.9,22.4,-9.143,-6.0063,29.3167 +37,790.84,0,0,90.4,23.16428571,-9.5178,-6.2294,30.0974 +38,811.06,0,0,92.9,23.92857143,-9.8926,-6.4525,30.8781 +39,831.28,0,0,95.4,24.69285714,-10.2674,-6.6756,31.6588 +40,851.5,0,0,97.9,25.45714286,-10.6422,-6.8987,32.4395 +41,871.72,0,0,100.4,26.22142857,-11.017,-7.1218,33.2202 +42,891.94,0,0,102.9,26.98571429,-11.3918,-7.3449,34.0009 +43,912.16,0,0,105.4,27.75,-11.7666,-7.568,34.7816 +44,932.38,0,0,107.9,28.51428571,-12.1414,-7.7911,35.5623 +45,952.6,0,0,110.4,29.27857143,-12.5162,-8.0142,36.343 +46,972.82,0,0,112.9,30.04285714,-12.891,-8.2373,37.1237 +47,993.04,0,0,115.4,30.80714286,-13.2658,-8.4604,37.9044 +48,1013.26,0,0,117.9,31.57142857,-13.6406,-8.6835,38.6851 +49,1033.48,0,0,120.4,32.33571429,-14.0154,-8.9066,39.4658 +50,1053.7,0,0,122.9,33.1,-14.3902,-9.1297,40.2465 +51,1073.92,0,0,125.4,33.86428571,-14.765,-9.3528,41.0272 +52,1094.14,0,0,127.9,34.62857143,-15.1398,-9.5759,41.8079 +53,1114.36,0,0,130.4,35.39285714,-15.5146,-9.799,42.5886 +54,1134.58,0,0,132.9,36.15714286,-15.8894,-10.0221,43.3693 +55,1154.8,0,0,135.4,36.92142857,-16.2642,-10.2452,44.15 +56,1175.02,0,0,137.9,37.68571429,-16.639,-10.4683,44.9307 +57,1195.24,0,0,140.4,38.45,-17.0138,-10.6914,45.7114 +58,1215.46,0,0,142.9,39.21428571,-17.3886,-10.9145,46.4921 +59,1235.68,0,0,145.4,39.97857143,-17.7634,-11.1376,47.2728 +60,1255.9,0,0,147.9,40.74285714,-18.1382,-11.3607,48.0535 +61,1276.12,0,0,150.4,41.50714286,-18.513,-11.5838,48.8342 +62,1296.34,0,0,152.9,42.27142857,-18.8878,-11.8069,49.6149 +63,1316.56,0,0,155.4,43.03571429,-19.2626,-12.03,50.3956 +64,1336.78,0,0,157.9,43.8,-19.6374,-12.2531,51.1763 +65,1357,0,0,160.4,44.56428571,-20.0122,-12.4762,51.957 +66,1377.22,0,0,162.9,45.32857143,-20.387,-12.6993,52.7377 +67,1397.44,0,0,165.4,46.09285714,-20.7618,-12.9224,53.5184 +68,1417.66,0,0,167.9,46.85714286,-21.1366,-13.1455,54.2991 +69,1437.88,0,0,170.4,47.62142857,-21.5114,-13.3686,55.0798 +70,1458.1,0,0,172.9,48.38571429,-21.8862,-13.5917,55.8605 +71,1478.32,0,0,175.4,49.15,-22.261,-13.8148,56.6412 +72,1498.54,0,0,177.9,49.91428571,-22.6358,-14.0379,57.4219 +73,1518.76,0,0,180.4,50.67857143,-23.0106,-14.261,58.2026 +74,1538.98,0,0,182.9,51.44285714,-23.3854,-14.4841,58.9833 +75,1559.2,0,0,185.4,52.20714286,-23.7602,-14.7072,59.764 +76,1579.42,0,0,187.9,52.97142857,-24.135,-14.9303,60.5447 +77,1599.64,0,0,190.4,53.73571429,-24.5098,-15.1534,61.3254 +78,1619.86,0,0,192.9,54.5,-24.8846,-15.3765,62.1061 +79,1640.08,0,0,195.4,55.26428571,-25.2594,-15.5996,62.8868 +80,1660.3,0,0,197.9,56.02857143,-25.6342,-15.8227,63.6675 +81,1680.52,0,0,200.4,56.79285714,-26.009,-16.0458,64.4482 +82,1700.74,0,0,202.9,57.55714286,-26.3838,-16.2689,65.2289 +83,1720.96,0,0,205.4,58.32142857,-26.7586,-16.492,66.0096 +84,1741.18,0,0,207.9,59.08571429,-27.1334,-16.7151,66.7903 +85,1761.4,0,0,210.4,59.85,-27.5082,-16.9382,67.571 +86,1781.62,0,0,212.9,60.61428571,-27.883,-17.1613,68.3517 +87,1801.84,0,0,215.4,61.37857143,-28.2578,-17.3844,69.1324 +88,1822.06,0,0,217.9,62.14285714,-28.6326,-17.6075,69.9131 +89,1842.28,0,0,220.4,62.90714286,-29.0074,-17.8306,70.6938 diff --git a/test/data/Timeseries/A4Benchmark-TS2.csv b/test/data/Timeseries/A4Benchmark-TS2.csv new file mode 100644 index 0000000000..cd8da7600f --- /dev/null +++ b/test/data/Timeseries/A4Benchmark-TS2.csv @@ -0,0 +1,90 @@ +timestamp,value,anomaly,changepoint,trend,noise,seasonality1,seasonality2,seasonality3 +1,0.1,0,0,23,-123,1.11,1.2,3 +2,1.2,0,0,33,-44,2.22,4.123,2 +3,3.5,0,0,45,-0.011,2.24,3.23,3.23 +4,5.44,0,0,55.66666667,-1.1,0.211,4.1,1 +5,7.14,0,0,66.66666667,23,0.999,5.115,2 +6,8.972,0,0,77.66666667,2,0.6867,5.8957,1 +7,10.804,0,0,88.66666667,58.63926667,0.4636,6.6764,4 +8,12.636,0,0,99.66666667,82.20815238,0.2405,7.4571,2.285714286 +9,14.468,0,0,110.6666667,105.7770381,0.0174,8.2378,2.2775 +10,16.3,0,0,121.6666667,129.3459238,-0.2057,9.0185,2.269285714 +11,18.132,0,0,132.6666667,152.9148095,-0.4288,9.7992,2.261071429 +12,19.964,0,0,143.6666667,176.4836952,-0.6519,10.5799,2.252857143 +13,21.796,0,0,154.6666667,200.052581,-0.875,11.3606,2.244642857 +14,23.628,0,0,165.6666667,223.6214667,-1.0981,12.1413,2.236428571 +15,25.46,0,0,176.6666667,247.1903524,-1.3212,12.922,2.228214286 +16,27.292,0,0,187.6666667,270.7592381,-1.5443,13.7027,2.22 +17,29.124,0,0,198.6666667,294.3281238,-1.7674,14.4834,2.211785714 +18,30.956,0,0,209.6666667,317.8970095,-1.9905,15.2641,2.203571429 +19,32.788,0,0,220.6666667,341.4658952,-2.2136,16.0448,2.195357143 +20,34.62,0,0,231.6666667,365.034781,-2.4367,16.8255,2.187142857 +21,36.452,0,0,242.6666667,388.6036667,-2.6598,17.6062,2.178928571 +22,38.284,0,0,253.6666667,412.1725524,-2.8829,18.3869,2.170714286 +23,40.116,0,0,264.6666667,435.7414381,-3.106,19.1676,2.1625 +24,41.948,0,0,275.6666667,459.3103238,-3.3291,19.9483,2.154285714 +25,43.78,0,0,286.6666667,482.8792095,-3.5522,20.729,2.146071429 +26,45.612,0,0,297.6666667,506.4480952,-3.7753,21.5097,2.137857143 +27,47.444,0,0,308.6666667,530.016981,-3.9984,22.2904,2.129642857 +28,49.276,0,0,319.6666667,553.5858667,-4.2215,23.0711,2.121428571 +29,51.108,0,0,330.6666667,577.1547524,-4.4446,23.8518,2.113214286 +30,52.94,0,0,341.6666667,600.7236381,-4.6677,24.6325,2.105 +31,54.772,0,0,352.6666667,624.2925238,-4.8908,25.4132,2.096785714 +32,56.604,0,0,363.6666667,647.8614095,-5.1139,26.1939,2.088571429 +33,58.436,0,0,374.6666667,671.4302952,-5.337,26.9746,2.080357143 +34,60.268,0,0,385.6666667,694.999181,-5.5601,27.7553,2.072142857 +35,62.1,0,0,396.6666667,718.5680667,-5.7832,28.536,2.063928571 +36,63.932,0,0,407.6666667,742.1369524,-6.0063,29.3167,2.055714286 +37,65.764,0,0,418.6666667,765.7058381,-6.2294,30.0974,2.0475 +38,67.596,0,0,429.6666667,789.2747238,-6.4525,30.8781,2.039285714 +39,69.428,0,0,440.6666667,812.8436095,-6.6756,31.6588,2.031071429 +40,71.26,0,0,451.6666667,836.4124952,-6.8987,32.4395,2.022857143 +41,73.092,0,0,462.6666667,859.981381,-7.1218,33.2202,2.014642857 +42,74.924,0,0,473.6666667,883.5502667,-7.3449,34.0009,2.006428571 +43,76.756,0,0,484.6666667,907.1191524,-7.568,34.7816,1.998214286 +44,78.588,0,0,495.6666667,930.6880381,-7.7911,35.5623,1.99 +45,80.42,0,0,506.6666667,954.2569238,-8.0142,36.343,1.981785714 +46,82.252,0,0,517.6666667,977.8258095,-8.2373,37.1237,1.973571429 +47,84.084,0,0,528.6666667,1001.394695,-8.4604,37.9044,1.965357143 +48,85.916,0,0,539.6666667,1024.963581,-8.6835,38.6851,1.957142857 +49,87.748,0,0,550.6666667,1048.532467,-8.9066,39.4658,1.948928571 +50,89.58,0,0,561.6666667,1072.101352,-9.1297,40.2465,1.940714286 +51,91.412,0,0,572.6666667,1095.670238,-9.3528,41.0272,1.9325 +52,93.244,0,0,583.6666667,1119.239124,-9.5759,41.8079,1.924285714 +53,95.076,0,0,594.6666667,1142.80801,-9.799,42.5886,1.916071429 +54,96.908,0,0,605.6666667,1166.376895,-10.0221,43.3693,1.907857143 +55,98.74,0,0,616.6666667,1189.945781,-10.2452,44.15,1.899642857 +56,100.572,0,0,627.6666667,1213.514667,-10.4683,44.9307,1.891428571 +57,102.404,0,0,638.6666667,1237.083552,-10.6914,45.7114,1.883214286 +58,104.236,0,0,649.6666667,1260.652438,-10.9145,46.4921,1.875 +59,106.068,0,0,660.6666667,1284.221324,-11.1376,47.2728,1.866785714 +60,107.9,0,0,671.6666667,1307.79021,-11.3607,48.0535,1.858571429 +61,109.732,0,0,682.6666667,1331.359095,-11.5838,48.8342,1.850357143 +62,111.564,0,0,693.6666667,1354.927981,-11.8069,49.6149,1.842142857 +63,113.396,0,0,704.6666667,1378.496867,-12.03,50.3956,1.833928571 +64,115.228,0,0,715.6666667,1402.065752,-12.2531,51.1763,1.825714286 +65,117.06,0,0,726.6666667,1425.634638,-12.4762,51.957,1.8175 +66,118.892,0,0,737.6666667,1449.203524,-12.6993,52.7377,1.809285714 +67,120.724,0,0,748.6666667,1472.77241,-12.9224,53.5184,1.801071429 +68,122.556,0,0,759.6666667,1496.341295,-13.1455,54.2991,1.792857143 +69,124.388,0,0,770.6666667,1519.910181,-13.3686,55.0798,1.784642857 +70,126.22,0,0,781.6666667,1543.479067,-13.5917,55.8605,1.776428571 +71,128.052,0,0,792.6666667,1567.047952,-13.8148,56.6412,1.768214286 +72,129.884,0,0,803.6666667,1590.616838,-14.0379,57.4219,1.76 +73,131.716,0,0,814.6666667,1614.185724,-14.261,58.2026,1.751785714 +74,133.548,0,0,825.6666667,1637.75461,-14.4841,58.9833,1.743571429 +75,135.38,0,0,836.6666667,1661.323495,-14.7072,59.764,1.735357143 +76,137.212,0,0,847.6666667,1684.892381,-14.9303,60.5447,1.727142857 +77,139.044,0,0,858.6666667,1708.461267,-15.1534,61.3254,1.718928571 +78,140.876,0,0,869.6666667,1732.030152,-15.3765,62.1061,1.710714286 +79,142.708,0,0,880.6666667,1755.599038,-15.5996,62.8868,1.7025 +80,144.54,0,0,891.6666667,1779.167924,-15.8227,63.6675,1.694285714 +81,146.372,0,0,902.6666667,1802.73681,-16.0458,64.4482,1.686071429 +82,148.204,0,0,913.6666667,1826.305695,-16.2689,65.2289,1.677857143 +83,150.036,0,0,924.6666667,1849.874581,-16.492,66.0096,1.669642857 +84,151.868,0,0,935.6666667,1873.443467,-16.7151,66.7903,1.661428571 +85,153.7,0,0,946.6666667,1897.012352,-16.9382,67.571,1.653214286 +86,155.532,0,0,957.6666667,1920.581238,-17.1613,68.3517,1.645 +87,157.364,0,0,968.6666667,1944.150124,-17.3844,69.1324,1.636785714 +88,159.196,0,0,979.6666667,1967.71901,-17.6075,69.9131,1.628571429 +89,161.028,0,0,990.6666667,1991.287895,-17.8306,70.6938,1.620357143 diff --git a/test/data/Timeseries/real_1.csv b/test/data/Timeseries/real_1.csv new file mode 100644 index 0000000000..73a11dafe3 --- /dev/null +++ b/test/data/Timeseries/real_1.csv @@ -0,0 +1,1421 @@ +timestamp,value,is_anomaly +1,0,0 +2,0.11,0 +3,0.111,0 +4,0.3333,0 +5,0.4444,0 +6,0.111,0 +7,0.363,0 +8,0.413871429,0 +9,0.464742857,0 +10,0.515614286,0 +11,0.566485714,0 +12,0.617357143,0 +13,0.668228571,0 +14,0.7191,0 +15,0.769971429,0 +16,0.820842857,0 +17,0.871714286,0 +18,0.922585714,0 +19,0.973457143,0 +20,1.024328571,0 +21,1.0752,0 +22,1.126071429,0 +23,1.176942857,0 +24,1.227814286,0 +25,1.278685714,0 +26,1.329557143,0 +27,1.380428571,0 +28,1.4313,0 +29,1.482171429,0 +30,1.533042857,0 +31,1.583914286,0 +32,1.634785714,0 +33,1.685657143,0 +34,1.736528571,0 +35,1.7874,0 +36,1.838271429,0 +37,1.889142857,0 +38,1.940014286,0 +39,1.990885714,0 +40,2.041757143,0 +41,2.092628571,0 +42,2.1435,0 +43,2.194371429,0 +44,2.245242857,0 +45,2.296114286,0 +46,2.346985714,0 +47,2.397857143,0 +48,2.448728571,0 +49,2.4996,0 +50,2.550471429,0 +51,2.601342857,0 +52,2.652214286,0 +53,2.703085714,0 +54,2.753957143,0 +55,2.804828571,0 +56,2.8557,0 +57,2.906571429,0 +58,2.957442857,0 +59,3.008314286,0 +60,3.059185714,0 +61,3.110057143,0 +62,3.160928571,0 +63,3.2118,0 +64,3.262671429,0 +65,3.313542857,0 +66,3.364414286,0 +67,3.415285714,0 +68,3.466157143,0 +69,3.517028571,0 +70,3.5679,0 +71,3.618771429,0 +72,3.669642857,0 +73,3.720514286,0 +74,3.771385714,0 +75,3.822257143,0 +76,3.873128571,0 +77,3.924,0 +78,3.974871429,0 +79,4.025742857,0 +80,4.076614286,0 +81,4.127485714,0 +82,4.178357143,0 +83,4.229228571,0 +84,4.2801,0 +85,4.330971429,0 +86,4.381842857,0 +87,4.432714286,0 +88,4.483585714,0 +89,4.534457143,0 +90,4.585328571,0 +91,4.6362,0 +92,4.687071429,0 +93,4.737942857,0 +94,4.788814286,0 +95,4.839685714,0 +96,4.890557143,0 +97,4.941428571,0 +98,4.9923,0 +99,5.043171429,0 +100,5.094042857,0 +101,5.144914286,0 +102,5.195785714,0 +103,5.246657143,0 +104,5.297528571,0 +105,5.3484,0 +106,5.399271429,0 +107,5.450142857,0 +108,5.501014286,0 +109,5.551885714,0 +110,5.602757143,0 +111,5.653628571,0 +112,5.7045,0 +113,5.755371429,0 +114,5.806242857,0 +115,5.857114286,0 +116,5.907985714,0 +117,5.958857143,0 +118,6.009728571,0 +119,6.0606,0 +120,6.111471429,0 +121,6.162342857,0 +122,6.213214286,0 +123,6.264085714,0 +124,6.314957143,0 +125,6.365828571,0 +126,6.4167,0 +127,6.467571429,0 +128,6.518442857,0 +129,6.569314286,0 +130,6.620185714,0 +131,6.671057143,0 +132,6.721928571,0 +133,6.7728,0 +134,6.823671429,0 +135,6.874542857,0 +136,6.925414286,0 +137,6.976285714,0 +138,7.027157143,0 +139,7.078028571,0 +140,7.1289,0 +141,7.179771429,0 +142,7.230642857,0 +143,7.281514286,0 +144,7.332385714,0 +145,7.383257143,0 +146,7.434128571,0 +147,7.485,0 +148,7.535871429,0 +149,7.586742857,0 +150,7.637614286,0 +151,7.688485714,0 +152,7.739357143,0 +153,7.790228571,0 +154,7.8411,0 +155,7.891971429,0 +156,7.942842857,0 +157,7.993714286,0 +158,8.044585714,0 +159,8.095457143,0 +160,8.146328571,0 +161,8.1972,0 +162,8.248071429,0 +163,8.298942857,0 +164,8.349814286,0 +165,8.400685714,0 +166,8.451557143,0 +167,8.502428571,0 +168,8.5533,0 +169,8.604171429,0 +170,8.655042857,0 +171,8.705914286,0 +172,8.756785714,0 +173,8.807657143,0 +174,8.858528571,0 +175,8.9094,0 +176,8.960271429,0 +177,9.011142857,0 +178,9.062014286,0 +179,9.112885714,0 +180,9.163757143,0 +181,9.214628571,0 +182,9.2655,0 +183,9.316371429,0 +184,9.367242857,0 +185,9.418114286,0 +186,9.468985714,0 +187,9.519857143,0 +188,9.570728571,0 +189,9.6216,0 +190,9.672471429,0 +191,9.723342857,0 +192,9.774214286,0 +193,9.825085714,0 +194,9.875957143,0 +195,9.926828571,0 +196,9.9777,0 +197,10.02857143,0 +198,10.07944286,0 +199,10.13031429,0 +200,10.18118571,0 +201,10.23205714,0 +202,10.28292857,0 +203,10.3338,0 +204,10.38467143,0 +205,10.43554286,0 +206,10.48641429,0 +207,10.53728571,0 +208,10.58815714,0 +209,10.63902857,0 +210,10.6899,0 +211,10.74077143,0 +212,10.79164286,0 +213,10.84251429,0 +214,10.89338571,0 +215,10.94425714,0 +216,10.99512857,0 +217,11.046,0 +218,11.09687143,0 +219,11.14774286,0 +220,11.19861429,0 +221,11.24948571,0 +222,11.30035714,0 +223,11.35122857,0 +224,11.4021,0 +225,11.45297143,0 +226,11.50384286,0 +227,11.55471429,0 +228,11.60558571,0 +229,11.65645714,0 +230,11.70732857,0 +231,11.7582,0 +232,11.80907143,0 +233,11.85994286,0 +234,11.91081429,0 +235,11.96168571,0 +236,12.01255714,0 +237,12.06342857,0 +238,12.1143,0 +239,12.16517143,0 +240,12.21604286,0 +241,12.26691429,0 +242,12.31778571,0 +243,12.36865714,0 +244,12.41952857,0 +245,12.4704,0 +246,12.52127143,0 +247,12.57214286,0 +248,12.62301429,0 +249,12.67388571,0 +250,12.72475714,0 +251,12.77562857,0 +252,12.8265,0 +253,12.87737143,0 +254,12.92824286,0 +255,12.97911429,0 +256,13.02998571,0 +257,13.08085714,0 +258,13.13172857,0 +259,13.1826,0 +260,13.23347143,0 +261,13.28434286,0 +262,13.33521429,0 +263,13.38608571,0 +264,13.43695714,0 +265,13.48782857,0 +266,13.5387,0 +267,13.58957143,0 +268,13.64044286,0 +269,13.69131429,0 +270,13.74218571,0 +271,13.79305714,0 +272,13.84392857,0 +273,13.8948,0 +274,13.94567143,0 +275,13.99654286,0 +276,14.04741429,0 +277,14.09828571,0 +278,14.14915714,0 +279,14.20002857,0 +280,14.2509,0 +281,14.30177143,0 +282,14.35264286,0 +283,14.40351429,0 +284,14.45438571,0 +285,14.50525714,0 +286,14.55612857,0 +287,14.607,0 +288,14.65787143,0 +289,14.70874286,0 +290,14.75961429,0 +291,14.81048571,0 +292,14.86135714,0 +293,14.91222857,0 +294,14.9631,0 +295,15.01397143,0 +296,15.06484286,0 +297,15.11571429,0 +298,15.16658571,0 +299,15.21745714,0 +300,15.26832857,0 +301,15.3192,0 +302,15.37007143,0 +303,15.42094286,0 +304,15.47181429,0 +305,15.52268571,0 +306,15.57355714,0 +307,15.62442857,0 +308,15.6753,0 +309,15.72617143,0 +310,15.77704286,0 +311,15.82791429,0 +312,15.87878571,0 +313,15.92965714,0 +314,15.98052857,0 +315,16.0314,0 +316,16.08227143,0 +317,16.13314286,0 +318,16.18401429,0 +319,16.23488571,0 +320,16.28575714,0 +321,16.33662857,0 +322,16.3875,0 +323,16.43837143,0 +324,16.48924286,0 +325,16.54011429,0 +326,16.59098571,0 +327,16.64185714,0 +328,16.69272857,0 +329,16.7436,0 +330,16.79447143,0 +331,16.84534286,0 +332,16.89621429,0 +333,16.94708571,0 +334,16.99795714,0 +335,17.04882857,0 +336,17.0997,0 +337,17.15057143,0 +338,17.20144286,0 +339,17.25231429,0 +340,17.30318571,0 +341,17.35405714,0 +342,17.40492857,0 +343,17.4558,0 +344,17.50667143,0 +345,17.55754286,0 +346,17.60841429,0 +347,17.65928571,0 +348,17.71015714,0 +349,17.76102857,0 +350,17.8119,0 +351,17.86277143,0 +352,17.91364286,0 +353,17.96451429,0 +354,18.01538571,0 +355,18.06625714,0 +356,18.11712857,0 +357,18.168,0 +358,18.21887143,0 +359,18.26974286,0 +360,18.32061429,0 +361,18.37148571,0 +362,18.42235714,0 +363,18.47322857,0 +364,18.5241,0 +365,18.57497143,0 +366,18.62584286,0 +367,18.67671429,0 +368,18.72758571,0 +369,18.77845714,0 +370,18.82932857,0 +371,18.8802,0 +372,18.93107143,0 +373,18.98194286,0 +374,19.03281429,0 +375,19.08368571,0 +376,19.13455714,0 +377,19.18542857,0 +378,19.2363,0 +379,19.28717143,0 +380,19.33804286,0 +381,19.38891429,0 +382,19.43978571,0 +383,19.49065714,0 +384,19.54152857,0 +385,19.5924,0 +386,19.64327143,0 +387,19.69414286,0 +388,19.74501429,0 +389,19.79588571,0 +390,19.84675714,0 +391,19.89762857,0 +392,19.9485,0 +393,19.99937143,0 +394,20.05024286,0 +395,20.10111429,0 +396,20.15198571,0 +397,20.20285714,0 +398,20.25372857,0 +399,20.3046,0 +400,20.35547143,0 +401,20.40634286,0 +402,20.45721429,0 +403,20.50808571,0 +404,20.55895714,0 +405,20.60982857,0 +406,20.6607,0 +407,20.71157143,0 +408,20.76244286,0 +409,20.81331429,0 +410,20.86418571,0 +411,20.91505714,0 +412,20.96592857,0 +413,21.0168,0 +414,21.06767143,0 +415,21.11854286,0 +416,21.16941429,0 +417,21.22028571,0 +418,21.27115714,0 +419,21.32202857,0 +420,21.3729,0 +421,21.42377143,0 +422,21.47464286,0 +423,21.52551429,0 +424,21.57638571,0 +425,21.62725714,0 +426,21.67812857,0 +427,21.729,0 +428,21.77987143,0 +429,21.83074286,0 +430,21.88161429,0 +431,21.93248571,0 +432,21.98335714,0 +433,22.03422857,0 +434,22.0851,0 +435,22.13597143,0 +436,22.18684286,0 +437,22.23771429,0 +438,22.28858571,0 +439,22.33945714,0 +440,22.39032857,0 +441,22.4412,0 +442,22.49207143,0 +443,22.54294286,0 +444,22.59381429,0 +445,22.64468571,0 +446,22.69555714,0 +447,22.74642857,0 +448,22.7973,0 +449,22.84817143,0 +450,22.89904286,0 +451,22.94991429,0 +452,23.00078571,0 +453,23.05165714,0 +454,23.10252857,0 +455,23.1534,0 +456,23.20427143,0 +457,23.25514286,0 +458,23.30601429,0 +459,23.35688571,0 +460,23.40775714,0 +461,23.45862857,0 +462,23.5095,0 +463,23.56037143,0 +464,23.61124286,0 +465,23.66211429,0 +466,23.71298571,0 +467,23.76385714,0 +468,23.81472857,0 +469,23.8656,0 +470,23.91647143,0 +471,23.96734286,0 +472,24.01821429,0 +473,24.06908571,0 +474,24.11995714,0 +475,24.17082857,0 +476,24.2217,0 +477,24.27257143,0 +478,24.32344286,0 +479,24.37431429,0 +480,24.42518571,0 +481,24.47605714,0 +482,24.52692857,0 +483,24.5778,0 +484,24.62867143,0 +485,24.67954286,0 +486,24.73041429,0 +487,24.78128571,0 +488,24.83215714,0 +489,24.88302857,0 +490,24.9339,0 +491,24.98477143,0 +492,25.03564286,0 +493,25.08651429,0 +494,25.13738571,0 +495,25.18825714,0 +496,25.23912857,0 +497,25.29,0 +498,25.34087143,0 +499,25.39174286,0 +500,25.44261429,0 +501,25.49348571,0 +502,25.54435714,0 +503,25.59522857,0 +504,25.6461,0 +505,25.69697143,0 +506,25.74784286,0 +507,25.79871429,0 +508,25.84958571,0 +509,25.90045714,0 +510,25.95132857,0 +511,26.0022,0 +512,26.05307143,0 +513,26.10394286,0 +514,26.15481429,0 +515,26.20568571,0 +516,26.25655714,0 +517,26.30742857,0 +518,26.3583,0 +519,26.40917143,0 +520,26.46004286,0 +521,26.51091429,0 +522,26.56178571,0 +523,26.61265714,0 +524,26.66352857,0 +525,26.7144,0 +526,26.76527143,0 +527,26.81614286,0 +528,26.86701429,0 +529,26.91788571,0 +530,26.96875714,0 +531,27.01962857,0 +532,27.0705,0 +533,27.12137143,0 +534,27.17224286,0 +535,27.22311429,0 +536,27.27398571,0 +537,27.32485714,0 +538,27.37572857,0 +539,27.4266,0 +540,27.47747143,0 +541,27.52834286,0 +542,27.57921429,0 +543,27.63008571,0 +544,27.68095714,0 +545,27.73182857,0 +546,27.7827,0 +547,27.83357143,0 +548,27.88444286,0 +549,27.93531429,0 +550,27.98618571,0 +551,28.03705714,0 +552,28.08792857,0 +553,28.1388,0 +554,28.18967143,0 +555,28.24054286,0 +556,28.29141429,0 +557,28.34228571,0 +558,28.39315714,0 +559,28.44402857,0 +560,28.4949,0 +561,28.54577143,0 +562,28.59664286,0 +563,28.64751429,0 +564,28.69838571,0 +565,28.74925714,0 +566,28.80012857,0 +567,28.851,0 +568,28.90187143,0 +569,28.95274286,0 +570,29.00361429,0 +571,29.05448571,0 +572,29.10535714,0 +573,29.15622857,0 +574,29.2071,0 +575,29.25797143,0 +576,29.30884286,0 +577,29.35971429,0 +578,29.41058571,0 +579,29.46145714,0 +580,29.51232857,0 +581,29.5632,0 +582,29.61407143,0 +583,29.66494286,0 +584,29.71581429,0 +585,29.76668571,0 +586,29.81755714,0 +587,29.86842857,0 +588,29.9193,0 +589,29.97017143,0 +590,30.02104286,0 +591,30.07191429,0 +592,30.12278571,0 +593,30.17365714,0 +594,30.22452857,0 +595,30.2754,0 +596,30.32627143,0 +597,30.37714286,0 +598,30.42801429,0 +599,30.47888571,0 +600,30.52975714,0 +601,30.58062857,0 +602,30.6315,0 +603,30.68237143,0 +604,30.73324286,0 +605,30.78411429,0 +606,30.83498571,0 +607,30.88585714,0 +608,30.93672857,0 +609,30.9876,0 +610,31.03847143,0 +611,31.08934286,0 +612,31.14021429,0 +613,31.19108571,0 +614,31.24195714,0 +615,31.29282857,0 +616,31.3437,0 +617,31.39457143,0 +618,31.44544286,0 +619,31.49631429,0 +620,31.54718571,0 +621,31.59805714,0 +622,31.64892857,0 +623,31.6998,0 +624,31.75067143,0 +625,31.80154286,0 +626,31.85241429,0 +627,31.90328571,0 +628,31.95415714,0 +629,32.00502857,0 +630,32.0559,0 +631,32.10677143,0 +632,32.15764286,0 +633,32.20851429,0 +634,32.25938571,0 +635,32.31025714,0 +636,32.36112857,0 +637,32.412,0 +638,32.46287143,0 +639,32.51374286,0 +640,32.56461429,0 +641,32.61548571,0 +642,32.66635714,0 +643,32.71722857,0 +644,32.7681,0 +645,32.81897143,0 +646,32.86984286,0 +647,32.92071429,0 +648,32.97158571,0 +649,33.02245714,0 +650,33.07332857,0 +651,33.1242,0 +652,33.17507143,0 +653,33.22594286,0 +654,33.27681429,0 +655,33.32768571,0 +656,33.37855714,0 +657,33.42942857,0 +658,33.4803,0 +659,33.53117143,0 +660,33.58204286,0 +661,33.63291429,0 +662,33.68378571,0 +663,33.73465714,0 +664,33.78552857,0 +665,33.8364,0 +666,33.88727143,0 +667,33.93814286,0 +668,33.98901429,0 +669,34.03988571,0 +670,34.09075714,0 +671,34.14162857,0 +672,34.1925,0 +673,34.24337143,0 +674,34.29424286,0 +675,34.34511429,0 +676,34.39598571,0 +677,34.44685714,0 +678,34.49772857,0 +679,34.5486,0 +680,34.59947143,0 +681,34.65034286,0 +682,34.70121429,0 +683,34.75208571,0 +684,34.80295714,0 +685,34.85382857,0 +686,34.9047,0 +687,34.95557143,0 +688,35.00644286,0 +689,35.05731429,0 +690,35.10818571,0 +691,35.15905714,0 +692,35.20992857,0 +693,35.2608,0 +694,35.31167143,0 +695,35.36254286,0 +696,35.41341429,0 +697,35.46428571,0 +698,35.51515714,0 +699,35.56602857,0 +700,35.6169,0 +701,35.66777143,0 +702,35.71864286,0 +703,35.76951429,0 +704,35.82038571,0 +705,35.87125714,0 +706,35.92212857,0 +707,35.973,0 +708,36.02387143,0 +709,36.07474286,0 +710,36.12561429,0 +711,36.17648571,0 +712,36.22735714,0 +713,36.27822857,0 +714,36.3291,0 +715,36.37997143,0 +716,36.43084286,0 +717,36.48171429,0 +718,36.53258571,0 +719,36.58345714,0 +720,36.63432857,0 +721,36.6852,0 +722,36.73607143,0 +723,36.78694286,0 +724,36.83781429,0 +725,36.88868571,0 +726,36.93955714,0 +727,36.99042857,0 +728,37.0413,0 +729,37.09217143,0 +730,37.14304286,0 +731,37.19391429,0 +732,37.24478571,0 +733,37.29565714,0 +734,37.34652857,0 +735,37.3974,0 +736,37.44827143,0 +737,37.49914286,0 +738,37.55001429,0 +739,37.60088571,0 +740,37.65175714,0 +741,37.70262857,0 +742,37.7535,0 +743,37.80437143,0 +744,37.85524286,0 +745,37.90611429,0 +746,37.95698571,0 +747,38.00785714,0 +748,38.05872857,0 +749,38.1096,0 +750,38.16047143,0 +751,38.21134286,0 +752,38.26221429,0 +753,38.31308571,0 +754,38.36395714,0 +755,38.41482857,0 +756,38.4657,0 +757,38.51657143,0 +758,38.56744286,0 +759,38.61831429,0 +760,38.66918571,0 +761,38.72005714,0 +762,38.77092857,0 +763,38.8218,0 +764,38.87267143,0 +765,38.92354286,0 +766,38.97441429,0 +767,39.02528571,0 +768,39.07615714,0 +769,39.12702857,0 +770,39.1779,0 +771,39.22877143,0 +772,39.27964286,0 +773,39.33051429,0 +774,39.38138571,0 +775,39.43225714,0 +776,39.48312857,0 +777,39.534,0 +778,39.58487143,0 +779,39.63574286,0 +780,39.68661429,0 +781,39.73748571,0 +782,39.78835714,0 +783,39.83922857,0 +784,39.8901,0 +785,39.94097143,0 +786,39.99184286,0 +787,40.04271429,0 +788,40.09358571,0 +789,40.14445714,0 +790,40.19532857,0 +791,40.2462,0 +792,40.29707143,0 +793,40.34794286,0 +794,40.39881429,0 +795,40.44968571,0 +796,40.50055714,0 +797,40.55142857,0 +798,40.6023,0 +799,40.65317143,0 +800,40.70404286,0 +801,40.75491429,0 +802,40.80578571,0 +803,40.85665714,0 +804,40.90752857,0 +805,40.9584,0 +806,41.00927143,0 +807,41.06014286,0 +808,41.11101429,0 +809,41.16188571,0 +810,41.21275714,0 +811,41.26362857,0 +812,41.3145,0 +813,41.36537143,0 +814,41.41624286,0 +815,41.46711429,0 +816,41.51798571,0 +817,41.56885714,0 +818,41.61972857,0 +819,41.6706,0 +820,41.72147143,0 +821,41.77234286,0 +822,41.82321429,0 +823,41.87408571,0 +824,41.92495714,0 +825,41.97582857,0 +826,42.0267,0 +827,42.07757143,0 +828,42.12844286,0 +829,42.17931429,0 +830,42.23018571,0 +831,42.28105714,0 +832,42.33192857,0 +833,42.3828,0 +834,42.43367143,0 +835,42.48454286,0 +836,42.53541429,0 +837,42.58628571,0 +838,42.63715714,0 +839,42.68802857,0 +840,42.7389,0 +841,42.78977143,0 +842,42.84064286,0 +843,42.89151429,0 +844,42.94238571,0 +845,42.99325714,0 +846,43.04412857,0 +847,43.095,0 +848,43.14587143,0 +849,43.19674286,0 +850,43.24761429,0 +851,43.29848571,0 +852,43.34935714,0 +853,43.40022857,0 +854,43.4511,0 +855,43.50197143,0 +856,43.55284286,0 +857,43.60371429,0 +858,43.65458571,0 +859,43.70545714,0 +860,43.75632857,0 +861,43.8072,0 +862,43.85807143,0 +863,43.90894286,0 +864,43.95981429,0 +865,44.01068571,0 +866,44.06155714,0 +867,44.11242857,0 +868,44.1633,0 +869,44.21417143,0 +870,44.26504286,0 +871,44.31591429,0 +872,44.36678571,0 +873,44.41765714,0 +874,44.46852857,0 +875,44.5194,0 +876,44.57027143,0 +877,44.62114286,0 +878,44.67201429,0 +879,44.72288571,0 +880,44.77375714,0 +881,44.82462857,0 +882,44.8755,0 +883,44.92637143,0 +884,44.97724286,0 +885,45.02811429,0 +886,45.07898571,0 +887,45.12985714,0 +888,45.18072857,0 +889,45.2316,0 +890,45.28247143,0 +891,45.33334286,0 +892,45.38421429,0 +893,45.43508571,0 +894,45.48595714,0 +895,45.53682857,0 +896,45.5877,0 +897,45.63857143,0 +898,45.68944286,0 +899,45.74031429,0 +900,45.79118571,0 +901,45.84205714,0 +902,45.89292857,0 +903,45.9438,0 +904,45.99467143,0 +905,46.04554286,0 +906,46.09641429,0 +907,46.14728571,0 +908,46.19815714,0 +909,46.24902857,0 +910,46.2999,0 +911,46.35077143,0 +912,46.40164286,0 +913,46.45251429,0 +914,46.50338571,0 +915,46.55425714,0 +916,46.60512857,0 +917,46.656,0 +918,46.70687143,0 +919,46.75774286,0 +920,46.80861429,0 +921,46.85948571,0 +922,46.91035714,0 +923,46.96122857,0 +924,47.0121,0 +925,47.06297143,0 +926,47.11384286,0 +927,47.16471429,0 +928,47.21558571,0 +929,47.26645714,0 +930,47.31732857,0 +931,47.3682,0 +932,47.41907143,0 +933,47.46994286,0 +934,47.52081429,0 +935,47.57168571,0 +936,47.62255714,0 +937,47.67342857,0 +938,47.7243,0 +939,47.77517143,0 +940,47.82604286,0 +941,47.87691429,0 +942,47.92778571,0 +943,47.97865714,0 +944,48.02952857,0 +945,48.0804,0 +946,48.13127143,0 +947,48.18214286,0 +948,48.23301429,0 +949,48.28388571,0 +950,48.33475714,0 +951,48.38562857,0 +952,48.4365,0 +953,48.48737143,0 +954,48.53824286,0 +955,48.58911429,0 +956,48.63998571,0 +957,48.69085714,0 +958,48.74172857,0 +959,48.7926,0 +960,48.84347143,0 +961,48.89434286,0 +962,48.94521429,0 +963,48.99608571,0 +964,49.04695714,0 +965,49.09782857,0 +966,49.1487,0 +967,49.19957143,0 +968,49.25044286,0 +969,49.30131429,0 +970,49.35218571,0 +971,49.40305714,0 +972,49.45392857,0 +973,49.5048,0 +974,49.55567143,0 +975,49.60654286,0 +976,49.65741429,0 +977,49.70828571,0 +978,49.75915714,0 +979,49.81002857,0 +980,49.8609,0 +981,49.91177143,0 +982,49.96264286,0 +983,50.01351429,0 +984,50.06438571,0 +985,50.11525714,0 +986,50.16612857,0 +987,50.217,0 +988,50.26787143,0 +989,50.31874286,0 +990,50.36961429,0 +991,50.42048571,0 +992,50.47135714,0 +993,50.52222857,0 +994,50.5731,0 +995,50.62397143,0 +996,50.67484286,0 +997,50.72571429,0 +998,50.77658571,0 +999,50.82745714,0 +1000,50.87832857,0 +1001,50.9292,0 +1002,50.98007143,0 +1003,51.03094286,0 +1004,51.08181429,0 +1005,51.13268571,0 +1006,51.18355714,0 +1007,51.23442857,0 +1008,51.2853,0 +1009,51.33617143,0 +1010,51.38704286,0 +1011,51.43791429,0 +1012,51.48878571,0 +1013,51.53965714,0 +1014,51.59052857,0 +1015,51.6414,0 +1016,51.69227143,0 +1017,51.74314286,0 +1018,51.79401429,0 +1019,51.84488571,0 +1020,51.89575714,0 +1021,51.94662857,0 +1022,51.9975,0 +1023,52.04837143,0 +1024,52.09924286,0 +1025,52.15011429,0 +1026,52.20098571,0 +1027,52.25185714,0 +1028,52.30272857,0 +1029,52.3536,0 +1030,52.40447143,0 +1031,52.45534286,0 +1032,52.50621429,0 +1033,52.55708571,0 +1034,52.60795714,0 +1035,52.65882857,0 +1036,52.7097,0 +1037,52.76057143,0 +1038,52.81144286,0 +1039,52.86231429,0 +1040,52.91318571,0 +1041,52.96405714,0 +1042,53.01492857,0 +1043,53.0658,0 +1044,53.11667143,0 +1045,53.16754286,0 +1046,53.21841429,0 +1047,53.26928571,0 +1048,53.32015714,0 +1049,53.37102857,0 +1050,53.4219,0 +1051,53.47277143,0 +1052,53.52364286,0 +1053,53.57451429,0 +1054,53.62538571,0 +1055,53.67625714,0 +1056,53.72712857,0 +1057,53.778,0 +1058,53.82887143,0 +1059,53.87974286,0 +1060,53.93061429,0 +1061,53.98148571,0 +1062,54.03235714,0 +1063,54.08322857,0 +1064,54.1341,0 +1065,54.18497143,0 +1066,54.23584286,0 +1067,54.28671429,0 +1068,54.33758571,0 +1069,54.38845714,0 +1070,54.43932857,0 +1071,54.4902,0 +1072,54.54107143,0 +1073,54.59194286,0 +1074,54.64281429,0 +1075,54.69368571,0 +1076,54.74455714,0 +1077,54.79542857,0 +1078,54.8463,0 +1079,54.89717143,0 +1080,54.94804286,0 +1081,54.99891429,0 +1082,55.04978571,0 +1083,55.10065714,0 +1084,55.15152857,0 +1085,55.2024,0 +1086,55.25327143,0 +1087,55.30414286,0 +1088,55.35501429,0 +1089,55.40588571,0 +1090,55.45675714,0 +1091,55.50762857,0 +1092,55.5585,0 +1093,55.60937143,0 +1094,55.66024286,0 +1095,55.71111429,0 +1096,55.76198571,0 +1097,55.81285714,0 +1098,55.86372857,0 +1099,55.9146,0 +1100,55.96547143,0 +1101,56.01634286,0 +1102,56.06721429,0 +1103,56.11808571,0 +1104,56.16895714,0 +1105,56.21982857,0 +1106,56.2707,0 +1107,56.32157143,0 +1108,56.37244286,0 +1109,56.42331429,0 +1110,56.47418571,0 +1111,56.52505714,0 +1112,56.57592857,0 +1113,56.6268,0 +1114,56.67767143,0 +1115,56.72854286,0 +1116,56.77941429,0 +1117,56.83028571,0 +1118,56.88115714,0 +1119,56.93202857,0 +1120,56.9829,0 +1121,57.03377143,0 +1122,57.08464286,0 +1123,57.13551429,0 +1124,57.18638571,0 +1125,57.23725714,0 +1126,57.28812857,0 +1127,57.339,0 +1128,57.38987143,0 +1129,57.44074286,0 +1130,57.49161429,0 +1131,57.54248571,0 +1132,57.59335714,0 +1133,57.64422857,0 +1134,57.6951,0 +1135,57.74597143,0 +1136,57.79684286,0 +1137,57.84771429,0 +1138,57.89858571,0 +1139,57.94945714,0 +1140,58.00032857,0 +1141,58.0512,0 +1142,58.10207143,0 +1143,58.15294286,0 +1144,58.20381429,0 +1145,58.25468571,0 +1146,58.30555714,0 +1147,58.35642857,0 +1148,58.4073,0 +1149,58.45817143,0 +1150,58.50904286,0 +1151,58.55991429,0 +1152,58.61078571,0 +1153,58.66165714,0 +1154,58.71252857,0 +1155,58.7634,0 +1156,58.81427143,0 +1157,58.86514286,0 +1158,58.91601429,0 +1159,58.96688571,0 +1160,59.01775714,0 +1161,59.06862857,0 +1162,59.1195,0 +1163,59.17037143,0 +1164,59.22124286,0 +1165,59.27211429,0 +1166,59.32298571,0 +1167,59.37385714,0 +1168,59.42472857,0 +1169,59.4756,0 +1170,59.52647143,0 +1171,59.57734286,0 +1172,59.62821429,0 +1173,59.67908571,0 +1174,59.72995714,0 +1175,59.78082857,0 +1176,59.8317,0 +1177,59.88257143,0 +1178,59.93344286,0 +1179,59.98431429,0 +1180,60.03518571,0 +1181,60.08605714,0 +1182,60.13692857,0 +1183,60.1878,0 +1184,60.23867143,0 +1185,60.28954286,0 +1186,60.34041429,0 +1187,60.39128571,0 +1188,60.44215714,0 +1189,60.49302857,0 +1190,60.5439,0 +1191,60.59477143,0 +1192,60.64564286,0 +1193,60.69651429,0 +1194,60.74738571,0 +1195,60.79825714,0 +1196,60.84912857,0 +1197,60.9,0 +1198,60.95087143,0 +1199,61.00174286,0 +1200,61.05261429,0 +1201,61.10348571,0 +1202,61.15435714,0 +1203,61.20522857,0 +1204,61.2561,0 +1205,61.30697143,0 +1206,61.35784286,0 +1207,61.40871429,0 +1208,61.45958571,0 +1209,61.51045714,0 +1210,61.56132857,0 +1211,61.6122,0 +1212,61.66307143,0 +1213,61.71394286,0 +1214,61.76481429,0 +1215,61.81568571,1 +1216,61.86655714,0 +1217,61.91742857,1 +1218,61.9683,0 +1219,62.01917143,0 +1220,62.07004286,0 +1221,62.12091429,0 +1222,62.17178571,0 +1223,62.22265714,0 +1224,62.27352857,0 +1225,62.3244,0 +1226,62.37527143,0 +1227,62.42614286,0 +1228,62.47701429,0 +1229,62.52788571,0 +1230,62.57875714,0 +1231,62.62962857,0 +1232,62.6805,0 +1233,62.73137143,0 +1234,62.78224286,0 +1235,62.83311429,0 +1236,62.88398571,0 +1237,62.93485714,0 +1238,62.98572857,0 +1239,63.0366,0 +1240,63.08747143,0 +1241,63.13834286,0 +1242,63.18921429,0 +1243,63.24008571,0 +1244,63.29095714,0 +1245,63.34182857,0 +1246,63.3927,0 +1247,63.44357143,0 +1248,63.49444286,0 +1249,63.54531429,0 +1250,63.59618571,0 +1251,63.64705714,0 +1252,63.69792857,0 +1253,63.7488,0 +1254,63.79967143,0 +1255,63.85054286,0 +1256,63.90141429,0 +1257,63.95228571,0 +1258,64.00315714,0 +1259,64.05402857,0 +1260,64.1049,0 +1261,64.15577143,0 +1262,64.20664286,0 +1263,64.25751429,0 +1264,64.30838571,0 +1265,64.35925714,0 +1266,64.41012857,0 +1267,64.461,0 +1268,64.51187143,0 +1269,64.56274286,0 +1270,64.61361429,0 +1271,64.66448571,0 +1272,64.71535714,0 +1273,64.76622857,0 +1274,64.8171,0 +1275,64.86797143,0 +1276,64.91884286,0 +1277,64.96971429,0 +1278,65.02058571,0 +1279,65.07145714,0 +1280,65.12232857,0 +1281,65.1732,0 +1282,65.22407143,0 +1283,65.27494286,0 +1284,65.32581429,0 +1285,65.37668571,0 +1286,65.42755714,0 +1287,65.47842857,0 +1288,65.5293,0 +1289,65.58017143,0 +1290,65.63104286,0 +1291,65.68191429,0 +1292,65.73278571,0 +1293,65.78365714,0 +1294,65.83452857,0 +1295,65.8854,0 +1296,65.93627143,0 +1297,65.98714286,0 +1298,66.03801429,0 +1299,66.08888571,0 +1300,66.13975714,0 +1301,66.19062857,0 +1302,66.2415,0 +1303,66.29237143,0 +1304,66.34324286,0 +1305,66.39411429,0 +1306,66.44498571,0 +1307,66.49585714,0 +1308,66.54672857,0 +1309,66.5976,0 +1310,66.64847143,0 +1311,66.69934286,0 +1312,66.75021429,0 +1313,66.80108571,0 +1314,66.85195714,0 +1315,66.90282857,0 +1316,66.9537,0 +1317,67.00457143,0 +1318,67.05544286,0 +1319,67.10631429,0 +1320,67.15718571,0 +1321,67.20805714,0 +1322,67.25892857,0 +1323,67.3098,0 +1324,67.36067143,0 +1325,67.41154286,0 +1326,67.46241429,0 +1327,67.51328571,0 +1328,67.56415714,0 +1329,67.61502857,0 +1330,67.6659,0 +1331,67.71677143,0 +1332,67.76764286,0 +1333,67.81851429,0 +1334,67.86938571,0 +1335,67.92025714,0 +1336,67.97112857,0 +1337,68.022,0 +1338,68.07287143,0 +1339,68.12374286,0 +1340,68.17461429,0 +1341,68.22548571,0 +1342,68.27635714,0 +1343,68.32722857,0 +1344,68.3781,0 +1345,68.42897143,0 +1346,68.47984286,0 +1347,68.53071429,0 +1348,68.58158571,0 +1349,68.63245714,0 +1350,68.68332857,0 +1351,68.7342,0 +1352,68.78507143,0 +1353,68.83594286,0 +1354,68.88681429,0 +1355,68.93768571,0 +1356,68.98855714,0 +1357,69.03942857,0 +1358,69.0903,0 +1359,69.14117143,0 +1360,69.19204286,0 +1361,69.24291429,0 +1362,69.29378571,0 +1363,69.34465714,0 +1364,69.39552857,0 +1365,69.4464,0 +1366,69.49727143,0 +1367,69.54814286,0 +1368,69.59901429,0 +1369,69.64988571,0 +1370,69.70075714,0 +1371,69.75162857,0 +1372,69.8025,0 +1373,69.85337143,0 +1374,69.90424286,0 +1375,69.95511429,0 +1376,70.00598571,0 +1377,70.05685714,0 +1378,70.10772857,0 +1379,70.1586,0 +1380,70.20947143,0 +1381,70.26034286,0 +1382,70.31121429,0 +1383,70.36208571,0 +1384,70.41295714,0 +1385,70.46382857,0 +1386,70.5147,0 +1387,70.56557143,0 +1388,70.61644286,0 +1389,70.66731429,0 +1390,70.71818571,0 +1391,70.76905714,0 +1392,70.81992857,0 +1393,70.8708,0 +1394,70.92167143,0 +1395,70.97254286,0 +1396,71.02341429,0 +1397,71.07428571,0 +1398,71.12515714,0 +1399,71.17602857,0 +1400,71.2269,0 +1401,71.27777143,0 +1402,71.32864286,0 +1403,71.37951429,0 +1404,71.43038571,0 +1405,71.48125714,0 +1406,71.53212857,0 +1407,71.583,0 +1408,71.63387143,0 +1409,71.68474286,0 +1410,71.73561429,0 +1411,71.78648571,0 +1412,71.83735714,0 +1413,71.88822857,0 +1414,71.9391,0 +1415,71.98997143,0 +1416,72.04084286,0 +1417,72.09171429,0 +1418,72.14258571,0 +1419,72.19345714,0 +1420,72.24432857,0 diff --git a/test/data/Timeseries/real_11.csv b/test/data/Timeseries/real_11.csv new file mode 100644 index 0000000000..12b2bd2ec5 --- /dev/null +++ b/test/data/Timeseries/real_11.csv @@ -0,0 +1,1440 @@ +timestamp,value,is_anomaly +1,1123,0 +2,1333,0 +3,4322,0 +4,5678,0 +5,7277.5,0 +6,8942.9,0 +7,10608.3,0 +8,12273.7,0 +9,13939.1,0 +10,15604.5,0 +11,17269.9,0 +12,18935.3,0 +13,20600.7,0 +14,22266.1,0 +15,23931.5,0 +16,25596.9,0 +17,27262.3,0 +18,28927.7,0 +19,30593.1,0 +20,32258.5,0 +21,33923.9,0 +22,35589.3,0 +23,37254.7,0 +24,38920.1,0 +25,40585.5,0 +26,42250.9,0 +27,43916.3,0 +28,45581.7,0 +29,47247.1,0 +30,48912.5,0 +31,50577.9,0 +32,52243.3,0 +33,53908.7,0 +34,55574.1,0 +35,57239.5,0 +36,58904.9,0 +37,60570.3,0 +38,62235.7,0 +39,63901.1,0 +40,65566.5,0 +41,67231.9,0 +42,68897.3,0 +43,70562.7,0 +44,72228.1,0 +45,73893.5,0 +46,75558.9,0 +47,77224.3,0 +48,78889.7,0 +49,80555.1,0 +50,82220.5,0 +51,83885.9,0 +52,85551.3,0 +53,87216.7,0 +54,88882.1,0 +55,90547.5,0 +56,92212.9,0 +57,93878.3,0 +58,95543.7,0 +59,97209.1,0 +60,98874.5,0 +61,100539.9,0 +62,102205.3,0 +63,103870.7,0 +64,105536.1,0 +65,107201.5,0 +66,108866.9,0 +67,110532.3,0 +68,112197.7,0 +69,113863.1,0 +70,115528.5,0 +71,117193.9,0 +72,118859.3,0 +73,120524.7,0 +74,122190.1,0 +75,123855.5,0 +76,125520.9,0 +77,127186.3,0 +78,128851.7,0 +79,130517.1,0 +80,132182.5,0 +81,133847.9,0 +82,135513.3,0 +83,137178.7,0 +84,138844.1,0 +85,140509.5,0 +86,142174.9,0 +87,143840.3,0 +88,145505.7,0 +89,147171.1,0 +90,148836.5,0 +91,150501.9,0 +92,152167.3,0 +93,153832.7,0 +94,155498.1,0 +95,157163.5,0 +96,158828.9,0 +97,160494.3,0 +98,162159.7,0 +99,163825.1,0 +100,165490.5,0 +101,167155.9,0 +102,168821.3,0 +103,170486.7,0 +104,172152.1,0 +105,173817.5,0 +106,175482.9,0 +107,177148.3,0 +108,178813.7,0 +109,180479.1,0 +110,182144.5,0 +111,183809.9,0 +112,185475.3,0 +113,187140.7,0 +114,188806.1,0 +115,190471.5,0 +116,192136.9,0 +117,193802.3,0 +118,195467.7,0 +119,197133.1,0 +120,198798.5,0 +121,200463.9,0 +122,202129.3,0 +123,203794.7,0 +124,205460.1,0 +125,207125.5,0 +126,208790.9,0 +127,210456.3,0 +128,212121.7,0 +129,213787.1,0 +130,215452.5,0 +131,217117.9,0 +132,218783.3,0 +133,220448.7,0 +134,222114.1,0 +135,223779.5,0 +136,225444.9,0 +137,227110.3,0 +138,228775.7,0 +139,230441.1,0 +140,232106.5,0 +141,233771.9,0 +142,235437.3,0 +143,237102.7,0 +144,238768.1,0 +145,240433.5,0 +146,242098.9,0 +147,243764.3,0 +148,245429.7,0 +149,247095.1,0 +150,248760.5,0 +151,250425.9,0 +152,252091.3,0 +153,253756.7,0 +154,255422.1,0 +155,257087.5,0 +156,258752.9,0 +157,260418.3,0 +158,262083.7,0 +159,263749.1,0 +160,265414.5,0 +161,267079.9,0 +162,268745.3,0 +163,270410.7,0 +164,272076.1,0 +165,273741.5,0 +166,275406.9,0 +167,277072.3,0 +168,278737.7,0 +169,280403.1,0 +170,282068.5,0 +171,283733.9,0 +172,285399.3,0 +173,287064.7,0 +174,288730.1,0 +175,290395.5,0 +176,292060.9,0 +177,293726.3,0 +178,295391.7,0 +179,297057.1,0 +180,298722.5,0 +181,300387.9,0 +182,302053.3,0 +183,303718.7,0 +184,305384.1,0 +185,307049.5,0 +186,308714.9,0 +187,310380.3,0 +188,312045.7,0 +189,313711.1,0 +190,315376.5,0 +191,317041.9,0 +192,318707.3,0 +193,320372.7,0 +194,322038.1,0 +195,323703.5,0 +196,325368.9,0 +197,327034.3,0 +198,328699.7,0 +199,330365.1,0 +200,332030.5,0 +201,333695.9,0 +202,335361.3,0 +203,337026.7,0 +204,338692.1,0 +205,340357.5,0 +206,342022.9,0 +207,343688.3,0 +208,345353.7,0 +209,347019.1,0 +210,348684.5,0 +211,350349.9,0 +212,352015.3,0 +213,353680.7,0 +214,355346.1,0 +215,357011.5,0 +216,358676.9,0 +217,360342.3,0 +218,362007.7,0 +219,363673.1,0 +220,365338.5,0 +221,367003.9,0 +222,368669.3,0 +223,370334.7,0 +224,372000.1,0 +225,373665.5,0 +226,375330.9,0 +227,376996.3,0 +228,378661.7,0 +229,380327.1,0 +230,381992.5,0 +231,383657.9,0 +232,385323.3,0 +233,386988.7,0 +234,388654.1,0 +235,390319.5,0 +236,391984.9,0 +237,393650.3,0 +238,395315.7,0 +239,396981.1,0 +240,398646.5,0 +241,400311.9,0 +242,401977.3,0 +243,403642.7,0 +244,405308.1,0 +245,406973.5,0 +246,408638.9,0 +247,410304.3,0 +248,411969.7,0 +249,413635.1,0 +250,415300.5,0 +251,416965.9,0 +252,418631.3,0 +253,420296.7,0 +254,421962.1,0 +255,423627.5,0 +256,425292.9,0 +257,426958.3,0 +258,428623.7,0 +259,430289.1,0 +260,431954.5,0 +261,433619.9,0 +262,435285.3,0 +263,436950.7,0 +264,438616.1,0 +265,440281.5,0 +266,441946.9,0 +267,443612.3,0 +268,445277.7,0 +269,446943.1,0 +270,448608.5,0 +271,450273.9,0 +272,451939.3,0 +273,453604.7,0 +274,455270.1,0 +275,456935.5,0 +276,458600.9,0 +277,460266.3,0 +278,461931.7,0 +279,463597.1,0 +280,465262.5,0 +281,466927.9,0 +282,468593.3,0 +283,470258.7,0 +284,471924.1,0 +285,473589.5,0 +286,475254.9,0 +287,476920.3,0 +288,478585.7,0 +289,480251.1,0 +290,481916.5,0 +291,483581.9,0 +292,485247.3,0 +293,486912.7,0 +294,488578.1,0 +295,490243.5,0 +296,491908.9,0 +297,493574.3,0 +298,495239.7,0 +299,496905.1,0 +300,498570.5,0 +301,500235.9,0 +302,501901.3,0 +303,503566.7,0 +304,505232.1,0 +305,506897.5,0 +306,508562.9,0 +307,510228.3,0 +308,511893.7,0 +309,513559.1,0 +310,515224.5,0 +311,516889.9,0 +312,518555.3,0 +313,520220.7,0 +314,521886.1,0 +315,523551.5,0 +316,525216.9,0 +317,526882.3,0 +318,528547.7,0 +319,530213.1,0 +320,531878.5,0 +321,533543.9,0 +322,535209.3,0 +323,536874.7,0 +324,538540.1,0 +325,540205.5,0 +326,541870.9,0 +327,543536.3,0 +328,545201.7,0 +329,546867.1,0 +330,548532.5,0 +331,550197.9,0 +332,551863.3,0 +333,553528.7,0 +334,555194.1,0 +335,556859.5,0 +336,558524.9,0 +337,560190.3,0 +338,561855.7,0 +339,563521.1,0 +340,565186.5,0 +341,566851.9,0 +342,568517.3,0 +343,570182.7,0 +344,571848.1,0 +345,573513.5,0 +346,575178.9,0 +347,576844.3,0 +348,578509.7,0 +349,580175.1,0 +350,581840.5,0 +351,583505.9,0 +352,585171.3,0 +353,586836.7,0 +354,588502.1,0 +355,590167.5,0 +356,591832.9,0 +357,593498.3,0 +358,595163.7,0 +359,596829.1,0 +360,598494.5,0 +361,600159.9,0 +362,601825.3,0 +363,603490.7,0 +364,605156.1,0 +365,606821.5,0 +366,608486.9,0 +367,610152.3,0 +368,611817.7,0 +369,613483.1,0 +370,615148.5,0 +371,616813.9,0 +372,618479.3,0 +373,620144.7,0 +374,621810.1,0 +375,623475.5,0 +376,625140.9,0 +377,626806.3,0 +378,628471.7,0 +379,630137.1,0 +380,631802.5,0 +381,633467.9,0 +382,635133.3,0 +383,636798.7,0 +384,638464.1,0 +385,640129.5,0 +386,641794.9,0 +387,643460.3,0 +388,645125.7,0 +389,646791.1,0 +390,648456.5,0 +391,650121.9,0 +392,651787.3,0 +393,653452.7,0 +394,655118.1,0 +395,656783.5,0 +396,658448.9,0 +397,660114.3,0 +398,661779.7,0 +399,663445.1,0 +400,665110.5,0 +401,666775.9,0 +402,668441.3,0 +403,670106.7,0 +404,671772.1,0 +405,673437.5,0 +406,675102.9,0 +407,676768.3,0 +408,678433.7,0 +409,680099.1,0 +410,681764.5,0 +411,683429.9,0 +412,685095.3,0 +413,686760.7,0 +414,688426.1,0 +415,690091.5,0 +416,691756.9,0 +417,693422.3,0 +418,695087.7,0 +419,696753.1,0 +420,698418.5,0 +421,700083.9,0 +422,701749.3,0 +423,703414.7,0 +424,705080.1,0 +425,706745.5,0 +426,708410.9,0 +427,710076.3,0 +428,711741.7,0 +429,713407.1,0 +430,715072.5,0 +431,716737.9,0 +432,718403.3,0 +433,720068.7,0 +434,721734.1,0 +435,723399.5,0 +436,725064.9,0 +437,726730.3,0 +438,728395.7,0 +439,730061.1,0 +440,731726.5,0 +441,733391.9,0 +442,735057.3,0 +443,736722.7,0 +444,738388.1,0 +445,740053.5,0 +446,741718.9,0 +447,743384.3,0 +448,745049.7,0 +449,746715.1,0 +450,748380.5,0 +451,750045.9,0 +452,751711.3,0 +453,753376.7,0 +454,755042.1,0 +455,756707.5,0 +456,758372.9,0 +457,760038.3,0 +458,761703.7,0 +459,763369.1,0 +460,765034.5,0 +461,766699.9,0 +462,768365.3,0 +463,770030.7,0 +464,771696.1,0 +465,773361.5,0 +466,775026.9,0 +467,776692.3,0 +468,778357.7,0 +469,780023.1,0 +470,781688.5,0 +471,783353.9,0 +472,785019.3,0 +473,786684.7,0 +474,788350.1,0 +475,790015.5,0 +476,791680.9,0 +477,793346.3,0 +478,795011.7,0 +479,796677.1,0 +480,798342.5,0 +481,800007.9,0 +482,801673.3,0 +483,803338.7,0 +484,805004.1,0 +485,806669.5,0 +486,808334.9,0 +487,810000.3,0 +488,811665.7,0 +489,813331.1,0 +490,814996.5,0 +491,816661.9,0 +492,818327.3,0 +493,819992.7,0 +494,821658.1,0 +495,823323.5,0 +496,824988.9,0 +497,826654.3,0 +498,828319.7,0 +499,829985.1,0 +500,831650.5,0 +501,833315.9,0 +502,834981.3,0 +503,836646.7,0 +504,838312.1,0 +505,839977.5,0 +506,841642.9,0 +507,843308.3,0 +508,844973.7,0 +509,846639.1,0 +510,848304.5,0 +511,849969.9,0 +512,851635.3,0 +513,853300.7,0 +514,854966.1,0 +515,856631.5,0 +516,858296.9,0 +517,859962.3,0 +518,861627.7,0 +519,863293.1,0 +520,864958.5,0 +521,866623.9,0 +522,868289.3,0 +523,869954.7,0 +524,871620.1,0 +525,873285.5,0 +526,874950.9,0 +527,876616.3,0 +528,878281.7,0 +529,879947.1,0 +530,881612.5,0 +531,883277.9,0 +532,884943.3,0 +533,886608.7,0 +534,888274.1,0 +535,889939.5,0 +536,891604.9,0 +537,893270.3,0 +538,894935.7,0 +539,896601.1,0 +540,898266.5,0 +541,899931.9,0 +542,901597.3,0 +543,903262.7,0 +544,904928.1,0 +545,906593.5,0 +546,908258.9,0 +547,909924.3,0 +548,911589.7,0 +549,913255.1,0 +550,914920.5,0 +551,916585.9,0 +552,918251.3,0 +553,919916.7,0 +554,921582.1,0 +555,923247.5,0 +556,924912.9,0 +557,926578.3,0 +558,928243.7,0 +559,929909.1,0 +560,931574.5,0 +561,933239.9,0 +562,934905.3,0 +563,936570.7,0 +564,938236.1,0 +565,939901.5,0 +566,941566.9,0 +567,943232.3,0 +568,944897.7,0 +569,946563.1,0 +570,948228.5,0 +571,949893.9,0 +572,951559.3,0 +573,953224.7,0 +574,954890.1,0 +575,956555.5,0 +576,958220.9,0 +577,959886.3,0 +578,961551.7,0 +579,963217.1,0 +580,964882.5,0 +581,966547.9,0 +582,968213.3,0 +583,969878.7,0 +584,971544.1,0 +585,973209.5,0 +586,974874.9,0 +587,976540.3,0 +588,978205.7,0 +589,979871.1,0 +590,981536.5,0 +591,983201.9,0 +592,984867.3,0 +593,986532.7,0 +594,988198.1,0 +595,989863.5,0 +596,991528.9,0 +597,993194.3,0 +598,994859.7,0 +599,996525.1,0 +600,998190.5,0 +601,999855.9,0 +602,1001521.3,0 +603,1003186.7,0 +604,1004852.1,0 +605,1006517.5,0 +606,1008182.9,0 +607,1009848.3,0 +608,1011513.7,0 +609,1013179.1,0 +610,1014844.5,0 +611,1016509.9,0 +612,1018175.3,0 +613,1019840.7,0 +614,1021506.1,0 +615,1023171.5,0 +616,1024836.9,0 +617,1026502.3,0 +618,1028167.7,0 +619,1029833.1,0 +620,1031498.5,0 +621,1033163.9,0 +622,1034829.3,0 +623,1036494.7,0 +624,1038160.1,0 +625,1039825.5,0 +626,1041490.9,0 +627,1043156.3,0 +628,1044821.7,0 +629,1046487.1,0 +630,1048152.5,0 +631,1049817.9,0 +632,1051483.3,0 +633,1053148.7,0 +634,1054814.1,0 +635,1056479.5,0 +636,1058144.9,0 +637,1059810.3,0 +638,1061475.7,0 +639,1063141.1,0 +640,1064806.5,0 +641,1066471.9,0 +642,1068137.3,0 +643,1069802.7,0 +644,1071468.1,0 +645,1073133.5,0 +646,1074798.9,0 +647,1076464.3,0 +648,1078129.7,0 +649,1079795.1,0 +650,1081460.5,0 +651,1083125.9,0 +652,1084791.3,0 +653,1086456.7,0 +654,1088122.1,0 +655,1089787.5,0 +656,1091452.9,0 +657,1093118.3,0 +658,1094783.7,0 +659,1096449.1,0 +660,1098114.5,0 +661,1099779.9,0 +662,1101445.3,0 +663,1103110.7,0 +664,1104776.1,0 +665,1106441.5,0 +666,1108106.9,0 +667,1109772.3,0 +668,1111437.7,0 +669,1113103.1,0 +670,1114768.5,0 +671,1116433.9,0 +672,1118099.3,0 +673,1119764.7,0 +674,1121430.1,0 +675,1123095.5,0 +676,1124760.9,0 +677,1126426.3,0 +678,1128091.7,0 +679,1129757.1,0 +680,1131422.5,0 +681,1133087.9,0 +682,1134753.3,0 +683,1136418.7,0 +684,1138084.1,0 +685,1139749.5,0 +686,1141414.9,0 +687,1143080.3,0 +688,1144745.7,0 +689,1146411.1,0 +690,1148076.5,0 +691,1149741.9,0 +692,1151407.3,0 +693,1153072.7,0 +694,1154738.1,0 +695,1156403.5,0 +696,1158068.9,0 +697,1159734.3,0 +698,1161399.7,0 +699,1163065.1,0 +700,1164730.5,0 +701,1166395.9,0 +702,1168061.3,0 +703,1169726.7,0 +704,1171392.1,0 +705,1173057.5,0 +706,1174722.9,0 +707,1176388.3,0 +708,1178053.7,0 +709,1179719.1,0 +710,1181384.5,0 +711,1183049.9,0 +712,1184715.3,0 +713,1186380.7,0 +714,1188046.1,0 +715,1189711.5,0 +716,1191376.9,0 +717,1193042.3,0 +718,1194707.7,0 +719,1196373.1,0 +720,1198038.5,0 +721,1199703.9,0 +722,1201369.3,0 +723,1203034.7,0 +724,1204700.1,0 +725,1206365.5,0 +726,1208030.9,0 +727,1209696.3,0 +728,1211361.7,0 +729,1213027.1,0 +730,1214692.5,0 +731,1216357.9,0 +732,1218023.3,0 +733,1219688.7,0 +734,1221354.1,0 +735,1223019.5,0 +736,1224684.9,0 +737,1226350.3,0 +738,1228015.7,0 +739,1229681.1,0 +740,1231346.5,0 +741,1233011.9,0 +742,1234677.3,0 +743,1236342.7,0 +744,1238008.1,0 +745,1239673.5,0 +746,1241338.9,0 +747,1243004.3,0 +748,1244669.7,0 +749,1246335.1,0 +750,1248000.5,0 +751,1249665.9,0 +752,1251331.3,0 +753,1252996.7,0 +754,1254662.1,0 +755,1256327.5,0 +756,1257992.9,0 +757,1259658.3,0 +758,1261323.7,0 +759,1262989.1,0 +760,1264654.5,0 +761,1266319.9,0 +762,1267985.3,0 +763,1269650.7,0 +764,1271316.1,0 +765,1272981.5,0 +766,1274646.9,0 +767,1276312.3,0 +768,1277977.7,0 +769,1279643.1,0 +770,1281308.5,0 +771,1282973.9,0 +772,1284639.3,0 +773,1286304.7,0 +774,1287970.1,0 +775,1289635.5,0 +776,1291300.9,0 +777,1292966.3,0 +778,1294631.7,0 +779,1296297.1,0 +780,1297962.5,0 +781,1299627.9,0 +782,1301293.3,0 +783,1302958.7,0 +784,1304624.1,0 +785,1306289.5,0 +786,1307954.9,0 +787,1309620.3,0 +788,1311285.7,0 +789,1312951.1,0 +790,1314616.5,0 +791,1316281.9,0 +792,1317947.3,0 +793,1319612.7,0 +794,1321278.1,0 +795,1322943.5,0 +796,1324608.9,0 +797,1326274.3,0 +798,1327939.7,0 +799,1329605.1,0 +800,1331270.5,0 +801,1332935.9,0 +802,1334601.3,0 +803,1336266.7,0 +804,1337932.1,0 +805,1339597.5,0 +806,1341262.9,0 +807,1342928.3,0 +808,1344593.7,0 +809,1346259.1,0 +810,1347924.5,0 +811,1349589.9,0 +812,1351255.3,0 +813,1352920.7,0 +814,1354586.1,0 +815,1356251.5,0 +816,1357916.9,0 +817,1359582.3,0 +818,1361247.7,0 +819,1362913.1,0 +820,1364578.5,0 +821,1366243.9,0 +822,1367909.3,0 +823,1369574.7,0 +824,1371240.1,0 +825,1372905.5,0 +826,1374570.9,0 +827,1376236.3,0 +828,1377901.7,0 +829,1379567.1,0 +830,1381232.5,0 +831,1382897.9,0 +832,1384563.3,0 +833,1386228.7,0 +834,1387894.1,0 +835,1389559.5,0 +836,1391224.9,0 +837,1392890.3,0 +838,1394555.7,0 +839,1396221.1,0 +840,1397886.5,0 +841,1399551.9,0 +842,1401217.3,0 +843,1402882.7,0 +844,1404548.1,0 +845,1406213.5,0 +846,1407878.9,0 +847,1409544.3,0 +848,1411209.7,0 +849,1412875.1,0 +850,1414540.5,0 +851,1416205.9,0 +852,1417871.3,0 +853,1419536.7,0 +854,1421202.1,0 +855,1422867.5,0 +856,1424532.9,0 +857,1426198.3,0 +858,1427863.7,0 +859,1429529.1,0 +860,1431194.5,0 +861,1432859.9,0 +862,1434525.3,0 +863,1436190.7,0 +864,1437856.1,0 +865,1439521.5,0 +866,1441186.9,0 +867,1442852.3,0 +868,1444517.7,0 +869,1446183.1,0 +870,1447848.5,0 +871,1449513.9,0 +872,1451179.3,0 +873,1452844.7,0 +874,1454510.1,0 +875,1456175.5,0 +876,1457840.9,0 +877,1459506.3,0 +878,1461171.7,0 +879,1462837.1,0 +880,1464502.5,0 +881,1466167.9,0 +882,1467833.3,0 +883,1469498.7,0 +884,1471164.1,0 +885,1472829.5,0 +886,1474494.9,0 +887,1476160.3,0 +888,1477825.7,0 +889,1479491.1,0 +890,1481156.5,0 +891,1482821.9,0 +892,1484487.3,0 +893,1486152.7,0 +894,1487818.1,0 +895,1489483.5,0 +896,1491148.9,0 +897,1492814.3,0 +898,1494479.7,0 +899,1496145.1,0 +900,1497810.5,0 +901,1499475.9,0 +902,1501141.3,0 +903,1502806.7,0 +904,1504472.1,0 +905,1506137.5,0 +906,1507802.9,0 +907,1509468.3,0 +908,1511133.7,0 +909,1512799.1,0 +910,1514464.5,0 +911,1516129.9,0 +912,1517795.3,0 +913,1519460.7,0 +914,1521126.1,0 +915,1522791.5,0 +916,1524456.9,0 +917,1526122.3,0 +918,1527787.7,0 +919,1529453.1,0 +920,1531118.5,0 +921,1532783.9,0 +922,1534449.3,0 +923,1536114.7,0 +924,1537780.1,0 +925,1539445.5,0 +926,1541110.9,0 +927,1542776.3,0 +928,1544441.7,0 +929,1546107.1,0 +930,1547772.5,0 +931,1549437.9,0 +932,1551103.3,0 +933,1552768.7,0 +934,1554434.1,0 +935,1556099.5,0 +936,1557764.9,0 +937,1559430.3,0 +938,1561095.7,0 +939,1562761.1,0 +940,1564426.5,0 +941,1566091.9,0 +942,1567757.3,0 +943,1569422.7,0 +944,1571088.1,0 +945,1572753.5,0 +946,1574418.9,0 +947,1576084.3,0 +948,1577749.7,0 +949,1579415.1,0 +950,1581080.5,0 +951,1582745.9,0 +952,1584411.3,0 +953,1586076.7,0 +954,1587742.1,0 +955,1589407.5,0 +956,1591072.9,0 +957,1592738.3,0 +958,1594403.7,0 +959,1596069.1,0 +960,1597734.5,0 +961,1599399.9,0 +962,1601065.3,0 +963,1602730.7,0 +964,1604396.1,0 +965,1606061.5,0 +966,1607726.9,0 +967,1609392.3,0 +968,1611057.7,0 +969,1612723.1,0 +970,1614388.5,0 +971,1616053.9,0 +972,1617719.3,0 +973,1619384.7,0 +974,1621050.1,0 +975,1622715.5,0 +976,1624380.9,0 +977,1626046.3,0 +978,1627711.7,0 +979,1629377.1,0 +980,1631042.5,0 +981,1632707.9,0 +982,1634373.3,0 +983,1636038.7,0 +984,1637704.1,0 +985,1639369.5,0 +986,1641034.9,0 +987,1642700.3,0 +988,1644365.7,0 +989,1646031.1,0 +990,1647696.5,0 +991,1649361.9,0 +992,1651027.3,0 +993,1652692.7,0 +994,1654358.1,0 +995,1656023.5,0 +996,1657688.9,0 +997,1659354.3,0 +998,1661019.7,0 +999,1662685.1,0 +1000,1664350.5,0 +1001,1666015.9,0 +1002,1667681.3,0 +1003,1669346.7,0 +1004,1671012.1,0 +1005,1672677.5,0 +1006,1674342.9,0 +1007,1676008.3,0 +1008,1677673.7,0 +1009,1679339.1,0 +1010,1681004.5,0 +1011,1682669.9,0 +1012,1684335.3,0 +1013,1686000.7,0 +1014,1687666.1,0 +1015,1689331.5,0 +1016,1690996.9,0 +1017,1692662.3,0 +1018,1694327.7,0 +1019,1695993.1,0 +1020,1697658.5,0 +1021,1699323.9,0 +1022,1700989.3,0 +1023,1702654.7,0 +1024,1704320.1,0 +1025,1705985.5,0 +1026,1707650.9,0 +1027,1709316.3,0 +1028,1710981.7,0 +1029,1712647.1,0 +1030,1714312.5,0 +1031,1715977.9,0 +1032,1717643.3,0 +1033,1719308.7,0 +1034,1720974.1,0 +1035,1722639.5,0 +1036,1724304.9,0 +1037,1725970.3,0 +1038,1727635.7,0 +1039,1729301.1,0 +1040,1730966.5,0 +1041,1732631.9,0 +1042,1734297.3,0 +1043,1735962.7,0 +1044,1737628.1,0 +1045,1739293.5,0 +1046,1740958.9,0 +1047,1742624.3,0 +1048,1744289.7,0 +1049,1745955.1,0 +1050,1747620.5,0 +1051,1749285.9,0 +1052,1750951.3,0 +1053,1752616.7,0 +1054,1754282.1,0 +1055,1755947.5,0 +1056,1757612.9,0 +1057,1759278.3,0 +1058,1760943.7,0 +1059,1762609.1,0 +1060,1764274.5,0 +1061,1765939.9,0 +1062,1767605.3,0 +1063,1769270.7,0 +1064,1770936.1,0 +1065,1772601.5,0 +1066,1774266.9,0 +1067,1775932.3,0 +1068,1777597.7,0 +1069,1779263.1,0 +1070,1780928.5,0 +1071,1782593.9,0 +1072,1784259.3,0 +1073,1785924.7,0 +1074,1787590.1,0 +1075,1789255.5,0 +1076,1790920.9,0 +1077,1792586.3,0 +1078,1794251.7,0 +1079,1795917.1,0 +1080,1797582.5,0 +1081,1799247.9,0 +1082,1800913.3,0 +1083,1802578.7,0 +1084,1804244.1,0 +1085,1805909.5,0 +1086,1807574.9,0 +1087,1809240.3,0 +1088,1810905.7,0 +1089,1812571.1,0 +1090,1814236.5,0 +1091,1815901.9,0 +1092,1817567.3,0 +1093,1819232.7,0 +1094,1820898.1,0 +1095,1822563.5,0 +1096,1824228.9,0 +1097,1825894.3,0 +1098,1827559.7,0 +1099,1829225.1,0 +1100,1830890.5,0 +1101,1832555.9,0 +1102,1834221.3,0 +1103,1835886.7,0 +1104,1837552.1,0 +1105,1839217.5,0 +1106,1840882.9,0 +1107,1842548.3,0 +1108,1844213.7,0 +1109,1845879.1,0 +1110,1847544.5,0 +1111,1849209.9,0 +1112,1850875.3,0 +1113,1852540.7,0 +1114,1854206.1,0 +1115,1855871.5,0 +1116,1857536.9,0 +1117,1859202.3,0 +1118,1860867.7,0 +1119,1862533.1,0 +1120,1864198.5,0 +1121,1865863.9,0 +1122,1867529.3,0 +1123,1869194.7,0 +1124,1870860.1,0 +1125,1872525.5,0 +1126,1874190.9,0 +1127,1875856.3,0 +1128,1877521.7,0 +1129,1879187.1,0 +1130,1880852.5,0 +1131,1882517.9,0 +1132,1884183.3,0 +1133,1885848.7,0 +1134,1887514.1,0 +1135,1889179.5,0 +1136,1890844.9,0 +1137,1892510.3,0 +1138,1894175.7,0 +1139,1895841.1,0 +1140,1897506.5,0 +1141,1899171.9,0 +1142,1900837.3,0 +1143,1902502.7,0 +1144,1904168.1,0 +1145,1905833.5,0 +1146,1907498.9,0 +1147,1909164.3,0 +1148,1910829.7,0 +1149,1912495.1,0 +1150,1914160.5,0 +1151,1915825.9,0 +1152,1917491.3,0 +1153,1919156.7,0 +1154,1920822.1,0 +1155,1922487.5,0 +1156,1924152.9,0 +1157,1925818.3,0 +1158,1927483.7,0 +1159,1929149.1,0 +1160,1930814.5,0 +1161,1932479.9,0 +1162,1934145.3,0 +1163,1935810.7,0 +1164,1937476.1,0 +1165,1939141.5,0 +1166,1940806.9,0 +1167,1942472.3,0 +1168,1944137.7,0 +1169,1945803.1,0 +1170,1947468.5,0 +1171,1949133.9,0 +1172,1950799.3,0 +1173,1952464.7,0 +1174,1954130.1,0 +1175,1955795.5,0 +1176,1957460.9,0 +1177,1959126.3,0 +1178,1960791.7,0 +1179,1962457.1,0 +1180,1964122.5,0 +1181,1965787.9,0 +1182,1967453.3,0 +1183,1969118.7,0 +1184,1970784.1,0 +1185,1972449.5,0 +1186,1974114.9,0 +1187,1975780.3,0 +1188,1977445.7,0 +1189,1979111.1,0 +1190,1980776.5,0 +1191,1982441.9,0 +1192,1984107.3,0 +1193,1985772.7,0 +1194,1987438.1,0 +1195,1989103.5,0 +1196,1990768.9,0 +1197,1992434.3,0 +1198,1994099.7,0 +1199,1995765.1,0 +1200,1997430.5,0 +1201,1999095.9,0 +1202,2000761.3,0 +1203,2002426.7,0 +1204,2004092.1,0 +1205,2005757.5,0 +1206,2007422.9,0 +1207,2009088.3,0 +1208,2010753.7,0 +1209,2012419.1,0 +1210,2014084.5,0 +1211,2015749.9,0 +1212,2017415.3,0 +1213,2019080.7,0 +1214,2020746.1,0 +1215,2022411.5,0 +1216,2024076.9,0 +1217,2025742.3,0 +1218,2027407.7,0 +1219,2029073.1,0 +1220,2030738.5,0 +1221,2032403.9,0 +1222,2034069.3,0 +1223,2035734.7,0 +1224,2037400.1,0 +1225,2039065.5,0 +1226,2040730.9,0 +1227,2042396.3,0 +1228,2044061.7,0 +1229,2045727.1,0 +1230,2047392.5,0 +1231,2049057.9,0 +1232,2050723.3,0 +1233,2052388.7,0 +1234,2054054.1,0 +1235,2055719.5,0 +1236,2057384.9,0 +1237,2059050.3,0 +1238,2060715.7,0 +1239,2062381.1,0 +1240,2064046.5,0 +1241,2065711.9,0 +1242,2067377.3,0 +1243,2069042.7,0 +1244,2070708.1,0 +1245,2072373.5,0 +1246,2074038.9,0 +1247,2075704.3,0 +1248,2077369.7,0 +1249,2079035.1,0 +1250,2080700.5,0 +1251,2082365.9,0 +1252,2084031.3,0 +1253,2085696.7,0 +1254,2087362.1,0 +1255,2089027.5,0 +1256,2090692.9,0 +1257,2092358.3,0 +1258,2094023.7,0 +1259,2095689.1,0 +1260,2097354.5,0 +1261,2099019.9,0 +1262,2100685.3,0 +1263,2102350.7,0 +1264,2104016.1,0 +1265,2105681.5,0 +1266,2107346.9,0 +1267,2109012.3,0 +1268,2110677.7,0 +1269,2112343.1,0 +1270,2114008.5,0 +1271,2115673.9,0 +1272,2117339.3,0 +1273,2119004.7,0 +1274,2120670.1,0 +1275,2122335.5,0 +1276,2124000.9,0 +1277,2125666.3,0 +1278,2127331.7,0 +1279,2128997.1,0 +1280,2130662.5,0 +1281,2132327.9,0 +1282,2133993.3,0 +1283,2135658.7,0 +1284,2137324.1,0 +1285,2138989.5,0 +1286,2140654.9,0 +1287,2142320.3,0 +1288,2143985.7,0 +1289,2145651.1,0 +1290,2147316.5,0 +1291,2148981.9,0 +1292,2150647.3,0 +1293,2152312.7,0 +1294,2153978.1,0 +1295,2155643.5,0 +1296,2157308.9,0 +1297,2158974.3,0 +1298,2160639.7,0 +1299,2162305.1,0 +1300,2163970.5,0 +1301,2165635.9,0 +1302,2167301.3,0 +1303,2168966.7,0 +1304,2170632.1,0 +1305,2172297.5,0 +1306,2173962.9,0 +1307,2175628.3,0 +1308,2177293.7,0 +1309,2178959.1,0 +1310,2180624.5,0 +1311,2182289.9,0 +1312,2183955.3,0 +1313,2185620.7,0 +1314,2187286.1,0 +1315,2188951.5,0 +1316,2190616.9,0 +1317,2192282.3,0 +1318,2193947.7,0 +1319,2195613.1,0 +1320,2197278.5,0 +1321,2198943.9,0 +1322,2200609.3,0 +1323,2202274.7,0 +1324,2203940.1,0 +1325,2205605.5,0 +1326,2207270.9,0 +1327,2208936.3,0 +1328,2210601.7,0 +1329,2212267.1,0 +1330,2213932.5,0 +1331,2215597.9,0 +1332,2217263.3,0 +1333,2218928.7,0 +1334,2220594.1,0 +1335,2222259.5,0 +1336,2223924.9,0 +1337,2225590.3,0 +1338,2227255.7,0 +1339,2228921.1,0 +1340,2230586.5,0 +1341,2232251.9,0 +1342,2233917.3,0 +1343,2235582.7,0 +1344,2237248.1,0 +1345,2238913.5,0 +1346,2240578.9,0 +1347,2242244.3,0 +1348,2243909.7,0 +1349,2245575.1,0 +1350,2247240.5,0 +1351,2248905.9,0 +1352,2250571.3,0 +1353,2252236.7,0 +1354,2253902.1,0 +1355,2255567.5,0 +1356,2257232.9,0 +1357,2258898.3,0 +1358,2260563.7,0 +1359,2262229.1,0 +1360,2263894.5,0 +1361,2265559.9,0 +1362,2267225.3,0 +1363,2268890.7,0 +1364,2270556.1,0 +1365,2272221.5,0 +1366,2273886.9,0 +1367,2275552.3,0 +1368,2277217.7,0 +1369,2278883.1,0 +1370,2280548.5,0 +1371,2282213.9,0 +1372,2283879.3,0 +1373,2285544.7,0 +1374,2287210.1,0 +1375,2288875.5,0 +1376,2290540.9,0 +1377,2292206.3,0 +1378,2293871.7,0 +1379,2295537.1,0 +1380,2297202.5,0 +1381,2298867.9,0 +1382,2300533.3,0 +1383,2302198.7,0 +1384,2303864.1,0 +1385,2305529.5,0 +1386,2307194.9,0 +1387,2308860.3,0 +1388,2310525.7,0 +1389,2312191.1,0 +1390,2313856.5,0 +1391,2315521.9,0 +1392,2317187.3,0 +1393,2318852.7,0 +1394,2320518.1,0 +1395,2322183.5,0 +1396,2323848.9,0 +1397,2325514.3,0 +1398,2327179.7,0 +1399,2328845.1,0 +1400,2330510.5,0 +1401,2332175.9,0 +1402,2333841.3,0 +1403,2335506.7,0 +1404,2337172.1,0 +1405,2338837.5,0 +1406,2340502.9,0 +1407,2342168.3,0 +1408,2343833.7,0 +1409,2345499.1,0 +1410,2347164.5,0 +1411,2348829.9,0 +1412,2350495.3,0 +1413,2352160.7,0 +1414,2353826.1,0 +1415,2355491.5,0 +1416,2357156.9,1 +1417,2358822.3,1 +1418,2360487.7,1 +1419,2362153.1,1 +1420,2363818.5,1 +1421,2365483.9,1 +1422,2367149.3,1 +1423,2368814.7,1 +1424,2370480.1,1 +1425,2372145.5,1 +1426,2373810.9,1 +1427,2375476.3,1 +1428,2377141.7,1 +1429,2378807.1,1 +1430,2380472.5,1 +1431,2382137.9,1 +1432,2383803.3,1 +1433,2385468.7,1 +1434,2387134.1,1 +1435,2388799.5,0 +1436,2390464.9,0 +1437,2392130.3,0 +1438,2393795.7,0 +1439,2395461.1,0