From 83c76cf02a181e7770f78a787bc466bf62faa968 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 09:09:44 -0600 Subject: [PATCH 01/12] higher level changes from autoARMA branch --- dependencies.xml | 1 + ravenframework/Models/ROM.py | 3 + .../SupervisedLearning/ROMCollection.py | 17 +++++- .../SupervisedLearning/SupervisedLearning.py | 38 +++++++++++- .../SupervisedLearning/SyntheticHistory.py | 61 ++++++++++++++++--- ravenframework/TSA/TSAUser.py | 36 ++++++++++- ravenframework/TSA/TimeSeriesAnalyzer.py | 47 +++++++++++++- ravenframework/unSupervisedLearning.py | 4 +- 8 files changed, 189 insertions(+), 18 deletions(-) diff --git a/dependencies.xml b/dependencies.xml index 6324050ae5..d12e2e978a 100644 --- a/dependencies.xml +++ b/dependencies.xml @@ -73,6 +73,7 @@ Note all install methods after "main" take + 1.2 0.9 diff --git a/ravenframework/Models/ROM.py b/ravenframework/Models/ROM.py index 18d9ee7672..0aea029425 100644 --- a/ravenframework/Models/ROM.py +++ b/ravenframework/Models/ROM.py @@ -237,8 +237,11 @@ def _readMoreXML(self,xmlNode): segment = xmlNode.find('Segment') romXml = copy.deepcopy(xmlNode) romXml.remove(segment) + # depending on segType, this ROM *will* have clusters and we will need this fact later + self._interfaceROM.setClusterability(segType in ['cluster', 'interpolate']) else: romXml = xmlNode + self._interfaceROM.setClusterability(False) # just making sure it's False otherwise self._interfaceROM._readMoreXML(romXml) if self.segment: diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index 802c3a97f0..4080652de4 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -636,7 +636,7 @@ def _writeSegmentsRealization(self, writeTo): """ Writes pointwise data about segmentation to a realization. @ In, writeTo, DataObject, data structure into which data should be written - @ Out, None + @ Out, rlz, dict, realization data structure where each entry is an np.ndarray """ # realization to add eventually @@ -956,12 +956,23 @@ def writePointwiseData(self, writeTo): featureNames = sorted(list(self._clusterInfo['features']['unscaled'].keys())) for scaling in ['unscaled', 'scaled']: for name in featureNames: - varName = 'ClusterFeature|{}|{}'.format(name, scaling) + varName = f'ClusterFeature|{name}|{scaling}' writeTo.addVariable(varName, np.array([]), classify='meta', indices=['segment_number']) rlz[varName] = np.asarray(self._clusterInfo['features'][scaling][name]) varName = 'ClusterLabels' writeTo.addVariable(varName, np.array([]), classify='meta', indices=['segment_number']) rlz[varName] = np.asarray(labels) + # below, we loop through all segment ROMs to find feature data to write to data object + segments = self.getSegmentRoms(full=True) + for i,rom in enumerate(segments): + romRlz = rom.getSegmentPointwiseData() + for feature, featureVal in romRlz.items(): + varName = f'Feature|{feature}' + if i==0: + writeTo.addVariable(varName, np.array([]), classify='meta', indices=['segment_number']) + rlz[varName] = featureVal + else: + rlz[varName] = np.r_[rlz[varName],featureVal] writeTo.addRealization(rlz) @@ -981,7 +992,7 @@ def writeXML(self, writeTo, targets=None, skip=None): labels = self._clusterInfo['labels'] for i, repRom in enumerate(self._roms): # find associated node - modify = xmlUtils.findPath(main, 'SegmentROM[@segment={}]'.format(i)) + modify = xmlUtils.findPath(main, f'SegmentROM[@segment={i}]') # make changes to reflect being a cluster modify.tag = 'ClusterROM' modify.attrib['cluster'] = modify.attrib.pop('segment') diff --git a/ravenframework/SupervisedLearning/SupervisedLearning.py b/ravenframework/SupervisedLearning/SupervisedLearning.py index f6de0e260b..912b99d2be 100644 --- a/ravenframework/SupervisedLearning/SupervisedLearning.py +++ b/ravenframework/SupervisedLearning/SupervisedLearning.py @@ -204,6 +204,8 @@ def __init__(self): # After the computation, the importances are set as attribute of the self.model # variable and called 'feature_importances_' and accessable as self.model.feature_importances_ self.computeImportances = False + # distinction between existing param `isClusterable` and whether it does, in fact, have clusters + self._hasClusters = False # can only be true if `isClusterable`==True def __getstate__(self): """ @@ -658,6 +660,17 @@ def writePointwiseData(self, *args): # by default, nothing to write! self.raiseAMessage('Writing ROM "{}", but no pointwise data found. Moving on ...') + def getSegmentPointwiseData(self): + """ + Allows the SVE to accumulate data arrays to later add to a DataObject + Overload in subclasses. + @ In, None + @ Out, segmentData, dict + """ + # by default, nothing to write! + self.raiseAMessage('Writing ROM, but no pointwise data found. Moving on ...') + return {} + def writeXML(self, writeTo, targets=None, skip=None): """ Allows the SVE to put whatever it wants into an XML to print to file. @@ -701,13 +714,36 @@ def setAdditionalParams(self, params): ### ROM Clustering (see ROMCollection.py) ### def isClusterable(self): """ - Allows ROM to declare whether it has methods for clustring. Default is no. + Allows ROM to declare whether it has methods for clustering. Default is no. @ In, None @ Out, isClusterable, bool, if True then has clustering mechanics. """ # only true if overridden. return False + def setClusterability(self, willHaveClusters: bool): + """ + Sets protected class member which tells ROM whether there will be clustering + @ In, willHaveClusters. bool, will the ROM have clustering in this run? + @ Out, None + """ + assert isinstance(willHaveClusters, bool) + if not self.isClusterable(): + # if ROM can't cluster in the first place... default to False + if willHaveClusters: + self.raiseAWarning("Clustering not allowed in this ROM, defaulting `hasClusters` to False") + self._hasClusters = False + else: + self._hasClusters = willHaveClusters + + def hasClusters(self): + """ + Allows ROM to declare if is *has* clusters, not just if it is capable. Default is no. + @ In, None + @ Out, hasClusters, bool, if True then contains clusters + """ + return self._hasClusters + def checkRequestedClusterFeatures(self, request): """ Takes the user-requested features (sometimes "all") and interprets them for this ROM. diff --git a/ravenframework/SupervisedLearning/SyntheticHistory.py b/ravenframework/SupervisedLearning/SyntheticHistory.py index 7dae3f3eb0..083fa3ffe8 100644 --- a/ravenframework/SupervisedLearning/SyntheticHistory.py +++ b/ravenframework/SupervisedLearning/SyntheticHistory.py @@ -78,7 +78,7 @@ def _handleInput(self, paramInput): @ Out, None """ SupervisedLearning._handleInput(self, paramInput) - self.readTSAInput(paramInput) + self.readTSAInput(paramInput, self.hasClusters()) if len(self._tsaAlgorithms)==0: self.raiseAWarning("No Segmenting algorithms were requested.") @@ -157,6 +157,21 @@ def writePointwiseData(self, writeTo): """ pass # TODO + def getSegmentPointwiseData(self): + """ + Allows the SVE to accumulate data arrays to later add to a DataObject + Overload in subclasses. + @ In, None + @ Out, segmentData, dict + """ + segmentNonFeatures = self.getTSApointwiseData() + formattedNonFeatures = {} + for algo,algoInfo in segmentNonFeatures.items(): + for target,targetInfo in algoInfo.items(): + for k,val in targetInfo.items(): + formattedNonFeatures[f'{target}|{algo}|{k}'] = val + return formattedNonFeatures + def writeXML(self, writeTo, targets=None, skip=None): """ Allows the SVE to put whatever it wants into an XML to print to file. @@ -212,16 +227,18 @@ def checkRequestedClusterFeatures(self, request): '\n '.join(errMsg)) return request - def _getClusterableFeatures(self): + def _getClusterableFeatures(self, trainGlobal=False): """ Provides a list of clusterable features. For this ROM, these are as "TSA_algorith|feature" such as "fourier|amplitude" @ In, None + @ In, trainGlobal, bool, if True then this method uses the globally trained algorithms @ Out, features, dict(list(str)), clusterable features by algorithm """ features = {} # check: is it possible tsaAlgorithms isn't populated by now? - for algo in self._tsaAlgorithms: + algorithms = self._tsaGlobalAlgorithms if trainGlobal else self._tsaAlgorithms + for algo in algorithms: if algo.canCharacterize(): features[algo.name] = algo._features else: @@ -320,8 +337,17 @@ def parametrizeGlobalRomFeatures(self, featureDict): @ In, featureDict, dict, dictionary of features to parametrize @ Out, params, dict, dictionary of collected parametrized features """ - # NOTE: only used during interpolation for global features! returning empty dict... + # NOTE: this should match the clustered features template. + featureTemplate = '{target}|{metric}|{id}' # TODO this kind of has to be the format currently params = {} + requests = self._getClusterableFeatures(trainGlobal=True) + + for algo in self._tsaGlobalAlgorithms: + if algo.name not in requests or not algo.canCharacterize(): + continue + algoReq = requests[algo.name] if requests is not None else None + algoFeatures = algo.getClusteringValues(featureTemplate, algoReq, self._tsaTrainedParams[algo]) + params.update(algoFeatures) return params def setGlobalRomFeatures(self, params, pivotValues): @@ -332,9 +358,30 @@ def setGlobalRomFeatures(self, params, pivotValues): @ In, pivotValues, np.array, values of time parameter @ Out, results, dict, global ROM feature set """ - # NOTE: only used during interpolation for global features! returning empty dict... - results = {} - return results + byAlgo = collections.defaultdict(list) + for feature, values in params.items(): + target, algoName, ident = feature.split('|', maxsplit=2) + byAlgo[algoName].append((target, ident, values)) + for algo in self._tsaAlgorithms: + settings = byAlgo.get(algo.name, None) + if settings: + # there might be multiple instances of same algo w/ different targets, need to filter by targets + # filtered_settings = [feat for feat in settings if feat[0] in self._tsaTrainedParams[algo]] + params = algo.setClusteringValues(settings, self._tsaTrainedParams[algo]) + self._tsaTrainedParams[algo] = params + return self._tsaTrainedParams + + def finalizeLocalRomSegmentEvaluation(self, settings, evaluation, globalPicker, localPicker=None): + """ + Allows global settings in "settings" to affect a LOCAL evaluation of a LOCAL ROM + Note this is called on the LOCAL subsegment ROM and not the GLOBAL templateROM. + @ In, settings, dict, as from getGlobalRomSegmentSettings + @ In, evaluation, dict, preliminary evaluation from the local segment ROM as {target: [values]} + @ In, globalPicker, slice, indexer for data range of this segment FROM GLOBAL SIGNAL + @ In, localPicker, slice, optional, indexer for part of signal that should be adjusted IN LOCAL SIGNAL + @ Out, evaluation, dict, {target: np.ndarray} adjusted global evaluation + """ + return evaluation ### ESSENTIALLY UNUSED ### def _localNormalizeData(self,values,names,feat): diff --git a/ravenframework/TSA/TSAUser.py b/ravenframework/TSA/TSAUser.py index f109b18825..f9867a915d 100644 --- a/ravenframework/TSA/TSAUser.py +++ b/ravenframework/TSA/TSAUser.py @@ -18,6 +18,7 @@ Contains a utility base class for accessing commonly-used TSA functions. """ import numpy as np +import copy from inspect import isabstract from ..utils import xmlUtils, InputData, InputTypes @@ -72,10 +73,11 @@ def __init__(self): self._tsaTargets = None # cached list of targets self.target = None - def readTSAInput(self, spec): + def readTSAInput(self, spec, hasClusters=None): """ Read in TSA algorithms @ In, spec, InputData.parameterInput, input specs filled with user entries + @ In, hasClusters, bool, is this a ROM with clustered segments? @ Out, None """ if self.pivotParameterID is None: # might be handled by parent @@ -83,7 +85,7 @@ def readTSAInput(self, spec): for sub in spec.subparts: if sub.name in factory.knownTypes(): algo = factory.returnInstance(sub.name) - self._tsaAlgoSettings[algo] = algo.handleInput(sub) + self._tsaAlgoSettings[algo] = algo.handleInput(sub,hasClusters) if self._tsaAlgoSettings[algo]['global']: self._tsaGlobalAlgorithms.append(algo) else: @@ -209,7 +211,8 @@ def trainTSASequential(self, targetVals, trainGlobal=False): if np.isnan(signal).any() and not algo.canAcceptMissingValues(): raise ValueError(f'Missing values (NaN) found in input to {algo.name}, ' f'but {algo.name} cannot accept missing values!') - params = algo.fit(signal, pivots, targets, settings) + trainedParams = copy.deepcopy(self._tsaTrainedParams) if algo.needsPriorAlgoFeatures() else None + params = algo.fit(signal, pivots, targets, settings, trainedParams=trainedParams) # store characteristics self._tsaTrainedParams[algo] = params # obtain residual; the part of the signal not characterized by this algo @@ -294,3 +297,30 @@ def writeTSAtoXML(self, xml): algoNode = xmlUtils.newNode(algo.name) algo.writeXML(algoNode, self._tsaTrainedParams[algo]) root.append(algoNode) + + def getTSApointwiseData(self): + """ + Allows the SVE to accumulate data arrays to later add to a DataObject + Overload in subclasses. + @ In, None, + @ Out, segmentData, dict + """ + # + segmentNonFeatures = {} + for algo in self._tsaAlgorithms: + if algo not in self._tsaTrainedParams: + continue + segmentNonFeatures[algo.name] = algo.getNonClusterFeatures(self._tsaTrainedParams[algo]) + return segmentNonFeatures + + def writeTSAPointwiseData(self, writeTo): + """ + Writes pointwise data about segmentation to a realization. + @ In, writeTo, DataObject, data structure into which data should be written + @ Out, rlz, dict, realization data structure where each entry is an np.ndarray + """ + for algo in self._tsaAlgorithms: + if algo not in self._tsaTrainedParams: + continue + algo_rlz = {} + return algo_rlz diff --git a/ravenframework/TSA/TimeSeriesAnalyzer.py b/ravenframework/TSA/TimeSeriesAnalyzer.py index 794e8fa697..ab6b44a3f8 100644 --- a/ravenframework/TSA/TimeSeriesAnalyzer.py +++ b/ravenframework/TSA/TimeSeriesAnalyzer.py @@ -30,6 +30,8 @@ class TimeSeriesAnalyzer(utils.metaclass_insert(abc.ABCMeta, object)): # class attribute ## defines if missing values are accepted by the characterization algorithm _acceptsMissingValues = False + ## defines if usage of algorithm requires output from a prior algorithm + _needsPriorAlgoFeatures = False @classmethod def getInputSpecification(cls): @@ -82,6 +84,15 @@ def canTransform(cls): """ return issubclass(cls, TimeSeriesTransformer) + @classmethod + def needsPriorAlgoFeatures(cls): + """ + Determines if the algorithm requires trained params from prior algorithms. + @ In, None + @ Out, needsPriorAlgoFeatures, bool, True if this algorithm requires prior trained params + """ + return cls._needsPriorAlgoFeatures + ### INHERITED METHODS ### def __init__(self, *args, **kwargs): """ @@ -93,7 +104,7 @@ def __init__(self, *args, **kwargs): self.name = self.__class__.__name__ # the name the class shall be known by during its RAVEN life @abc.abstractmethod - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Fits the algorithm/model using the provided time series ("signal") using methods specific to the algorithm. @@ -101,14 +112,16 @@ def fit(self, signal, pivot, targets, settings): @ In, pivot, np.array, time-like parameter @ In, targets, list(str), names of targets @ In, settings, dict, additional settings specific to algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characterization of signal; structure as: params[target variable][characteristic] = value """ - def handleInput(self, spec): + def handleInput(self, spec, enforce_global=False): """ Reads user inputs into this object. @ In, spec, InputData.InputParams, input specifications + @ In, enforce_global, bool, @ Out, settings, dict, initialization settings for this algorithm """ settings = {} @@ -150,6 +163,14 @@ def writeXML(self, writeTo, params): @ Out, None """ + @abc.abstractmethod + def getNonClusterFeatures(self, params): + """ + Allows the engine to put whatever it wants into an XML to print to file. + @ In, params, dict, parameters from training this ROM + @ Out, None + """ + class TimeSeriesGenerator(TimeSeriesAnalyzer): """ @@ -192,6 +213,13 @@ def generate(self, params, pivot, settings): @ Out, synthetic, np.array(float), synthetic signal """ + def getNonClusterFeatures(self, params): + """ + Allows the engine to put whatever it wants into an XML to print to file. + @ In, params, dict, parameters from training this ROM + @ Out, None + """ + return {} class TimeSeriesCharacterizer(TimeSeriesAnalyzer): """ @@ -265,6 +293,13 @@ def setClusteringValues(self, fromCluster, params): params[target][identifier] = value return params + def getNonClusterFeatures(self, params): + """ + Allows the engine to put whatever it wants into an XML to print to file. + @ In, params, dict, parameters from training this ROM + @ Out, None + """ + return {} class TimeSeriesTransformer(TimeSeriesAnalyzer): """ @@ -306,3 +341,11 @@ def getComposite(self, initial, params, pivot, settings): @ In, settings, dict, additional settings specific to algorithm @ Out, composite, np.array, resulting composite signal """ + + def getNonClusterFeatures(self, params): + """ + Allows the engine to put whatever it wants into an XML to print to file. + @ In, params, dict, parameters from training this ROM + @ Out, None + """ + return {} diff --git a/ravenframework/unSupervisedLearning.py b/ravenframework/unSupervisedLearning.py index fdffb186e7..0b2ad75bcf 100644 --- a/ravenframework/unSupervisedLearning.py +++ b/ravenframework/unSupervisedLearning.py @@ -189,7 +189,7 @@ def train(self, tdict, metric=None): ## Check if a label feature is provided by the user and in the training data if self.labelFeature in tdict: - self.labelValues = tidct[self.labelFeature] + self.labelValues = tdict[self.labelFeature] resp = self.checkArrayConsistency(self.labelValues) if not resp[0]: self.raiseAnError(IOError, 'In training set for ground truth labels ' + self.labelFeature + ':' + resp[1]) @@ -857,7 +857,7 @@ def train(self, tdict): ## Check if a label feature is provided by the user and in the training data if self.labelFeature in names: - self.labelValues = tidct[self.labelFeature] + self.labelValues = tdict[self.labelFeature] resp = self.checkArrayConsistency(self.labelValues,[self.numberOfSample, self.numberOfHistoryStep]) if not resp[0]: self.raiseAnError(IOError, 'In training set for ground truth labels ' + self.labelFeature + ':' + resp[1]) From bfda092d90ad120d28e54b2f0ab70d00ff27e390 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 11:22:32 -0600 Subject: [PATCH 02/12] renaming a method for clarity --- ravenframework/Models/ROM.py | 4 ++-- ravenframework/SupervisedLearning/SupervisedLearning.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ravenframework/Models/ROM.py b/ravenframework/Models/ROM.py index 0aea029425..a10f422961 100644 --- a/ravenframework/Models/ROM.py +++ b/ravenframework/Models/ROM.py @@ -238,10 +238,10 @@ def _readMoreXML(self,xmlNode): romXml = copy.deepcopy(xmlNode) romXml.remove(segment) # depending on segType, this ROM *will* have clusters and we will need this fact later - self._interfaceROM.setClusterability(segType in ['cluster', 'interpolate']) + self._interfaceROM.overrideHasClusters(segType in ['cluster', 'interpolate']) else: romXml = xmlNode - self._interfaceROM.setClusterability(False) # just making sure it's False otherwise + self._interfaceROM.overrideHasClusters(False) # just making sure it's False otherwise self._interfaceROM._readMoreXML(romXml) if self.segment: diff --git a/ravenframework/SupervisedLearning/SupervisedLearning.py b/ravenframework/SupervisedLearning/SupervisedLearning.py index 912b99d2be..2f290e1775 100644 --- a/ravenframework/SupervisedLearning/SupervisedLearning.py +++ b/ravenframework/SupervisedLearning/SupervisedLearning.py @@ -721,7 +721,7 @@ def isClusterable(self): # only true if overridden. return False - def setClusterability(self, willHaveClusters: bool): + def overrideHasClusters(self, willHaveClusters: bool): """ Sets protected class member which tells ROM whether there will be clustering @ In, willHaveClusters. bool, will the ROM have clustering in this run? From e58f4c6b7cdcf62aa7f5367a3cb02f85695816b8 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 11:24:33 -0600 Subject: [PATCH 03/12] cleaner handling of strictly global algos (different from previous branch) --- ravenframework/TSA/TSAUser.py | 22 ++++++++++++++++++++-- ravenframework/TSA/TimeSeriesAnalyzer.py | 15 +++++++++++++-- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/ravenframework/TSA/TSAUser.py b/ravenframework/TSA/TSAUser.py index f9867a915d..459ae7ab47 100644 --- a/ravenframework/TSA/TSAUser.py +++ b/ravenframework/TSA/TSAUser.py @@ -73,7 +73,7 @@ def __init__(self): self._tsaTargets = None # cached list of targets self.target = None - def readTSAInput(self, spec, hasClusters=None): + def readTSAInput(self, spec, hasClusters=False): """ Read in TSA algorithms @ In, spec, InputData.parameterInput, input specs filled with user entries @@ -85,7 +85,9 @@ def readTSAInput(self, spec, hasClusters=None): for sub in spec.subparts: if sub.name in factory.knownTypes(): algo = factory.returnInstance(sub.name) - self._tsaAlgoSettings[algo] = algo.handleInput(sub,hasClusters) + if not algo.canBeAppliedPerCluster() and hasClusters: + self.resolveGlobalvsCluster(sub) + self._tsaAlgoSettings[algo] = algo.handleInput(sub) if self._tsaAlgoSettings[algo]['global']: self._tsaGlobalAlgorithms.append(algo) else: @@ -102,6 +104,22 @@ def readTSAInput(self, spec, hasClusters=None): # NOTE this assumes that every TSAUser is also an InputUser! raise IOError('TSA: The pivotParameter must be included in the target space.') + def resolveGlobalvsCluster(self, spec): + """ + Method to resolve scenario when algorithm can not be applied per cluster and we're dealing + with a clustered ROM. If user does not specify it as a `global` algorithm, prints a warning. + If user specifically requests `global` as False, it raises an error. + @ In, spec, InputData.InputParams, input specifications + @ Out, None + """ + requestedGlobal = spec.parameterValues.get('global', None) + if requestedGlobal is None: + print(f"{spec.name} algorithm will be applied to the global signal.") + elif requestedGlobal is False: + msg = f"{spec.name} algorithm must be used as a global TSA algorithm when using a " + msg += "clustered TSA ROM. The `global` parameter must be set to True in the input." + raise IOError(msg) + def canCharacterize(self): """ Checks if any of the algorithms are characterizers diff --git a/ravenframework/TSA/TimeSeriesAnalyzer.py b/ravenframework/TSA/TimeSeriesAnalyzer.py index ab6b44a3f8..3a94630b1a 100644 --- a/ravenframework/TSA/TimeSeriesAnalyzer.py +++ b/ravenframework/TSA/TimeSeriesAnalyzer.py @@ -32,6 +32,8 @@ class TimeSeriesAnalyzer(utils.metaclass_insert(abc.ABCMeta, object)): _acceptsMissingValues = False ## defines if usage of algorithm requires output from a prior algorithm _needsPriorAlgoFeatures = False + ## defines if algorithm can be applied per cluster (otherwise it can only be used on global signal) + _canBeAppliedPerCluster = True @classmethod def getInputSpecification(cls): @@ -93,6 +95,16 @@ def needsPriorAlgoFeatures(cls): """ return cls._needsPriorAlgoFeatures + @classmethod + def canBeAppliedPerCluster(cls): + """ + Determines if algorithm can be applied per cluster. Otherwise it can only be used + on the global signal. + @ In, None + @ Out, canBeAppliedPerCluster, bool, True if this algorithm can be applied per cluster + """ + return cls._canBeAppliedPerCluster + ### INHERITED METHODS ### def __init__(self, *args, **kwargs): """ @@ -117,11 +129,10 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): params[target variable][characteristic] = value """ - def handleInput(self, spec, enforce_global=False): + def handleInput(self, spec): """ Reads user inputs into this object. @ In, spec, InputData.InputParams, input specifications - @ In, enforce_global, bool, @ Out, settings, dict, initialization settings for this algorithm """ settings = {} From 5646c2ec501b873df0887a088ba80711d6d3413c Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 11:41:48 -0600 Subject: [PATCH 04/12] fixing non-ARMA algos --- ravenframework/TSA/Factory.py | 2 ++ ravenframework/TSA/Fourier.py | 2 +- ravenframework/TSA/MarkovAR.py | 3 ++- ravenframework/TSA/PolynomialRegression.py | 3 ++- ravenframework/TSA/README.md | 1 + ravenframework/TSA/RWD.py | 3 ++- ravenframework/TSA/STL.py | 3 ++- ravenframework/TSA/Transformers/Differencing.py | 3 ++- ravenframework/TSA/Transformers/Distributions.py | 3 ++- ravenframework/TSA/Transformers/Filters.py | 3 ++- ravenframework/TSA/Transformers/ScikitLearnBase.py | 6 ++++-- ravenframework/TSA/VARMA.py | 3 ++- ravenframework/TSA/Wavelet.py | 3 ++- ravenframework/TSA/__init__.py | 1 + 14 files changed, 27 insertions(+), 12 deletions(-) diff --git a/ravenframework/TSA/Factory.py b/ravenframework/TSA/Factory.py index 4ba39ccaa9..ca9d6704a8 100644 --- a/ravenframework/TSA/Factory.py +++ b/ravenframework/TSA/Factory.py @@ -22,6 +22,7 @@ from .Fourier import Fourier from .ARMA import ARMA from .VARMA import VARMA +from .AutoARMA import AutoARMA from .MarkovAR import MarkovAR from .Wavelet import Wavelet from .PolynomialRegression import PolynomialRegression @@ -36,6 +37,7 @@ aliases = {'Fourier': 'fourier', 'ARMA': 'arma', 'VARMA': 'varma', + 'AutoARMA': 'autoarma', 'RWD': 'rwd', 'Wavelet': 'wavelet', 'ZeroFilter': 'zerofilter', diff --git a/ravenframework/TSA/Fourier.py b/ravenframework/TSA/Fourier.py index 82dbb0ccdb..d9a38eecf8 100644 --- a/ravenframework/TSA/Fourier.py +++ b/ravenframework/TSA/Fourier.py @@ -83,7 +83,7 @@ def handleInput(self, spec): settings['periods'] = spec.findFirst('periods').value return settings - def fit(self, signal, pivot, targets, settings, simultFit=True): + def fit(self, signal, pivot, targets, settings, trainedParams=None, simultFit=True): """ Determines the charactistics of the signal based on this algorithm. @ In, signal, np.ndarray, time series with dims [time, target] diff --git a/ravenframework/TSA/MarkovAR.py b/ravenframework/TSA/MarkovAR.py index 13325e0c7a..0d2414ef0d 100644 --- a/ravenframework/TSA/MarkovAR.py +++ b/ravenframework/TSA/MarkovAR.py @@ -100,13 +100,14 @@ def setDefaults(self, settings): settings['engine'] = randomUtils.newRNG() return settings - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Determines the charactistics of the signal based on this algorithm. @ In, signal, np.ndarray, time series with dims [time, target] @ In, pivot, np.1darray, time-like parameter values @ In, targets, list(str), names of targets in same order as signal @ In, settings, dict, settings for this ROM + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characteristic parameters """ # lazy import statsmodels diff --git a/ravenframework/TSA/PolynomialRegression.py b/ravenframework/TSA/PolynomialRegression.py index 42f85094f2..65a184b7b8 100644 --- a/ravenframework/TSA/PolynomialRegression.py +++ b/ravenframework/TSA/PolynomialRegression.py @@ -66,13 +66,14 @@ def handleInput(self, spec): settings['degree'] = spec.findFirst('degree').value return settings - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Determines the charactistics of the signal based on this algorithm. @ In, signal, np.ndarray, time series with dims [time, target] @ In, pivot, np.1darray, time-like parameter values @ In, targets, list(str), names of targets in same order as signal @ In, settings, dict, additional settings specific to this algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characteristic parameters """ from sklearn.preprocessing import PolynomialFeatures diff --git a/ravenframework/TSA/README.md b/ravenframework/TSA/README.md index 50fa056763..5734fcdbfe 100644 --- a/ravenframework/TSA/README.md +++ b/ravenframework/TSA/README.md @@ -40,6 +40,7 @@ The following table shows which base classes each currently implemented TSA algo | Algorithm | Transformer | Generator | Characterizer | |------------------------|:-----------:|:---------:|:-------------:| +| `AutoARMA` | | | ✓ | | `ARMA` | ✓ | ✓ | ✓ | | `VARMA` | ✓ | ✓ | ✓ | | `MarkovAR` | ✓ | ✓ | | diff --git a/ravenframework/TSA/RWD.py b/ravenframework/TSA/RWD.py index fb456a765f..b268f0228e 100644 --- a/ravenframework/TSA/RWD.py +++ b/ravenframework/TSA/RWD.py @@ -96,13 +96,14 @@ def setDefaults(self, settings): settings['seed'] = 42 return settings #### - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Determines the charactistics of the signal based on this algorithm. @ In, signal, np.ndarray, time series with dims [time, target] @ In, pivot, np.1darray, time-like parameter values @ In, targets, list(str), names of targets in same order as signal @ In, settings, dict, settings for this ROM + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict of dict: 1st level contains targets/variables; 2nd contains: U vectors and features """ # settings: diff --git a/ravenframework/TSA/STL.py b/ravenframework/TSA/STL.py index b4f7d44012..99657db4b9 100644 --- a/ravenframework/TSA/STL.py +++ b/ravenframework/TSA/STL.py @@ -90,7 +90,7 @@ def setDefaults(self, settings): return settings - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Fits the algorithm/model using the provided time series ("signal") using methods specific to the algorithm. @@ -98,6 +98,7 @@ def fit(self, signal, pivot, targets, settings): @ In, pivot, np.array, time-like parameter @ In, targets, list(str), names of targets @ In, settings, dict, additional settings specific to algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characterization of signal; structure as: params[target variable][characteristic] = value """ diff --git a/ravenframework/TSA/Transformers/Differencing.py b/ravenframework/TSA/Transformers/Differencing.py index 58fc0337c1..c178c9a8ce 100644 --- a/ravenframework/TSA/Transformers/Differencing.py +++ b/ravenframework/TSA/Transformers/Differencing.py @@ -51,7 +51,7 @@ def handleInput(self, spec): settings['order'] = spec.findFirst('order').value return settings - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Fits the algorithm/model using the provided time series ("signal") using methods specific to the algorithm. @@ -59,6 +59,7 @@ def fit(self, signal, pivot, targets, settings): @ In, pivot, np.array, time-like parameter @ In, targets, list(str), names of targets @ In, settings, dict, additional settings specific to algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characterization of signal; structure as: params[target variable][characteristic] = value """ diff --git a/ravenframework/TSA/Transformers/Distributions.py b/ravenframework/TSA/Transformers/Distributions.py index ddfd57bebe..2945bae356 100644 --- a/ravenframework/TSA/Transformers/Distributions.py +++ b/ravenframework/TSA/Transformers/Distributions.py @@ -150,7 +150,7 @@ class cls. be used as the first transformer in the chain.""" return specs - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Fits the algorithm/model using the provided time series ("signal") using methods specific to the algorithm. @@ -158,6 +158,7 @@ def fit(self, signal, pivot, targets, settings): @ In, pivot, np.array, time-like parameter @ In, targets, list(str), names of targets @ In, settings, dict, additional settings specific to algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characterization of signal; structure as: params[target variable][characteristic] = value """ diff --git a/ravenframework/TSA/Transformers/Filters.py b/ravenframework/TSA/Transformers/Filters.py index ba02daf94c..868db9c89d 100644 --- a/ravenframework/TSA/Transformers/Filters.py +++ b/ravenframework/TSA/Transformers/Filters.py @@ -43,7 +43,7 @@ def criterion(self, signal): @ Out, mask, numpy.ndarray, numpy array of boolean values that masks values of X """ - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Fits the algorithm/model using the provided time series ("signal") using methods specific to the algorithm. @@ -51,6 +51,7 @@ def fit(self, signal, pivot, targets, settings): @ In, pivot, np.array, time-like parameter @ In, targets, list(str), names of targets @ In, settings, dict, additional settings specific to algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characterization of signal; structure as: params[target variable][characteristic] = value """ diff --git a/ravenframework/TSA/Transformers/ScikitLearnBase.py b/ravenframework/TSA/Transformers/ScikitLearnBase.py index 8e9d194cee..b197c99466 100644 --- a/ravenframework/TSA/Transformers/ScikitLearnBase.py +++ b/ravenframework/TSA/Transformers/ScikitLearnBase.py @@ -35,7 +35,7 @@ class SKLTransformer(TimeSeriesTransformer): def templateTransformer(self): """ Template transformer that must be implemented in child classes """ - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Fits the algorithm/model using the provided time series ("signal") using methods specific to the algorithm. @@ -43,6 +43,7 @@ def fit(self, signal, pivot, targets, settings): @ In, pivot, np.array, time-like parameter @ In, targets, list(str), names of targets @ In, settings, dict, additional settings specific to algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characterization of signal; structure as: params[target variable][characteristic] = value """ @@ -108,7 +109,7 @@ def writeXML(self, writeTo, params): class SKLCharacterizer(SKLTransformer, TimeSeriesCharacterizer): """ Wrapper for scikit-learn transformers that also provide a characterization of the data """ - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Fits the algorithm/model using the provided time series ("signal") using methods specific to the algorithm. @@ -116,6 +117,7 @@ def fit(self, signal, pivot, targets, settings): @ In, pivot, np.array, time-like parameter @ In, targets, list(str), names of targets @ In, settings, dict, additional settings specific to algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characterization of signal; structure as: params[target variable][characteristic] = value """ diff --git a/ravenframework/TSA/VARMA.py b/ravenframework/TSA/VARMA.py index 085feca7f1..c722ffc52d 100644 --- a/ravenframework/TSA/VARMA.py +++ b/ravenframework/TSA/VARMA.py @@ -108,13 +108,14 @@ def setDefaults(self, settings): settings['engine'] = randomUtils.newRNG() return settings - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Determines the charactistics of the signal based on this algorithm. @ In, signal, np.ndarray, time series with dims [time, target] @ In, pivot, np.1darray, time-like parameter values @ In, targets, list(str), names of targets in same order as signal @ In, settings, dict, settings for this ROM + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characteristic parameters """ # lazy statsmodels import diff --git a/ravenframework/TSA/Wavelet.py b/ravenframework/TSA/Wavelet.py index 20e01d225b..d871095558 100644 --- a/ravenframework/TSA/Wavelet.py +++ b/ravenframework/TSA/Wavelet.py @@ -94,7 +94,7 @@ def handleInput(self, spec): settings['family'] = spec.findFirst('family').value return settings - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ This function utilizes the Discrete Wavelet Transform to characterize a time-dependent series of data. @@ -103,6 +103,7 @@ def fit(self, signal, pivot, targets, settings): @ In, pivot, np.1darray, time-like parameter values @ In, targets, list(str), names of targets in same order as signal @ In, settings, dict, additional settings specific to this algorithm + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characteristic parameters """ # TODO extend to continuous wavelet transform diff --git a/ravenframework/TSA/__init__.py b/ravenframework/TSA/__init__.py index a90c42f269..c52006a6c7 100644 --- a/ravenframework/TSA/__init__.py +++ b/ravenframework/TSA/__init__.py @@ -23,6 +23,7 @@ from .Fourier import Fourier from .ARMA import ARMA from .VARMA import VARMA +from .AutoARMA import AutoARMA from .MarkovAR import MarkovAR from .RWD import RWD from .STL import STL From e9e4ee5afbe9728c48e34f2ee4ffee37dde706cf Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 13:58:29 -0600 Subject: [PATCH 05/12] fixing ARMA and autoARMA; conversion script for P and Q --- ravenframework/TSA/ARMA.py | 122 +++++++++-- ravenframework/TSA/AutoARMA.py | 206 ++++++++++++++++++ .../SyntheticHistory_ARMA_lag.py | 51 +++++ 3 files changed, 363 insertions(+), 16 deletions(-) create mode 100644 ravenframework/TSA/AutoARMA.py create mode 100644 scripts/conversionScripts/SyntheticHistory_ARMA_lag.py diff --git a/ravenframework/TSA/ARMA.py b/ravenframework/TSA/ARMA.py index d1faec9a54..66c4074215 100644 --- a/ravenframework/TSA/ARMA.py +++ b/ravenframework/TSA/ARMA.py @@ -41,6 +41,7 @@ class ARMA(TimeSeriesGenerator, TimeSeriesCharacterizer, TimeSeriesTransformer): 'const'] _acceptsMissingValues = True _isStochastic = True + _needsPriorAlgoFeatures = False @classmethod def getInputSpecification(cls): @@ -83,14 +84,31 @@ class cls. \xmlNode{gaussianize} node preceding the \xmlNode{arma} node instead of this option. """, default=False) - specs.addSub(InputData.parameterInputFactory('SignalLag', contentType=InputTypes.IntegerType, - descr=r"""the number of terms in the AutoRegressive term to retain in the - regression; typically represented as $P$ in literature.""")) - specs.addSub(InputData.parameterInputFactory('NoiseLag', contentType=InputTypes.IntegerType, - descr=r"""the number of terms in the Moving Average term to retain in the - regression; typically represented as $Q$ in literature.""")) + specs.addParam('auto_select', param_type=InputTypes.BoolType, required=False, + descr=r""" """, default=False) + specs.addSub(InputData.parameterInputFactory('P', contentType=InputTypes.IntegerListType, + descr=r"""the number of terms in the AutoRegressive (AR) term to retain in the + regression; typically represented as $P$ or Signal Lag in literature. + Accepted as list or single value. If list, should be the same length as + number of target signals. Otherwise, the singular value is used for all + all signals.""")) + specs.addSub(InputData.parameterInputFactory('Q', contentType=InputTypes.IntegerListType, + descr=r"""the number of terms in the Moving Average (MA) term to retain in the + regression; typically represented as $Q$ or Noise Lag in literature. + Accepted as list or single value. If list, should be the same length as + number of target signals. Otherwise, the singular value is used for all + all signals.""")) return specs + @classmethod + def overrideNeedsPriorAlgoFeatures(cls, val): + """ + Method to overwrite the _needsPriorAlgoFeatures attribute + @ In, val, bool, True or False value for _needsPriorAlgoFeatures + @ Out, None + """ + cls._needsPriorAlgoFeatures = val + # # API Methods # @@ -112,8 +130,34 @@ def handleInput(self, spec): @ Out, settings, dict, initialization settings for this algorithm """ settings = super().handleInput(spec) - settings['P'] = spec.findFirst('SignalLag').value - settings['Q'] = spec.findFirst('NoiseLag').value + settings['auto_select'] = spec.parameterValues.get('auto_select', settings['auto_select']) + + targets = settings['target'] + if settings['auto_select']: + # if auto-selecting, replace P and Q with Nones to check for and replace later + settings['P'] = dict((target, None) for target in targets ) + settings['Q'] = dict((target, None) for target in targets ) + # overriding class attribute because we now need output from autoARMA to continue + self.overrideNeedsPriorAlgoFeatures(True) + else: + # getting P and Q values (number of Signal Lag and Noise Lag coefficients); checking validity + lagDict = {} + for lagType in ('P', 'Q'): #NOTE: not including 'd' here, as this is a Transformer + # user-defined Ps and Qs + lagVals = list(spec.findAll(lagType)[0].value) + # checking if number of P/Q values is acceptable + # >> if user provided only 1 value, we repeat it for all targets + # >> otherwise, the user has to provide a value for each target + if len(lagVals) == 1: + lagDict[lagType] = dict((target, lagVals[0]) for target in targets ) + elif len(lagVals) == len(targets): + lagDict[lagType] = dict((target, lagVals[i]) for i,target in enumerate(targets) ) + else: + raise IOError(f'Number of {lagType} values {len(lagVals)} should be 1 or' +\ + f'equal to number of targets {len(targets)}') + settings['P'] = lagDict['P'] + settings['Q'] = lagDict['Q'] + settings['reduce_memory'] = spec.parameterValues.get('reduce_memory', settings['reduce_memory']) settings['gaussianize'] = spec.parameterValues.get('gaussianize', settings['gaussianize']) @@ -132,15 +176,18 @@ def setDefaults(self, settings): settings['engine'] = randomUtils.newRNG() if 'reduce_memory' not in settings: settings['reduce_memory'] = False + if 'auto_select' not in settings: + settings['auto_select'] = False return settings - def fit(self, signal, pivot, targets, settings): + def fit(self, signal, pivot, targets, settings, trainedParams=None): """ Determines the charactistics of the signal based on this algorithm. @ In, signal, np.ndarray, time series with dims [time, target] @ In, pivot, np.1darray, time-like parameter values @ In, targets, list(str), names of targets in same order as signal @ In, settings, dict, settings for this ROM + @ In, trainedParams, dict, running dict of trained algorithm params @ Out, params, dict, characteristic parameters """ # lazy import statsmodels @@ -160,7 +207,7 @@ def fit(self, signal, pivot, targets, settings): history = signal[:, tg] mask = ~np.isnan(history) if settings.get('gaussianize', True): - # Transform data to obatain normal distrbuted series. See + # Transform data to obtain normal distrbuted series. See # J.M.Morales, R.Minguez, A.J.Conejo "A methodology to generate statistically dependent wind speed scenarios," # Applied Energy, 87(2010) 843-855 # -> then train independent ARMAs @@ -169,10 +216,14 @@ def fit(self, signal, pivot, targets, settings): normed[mask] = mathUtils.gaussianize(history[mask], params[target]['cdf']) else: normed = history - # TODO correlation (VARMA) as well as singular -> maybe should be independent TSA algo? - P = settings['P'] - Q = settings['Q'] - d = settings.get('d', 0) + # auto-select P and Q values if desired + if settings['auto_select']: + P,d,Q = self.autoSelectParams(target, trainedParams) + else: + P = settings['P'][target] + Q = settings['Q'][target] + d = settings.get('d', 0) + d = d[target] if isinstance(d,dict) else d # TODO just use SARIMAX? model = statsmodels.tsa.arima.model.ARIMA(normed, order=(P, d, Q), trend='c') res = model.fit(low_memory=settings['reduce_memory']) @@ -210,6 +261,28 @@ def fit(self, signal, pivot, targets, settings): params[target]['arma']['residual'] = res.resid return params + def autoSelectParams(self, target, trainedParams): + """ + Auto-selects ARMA hyperparameters P and Q for signal and noise lag. Uses the StatsForecast + AutoARIMA methodology for selection, including BIC as the optimization criteria, + @ In, target, str, name of target signal + @ In, trainedParams, dict, running dict of trained algorithm params + @ Out, P, int, optimal signal lag parameter + @ Out, d, int, optimal differencing parameter + @ Out, Q, int, optimal noise lag parameter + """ + # find last applied AutoARMA algorithm + prevAutoARMA = [algo for algo in trainedParams if algo.name == 'AutoARMA'] + if len(prevAutoARMA) == 0: + raise IOError("'auto-select' was requested for ARMA but no previous AutoARMA algorithm was applied.") + + params = trainedParams[prevAutoARMA[-1]] + + P = params[target]['P_opt'] + d = params[target]['D_opt'] + Q = params[target]['Q_opt'] + return P,d,Q + def getResidual(self, initial, params, pivot, settings): """ Removes trained signal from data and find residual @@ -259,9 +332,9 @@ def getParamNames(self, settings): base = f'{self.name}__{target}' names.append(f'{base}__constant') names.append(f'{base}__variance') - for p in range(settings['P']): + for p in range(settings['P'][target]): names.append(f'{base}__AR__{p}') - for q in range(settings['Q']): + for q in range(settings['Q'][target]): names.append(f'{base}__MA__{q}') return names @@ -329,6 +402,23 @@ def writeXML(self, writeTo, params): for q, ma in enumerate(info['arma']['ma']): base.append(xmlUtils.newNode(f'MA_{q}', text=f'{float(ma):1.9e}')) base.append(xmlUtils.newNode('variance', text=f'{float(info["arma"]["var"]):1.9e}')) + if 'lags' in info["arma"].keys(): + base.append(xmlUtils.newNode('order', text=','.join([str(int(l)) for l in info["arma"]["lags"]]))) + + def getNonClusterFeatures(self, params): + """ + Allows the engine to put whatever it wants into an XML to print to file. + @ In, params, dict, parameters from training this ROM + @ Out, None + """ + nonFeatures = {} + for target, info in params.items(): + nonFeatures[target] = {} + if 'lags' in info["arma"].keys(): + nonFeatures[target]['p'] = np.array([info["arma"]["lags"][0]]) + nonFeatures[target]['d'] = np.array([info["arma"]["lags"][1]]) + nonFeatures[target]['q'] = np.array([info["arma"]["lags"][2]]) + return nonFeatures # clustering def getClusteringValues(self, nameTemplate: str, requests: list, params: dict) -> dict: diff --git a/ravenframework/TSA/AutoARMA.py b/ravenframework/TSA/AutoARMA.py new file mode 100644 index 0000000000..c74f9323b4 --- /dev/null +++ b/ravenframework/TSA/AutoARMA.py @@ -0,0 +1,206 @@ +# Copyright 2017 Battelle Energy Alliance, LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" + AutoRegressive Moving Average time series analysis +""" +import copy +import collections +import numpy as np +import scipy as sp + +from .. import Decorators + +from ..utils import InputData, InputTypes, randomUtils, xmlUtils, mathUtils, importerUtils +statsmodels = importerUtils.importModuleLazy('statsmodels', globals()) + +from .. import Distributions +from .TimeSeriesAnalyzer import TimeSeriesCharacterizer + + +# utility methods +class AutoARMA(TimeSeriesCharacterizer): + r""" + AutoARMA time series characterizer algorithm + """ + # class attribute + _features = [] + ## Currently, AutoARMA is only a global algorithm. Applying it per segment is fine, but clusters + ## cause issues. Nominally (w/o auto-selection, ARMA models are trained per segment which means that + ## each segment model has the same number of coefficients but with different values. *With* auto + ## selection, each segment can have different number of coefficients if the algorithm chooses + ## different values of p and q for the segments. This can be mitigated by padding the coefficient + ## arrays according to largets p or q value; this works for Segmented ROMs. However, if we cluster + ## based on the coefficients then this causes issues if the coefficient arrays are padded to be + ## the same size. The zero or NaN values affect the resultant clusters and lead to bad synthetic + ## histories. Until a general solution is found, AutoARMA will remain a global algorithm + ## (i.e., not allowed if clustering). + _canBeAppliedPerCluster = False + + @classmethod + def getInputSpecification(cls): + """ + Method to get a reference to a class that specifies the input data for + class cls. + @ In, None + @ Out, specs, InputData.ParameterInput, class to use for + specifying input of cls. + """ + specs = super(AutoARMA, cls).getInputSpecification() + specs.name = 'autoarma' + specs.description = r"""characterizes the signal \textit{before} using Auto-Regressive and + Moving Average coefficients to stochastically fit the training signal. AutoARMA + automatically determines the number of coefficients to use in the regression. + The ARMA representation has the following form: + \begin{equation*} + A_t = \sum_{i=1}^P \phi_i A_{t-i} + \epsilon_t + \sum_{j=1}^Q \theta_j \epsilon_{t-j}, + \end{equation*} + where $t$ indicates a discrete time step, $\phi$ are the signal lag (or auto-regressive) + coefficients, $P$ is the number of signal lag terms to consider, $\epsilon$ is a random noise + term, $\theta$ are the noise lag (or moving average) coefficients, and $Q$ is the number of + noise lag terms to consider. The AutoARMA algorithm determines the optimal value of $P$ + and $Q$ for the each signal. The AutoARMA algorithms are developed in RAVEN using the + \texttt{statsforecast} Python library.""" + specs.addSub(InputData.parameterInputFactory('P_upper', contentType=InputTypes.IntegerType, + descr=r"""upper bound for the number of terms in the AutoRegressive term to retain + in the regression; typically represented as $P$ or Signal Lag in + literature.""")) + specs.addSub(InputData.parameterInputFactory('Q_upper', contentType=InputTypes.IntegerType, + descr=r"""upper bound for the number of terms in the Moving Average term to retain + in the regression; typically represented as $Q$ in Noise Lag + literature.""")) + return specs + + # + # API Methods + # + def __init__(self, *args, **kwargs): + """ + A constructor that will appropriately intialize a supervised learning object + @ In, args, list, an arbitrary list of positional values + @ In, kwargs, dict, an arbitrary dictionary of keywords and values + @ Out, None + """ + # general infrastructure + super().__init__(*args, **kwargs) + # maximum value that P+Q can have as an upper bound + self._maxCombinedPQ = 5 + + def handleInput(self, spec): + """ + Reads user inputs into this object. + @ In, spec, InputData.InputParams, input specifications + @ Out, settings, dict, initialization settings for this algorithm + """ + settings = super().handleInput(spec) + settings['P_upper'] = spec.findFirst('P_upper').value + settings['Q_upper'] = spec.findFirst('Q_upper').value + # AutoARMA is currently only a global TSA algorithm; this is enforced in TSAUser + + return settings + + def setDefaults(self, settings): + """ + Fills default values for settings with default values. + @ In, settings, dict, existing settings + @ Out, settings, dict, modified settings + """ + settings = super().setDefaults(settings) + if 'global' not in settings: + settings['global'] = True + if 'engine' not in settings: + settings['engine'] = randomUtils.newRNG() + return settings + + def fit(self, signal, pivot, targets, settings, trainedParams=None): + """ + Determines the charactistics of the signal based on this algorithm. + @ In, signal, np.ndarray, time series with dims [time, target] + @ In, pivot, np.1darray, time-like parameter values + @ In, targets, list(str), names of targets in same order as signal + @ In, settings, dict, settings for this ROM + @ In, trainedParams, dict, running dict of trained algorithm params + @ Out, params, dict, characteristic parameters + """ + # set seed for training + seed = settings['seed'] + if seed is not None: + randomUtils.randomSeed(seed, engine=settings['engine']) + + try: + from statsforecast.models import AutoARIMA + from statsforecast.arima import arima_string + import re + except ModuleNotFoundError as exc: + print("This RAVEN TSA Module requires the statsforecast library to be installed in the current python environment") + raise ModuleNotFoundError from exc + + maxOrder = np.max(np.r_[settings['P_upper'], settings['Q_upper'], self._maxCombinedPQ]) + statsforecastParams = { + "seasonal": False, # set to True if you want a SARIMA model + "stationary": True, # NOTE: basically ignored 'd' because it should be applied as a TSA Transformer + "start_p": 0, + "start_q": 0, + "max_p": settings['P_upper'], + "max_q": settings['Q_upper'], + "max_order": maxOrder, + "ic": 'aicc', + } + + params = {} + for tg, target in enumerate(targets): + params[target] = {} + history = signal[:, tg] + mask = ~np.isnan(history) + + SFAA = AutoARIMA(**statsforecastParams) + fittedARIMA = SFAA.fit(y=history[mask]) + + arma_str = re.findall(r'\(([^\\)]+)\)', arima_string(fittedARIMA.model_))[0] + p_opt,d_opt,q_opt = [int(a) for a in arma_str.split(',')] + + params[target]['P_opt'] = p_opt + params[target]['D_opt'] = d_opt + params[target]['Q_opt'] = q_opt + del SFAA, fittedARIMA + + return params + + def getParamsAsVars(self, params): + """ + Map characterization parameters into flattened variable format + @ In, params, dict, trained parameters (as from characterize) + @ Out, rlz, dict, realization-style response + """ + rlz = {} + for target, info in params.items(): + base = f'{self.name}__{target}' + rlz[f'{base}__P_opt'] = info['P_opt'] + rlz[f'{base}__D_opt'] = info['D_opt'] + rlz[f'{base}__Q_opt'] = info['Q_opt'] + return rlz + + def writeXML(self, writeTo, params): + """ + Allows the engine to put whatever it wants into an XML to print to file. + @ In, writeTo, xmlUtils.StaticXmlElement, entity to write to + @ In, params, dict, trained parameters as from self.characterize + @ Out, None + """ + for target, info in params.items(): + base = xmlUtils.newNode(target) + writeTo.append(base) + base.append(xmlUtils.newNode('P_opt', text=f'{int(info["P_opt"]):d}')) + base.append(xmlUtils.newNode('D_opt', text=f'{int(info["D_opt"]):d}')) + base.append(xmlUtils.newNode('Q_opt', text=f'{int(info["Q_opt"]):d}')) + diff --git a/scripts/conversionScripts/SyntheticHistory_ARMA_lag.py b/scripts/conversionScripts/SyntheticHistory_ARMA_lag.py new file mode 100644 index 0000000000..9713411e75 --- /dev/null +++ b/scripts/conversionScripts/SyntheticHistory_ARMA_lag.py @@ -0,0 +1,51 @@ +# Copyright 2017 Battelle Energy Alliance, LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import xml.etree.ElementTree as ET + +def convert(tree,fileName=None): + """ + Converts input files to be compatible with merge request #785: + Where ARMA exists, removes , , , and , and adds

and + @ In, tree, xml.etree.ElementTree.ElementTree object, the contents of a RAVEN input file + @ In, fileName, the name for the raven input file + @Out, tree, xml.etree.ElementTree.ElementTree object, the modified RAVEN input file + """ + simulation = tree.getroot() + models = simulation.find('Models') + if models is not None: + for child in models: + if child.tag == 'ROM' and child.attrib['subType'] == 'SyntheticHistory': + arma = child.find('arma') + if arma is None: + return tree + # store outdated nodes if existing + signalLag = arma.find('SignalLag') + noiseLag = arma.find('NoiseLag') + # replace outdated nodes with new node + if signalLag is not None: + newP = ET.Element('P') + newP.text = signalLag.text + arma.remove(signalLag) + arma.append(newP) + if noiseLag is not None: + newQ = ET.Element('Q') + newQ.text = noiseLag.text + arma.remove(noiseLag) + arma.append(newQ) + return tree + +if __name__=='__main__': + import convert_utils + import sys + convert_utils.standardMain(sys.argv,convert) From 677ebc19c1c366ff25e1ab8c85f2170d74ff16fa Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 14:43:33 -0600 Subject: [PATCH 06/12] updating synthetic history test xmls --- .../ROM/TimeSeries/SyntheticHistory/arma.xml | 6 +++--- .../SyntheticHistory/arma_preserveCDF.xml | 6 +++--- .../ROM/TimeSeries/SyntheticHistory/clustered.xml | 6 +++--- .../SyntheticHistory/differencing_arma.xml | 6 +++--- .../TimeSeries/SyntheticHistory/fourier_arma.xml | 6 +++--- .../SyntheticHistory/global_fourier_arma.xml | 8 ++++---- .../TimeSeries/SyntheticHistory/interpolated.xml | 6 +++--- .../ROM/TimeSeries/SyntheticHistory/log_arma.xml | 6 +++--- .../ROM/TimeSeries/SyntheticHistory/sample.xml | 6 +++--- .../ROM/TimeSeries/SyntheticHistory/stl_arma.xml | 8 ++++---- .../zero_filter_discontinuous.xml | 15 ++++----------- 11 files changed, 36 insertions(+), 43 deletions(-) diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/arma.xml index 3ed52a701b..d31dcd62a7 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/arma.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/arma.xml @@ -67,9 +67,9 @@ scaling seconds - - 2 - 3 + +

2

+ 3 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/arma_preserveCDF.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/arma_preserveCDF.xml index d7433ef449..6ae4df912a 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/arma_preserveCDF.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/arma_preserveCDF.xml @@ -60,9 +60,9 @@ seconds - - 2 - 3 + +

2

+ 3
diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/clustered.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/clustered.xml index e6157d10f8..59d9461987 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/clustered.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/clustered.xml @@ -65,9 +65,9 @@ scaling pivot - - 1 - 0 + +

1

+ 0
classifier diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/differencing_arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/differencing_arma.xml index fee02055b9..c5041e6c18 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/differencing_arma.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/differencing_arma.xml @@ -68,9 +68,9 @@ 1 - - 2 - 3 + +

2

+ 3
diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/fourier_arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/fourier_arma.xml index 3b705544bc..fe55fabdc2 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/fourier_arma.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/fourier_arma.xml @@ -68,9 +68,9 @@ 2, 5, 10 - - 2 - 3 + +

2

+ 3
diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/global_fourier_arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/global_fourier_arma.xml index c00d9171c7..2e6b506317 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/global_fourier_arma.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/global_fourier_arma.xml @@ -67,10 +67,10 @@ 2, 5, 10, 20, 50 - - - 1 - 0 + + +

1

+ 0
classifier diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/interpolated.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/interpolated.xml index 80aef9d12b..b16cabe921 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/interpolated.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/interpolated.xml @@ -64,9 +64,9 @@ signal0, seconds scaling seconds - - 2 - 3 + +

2

+ 3
macro diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/log_arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/log_arma.xml index 6a1365f1a5..1b0123b073 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/log_arma.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/log_arma.xml @@ -65,9 +65,9 @@ seconds - - 2 - 3 + +

2

+ 3
diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/sample.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/sample.xml index 63a45e0d09..db95359970 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/sample.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/sample.xml @@ -47,9 +47,9 @@ signal0, signal1, seconds scaling seconds - - 2 - 3 + +

2

+ 3
diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/stl_arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/stl_arma.xml index 0dda14d73a..3b9ada2956 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/stl_arma.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/stl_arma.xml @@ -4,7 +4,7 @@ framework/ROM/TimeSeries/SyntheticHistory.FourierARMA j-bryan 2023-08-18 - SupervisedLearning.SyntheticHistory,TSA.ST>,TSA.ARMA + SupervisedLearning.SyntheticHistory,TSA.ST>,TSA.ARMA Tests the SyntheticHistory ROM using STL decomposition then ARMA TimeSeriesAnalyzer algorithms. @@ -68,9 +68,9 @@ 10 - - 2 - 3 + +

2

+ 3
diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/zero_filter_discontinuous.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/zero_filter_discontinuous.xml index ac5a020c92..0591695d68 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/zero_filter_discontinuous.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/zero_filter_discontinuous.xml @@ -32,23 +32,19 @@ input input - input arma - arma meta romMeta - arma pk - placeholder arma @@ -56,7 +52,6 @@ synth synth - @@ -64,7 +59,6 @@ scaling OutputPlaceHolder - scaling,YEAR TOTALLOAD,WIND,SOLAR,HOUR @@ -72,7 +66,6 @@ HOUR - scaling TOTALLOAD,WIND,SOLAR @@ -95,9 +88,9 @@ 8760, 4380, 2920, 2190, 438, 168, 24, 12, 6, 3 - - 1 - 0 + +

1

+ 0
@@ -107,7 +100,6 @@ csv meta - csv synth @@ -123,4 +115,5 @@ 1.0 + From b2e03ba5924d3b05f873dd6a6a8c0717b98f1ab1 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 14:45:20 -0600 Subject: [PATCH 07/12] regolding romMeta xmls to include P and Q from ARMA --- .../SyntheticHistory/gold/ARMA/romMeta.xml | 30 +++++++------ .../gold/ARMAPreserveCDF/romMeta.xml | 30 +++++++------ .../gold/Clustered/romMeta.xml | 24 +++++----- .../gold/DiffARMA/romMeta.xml | 30 +++++++------ .../gold/FourierARMA/romMeta.xml | 30 +++++++------ .../gold/GlobalFourierARMA/romMeta.xml | 10 +++-- .../gold/Interpolated/romMeta.xml | 45 ++++++++++--------- .../SyntheticHistory/gold/LogARMA/romMeta.xml | 26 ++++++----- .../SyntheticHistory/gold/STLARMA/romMeta.xml | 30 +++++++------ .../gold/ZeroFilterDiscontinuous/romMeta.xml | 9 ++-- 10 files changed, 145 insertions(+), 119 deletions(-) diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ARMA/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ARMA/romMeta.xml index 55ed807e48..0d48ad1523 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ARMA/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ARMA/romMeta.xml @@ -11,22 +11,24 @@
- -2.342847668e-02 - 5.181329679e-01 - -6.530269669e-02 - -2.950415467e-02 - 3.140371412e-01 - 1.246305413e-01 - 8.738162828e-01 + -2.342614487e-02 + 5.181096172e-01 + -6.529552185e-02 + -2.948567247e-02 + 3.140363129e-01 + 1.246413733e-01 + 8.738153821e-01 + 2,0,3 - 2.448632326e-02 - 8.721221585e-01 - -7.094838121e-02 - -4.123799927e-01 - 1.474309685e-01 - -1.712627050e-01 - 9.269180521e-01 + 2.448632351e-02 + 8.721221530e-01 + -7.094837791e-02 + -4.123799873e-01 + 1.474309682e-01 + -1.712627042e-01 + 9.269180517e-01 + 2,0,3 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ARMAPreserveCDF/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ARMAPreserveCDF/romMeta.xml index 7681bfcc19..2edf02119d 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ARMAPreserveCDF/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ARMAPreserveCDF/romMeta.xml @@ -15,22 +15,24 @@
- -2.342847668e-02 - 5.181329679e-01 - -6.530269669e-02 - -2.950415467e-02 - 3.140371412e-01 - 1.246305413e-01 - 8.738162828e-01 + -2.342614487e-02 + 5.181096172e-01 + -6.529552185e-02 + -2.948567247e-02 + 3.140363129e-01 + 1.246413733e-01 + 8.738153821e-01 + 2,0,3 - 2.448632326e-02 - 8.721221585e-01 - -7.094838121e-02 - -4.123799927e-01 - 1.474309685e-01 - -1.712627050e-01 - 9.269180521e-01 + 2.448632351e-02 + 8.721221530e-01 + -7.094837791e-02 + -4.123799873e-01 + 1.474309682e-01 + -1.712627042e-01 + 9.269180517e-01 + 2,0,3 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/Clustered/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/Clustered/romMeta.xml index 2751f663ca..596ee1c65a 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/Clustered/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/Clustered/romMeta.xml @@ -9,11 +9,11 @@ romMeta - ClusterFeature|signal0|ARMA|ar_0|scaled,ClusterFeature|signal0|ARMA|ar_0|unscaled,ClusterFeature|signal0|ARMA|const|scaled,ClusterFeature|signal0|ARMA|const|unscaled,ClusterFeature|signal0|ARMA|var|scaled,ClusterFeature|signal0|ARMA|var|unscaled,ClusterFeature|signal1|ARMA|ar_0|scaled,ClusterFeature|signal1|ARMA|ar_0|unscaled,ClusterFeature|signal1|ARMA|const|scaled,ClusterFeature|signal1|ARMA|const|unscaled,ClusterFeature|signal1|ARMA|var|scaled,ClusterFeature|signal1|ARMA|var|unscaled,ClusterLabels,seg_index_end,seg_index_start,seg_pivot_end,seg_pivot_start + ClusterFeature|signal0|ARMA|ar_0|scaled,ClusterFeature|signal0|ARMA|ar_0|unscaled,ClusterFeature|signal0|ARMA|const|scaled,ClusterFeature|signal0|ARMA|const|unscaled,ClusterFeature|signal0|ARMA|var|scaled,ClusterFeature|signal0|ARMA|var|unscaled,ClusterFeature|signal1|ARMA|ar_0|scaled,ClusterFeature|signal1|ARMA|ar_0|unscaled,ClusterFeature|signal1|ARMA|const|scaled,ClusterFeature|signal1|ARMA|const|unscaled,ClusterFeature|signal1|ARMA|var|scaled,ClusterFeature|signal1|ARMA|var|unscaled,ClusterLabels,Feature|signal0|ARMA|d,Feature|signal0|ARMA|p,Feature|signal0|ARMA|q,Feature|signal1|ARMA|d,Feature|signal1|ARMA|p,Feature|signal1|ARMA|q,seg_index_end,seg_index_start,seg_pivot_end,seg_pivot_start RAVEN_sample_ID - + Clustered ROM @@ -28,14 +28,16 @@
- -8.003280283e-04 - 5.063587372e-01 + -8.003288827e-04 + 5.063587371e-01 1.066660163e+00 + 1,0,0 - 1.159304248e-03 + 1.159304232e-03 -4.529610029e-01 1.142738326e+00 + 1,0,0 0, 1, 2, 3, 4 @@ -48,19 +50,21 @@
- -2.222335898e-03 - -5.122369801e-01 + -2.222335945e-03 + -5.122369800e-01 1.073478650e+00 + 1,0,0 - 4.528710922e-04 + 4.528710748e-04 3.788900499e-01 - 1.233379552e+00 + 1.233379551e+00 + 1,0,0 5, 6, 7, 8, 9 100, 199 - + diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/DiffARMA/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/DiffARMA/romMeta.xml index 0395e92f78..21dd041483 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/DiffARMA/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/DiffARMA/romMeta.xml @@ -19,22 +19,24 @@
- 3.695660154e-03 - 1.357688600e+00 - -5.877792959e-01 - -1.724927763e+00 - 1.036930326e+00 - -3.110458392e-01 - 1.138354562e+00 + 3.693047633e-03 + 1.358329046e+00 + -5.883576468e-01 + -1.725276552e+00 + 1.036554063e+00 + -3.104232725e-01 + 1.136158905e+00 + 2,0,3 - 6.300578434e-03 - 1.612942238e-01 - 5.161770874e-01 - -5.313720979e-01 - -3.390657493e-01 - -1.293981956e-01 - 1.128554230e+00 + 6.302590917e-03 + 1.611749684e-01 + 5.162844774e-01 + -5.312384748e-01 + -3.392185984e-01 + -1.293191073e-01 + 1.128704598e+00 + 2,0,3 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/FourierARMA/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/FourierARMA/romMeta.xml index 7ea22315b4..4ff940499d 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/FourierARMA/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/FourierARMA/romMeta.xml @@ -43,22 +43,24 @@
- 4.845532824e-03 - 4.711740544e-01 - 1.073644196e-01 - 1.495391809e-01 - 1.881403539e-01 - 1.434737494e-01 - 4.917653477e-01 + 4.845534460e-03 + 4.711740521e-01 + 1.073644214e-01 + 1.495391834e-01 + 1.881403533e-01 + 1.434737504e-01 + 4.917653474e-01 + 2,0,3 - 3.270470871e-03 - 6.989112456e-01 - 8.753311577e-02 - -1.698365143e-01 - 9.744189247e-02 - -1.413858343e-02 - 4.949581023e-01 + 3.270397313e-03 + 6.989113244e-01 + 8.753301419e-02 + -1.698366098e-01 + 9.744195391e-02 + -1.413859360e-02 + 4.949581056e-01 + 2,0,3 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/GlobalFourierARMA/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/GlobalFourierARMA/romMeta.xml index 333ca22447..f641f19756 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/GlobalFourierARMA/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/GlobalFourierARMA/romMeta.xml @@ -9,11 +9,11 @@ romMeta - ClusterFeature|signal0|ARMA|ar_0|scaled,ClusterFeature|signal0|ARMA|ar_0|unscaled,ClusterFeature|signal0|ARMA|const|scaled,ClusterFeature|signal0|ARMA|const|unscaled,ClusterFeature|signal0|ARMA|var|scaled,ClusterFeature|signal0|ARMA|var|unscaled,ClusterFeature|signal1|ARMA|ar_0|scaled,ClusterFeature|signal1|ARMA|ar_0|unscaled,ClusterFeature|signal1|ARMA|const|scaled,ClusterFeature|signal1|ARMA|const|unscaled,ClusterFeature|signal1|ARMA|var|scaled,ClusterFeature|signal1|ARMA|var|unscaled,ClusterLabels,seg_index_end,seg_index_start,seg_pivot_end,seg_pivot_start + ClusterFeature|signal0|ARMA|ar_0|scaled,ClusterFeature|signal0|ARMA|ar_0|unscaled,ClusterFeature|signal0|ARMA|const|scaled,ClusterFeature|signal0|ARMA|const|unscaled,ClusterFeature|signal0|ARMA|var|scaled,ClusterFeature|signal0|ARMA|var|unscaled,ClusterFeature|signal1|ARMA|ar_0|scaled,ClusterFeature|signal1|ARMA|ar_0|unscaled,ClusterFeature|signal1|ARMA|const|scaled,ClusterFeature|signal1|ARMA|const|unscaled,ClusterFeature|signal1|ARMA|var|scaled,ClusterFeature|signal1|ARMA|var|unscaled,ClusterLabels,Feature|signal0|ARMA|d,Feature|signal0|ARMA|p,Feature|signal0|ARMA|q,Feature|signal1|ARMA|d,Feature|signal1|ARMA|p,Feature|signal1|ARMA|q,seg_index_end,seg_index_start,seg_pivot_end,seg_pivot_start RAVEN_sample_ID - + Clustered ROM @@ -31,11 +31,13 @@ 2.067324766e-02 5.789104500e-01 9.548311183e-01 + 1,0,0 -2.949861285e-04 5.181471892e-01 1.051423590e+00 + 1,0,0
0, 1, 2, 3, 5, 6, 7, 8, 9 @@ -51,16 +53,18 @@ 1.726144055e-02 7.454777809e-01 6.347865921e-01 + 1,0,0 8.705061198e-02 7.343611299e-01 8.113936096e-01 + 1,0,0
4 100, 199 - + diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/Interpolated/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/Interpolated/romMeta.xml index 1bc9526177..3e37666bf4 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/Interpolated/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/Interpolated/romMeta.xml @@ -16,13 +16,14 @@ - -3.405762107e-02 - -3.800997642e-01 - 4.633854069e-01 - 1.067776517e+00 - 3.878969804e-01 - 3.198774407e-01 - 9.566733107e-01 + -3.404606100e-02 + -3.800884139e-01 + 4.633974912e-01 + 1.067769629e+00 + 3.878824930e-01 + 3.198708707e-01 + 9.566706516e-01 + 2,0,3 0 @@ -34,13 +35,14 @@ - 2.331304717e-01 - 3.193866976e-01 - 2.986141579e-01 - 2.177388904e-01 - 1.773139327e-01 - -1.022136980e-01 - 8.389602626e-01 + 2.331304669e-01 + 3.193866942e-01 + 2.986141638e-01 + 2.177388985e-01 + 1.773139333e-01 + -1.022136939e-01 + 8.389602662e-01 + 2,0,3 0 @@ -52,13 +54,14 @@ - 9.953642532e-02 - -3.035653331e-02 - 3.809997824e-01 - 6.427577039e-01 - 2.826054566e-01 - 1.088318713e-01 - 8.978167866e-01 + 9.954220293e-02 + -3.035085983e-02 + 3.810058275e-01 + 6.427542636e-01 + 2.825982131e-01 + 1.088285884e-01 + 8.978154589e-01 + 2,0,3 0 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/LogARMA/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/LogARMA/romMeta.xml index 75b4353ddb..bb474b62c4 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/LogARMA/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/LogARMA/romMeta.xml @@ -14,22 +14,24 @@
- -2.017786565e-02 - -2.254403826e-01 - 5.928885641e-01 - 8.315085708e-01 - -3.393858013e-02 - 8.594632095e-02 - 8.219099887e-01 + -2.018299974e-02 + -2.254407616e-01 + 5.928879269e-01 + 8.315082140e-01 + -3.394205618e-02 + 8.594340747e-02 + 8.219115519e-01 + 2,0,3 - 3.324618133e-02 + 3.324618115e-02 1.284845806e+00 - -4.694213600e-01 - -8.193080567e-01 - 2.676701089e-01 - 2.033831083e-01 + -4.694213604e-01 + -8.193080573e-01 + 2.676701091e-01 + 2.033831080e-01 7.028920133e-01 + 2,0,3 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/STLARMA/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/STLARMA/romMeta.xml index 8da3c3f861..18b6a6c37a 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/STLARMA/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/STLARMA/romMeta.xml @@ -15,22 +15,24 @@
- 6.670730262e-04 - 1.882699526e+00 - -9.798770716e-01 - -1.200831024e+00 - 1.458241630e-01 - 2.571487190e-01 - 1.548102632e-01 + 6.670671814e-04 + 1.882699525e+00 + -9.798770703e-01 + -1.200831015e+00 + 1.458241661e-01 + 2.571487099e-01 + 1.548102627e-01 + 2,0,3 - 4.662838791e-03 - 1.837474821e+00 - -9.001123859e-01 - -1.158935528e+00 - 3.824566825e-01 - -2.176215817e-01 - 1.888250309e-01 + 4.659278533e-03 + 1.837455793e+00 + -9.001458617e-01 + -1.159132433e+00 + 3.825866795e-01 + -2.175443267e-01 + 1.888159946e-01 + 2,0,3 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ZeroFilterDiscontinuous/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ZeroFilterDiscontinuous/romMeta.xml index aba4b4aa18..3c8bfd0923 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ZeroFilterDiscontinuous/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/ZeroFilterDiscontinuous/romMeta.xml @@ -119,19 +119,22 @@ - -4.158865848e-02 + -4.158865841e-02 8.702202491e-01 2.973272651e-01 + 1,0,0 - -2.220072382e-02 + -2.220072394e-02 9.040423880e-01 2.258342079e-01 + 1,0,0 - -1.304799638e-02 + -1.304799671e-02 7.022137015e-01 7.048554959e-01 + 1,0,0 From fe8e2bcfff6a98aff73bc56dd008899cb66741fd Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 15:01:54 -0600 Subject: [PATCH 08/12] adding autoARMA test --- .../TimeSeries/SyntheticHistory/auto_arma.xml | 158 +++ .../gold/AutoARMA/romMeta.xml | 93 ++ .../gold/AutoARMA/samples_0.csv | 1001 +++++++++++++++++ .../gold/AutoARMA/samples_1.csv | 1001 +++++++++++++++++ .../ROM/TimeSeries/SyntheticHistory/tests | 17 + 5 files changed, 2270 insertions(+) create mode 100644 tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml create mode 100644 tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/romMeta.xml create mode 100644 tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_0.csv create mode 100644 tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_1.csv diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml new file mode 100644 index 0000000000..94a0f9b4a2 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml @@ -0,0 +1,158 @@ + + + + framework/ROM/TimeSeries/SyntheticHistory.AutoARMA + talbpaul + 2021-02-11 + SupervisedLearning.SyntheticHistory,TSA.Fourier,TSA.ARMA + + Tests clustering for the SyntheticHistory ROM with Fourier and ARMA steps. + + + + + AutoARMA + read, train, print, sample, plot + 1 + + + + + infile + indata + + + indata + synth + + + synth + romMeta + romMeta + + + placeholder + synth + mc + samples + samples + + + indata + samples + compare_0 + compare_1 + + + + + ../TrainingData/GlobalFourierARMA_A.csv + + + + + + 2 + 42 + + 1.0 + + + + + + signal0, signal1, pivot + scaling + pivot + + 2, 5, 10, 20, 50 + + + + 5 + 5 + + +

1

+ 0 +
+
+
+ + + + csv + samples + + + csv + romMeta + + + plot_samples_0 + + + line + indata|Output|pivot + indata|Output|signal0 + 1000 + + + line + samples|Output|pivot + samples|Output|signal0 + 1000 + + + + + <text>Signal 0 comparison</text> + + png + + + + plot_samples_1 + + + line + indata|Output|pivot + indata|Output|signal1 + 1000 + + + line + samples|Output|pivot + samples|Output|signal1 + 1000 + + + + + <text>Signal 1 comparison</text> + + png + + + + + + + + scaling + signal0, signal1 + + pivot + + + + scaling + signal0, signal1 + + pivot + + + + + +
diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/romMeta.xml new file mode 100644 index 0000000000..f760d70da2 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/romMeta.xml @@ -0,0 +1,93 @@ + + + + SyntheticHistoryROM + scaling + signal0,signal1,pivot + + + + 4.190088012e+01 + + 8.158731520e+00 + -9.086070095e-03 + + + 9.876028874e+00 + 7.730227735e-01 + + + 1.195819352e+01 + 3.107425093e+00 + + + 1.510292050e+01 + 3.864956787e-01 + + + 4.984277709e+01 + 1.531541001e-03 + + + + 4.179230611e+01 + + 8.078937429e+00 + 8.082315775e-03 + + + 9.637360630e+00 + 7.955316550e-01 + + + 1.198551278e+01 + 3.130758005e+00 + + + 1.515150978e+01 + 3.893342125e-01 + + + 5.032208201e+01 + 8.256117239e-04 + + + + + + + + + + 5 + 0 + 0 + + + 2 + 0 + 0 + + + + + -1.753877510e-03 + 6.975955072e-01 + 2.145354665e-01 + -1.124237205e-01 + -1.274829227e-01 + 5.274823933e-02 + 4.303670076e-01 + 5,0,0 + + + 8.584247694e-04 + 5.127096640e-01 + 2.679723462e-01 + 4.902910626e-01 + 2,0,0 + + + + + diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_0.csv b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_0.csv new file mode 100644 index 0000000000..bd5b34fac7 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_0.csv @@ -0,0 +1,1001 @@ +pivot,signal0,signal1 +0.0,56.4429126422,54.9060312252 +0.1,60.2311763053,59.3802419533 +0.2,63.8733877006,62.9854335695 +0.3,67.0237575685,66.2956349742 +0.4,68.2241512994,68.4614772018 +0.5,69.6430122273,69.5431039152 +0.6,67.7195602938,68.7832907809 +0.7,66.4826141293,66.5249804725 +0.8,64.048229636,66.0499341961 +0.9,62.7729261584,63.1531878785 +1.0,59.9210288278,60.6586885084 +1.1,58.8745071922,56.5397593877 +1.2,57.0805872202,55.0236747184 +1.3,54.5553565323,51.5203192832 +1.4,52.9663710912,50.0949795803 +1.5,51.1520742513,48.4705853952 +1.6,51.0504130399,47.9540146294 +1.7,51.165709147,48.8317343284 +1.8,51.6334564243,49.2370992521 +1.9,52.5737839781,51.24105085 +2.0,53.55346881,53.2990311838 +2.1,55.088915911,55.1238391148 +2.2,57.9947125297,54.3434146304 +2.3,60.0127590703,58.6910046119 +2.4,62.054721595,59.7985201623 +2.5,61.8488279054,58.3346353285 +2.6,61.5586277661,56.7521295638 +2.7,59.9195736846,59.56514696 +2.8,57.5567139414,57.3909851838 +2.9,57.7943344295,56.7259395701 +3.0,56.2917915148,54.3139825494 +3.1,55.5321349182,53.2031877015 +3.2,51.4644233494,50.2576970466 +3.3,49.2930008363,49.3341453867 +3.4,49.4255165551,50.244121495 +3.5,50.248794543,51.0928579548 +3.6,51.9832260711,55.6400108749 +3.7,55.3000067564,58.4041354438 +3.8,59.3461517459,61.991282805 +3.9,65.4285112157,65.8164368641 +4.0,68.3174733908,71.737520663 +4.1,72.6184636719,76.1898981692 +4.2,77.3166514864,82.004036661 +4.3,82.398321742,86.1101047728 +4.4,84.8842642928,88.3353383396 +4.5,87.9925296127,90.2924236477 +4.6,90.1324708449,91.9908297099 +4.7,91.1759669723,91.3388893499 +4.8,91.4101305049,90.9722899222 +4.9,91.7446112532,90.58320572 +5.0,91.9601742028,89.9240405636 +5.1,91.6933954625,91.2819796291 +5.2,92.3682967029,90.1948813618 +5.3,92.6481816358,89.6293723133 +5.4,93.3094628847,89.6699900171 +5.5,93.7915058488,89.8412421113 +5.6,96.1318442623,92.8261304955 +5.7,98.18811737,95.9407179054 +5.8,101.300558892,97.0071311031 +5.9,103.130526633,100.090877642 +6.0,105.298258654,103.396563518 +6.1,107.13447353,105.225445487 +6.2,107.981196262,107.562837268 +6.3,109.473942835,110.81011182 +6.4,110.007081395,109.713747554 +6.5,109.925094812,110.907494182 +6.6,109.173250976,109.068571459 +6.7,106.690272041,105.313294888 +6.8,103.384839633,105.071938779 +6.9,99.7597826235,102.59297196 +7.0,96.5663396109,98.0902086084 +7.1,93.0480595171,95.524188059 +7.2,90.2800306477,90.0896213489 +7.3,88.1699296327,88.8419666674 +7.4,85.7238765148,87.413723058 +7.5,86.4949184924,86.2493583452 +7.6,85.6726399286,86.3004569931 +7.7,87.0866231461,86.0232317719 +7.8,87.8707235537,84.9957741553 +7.9,90.8555439532,88.1027434941 +8.0,91.8799934254,90.5869400846 +8.1,93.7681422591,92.7256208704 +8.2,94.997458685,93.534311457 +8.3,96.7947970167,96.7203862925 +8.4,97.4297190107,97.0872625369 +8.5,96.1274820926,97.1346288107 +8.6,97.1136346111,97.2119613454 +8.7,94.3015043706,96.6530126161 +8.8,93.0337805478,93.9950812198 +8.9,91.1842326228,92.3387690962 +9.0,89.7868278967,90.4657943522 +9.1,88.7518218141,87.208644118 +9.2,86.2116686433,85.0901356527 +9.3,84.8995640825,80.9286886896 +9.4,85.2100622933,82.0595171059 +9.5,84.3818278223,82.3477009169 +9.6,84.0619042226,82.905526138 +9.7,85.182387814,84.6752019236 +9.8,85.2044087759,85.6208258842 +9.9,87.0731032102,87.6501665385 +10.0,89.9815575014,90.2663976888 +10.1,93.5388458259,91.9647232236 +10.2,95.1305911503,94.0540233027 +10.3,96.2654465919,95.1478158382 +10.4,97.240929767,94.1627983216 +10.5,96.5748893038,95.4475288859 +10.6,96.7205029412,92.4125691251 +10.7,94.9230023336,90.2096842102 +10.8,92.6858088242,89.0196571918 +10.9,88.4208344998,85.9169488926 +11.0,84.4978184668,83.2352434665 +11.1,79.2844270063,78.0305228756 +11.2,74.155445153,74.4434475767 +11.3,71.1591459692,71.6329898166 +11.4,66.2649892068,68.2237422423 +11.5,66.1625233443,66.4445537202 +11.6,62.4468548099,64.6161829736 +11.7,62.1487103219,62.8806596601 +11.8,62.7126286129,65.455186403 +11.9,62.8678663994,65.0930322487 +12.0,63.915192856,66.9205660105 +12.1,64.5981259774,67.1639340188 +12.2,66.1660412714,66.4033785136 +12.3,65.9203557463,67.3687667936 +12.4,68.0231911206,66.7184137473 +12.5,65.7072852301,66.8249549297 +12.6,63.5706187814,64.1162672446 +12.7,61.6994275668,62.2945728271 +12.8,62.5693145123,59.3514644807 +12.9,58.4821715477,57.7050069502 +13.0,55.1825814263,52.568004121 +13.1,51.9843713649,51.8472760414 +13.2,49.1153869962,50.6745159715 +13.3,47.6504364963,49.89483791 +13.4,46.2574591666,49.9246608272 +13.5,48.0002827867,49.0013422348 +13.6,50.6418829928,51.9252319892 +13.7,52.5945754411,54.4026498551 +13.8,56.1471681775,59.1245172133 +13.9,59.2727029021,62.0532560377 +14.0,62.0343211501,65.5105443161 +14.1,67.0281222937,70.1513292929 +14.2,69.8714204659,73.8293662173 +14.3,73.7213871058,76.8399646417 +14.4,77.8268703964,79.4529982499 +14.5,81.6762666868,79.9843972585 +14.6,82.8203589588,84.2091969786 +14.7,83.6520306822,84.8475991818 +14.8,82.4393223408,86.7658981498 +14.9,81.5827495803,84.1912232983 +15.0,80.6948340749,84.5475354955 +15.1,79.5634953607,82.9046514633 +15.2,79.1997389167,82.7838119238 +15.3,79.4730933497,81.9091977363 +15.4,77.5322513502,80.9007674441 +15.5,78.6046801596,80.9525669575 +15.6,80.1476258749,83.8919389034 +15.7,81.0554668928,84.7805500981 +15.8,84.2623846151,86.1572786746 +15.9,87.7398487516,88.0635172013 +16.0,92.2777918457,91.4436263433 +16.1,95.0153708699,94.6875501608 +16.2,98.1402515847,97.2673222902 +16.3,99.0442204825,99.0443443833 +16.4,99.3809024779,99.4925112793 +16.5,99.7496024736,99.1151424789 +16.6,97.416674859,96.7786829322 +16.7,96.90951473,93.6018531673 +16.8,93.9813880533,90.9026777731 +16.9,90.159317405,87.7823542233 +17.0,85.7610475405,85.2894675838 +17.1,83.676998726,80.4718409247 +17.2,78.8375063478,78.7006551436 +17.3,75.8803880378,74.5247979893 +17.4,71.7820499067,72.6235431351 +17.5,71.5268259028,71.795557086 +17.6,69.2408151416,71.8895432068 +17.7,69.7110560354,73.4888902158 +17.8,69.863455163,74.6056657898 +17.9,73.9620811684,76.4350721086 +18.0,75.0942752784,76.6739244755 +18.1,76.6057803452,80.7680687112 +18.2,79.075110762,81.0557059363 +18.3,82.2967590867,81.80196019 +18.4,84.5428028392,84.6778965839 +18.5,83.9408687064,84.5964192464 +18.6,83.9595521156,84.3699554645 +18.7,84.2658479091,84.890781989 +18.8,81.6683522622,81.3995394184 +18.9,80.410854177,81.0011155434 +19.0,78.982860773,81.1697682686 +19.1,77.0415076886,78.1851686625 +19.2,74.5091842558,74.9528876973 +19.3,73.5918080664,73.0260246757 +19.4,74.1063080905,72.7819774553 +19.5,73.0295563899,72.7568633504 +19.6,73.0484905685,75.1779195684 +19.7,76.932969276,74.8073894848 +19.8,78.9505943861,79.0995996939 +19.9,79.4147285256,79.931801337 +20.0,84.0917642799,84.8183275725 +20.1,87.7693542034,85.5584337772 +20.2,88.6557150312,87.2972479844 +20.3,92.0576077728,88.0305798279 +20.4,91.1108916729,90.2867873862 +20.5,91.6594739621,87.4328509669 +20.6,91.9658284782,86.4791395793 +20.7,88.6649081008,85.7470693951 +20.8,83.9001944066,80.6452739623 +20.9,80.1894248511,77.4346790036 +21.0,74.2286910935,74.7230157358 +21.1,72.1809252691,71.8563165674 +21.2,67.7286535096,66.6260636686 +21.3,64.0837248059,63.123586082 +21.4,63.3387940695,62.2756325183 +21.5,62.1184680939,59.7605037953 +21.6,61.8593802861,58.4855553194 +21.7,61.8300653916,57.6668109917 +21.8,60.7518166014,57.0861780536 +21.9,61.6664149101,57.7109453013 +22.0,61.2845067956,59.9542256251 +22.1,63.0549047933,60.5258452978 +22.2,64.7963207019,61.6996129149 +22.3,64.3299621028,60.2047602965 +22.4,63.1808088495,62.1301295715 +22.5,60.7720280509,61.0241696356 +22.6,58.3318027984,59.6014015065 +22.7,55.7687985025,57.9833064303 +22.8,50.922042306,54.9330324297 +22.9,49.0568269525,51.8082669982 +23.0,46.2789970813,49.2825047518 +23.1,44.0923016738,45.5031410702 +23.2,41.7323631394,43.2421434755 +23.3,40.2089202693,42.2771538493 +23.4,41.6330453763,41.0517373643 +23.5,39.7681415271,40.1651952285 +23.6,42.0652504181,42.2312865975 +23.7,43.4698552576,42.8677096106 +23.8,46.2034095144,44.5493191327 +23.9,48.6204774187,45.7202231937 +24.0,51.0964223127,51.0328871792 +24.1,54.4377492478,55.270120853 +24.2,59.6029133889,58.3758027287 +24.3,61.7671824624,61.7826907087 +24.4,62.4787873381,62.4926525377 +24.5,63.7392876862,63.4602871664 +24.6,65.8247740604,63.9130277581 +24.7,66.9958205775,64.4832619751 +24.8,66.4071924335,65.6207496143 +24.9,64.1031204559,64.6857516061 +25.0,62.5904080918,63.3845233412 +25.1,60.2009578824,60.3449240772 +25.2,57.1889170493,60.1216211411 +25.3,55.217251795,56.2265835587 +25.4,54.4882743254,55.206004389 +25.5,54.8478825212,55.9515622421 +25.6,56.3903839848,56.1918473181 +25.7,59.6967315916,58.0929143664 +25.8,62.0558574783,60.467115141 +25.9,64.3750916205,61.1660905111 +26.0,66.3288152843,63.0101514678 +26.1,66.5998395226,65.2241635379 +26.2,66.9924196867,66.0358230188 +26.3,66.4077178537,65.7769083817 +26.4,66.0315636732,65.9683521492 +26.5,63.3666670976,64.2079428805 +26.6,61.5954289104,63.4116154172 +26.7,58.8852656428,60.9664415572 +26.8,56.658558371,56.6322772472 +26.9,50.6843155582,53.6121149983 +27.0,48.3251126253,48.5777637435 +27.1,44.2411257469,45.4659926287 +27.2,38.9928537297,40.3049659605 +27.3,36.1051112977,36.413860562 +27.4,31.3476793625,32.5706265586 +27.5,30.2907363799,30.2875848372 +27.6,29.5848734059,29.6709157265 +27.7,26.8123844874,28.4221658566 +27.8,27.2542087572,27.9666974948 +27.9,28.8049588734,28.3890822373 +28.0,30.025412733,29.9012679429 +28.1,29.8970383199,31.5031355739 +28.2,28.4542361405,32.9075146062 +28.3,28.4309351918,32.8661312589 +28.4,29.5304393515,30.7149326804 +28.5,30.194312984,31.4760575287 +28.6,31.1333059641,29.1006483116 +28.7,28.8311840132,28.1047077888 +28.8,24.9770355736,23.8956521858 +28.9,24.440034846,20.0833068206 +29.0,20.7741329442,17.720953038 +29.1,18.1422733637,14.1818140871 +29.2,14.831669091,12.6767648109 +29.3,12.4083290138,10.6444621104 +29.4,9.40060591862,9.44232714691 +29.5,9.40451599665,9.28337860408 +29.6,8.29068134342,10.4635776868 +29.7,8.58540087588,11.9803157663 +29.8,9.60635860659,13.3846345097 +29.9,11.4765529543,14.590569453 +30.0,12.1673583106,16.8750550654 +30.1,13.4369350402,16.8488605358 +30.2,13.2666835545,19.1150605138 +30.3,13.7639235668,17.9524374729 +30.4,14.6942938916,19.7197371657 +30.5,14.0418267927,16.5159741025 +30.6,12.2012555845,15.3953994851 +30.7,9.96941357335,12.1316002776 +30.8,6.42845461827,8.49153053842 +30.9,2.4993323934,3.11223330888 +31.0,-2.43836058324,-2.33567708474 +31.1,-4.96305888406,-5.52913244172 +31.2,-10.833279546,-8.88941918117 +31.3,-12.4006280973,-13.5349287251 +31.4,-17.0140856484,-17.2190096348 +31.5,-20.1154990146,-18.6246184665 +31.6,-20.3764294129,-21.7613625589 +31.7,-22.707982471,-21.8017252075 +31.8,-23.3879252289,-21.8310159215 +31.9,-21.9910575144,-21.5912609622 +32.0,-21.9886995943,-21.9303864311 +32.1,-21.2296774309,-21.3752717445 +32.2,-22.5545937417,-21.7858620512 +32.3,-22.1800635968,-22.7317875633 +32.4,-22.8286781397,-22.9637522645 +32.5,-24.1743842534,-24.1875485313 +32.6,-24.5177615261,-25.4042608817 +32.7,-26.9558071917,-28.2734633186 +32.8,-27.8949099145,-30.7617401185 +32.9,-29.5102752655,-35.6059664746 +33.0,-33.1306853097,-37.3367579138 +33.1,-35.1822330189,-40.6134868997 +33.2,-39.5601742563,-43.0349995532 +33.3,-41.4699835605,-46.5923801259 +33.4,-44.9036263387,-46.626070422 +33.5,-46.1740261284,-46.5457653245 +33.6,-43.6743813946,-46.1116663837 +33.7,-40.8176111007,-43.7035143798 +33.8,-35.9965380343,-40.3314526884 +33.9,-34.2002504293,-36.9230860322 +34.0,-29.2953638626,-32.9292223351 +34.1,-25.0396724145,-28.358616166 +34.2,-19.9279038871,-23.5925934737 +34.3,-17.2207959857,-19.6380904715 +34.4,-14.2319420585,-16.0458725956 +34.5,-11.8204414318,-13.9059062071 +34.6,-9.09984415607,-13.9795527451 +34.7,-9.05287203314,-11.9626536702 +34.8,-8.4368685912,-10.427894327 +34.9,-10.8632406266,-12.7063789893 +35.0,-12.4685815008,-12.7957954032 +35.1,-13.8990929034,-12.8556259141 +35.2,-14.8174844705,-12.8539703662 +35.3,-16.6045131622,-13.0177180446 +35.4,-14.3458047658,-12.7766715068 +35.5,-14.8732963566,-12.6246371055 +35.6,-14.3502554004,-11.9549294489 +35.7,-12.173234088,-8.88624804699 +35.8,-9.61304391819,-7.47277657063 +35.9,-6.59824137774,-5.00587187241 +36.0,-2.86117321469,-2.73309327199 +36.1,-0.298285975611,0.682718977841 +36.2,2.85365895265,2.17305357113 +36.3,4.43634946353,3.4046926959 +36.4,3.53565588889,4.61109498816 +36.5,2.25364863169,2.35644309239 +36.6,1.5272694141,3.08134388846 +36.7,-0.611016025878,0.86617801799 +36.8,-1.91465480079,-1.39654256237 +36.9,-4.66312790583,-4.40491692672 +37.0,-7.11195431533,-6.27519324821 +37.1,-10.0713983555,-9.00546442068 +37.2,-13.7204044649,-12.682156623 +37.3,-15.370631228,-13.9546109956 +37.4,-18.085043853,-16.7113788429 +37.5,-19.5095182644,-16.7678221924 +37.6,-18.1184914613,-15.4960431042 +37.7,-16.5423164644,-15.9684330553 +37.8,-14.2958378562,-14.3415364287 +37.9,-12.2816754181,-11.2035327174 +38.0,-7.86642704437,-10.4301779691 +38.1,-7.25090929683,-6.54123263683 +38.2,-4.64427798072,-6.29854963799 +38.3,-1.32299030611,-4.1907676362 +38.4,0.238874690696,-1.15063471189 +38.5,0.113570227557,0.566086722129 +38.6,0.562835902947,0.890240249095 +38.7,-0.351025288543,-2.00529298875 +38.8,-2.66324720846,-1.82887000691 +38.9,-5.3230115745,-6.19829434707 +39.0,-6.67699608002,-3.77484201124 +39.1,-8.39509139309,-5.88096824596 +39.2,-8.24855125024,-6.5285755853 +39.3,-7.47306965466,-6.93324398798 +39.4,-5.54852091498,-8.09489897641 +39.5,-4.70386796308,-6.569527946 +39.6,-4.15186149636,-4.9872368242 +39.7,-2.68600361954,-2.49163412404 +39.8,2.00800060785,-0.49608770401 +39.9,5.72413436386,1.87594090001 +40.0,8.46138332556,5.0992619815 +40.1,11.106053965,10.1817948699 +40.2,12.6646523452,11.557311057 +40.3,16.9862351458,15.3177862107 +40.4,16.0695746205,17.4909748671 +40.5,17.9011943755,17.4339504174 +40.6,15.7940449625,15.3314846911 +40.7,14.4342268349,16.0876446905 +40.8,11.0160486778,13.3631138123 +40.9,8.61155586285,11.7882587429 +41.0,3.1988193989,8.49444100998 +41.1,2.13221979867,6.85822125429 +41.2,0.0814072521895,2.54099453359 +41.3,-2.97535693847,-0.521243412692 +41.4,-4.47924827367,-1.80193493019 +41.5,-5.03813394984,-4.09286042119 +41.6,-4.62258738091,-3.1471490313 +41.7,-2.60732942351,-5.09597965835 +41.8,-0.946279198413,-4.42475847523 +41.9,0.179065499052,-5.32282895105 +42.0,2.33021147121,-1.60738990404 +42.1,3.74767545021,0.0668221442573 +42.2,5.26838016493,3.05759344334 +42.3,6.07324121005,4.01831511596 +42.4,5.15461997613,4.86872127103 +42.5,4.17122220413,2.16627073262 +42.6,2.41334839033,2.68134112658 +42.7,0.255901530539,1.38274285943 +42.8,-0.733272724675,-1.94770358191 +42.9,-1.56936054806,-4.88956624912 +43.0,-2.05743262265,-4.79930712736 +43.1,-4.17694059711,-7.07070461929 +43.2,-5.31412773399,-7.8428854146 +43.3,-7.0653620891,-8.61705815064 +43.4,-7.10417537713,-6.62758794853 +43.5,-6.16603264232,-5.42130911396 +43.6,-4.65696880029,-2.8355970286 +43.7,-2.57981681059,1.14953303761 +43.8,3.33312872112,2.05042499363 +43.9,6.94184071246,7.54884705534 +44.0,12.5024542067,13.0181972688 +44.1,17.1530107507,16.8924667843 +44.2,21.4345848828,23.0444955048 +44.3,26.4287214268,26.9071723087 +44.4,27.8795540522,29.0998156187 +44.5,29.6287249969,31.5364369461 +44.6,33.7348864686,31.6570240507 +44.7,33.2055875608,31.5069383444 +44.8,34.0499376098,31.6803172035 +44.9,34.1257271878,31.15647826 +45.0,34.4540679031,31.3603378949 +45.1,33.0241216185,30.9080989054 +45.2,32.7153641725,31.3579228137 +45.3,30.3506227622,31.1301158888 +45.4,32.0607365123,32.5876003993 +45.5,31.8855347306,33.2716016113 +45.6,33.7920662507,36.0079842973 +45.7,34.4207927455,38.0658534735 +45.8,38.0880170637,39.5674871308 +45.9,39.4302827275,42.0443475665 +46.0,43.9496205352,44.0238495568 +46.1,48.6785753558,47.8284931751 +46.2,51.5899933034,48.3585160108 +46.3,54.0093834208,50.6229557657 +46.4,54.6020210338,49.2790827449 +46.5,53.6302133526,51.2264229882 +46.6,51.8720602215,50.434580737 +46.7,49.2343183653,48.4392337937 +46.8,47.8925093001,45.2088923359 +46.9,46.0842584125,42.1352208907 +47.0,41.9813885507,40.8893949819 +47.1,38.6161637478,35.9453425349 +47.2,34.7736612891,33.5242541621 +47.3,30.8160873003,29.4805886674 +47.4,28.6175442486,28.8022950556 +47.5,27.9245543619,26.176852684 +47.6,27.2740802056,27.7218299844 +47.7,27.236388634,28.4770503589 +47.8,28.7677175567,30.4952457341 +47.9,30.2954222955,31.6452430032 +48.0,34.2104745406,34.1225893718 +48.1,35.7247307461,37.2207627292 +48.2,37.7170895298,41.9649090214 +48.3,39.6252495798,42.5357333513 +48.4,39.7089434073,44.7224955559 +48.5,41.4058929122,45.3779664865 +48.6,40.8701277264,45.2837926096 +48.7,40.2703748352,43.0781888724 +48.8,38.6719560916,39.2282072911 +48.9,38.850450338,39.3242479803 +49.0,35.9180463813,36.0489903556 +49.1,35.1571780542,33.2921807719 +49.2,33.2587403883,31.7224633978 +49.3,32.1237167168,30.7749951912 +49.4,30.4834295699,32.7224907448 +49.5,31.7645114833,33.0744611109 +49.6,33.9446173469,33.1524569341 +49.7,36.250493763,34.4540216023 +49.8,38.760111026,38.6382834373 +49.9,41.1265585211,39.8260467276 +50.0,42.8457486879,40.363013159 +50.1,46.7695951135,45.9907328913 +50.2,46.7474844937,46.3123723557 +50.3,49.6980816006,47.859432665 +50.4,50.5297987342,49.6088357988 +50.5,49.9389989002,49.9497314551 +50.6,49.8172125725,49.6850931422 +50.7,47.0375090713,48.6506439151 +50.8,44.8534092774,46.1555695794 +50.9,44.0469376827,43.4910436235 +51.0,41.6304979853,40.8343202211 +51.1,37.9314245949,36.1287582111 +51.2,35.2362489434,35.305516124 +51.3,31.8466553767,31.1355164783 +51.4,28.2067156506,28.1806929864 +51.5,25.5207735022,25.9922357306 +51.6,24.6639114182,25.4666112146 +51.7,24.3895785822,24.0360202844 +51.8,24.900586257,25.9246592643 +51.9,26.3797521027,26.6552624014 +52.0,28.73271859,29.948216853 +52.1,28.184010213,31.7796600944 +52.2,30.3787069311,33.5045814774 +52.3,29.9546392394,34.612018277 +52.4,30.6444786028,33.2502547275 +52.5,29.2252177745,34.735823529 +52.6,29.7092428024,34.3740934541 +52.7,29.3544222688,32.4880577481 +52.8,28.4623065951,29.8597570926 +52.9,29.1970931435,27.4039780208 +53.0,27.1430175913,24.1374361719 +53.1,24.1168716509,23.2259717371 +53.2,22.2827614726,20.5185832953 +53.3,20.7446841789,19.1664516317 +53.4,19.5951132713,18.6427621554 +53.5,20.1737721382,21.2667283929 +53.6,22.2152126889,23.8159108953 +53.7,26.227416162,25.6668765496 +53.8,31.1876103401,29.7845414478 +53.9,35.1977642962,34.885488497 +54.0,39.3510447717,39.8217295478 +54.1,45.5097038032,44.9081597143 +54.2,47.8744909947,49.5956939021 +54.3,52.8659329059,53.9664565764 +54.4,55.6113696028,56.8498964364 +54.5,57.4293517414,59.5997911581 +54.6,58.7134771628,61.3324329611 +54.7,60.6707576696,64.3831763434 +54.8,60.3175245353,63.59156618 +54.9,61.4839454465,64.6585200449 +55.0,61.3178160918,64.761215867 +55.1,61.8798433989,65.3234035106 +55.2,60.4546427908,66.1348356426 +55.3,62.5010886395,65.333114414 +55.4,61.9136362767,65.8449391234 +55.5,63.3355741692,67.4739852105 +55.6,65.9267919663,71.0707506521 +55.7,68.819011615,72.704451194 +55.8,73.3154230222,75.1915655437 +55.9,76.09681615,78.3927751574 +56.0,79.1201918635,80.4937137147 +56.1,82.2920427852,84.583966579 +56.2,84.4645520427,87.0188647074 +56.3,86.1706156039,88.2354970583 +56.4,87.8822896296,90.6790118701 +56.5,88.0718775646,90.1498445973 +56.6,87.2690576229,90.4181878378 +56.7,85.5277807009,88.6486487194 +56.8,85.1637635537,88.0457440373 +56.9,82.7711309611,85.3886633602 +57.0,82.9009941746,82.0589146682 +57.1,80.4585430693,80.4374396336 +57.2,77.9316693832,78.3058950245 +57.3,76.9768340642,73.8647799717 +57.4,75.2178301025,72.8332512773 +57.5,75.1285969802,73.5291496806 +57.6,73.7477260526,74.9435804684 +57.7,76.2210224138,77.125204117 +57.8,77.1936932387,78.4440868294 +57.9,79.4186670592,81.5870046878 +58.0,81.983246346,84.305755959 +58.1,83.7021526843,85.9642693207 +58.2,88.6788585447,89.3275584762 +58.3,91.5174074143,92.1984997397 +58.4,94.0498516767,94.2143567491 +58.5,95.7126458728,97.0681635977 +58.6,96.6128739247,94.5809166526 +58.7,96.8514264801,95.3331898335 +58.8,95.4790429761,93.4999364689 +58.9,91.076680866,92.2898998368 +59.0,89.6050820796,88.6756463598 +59.1,87.6617927286,89.4989972484 +59.2,86.5924398863,89.6074169328 +59.3,86.8499703301,90.3553721076 +59.4,87.4810789396,90.3030797023 +59.5,88.1655825,92.9698161684 +59.6,91.2388311902,93.5115739393 +59.7,92.2643425399,95.4374916186 +59.8,95.801223441,98.2887912609 +59.9,98.9269690234,100.422649216 +60.0,102.703423792,104.073315747 +60.1,105.111097031,105.427139898 +60.2,107.570851113,108.731204354 +60.3,108.123030631,112.178282841 +60.4,110.342243081,112.66393195 +60.5,111.734922381,114.611862026 +60.6,110.826074291,113.028627076 +60.7,110.697560467,112.30064727 +60.8,109.487605194,108.876178823 +60.9,107.317328527,106.57992428 +61.0,105.10069011,104.464740247 +61.1,101.756862528,99.5118414445 +61.2,98.7888025258,97.7513636378 +61.3,95.1328291336,92.7479264099 +61.4,92.7334412324,90.6963007105 +61.5,90.4642977094,86.9919911649 +61.6,89.6951322234,86.7032725796 +61.7,90.2305449392,87.5769041879 +61.8,91.2340108812,88.6264025856 +61.9,93.689314185,90.458090035 +62.0,94.4075690821,92.4501162118 +62.1,95.572877101,92.0320433546 +62.2,96.200959082,95.433817443 +62.3,96.8834755939,97.7059926312 +62.4,96.8083222838,96.9343151208 +62.5,94.1506749353,94.4446489782 +62.6,94.5634915776,94.0217126732 +62.7,92.6155289157,92.532317656 +62.8,90.2684332121,88.8280866907 +62.9,88.4904762768,87.6116183171 +63.0,85.38898454,85.7001601601 +63.1,84.2505410091,83.3785166791 +63.2,82.0890724442,81.3889659769 +63.3,79.9478602727,81.2334605098 +63.4,78.5138653331,79.13528157 +63.5,79.9232739273,79.580360954 +63.6,79.8625243475,81.3457794749 +63.7,80.2663853114,85.428827052 +63.8,83.9295101067,89.7132589353 +63.9,89.0588510958,92.4995155904 +64.0,93.7648189598,97.270341734 +64.1,97.6179492333,100.604066998 +64.2,102.050035555,104.590343665 +64.3,103.321792722,108.270002755 +64.4,104.257073002,110.375245687 +64.5,108.143115301,113.187770331 +64.6,110.526163924,113.873713699 +64.7,112.332967466,113.068527825 +64.8,111.143827882,111.491917588 +64.9,109.919495007,113.098997491 +65.0,109.723428364,111.177513683 +65.1,107.925076794,109.768883493 +65.2,107.493620092,108.849793749 +65.3,106.868789493,108.05892999 +65.4,104.787180867,107.565976676 +65.5,105.554934969,105.948282046 +65.6,104.640712285,107.481745004 +65.7,106.066072421,108.683326824 +65.8,108.933225568,110.56241902 +65.9,110.384302127,111.479885399 +66.0,112.041820526,113.536378963 +66.1,114.88665753,116.562647587 +66.2,118.308987443,117.519045036 +66.3,118.38229677,117.78311642 +66.4,120.001108753,117.73114421 +66.5,120.460696777,116.557289928 +66.6,118.119908453,115.923564569 +66.7,114.599975365,113.569766674 +66.8,109.024529823,110.651826082 +66.9,106.193884029,108.308020865 +67.0,102.110691594,104.126974231 +67.1,98.1933494508,100.479413444 +67.2,95.4164506173,95.5257552306 +67.3,91.742864597,91.6434598079 +67.4,88.5006117902,89.5780639044 +67.5,84.5678746614,88.1439385808 +67.6,83.6025978136,87.0162417075 +67.7,83.9531423367,85.1120931179 +67.8,83.7545224214,85.1977942063 +67.9,85.7938496003,84.6512046386 +68.0,86.7790708265,87.1179996674 +68.1,90.3673740731,86.8557169345 +68.2,91.1954680235,89.3940619375 +68.3,91.5469487997,90.0955847674 +68.4,90.4880932374,90.4404408825 +68.5,89.1775127986,89.7146418362 +68.6,89.4567737837,87.7619422793 +68.7,87.0603123448,87.6116318395 +68.8,84.3843164772,82.6318969165 +68.9,80.639368071,79.8719304394 +69.0,75.625081476,77.1556215363 +69.1,72.2645611197,72.2537227978 +69.2,70.611777638,70.8288160016 +69.3,68.0143630535,69.2396319978 +69.4,65.3148342988,67.6922601434 +69.5,65.3517620311,68.0261326666 +69.6,65.4465614463,66.1255626936 +69.7,67.9702484546,66.7770880051 +69.8,68.9536067999,68.893550996 +69.9,72.0388515365,70.0876900028 +70.0,73.1493520684,71.6945354914 +70.1,76.2169872417,73.8749303977 +70.2,75.0041158988,75.6558815243 +70.3,76.5374349361,76.0526001754 +70.4,75.3127927835,75.8587725391 +70.5,72.9354279475,74.4329584664 +70.6,72.1651321068,71.3918825742 +70.7,69.6513849233,68.0104652709 +70.8,66.2425990946,65.8051447688 +70.9,62.9174299244,61.5580145267 +71.0,56.4194250082,57.037473789 +71.1,51.3236744434,53.8116901344 +71.2,46.0403732715,48.1894205429 +71.3,44.1275994348,44.5452075273 +71.4,38.8909610378,40.637121083 +71.5,36.1654332739,37.3534641517 +71.6,35.2038443984,36.3591203381 +71.7,33.3339528962,35.1274626058 +71.8,32.5914824401,34.8436107722 +71.9,35.458651856,35.3858552503 +72.0,34.4518053418,36.7183691348 +72.1,34.5859991767,35.4887897126 +72.2,34.5955462297,34.7884707568 +72.3,33.9519750026,34.8595323384 +72.4,32.1975906472,34.1739358601 +72.5,31.0414468417,32.7424115792 +72.6,28.2543112536,30.6560845728 +72.7,26.4010406023,27.7527907386 +72.8,22.5380909241,22.1892360234 +72.9,19.8855737113,19.9818488913 +73.0,15.7857831032,18.1137702051 +73.1,12.334616864,16.2939590744 +73.2,10.4144759458,11.2602316127 +73.3,9.93608655935,9.48392681404 +73.4,10.7848950958,9.17142608365 +73.5,11.9954121847,9.68933508107 +73.6,11.547020838,10.2107249214 +73.7,13.4909397101,12.8334641293 +73.8,15.8102015128,15.206677857 +73.9,18.1422402137,16.5409041496 +74.0,21.6177386146,21.9031545267 +74.1,26.3044047107,25.7306473005 +74.2,29.1539027244,29.5325337482 +74.3,31.2735512882,32.0444858051 +74.4,35.2424310103,35.0288526717 +74.5,36.2158201374,35.7809111929 +74.6,36.3424089884,35.9761756793 +74.7,35.4224432814,36.677158795 +74.8,35.619665724,35.0913372194 +74.9,34.3186302955,34.7650953081 +75.0,36.2537033647,32.6928643951 +75.1,32.6372890661,30.9552151328 +75.2,33.2109977682,31.275229365 +75.3,31.0729872555,31.3865408752 +75.4,31.227674783,31.4384111374 +75.5,31.7857372604,31.8972004882 +75.6,31.4039840372,32.8854235363 +75.7,32.1437470842,34.662409488 +75.8,31.7704218846,35.9468905837 +75.9,36.2920610955,37.7462043299 +76.0,38.306024998,39.3633540372 +76.1,42.9590401704,42.4183191594 +76.2,45.1553280632,44.0677786795 +76.3,46.1919603436,44.4299996409 +76.4,45.6566318619,46.5774855886 +76.5,43.295105903,46.1933179114 +76.6,39.8890263319,44.0826718007 +76.7,40.1797695705,40.8002048308 +76.8,36.0304486563,35.1176660193 +76.9,33.3386334521,34.4021777409 +77.0,29.426359784,28.2569410413 +77.1,25.1350544254,25.8599139079 +77.2,23.8358605871,21.9072532761 +77.3,20.3420522136,20.25909234 +77.4,17.8125229961,18.0346734722 +77.5,15.1384264498,16.7812459449 +77.6,14.647106819,18.2719224594 +77.7,13.2286756548,18.4509049849 +77.8,15.971927707,18.3662354342 +77.9,17.6167207799,21.0867461842 +78.0,22.175826699,21.9038692912 +78.1,23.6951205782,23.8374722602 +78.2,25.3190526515,27.2113079034 +78.3,26.434581699,27.4395926987 +78.4,27.672455364,27.6010654202 +78.5,27.9435504976,28.2153975555 +78.6,28.537059054,27.1470516959 +78.7,26.9703012489,26.8529694147 +78.8,27.1116235784,24.5362300663 +78.9,25.4125767892,22.2225843882 +79.0,23.6091534519,18.561753937 +79.1,22.1300607594,16.7695563408 +79.2,18.2906867692,16.7092549687 +79.3,18.4050772843,14.06918641 +79.4,16.1121086665,14.0790183187 +79.5,16.5411284549,13.5566420754 +79.6,17.4953794647,14.7998192912 +79.7,16.2402506113,15.2853600479 +79.8,17.3063050433,15.4321170518 +79.9,17.2051893691,21.4850546356 +80.0,21.1461386095,22.6611211317 +80.1,22.4282551558,26.4558762472 +80.2,27.8553176556,25.8607149879 +80.3,31.9622531492,30.3628720767 +80.4,34.8982617188,30.5235956001 +80.5,33.6109246086,31.5775408386 +80.6,33.9335593471,28.2688260538 +80.7,30.3618571279,27.4043419145 +80.8,26.8478122309,24.27062595 +80.9,21.9987602741,21.3936017145 +81.0,17.9617528266,16.3836078656 +81.1,14.1043826579,12.7677605257 +81.2,11.142924413,7.79036552227 +81.3,7.66149950171,5.74115834599 +81.4,4.88980531789,1.35224361846 +81.5,4.56152458398,1.83494570413 +81.6,2.0800048731,0.558500391385 +81.7,0.487010372415,-1.37724587593 +81.8,1.70400944967,-0.211255629718 +81.9,3.16720675965,-0.00272646111593 +82.0,3.06138661369,1.53767963851 +82.1,4.71254042965,2.700682967 +82.2,6.3096422342,4.67410427484 +82.3,4.8459530808,3.65801818155 +82.4,6.15909938935,3.197490518 +82.5,5.7117161492,2.11271307015 +82.6,3.55134417485,0.413588828256 +82.7,0.355579838007,-0.734446259134 +82.8,-1.82633640334,-2.4454316258 +82.9,-3.76236520379,-5.02208379084 +83.0,-7.46806257914,-6.83982770524 +83.1,-10.6782289654,-9.01247919112 +83.2,-11.7097527562,-12.585111692 +83.3,-11.8177822818,-14.2070630279 +83.4,-12.4593146836,-14.59412611 +83.5,-12.3063490134,-12.8863196545 +83.6,-11.1053391418,-11.4327603216 +83.7,-10.2254732298,-9.20918704188 +83.8,-7.18542156937,-5.97592328052 +83.9,-2.65953324286,-0.324964095402 +84.0,2.1395232662,3.03018693571 +84.1,5.53538196406,6.94599567561 +84.2,8.73388990489,11.0479920369 +84.3,11.6275657289,14.0223773772 +84.4,15.1771417713,16.6494740132 +84.5,16.8065501742,17.7164326316 +84.6,17.4224627947,19.6454282373 +84.7,18.3785469419,17.6273061969 +84.8,17.8958776584,17.205948586 +84.9,17.0505235048,16.9103694105 +85.0,14.2365241108,15.2657280724 +85.1,12.9046482077,12.7000530692 +85.2,8.90087945206,11.0222666725 +85.3,7.22925124961,10.3688407655 +85.4,7.58601506205,11.5481987511 +85.5,7.28269070071,12.9259254321 +85.6,9.25887682065,14.0275578161 +85.7,11.9131372885,14.9835668002 +85.8,13.4850090937,15.6993967671 +85.9,18.3903157859,17.7796842947 +86.0,20.718482017,20.2224403819 +86.1,21.2667922417,22.9590337234 +86.2,22.1920959742,24.2018727301 +86.3,23.6210348103,24.1257523979 +86.4,23.4154134722,24.126294855 +86.5,23.4884371329,22.9008106578 +86.6,22.3131985874,21.3276325653 +86.7,19.5364228072,18.5665814433 +86.8,17.9484324102,16.1116239037 +86.9,12.2099732988,14.0770263594 +87.0,8.33447435008,10.139461458 +87.1,3.20122682408,5.8526845729 +87.2,-0.525925823994,1.23962624344 +87.3,-6.46065912667,-2.32745188761 +87.4,-5.71411899115,-2.74634903567 +87.5,-7.31642676198,-3.97289527194 +87.6,-7.74023998166,-7.45966669957 +87.7,-8.79620691179,-7.29171087183 +87.8,-6.65715591997,-8.03959334112 +87.9,-5.27898208057,-5.91385964427 +88.0,-4.24154482519,-4.2681756885 +88.1,-1.14699530826,-1.52087191382 +88.2,1.96464176697,0.765283355484 +88.3,3.6849276416,1.98995973072 +88.4,3.52451668843,1.95491269991 +88.5,3.63555605463,2.66319331428 +88.6,1.5700147653,1.65773221793 +88.7,-0.147385317149,-0.693859556669 +88.8,-1.89548445342,-0.996762319678 +88.9,-2.78844718342,-4.62082022863 +89.0,-3.7807670275,-5.04625276161 +89.1,-4.2077528443,-6.77803826568 +89.2,-5.84503388245,-10.818876848 +89.3,-7.02713198396,-11.840937937 +89.4,-8.50881685349,-11.6856007869 +89.5,-8.91921663612,-12.260542545 +89.6,-9.42553800059,-10.2795000624 +89.7,-9.37209689239,-11.3035978901 +89.8,-8.05057439504,-8.15516612174 +89.9,-5.16958261644,-4.95562627755 +90.0,-3.22048818916,-4.14882526457 +90.1,-1.69309510542,-1.26764197363 +90.2,-0.375916133641,-0.496139927497 +90.3,1.10041477212,1.32819587249 +90.4,0.914090227823,1.65607568018 +90.5,0.30103767093,1.4208871429 +90.6,-1.81090961127,0.559011424318 +90.7,-3.54851443509,-1.82353162907 +90.8,-5.64527884492,-3.80620519399 +90.9,-7.73717021757,-7.22003339704 +91.0,-12.1665630176,-12.1440542529 +91.1,-16.6772211693,-16.4367091571 +91.2,-19.6766642587,-19.7970757844 +91.3,-22.284420434,-23.9958309901 +91.4,-25.7000659239,-25.3655529571 +91.5,-24.8850677099,-27.2613337041 +91.6,-28.2636335707,-30.3755812573 +91.7,-28.5456481663,-30.6004858127 +91.8,-26.2158732064,-29.9893471055 +91.9,-25.4052153481,-27.4904321667 +92.0,-23.9434161988,-27.4132443235 +92.1,-22.0277821134,-25.7504790863 +92.2,-20.0089854799,-26.1729627836 +92.3,-20.9109267901,-24.6997487028 +92.4,-20.7522172831,-24.74521888 +92.5,-21.2380724382,-23.6682114117 +92.6,-21.5269710731,-24.0094460704 +92.7,-24.7965350076,-25.5557021846 +92.8,-26.1428350186,-28.4669282572 +92.9,-28.4867986399,-32.1676947592 +93.0,-32.8505996914,-33.7870405668 +93.1,-35.379652417,-34.2573641935 +93.2,-35.8355441304,-35.1515460992 +93.3,-38.023919527,-35.804375516 +93.4,-37.7430850036,-38.7688361249 +93.5,-37.8863383253,-37.5659015128 +93.6,-36.806590421,-37.0666641932 +93.7,-33.8503373031,-35.6764922585 +93.8,-28.9323606429,-31.1605200778 +93.9,-23.6504462745,-27.095055018 +94.0,-19.8737422039,-23.16129593 +94.1,-14.8985153731,-18.0435575197 +94.2,-9.3069961021,-13.4201340233 +94.3,-4.99013517014,-7.13232403217 +94.4,-1.05042960993,-5.4594106118 +94.5,1.78440249132,-0.900535939452 +94.6,2.88712629576,1.31010658085 +94.7,6.15884341076,3.36723752632 +94.8,5.98192715542,2.6218456943 +94.9,5.57195040195,4.69244905513 +95.0,2.85705927151,5.49347014121 +95.1,4.36405409899,5.10310529332 +95.2,4.83092541287,5.29383832935 +95.3,4.31381786208,4.93354698818 +95.4,6.33345286308,6.0272173773 +95.5,5.17552812193,6.58034325221 +95.6,9.4560826688,9.17468868756 +95.7,11.1986922278,9.66794082533 +95.8,15.9557085506,14.0726801805 +95.9,20.0068737022,16.6376244965 +96.0,23.7405820296,20.1526196409 +96.1,25.9279139347,25.0299777304 +96.2,27.5822624448,26.3638150425 +96.3,30.0302926074,29.1553255454 +96.4,30.7797811908,29.162982622 +96.5,33.8532722805,29.4059713792 +96.6,32.0418021753,30.8975084575 +96.7,33.5989499869,32.0500938905 +96.8,29.8831214618,29.1891040369 +96.9,28.5859606087,28.1247125214 +97.0,25.0279927317,24.5657913156 +97.1,21.3765342702,23.5209534583 +97.2,19.2284811286,19.502680106 +97.3,16.9726578425,18.7264236944 +97.4,15.7719433036,17.4887423816 +97.5,16.3452949272,18.2004504625 +97.6,15.9534007437,18.7483920012 +97.7,18.9038816901,20.7565510036 +97.8,22.7387574466,24.2826566194 +97.9,25.7371190898,26.4850803942 +98.0,29.4805355395,29.997021916 +98.1,32.3146841483,33.2312472484 +98.2,35.77056522,36.8867071379 +98.3,37.9016565475,37.4352620232 +98.4,40.6276046961,39.7952689667 +98.5,41.8303286592,41.7042811408 +98.6,43.8907661211,42.3741842873 +98.7,44.034511648,41.5237016492 +98.8,43.9615964334,41.5468404422 +98.9,43.7642187244,40.9337354226 +99.0,41.5438290516,41.888801832 +99.1,38.1825553878,39.5550949764 +99.2,38.3855377542,39.6935605571 +99.3,37.3257055344,40.8580232482 +99.4,38.5260207934,40.7682076863 +99.5,37.6257489826,42.884993671 +99.6,40.7620815066,45.009587263 +99.7,43.0159058026,46.9496009979 +99.8,46.5092507256,50.8897780382 +99.9,50.3198725804,53.5506608808 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_1.csv b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_1.csv new file mode 100644 index 0000000000..cbabffd142 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_1.csv @@ -0,0 +1,1001 @@ +pivot,signal0,signal1 +0.0,56.3558837883,55.8108882058 +0.1,59.2460648911,58.6880891824 +0.2,62.56783787,61.911256666 +0.3,66.7115292482,63.9363262786 +0.4,68.6447406887,67.0915053029 +0.5,71.0318393858,66.9024018893 +0.6,70.3842053472,67.3795903301 +0.7,69.5551209244,67.7919306957 +0.8,66.3139522549,66.8847201231 +0.9,62.7142859562,64.9795534154 +1.0,60.4219016838,60.9075260015 +1.1,56.9679794113,59.1303090856 +1.2,55.0901216964,53.708602045 +1.3,52.7111018329,52.5867720411 +1.4,53.1348548174,50.3205579243 +1.5,50.6760628177,48.9523726201 +1.6,51.0499314107,48.6492613244 +1.7,50.9469547796,48.9799911807 +1.8,51.9481382975,50.7845957274 +1.9,54.4854339282,52.6330611406 +2.0,55.6132372593,54.3062087704 +2.1,58.4807085175,55.6220040198 +2.2,60.5122046381,55.3694402471 +2.3,61.5298447235,56.4090254186 +2.4,61.7313855161,58.5246657409 +2.5,61.4456639208,60.0926637319 +2.6,57.7802853634,57.1503297657 +2.7,57.4684548216,59.1906869379 +2.8,55.3002179993,57.8951033947 +2.9,55.0865377315,56.3169616537 +3.0,53.6520737012,52.5628905179 +3.1,53.1047675634,52.1599857326 +3.2,51.134634264,51.8565998329 +3.3,51.1224635439,50.2765428693 +3.4,50.7973972705,52.3017709825 +3.5,50.783630827,53.6116177044 +3.6,51.3612293761,56.9741849644 +3.7,53.4473306126,59.700086826 +3.8,56.39588924,61.4314333374 +3.9,60.4914652475,65.8568995269 +4.0,64.6612908743,68.3566838295 +4.1,71.4028169138,74.0059660113 +4.2,77.0215940677,78.6434737785 +4.3,81.4927264829,83.5286860873 +4.4,84.0283006331,87.1686589196 +4.5,87.3025495836,89.9272809867 +4.6,89.139226513,91.9077999673 +4.7,89.1130372636,92.9340579081 +4.8,90.1251911604,94.4022338513 +4.9,90.2845487341,94.8389347036 +5.0,90.1990583765,94.5175500617 +5.1,93.2973718374,93.9089234754 +5.2,92.2953344192,93.1147825104 +5.3,92.3338631581,91.5170839217 +5.4,92.2268621354,90.9998720804 +5.5,93.3762279843,93.5298291264 +5.6,94.6285070708,94.4792066102 +5.7,96.7598113029,96.5910266396 +5.8,98.8573073055,100.304977827 +5.9,102.687165419,100.531224109 +6.0,105.53825192,104.945259714 +6.1,109.619555323,107.965313514 +6.2,111.709363427,108.640715342 +6.3,112.47054241,111.503080788 +6.4,112.278469913,110.768813946 +6.5,111.002318037,111.78795679 +6.6,109.95443861,109.931937667 +6.7,108.341335728,107.842244014 +6.8,105.554696459,107.279599023 +6.9,104.153968051,104.484461698 +7.0,99.754336124,101.106227979 +7.1,96.7907883412,96.7089262605 +7.2,92.3371741985,93.7931830018 +7.3,89.5647408997,88.648538813 +7.4,86.0349610879,87.6230770224 +7.5,85.0485945269,86.4933991737 +7.6,83.7480683189,86.9743541325 +7.7,84.8921194292,86.6041534272 +7.8,85.1893186052,88.0254302929 +7.9,86.8290685596,90.8411929532 +8.0,89.5826523576,91.6082248834 +8.1,92.298956493,94.7501405425 +8.2,95.3001669316,97.1205449025 +8.3,94.6673137486,96.9196960609 +8.4,94.7287899594,98.5855869079 +8.5,94.7819166045,96.8610140281 +8.6,96.7579814831,96.5545552186 +8.7,94.9191976653,94.5259248862 +8.8,92.3217320506,92.448852455 +8.9,90.0364131492,91.2602945824 +9.0,87.9549073447,89.1971503904 +9.1,87.3345298589,87.2243345879 +9.2,87.2029851173,83.0316595201 +9.3,84.6029392923,81.4788511495 +9.4,83.5323835162,81.3311242739 +9.5,81.36620302,82.4786355565 +9.6,80.521032583,82.430299351 +9.7,80.8531211054,85.8512614602 +9.8,83.0592659175,86.1713940133 +9.9,85.4034425673,89.0122156083 +10.0,88.4269922023,92.0948804942 +10.1,91.2236069877,95.3142364972 +10.2,94.0056646018,97.240064349 +10.3,98.2636004867,97.3590391032 +10.4,98.7085853039,98.7787262362 +10.5,98.8156621113,98.5832596712 +10.6,96.4639157883,94.8686526724 +10.7,94.9249571597,93.4421006221 +10.8,89.9306827555,91.4779075721 +10.9,86.0276216089,88.3325834882 +11.0,83.8409720842,82.8902308637 +11.1,81.1377822725,78.7622637084 +11.2,76.2145134777,74.9113980872 +11.3,73.5890005779,73.8760604455 +11.4,70.7315467535,69.5677674341 +11.5,68.2288656346,68.5704212836 +11.6,66.7572202568,65.7650832051 +11.7,64.714446664,66.5394331737 +11.8,66.6670058737,66.2747451444 +11.9,67.779820527,67.1676845439 +12.0,65.9926785179,67.1556039863 +12.1,66.7225640649,67.8182668513 +12.2,65.6626228108,67.4201466392 +12.3,65.7775634752,68.185782684 +12.4,67.5890143414,68.8824868836 +12.5,67.0863319699,67.1060182208 +12.6,64.7630104489,65.6979701299 +12.7,64.5317649255,64.4446192024 +12.8,62.5907721229,61.9508377723 +12.9,58.3187391431,59.6563240565 +13.0,56.6300400206,58.0090372266 +13.1,53.2802711003,55.6014161365 +13.2,51.5919254551,53.9195488342 +13.3,50.2828105514,51.7595907761 +13.4,50.7793462451,50.6731453079 +13.5,50.6405802874,50.929567927 +13.6,51.9355366244,52.245692486 +13.7,54.281746486,54.3161265245 +13.8,56.0556939729,57.8123087438 +13.9,58.3924744753,61.3628163203 +14.0,61.6325920788,66.5808777369 +14.1,66.7634147021,69.8183174126 +14.2,70.326938726,72.0928891911 +14.3,73.0933733501,76.5254987248 +14.4,77.6940214367,77.9930649019 +14.5,80.1267226139,80.2757009987 +14.6,82.1798154719,81.5894524119 +14.7,83.422529673,82.1629275134 +14.8,84.4767994356,81.3688435683 +14.9,83.969319316,80.1880797391 +15.0,83.636102755,79.6280695899 +15.1,80.9790380547,78.6577153239 +15.2,79.2154037053,78.1850991887 +15.3,78.7485197258,79.2040316673 +15.4,80.7075663102,80.089331654 +15.5,81.7382039273,79.9455947991 +15.6,82.4988998215,81.7246824305 +15.7,84.1935053852,84.4285006675 +15.8,85.1315427274,87.251580536 +15.9,88.7050737638,88.0635652942 +16.0,91.4151825476,90.8553829461 +16.1,92.5703466308,94.127406666 +16.2,94.1855950756,94.8559830785 +16.3,96.2981574171,96.8873774482 +16.4,96.7785248755,96.7899666891 +16.5,96.1858966474,95.9216199697 +16.6,93.99483261,97.3560994229 +16.7,91.2844876187,93.5263085331 +16.8,89.3926900374,93.212786861 +16.9,86.1124474548,89.0442131876 +17.0,83.8513795816,86.223277006 +17.1,79.4649910222,82.5210747013 +17.2,78.0671123203,77.5173251817 +17.3,75.5874856631,74.6735382798 +17.4,74.641930915,73.1326418167 +17.5,73.3636850819,72.1721820118 +17.6,73.7611830376,71.0098627378 +17.7,73.8867936286,71.2167660749 +17.8,74.4926780897,74.0743797596 +17.9,75.1601778762,76.2204047757 +18.0,78.2750554534,77.5314019564 +18.1,81.2181035127,79.935686411 +18.2,82.1216292955,83.9493857243 +18.3,86.0382542129,84.4864603717 +18.4,85.8518814643,87.0237052582 +18.5,86.5631532595,85.5458753958 +18.6,87.2321805405,85.9964585437 +18.7,84.3546618199,85.9856932996 +18.8,84.5677258136,84.0212228118 +18.9,82.8585094145,83.7106248073 +19.0,79.5138328846,82.2644819798 +19.1,79.2131097489,78.8950612395 +19.2,74.8350184882,77.981844956 +19.3,75.1998517431,77.6218386296 +19.4,73.1395387356,77.0859721653 +19.5,73.4133594241,75.5294487035 +19.6,77.0139684489,77.5797016295 +19.7,77.5726931239,78.4347752988 +19.8,80.5264381393,78.6902351572 +19.9,82.0146440308,82.7496355491 +20.0,85.4029867003,83.125305631 +20.1,88.5948591713,86.0813685144 +20.2,92.9467812941,88.6687953333 +20.3,94.5635064407,89.0010630791 +20.4,94.5217079358,88.9229892152 +20.5,93.8455309603,89.169587204 +20.6,89.099435894,87.8403340585 +20.7,86.6443336152,86.0917897108 +20.8,82.7058253994,83.2350005757 +20.9,78.2446806586,80.9122759647 +21.0,74.8725154733,76.1217145043 +21.1,71.9647633181,70.5885708969 +21.2,67.667057707,68.4075114553 +21.3,63.0322407518,66.4021181967 +21.4,61.3093798565,63.1049767185 +21.5,58.8778113184,60.8781319847 +21.6,61.1898744006,60.2958417926 +21.7,58.177006494,58.4282434125 +21.8,58.4219036584,59.9938289185 +21.9,60.6170672222,61.6126620784 +22.0,61.0758318024,60.4787703592 +22.1,62.6875985059,60.5823913359 +22.2,62.2807421343,61.2812800431 +22.3,63.6923185663,61.2810892534 +22.4,60.670139109,60.6180401029 +22.5,61.2356282578,60.5077209969 +22.6,60.1357670714,58.3176635958 +22.7,58.4430583286,56.2173564388 +22.8,54.9558382538,55.4074044608 +22.9,50.0727855754,51.835538502 +23.0,46.6667962524,49.5987507959 +23.1,44.0031088792,47.743120125 +23.2,40.8964805201,44.4273912579 +23.3,38.2002730186,42.3408329906 +23.4,37.308420107,39.4824215664 +23.5,38.1162775539,40.0634469507 +23.6,39.0735622072,40.2495154281 +23.7,41.8587635325,41.4296943763 +23.8,45.1742997315,42.916452877 +23.9,46.9585870223,44.9801275148 +24.0,51.2525407976,49.617293853 +24.1,54.1993187556,50.6012255288 +24.2,57.227075452,53.8772273842 +24.3,61.9058737234,56.9430185295 +24.4,63.6191111171,59.6045338986 +24.5,65.4350805202,62.1345310955 +24.6,67.6428855505,64.1007216281 +24.7,68.5633114323,64.9455775028 +24.8,67.6847250726,63.4964911575 +24.9,66.8243948757,63.5981368374 +25.0,64.0188707636,61.799156915 +25.1,60.7659205375,62.0912648141 +25.2,58.2112042691,59.4971285961 +25.3,58.1036754393,57.9379579766 +25.4,55.976656589,55.8834611559 +25.5,56.8100722214,57.5215884044 +25.6,56.0800787313,57.6255651848 +25.7,56.9117527873,60.3394134713 +25.8,61.0872058343,60.1790609397 +25.9,63.9013463331,63.1028869398 +26.0,66.4455754045,64.0989372647 +26.1,67.7057881776,65.4100801398 +26.2,67.7808887718,66.6411626617 +26.3,68.1619692955,66.0118547895 +26.4,67.7216002036,68.146521932 +26.5,66.3857943357,64.8323769702 +26.6,64.1372164441,62.021305013 +26.7,60.7757416486,58.4910969198 +26.8,57.3305130717,56.6975530369 +26.9,53.1922878262,50.0864207923 +27.0,48.0585266562,47.0009718157 +27.1,43.2758172766,41.8996190679 +27.2,38.4059506997,37.5971020364 +27.3,35.3996212214,34.036623555 +27.4,33.4480288418,32.2662349983 +27.5,30.5667827437,28.2264314644 +27.6,29.3373746295,27.6342260579 +27.7,25.9683313469,26.0971671122 +27.8,25.8021796479,26.4441457501 +27.9,25.8257781572,25.8236781095 +28.0,27.1666766996,25.9373919527 +28.1,29.7434294067,26.5493280345 +28.2,32.3412838707,28.553818658 +28.3,34.4418122962,29.3094293111 +28.4,34.2009264394,28.3391561113 +28.5,32.1094191543,27.683513829 +28.6,30.8120360756,26.7448670621 +28.7,27.9086879483,25.3904339879 +28.8,24.4191411994,23.2966507442 +28.9,22.6224022404,21.3139623463 +29.0,19.4927794264,17.6777179543 +29.1,15.3041952092,13.6333094488 +29.2,13.9323020005,11.3830586526 +29.3,12.3451040232,9.61488071343 +29.4,9.16685731245,7.56913092857 +29.5,7.65951446582,5.30989655831 +29.6,6.37660951373,5.38304646739 +29.7,7.47031785742,4.31413623247 +29.8,9.04687918545,6.90159341931 +29.9,12.6869972499,9.19837915961 +30.0,12.4605321261,13.1514275448 +30.1,16.6497363381,13.027549998 +30.2,18.1457553713,14.2507664603 +30.3,19.1179041064,16.5619170107 +30.4,18.5722317573,16.3016079843 +30.5,16.0256473743,14.5434227163 +30.6,14.6998205598,12.6196849886 +30.7,11.1468996709,10.2881889576 +30.8,7.40382518383,6.36218710545 +30.9,3.54883522085,1.4172356902 +31.0,0.656764926622,-2.14727206884 +31.1,-5.33320258662,-5.80233730552 +31.2,-9.8197868835,-9.40048288891 +31.3,-13.0389637549,-15.4921288521 +31.4,-17.8667282374,-19.8563723651 +31.5,-20.0211128571,-18.9080007392 +31.6,-22.3090315126,-22.3365899987 +31.7,-23.3883026453,-23.7406894886 +31.8,-25.013538222,-23.220094416 +31.9,-23.9488041268,-23.9657542737 +32.0,-24.2968998508,-22.0158776167 +32.1,-23.1361777077,-22.1269662146 +32.2,-22.2009578579,-21.1166712304 +32.3,-20.926401991,-23.4488680336 +32.4,-20.4654736342,-22.4269921298 +32.5,-23.0476875849,-26.9797628887 +32.6,-25.4508944892,-26.9185655816 +32.7,-25.8436133029,-28.0619057907 +32.8,-28.5933357357,-30.7479885305 +32.9,-31.071405597,-32.2482102199 +33.0,-35.2373237937,-36.7877777421 +33.1,-38.2701043667,-38.5243524907 +33.2,-41.313197337,-43.7628433542 +33.3,-41.5908975285,-44.9539960648 +33.4,-42.5815956878,-45.3438047759 +33.5,-41.7938359623,-46.111185444 +33.6,-42.3500908066,-42.2259011494 +33.7,-40.900302589,-39.9564739088 +33.8,-38.0216283774,-36.8693884287 +33.9,-35.5599358756,-34.3546839745 +34.0,-32.0863823114,-28.797341863 +34.1,-29.196407367,-27.2776696793 +34.2,-24.452135695,-23.1165120254 +34.3,-20.1928848609,-20.5414058891 +34.4,-16.3659780702,-18.1948765777 +34.5,-12.156285777,-14.7200488372 +34.6,-12.2818564024,-13.2751127823 +34.7,-11.9192513897,-12.0292771367 +34.8,-14.080177943,-10.949581602 +34.9,-13.1548600719,-12.2953615631 +35.0,-15.9950442511,-13.7289229827 +35.1,-15.6469848568,-16.218036267 +35.2,-16.5938313162,-17.4489845695 +35.3,-17.4996060693,-16.4738983218 +35.4,-15.6899507038,-16.3844082334 +35.5,-13.6629831111,-16.1796685604 +35.6,-12.843943987,-16.2258519359 +35.7,-10.7483977819,-13.9928073898 +35.8,-5.87302853044,-10.5229883161 +35.9,-3.80573399224,-8.76401072945 +36.0,-1.66851615288,-4.52734239919 +36.1,1.82466999581,-2.23404485805 +36.2,1.94882612077,0.780198175681 +36.3,4.75623269855,3.5049964542 +36.4,2.28922513068,3.10417828027 +36.5,2.40012826697,5.68962212794 +36.6,1.19978208276,2.91631081702 +36.7,1.94421504722,-1.15455513026 +36.8,0.0899704175771,-2.16459395721 +36.9,-1.02634482256,-4.67833858673 +37.0,-5.555155214,-8.18053570362 +37.1,-8.60517195786,-10.2278562456 +37.2,-10.5590138211,-12.1640095275 +37.3,-14.2147020029,-14.0966892025 +37.4,-16.339939575,-16.1101488026 +37.5,-16.226083042,-16.1425552414 +37.6,-15.5879416544,-18.0280200526 +37.7,-15.0462515496,-15.0643924215 +37.8,-16.660769684,-14.6007664262 +37.9,-14.3855024725,-10.0510560143 +38.0,-12.6507738649,-9.8501845272 +38.1,-8.57423419738,-6.3089210276 +38.2,-5.5956906906,-4.28585079527 +38.3,-2.61512756027,-1.87013675017 +38.4,0.150131385154,0.326851690196 +38.5,0.0253641989752,0.642240532494 +38.6,-0.166199330842,0.819709220967 +38.7,-0.328705923966,-0.579999552831 +38.8,-0.770157493186,-2.44917628322 +38.9,-3.40307664369,-4.00227720453 +39.0,-3.49322323974,-5.60597296066 +39.1,-5.18951185638,-5.6293593615 +39.2,-5.17526362813,-6.66131741362 +39.3,-5.66890872247,-5.76095585582 +39.4,-4.88970005241,-6.81467182012 +39.5,-3.72183962749,-6.16020731679 +39.6,-2.73420085013,-5.05844305467 +39.7,-0.542690541742,-2.85544628422 +39.8,0.757153906498,-0.243314128984 +39.9,2.02901531975,3.04620830487 +40.0,7.12143080791,5.9273296848 +40.1,12.5422829053,10.0436985322 +40.2,15.5723513517,12.1049270981 +40.3,17.4487866093,13.7803230667 +40.4,19.1399460391,17.0515781284 +40.5,18.6963267152,18.2652357017 +40.6,19.9886085424,16.5660971915 +40.7,18.762729399,15.8017532118 +40.8,16.9241617346,13.2319786432 +40.9,12.4468196542,7.74620299646 +41.0,11.6108285968,4.65245734465 +41.1,5.9943022889,2.17868181607 +41.2,4.56785296072,-1.37845665976 +41.3,0.363233240467,-2.29249219413 +41.4,-2.56600686756,-4.85514223874 +41.5,-3.80488492343,-5.0699505527 +41.6,-3.35109407281,-6.64596033396 +41.7,-3.1100491333,-5.86361477808 +41.8,-3.54788508177,-4.79562612811 +41.9,-2.9059037009,-1.66435999206 +42.0,-1.81182048637,-0.945389800133 +42.1,-1.00360645351,2.15735519431 +42.2,-0.472105992621,3.92391471324 +42.3,-1.48492027,6.54959719387 +42.4,-0.867060080895,5.42259748138 +42.5,-0.862642802356,4.76979868301 +42.6,-0.272780371265,4.87764121931 +42.7,-0.98841282753,4.00845486161 +42.8,-1.57615893425,3.15287571159 +42.9,-2.65943861211,0.390523625505 +43.0,-4.61691677262,-0.456211758 +43.1,-6.09261122639,-3.36361104824 +43.2,-8.02186375101,-5.33697745743 +43.3,-11.0261458696,-6.16393972064 +43.4,-10.2191734366,-5.94886672388 +43.5,-8.7314541508,-5.85516025747 +43.6,-6.64028181704,-2.06675532788 +43.7,-3.59288303557,0.218739102553 +43.8,1.31002232741,2.4116184412 +43.9,5.53985749876,7.40980201876 +44.0,11.9639110311,11.7385584086 +44.1,16.787458864,18.1707138003 +44.2,22.168846375,22.6952303749 +44.3,26.5654002468,27.7699747472 +44.4,28.7202965616,30.4983293541 +44.5,32.4837576825,31.2332468662 +44.6,31.2020956405,33.0294434867 +44.7,32.1936881446,34.8601507774 +44.8,31.7957750854,34.5768937223 +44.9,33.6152998455,35.8766084489 +45.0,32.0423917609,33.52848626 +45.1,30.5994021988,33.3569569624 +45.2,30.9224187719,32.3335512951 +45.3,29.5761532948,31.5114433594 +45.4,30.8660022011,33.0678021498 +45.5,32.6849981976,34.4261893287 +45.6,33.2219588319,35.8939180209 +45.7,35.4138098484,37.7314690904 +45.8,36.9769033519,41.5883435645 +45.9,38.2234138502,43.9797244827 +46.0,42.1783876454,47.5051938551 +46.1,45.5432987229,48.9879237598 +46.2,48.9167884387,51.9492153036 +46.3,51.1920677066,52.4560881047 +46.4,52.3755391071,53.0516092778 +46.5,51.9554371504,53.6564680554 +46.6,51.2112332944,52.244218906 +46.7,49.4756875298,51.3146878746 +46.8,46.3497734112,48.7252370873 +46.9,43.1047426928,45.87726876 +47.0,39.9965631284,42.1392949267 +47.1,36.7084921893,39.1239411849 +47.2,32.0186778856,36.1838689105 +47.3,30.4404984144,33.0665295271 +47.4,30.1000632727,31.7828952939 +47.5,29.5930230363,27.8349085868 +47.6,27.9064312021,29.3114144196 +47.7,28.6553073737,30.1343340084 +47.8,28.6487371469,27.8186438512 +47.9,29.8008744193,29.8832941662 +48.0,31.319361329,34.0404357212 +48.1,35.9408405276,36.9623483762 +48.2,37.4108822625,38.9921272759 +48.3,40.863323697,39.5555071545 +48.4,43.070822751,41.1900205978 +48.5,43.3194583273,40.8153030596 +48.6,44.5565679531,42.3461976842 +48.7,43.1804219557,41.6670379231 +48.8,41.6850538113,40.1454340657 +48.9,41.6705753476,38.2021117396 +49.0,38.916640904,36.5876714547 +49.1,36.427821473,35.2554508746 +49.2,34.0375253967,33.4102785913 +49.3,33.5720332071,33.9124257922 +49.4,33.9459568046,32.3930714173 +49.5,34.5988426179,33.4849640572 +49.6,34.7324518325,34.7392757302 +49.7,35.7798201794,36.7188966336 +49.8,36.2405220551,37.1899837214 +49.9,39.8483951469,38.6200145316 +50.0,42.1415514304,41.958872966 +50.1,46.9312825671,44.1136653492 +50.2,49.5326218362,48.8492654465 +50.3,51.241009365,48.9614577964 +50.4,50.6779409981,49.399587385 +50.5,50.8176442801,49.0028704012 +50.6,49.774878944,49.7458338846 +50.7,47.2434696311,47.2301477707 +50.8,45.6079111481,45.6482130241 +50.9,43.2379899488,44.3658898231 +51.0,39.387984028,41.2288593207 +51.1,36.1871991944,37.5164326285 +51.2,30.9335959503,33.3497876493 +51.3,27.9771623701,31.3689255727 +51.4,25.3084753189,29.3567948196 +51.5,26.0389445922,25.9777415124 +51.6,25.3800123682,25.1023804785 +51.7,22.8633425529,24.8160247372 +51.8,25.3951522302,26.7771360615 +51.9,26.1429048371,28.4965868002 +52.0,28.4422576525,30.3158170521 +52.1,31.5724669023,30.4415016924 +52.2,33.4295523395,31.9654578955 +52.3,32.4689969285,31.7543735824 +52.4,33.5551078997,31.7834295415 +52.5,32.6678100721,30.9378648856 +52.6,30.634105426,28.8286447666 +52.7,29.7486431032,30.0019193493 +52.8,29.3199560856,25.8938108079 +52.9,25.8894019233,26.1144515311 +53.0,23.9263296633,22.8712950627 +53.1,23.2547296085,21.8864966677 +53.2,21.1653719427,20.8723252447 +53.3,21.5560448942,21.568202495 +53.4,19.4375642648,21.4125006938 +53.5,19.1363476124,22.4878842351 +53.6,20.8343306275,25.1153403833 +53.7,25.3163220084,27.2621987229 +53.8,28.4812159101,30.290925396 +53.9,33.5856232205,35.1665791205 +54.0,38.1150728045,40.0276023641 +54.1,41.9797617095,44.2312845287 +54.2,48.3026565638,49.5997758118 +54.3,52.8706355296,53.3708866642 +54.4,57.1875482604,56.0980706063 +54.5,58.7724235996,58.5315187051 +54.6,60.2909931374,60.7984459782 +54.7,59.5122108674,62.6939279197 +54.8,59.4763355917,63.0103290771 +54.9,61.8058805853,62.952651048 +55.0,62.0712072575,61.782355469 +55.1,61.4742539918,61.7625554173 +55.2,61.1698462254,63.5316700155 +55.3,63.2440345232,64.8450759326 +55.4,61.8535852942,67.4728262077 +55.5,63.1711764074,68.2367649448 +55.6,65.8792136355,69.9313587902 +55.7,69.0161433621,71.5575441829 +55.8,72.5997288033,74.7302169967 +55.9,76.5258903101,78.9492300097 +56.0,79.9540696284,83.1447323132 +56.1,82.6020035114,85.985846457 +56.2,86.1205160272,89.2213701492 +56.3,87.7424273269,91.4867450051 +56.4,88.0039556497,91.6985107218 +56.5,88.3427537899,93.3810306786 +56.6,88.5235023115,93.4254309715 +56.7,87.9492609823,91.5912751364 +56.8,85.1806340977,89.4138061136 +56.9,82.4606963229,88.0092640933 +57.0,80.201488067,84.7924026975 +57.1,77.5156091884,80.6002318497 +57.2,75.7937051732,80.0959155971 +57.3,74.1347225229,76.216663906 +57.4,72.9352318294,75.5287151895 +57.5,73.6879234486,73.9812522846 +57.6,73.865314637,74.4477629754 +57.7,75.0072002578,73.7451171868 +57.8,78.0830771814,74.3525545066 +57.9,80.3132480397,77.1448867856 +58.0,83.5175959493,81.25904526 +58.1,84.3793520265,85.3713787226 +58.2,86.8059445122,88.114439358 +58.3,90.4571507265,89.0540010353 +58.4,93.0551132324,93.3414778808 +58.5,94.8901156667,91.8816926334 +58.6,97.2607794493,94.0722076264 +58.7,96.8502655838,92.4671585036 +58.8,95.886908677,92.6286838813 +58.9,95.0825135813,90.9172369373 +59.0,92.9232320225,88.4846155398 +59.1,91.4441051001,88.5942145396 +59.2,88.111410561,87.6037344332 +59.3,88.6466442189,87.758002553 +59.4,87.4173824275,87.2510878584 +59.5,88.3963093326,88.3912314177 +59.6,90.5170383055,90.1776636557 +59.7,92.3602085276,92.8611323343 +59.8,95.1446139404,97.2306508724 +59.9,98.330248589,99.5394040088 +60.0,102.000865952,103.083505594 +60.1,105.056740702,107.243034982 +60.2,107.699102285,109.508434716 +60.3,111.354412113,112.682488256 +60.4,112.490035142,114.184728708 +60.5,113.379188253,115.473976071 +60.6,113.311362646,115.470778275 +60.7,111.00975932,113.661936332 +60.8,107.372991375,112.344437056 +60.9,106.117102218,108.752601202 +61.0,101.254927783,104.811431558 +61.1,98.7961485176,102.361822693 +61.2,96.5481672706,98.6721442624 +61.3,93.3078845661,95.5757347986 +61.4,93.1803188474,94.3471504751 +61.5,91.2311892519,91.6792680079 +61.6,90.5826673601,90.1316591306 +61.7,89.2612904376,91.2494483554 +61.8,88.6157226646,92.0342843207 +61.9,89.8377350862,91.6685290475 +62.0,90.5386663637,92.8627447706 +62.1,94.2811666447,93.2288103101 +62.2,93.8353762996,95.8138963947 +62.3,95.3109595147,95.408019032 +62.4,94.7445336327,96.0880029054 +62.5,94.9502340974,95.839435264 +62.6,93.1187598257,95.2047177659 +62.7,90.7465374904,92.5341621422 +62.8,86.4797229913,91.6789307819 +62.9,86.3376268917,87.3355759399 +63.0,80.5791722239,86.0221258032 +63.1,80.6057644606,84.5222018457 +63.2,79.8660718175,82.9339371419 +63.3,77.8145729771,81.5444461365 +63.4,78.2354588736,81.5084158827 +63.5,78.3367559148,81.1197596282 +63.6,78.5078255253,81.2683499525 +63.7,82.0366245565,85.5300104056 +63.8,85.325706287,88.7511124532 +63.9,90.4697098581,90.2068795354 +64.0,92.7309478465,96.0841537479 +64.1,98.0745917009,100.344464314 +64.2,103.179279845,103.153952861 +64.3,106.950022483,106.183256425 +64.4,109.727072118,110.120082327 +64.5,110.998586281,111.443881499 +64.6,111.220812713,112.241730163 +64.7,111.956749634,114.271379243 +64.8,113.699572442,113.864191955 +64.9,112.364894072,113.755554008 +65.0,112.384398759,112.636617686 +65.1,110.45056015,110.544620295 +65.2,110.157958441,108.700547731 +65.3,106.388160811,107.183584219 +65.4,105.261852049,106.924616538 +65.5,106.163074579,105.495458676 +65.6,106.392631551,107.162588754 +65.7,109.084235353,109.497643889 +65.8,109.192252613,110.601606245 +65.9,113.417013357,114.069439516 +66.0,116.117394157,115.800222085 +66.1,118.472182646,117.519066285 +66.2,119.57596228,119.130478637 +66.3,121.170403781,117.809041847 +66.4,120.35523257,117.726777956 +66.5,119.527351198,117.247850274 +66.6,117.24710088,115.817362606 +66.7,114.044199494,113.594601193 +66.8,110.231089084,109.301366444 +66.9,103.626020253,105.146530123 +67.0,100.029015741,100.271804974 +67.1,95.1063101426,95.5525502162 +67.2,90.6651739225,94.6878018494 +67.3,87.031132915,91.2854932398 +67.4,85.4039952166,87.8225269166 +67.5,84.9208882347,87.0405075096 +67.6,84.127370136,85.1648268463 +67.7,84.6910812818,83.2057521856 +67.8,84.8677756107,82.9851182933 +67.9,85.8411603089,83.5407463578 +68.0,86.8582423837,84.3847942305 +68.1,87.4857715817,86.4088307712 +68.2,89.4773167213,87.4442166057 +68.3,89.5784579117,87.9277389236 +68.4,88.6921506389,89.5123057382 +68.5,87.3109679744,88.0246274101 +68.6,86.2488201505,87.8396763332 +68.7,85.3261448436,87.9540145728 +68.8,84.2674739966,84.999148612 +68.9,80.061079933,83.2717252523 +69.0,77.0819889232,79.5594253324 +69.1,73.1409563536,76.3452374637 +69.2,71.4981940137,71.4610744456 +69.3,67.9928842056,69.1079507904 +69.4,66.3375678768,67.9664000131 +69.5,66.5282454258,67.2345646002 +69.6,65.4559907351,67.5978065587 +69.7,68.4674916857,67.26490141 +69.8,68.0100351449,68.5993520119 +69.9,71.7470429332,68.2410775114 +70.0,73.1182823079,69.566954003 +70.1,75.2474625005,73.5743735394 +70.2,76.8782026688,74.532452291 +70.3,79.1461298957,74.349887596 +70.4,77.5495195847,74.3006707961 +70.5,77.1754757852,73.0875170274 +70.6,72.7030287955,72.8969994595 +70.7,70.1235713655,69.7565069893 +70.8,68.949893679,66.9641276738 +70.9,64.3700590531,63.0299844047 +71.0,59.3677341663,58.0093156749 +71.1,56.6695082705,53.8216836252 +71.2,52.6018279187,48.1299264421 +71.3,48.6470759466,43.6876964139 +71.4,44.1006156671,41.6780561935 +71.5,40.4763861305,37.929122872 +71.6,39.1245398164,37.8135260919 +71.7,37.1290651288,36.4114551372 +71.8,36.2894813685,33.6177938393 +71.9,35.4099481007,32.8156647005 +72.0,34.0387071586,33.5597216366 +72.1,34.1210065719,33.5854365999 +72.2,33.6324882531,32.6199975322 +72.3,32.5094062878,32.9738508101 +72.4,32.7829962081,31.5415506255 +72.5,30.5408709485,31.8749259021 +72.6,30.3648707872,29.4357129014 +72.7,27.2119084237,29.4817918125 +72.8,24.0037874394,26.0052463841 +72.9,21.515791414,23.9675293481 +73.0,19.3823808818,19.5992501985 +73.1,17.067635708,16.0344921199 +73.2,14.6844741602,11.6449393256 +73.3,11.081232119,10.8292337013 +73.4,9.61534694328,11.2907368463 +73.5,9.42306473577,10.1962162803 +73.6,9.60960664148,11.6684151265 +73.7,11.7777488194,14.9428202022 +73.8,14.5055547446,17.7477304416 +73.9,17.2358937928,21.1509170257 +74.0,19.5522157817,24.3771483047 +74.1,23.677009038,27.4340299149 +74.2,26.556398495,28.8725228686 +74.3,30.4982947666,32.0285178527 +74.4,32.424016928,34.2853456014 +74.5,35.7699803846,36.7319085515 +74.6,36.3675919567,38.2082890105 +74.7,35.740252581,39.4340708431 +74.8,37.6458963069,37.6193410652 +74.9,36.620211445,36.624879213 +75.0,36.400444474,36.1391001648 +75.1,34.6475454027,34.9071300741 +75.2,34.6292198847,33.1645159678 +75.3,32.5175710592,32.3382587788 +75.4,31.1293744077,31.5460822456 +75.5,29.6677850053,30.1668426732 +75.6,30.5455301081,32.4798700247 +75.7,32.5329624997,33.5493355182 +75.8,33.1510259247,35.8851856602 +75.9,34.9497692857,37.8847925296 +76.0,39.4816911874,39.7710357447 +76.1,39.726901644,42.2692085541 +76.2,44.9891060377,43.5093141663 +76.3,44.9074290954,45.6060676317 +76.4,45.4874653002,45.1679195498 +76.5,45.4137344365,45.7614689651 +76.6,43.9600842971,43.6898270924 +76.7,40.5376411042,42.2406246984 +76.8,38.7685492726,39.9137066722 +76.9,36.2127147474,36.6519797218 +77.0,31.6765740291,32.2666761727 +77.1,28.5172790571,28.7802517893 +77.2,24.8944367641,26.0897322876 +77.3,22.3454830433,21.7372802415 +77.4,18.1561005681,19.911046766 +77.5,16.7099997883,18.8680406359 +77.6,15.1799952319,16.9239072124 +77.7,15.9046115618,17.8733817514 +77.8,17.6929133827,17.7536947716 +77.9,18.8548404087,19.3152049589 +78.0,20.4188773373,21.8868796458 +78.1,23.1715917669,21.9579025819 +78.2,24.8040377613,23.5988664493 +78.3,24.8144038663,25.6609524727 +78.4,26.6160660619,27.5022654699 +78.5,26.4876225843,27.3660817443 +78.6,27.158259123,28.494912435 +78.7,27.7346484327,27.6346753306 +78.8,27.6550256508,25.9951426395 +78.9,25.2251234651,24.7102197894 +79.0,22.5367150205,23.1119956206 +79.1,21.3537458122,19.2029072382 +79.2,20.3619256021,18.1860085767 +79.3,16.5661372971,16.5439965302 +79.4,15.5881074514,15.4534526883 +79.5,13.3975176879,16.33289472 +79.6,14.4688029138,15.1836557375 +79.7,15.6379771884,18.1326083826 +79.8,15.1388891203,19.750031376 +79.9,17.0846917345,21.9886174349 +80.0,19.8058744215,23.546737933 +80.1,24.9695336289,27.8464999688 +80.2,28.99388249,29.1503292206 +80.3,30.7437645557,30.0602871631 +80.4,29.9601236834,32.4467147616 +80.5,30.2309761328,32.6814675689 +80.6,29.458256235,31.4506719205 +80.7,28.126904849,28.2883794843 +80.8,27.7468395132,26.9542986587 +80.9,24.7288677405,22.0481693558 +81.0,21.1502393232,16.3513475779 +81.1,18.4678904182,11.9477558011 +81.2,14.5624667531,9.97856198305 +81.3,9.51396212412,3.1857284264 +81.4,5.34236171365,1.51056047344 +81.5,4.44704515244,-0.198095736022 +81.6,3.8616385196,-0.832428976761 +81.7,5.78701117245,-0.545223888757 +81.8,5.72630701004,-0.301068536562 +81.9,6.20501496931,2.1044079977 +82.0,6.44833768493,2.64714776616 +82.1,6.47828398889,4.57942646509 +82.2,4.85376137198,5.20410780954 +82.3,4.88042665043,4.36938255231 +82.4,3.78245920794,5.67188876339 +82.5,2.72460627199,3.58527819173 +82.6,2.23346776157,3.1372278576 +82.7,-0.28697497096,1.13308169908 +82.8,-2.69005826008,-2.00276299743 +82.9,-5.00825268929,-4.16638747906 +83.0,-8.49437033623,-6.83603092743 +83.1,-11.5386870298,-8.60047131049 +83.2,-14.0937433809,-12.1959581705 +83.3,-13.9622531146,-13.6744973807 +83.4,-15.9818733194,-14.7152473707 +83.5,-14.2497999498,-13.6618741484 +83.6,-12.0839026908,-14.3053801101 +83.7,-10.0383387294,-11.3282435174 +83.8,-6.21505074133,-8.34681671088 +83.9,-3.24285337613,-4.68443812213 +84.0,1.79949682504,1.91246331991 +84.1,6.34343468001,5.5730789109 +84.2,10.6060236125,9.32543973779 +84.3,12.8377990445,12.5267723628 +84.4,15.2746626033,14.1683679646 +84.5,17.1315707391,16.6318904082 +84.6,18.1948573909,16.6398424094 +84.7,17.6925915378,19.1812831197 +84.8,17.5137311967,17.1956717599 +84.9,16.3876166899,16.9619265763 +85.0,14.2559337118,15.4669233013 +85.1,13.2679787049,14.7000167339 +85.2,11.6146406968,14.5626390404 +85.3,9.58444861384,12.3291451076 +85.4,10.5984598493,12.7968780876 +85.5,11.3510016478,13.1761001924 +85.6,13.0634427034,12.0638063817 +85.7,13.7701382212,13.9762442 +85.8,16.9659486187,13.9404342761 +85.9,16.5752713759,16.3357060882 +86.0,18.2170252747,19.6976329302 +86.1,20.4737068114,20.0151182508 +86.2,22.3451669084,22.6498155964 +86.3,24.7751153833,24.9560569491 +86.4,26.9922316934,25.9098759219 +86.5,25.9316765641,24.0574713813 +86.6,24.4396655495,21.0064863758 +86.7,20.9484447227,19.7858751181 +86.8,18.8006576124,15.0851229175 +86.9,14.540932235,11.5592333692 +87.0,10.2780656949,8.27075573668 +87.1,6.02953154857,3.89787633847 +87.2,2.50465419692,0.654960974378 +87.3,-3.27125542425,-4.67825588523 +87.4,-3.90256010325,-6.81677297466 +87.5,-7.18961106585,-6.59710160735 +87.6,-7.60303348453,-8.49132247111 +87.7,-6.20067534039,-10.1335734935 +87.8,-6.9133164652,-7.24200444428 +87.9,-5.89243104639,-5.15495908897 +88.0,-3.35809626067,-0.980128643918 +88.1,-1.02876814877,0.403419671069 +88.2,0.578137422167,2.18159107537 +88.3,1.33141292693,3.8599032814 +88.4,0.332012472275,3.49890133029 +88.5,1.35494169331,4.42640990147 +88.6,-0.203420791282,4.61742404382 +88.7,-1.04086294557,3.85618208393 +88.8,-1.31350859175,1.43331112594 +88.9,-2.79017667551,-3.36045110317 +89.0,-5.07229294379,-3.81097404276 +89.1,-5.86622896468,-7.33109701294 +89.2,-8.31384121972,-8.76642978104 +89.3,-10.3595468137,-10.6286643928 +89.4,-10.9236618284,-11.8305101921 +89.5,-11.337794669,-10.3173503509 +89.6,-10.2675022324,-10.9582197989 +89.7,-9.04138344762,-8.30285494294 +89.8,-7.02634861511,-7.67413172249 +89.9,-4.50561654068,-4.89752923205 +90.0,-3.72598049644,-3.18529744195 +90.1,-0.845188080109,-0.962856718807 +90.2,0.949502369752,1.05313757474 +90.3,2.54550496961,1.55925406556 +90.4,3.80872539922,3.33618615983 +90.5,3.80842224611,4.24608187922 +90.6,1.79366506925,2.75644523911 +90.7,0.239024916089,1.0420728595 +90.8,-2.54182172681,-4.35857202039 +90.9,-6.48171022011,-7.02254942138 +91.0,-9.90595057823,-10.258160286 +91.1,-12.5624537374,-15.5102107791 +91.2,-16.5467259706,-18.0033762457 +91.3,-19.4286022902,-24.5676227709 +91.4,-21.3601889305,-26.1048745983 +91.5,-23.2471284797,-28.4940508623 +91.6,-23.8243066571,-28.1322723891 +91.7,-24.7512597124,-32.2977346382 +91.8,-26.202415619,-29.3799782574 +91.9,-26.6473277968,-28.2988210506 +92.0,-25.8765091362,-27.3442831156 +92.1,-24.9075485198,-24.3514334883 +92.2,-23.3630094573,-23.9206675374 +92.3,-22.1832080797,-25.6330387765 +92.4,-23.0380445979,-25.1461477807 +92.5,-23.0595536647,-24.3254887154 +92.6,-24.9926373588,-26.1810301858 +92.7,-26.7008124466,-27.7303439254 +92.8,-28.092062017,-30.8235261332 +92.9,-31.4274543475,-32.1204395435 +93.0,-33.2810435371,-33.9825327101 +93.1,-35.5881284014,-35.3822504825 +93.2,-35.764201744,-35.9017972879 +93.3,-37.3318729642,-37.565788987 +93.4,-36.9393201093,-38.9720950614 +93.5,-37.6645656341,-37.6592993907 +93.6,-35.5330895767,-36.3741544233 +93.7,-34.5241718011,-34.7335876786 +93.8,-29.8017580743,-30.0346739784 +93.9,-25.9595303876,-25.1936440185 +94.0,-21.1904230128,-20.0302592874 +94.1,-15.0925843618,-15.3368656973 +94.2,-10.2277154939,-12.0464689786 +94.3,-4.15093356082,-5.93855584274 +94.4,-3.60473189125,-2.39349052193 +94.5,0.735149054394,1.94812805198 +94.6,2.90269822647,5.27829963574 +94.7,4.74454427388,6.47737077477 +94.8,2.77802464423,5.71395058209 +94.9,4.50355112445,6.53625500804 +95.0,3.50013210282,6.18762846366 +95.1,3.12550062212,6.3363459668 +95.2,3.46039352975,5.90660574725 +95.3,4.0410514077,7.35904912363 +95.4,5.98968558318,6.62904192456 +95.5,8.53779912792,9.7668635119 +95.6,9.7273202568,10.6417606669 +95.7,10.7882441613,13.5563491367 +95.8,14.0784038242,16.674012869 +95.9,16.4086914152,19.7829624475 +96.0,19.8494703551,23.2707006596 +96.1,23.5384763318,27.9656958483 +96.2,26.6254449835,30.6757081432 +96.3,28.4807694498,32.879944528 +96.4,30.6745592779,34.8426433377 +96.5,31.484776821,33.9629606122 +96.6,32.9660550652,33.0675021465 +96.7,29.7541454742,32.5900358348 +96.8,30.1153048746,30.4339255548 +96.9,27.1102265021,30.2561949051 +97.0,25.1172521872,26.2648298923 +97.1,21.9849293438,25.374182084 +97.2,20.3372198773,21.3913440276 +97.3,19.0826775526,19.3926403441 +97.4,17.4704787135,17.9501300274 +97.5,19.3540627081,15.9707336983 +97.6,18.7191506447,19.1041593382 +97.7,20.2578936961,18.5408446998 +97.8,21.817146606,21.6079996484 +97.9,25.4935738335,22.860667985 +98.0,29.5911505187,26.6372170545 +98.1,32.6271048617,30.0976372536 +98.2,34.1584985081,31.7041351483 +98.3,38.3929041803,33.8498064146 +98.4,39.2901153393,36.3194969633 +98.5,41.2633676094,38.0335126733 +98.6,40.0181497966,38.2206041875 +98.7,39.6539037922,41.3068104438 +98.8,38.6798925312,40.6833236451 +98.9,37.4714731397,41.1613759836 +99.0,38.5735283964,40.0597245643 +99.1,37.0999305735,39.6690028518 +99.2,36.8544083015,38.5442761294 +99.3,37.3160243919,38.0464324711 +99.4,37.8243691385,39.2043965664 +99.5,38.4981674459,39.4764615141 +99.6,41.1048352768,39.7569958448 +99.7,44.4184339363,41.0722335235 +99.8,49.2447958197,45.2057937773 +99.9,51.9267480395,50.4699551271 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/tests b/tests/framework/ROM/TimeSeries/SyntheticHistory/tests index d6c08ca228..10a98f3fc9 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/tests +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/tests @@ -25,6 +25,23 @@ [../] [../] + [./AutoARMA] + type = 'RavenFramework' + input = 'auto_arma.xml' + [./csv] + type = OrderedCSV + output = 'AutoARMA/samples_0.csv AutoARMA/samples_1.csv' + rel_err = 4.7e-1 + zero_threshold = 1e-12 + [../] + [./xml] + type = XML + output = 'AutoARMA/romMeta.xml' + rel_err = 1e-2 + zero_threshold = 1e-3 + [../] + [../] + [./ARMASample] prereq = ARMA type = 'RavenFramework' From cfecfbd3738d8f1fbe35862b1e4d8eebac95e5da Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 23 Apr 2024 15:24:50 -0600 Subject: [PATCH 09/12] missed some file updates --- doc/user_manual/generated/generateRomDoc.py | 4 ++-- tests/framework/PostProcessors/TSACharacterizer/basic.xml | 4 ++-- tests/framework/unit_tests/TSA/testARMA.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/user_manual/generated/generateRomDoc.py b/doc/user_manual/generated/generateRomDoc.py index 1f1851f7d7..eb4957f5f9 100644 --- a/doc/user_manual/generated/generateRomDoc.py +++ b/doc/user_manual/generated/generateRomDoc.py @@ -221,8 +221,8 @@ 12, 24 - 2 - 3 +

2

+ 3
... diff --git a/tests/framework/PostProcessors/TSACharacterizer/basic.xml b/tests/framework/PostProcessors/TSACharacterizer/basic.xml index 0a6bbaf9b3..6e2b2a31e5 100644 --- a/tests/framework/PostProcessors/TSACharacterizer/basic.xml +++ b/tests/framework/PostProcessors/TSACharacterizer/basic.xml @@ -39,8 +39,8 @@ 2, 5, 10 - 2 - 3 +

2

+ 3
diff --git a/tests/framework/unit_tests/TSA/testARMA.py b/tests/framework/unit_tests/TSA/testARMA.py index 77e1913fb1..a0db1d2f3a 100644 --- a/tests/framework/unit_tests/TSA/testARMA.py +++ b/tests/framework/unit_tests/TSA/testARMA.py @@ -187,8 +187,8 @@ def checkFails(comment, errstr, function, update=True, args=None, kwargs=None): ###################################### def createARMAXML(targets, P, Q): xml = xmlUtils.newNode('ARMA', attrib={'target':','.join(targets)}) - xml.append(xmlUtils.newNode('SignalLag', text=f'{P}')) - xml.append(xmlUtils.newNode('NoiseLag', text=f'{Q}')) + xml.append(xmlUtils.newNode('P', text=f'{P}')) + xml.append(xmlUtils.newNode('Q', text=f'{Q}')) return xml def createFromXML(xml): From 1eb419ec450ed037dc77ee769253a26f981c0872 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Wed, 24 Apr 2024 09:34:34 -0600 Subject: [PATCH 10/12] user can change information criterion as input --- ravenframework/TSA/AutoARMA.py | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/ravenframework/TSA/AutoARMA.py b/ravenframework/TSA/AutoARMA.py index c74f9323b4..d1f9e2ca2d 100644 --- a/ravenframework/TSA/AutoARMA.py +++ b/ravenframework/TSA/AutoARMA.py @@ -79,6 +79,12 @@ class cls. descr=r"""upper bound for the number of terms in the Moving Average term to retain in the regression; typically represented as $Q$ in Noise Lag literature.""")) + opt_criterion = InputTypes.makeEnumType("criterion", "criterionType", ['aic', 'aicc','bic']) + specs.addSub(InputData.parameterInputFactory('criterion', contentType=opt_criterion, + descr=r"""information criterion used to determine optimal ARMA parameters. The + options are `aic` for Akaike Information Criterion, `aicc` for corrected AIC which + is used when number of observations is small, and `bic` for Bayesian Information + Criterion. Default is `aicc`.""")) return specs # @@ -95,6 +101,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # maximum value that P+Q can have as an upper bound self._maxCombinedPQ = 5 + self._ic = 'aicc' def handleInput(self, spec): """ @@ -103,8 +110,9 @@ def handleInput(self, spec): @ Out, settings, dict, initialization settings for this algorithm """ settings = super().handleInput(spec) - settings['P_upper'] = spec.findFirst('P_upper').value - settings['Q_upper'] = spec.findFirst('Q_upper').value + + for sub in spec.subparts: + settings[sub.name] = sub.value # AutoARMA is currently only a global TSA algorithm; this is enforced in TSAUser return settings @@ -120,6 +128,12 @@ def setDefaults(self, settings): settings['global'] = True if 'engine' not in settings: settings['engine'] = randomUtils.newRNG() + if 'P_upper' not in settings: + settings['P_upper'] = self._maxCombinedPQ + if 'Q_upper' not in settings: + settings['Q_upper'] = self._maxCombinedPQ + if 'criterion' not in settings: + settings['criterion'] = self._ic return settings def fit(self, signal, pivot, targets, settings, trainedParams=None): From 2ff74b0990a5be4b561780ce24ddfa596a4204aa Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Fri, 26 Apr 2024 13:18:12 -0600 Subject: [PATCH 11/12] not using approximation heuristic by default anymore, regolding fixes diff issue between Linux and Windows --- ravenframework/TSA/AutoARMA.py | 13 +- .../TimeSeries/SyntheticHistory/auto_arma.xml | 1 + .../gold/AutoARMA/romMeta.xml | 18 +- .../gold/AutoARMA/samples_0.csv | 2000 ++++++++--------- .../gold/AutoARMA/samples_1.csv | 2000 ++++++++--------- 5 files changed, 2021 insertions(+), 2011 deletions(-) diff --git a/ravenframework/TSA/AutoARMA.py b/ravenframework/TSA/AutoARMA.py index d1f9e2ca2d..98e2dfb17d 100644 --- a/ravenframework/TSA/AutoARMA.py +++ b/ravenframework/TSA/AutoARMA.py @@ -85,6 +85,12 @@ class cls. options are `aic` for Akaike Information Criterion, `aicc` for corrected AIC which is used when number of observations is small, and `bic` for Bayesian Information Criterion. Default is `aicc`.""")) + specs.addSub(InputData.parameterInputFactory('use_approximation', contentType=InputTypes.BoolType, + descr=r"""if True, this uses the default version of the AutoARIMA algorithm + within `statsforecast` which uses heuristics to find an approximate solution + in much faster time. This previously led to different answers between Linux and + Windows, but may be a good option if the alternative is taking too long. + Default is False.""")) return specs # @@ -101,6 +107,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # maximum value that P+Q can have as an upper bound self._maxCombinedPQ = 5 + self._use_approximation = False self._ic = 'aicc' def handleInput(self, spec): @@ -134,6 +141,8 @@ def setDefaults(self, settings): settings['Q_upper'] = self._maxCombinedPQ if 'criterion' not in settings: settings['criterion'] = self._ic + if 'use_approximation' not in settings: + settings['use_approximation'] = self._use_approximation return settings def fit(self, signal, pivot, targets, settings, trainedParams=None): @@ -168,7 +177,9 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): "max_p": settings['P_upper'], "max_q": settings['Q_upper'], "max_order": maxOrder, - "ic": 'aicc', + "ic": settings['criterion'], + "stepwise": settings['use_approximation'], + "approximation": settings['use_approximation'], } params = {} diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml index 94a0f9b4a2..1002b2ab0a 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml @@ -71,6 +71,7 @@ 5 5 + bic

1

diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/romMeta.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/romMeta.xml index f760d70da2..72a6157e6f 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/romMeta.xml @@ -59,9 +59,9 @@ - 5 + 1 0 - 0 + 2 2 @@ -71,14 +71,12 @@ - -1.753877510e-03 - 6.975955072e-01 - 2.145354665e-01 - -1.124237205e-01 - -1.274829227e-01 - 5.274823933e-02 - 4.303670076e-01 - 5,0,0 + -2.228884514e-03 + 6.875771216e-01 + -3.706671624e-03 + 2.338466293e-01 + 4.328239816e-01 + 1,0,2 8.584247694e-04 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_0.csv b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_0.csv index bd5b34fac7..7d210bf080 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_0.csv +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_0.csv @@ -1,1001 +1,1001 @@ pivot,signal0,signal1 -0.0,56.4429126422,54.9060312252 -0.1,60.2311763053,59.3802419533 -0.2,63.8733877006,62.9854335695 -0.3,67.0237575685,66.2956349742 -0.4,68.2241512994,68.4614772018 -0.5,69.6430122273,69.5431039152 -0.6,67.7195602938,68.7832907809 -0.7,66.4826141293,66.5249804725 -0.8,64.048229636,66.0499341961 -0.9,62.7729261584,63.1531878785 -1.0,59.9210288278,60.6586885084 -1.1,58.8745071922,56.5397593877 -1.2,57.0805872202,55.0236747184 -1.3,54.5553565323,51.5203192832 -1.4,52.9663710912,50.0949795803 -1.5,51.1520742513,48.4705853952 -1.6,51.0504130399,47.9540146294 -1.7,51.165709147,48.8317343284 -1.8,51.6334564243,49.2370992521 -1.9,52.5737839781,51.24105085 -2.0,53.55346881,53.2990311838 -2.1,55.088915911,55.1238391148 -2.2,57.9947125297,54.3434146304 -2.3,60.0127590703,58.6910046119 -2.4,62.054721595,59.7985201623 -2.5,61.8488279054,58.3346353285 -2.6,61.5586277661,56.7521295638 -2.7,59.9195736846,59.56514696 -2.8,57.5567139414,57.3909851838 -2.9,57.7943344295,56.7259395701 -3.0,56.2917915148,54.3139825494 -3.1,55.5321349182,53.2031877015 -3.2,51.4644233494,50.2576970466 -3.3,49.2930008363,49.3341453867 -3.4,49.4255165551,50.244121495 -3.5,50.248794543,51.0928579548 -3.6,51.9832260711,55.6400108749 -3.7,55.3000067564,58.4041354438 -3.8,59.3461517459,61.991282805 -3.9,65.4285112157,65.8164368641 -4.0,68.3174733908,71.737520663 -4.1,72.6184636719,76.1898981692 -4.2,77.3166514864,82.004036661 -4.3,82.398321742,86.1101047728 -4.4,84.8842642928,88.3353383396 -4.5,87.9925296127,90.2924236477 -4.6,90.1324708449,91.9908297099 -4.7,91.1759669723,91.3388893499 -4.8,91.4101305049,90.9722899222 -4.9,91.7446112532,90.58320572 -5.0,91.9601742028,89.9240405636 -5.1,91.6933954625,91.2819796291 -5.2,92.3682967029,90.1948813618 -5.3,92.6481816358,89.6293723133 -5.4,93.3094628847,89.6699900171 -5.5,93.7915058488,89.8412421113 -5.6,96.1318442623,92.8261304955 -5.7,98.18811737,95.9407179054 -5.8,101.300558892,97.0071311031 -5.9,103.130526633,100.090877642 -6.0,105.298258654,103.396563518 -6.1,107.13447353,105.225445487 -6.2,107.981196262,107.562837268 -6.3,109.473942835,110.81011182 -6.4,110.007081395,109.713747554 -6.5,109.925094812,110.907494182 -6.6,109.173250976,109.068571459 -6.7,106.690272041,105.313294888 -6.8,103.384839633,105.071938779 -6.9,99.7597826235,102.59297196 -7.0,96.5663396109,98.0902086084 -7.1,93.0480595171,95.524188059 -7.2,90.2800306477,90.0896213489 -7.3,88.1699296327,88.8419666674 -7.4,85.7238765148,87.413723058 -7.5,86.4949184924,86.2493583452 -7.6,85.6726399286,86.3004569931 -7.7,87.0866231461,86.0232317719 -7.8,87.8707235537,84.9957741553 -7.9,90.8555439532,88.1027434941 -8.0,91.8799934254,90.5869400846 -8.1,93.7681422591,92.7256208704 -8.2,94.997458685,93.534311457 -8.3,96.7947970167,96.7203862925 -8.4,97.4297190107,97.0872625369 -8.5,96.1274820926,97.1346288107 -8.6,97.1136346111,97.2119613454 -8.7,94.3015043706,96.6530126161 -8.8,93.0337805478,93.9950812198 -8.9,91.1842326228,92.3387690962 -9.0,89.7868278967,90.4657943522 -9.1,88.7518218141,87.208644118 -9.2,86.2116686433,85.0901356527 -9.3,84.8995640825,80.9286886896 -9.4,85.2100622933,82.0595171059 -9.5,84.3818278223,82.3477009169 -9.6,84.0619042226,82.905526138 -9.7,85.182387814,84.6752019236 -9.8,85.2044087759,85.6208258842 -9.9,87.0731032102,87.6501665385 -10.0,89.9815575014,90.2663976888 -10.1,93.5388458259,91.9647232236 -10.2,95.1305911503,94.0540233027 -10.3,96.2654465919,95.1478158382 -10.4,97.240929767,94.1627983216 -10.5,96.5748893038,95.4475288859 -10.6,96.7205029412,92.4125691251 -10.7,94.9230023336,90.2096842102 -10.8,92.6858088242,89.0196571918 -10.9,88.4208344998,85.9169488926 -11.0,84.4978184668,83.2352434665 -11.1,79.2844270063,78.0305228756 -11.2,74.155445153,74.4434475767 -11.3,71.1591459692,71.6329898166 -11.4,66.2649892068,68.2237422423 -11.5,66.1625233443,66.4445537202 -11.6,62.4468548099,64.6161829736 -11.7,62.1487103219,62.8806596601 -11.8,62.7126286129,65.455186403 -11.9,62.8678663994,65.0930322487 -12.0,63.915192856,66.9205660105 -12.1,64.5981259774,67.1639340188 -12.2,66.1660412714,66.4033785136 -12.3,65.9203557463,67.3687667936 -12.4,68.0231911206,66.7184137473 -12.5,65.7072852301,66.8249549297 -12.6,63.5706187814,64.1162672446 -12.7,61.6994275668,62.2945728271 -12.8,62.5693145123,59.3514644807 -12.9,58.4821715477,57.7050069502 -13.0,55.1825814263,52.568004121 -13.1,51.9843713649,51.8472760414 -13.2,49.1153869962,50.6745159715 -13.3,47.6504364963,49.89483791 -13.4,46.2574591666,49.9246608272 -13.5,48.0002827867,49.0013422348 -13.6,50.6418829928,51.9252319892 -13.7,52.5945754411,54.4026498551 -13.8,56.1471681775,59.1245172133 -13.9,59.2727029021,62.0532560377 -14.0,62.0343211501,65.5105443161 -14.1,67.0281222937,70.1513292929 -14.2,69.8714204659,73.8293662173 -14.3,73.7213871058,76.8399646417 -14.4,77.8268703964,79.4529982499 -14.5,81.6762666868,79.9843972585 -14.6,82.8203589588,84.2091969786 -14.7,83.6520306822,84.8475991818 -14.8,82.4393223408,86.7658981498 -14.9,81.5827495803,84.1912232983 -15.0,80.6948340749,84.5475354955 -15.1,79.5634953607,82.9046514633 -15.2,79.1997389167,82.7838119238 -15.3,79.4730933497,81.9091977363 -15.4,77.5322513502,80.9007674441 -15.5,78.6046801596,80.9525669575 -15.6,80.1476258749,83.8919389034 -15.7,81.0554668928,84.7805500981 -15.8,84.2623846151,86.1572786746 -15.9,87.7398487516,88.0635172013 -16.0,92.2777918457,91.4436263433 -16.1,95.0153708699,94.6875501608 -16.2,98.1402515847,97.2673222902 -16.3,99.0442204825,99.0443443833 -16.4,99.3809024779,99.4925112793 -16.5,99.7496024736,99.1151424789 -16.6,97.416674859,96.7786829322 -16.7,96.90951473,93.6018531673 -16.8,93.9813880533,90.9026777731 -16.9,90.159317405,87.7823542233 -17.0,85.7610475405,85.2894675838 -17.1,83.676998726,80.4718409247 -17.2,78.8375063478,78.7006551436 -17.3,75.8803880378,74.5247979893 -17.4,71.7820499067,72.6235431351 -17.5,71.5268259028,71.795557086 -17.6,69.2408151416,71.8895432068 -17.7,69.7110560354,73.4888902158 -17.8,69.863455163,74.6056657898 -17.9,73.9620811684,76.4350721086 -18.0,75.0942752784,76.6739244755 -18.1,76.6057803452,80.7680687112 -18.2,79.075110762,81.0557059363 -18.3,82.2967590867,81.80196019 -18.4,84.5428028392,84.6778965839 -18.5,83.9408687064,84.5964192464 -18.6,83.9595521156,84.3699554645 -18.7,84.2658479091,84.890781989 -18.8,81.6683522622,81.3995394184 -18.9,80.410854177,81.0011155434 -19.0,78.982860773,81.1697682686 -19.1,77.0415076886,78.1851686625 -19.2,74.5091842558,74.9528876973 -19.3,73.5918080664,73.0260246757 -19.4,74.1063080905,72.7819774553 -19.5,73.0295563899,72.7568633504 -19.6,73.0484905685,75.1779195684 -19.7,76.932969276,74.8073894848 -19.8,78.9505943861,79.0995996939 -19.9,79.4147285256,79.931801337 -20.0,84.0917642799,84.8183275725 -20.1,87.7693542034,85.5584337772 -20.2,88.6557150312,87.2972479844 -20.3,92.0576077728,88.0305798279 -20.4,91.1108916729,90.2867873862 -20.5,91.6594739621,87.4328509669 -20.6,91.9658284782,86.4791395793 -20.7,88.6649081008,85.7470693951 -20.8,83.9001944066,80.6452739623 -20.9,80.1894248511,77.4346790036 -21.0,74.2286910935,74.7230157358 -21.1,72.1809252691,71.8563165674 -21.2,67.7286535096,66.6260636686 -21.3,64.0837248059,63.123586082 -21.4,63.3387940695,62.2756325183 -21.5,62.1184680939,59.7605037953 -21.6,61.8593802861,58.4855553194 -21.7,61.8300653916,57.6668109917 -21.8,60.7518166014,57.0861780536 -21.9,61.6664149101,57.7109453013 -22.0,61.2845067956,59.9542256251 -22.1,63.0549047933,60.5258452978 -22.2,64.7963207019,61.6996129149 -22.3,64.3299621028,60.2047602965 -22.4,63.1808088495,62.1301295715 -22.5,60.7720280509,61.0241696356 -22.6,58.3318027984,59.6014015065 -22.7,55.7687985025,57.9833064303 -22.8,50.922042306,54.9330324297 -22.9,49.0568269525,51.8082669982 -23.0,46.2789970813,49.2825047518 -23.1,44.0923016738,45.5031410702 -23.2,41.7323631394,43.2421434755 -23.3,40.2089202693,42.2771538493 -23.4,41.6330453763,41.0517373643 -23.5,39.7681415271,40.1651952285 -23.6,42.0652504181,42.2312865975 -23.7,43.4698552576,42.8677096106 -23.8,46.2034095144,44.5493191327 -23.9,48.6204774187,45.7202231937 -24.0,51.0964223127,51.0328871792 -24.1,54.4377492478,55.270120853 -24.2,59.6029133889,58.3758027287 -24.3,61.7671824624,61.7826907087 -24.4,62.4787873381,62.4926525377 -24.5,63.7392876862,63.4602871664 -24.6,65.8247740604,63.9130277581 -24.7,66.9958205775,64.4832619751 -24.8,66.4071924335,65.6207496143 -24.9,64.1031204559,64.6857516061 -25.0,62.5904080918,63.3845233412 -25.1,60.2009578824,60.3449240772 -25.2,57.1889170493,60.1216211411 -25.3,55.217251795,56.2265835587 -25.4,54.4882743254,55.206004389 -25.5,54.8478825212,55.9515622421 -25.6,56.3903839848,56.1918473181 -25.7,59.6967315916,58.0929143664 -25.8,62.0558574783,60.467115141 -25.9,64.3750916205,61.1660905111 -26.0,66.3288152843,63.0101514678 -26.1,66.5998395226,65.2241635379 -26.2,66.9924196867,66.0358230188 -26.3,66.4077178537,65.7769083817 -26.4,66.0315636732,65.9683521492 -26.5,63.3666670976,64.2079428805 -26.6,61.5954289104,63.4116154172 -26.7,58.8852656428,60.9664415572 -26.8,56.658558371,56.6322772472 -26.9,50.6843155582,53.6121149983 -27.0,48.3251126253,48.5777637435 -27.1,44.2411257469,45.4659926287 -27.2,38.9928537297,40.3049659605 -27.3,36.1051112977,36.413860562 -27.4,31.3476793625,32.5706265586 -27.5,30.2907363799,30.2875848372 -27.6,29.5848734059,29.6709157265 -27.7,26.8123844874,28.4221658566 -27.8,27.2542087572,27.9666974948 -27.9,28.8049588734,28.3890822373 -28.0,30.025412733,29.9012679429 -28.1,29.8970383199,31.5031355739 -28.2,28.4542361405,32.9075146062 -28.3,28.4309351918,32.8661312589 -28.4,29.5304393515,30.7149326804 -28.5,30.194312984,31.4760575287 -28.6,31.1333059641,29.1006483116 -28.7,28.8311840132,28.1047077888 -28.8,24.9770355736,23.8956521858 -28.9,24.440034846,20.0833068206 -29.0,20.7741329442,17.720953038 -29.1,18.1422733637,14.1818140871 -29.2,14.831669091,12.6767648109 -29.3,12.4083290138,10.6444621104 -29.4,9.40060591862,9.44232714691 -29.5,9.40451599665,9.28337860408 -29.6,8.29068134342,10.4635776868 -29.7,8.58540087588,11.9803157663 -29.8,9.60635860659,13.3846345097 -29.9,11.4765529543,14.590569453 -30.0,12.1673583106,16.8750550654 -30.1,13.4369350402,16.8488605358 -30.2,13.2666835545,19.1150605138 -30.3,13.7639235668,17.9524374729 -30.4,14.6942938916,19.7197371657 -30.5,14.0418267927,16.5159741025 -30.6,12.2012555845,15.3953994851 -30.7,9.96941357335,12.1316002776 -30.8,6.42845461827,8.49153053842 -30.9,2.4993323934,3.11223330888 -31.0,-2.43836058324,-2.33567708474 -31.1,-4.96305888406,-5.52913244172 -31.2,-10.833279546,-8.88941918117 -31.3,-12.4006280973,-13.5349287251 -31.4,-17.0140856484,-17.2190096348 -31.5,-20.1154990146,-18.6246184665 -31.6,-20.3764294129,-21.7613625589 -31.7,-22.707982471,-21.8017252075 -31.8,-23.3879252289,-21.8310159215 -31.9,-21.9910575144,-21.5912609622 -32.0,-21.9886995943,-21.9303864311 -32.1,-21.2296774309,-21.3752717445 -32.2,-22.5545937417,-21.7858620512 -32.3,-22.1800635968,-22.7317875633 -32.4,-22.8286781397,-22.9637522645 -32.5,-24.1743842534,-24.1875485313 -32.6,-24.5177615261,-25.4042608817 -32.7,-26.9558071917,-28.2734633186 -32.8,-27.8949099145,-30.7617401185 -32.9,-29.5102752655,-35.6059664746 -33.0,-33.1306853097,-37.3367579138 -33.1,-35.1822330189,-40.6134868997 -33.2,-39.5601742563,-43.0349995532 -33.3,-41.4699835605,-46.5923801259 -33.4,-44.9036263387,-46.626070422 -33.5,-46.1740261284,-46.5457653245 -33.6,-43.6743813946,-46.1116663837 -33.7,-40.8176111007,-43.7035143798 -33.8,-35.9965380343,-40.3314526884 -33.9,-34.2002504293,-36.9230860322 -34.0,-29.2953638626,-32.9292223351 -34.1,-25.0396724145,-28.358616166 -34.2,-19.9279038871,-23.5925934737 -34.3,-17.2207959857,-19.6380904715 -34.4,-14.2319420585,-16.0458725956 -34.5,-11.8204414318,-13.9059062071 -34.6,-9.09984415607,-13.9795527451 -34.7,-9.05287203314,-11.9626536702 -34.8,-8.4368685912,-10.427894327 -34.9,-10.8632406266,-12.7063789893 -35.0,-12.4685815008,-12.7957954032 -35.1,-13.8990929034,-12.8556259141 -35.2,-14.8174844705,-12.8539703662 -35.3,-16.6045131622,-13.0177180446 -35.4,-14.3458047658,-12.7766715068 -35.5,-14.8732963566,-12.6246371055 -35.6,-14.3502554004,-11.9549294489 -35.7,-12.173234088,-8.88624804699 -35.8,-9.61304391819,-7.47277657063 -35.9,-6.59824137774,-5.00587187241 -36.0,-2.86117321469,-2.73309327199 -36.1,-0.298285975611,0.682718977841 -36.2,2.85365895265,2.17305357113 -36.3,4.43634946353,3.4046926959 -36.4,3.53565588889,4.61109498816 -36.5,2.25364863169,2.35644309239 -36.6,1.5272694141,3.08134388846 -36.7,-0.611016025878,0.86617801799 -36.8,-1.91465480079,-1.39654256237 -36.9,-4.66312790583,-4.40491692672 -37.0,-7.11195431533,-6.27519324821 -37.1,-10.0713983555,-9.00546442068 -37.2,-13.7204044649,-12.682156623 -37.3,-15.370631228,-13.9546109956 -37.4,-18.085043853,-16.7113788429 -37.5,-19.5095182644,-16.7678221924 -37.6,-18.1184914613,-15.4960431042 -37.7,-16.5423164644,-15.9684330553 -37.8,-14.2958378562,-14.3415364287 -37.9,-12.2816754181,-11.2035327174 -38.0,-7.86642704437,-10.4301779691 -38.1,-7.25090929683,-6.54123263683 -38.2,-4.64427798072,-6.29854963799 -38.3,-1.32299030611,-4.1907676362 -38.4,0.238874690696,-1.15063471189 -38.5,0.113570227557,0.566086722129 -38.6,0.562835902947,0.890240249095 -38.7,-0.351025288543,-2.00529298875 -38.8,-2.66324720846,-1.82887000691 -38.9,-5.3230115745,-6.19829434707 -39.0,-6.67699608002,-3.77484201124 -39.1,-8.39509139309,-5.88096824596 -39.2,-8.24855125024,-6.5285755853 -39.3,-7.47306965466,-6.93324398798 -39.4,-5.54852091498,-8.09489897641 -39.5,-4.70386796308,-6.569527946 -39.6,-4.15186149636,-4.9872368242 -39.7,-2.68600361954,-2.49163412404 -39.8,2.00800060785,-0.49608770401 -39.9,5.72413436386,1.87594090001 -40.0,8.46138332556,5.0992619815 -40.1,11.106053965,10.1817948699 -40.2,12.6646523452,11.557311057 -40.3,16.9862351458,15.3177862107 -40.4,16.0695746205,17.4909748671 -40.5,17.9011943755,17.4339504174 -40.6,15.7940449625,15.3314846911 -40.7,14.4342268349,16.0876446905 -40.8,11.0160486778,13.3631138123 -40.9,8.61155586285,11.7882587429 -41.0,3.1988193989,8.49444100998 -41.1,2.13221979867,6.85822125429 -41.2,0.0814072521895,2.54099453359 -41.3,-2.97535693847,-0.521243412692 -41.4,-4.47924827367,-1.80193493019 -41.5,-5.03813394984,-4.09286042119 -41.6,-4.62258738091,-3.1471490313 -41.7,-2.60732942351,-5.09597965835 -41.8,-0.946279198413,-4.42475847523 -41.9,0.179065499052,-5.32282895105 -42.0,2.33021147121,-1.60738990404 -42.1,3.74767545021,0.0668221442573 -42.2,5.26838016493,3.05759344334 -42.3,6.07324121005,4.01831511596 -42.4,5.15461997613,4.86872127103 -42.5,4.17122220413,2.16627073262 -42.6,2.41334839033,2.68134112658 -42.7,0.255901530539,1.38274285943 -42.8,-0.733272724675,-1.94770358191 -42.9,-1.56936054806,-4.88956624912 -43.0,-2.05743262265,-4.79930712736 -43.1,-4.17694059711,-7.07070461929 -43.2,-5.31412773399,-7.8428854146 -43.3,-7.0653620891,-8.61705815064 -43.4,-7.10417537713,-6.62758794853 -43.5,-6.16603264232,-5.42130911396 -43.6,-4.65696880029,-2.8355970286 -43.7,-2.57981681059,1.14953303761 -43.8,3.33312872112,2.05042499363 -43.9,6.94184071246,7.54884705534 -44.0,12.5024542067,13.0181972688 -44.1,17.1530107507,16.8924667843 -44.2,21.4345848828,23.0444955048 -44.3,26.4287214268,26.9071723087 -44.4,27.8795540522,29.0998156187 -44.5,29.6287249969,31.5364369461 -44.6,33.7348864686,31.6570240507 -44.7,33.2055875608,31.5069383444 -44.8,34.0499376098,31.6803172035 -44.9,34.1257271878,31.15647826 -45.0,34.4540679031,31.3603378949 -45.1,33.0241216185,30.9080989054 -45.2,32.7153641725,31.3579228137 -45.3,30.3506227622,31.1301158888 -45.4,32.0607365123,32.5876003993 -45.5,31.8855347306,33.2716016113 -45.6,33.7920662507,36.0079842973 -45.7,34.4207927455,38.0658534735 -45.8,38.0880170637,39.5674871308 -45.9,39.4302827275,42.0443475665 -46.0,43.9496205352,44.0238495568 -46.1,48.6785753558,47.8284931751 -46.2,51.5899933034,48.3585160108 -46.3,54.0093834208,50.6229557657 -46.4,54.6020210338,49.2790827449 -46.5,53.6302133526,51.2264229882 -46.6,51.8720602215,50.434580737 -46.7,49.2343183653,48.4392337937 -46.8,47.8925093001,45.2088923359 -46.9,46.0842584125,42.1352208907 -47.0,41.9813885507,40.8893949819 -47.1,38.6161637478,35.9453425349 -47.2,34.7736612891,33.5242541621 -47.3,30.8160873003,29.4805886674 -47.4,28.6175442486,28.8022950556 -47.5,27.9245543619,26.176852684 -47.6,27.2740802056,27.7218299844 -47.7,27.236388634,28.4770503589 -47.8,28.7677175567,30.4952457341 -47.9,30.2954222955,31.6452430032 -48.0,34.2104745406,34.1225893718 -48.1,35.7247307461,37.2207627292 -48.2,37.7170895298,41.9649090214 -48.3,39.6252495798,42.5357333513 -48.4,39.7089434073,44.7224955559 -48.5,41.4058929122,45.3779664865 -48.6,40.8701277264,45.2837926096 -48.7,40.2703748352,43.0781888724 -48.8,38.6719560916,39.2282072911 -48.9,38.850450338,39.3242479803 -49.0,35.9180463813,36.0489903556 -49.1,35.1571780542,33.2921807719 -49.2,33.2587403883,31.7224633978 -49.3,32.1237167168,30.7749951912 -49.4,30.4834295699,32.7224907448 -49.5,31.7645114833,33.0744611109 -49.6,33.9446173469,33.1524569341 -49.7,36.250493763,34.4540216023 -49.8,38.760111026,38.6382834373 -49.9,41.1265585211,39.8260467276 -50.0,42.8457486879,40.363013159 -50.1,46.7695951135,45.9907328913 -50.2,46.7474844937,46.3123723557 -50.3,49.6980816006,47.859432665 -50.4,50.5297987342,49.6088357988 -50.5,49.9389989002,49.9497314551 -50.6,49.8172125725,49.6850931422 -50.7,47.0375090713,48.6506439151 -50.8,44.8534092774,46.1555695794 -50.9,44.0469376827,43.4910436235 -51.0,41.6304979853,40.8343202211 -51.1,37.9314245949,36.1287582111 -51.2,35.2362489434,35.305516124 -51.3,31.8466553767,31.1355164783 -51.4,28.2067156506,28.1806929864 -51.5,25.5207735022,25.9922357306 -51.6,24.6639114182,25.4666112146 -51.7,24.3895785822,24.0360202844 -51.8,24.900586257,25.9246592643 -51.9,26.3797521027,26.6552624014 -52.0,28.73271859,29.948216853 -52.1,28.184010213,31.7796600944 -52.2,30.3787069311,33.5045814774 -52.3,29.9546392394,34.612018277 -52.4,30.6444786028,33.2502547275 -52.5,29.2252177745,34.735823529 -52.6,29.7092428024,34.3740934541 -52.7,29.3544222688,32.4880577481 -52.8,28.4623065951,29.8597570926 -52.9,29.1970931435,27.4039780208 -53.0,27.1430175913,24.1374361719 -53.1,24.1168716509,23.2259717371 -53.2,22.2827614726,20.5185832953 -53.3,20.7446841789,19.1664516317 -53.4,19.5951132713,18.6427621554 -53.5,20.1737721382,21.2667283929 -53.6,22.2152126889,23.8159108953 -53.7,26.227416162,25.6668765496 -53.8,31.1876103401,29.7845414478 -53.9,35.1977642962,34.885488497 -54.0,39.3510447717,39.8217295478 -54.1,45.5097038032,44.9081597143 -54.2,47.8744909947,49.5956939021 -54.3,52.8659329059,53.9664565764 -54.4,55.6113696028,56.8498964364 -54.5,57.4293517414,59.5997911581 -54.6,58.7134771628,61.3324329611 -54.7,60.6707576696,64.3831763434 -54.8,60.3175245353,63.59156618 -54.9,61.4839454465,64.6585200449 -55.0,61.3178160918,64.761215867 -55.1,61.8798433989,65.3234035106 -55.2,60.4546427908,66.1348356426 -55.3,62.5010886395,65.333114414 -55.4,61.9136362767,65.8449391234 -55.5,63.3355741692,67.4739852105 -55.6,65.9267919663,71.0707506521 -55.7,68.819011615,72.704451194 -55.8,73.3154230222,75.1915655437 -55.9,76.09681615,78.3927751574 -56.0,79.1201918635,80.4937137147 -56.1,82.2920427852,84.583966579 -56.2,84.4645520427,87.0188647074 -56.3,86.1706156039,88.2354970583 -56.4,87.8822896296,90.6790118701 -56.5,88.0718775646,90.1498445973 -56.6,87.2690576229,90.4181878378 -56.7,85.5277807009,88.6486487194 -56.8,85.1637635537,88.0457440373 -56.9,82.7711309611,85.3886633602 -57.0,82.9009941746,82.0589146682 -57.1,80.4585430693,80.4374396336 -57.2,77.9316693832,78.3058950245 -57.3,76.9768340642,73.8647799717 -57.4,75.2178301025,72.8332512773 -57.5,75.1285969802,73.5291496806 -57.6,73.7477260526,74.9435804684 -57.7,76.2210224138,77.125204117 -57.8,77.1936932387,78.4440868294 -57.9,79.4186670592,81.5870046878 -58.0,81.983246346,84.305755959 -58.1,83.7021526843,85.9642693207 -58.2,88.6788585447,89.3275584762 -58.3,91.5174074143,92.1984997397 -58.4,94.0498516767,94.2143567491 -58.5,95.7126458728,97.0681635977 -58.6,96.6128739247,94.5809166526 -58.7,96.8514264801,95.3331898335 -58.8,95.4790429761,93.4999364689 -58.9,91.076680866,92.2898998368 -59.0,89.6050820796,88.6756463598 -59.1,87.6617927286,89.4989972484 -59.2,86.5924398863,89.6074169328 -59.3,86.8499703301,90.3553721076 -59.4,87.4810789396,90.3030797023 -59.5,88.1655825,92.9698161684 -59.6,91.2388311902,93.5115739393 -59.7,92.2643425399,95.4374916186 -59.8,95.801223441,98.2887912609 -59.9,98.9269690234,100.422649216 -60.0,102.703423792,104.073315747 -60.1,105.111097031,105.427139898 -60.2,107.570851113,108.731204354 -60.3,108.123030631,112.178282841 -60.4,110.342243081,112.66393195 -60.5,111.734922381,114.611862026 -60.6,110.826074291,113.028627076 -60.7,110.697560467,112.30064727 -60.8,109.487605194,108.876178823 -60.9,107.317328527,106.57992428 -61.0,105.10069011,104.464740247 -61.1,101.756862528,99.5118414445 -61.2,98.7888025258,97.7513636378 -61.3,95.1328291336,92.7479264099 -61.4,92.7334412324,90.6963007105 -61.5,90.4642977094,86.9919911649 -61.6,89.6951322234,86.7032725796 -61.7,90.2305449392,87.5769041879 -61.8,91.2340108812,88.6264025856 -61.9,93.689314185,90.458090035 -62.0,94.4075690821,92.4501162118 -62.1,95.572877101,92.0320433546 -62.2,96.200959082,95.433817443 -62.3,96.8834755939,97.7059926312 -62.4,96.8083222838,96.9343151208 -62.5,94.1506749353,94.4446489782 -62.6,94.5634915776,94.0217126732 -62.7,92.6155289157,92.532317656 -62.8,90.2684332121,88.8280866907 -62.9,88.4904762768,87.6116183171 -63.0,85.38898454,85.7001601601 -63.1,84.2505410091,83.3785166791 -63.2,82.0890724442,81.3889659769 -63.3,79.9478602727,81.2334605098 -63.4,78.5138653331,79.13528157 -63.5,79.9232739273,79.580360954 -63.6,79.8625243475,81.3457794749 -63.7,80.2663853114,85.428827052 -63.8,83.9295101067,89.7132589353 -63.9,89.0588510958,92.4995155904 -64.0,93.7648189598,97.270341734 -64.1,97.6179492333,100.604066998 -64.2,102.050035555,104.590343665 -64.3,103.321792722,108.270002755 -64.4,104.257073002,110.375245687 -64.5,108.143115301,113.187770331 -64.6,110.526163924,113.873713699 -64.7,112.332967466,113.068527825 -64.8,111.143827882,111.491917588 -64.9,109.919495007,113.098997491 -65.0,109.723428364,111.177513683 -65.1,107.925076794,109.768883493 -65.2,107.493620092,108.849793749 -65.3,106.868789493,108.05892999 -65.4,104.787180867,107.565976676 -65.5,105.554934969,105.948282046 -65.6,104.640712285,107.481745004 -65.7,106.066072421,108.683326824 -65.8,108.933225568,110.56241902 -65.9,110.384302127,111.479885399 -66.0,112.041820526,113.536378963 -66.1,114.88665753,116.562647587 -66.2,118.308987443,117.519045036 -66.3,118.38229677,117.78311642 -66.4,120.001108753,117.73114421 -66.5,120.460696777,116.557289928 -66.6,118.119908453,115.923564569 -66.7,114.599975365,113.569766674 -66.8,109.024529823,110.651826082 -66.9,106.193884029,108.308020865 -67.0,102.110691594,104.126974231 -67.1,98.1933494508,100.479413444 -67.2,95.4164506173,95.5257552306 -67.3,91.742864597,91.6434598079 -67.4,88.5006117902,89.5780639044 -67.5,84.5678746614,88.1439385808 -67.6,83.6025978136,87.0162417075 -67.7,83.9531423367,85.1120931179 -67.8,83.7545224214,85.1977942063 -67.9,85.7938496003,84.6512046386 -68.0,86.7790708265,87.1179996674 -68.1,90.3673740731,86.8557169345 -68.2,91.1954680235,89.3940619375 -68.3,91.5469487997,90.0955847674 -68.4,90.4880932374,90.4404408825 -68.5,89.1775127986,89.7146418362 -68.6,89.4567737837,87.7619422793 -68.7,87.0603123448,87.6116318395 -68.8,84.3843164772,82.6318969165 -68.9,80.639368071,79.8719304394 -69.0,75.625081476,77.1556215363 -69.1,72.2645611197,72.2537227978 -69.2,70.611777638,70.8288160016 -69.3,68.0143630535,69.2396319978 -69.4,65.3148342988,67.6922601434 -69.5,65.3517620311,68.0261326666 -69.6,65.4465614463,66.1255626936 -69.7,67.9702484546,66.7770880051 -69.8,68.9536067999,68.893550996 -69.9,72.0388515365,70.0876900028 -70.0,73.1493520684,71.6945354914 -70.1,76.2169872417,73.8749303977 -70.2,75.0041158988,75.6558815243 -70.3,76.5374349361,76.0526001754 -70.4,75.3127927835,75.8587725391 -70.5,72.9354279475,74.4329584664 -70.6,72.1651321068,71.3918825742 -70.7,69.6513849233,68.0104652709 -70.8,66.2425990946,65.8051447688 -70.9,62.9174299244,61.5580145267 -71.0,56.4194250082,57.037473789 -71.1,51.3236744434,53.8116901344 -71.2,46.0403732715,48.1894205429 -71.3,44.1275994348,44.5452075273 -71.4,38.8909610378,40.637121083 -71.5,36.1654332739,37.3534641517 -71.6,35.2038443984,36.3591203381 -71.7,33.3339528962,35.1274626058 -71.8,32.5914824401,34.8436107722 -71.9,35.458651856,35.3858552503 -72.0,34.4518053418,36.7183691348 -72.1,34.5859991767,35.4887897126 -72.2,34.5955462297,34.7884707568 -72.3,33.9519750026,34.8595323384 -72.4,32.1975906472,34.1739358601 -72.5,31.0414468417,32.7424115792 -72.6,28.2543112536,30.6560845728 -72.7,26.4010406023,27.7527907386 -72.8,22.5380909241,22.1892360234 -72.9,19.8855737113,19.9818488913 -73.0,15.7857831032,18.1137702051 -73.1,12.334616864,16.2939590744 -73.2,10.4144759458,11.2602316127 -73.3,9.93608655935,9.48392681404 -73.4,10.7848950958,9.17142608365 -73.5,11.9954121847,9.68933508107 -73.6,11.547020838,10.2107249214 -73.7,13.4909397101,12.8334641293 -73.8,15.8102015128,15.206677857 -73.9,18.1422402137,16.5409041496 -74.0,21.6177386146,21.9031545267 -74.1,26.3044047107,25.7306473005 -74.2,29.1539027244,29.5325337482 -74.3,31.2735512882,32.0444858051 -74.4,35.2424310103,35.0288526717 -74.5,36.2158201374,35.7809111929 -74.6,36.3424089884,35.9761756793 -74.7,35.4224432814,36.677158795 -74.8,35.619665724,35.0913372194 -74.9,34.3186302955,34.7650953081 -75.0,36.2537033647,32.6928643951 -75.1,32.6372890661,30.9552151328 -75.2,33.2109977682,31.275229365 -75.3,31.0729872555,31.3865408752 -75.4,31.227674783,31.4384111374 -75.5,31.7857372604,31.8972004882 -75.6,31.4039840372,32.8854235363 -75.7,32.1437470842,34.662409488 -75.8,31.7704218846,35.9468905837 -75.9,36.2920610955,37.7462043299 -76.0,38.306024998,39.3633540372 -76.1,42.9590401704,42.4183191594 -76.2,45.1553280632,44.0677786795 -76.3,46.1919603436,44.4299996409 -76.4,45.6566318619,46.5774855886 -76.5,43.295105903,46.1933179114 -76.6,39.8890263319,44.0826718007 -76.7,40.1797695705,40.8002048308 -76.8,36.0304486563,35.1176660193 -76.9,33.3386334521,34.4021777409 -77.0,29.426359784,28.2569410413 -77.1,25.1350544254,25.8599139079 -77.2,23.8358605871,21.9072532761 -77.3,20.3420522136,20.25909234 -77.4,17.8125229961,18.0346734722 -77.5,15.1384264498,16.7812459449 -77.6,14.647106819,18.2719224594 -77.7,13.2286756548,18.4509049849 -77.8,15.971927707,18.3662354342 -77.9,17.6167207799,21.0867461842 -78.0,22.175826699,21.9038692912 -78.1,23.6951205782,23.8374722602 -78.2,25.3190526515,27.2113079034 -78.3,26.434581699,27.4395926987 -78.4,27.672455364,27.6010654202 -78.5,27.9435504976,28.2153975555 -78.6,28.537059054,27.1470516959 -78.7,26.9703012489,26.8529694147 -78.8,27.1116235784,24.5362300663 -78.9,25.4125767892,22.2225843882 -79.0,23.6091534519,18.561753937 -79.1,22.1300607594,16.7695563408 -79.2,18.2906867692,16.7092549687 -79.3,18.4050772843,14.06918641 -79.4,16.1121086665,14.0790183187 -79.5,16.5411284549,13.5566420754 -79.6,17.4953794647,14.7998192912 -79.7,16.2402506113,15.2853600479 -79.8,17.3063050433,15.4321170518 -79.9,17.2051893691,21.4850546356 -80.0,21.1461386095,22.6611211317 -80.1,22.4282551558,26.4558762472 -80.2,27.8553176556,25.8607149879 -80.3,31.9622531492,30.3628720767 -80.4,34.8982617188,30.5235956001 -80.5,33.6109246086,31.5775408386 -80.6,33.9335593471,28.2688260538 -80.7,30.3618571279,27.4043419145 -80.8,26.8478122309,24.27062595 -80.9,21.9987602741,21.3936017145 -81.0,17.9617528266,16.3836078656 -81.1,14.1043826579,12.7677605257 -81.2,11.142924413,7.79036552227 -81.3,7.66149950171,5.74115834599 -81.4,4.88980531789,1.35224361846 -81.5,4.56152458398,1.83494570413 -81.6,2.0800048731,0.558500391385 -81.7,0.487010372415,-1.37724587593 -81.8,1.70400944967,-0.211255629718 -81.9,3.16720675965,-0.00272646111593 -82.0,3.06138661369,1.53767963851 -82.1,4.71254042965,2.700682967 -82.2,6.3096422342,4.67410427484 -82.3,4.8459530808,3.65801818155 -82.4,6.15909938935,3.197490518 -82.5,5.7117161492,2.11271307015 -82.6,3.55134417485,0.413588828256 -82.7,0.355579838007,-0.734446259134 -82.8,-1.82633640334,-2.4454316258 -82.9,-3.76236520379,-5.02208379084 -83.0,-7.46806257914,-6.83982770524 -83.1,-10.6782289654,-9.01247919112 -83.2,-11.7097527562,-12.585111692 -83.3,-11.8177822818,-14.2070630279 -83.4,-12.4593146836,-14.59412611 -83.5,-12.3063490134,-12.8863196545 -83.6,-11.1053391418,-11.4327603216 -83.7,-10.2254732298,-9.20918704188 -83.8,-7.18542156937,-5.97592328052 -83.9,-2.65953324286,-0.324964095402 -84.0,2.1395232662,3.03018693571 -84.1,5.53538196406,6.94599567561 -84.2,8.73388990489,11.0479920369 -84.3,11.6275657289,14.0223773772 -84.4,15.1771417713,16.6494740132 -84.5,16.8065501742,17.7164326316 -84.6,17.4224627947,19.6454282373 -84.7,18.3785469419,17.6273061969 -84.8,17.8958776584,17.205948586 -84.9,17.0505235048,16.9103694105 -85.0,14.2365241108,15.2657280724 -85.1,12.9046482077,12.7000530692 -85.2,8.90087945206,11.0222666725 -85.3,7.22925124961,10.3688407655 -85.4,7.58601506205,11.5481987511 -85.5,7.28269070071,12.9259254321 -85.6,9.25887682065,14.0275578161 -85.7,11.9131372885,14.9835668002 -85.8,13.4850090937,15.6993967671 -85.9,18.3903157859,17.7796842947 -86.0,20.718482017,20.2224403819 -86.1,21.2667922417,22.9590337234 -86.2,22.1920959742,24.2018727301 -86.3,23.6210348103,24.1257523979 -86.4,23.4154134722,24.126294855 -86.5,23.4884371329,22.9008106578 -86.6,22.3131985874,21.3276325653 -86.7,19.5364228072,18.5665814433 -86.8,17.9484324102,16.1116239037 -86.9,12.2099732988,14.0770263594 -87.0,8.33447435008,10.139461458 -87.1,3.20122682408,5.8526845729 -87.2,-0.525925823994,1.23962624344 -87.3,-6.46065912667,-2.32745188761 -87.4,-5.71411899115,-2.74634903567 -87.5,-7.31642676198,-3.97289527194 -87.6,-7.74023998166,-7.45966669957 -87.7,-8.79620691179,-7.29171087183 -87.8,-6.65715591997,-8.03959334112 -87.9,-5.27898208057,-5.91385964427 -88.0,-4.24154482519,-4.2681756885 -88.1,-1.14699530826,-1.52087191382 -88.2,1.96464176697,0.765283355484 -88.3,3.6849276416,1.98995973072 -88.4,3.52451668843,1.95491269991 -88.5,3.63555605463,2.66319331428 -88.6,1.5700147653,1.65773221793 -88.7,-0.147385317149,-0.693859556669 -88.8,-1.89548445342,-0.996762319678 -88.9,-2.78844718342,-4.62082022863 -89.0,-3.7807670275,-5.04625276161 -89.1,-4.2077528443,-6.77803826568 -89.2,-5.84503388245,-10.818876848 -89.3,-7.02713198396,-11.840937937 -89.4,-8.50881685349,-11.6856007869 -89.5,-8.91921663612,-12.260542545 -89.6,-9.42553800059,-10.2795000624 -89.7,-9.37209689239,-11.3035978901 -89.8,-8.05057439504,-8.15516612174 -89.9,-5.16958261644,-4.95562627755 -90.0,-3.22048818916,-4.14882526457 -90.1,-1.69309510542,-1.26764197363 -90.2,-0.375916133641,-0.496139927497 -90.3,1.10041477212,1.32819587249 -90.4,0.914090227823,1.65607568018 -90.5,0.30103767093,1.4208871429 -90.6,-1.81090961127,0.559011424318 -90.7,-3.54851443509,-1.82353162907 -90.8,-5.64527884492,-3.80620519399 -90.9,-7.73717021757,-7.22003339704 -91.0,-12.1665630176,-12.1440542529 -91.1,-16.6772211693,-16.4367091571 -91.2,-19.6766642587,-19.7970757844 -91.3,-22.284420434,-23.9958309901 -91.4,-25.7000659239,-25.3655529571 -91.5,-24.8850677099,-27.2613337041 -91.6,-28.2636335707,-30.3755812573 -91.7,-28.5456481663,-30.6004858127 -91.8,-26.2158732064,-29.9893471055 -91.9,-25.4052153481,-27.4904321667 -92.0,-23.9434161988,-27.4132443235 -92.1,-22.0277821134,-25.7504790863 -92.2,-20.0089854799,-26.1729627836 -92.3,-20.9109267901,-24.6997487028 -92.4,-20.7522172831,-24.74521888 -92.5,-21.2380724382,-23.6682114117 -92.6,-21.5269710731,-24.0094460704 -92.7,-24.7965350076,-25.5557021846 -92.8,-26.1428350186,-28.4669282572 -92.9,-28.4867986399,-32.1676947592 -93.0,-32.8505996914,-33.7870405668 -93.1,-35.379652417,-34.2573641935 -93.2,-35.8355441304,-35.1515460992 -93.3,-38.023919527,-35.804375516 -93.4,-37.7430850036,-38.7688361249 -93.5,-37.8863383253,-37.5659015128 -93.6,-36.806590421,-37.0666641932 -93.7,-33.8503373031,-35.6764922585 -93.8,-28.9323606429,-31.1605200778 -93.9,-23.6504462745,-27.095055018 -94.0,-19.8737422039,-23.16129593 -94.1,-14.8985153731,-18.0435575197 -94.2,-9.3069961021,-13.4201340233 -94.3,-4.99013517014,-7.13232403217 -94.4,-1.05042960993,-5.4594106118 -94.5,1.78440249132,-0.900535939452 -94.6,2.88712629576,1.31010658085 -94.7,6.15884341076,3.36723752632 -94.8,5.98192715542,2.6218456943 -94.9,5.57195040195,4.69244905513 -95.0,2.85705927151,5.49347014121 -95.1,4.36405409899,5.10310529332 -95.2,4.83092541287,5.29383832935 -95.3,4.31381786208,4.93354698818 -95.4,6.33345286308,6.0272173773 -95.5,5.17552812193,6.58034325221 -95.6,9.4560826688,9.17468868756 -95.7,11.1986922278,9.66794082533 -95.8,15.9557085506,14.0726801805 -95.9,20.0068737022,16.6376244965 -96.0,23.7405820296,20.1526196409 -96.1,25.9279139347,25.0299777304 -96.2,27.5822624448,26.3638150425 -96.3,30.0302926074,29.1553255454 -96.4,30.7797811908,29.162982622 -96.5,33.8532722805,29.4059713792 -96.6,32.0418021753,30.8975084575 -96.7,33.5989499869,32.0500938905 -96.8,29.8831214618,29.1891040369 -96.9,28.5859606087,28.1247125214 -97.0,25.0279927317,24.5657913156 -97.1,21.3765342702,23.5209534583 -97.2,19.2284811286,19.502680106 -97.3,16.9726578425,18.7264236944 -97.4,15.7719433036,17.4887423816 -97.5,16.3452949272,18.2004504625 -97.6,15.9534007437,18.7483920012 -97.7,18.9038816901,20.7565510036 -97.8,22.7387574466,24.2826566194 -97.9,25.7371190898,26.4850803942 -98.0,29.4805355395,29.997021916 -98.1,32.3146841483,33.2312472484 -98.2,35.77056522,36.8867071379 -98.3,37.9016565475,37.4352620232 -98.4,40.6276046961,39.7952689667 -98.5,41.8303286592,41.7042811408 -98.6,43.8907661211,42.3741842873 -98.7,44.034511648,41.5237016492 -98.8,43.9615964334,41.5468404422 -98.9,43.7642187244,40.9337354226 -99.0,41.5438290516,41.888801832 -99.1,38.1825553878,39.5550949764 -99.2,38.3855377542,39.6935605571 -99.3,37.3257055344,40.8580232482 -99.4,38.5260207934,40.7682076863 -99.5,37.6257489826,42.884993671 -99.6,40.7620815066,45.009587263 -99.7,43.0159058026,46.9496009979 -99.8,46.5092507256,50.8897780382 -99.9,50.3198725804,53.5506608808 +0.0,56.4484772424,54.2856764937 +0.1,60.2293347765,58.9757484659 +0.2,63.8025550183,59.1575474844 +0.3,66.9830317632,64.2716041336 +0.4,68.2265313126,66.4198534858 +0.5,69.7036077858,68.2466306906 +0.6,67.7886681592,68.7255169364 +0.7,66.6669388906,68.1734908866 +0.8,64.1773942859,65.7454387285 +0.9,63.0571739731,62.1080754811 +1.0,60.0997399719,60.8652477554 +1.1,59.017189656,57.5400237646 +1.2,57.0814557099,55.111211048 +1.3,54.5821788144,51.5100618071 +1.4,52.8810686199,50.9928799717 +1.5,51.1258932247,48.8056877436 +1.6,51.0866844978,48.8132835232 +1.7,51.2234340151,48.6816389095 +1.8,51.7654568407,49.5305918805 +1.9,52.7245371674,51.5593386968 +2.0,53.6897464248,52.7019090139 +2.1,55.283633246,55.0380193056 +2.2,58.1380264171,56.9992265269 +2.3,60.163266068,58.2679714688 +2.4,62.1527138592,56.590756952 +2.5,61.8148950498,59.769371508 +2.6,61.5445241351,59.6061223583 +2.7,59.8444653584,56.8868963323 +2.8,57.586204595,54.2283222586 +2.9,57.8276992132,56.289740987 +3.0,56.3470264965,53.7695031222 +3.1,55.5778398853,53.2149082088 +3.2,51.4208984766,51.4249091159 +3.3,49.3422052277,51.3929499458 +3.4,49.4396841664,49.9037009702 +3.5,50.5068552414,50.7173645793 +3.6,52.1941110509,53.4939457114 +3.7,55.4807161131,56.1804105286 +3.8,59.4429869518,62.3890633944 +3.9,65.4691926076,66.4913714458 +4.0,68.2546140603,70.9832931931 +4.1,72.5779471599,75.2168277788 +4.2,77.2150988768,81.0145853091 +4.3,82.4310294396,84.8398672137 +4.4,84.8321446373,89.5917142166 +4.5,87.99465676,92.306962966 +4.6,90.0646280519,92.9512386726 +4.7,91.1657996414,93.2877408017 +4.8,91.3287553385,93.4790643451 +4.9,91.6818434527,91.5691007989 +5.0,91.8972420133,90.3043199362 +5.1,91.6400956437,89.4469627104 +5.2,92.2975704607,88.7763353642 +5.3,92.5573336895,90.557616406 +5.4,93.2513554909,90.2620828864 +5.5,93.6865739567,90.7521790657 +5.6,96.1237300841,91.9796070274 +5.7,98.1868480313,93.3228202658 +5.8,101.412173255,97.319097559 +5.9,103.147897921,101.153433524 +6.0,105.483113979,102.545728196 +6.1,107.217356352,105.497956088 +6.2,108.367733696,108.196648694 +6.3,109.797817642,108.972556303 +6.4,110.390363547,109.885461106 +6.5,110.272242109,111.44950651 +6.6,109.374859445,108.551046324 +6.7,106.839245586,107.97779942 +6.8,103.488978792,104.560002063 +6.9,99.8145535536,99.5512822929 +7.0,96.6309472019,98.4902168159 +7.1,93.0741937602,95.6940516226 +7.2,90.2872961692,91.3991665587 +7.3,88.1176356315,89.5402436306 +7.4,85.6352805128,85.2402052462 +7.5,86.4146288674,85.4436537751 +7.6,85.4580113213,85.6439469418 +7.7,86.991651216,86.1315246469 +7.8,87.7202069763,87.7038931256 +7.9,90.8419761368,88.6779797631 +8.0,91.8029725093,88.5207300508 +8.1,93.821985091,92.0443344644 +8.2,94.9971142495,94.4645853876 +8.3,96.970167441,96.0794743349 +8.4,97.5900585129,95.970618963 +8.5,96.4038239036,97.9500178159 +8.6,97.264221609,96.9536422867 +8.7,94.5307359843,95.628346412 +8.8,93.3276378282,94.4706511024 +8.9,91.2968195931,92.946527751 +9.0,90.0274942973,89.6974464916 +9.1,88.7950235906,87.8896851604 +9.2,86.2643819352,86.3255008786 +9.3,84.9260089697,83.8105962822 +9.4,85.2091440269,82.796171619 +9.5,84.4388099791,79.9911182557 +9.6,84.1173982697,82.5938905425 +9.7,85.2517300611,84.3189713357 +9.8,85.3257851764,86.1290052558 +9.9,87.2994864401,88.8322632535 +10.0,90.1546947811,90.2878629947 +10.1,93.8369071376,92.3380148027 +10.2,95.2447379958,94.4664000566 +10.3,96.3426172417,95.1969676946 +10.4,97.2115921989,95.913062415 +10.5,96.5597700709,95.3414200927 +10.6,96.7124836388,92.5399728843 +10.7,94.9063062696,92.0130678154 +10.8,92.6972974498,87.3267334631 +10.9,88.2983848785,83.7730406496 +11.0,84.4960316934,81.6445602068 +11.1,79.2488324655,78.088450695 +11.2,74.2174112501,75.4652449341 +11.3,71.23540423,70.809634346 +11.4,66.3814318075,68.1952469982 +11.5,66.3063877075,66.6751258738 +11.6,62.4518196365,64.7396552613 +11.7,62.2773725945,64.4685435696 +11.8,62.5828128811,64.0332430935 +11.9,62.9096703056,63.4410478538 +12.0,63.810473296,66.8022582994 +12.1,64.4575095735,66.8015634888 +12.2,66.0118073252,68.5417617474 +12.3,65.7513744593,68.2726697117 +12.4,67.8458249983,66.6429983512 +12.5,65.4541561161,66.4890067231 +12.6,63.4737458109,64.6026913703 +12.7,61.5235520715,63.5043123992 +12.8,62.4629144999,59.768563453 +12.9,58.2711488623,57.2289693734 +13.0,55.0689116078,53.9796942761 +13.1,51.7342552962,52.5022134306 +13.2,49.075335295,48.0269656253 +13.3,47.5838470967,48.4304834095 +13.4,46.2538859252,48.7687877516 +13.5,47.9973426061,49.7729154756 +13.6,50.5781788724,51.7175487813 +13.7,52.5238810801,52.684113893 +13.8,55.9524416753,57.3177077307 +13.9,59.0411815441,61.1849060501 +14.0,61.7929471931,66.8657371303 +14.1,66.8963844146,70.2511330913 +14.2,69.8031423905,73.6374195176 +14.3,73.7386698394,77.7025894197 +14.4,77.74202577,80.3694111095 +14.5,81.6699252807,82.0412924696 +14.6,82.6601058029,83.1246330011 +14.7,83.5126484323,82.086926924 +14.8,82.2894968235,84.8550017466 +14.9,81.5076914843,84.2862980584 +15.0,80.5914041287,85.3564879798 +15.1,79.5731480774,82.3636846758 +15.2,79.2008354852,82.757708265 +15.3,79.462458543,81.5868378155 +15.4,77.495507225,82.3057833915 +15.5,78.5236912368,82.5340423975 +15.6,80.0452623301,82.7593389036 +15.7,81.0446379923,84.0292533345 +15.8,84.2130019184,88.0251603227 +15.9,87.6246008348,89.6779453583 +16.0,92.2278738669,91.4240976689 +16.1,94.8804519698,93.2414367578 +16.2,98.0337589058,96.0561806614 +16.3,98.8342686043,98.2877135414 +16.4,99.3185799825,99.4825654397 +16.5,99.6889562504,99.6147274931 +16.6,97.4630290927,98.2980537466 +16.7,96.9901934488,96.1897543792 +16.8,94.0461518951,92.3092549364 +16.9,90.364105587,87.9125511827 +17.0,85.8073339583,84.42593434 +17.1,83.8034553445,81.0193491262 +17.2,78.951045041,78.7639179782 +17.3,76.0939730583,74.6815759343 +17.4,71.8463937144,74.0716672726 +17.5,71.679293349,71.3722225275 +17.6,69.2579908503,71.123340597 +17.7,70.1416132573,71.969628774 +17.8,69.6234548757,73.6056984545 +17.9,74.0048033391,76.475634093 +18.0,74.7573455502,78.4803298688 +18.1,76.3911478235,80.7425098042 +18.2,78.7853472567,80.9319637498 +18.3,82.1680057591,84.515259191 +18.4,84.248908252,83.8966788268 +18.5,83.7398714343,83.4459590869 +18.6,83.757754852,84.9667118325 +18.7,83.9604863786,83.5190017323 +18.8,81.522185086,82.0622954485 +18.9,80.2174262428,81.6210864998 +19.0,78.7631745016,77.540185991 +19.1,76.9078903108,76.9901592656 +19.2,74.2438291128,77.4658059287 +19.3,73.4344683256,75.220017703 +19.4,73.8928402552,73.0867545924 +19.5,72.9003209676,72.5095959923 +19.6,72.9676879621,73.7291908142 +19.7,76.7825924267,75.1310709221 +19.8,78.8465665649,78.79284586 +19.9,79.3806908025,79.34283631 +20.0,83.9519563152,84.1304062099 +20.1,87.6165556865,84.9672673403 +20.2,88.5949517742,89.3482811395 +20.3,91.939385844,89.101470389 +20.4,90.9969763003,89.4464515649 +20.5,91.6548630442,88.4922779233 +20.6,91.8708569393,88.9085694348 +20.7,88.7553553278,84.2181240777 +20.8,83.8907875206,81.5868082206 +20.9,80.204788243,79.4763755429 +21.0,74.2619109035,73.4072807272 +21.1,72.3227871344,69.713182045 +21.2,67.7764006702,67.0286956046 +21.3,64.2099272673,64.6786008785 +21.4,63.2198395186,60.3873865964 +21.5,62.0673418609,58.1404927865 +21.6,61.6849087747,58.7305013094 +21.7,61.6540667442,57.6866152661 +21.8,60.5920519902,57.7669275351 +21.9,61.5155955874,58.0527714246 +22.0,61.158948355,58.2191981274 +22.1,63.1086976268,59.1649636171 +22.2,64.8645522364,61.2796584542 +22.3,64.4336915154,61.2968283162 +22.4,63.2515640085,61.5588005227 +22.5,60.8913521595,58.9012494865 +22.6,58.5173387057,59.5467506181 +22.7,55.9484240345,57.1914297284 +22.8,51.2096713005,54.6966776247 +22.9,49.3008741495,52.315331941 +23.0,46.4104683963,48.9131662704 +23.1,44.291220787,45.9113334115 +23.2,41.6729732448,44.0010181304 +23.3,40.1573431924,41.2993839646 +23.4,41.4891986665,40.5027821556 +23.5,39.6267432573,41.2748337181 +23.6,41.9999822936,41.9174236021 +23.7,43.3195779448,42.8739784583 +23.8,46.2410462878,46.6030613606 +23.9,48.5288585431,48.5826833608 +24.0,51.2282826467,51.176863153 +24.1,54.5306578259,52.7582757945 +24.2,59.7452870385,57.9540910428 +24.3,61.8602728325,61.570221038 +24.4,62.6129553034,63.6196137443 +24.5,63.782697156,65.6431815028 +24.6,65.9221881229,64.7793736469 +24.7,67.0910158667,64.134408508 +24.8,66.5055283339,63.0875663738 +24.9,64.0853049108,62.4085281454 +25.0,62.5274830126,62.656485317 +25.1,60.1600039643,61.2627358097 +25.2,57.2413309155,59.9594468344 +25.3,55.2477657151,57.3529918391 +25.4,54.5292539955,57.9315585586 +25.5,54.9176785059,55.1024827985 +25.6,56.4244740896,55.2797724963 +25.7,59.6601863323,57.2086891951 +25.8,62.0160502583,58.4719025359 +25.9,64.3479920595,61.1047323446 +26.0,66.1611174702,63.8171867933 +26.1,66.4892077896,64.397377882 +26.2,66.9490043185,65.6475169968 +26.3,66.5219308905,66.8219515723 +26.4,66.3035329599,66.222914857 +26.5,63.5879740789,64.2948140505 +26.6,61.8745200311,62.6985787802 +26.7,59.1251500474,59.1859247999 +26.8,56.8459951762,56.8258026407 +26.9,50.7492586497,53.1425929734 +27.0,48.4317576263,48.0044505197 +27.1,44.2089434152,44.6831456496 +27.2,39.0882895079,39.8730537211 +27.3,36.0332906628,37.4850833116 +27.4,31.3034310547,33.4755879507 +27.5,30.3593033593,31.0529114411 +27.6,29.5584643649,28.8558516526 +27.7,26.9467935592,28.2426910802 +27.8,27.2624081265,29.1655371829 +27.9,28.8561335844,29.1866496819 +28.0,30.1168142158,29.6202329398 +28.1,29.9697990631,30.4783942082 +28.2,28.5077838516,31.946067909 +28.3,28.4886437498,33.0438668749 +28.4,29.5683892035,33.5507105426 +28.5,30.3193446866,32.3229440711 +28.6,31.1887989307,28.8290660644 +28.7,28.7434031011,28.2383785781 +28.8,24.7848166204,24.6490644971 +28.9,24.2411850322,22.7093424929 +29.0,20.5924298232,17.9307965821 +29.1,18.1392113287,13.9889250598 +29.2,14.7357398103,11.9575445391 +29.3,12.4737622787,9.1830906373 +29.4,9.35002636615,8.80481709536 +29.5,9.51414691761,8.15184893333 +29.6,8.35513908559,8.44484456187 +29.7,8.73179983443,9.7462215904 +29.8,9.62861501449,12.2022961297 +29.9,11.5514959454,14.6765176354 +30.0,12.1859257178,16.6149441201 +30.1,13.4599110029,17.8660490046 +30.2,13.2106842109,19.6872705463 +30.3,13.7923896017,18.7181191319 +30.4,14.6491821064,19.6361299547 +30.5,14.0166800137,16.8332995454 +30.6,12.0800314356,16.8096043427 +30.7,9.79167142034,11.8198437103 +30.8,6.23167098219,9.07373181042 +30.9,2.30377423944,4.48515716567 +31.0,-2.73397739113,-0.0671424974881 +31.1,-5.16058730532,-5.87343053796 +31.2,-11.0348976115,-11.2362481338 +31.3,-12.6151847388,-13.853821825 +31.4,-17.3274064323,-16.2144746465 +31.5,-20.2460833678,-19.5425315404 +31.6,-20.7160494265,-21.7255537119 +31.7,-22.7972597059,-21.5956424743 +31.8,-23.5088804654,-23.3117159359 +31.9,-22.1411791133,-22.1809973837 +32.0,-22.0333936532,-21.3957028848 +32.1,-21.3090970489,-20.7664430941 +32.2,-22.6925745953,-21.1647190296 +32.3,-22.1821642759,-21.0937442532 +32.4,-22.9032567034,-22.344999655 +32.5,-24.1229838627,-24.3817281825 +32.6,-24.5514914053,-25.8209566766 +32.7,-26.9797079296,-28.2208574949 +32.8,-27.9193744799,-30.435702966 +32.9,-29.6674674402,-33.9937689543 +33.0,-33.1466956411,-36.7590730095 +33.1,-35.2842245796,-41.4050844014 +33.2,-39.6588594456,-42.4447883709 +33.3,-41.3935334946,-44.5678495125 +33.4,-44.8466903101,-45.448790885 +33.5,-45.9584915799,-47.1927785743 +33.6,-43.4585463981,-45.2819958271 +33.7,-40.4861374077,-43.2820734977 +33.8,-35.8260354944,-41.1084707684 +33.9,-34.1571003667,-37.2806771339 +34.0,-29.2845146838,-32.9197337868 +34.1,-25.2432673121,-29.0247400284 +34.2,-19.8932589388,-25.0718609185 +34.3,-17.2871867536,-21.0468099996 +34.4,-14.1494869336,-17.261904905 +34.5,-11.8349409217,-14.6159882705 +34.6,-9.05156304277,-12.5233044727 +34.7,-9.01074101651,-11.922260632 +34.8,-8.37351360305,-13.4224307566 +34.9,-10.8314368443,-12.582422258 +35.0,-12.2413712066,-11.8655474136 +35.1,-13.7413106004,-14.5319315208 +35.2,-14.4901737825,-14.5534078487 +35.3,-16.3667822906,-14.1110011699 +35.4,-14.093256115,-13.2393467594 +35.5,-14.7603955072,-12.2700221278 +35.6,-14.1919986543,-10.7650690751 +35.7,-12.2012275438,-9.36476420489 +35.8,-9.54940500642,-7.60839488185 +35.9,-6.57702679356,-3.74544669975 +36.0,-2.85879603997,-1.93249698642 +36.1,-0.32776585771,0.4755195943 +36.2,2.79123810814,2.21289635483 +36.3,4.36295825813,4.64622841231 +36.4,3.50682504766,4.78149614306 +36.5,2.22834332989,4.39806650602 +36.6,1.5507485673,3.86935263851 +36.7,-0.543858201454,-0.0865768304355 +36.8,-1.75447989509,-0.876139108302 +36.9,-4.68675565208,-4.28168298738 +37.0,-7.18414677504,-7.30243453584 +37.1,-10.2394207735,-10.5677502279 +37.2,-13.9432539066,-12.1713454957 +37.3,-15.5751258881,-14.1372058798 +37.4,-18.1944940501,-16.6235987781 +37.5,-19.6267462904,-16.3907271284 +37.6,-18.2817694491,-17.4663215761 +37.7,-16.6580170315,-15.8198079087 +37.8,-14.404135709,-12.9773846845 +37.9,-12.4777378024,-12.1507521544 +38.0,-7.98829357077,-9.60763268894 +38.1,-7.51192267376,-6.00868840778 +38.2,-4.71999109483,-5.25670525932 +38.3,-1.48818622408,-1.85072645768 +38.4,0.294922828531,-2.48652774491 +38.5,0.080873767468,-1.54813977316 +38.6,0.576839872099,0.164231771166 +38.7,-0.34194819956,0.541980685621 +38.8,-2.62711297193,-0.337014376431 +38.9,-5.29848600441,-4.16765978318 +39.0,-6.60819889688,-4.5541462951 +39.1,-8.37466491662,-9.04860412533 +39.2,-8.20247048196,-6.29177177073 +39.3,-7.60387475506,-7.63288799031 +39.4,-5.67119229136,-7.15547042366 +39.5,-4.94716367795,-6.18462304351 +39.6,-4.49396168037,-5.85702439437 +39.7,-2.98625169726,-2.8792513662 +39.8,1.78963638935,-0.0310415621553 +39.9,5.60036712258,3.41006983222 +40.0,8.40464333217,5.92574835567 +40.1,10.9728681892,8.32698919986 +40.2,12.6083412534,11.0691270611 +40.3,17.0152612446,15.1888448317 +40.4,16.1169727216,15.1943986402 +40.5,18.0555184671,17.2910040074 +40.6,15.7328447701,17.647673629 +40.7,14.572171846,15.7772948725 +40.8,10.8743174175,12.0201332701 +40.9,8.73744369222,11.4205897143 +41.0,3.18553482698,7.75116515848 +41.1,2.19809718623,5.7149552995 +41.2,-0.0976210813642,2.47020305894 +41.3,-3.04425240316,1.37221268519 +41.4,-4.78060111446,-1.98461761918 +41.5,-5.36849238559,-3.7701845021 +41.6,-4.88209085055,-3.59210048903 +41.7,-2.95524385223,-4.39124698582 +41.8,-1.19645291985,-2.07001890881 +41.9,-0.120450172557,-2.8942889473 +42.0,2.05206658383,-1.45632247704 +42.1,3.59449748682,-2.01399889786 +42.2,5.19414100852,1.59195757902 +42.3,6.03501936923,2.73052682037 +42.4,5.26156157765,4.82801083002 +42.5,4.27857214289,4.64424040062 +42.6,2.57333854072,4.2326800477 +42.7,0.432548675455,0.298462683712 +42.8,-0.465685507591,-0.241167054182 +42.9,-1.39717825503,-2.28604510092 +43.0,-1.97202099972,-5.95172807912 +43.1,-4.23752198681,-8.75432136536 +43.2,-5.40613607503,-8.03259937449 +43.3,-7.26591775706,-9.21057488035 +43.4,-7.20621285453,-8.50299333141 +43.5,-6.26551416567,-7.52508665846 +43.6,-4.60218506781,-3.65290257989 +43.7,-2.55824317167,-0.58915228126 +43.8,3.35246145581,3.67359050402 +43.9,6.94149861741,9.01562120186 +44.0,12.5263853671,10.8424453865 +44.1,17.0381207025,16.7643961913 +44.2,21.4525744645,22.1295739782 +44.3,26.3712786578,25.3950702721 +44.4,27.9103255933,30.5027924795 +44.5,29.7276388603,32.993782025 +44.6,33.7707647131,33.6239370833 +44.7,33.3764007688,34.4588867649 +44.8,34.2356188015,33.0904642283 +44.9,34.1450425533,31.7013224545 +45.0,34.5518888663,30.9950289039 +45.1,33.0154688707,30.0219366423 +45.2,32.7756217714,30.2328723713 +45.3,30.3299011382,30.2225516356 +45.4,32.1375938892,31.4826549798 +45.5,31.888152395,32.3288541244 +45.6,33.9396929494,34.9918849464 +45.7,34.3906192588,36.8665544327 +45.8,38.1535256863,40.6328056422 +45.9,39.2774083539,43.4290075718 +46.0,44.0002364852,45.2750935929 +46.1,48.5348279694,47.6389961549 +46.2,51.5633747676,49.0300295087 +46.3,53.8270651161,51.8001747746 +46.4,54.4180293813,50.9242056911 +46.5,53.5099407827,51.5237879453 +46.6,51.7785487687,48.3961882638 +46.7,49.2527214872,48.5948592566 +46.8,48.0090817733,46.2424202903 +46.9,46.1720353498,43.011857535 +47.0,42.1171503479,38.9799794981 +47.1,38.6330485504,35.6072281798 +47.2,34.7403228211,34.5873452035 +47.3,30.8585731205,30.3683976601 +47.4,28.7066770152,29.099765179 +47.5,27.9992130456,26.5250733978 +47.6,27.3618338764,27.4931189795 +47.7,27.2593535461,26.5373428637 +47.8,28.7599623558,29.6212406461 +47.9,30.2103075873,31.6453489142 +48.0,34.1248038996,34.5512418436 +48.1,35.5946812808,36.1352821965 +48.2,37.6354094072,38.5660040157 +48.3,39.3232766367,41.1576173943 +48.4,39.6126153456,45.0013586327 +48.5,41.1819666866,44.3825522264 +48.6,40.7836108094,45.2230099814 +48.7,40.2428466345,44.5226667187 +48.8,38.5073168456,43.2102099137 +48.9,38.7147592165,40.0560711172 +49.0,35.7017338267,35.6314708868 +49.1,34.9968753687,35.5924831242 +49.2,32.9956408953,32.642323382 +49.3,31.9944371137,30.6439513112 +49.4,30.3782907109,30.194390965 +49.5,31.6800913087,30.6192684654 +49.6,33.7989202646,34.0545367581 +49.7,36.1897389795,35.8591069831 +49.8,38.6375940606,37.2048859107 +49.9,40.9975232306,39.4554762913 +50.0,42.7299919378,44.1650241277 +50.1,46.7164870686,45.3887729861 +50.2,46.7236535874,45.4529297911 +50.3,49.7709368982,50.1277874073 +50.4,50.4762343829,49.0909743741 +50.5,50.125551419,48.9872074818 +50.6,49.7794581494,48.9346410735 +50.7,47.020146142,47.4782114335 +50.8,44.8267494589,45.5763568191 +50.9,43.9483792928,43.2051036882 +51.0,41.5559978556,39.785423414 +51.1,37.7796723118,36.6811850389 +51.2,35.0610358899,34.0964892412 +51.3,31.6568424431,29.953402182 +51.4,28.0913398187,30.1160478934 +51.5,25.4047024948,27.2494175442 +51.6,24.6778729856,25.7812344268 +51.7,24.497648322,25.1135461435 +51.8,24.9836178638,25.9935107575 +51.9,26.3959882658,25.7185915052 +52.0,28.7269077511,28.4060805861 +52.1,28.157152434,29.5101303383 +52.2,30.2767024126,32.7275555388 +52.3,29.8091335635,34.0581621033 +52.4,30.6453489809,34.9254062792 +52.5,29.1538005409,34.9247152922 +52.6,29.7204044621,32.3380532555 +52.7,29.230550033,32.6295756726 +52.8,28.3650953224,31.2514663388 +52.9,29.03504396,28.6580195193 +53.0,26.9445656448,25.7338455513 +53.1,23.9259766458,23.4571398672 +53.2,21.9385175395,20.8622514152 +53.3,20.6562506665,21.0847313242 +53.4,19.6100575779,19.8979043499 +53.5,20.2643612892,20.338872603 +53.6,22.3676471202,21.7390832546 +53.7,26.3792723876,26.2618171086 +53.8,31.2450263431,30.5293803764 +53.9,35.249760929,33.7785945661 +54.0,39.3239127919,38.8634813309 +54.1,45.4283067412,44.4291324198 +54.2,47.8362872741,49.3022060093 +54.3,52.9277377624,53.8206417427 +54.4,55.5949621799,57.5043663846 +54.5,57.5511834554,60.5436015612 +54.6,58.7312805794,61.9043206537 +54.7,60.7381731864,63.0918642404 +54.8,60.4737328538,63.3743156715 +54.9,61.5555174882,65.2242672312 +55.0,61.2287273076,63.590640636 +55.1,61.7968603243,64.2453362471 +55.2,60.32824031,64.3913903171 +55.3,62.3262816512,65.4310141644 +55.4,61.5946205925,67.0874289418 +55.5,63.2414262871,67.393552525 +55.6,65.5833098378,69.1438489541 +55.7,68.6594765569,71.9955274339 +55.8,73.0739378114,76.6531172336 +55.9,75.8202237025,79.0550520952 +56.0,78.9191175591,81.9154211801 +56.1,82.0392583983,85.031332274 +56.2,84.2511846862,86.5702758593 +56.3,86.0981996252,89.6512768685 +56.4,87.8542922533,90.7041621689 +56.5,88.0277638421,90.2786097445 +56.6,87.2332968232,90.9597266171 +56.7,85.3702534019,88.7018385339 +56.8,85.1001698409,87.4281183391 +56.9,82.6615230582,84.4404480849 +57.0,82.7311528074,83.0516109241 +57.1,80.1982338285,80.1095434315 +57.2,77.7385634934,77.0182907568 +57.3,76.666045264,76.1329063762 +57.4,75.0560778681,75.1632103113 +57.5,74.9643683925,72.1988443877 +57.6,73.6048373351,72.8197905795 +57.7,76.261133068,75.1898303974 +57.8,77.1841717259,78.1459771809 +57.9,79.62017512,81.5975872001 +58.0,81.997838355,83.8035532556 +58.1,83.8541365113,87.3781734046 +58.2,88.7667457595,90.0462206302 +58.3,91.5887236874,91.1923454808 +58.4,94.1188869124,93.6476434814 +58.5,95.637345805,95.3196036169 +58.6,96.6099117054,95.9780365913 +58.7,96.8362473455,97.4631373927 +58.8,95.48931309,93.7429421532 +58.9,91.1324904187,93.5302419881 +59.0,89.7361650162,91.1041611962 +59.1,87.8093833249,89.7391211085 +59.2,86.8198385173,86.4282303851 +59.3,87.0562376117,87.9865314646 +59.4,87.6611651595,89.189878418 +59.5,88.1696053489,91.2832186789 +59.6,91.1334593059,92.6900209127 +59.7,92.1230656496,96.7789768387 +59.8,95.6955531576,98.5564519808 +59.9,98.7865152262,101.397663039 +60.0,102.686467891,104.738870237 +60.1,105.016319339,106.871711425 +60.2,107.569675506,110.010966041 +60.3,108.07869699,110.371751468 +60.4,110.375549984,112.275639798 +60.5,111.724804027,114.028649383 +60.6,110.870256439,112.667599739 +60.7,110.591801979,112.772019957 +60.8,109.413704435,109.503962507 +60.9,107.233319579,107.390186206 +61.0,104.935602477,102.990769579 +61.1,101.61738997,100.203148926 +61.2,98.717387347,98.1070669878 +61.3,95.0655372086,93.6624868216 +61.4,92.7517170142,92.8325520626 +61.5,90.5019698972,89.0759946202 +61.6,89.8557075928,88.4534199687 +61.7,90.3290134137,86.2112364235 +61.8,91.3603469127,87.2684577031 +61.9,93.8839044773,89.2371539197 +62.0,94.5451247505,91.0239871242 +62.1,95.6300572707,93.1667482922 +62.2,96.221475319,95.0200663367 +62.3,97.0029742473,94.0372244995 +62.4,96.9722355739,96.5166891139 +62.5,94.3513834581,97.6154585869 +62.6,94.7663710289,95.5530140925 +62.7,92.8501362378,91.8028983336 +62.8,90.5894236408,90.2967013205 +62.9,88.6110931131,88.0325926719 +63.0,85.5655663385,83.9648225328 +63.1,84.313237776,82.8594565869 +63.2,82.1040002781,81.5514344775 +63.3,80.0040636113,80.2953307188 +63.4,78.483113377,79.7578090575 +63.5,80.0086627947,81.3268030359 +63.6,79.9371607231,81.0839157042 +63.7,80.3626812911,83.3592063092 +63.8,83.9611880783,86.7745616171 +63.9,89.107561844,92.1875865214 +64.0,93.8151447807,97.371202189 +64.1,97.5759452719,100.554418227 +64.2,101.923463964,105.194685863 +64.3,103.210736557,107.893439271 +64.4,104.036522935,110.809402373 +64.5,108.092540879,113.091562843 +64.6,110.537478765,113.608705928 +64.7,112.347839,114.794151142 +64.8,111.026178051,113.965884906 +64.9,109.71851182,111.896654804 +65.0,109.416655727,109.415599745 +65.1,107.755992042,110.548873577 +65.2,107.402060715,108.610136647 +65.3,106.770354339,107.619322874 +65.4,104.738006252,107.486641912 +65.5,105.44267662,107.746148524 +65.6,104.582198953,108.43534451 +65.7,106.095564279,107.985163523 +65.8,108.867018948,110.525586411 +65.9,110.443375258,112.442842046 +66.0,111.985072178,114.6439809 +66.1,114.802000556,115.426340472 +66.2,118.220900455,116.872476735 +66.3,118.241581521,118.842622066 +66.4,119.87461648,118.371669797 +66.5,120.250552544,116.949796394 +66.6,118.038179609,115.093284079 +66.7,114.502773277,112.150224232 +66.8,108.953559588,109.935646216 +66.9,106.267693759,106.326660137 +67.0,102.246477519,102.58749732 +67.1,98.3891023966,99.9252164167 +67.2,95.502120866,95.9510097988 +67.3,91.8020239211,93.0097469111 +67.4,88.508691352,89.1900364686 +67.5,84.5353474176,86.7585084436 +67.6,83.672411283,86.3215500982 +67.7,84.0101372366,86.5394969022 +67.8,83.9631649572,86.9334366681 +67.9,85.8426150278,86.2812051442 +68.0,86.8133259514,87.2379486537 +68.1,90.3795615524,87.1090653615 +68.2,91.1735043223,89.513219937 +68.3,91.6246668502,88.7286847551 +68.4,90.4342210054,90.3512581456 +68.5,89.3379992129,89.8481120191 +68.6,89.5807418793,88.8319561771 +68.7,87.2448885605,86.7359684655 +68.8,84.6880807245,83.5509468139 +68.9,80.8006186734,82.4383996704 +69.0,75.7120832254,76.8706841397 +69.1,72.3918876671,73.962669048 +69.2,70.7848593165,71.5587817168 +69.3,68.2606132016,67.4029900343 +69.4,65.349324502,67.0862576098 +69.5,65.3490799236,66.8577863498 +69.6,65.3930276394,66.7869058013 +69.7,67.9146673856,68.5624500615 +69.8,68.7460493172,67.9190901085 +69.9,71.8620669394,69.5094247545 +70.0,72.8439418321,72.1413156889 +70.1,76.1137401906,73.3619420827 +70.2,74.8117697495,74.4868411402 +70.3,76.5152224561,75.7055999454 +70.4,75.1962845954,76.1196887941 +70.5,73.0198220441,74.8575359964 +70.6,72.1587046436,72.8540613738 +70.7,69.747579472,69.6236125764 +70.8,66.2701685405,64.938380124 +70.9,62.8425607667,60.213588924 +71.0,56.342254841,57.0774637937 +71.1,51.2442419699,52.3847947247 +71.2,45.6693447709,47.9308283862 +71.3,44.1447854254,45.2624405402 +71.4,38.8011395021,40.6213544702 +71.5,36.1547896186,38.2761820824 +71.6,34.9777427783,35.8507836356 +71.7,33.2442713919,34.0843202155 +71.8,32.4976637634,34.4923675512 +71.9,35.2480578968,34.4135615015 +72.0,34.2038602792,34.9261182043 +72.1,34.4011866525,35.8397465494 +72.2,34.2976485775,37.0950475766 +72.3,33.8762994784,35.3633272792 +72.4,31.9835736605,33.8044065319 +72.5,31.0069257752,32.7667955023 +72.6,28.2232010402,30.8561355582 +72.7,26.401431226,28.2307797861 +72.8,22.4909478722,25.1286682522 +72.9,19.8660789899,21.5189377798 +73.0,15.583629744,15.6608638176 +73.1,12.2848238417,13.6342835151 +73.2,10.2902792882,12.4399707706 +73.3,9.80619894174,11.7565952973 +73.4,10.6536674342,8.24629899246 +73.5,11.7392233111,8.26634172238 +73.6,11.3210354457,9.88136614145 +73.7,13.2348367276,12.302044614 +73.8,15.6356319464,14.5461932838 +73.9,18.1340504788,18.5719346051 +74.0,21.6225763346,21.9174985407 +74.1,26.4169529447,23.7219311676 +74.2,29.2514099109,29.0268894629 +74.3,31.3859497149,32.2926353397 +74.4,35.2915525395,35.0973309479 +74.5,36.3553305385,36.2847443386 +74.6,36.4650163528,37.7537482906 +74.7,35.475340822,36.9511813894 +74.8,35.7467240337,35.704347856 +74.9,34.3649970594,35.2129968629 +75.0,36.3674288714,32.7939805955 +75.1,32.593822455,32.0646648035 +75.2,33.2264191205,30.045337694 +75.3,30.8301038043,28.7950298667 +75.4,31.2973484083,29.9702900869 +75.5,31.6239512937,31.2000662419 +75.6,31.4790802289,32.5013828704 +75.7,32.1364878113,34.1941323411 +75.8,31.7823322897,36.2548587663 +75.9,36.3856620978,38.8121075042 +76.0,38.3455986217,40.4822193495 +76.1,43.0853394726,42.2089561842 +76.2,45.0000772837,43.2771761127 +76.3,46.1741897943,45.3362960948 +76.4,45.3910686544,45.6174889063 +76.5,43.2291013346,44.351608446 +76.6,39.8686907416,44.7511148181 +76.7,40.2542921087,42.6529774273 +76.8,36.0829386232,39.0153493819 +76.9,33.4747365586,34.5301607992 +77.0,29.3259902727,28.077424621 +77.1,25.1340476556,27.0930077433 +77.2,23.6337614907,21.2026458457 +77.3,20.2093641241,19.558406133 +77.4,17.6697625944,16.7846061573 +77.5,14.9447980056,16.6305191216 +77.6,14.5706632902,16.0762098343 +77.7,13.0193350533,16.5148655546 +77.8,15.9567418347,19.5655042028 +77.9,17.5411317998,21.0330206611 +78.0,22.1386695644,21.8542805108 +78.1,23.4158284915,25.0256351279 +78.2,25.0932556829,25.8114882621 +78.3,26.118562931,27.2524262205 +78.4,27.4906071947,29.7382805221 +78.5,27.7857115404,28.7878771561 +78.6,28.4825781653,27.6124987581 +78.7,26.8826111097,26.8789744616 +78.8,27.0810106824,24.5988033309 +78.9,25.3177285281,23.3611407987 +79.0,23.6046259691,20.4732338121 +79.1,22.0551688634,18.0265077408 +79.2,18.2472089002,14.6912229176 +79.3,18.4228499668,13.656414695 +79.4,16.1197947328,14.71373254 +79.5,16.710078611,13.4419901975 +79.6,17.5263970321,14.9341034346 +79.7,16.5385757051,15.8573752384 +79.8,17.3754721705,18.3599366108 +79.9,17.2378775738,19.784671993 +80.0,21.4814905749,20.4454684854 +80.1,22.5217241903,26.5217481106 +80.2,27.9279183666,27.2109845307 +80.3,31.7884695095,30.0375019075 +80.4,34.7062662173,28.0671807394 +80.5,33.1930991865,30.9004964236 +80.6,33.6288795092,29.2399559908 +80.7,29.9648785769,28.4760294473 +80.8,26.7115155126,23.5083294706 +80.9,21.8540888855,21.2840812973 +81.0,18.0680842959,17.2016406541 +81.1,14.1735623495,13.8596607111 +81.2,11.2844197046,8.89536208821 +81.3,7.68601853981,5.81460504767 +81.4,4.89280918303,1.79469905754 +81.5,4.42895123433,1.0194876802 +81.6,1.97112702152,-1.91309422012 +81.7,0.395928981703,0.0591771032194 +81.8,1.54295617642,0.156272016798 +81.9,3.13184128561,-0.656656514893 +82.0,2.9980323325,1.27457004859 +82.1,4.63331777434,1.82221842368 +82.2,6.20026309519,3.25210142734 +82.3,4.81036823811,3.87865591003 +82.4,6.13042025432,4.95821850384 +82.5,5.67026840984,2.79730358844 +82.6,3.5985084578,1.07470745447 +82.7,0.304639882709,-1.24170400762 +82.8,-1.79309312966,-3.99516081723 +82.9,-3.74710990556,-5.88887342531 +83.0,-7.3841711121,-7.93425847028 +83.1,-10.6651936315,-10.3705699283 +83.2,-11.7346422414,-11.5555453492 +83.3,-11.8235772247,-12.6332351325 +83.4,-12.484013924,-14.7243317235 +83.5,-12.3537830848,-14.592196516 +83.6,-11.1779509207,-13.0943053351 +83.7,-10.2947843425,-9.52655413076 +83.8,-7.17646618797,-6.39325830556 +83.9,-2.61915881302,-2.8098465215 +84.0,2.20626548851,1.35251895766 +84.1,5.59284515533,7.43040749109 +84.2,8.79290837245,10.6850172798 +84.3,11.6404526616,13.9959139878 +84.4,15.2655519439,17.0576944215 +84.5,16.9638899535,18.6647118387 +84.6,17.6044306181,19.7338676263 +84.7,18.4918008309,19.2039293518 +84.8,18.0149110363,19.6489166649 +84.9,17.1686616835,16.3969657116 +85.0,14.2732141098,15.1013878261 +85.1,12.9979722412,14.3622315873 +85.2,8.93349610933,12.7305658212 +85.3,7.36593722865,10.6129308414 +85.4,7.63417962143,9.75176697504 +85.5,7.53235028472,10.1789105554 +85.6,9.26248361749,12.5705975572 +85.7,11.7221207809,15.1459934328 +85.8,13.3805666388,17.284712371 +85.9,18.1044557878,18.9864881095 +86.0,20.3908071765,20.0544192378 +86.1,21.0262842899,22.029611278 +86.2,21.7857478568,23.8919734622 +86.3,23.4338762689,25.6023542568 +86.4,23.2769995564,25.4476969135 +86.5,23.4558316321,23.7154230717 +86.6,22.2292410875,21.9411499069 +86.7,19.5010521106,18.9761131385 +86.8,17.7882059424,15.8516592109 +86.9,12.0032493447,11.8649158857 +87.0,8.26117587815,8.61814660095 +87.1,3.07453540491,6.29439370709 +87.2,-0.515844948822,2.59289438381 +87.3,-6.4892669405,-0.958458428417 +87.4,-5.69862987505,-4.40854680264 +87.5,-7.43155702642,-6.49594392293 +87.6,-7.79195332058,-5.25760303693 +87.7,-9.1213638697,-4.80339435486 +87.8,-6.86432382979,-6.73996856695 +87.9,-5.61668888118,-5.29166182186 +88.0,-4.51005887077,-5.14019923298 +88.1,-1.44488593332,-2.56859230743 +88.2,1.75683887089,-0.9575219835 +88.3,3.52785298143,1.29541160604 +88.4,3.29042939531,2.69352856625 +88.5,3.42738349849,2.74111594856 +88.6,1.45691889723,1.37247922903 +88.7,-0.148531438614,0.737831421095 +88.8,-1.88489913135,-1.47285785703 +88.9,-2.68890752489,-4.75976303098 +89.0,-3.74720900596,-5.62389795733 +89.1,-4.20771475709,-9.36943512034 +89.2,-5.94902084011,-9.4560600006 +89.3,-7.0377803727,-10.415539814 +89.4,-8.52575245989,-13.3221969733 +89.5,-8.91943248285,-12.9577339572 +89.6,-9.38407557772,-11.3002939059 +89.7,-9.13751496618,-10.4081561419 +89.8,-7.73902540302,-7.14470367709 +89.9,-4.84725788697,-7.20500400972 +90.0,-2.83046298093,-3.51637188521 +90.1,-1.35919694915,-0.265791901073 +90.2,-0.183051039375,0.0833918969106 +90.3,1.28633075212,2.02704092407 +90.4,1.06672344882,1.45555134505 +90.5,0.408543249719,1.64465139479 +90.6,-1.79747742159,0.186281228287 +90.7,-3.39569075465,-1.83038740286 +90.8,-5.64591295082,-4.31351108814 +90.9,-7.73167718911,-8.01676909987 +91.0,-12.2840047872,-10.9078415878 +91.1,-16.7801102136,-14.7450596838 +91.2,-19.8716442858,-19.5806174756 +91.3,-22.4410075101,-23.2942516315 +91.4,-25.837580658,-25.6520769377 +91.5,-25.0402503888,-28.5307042289 +91.6,-28.4670594828,-28.3969247544 +91.7,-28.5976324659,-28.7549756756 +91.8,-26.4690555175,-30.4465761373 +91.9,-25.4122589989,-29.498656639 +92.0,-24.0553727523,-28.0714237489 +92.1,-22.1048976358,-25.1817291303 +92.2,-20.029280319,-25.1626512276 +92.3,-20.9541835224,-23.9832198619 +92.4,-20.7457953679,-25.2457972297 +92.5,-21.226194146,-24.8630494442 +92.6,-21.3719092655,-26.1156814519 +92.7,-24.6396206817,-26.2149113464 +92.8,-25.8999896317,-27.55464669 +92.9,-28.3921906422,-29.7903686144 +93.0,-32.5741311917,-32.9794588009 +93.1,-35.2222216338,-36.4830816649 +93.2,-35.6149567206,-37.412645627 +93.3,-37.8456269437,-36.7308411261 +93.4,-37.5621304655,-36.0862253163 +93.5,-37.8501954037,-34.9276689842 +93.6,-36.7500078947,-35.9498969363 +93.7,-33.8700305081,-32.829818377 +93.8,-28.8983105969,-30.5937830613 +93.9,-23.6690541345,-27.7869073686 +94.0,-19.9371042591,-22.2852230215 +94.1,-15.0586462032,-17.7365314648 +94.2,-9.48418027431,-13.847388148 +94.3,-5.13325338736,-9.27906617765 +94.4,-1.15254134894,-5.64085086455 +94.5,1.71029562039,-0.665946576425 +94.6,2.81687993404,-0.497114637401 +94.7,6.14568163869,2.51806273424 +94.8,5.97262954926,3.29718031939 +94.9,5.65143039053,4.1721935339 +95.0,2.83010476521,2.60346506793 +95.1,4.51846565253,4.28049272917 +95.2,4.84584400525,5.14355442339 +95.3,4.4754625016,5.24930499556 +95.4,6.31080247005,6.30369379974 +95.5,5.14660862824,7.06991135071 +95.6,9.44610672765,9.42070555016 +95.7,11.0648851015,11.2151009735 +95.8,16.0516541648,14.8888900446 +95.9,19.8638312933,16.1689749615 +96.0,23.7421586882,20.9655437561 +96.1,25.7552189163,23.4637375682 +96.2,27.5423119395,26.4352561392 +96.3,30.0228524056,30.3218482309 +96.4,30.8754294372,30.2921231114 +96.5,33.9955669429,31.4598608613 +96.6,32.0947687436,29.7234907394 +96.7,33.7216878945,28.2560852442 +96.8,29.7480958214,28.2238383686 +96.9,28.671938352,28.176522184 +97.0,24.8293883146,24.5477765282 +97.1,21.4841904242,23.2165191617 +97.2,19.1939015353,19.914156364 +97.3,17.028086,19.6234101257 +97.4,15.799789516,16.7849220139 +97.5,16.3472489914,17.5032843273 +97.6,15.9332025103,17.9358775736 +97.7,18.8447455661,20.3394540088 +97.8,22.5879886947,22.44676295 +97.9,25.6140628173,25.7424814098 +98.0,29.2793979142,30.1731623605 +98.1,32.1748847869,32.8246965603 +98.2,35.6317213798,36.3032555647 +98.3,37.7687898169,39.0423245729 +98.4,40.6508487209,41.8069334315 +98.5,41.8400374616,41.1735525435 +98.6,43.9782378135,42.1930833461 +98.7,44.066883233,42.7502372296 +98.8,44.1480962975,42.2039370409 +98.9,43.780938342,40.4051205739 +99.0,41.6481365998,39.8519633874 +99.1,38.3325334015,39.1002756799 +99.2,38.5790834766,40.3750123379 +99.3,37.5994322234,38.7924473197 +99.4,38.8773919117,40.0419134112 +99.5,37.8371781711,42.567713487 +99.6,40.9399510567,43.9528214006 +99.7,43.0633509917,47.5075297198 +99.8,46.6501202676,50.8834151163 +99.9,50.2985555347,53.7541657628 diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_1.csv b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_1.csv index cbabffd142..66198da50f 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_1.csv +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/gold/AutoARMA/samples_1.csv @@ -1,1001 +1,1001 @@ pivot,signal0,signal1 -0.0,56.3558837883,55.8108882058 -0.1,59.2460648911,58.6880891824 -0.2,62.56783787,61.911256666 -0.3,66.7115292482,63.9363262786 -0.4,68.6447406887,67.0915053029 -0.5,71.0318393858,66.9024018893 -0.6,70.3842053472,67.3795903301 -0.7,69.5551209244,67.7919306957 -0.8,66.3139522549,66.8847201231 -0.9,62.7142859562,64.9795534154 -1.0,60.4219016838,60.9075260015 -1.1,56.9679794113,59.1303090856 -1.2,55.0901216964,53.708602045 -1.3,52.7111018329,52.5867720411 -1.4,53.1348548174,50.3205579243 -1.5,50.6760628177,48.9523726201 -1.6,51.0499314107,48.6492613244 -1.7,50.9469547796,48.9799911807 -1.8,51.9481382975,50.7845957274 -1.9,54.4854339282,52.6330611406 -2.0,55.6132372593,54.3062087704 -2.1,58.4807085175,55.6220040198 -2.2,60.5122046381,55.3694402471 -2.3,61.5298447235,56.4090254186 -2.4,61.7313855161,58.5246657409 -2.5,61.4456639208,60.0926637319 -2.6,57.7802853634,57.1503297657 -2.7,57.4684548216,59.1906869379 -2.8,55.3002179993,57.8951033947 -2.9,55.0865377315,56.3169616537 -3.0,53.6520737012,52.5628905179 -3.1,53.1047675634,52.1599857326 -3.2,51.134634264,51.8565998329 -3.3,51.1224635439,50.2765428693 -3.4,50.7973972705,52.3017709825 -3.5,50.783630827,53.6116177044 -3.6,51.3612293761,56.9741849644 -3.7,53.4473306126,59.700086826 -3.8,56.39588924,61.4314333374 -3.9,60.4914652475,65.8568995269 -4.0,64.6612908743,68.3566838295 -4.1,71.4028169138,74.0059660113 -4.2,77.0215940677,78.6434737785 -4.3,81.4927264829,83.5286860873 -4.4,84.0283006331,87.1686589196 -4.5,87.3025495836,89.9272809867 -4.6,89.139226513,91.9077999673 -4.7,89.1130372636,92.9340579081 -4.8,90.1251911604,94.4022338513 -4.9,90.2845487341,94.8389347036 -5.0,90.1990583765,94.5175500617 -5.1,93.2973718374,93.9089234754 -5.2,92.2953344192,93.1147825104 -5.3,92.3338631581,91.5170839217 -5.4,92.2268621354,90.9998720804 -5.5,93.3762279843,93.5298291264 -5.6,94.6285070708,94.4792066102 -5.7,96.7598113029,96.5910266396 -5.8,98.8573073055,100.304977827 -5.9,102.687165419,100.531224109 -6.0,105.53825192,104.945259714 -6.1,109.619555323,107.965313514 -6.2,111.709363427,108.640715342 -6.3,112.47054241,111.503080788 -6.4,112.278469913,110.768813946 -6.5,111.002318037,111.78795679 -6.6,109.95443861,109.931937667 -6.7,108.341335728,107.842244014 -6.8,105.554696459,107.279599023 -6.9,104.153968051,104.484461698 -7.0,99.754336124,101.106227979 -7.1,96.7907883412,96.7089262605 -7.2,92.3371741985,93.7931830018 -7.3,89.5647408997,88.648538813 -7.4,86.0349610879,87.6230770224 -7.5,85.0485945269,86.4933991737 -7.6,83.7480683189,86.9743541325 -7.7,84.8921194292,86.6041534272 -7.8,85.1893186052,88.0254302929 -7.9,86.8290685596,90.8411929532 -8.0,89.5826523576,91.6082248834 -8.1,92.298956493,94.7501405425 -8.2,95.3001669316,97.1205449025 -8.3,94.6673137486,96.9196960609 -8.4,94.7287899594,98.5855869079 -8.5,94.7819166045,96.8610140281 -8.6,96.7579814831,96.5545552186 -8.7,94.9191976653,94.5259248862 -8.8,92.3217320506,92.448852455 -8.9,90.0364131492,91.2602945824 -9.0,87.9549073447,89.1971503904 -9.1,87.3345298589,87.2243345879 -9.2,87.2029851173,83.0316595201 -9.3,84.6029392923,81.4788511495 -9.4,83.5323835162,81.3311242739 -9.5,81.36620302,82.4786355565 -9.6,80.521032583,82.430299351 -9.7,80.8531211054,85.8512614602 -9.8,83.0592659175,86.1713940133 -9.9,85.4034425673,89.0122156083 -10.0,88.4269922023,92.0948804942 -10.1,91.2236069877,95.3142364972 -10.2,94.0056646018,97.240064349 -10.3,98.2636004867,97.3590391032 -10.4,98.7085853039,98.7787262362 -10.5,98.8156621113,98.5832596712 -10.6,96.4639157883,94.8686526724 -10.7,94.9249571597,93.4421006221 -10.8,89.9306827555,91.4779075721 -10.9,86.0276216089,88.3325834882 -11.0,83.8409720842,82.8902308637 -11.1,81.1377822725,78.7622637084 -11.2,76.2145134777,74.9113980872 -11.3,73.5890005779,73.8760604455 -11.4,70.7315467535,69.5677674341 -11.5,68.2288656346,68.5704212836 -11.6,66.7572202568,65.7650832051 -11.7,64.714446664,66.5394331737 -11.8,66.6670058737,66.2747451444 -11.9,67.779820527,67.1676845439 -12.0,65.9926785179,67.1556039863 -12.1,66.7225640649,67.8182668513 -12.2,65.6626228108,67.4201466392 -12.3,65.7775634752,68.185782684 -12.4,67.5890143414,68.8824868836 -12.5,67.0863319699,67.1060182208 -12.6,64.7630104489,65.6979701299 -12.7,64.5317649255,64.4446192024 -12.8,62.5907721229,61.9508377723 -12.9,58.3187391431,59.6563240565 -13.0,56.6300400206,58.0090372266 -13.1,53.2802711003,55.6014161365 -13.2,51.5919254551,53.9195488342 -13.3,50.2828105514,51.7595907761 -13.4,50.7793462451,50.6731453079 -13.5,50.6405802874,50.929567927 -13.6,51.9355366244,52.245692486 -13.7,54.281746486,54.3161265245 -13.8,56.0556939729,57.8123087438 -13.9,58.3924744753,61.3628163203 -14.0,61.6325920788,66.5808777369 -14.1,66.7634147021,69.8183174126 -14.2,70.326938726,72.0928891911 -14.3,73.0933733501,76.5254987248 -14.4,77.6940214367,77.9930649019 -14.5,80.1267226139,80.2757009987 -14.6,82.1798154719,81.5894524119 -14.7,83.422529673,82.1629275134 -14.8,84.4767994356,81.3688435683 -14.9,83.969319316,80.1880797391 -15.0,83.636102755,79.6280695899 -15.1,80.9790380547,78.6577153239 -15.2,79.2154037053,78.1850991887 -15.3,78.7485197258,79.2040316673 -15.4,80.7075663102,80.089331654 -15.5,81.7382039273,79.9455947991 -15.6,82.4988998215,81.7246824305 -15.7,84.1935053852,84.4285006675 -15.8,85.1315427274,87.251580536 -15.9,88.7050737638,88.0635652942 -16.0,91.4151825476,90.8553829461 -16.1,92.5703466308,94.127406666 -16.2,94.1855950756,94.8559830785 -16.3,96.2981574171,96.8873774482 -16.4,96.7785248755,96.7899666891 -16.5,96.1858966474,95.9216199697 -16.6,93.99483261,97.3560994229 -16.7,91.2844876187,93.5263085331 -16.8,89.3926900374,93.212786861 -16.9,86.1124474548,89.0442131876 -17.0,83.8513795816,86.223277006 -17.1,79.4649910222,82.5210747013 -17.2,78.0671123203,77.5173251817 -17.3,75.5874856631,74.6735382798 -17.4,74.641930915,73.1326418167 -17.5,73.3636850819,72.1721820118 -17.6,73.7611830376,71.0098627378 -17.7,73.8867936286,71.2167660749 -17.8,74.4926780897,74.0743797596 -17.9,75.1601778762,76.2204047757 -18.0,78.2750554534,77.5314019564 -18.1,81.2181035127,79.935686411 -18.2,82.1216292955,83.9493857243 -18.3,86.0382542129,84.4864603717 -18.4,85.8518814643,87.0237052582 -18.5,86.5631532595,85.5458753958 -18.6,87.2321805405,85.9964585437 -18.7,84.3546618199,85.9856932996 -18.8,84.5677258136,84.0212228118 -18.9,82.8585094145,83.7106248073 -19.0,79.5138328846,82.2644819798 -19.1,79.2131097489,78.8950612395 -19.2,74.8350184882,77.981844956 -19.3,75.1998517431,77.6218386296 -19.4,73.1395387356,77.0859721653 -19.5,73.4133594241,75.5294487035 -19.6,77.0139684489,77.5797016295 -19.7,77.5726931239,78.4347752988 -19.8,80.5264381393,78.6902351572 -19.9,82.0146440308,82.7496355491 -20.0,85.4029867003,83.125305631 -20.1,88.5948591713,86.0813685144 -20.2,92.9467812941,88.6687953333 -20.3,94.5635064407,89.0010630791 -20.4,94.5217079358,88.9229892152 -20.5,93.8455309603,89.169587204 -20.6,89.099435894,87.8403340585 -20.7,86.6443336152,86.0917897108 -20.8,82.7058253994,83.2350005757 -20.9,78.2446806586,80.9122759647 -21.0,74.8725154733,76.1217145043 -21.1,71.9647633181,70.5885708969 -21.2,67.667057707,68.4075114553 -21.3,63.0322407518,66.4021181967 -21.4,61.3093798565,63.1049767185 -21.5,58.8778113184,60.8781319847 -21.6,61.1898744006,60.2958417926 -21.7,58.177006494,58.4282434125 -21.8,58.4219036584,59.9938289185 -21.9,60.6170672222,61.6126620784 -22.0,61.0758318024,60.4787703592 -22.1,62.6875985059,60.5823913359 -22.2,62.2807421343,61.2812800431 -22.3,63.6923185663,61.2810892534 -22.4,60.670139109,60.6180401029 -22.5,61.2356282578,60.5077209969 -22.6,60.1357670714,58.3176635958 -22.7,58.4430583286,56.2173564388 -22.8,54.9558382538,55.4074044608 -22.9,50.0727855754,51.835538502 -23.0,46.6667962524,49.5987507959 -23.1,44.0031088792,47.743120125 -23.2,40.8964805201,44.4273912579 -23.3,38.2002730186,42.3408329906 -23.4,37.308420107,39.4824215664 -23.5,38.1162775539,40.0634469507 -23.6,39.0735622072,40.2495154281 -23.7,41.8587635325,41.4296943763 -23.8,45.1742997315,42.916452877 -23.9,46.9585870223,44.9801275148 -24.0,51.2525407976,49.617293853 -24.1,54.1993187556,50.6012255288 -24.2,57.227075452,53.8772273842 -24.3,61.9058737234,56.9430185295 -24.4,63.6191111171,59.6045338986 -24.5,65.4350805202,62.1345310955 -24.6,67.6428855505,64.1007216281 -24.7,68.5633114323,64.9455775028 -24.8,67.6847250726,63.4964911575 -24.9,66.8243948757,63.5981368374 -25.0,64.0188707636,61.799156915 -25.1,60.7659205375,62.0912648141 -25.2,58.2112042691,59.4971285961 -25.3,58.1036754393,57.9379579766 -25.4,55.976656589,55.8834611559 -25.5,56.8100722214,57.5215884044 -25.6,56.0800787313,57.6255651848 -25.7,56.9117527873,60.3394134713 -25.8,61.0872058343,60.1790609397 -25.9,63.9013463331,63.1028869398 -26.0,66.4455754045,64.0989372647 -26.1,67.7057881776,65.4100801398 -26.2,67.7808887718,66.6411626617 -26.3,68.1619692955,66.0118547895 -26.4,67.7216002036,68.146521932 -26.5,66.3857943357,64.8323769702 -26.6,64.1372164441,62.021305013 -26.7,60.7757416486,58.4910969198 -26.8,57.3305130717,56.6975530369 -26.9,53.1922878262,50.0864207923 -27.0,48.0585266562,47.0009718157 -27.1,43.2758172766,41.8996190679 -27.2,38.4059506997,37.5971020364 -27.3,35.3996212214,34.036623555 -27.4,33.4480288418,32.2662349983 -27.5,30.5667827437,28.2264314644 -27.6,29.3373746295,27.6342260579 -27.7,25.9683313469,26.0971671122 -27.8,25.8021796479,26.4441457501 -27.9,25.8257781572,25.8236781095 -28.0,27.1666766996,25.9373919527 -28.1,29.7434294067,26.5493280345 -28.2,32.3412838707,28.553818658 -28.3,34.4418122962,29.3094293111 -28.4,34.2009264394,28.3391561113 -28.5,32.1094191543,27.683513829 -28.6,30.8120360756,26.7448670621 -28.7,27.9086879483,25.3904339879 -28.8,24.4191411994,23.2966507442 -28.9,22.6224022404,21.3139623463 -29.0,19.4927794264,17.6777179543 -29.1,15.3041952092,13.6333094488 -29.2,13.9323020005,11.3830586526 -29.3,12.3451040232,9.61488071343 -29.4,9.16685731245,7.56913092857 -29.5,7.65951446582,5.30989655831 -29.6,6.37660951373,5.38304646739 -29.7,7.47031785742,4.31413623247 -29.8,9.04687918545,6.90159341931 -29.9,12.6869972499,9.19837915961 -30.0,12.4605321261,13.1514275448 -30.1,16.6497363381,13.027549998 -30.2,18.1457553713,14.2507664603 -30.3,19.1179041064,16.5619170107 -30.4,18.5722317573,16.3016079843 -30.5,16.0256473743,14.5434227163 -30.6,14.6998205598,12.6196849886 -30.7,11.1468996709,10.2881889576 -30.8,7.40382518383,6.36218710545 -30.9,3.54883522085,1.4172356902 -31.0,0.656764926622,-2.14727206884 -31.1,-5.33320258662,-5.80233730552 -31.2,-9.8197868835,-9.40048288891 -31.3,-13.0389637549,-15.4921288521 -31.4,-17.8667282374,-19.8563723651 -31.5,-20.0211128571,-18.9080007392 -31.6,-22.3090315126,-22.3365899987 -31.7,-23.3883026453,-23.7406894886 -31.8,-25.013538222,-23.220094416 -31.9,-23.9488041268,-23.9657542737 -32.0,-24.2968998508,-22.0158776167 -32.1,-23.1361777077,-22.1269662146 -32.2,-22.2009578579,-21.1166712304 -32.3,-20.926401991,-23.4488680336 -32.4,-20.4654736342,-22.4269921298 -32.5,-23.0476875849,-26.9797628887 -32.6,-25.4508944892,-26.9185655816 -32.7,-25.8436133029,-28.0619057907 -32.8,-28.5933357357,-30.7479885305 -32.9,-31.071405597,-32.2482102199 -33.0,-35.2373237937,-36.7877777421 -33.1,-38.2701043667,-38.5243524907 -33.2,-41.313197337,-43.7628433542 -33.3,-41.5908975285,-44.9539960648 -33.4,-42.5815956878,-45.3438047759 -33.5,-41.7938359623,-46.111185444 -33.6,-42.3500908066,-42.2259011494 -33.7,-40.900302589,-39.9564739088 -33.8,-38.0216283774,-36.8693884287 -33.9,-35.5599358756,-34.3546839745 -34.0,-32.0863823114,-28.797341863 -34.1,-29.196407367,-27.2776696793 -34.2,-24.452135695,-23.1165120254 -34.3,-20.1928848609,-20.5414058891 -34.4,-16.3659780702,-18.1948765777 -34.5,-12.156285777,-14.7200488372 -34.6,-12.2818564024,-13.2751127823 -34.7,-11.9192513897,-12.0292771367 -34.8,-14.080177943,-10.949581602 -34.9,-13.1548600719,-12.2953615631 -35.0,-15.9950442511,-13.7289229827 -35.1,-15.6469848568,-16.218036267 -35.2,-16.5938313162,-17.4489845695 -35.3,-17.4996060693,-16.4738983218 -35.4,-15.6899507038,-16.3844082334 -35.5,-13.6629831111,-16.1796685604 -35.6,-12.843943987,-16.2258519359 -35.7,-10.7483977819,-13.9928073898 -35.8,-5.87302853044,-10.5229883161 -35.9,-3.80573399224,-8.76401072945 -36.0,-1.66851615288,-4.52734239919 -36.1,1.82466999581,-2.23404485805 -36.2,1.94882612077,0.780198175681 -36.3,4.75623269855,3.5049964542 -36.4,2.28922513068,3.10417828027 -36.5,2.40012826697,5.68962212794 -36.6,1.19978208276,2.91631081702 -36.7,1.94421504722,-1.15455513026 -36.8,0.0899704175771,-2.16459395721 -36.9,-1.02634482256,-4.67833858673 -37.0,-5.555155214,-8.18053570362 -37.1,-8.60517195786,-10.2278562456 -37.2,-10.5590138211,-12.1640095275 -37.3,-14.2147020029,-14.0966892025 -37.4,-16.339939575,-16.1101488026 -37.5,-16.226083042,-16.1425552414 -37.6,-15.5879416544,-18.0280200526 -37.7,-15.0462515496,-15.0643924215 -37.8,-16.660769684,-14.6007664262 -37.9,-14.3855024725,-10.0510560143 -38.0,-12.6507738649,-9.8501845272 -38.1,-8.57423419738,-6.3089210276 -38.2,-5.5956906906,-4.28585079527 -38.3,-2.61512756027,-1.87013675017 -38.4,0.150131385154,0.326851690196 -38.5,0.0253641989752,0.642240532494 -38.6,-0.166199330842,0.819709220967 -38.7,-0.328705923966,-0.579999552831 -38.8,-0.770157493186,-2.44917628322 -38.9,-3.40307664369,-4.00227720453 -39.0,-3.49322323974,-5.60597296066 -39.1,-5.18951185638,-5.6293593615 -39.2,-5.17526362813,-6.66131741362 -39.3,-5.66890872247,-5.76095585582 -39.4,-4.88970005241,-6.81467182012 -39.5,-3.72183962749,-6.16020731679 -39.6,-2.73420085013,-5.05844305467 -39.7,-0.542690541742,-2.85544628422 -39.8,0.757153906498,-0.243314128984 -39.9,2.02901531975,3.04620830487 -40.0,7.12143080791,5.9273296848 -40.1,12.5422829053,10.0436985322 -40.2,15.5723513517,12.1049270981 -40.3,17.4487866093,13.7803230667 -40.4,19.1399460391,17.0515781284 -40.5,18.6963267152,18.2652357017 -40.6,19.9886085424,16.5660971915 -40.7,18.762729399,15.8017532118 -40.8,16.9241617346,13.2319786432 -40.9,12.4468196542,7.74620299646 -41.0,11.6108285968,4.65245734465 -41.1,5.9943022889,2.17868181607 -41.2,4.56785296072,-1.37845665976 -41.3,0.363233240467,-2.29249219413 -41.4,-2.56600686756,-4.85514223874 -41.5,-3.80488492343,-5.0699505527 -41.6,-3.35109407281,-6.64596033396 -41.7,-3.1100491333,-5.86361477808 -41.8,-3.54788508177,-4.79562612811 -41.9,-2.9059037009,-1.66435999206 -42.0,-1.81182048637,-0.945389800133 -42.1,-1.00360645351,2.15735519431 -42.2,-0.472105992621,3.92391471324 -42.3,-1.48492027,6.54959719387 -42.4,-0.867060080895,5.42259748138 -42.5,-0.862642802356,4.76979868301 -42.6,-0.272780371265,4.87764121931 -42.7,-0.98841282753,4.00845486161 -42.8,-1.57615893425,3.15287571159 -42.9,-2.65943861211,0.390523625505 -43.0,-4.61691677262,-0.456211758 -43.1,-6.09261122639,-3.36361104824 -43.2,-8.02186375101,-5.33697745743 -43.3,-11.0261458696,-6.16393972064 -43.4,-10.2191734366,-5.94886672388 -43.5,-8.7314541508,-5.85516025747 -43.6,-6.64028181704,-2.06675532788 -43.7,-3.59288303557,0.218739102553 -43.8,1.31002232741,2.4116184412 -43.9,5.53985749876,7.40980201876 -44.0,11.9639110311,11.7385584086 -44.1,16.787458864,18.1707138003 -44.2,22.168846375,22.6952303749 -44.3,26.5654002468,27.7699747472 -44.4,28.7202965616,30.4983293541 -44.5,32.4837576825,31.2332468662 -44.6,31.2020956405,33.0294434867 -44.7,32.1936881446,34.8601507774 -44.8,31.7957750854,34.5768937223 -44.9,33.6152998455,35.8766084489 -45.0,32.0423917609,33.52848626 -45.1,30.5994021988,33.3569569624 -45.2,30.9224187719,32.3335512951 -45.3,29.5761532948,31.5114433594 -45.4,30.8660022011,33.0678021498 -45.5,32.6849981976,34.4261893287 -45.6,33.2219588319,35.8939180209 -45.7,35.4138098484,37.7314690904 -45.8,36.9769033519,41.5883435645 -45.9,38.2234138502,43.9797244827 -46.0,42.1783876454,47.5051938551 -46.1,45.5432987229,48.9879237598 -46.2,48.9167884387,51.9492153036 -46.3,51.1920677066,52.4560881047 -46.4,52.3755391071,53.0516092778 -46.5,51.9554371504,53.6564680554 -46.6,51.2112332944,52.244218906 -46.7,49.4756875298,51.3146878746 -46.8,46.3497734112,48.7252370873 -46.9,43.1047426928,45.87726876 -47.0,39.9965631284,42.1392949267 -47.1,36.7084921893,39.1239411849 -47.2,32.0186778856,36.1838689105 -47.3,30.4404984144,33.0665295271 -47.4,30.1000632727,31.7828952939 -47.5,29.5930230363,27.8349085868 -47.6,27.9064312021,29.3114144196 -47.7,28.6553073737,30.1343340084 -47.8,28.6487371469,27.8186438512 -47.9,29.8008744193,29.8832941662 -48.0,31.319361329,34.0404357212 -48.1,35.9408405276,36.9623483762 -48.2,37.4108822625,38.9921272759 -48.3,40.863323697,39.5555071545 -48.4,43.070822751,41.1900205978 -48.5,43.3194583273,40.8153030596 -48.6,44.5565679531,42.3461976842 -48.7,43.1804219557,41.6670379231 -48.8,41.6850538113,40.1454340657 -48.9,41.6705753476,38.2021117396 -49.0,38.916640904,36.5876714547 -49.1,36.427821473,35.2554508746 -49.2,34.0375253967,33.4102785913 -49.3,33.5720332071,33.9124257922 -49.4,33.9459568046,32.3930714173 -49.5,34.5988426179,33.4849640572 -49.6,34.7324518325,34.7392757302 -49.7,35.7798201794,36.7188966336 -49.8,36.2405220551,37.1899837214 -49.9,39.8483951469,38.6200145316 -50.0,42.1415514304,41.958872966 -50.1,46.9312825671,44.1136653492 -50.2,49.5326218362,48.8492654465 -50.3,51.241009365,48.9614577964 -50.4,50.6779409981,49.399587385 -50.5,50.8176442801,49.0028704012 -50.6,49.774878944,49.7458338846 -50.7,47.2434696311,47.2301477707 -50.8,45.6079111481,45.6482130241 -50.9,43.2379899488,44.3658898231 -51.0,39.387984028,41.2288593207 -51.1,36.1871991944,37.5164326285 -51.2,30.9335959503,33.3497876493 -51.3,27.9771623701,31.3689255727 -51.4,25.3084753189,29.3567948196 -51.5,26.0389445922,25.9777415124 -51.6,25.3800123682,25.1023804785 -51.7,22.8633425529,24.8160247372 -51.8,25.3951522302,26.7771360615 -51.9,26.1429048371,28.4965868002 -52.0,28.4422576525,30.3158170521 -52.1,31.5724669023,30.4415016924 -52.2,33.4295523395,31.9654578955 -52.3,32.4689969285,31.7543735824 -52.4,33.5551078997,31.7834295415 -52.5,32.6678100721,30.9378648856 -52.6,30.634105426,28.8286447666 -52.7,29.7486431032,30.0019193493 -52.8,29.3199560856,25.8938108079 -52.9,25.8894019233,26.1144515311 -53.0,23.9263296633,22.8712950627 -53.1,23.2547296085,21.8864966677 -53.2,21.1653719427,20.8723252447 -53.3,21.5560448942,21.568202495 -53.4,19.4375642648,21.4125006938 -53.5,19.1363476124,22.4878842351 -53.6,20.8343306275,25.1153403833 -53.7,25.3163220084,27.2621987229 -53.8,28.4812159101,30.290925396 -53.9,33.5856232205,35.1665791205 -54.0,38.1150728045,40.0276023641 -54.1,41.9797617095,44.2312845287 -54.2,48.3026565638,49.5997758118 -54.3,52.8706355296,53.3708866642 -54.4,57.1875482604,56.0980706063 -54.5,58.7724235996,58.5315187051 -54.6,60.2909931374,60.7984459782 -54.7,59.5122108674,62.6939279197 -54.8,59.4763355917,63.0103290771 -54.9,61.8058805853,62.952651048 -55.0,62.0712072575,61.782355469 -55.1,61.4742539918,61.7625554173 -55.2,61.1698462254,63.5316700155 -55.3,63.2440345232,64.8450759326 -55.4,61.8535852942,67.4728262077 -55.5,63.1711764074,68.2367649448 -55.6,65.8792136355,69.9313587902 -55.7,69.0161433621,71.5575441829 -55.8,72.5997288033,74.7302169967 -55.9,76.5258903101,78.9492300097 -56.0,79.9540696284,83.1447323132 -56.1,82.6020035114,85.985846457 -56.2,86.1205160272,89.2213701492 -56.3,87.7424273269,91.4867450051 -56.4,88.0039556497,91.6985107218 -56.5,88.3427537899,93.3810306786 -56.6,88.5235023115,93.4254309715 -56.7,87.9492609823,91.5912751364 -56.8,85.1806340977,89.4138061136 -56.9,82.4606963229,88.0092640933 -57.0,80.201488067,84.7924026975 -57.1,77.5156091884,80.6002318497 -57.2,75.7937051732,80.0959155971 -57.3,74.1347225229,76.216663906 -57.4,72.9352318294,75.5287151895 -57.5,73.6879234486,73.9812522846 -57.6,73.865314637,74.4477629754 -57.7,75.0072002578,73.7451171868 -57.8,78.0830771814,74.3525545066 -57.9,80.3132480397,77.1448867856 -58.0,83.5175959493,81.25904526 -58.1,84.3793520265,85.3713787226 -58.2,86.8059445122,88.114439358 -58.3,90.4571507265,89.0540010353 -58.4,93.0551132324,93.3414778808 -58.5,94.8901156667,91.8816926334 -58.6,97.2607794493,94.0722076264 -58.7,96.8502655838,92.4671585036 -58.8,95.886908677,92.6286838813 -58.9,95.0825135813,90.9172369373 -59.0,92.9232320225,88.4846155398 -59.1,91.4441051001,88.5942145396 -59.2,88.111410561,87.6037344332 -59.3,88.6466442189,87.758002553 -59.4,87.4173824275,87.2510878584 -59.5,88.3963093326,88.3912314177 -59.6,90.5170383055,90.1776636557 -59.7,92.3602085276,92.8611323343 -59.8,95.1446139404,97.2306508724 -59.9,98.330248589,99.5394040088 -60.0,102.000865952,103.083505594 -60.1,105.056740702,107.243034982 -60.2,107.699102285,109.508434716 -60.3,111.354412113,112.682488256 -60.4,112.490035142,114.184728708 -60.5,113.379188253,115.473976071 -60.6,113.311362646,115.470778275 -60.7,111.00975932,113.661936332 -60.8,107.372991375,112.344437056 -60.9,106.117102218,108.752601202 -61.0,101.254927783,104.811431558 -61.1,98.7961485176,102.361822693 -61.2,96.5481672706,98.6721442624 -61.3,93.3078845661,95.5757347986 -61.4,93.1803188474,94.3471504751 -61.5,91.2311892519,91.6792680079 -61.6,90.5826673601,90.1316591306 -61.7,89.2612904376,91.2494483554 -61.8,88.6157226646,92.0342843207 -61.9,89.8377350862,91.6685290475 -62.0,90.5386663637,92.8627447706 -62.1,94.2811666447,93.2288103101 -62.2,93.8353762996,95.8138963947 -62.3,95.3109595147,95.408019032 -62.4,94.7445336327,96.0880029054 -62.5,94.9502340974,95.839435264 -62.6,93.1187598257,95.2047177659 -62.7,90.7465374904,92.5341621422 -62.8,86.4797229913,91.6789307819 -62.9,86.3376268917,87.3355759399 -63.0,80.5791722239,86.0221258032 -63.1,80.6057644606,84.5222018457 -63.2,79.8660718175,82.9339371419 -63.3,77.8145729771,81.5444461365 -63.4,78.2354588736,81.5084158827 -63.5,78.3367559148,81.1197596282 -63.6,78.5078255253,81.2683499525 -63.7,82.0366245565,85.5300104056 -63.8,85.325706287,88.7511124532 -63.9,90.4697098581,90.2068795354 -64.0,92.7309478465,96.0841537479 -64.1,98.0745917009,100.344464314 -64.2,103.179279845,103.153952861 -64.3,106.950022483,106.183256425 -64.4,109.727072118,110.120082327 -64.5,110.998586281,111.443881499 -64.6,111.220812713,112.241730163 -64.7,111.956749634,114.271379243 -64.8,113.699572442,113.864191955 -64.9,112.364894072,113.755554008 -65.0,112.384398759,112.636617686 -65.1,110.45056015,110.544620295 -65.2,110.157958441,108.700547731 -65.3,106.388160811,107.183584219 -65.4,105.261852049,106.924616538 -65.5,106.163074579,105.495458676 -65.6,106.392631551,107.162588754 -65.7,109.084235353,109.497643889 -65.8,109.192252613,110.601606245 -65.9,113.417013357,114.069439516 -66.0,116.117394157,115.800222085 -66.1,118.472182646,117.519066285 -66.2,119.57596228,119.130478637 -66.3,121.170403781,117.809041847 -66.4,120.35523257,117.726777956 -66.5,119.527351198,117.247850274 -66.6,117.24710088,115.817362606 -66.7,114.044199494,113.594601193 -66.8,110.231089084,109.301366444 -66.9,103.626020253,105.146530123 -67.0,100.029015741,100.271804974 -67.1,95.1063101426,95.5525502162 -67.2,90.6651739225,94.6878018494 -67.3,87.031132915,91.2854932398 -67.4,85.4039952166,87.8225269166 -67.5,84.9208882347,87.0405075096 -67.6,84.127370136,85.1648268463 -67.7,84.6910812818,83.2057521856 -67.8,84.8677756107,82.9851182933 -67.9,85.8411603089,83.5407463578 -68.0,86.8582423837,84.3847942305 -68.1,87.4857715817,86.4088307712 -68.2,89.4773167213,87.4442166057 -68.3,89.5784579117,87.9277389236 -68.4,88.6921506389,89.5123057382 -68.5,87.3109679744,88.0246274101 -68.6,86.2488201505,87.8396763332 -68.7,85.3261448436,87.9540145728 -68.8,84.2674739966,84.999148612 -68.9,80.061079933,83.2717252523 -69.0,77.0819889232,79.5594253324 -69.1,73.1409563536,76.3452374637 -69.2,71.4981940137,71.4610744456 -69.3,67.9928842056,69.1079507904 -69.4,66.3375678768,67.9664000131 -69.5,66.5282454258,67.2345646002 -69.6,65.4559907351,67.5978065587 -69.7,68.4674916857,67.26490141 -69.8,68.0100351449,68.5993520119 -69.9,71.7470429332,68.2410775114 -70.0,73.1182823079,69.566954003 -70.1,75.2474625005,73.5743735394 -70.2,76.8782026688,74.532452291 -70.3,79.1461298957,74.349887596 -70.4,77.5495195847,74.3006707961 -70.5,77.1754757852,73.0875170274 -70.6,72.7030287955,72.8969994595 -70.7,70.1235713655,69.7565069893 -70.8,68.949893679,66.9641276738 -70.9,64.3700590531,63.0299844047 -71.0,59.3677341663,58.0093156749 -71.1,56.6695082705,53.8216836252 -71.2,52.6018279187,48.1299264421 -71.3,48.6470759466,43.6876964139 -71.4,44.1006156671,41.6780561935 -71.5,40.4763861305,37.929122872 -71.6,39.1245398164,37.8135260919 -71.7,37.1290651288,36.4114551372 -71.8,36.2894813685,33.6177938393 -71.9,35.4099481007,32.8156647005 -72.0,34.0387071586,33.5597216366 -72.1,34.1210065719,33.5854365999 -72.2,33.6324882531,32.6199975322 -72.3,32.5094062878,32.9738508101 -72.4,32.7829962081,31.5415506255 -72.5,30.5408709485,31.8749259021 -72.6,30.3648707872,29.4357129014 -72.7,27.2119084237,29.4817918125 -72.8,24.0037874394,26.0052463841 -72.9,21.515791414,23.9675293481 -73.0,19.3823808818,19.5992501985 -73.1,17.067635708,16.0344921199 -73.2,14.6844741602,11.6449393256 -73.3,11.081232119,10.8292337013 -73.4,9.61534694328,11.2907368463 -73.5,9.42306473577,10.1962162803 -73.6,9.60960664148,11.6684151265 -73.7,11.7777488194,14.9428202022 -73.8,14.5055547446,17.7477304416 -73.9,17.2358937928,21.1509170257 -74.0,19.5522157817,24.3771483047 -74.1,23.677009038,27.4340299149 -74.2,26.556398495,28.8725228686 -74.3,30.4982947666,32.0285178527 -74.4,32.424016928,34.2853456014 -74.5,35.7699803846,36.7319085515 -74.6,36.3675919567,38.2082890105 -74.7,35.740252581,39.4340708431 -74.8,37.6458963069,37.6193410652 -74.9,36.620211445,36.624879213 -75.0,36.400444474,36.1391001648 -75.1,34.6475454027,34.9071300741 -75.2,34.6292198847,33.1645159678 -75.3,32.5175710592,32.3382587788 -75.4,31.1293744077,31.5460822456 -75.5,29.6677850053,30.1668426732 -75.6,30.5455301081,32.4798700247 -75.7,32.5329624997,33.5493355182 -75.8,33.1510259247,35.8851856602 -75.9,34.9497692857,37.8847925296 -76.0,39.4816911874,39.7710357447 -76.1,39.726901644,42.2692085541 -76.2,44.9891060377,43.5093141663 -76.3,44.9074290954,45.6060676317 -76.4,45.4874653002,45.1679195498 -76.5,45.4137344365,45.7614689651 -76.6,43.9600842971,43.6898270924 -76.7,40.5376411042,42.2406246984 -76.8,38.7685492726,39.9137066722 -76.9,36.2127147474,36.6519797218 -77.0,31.6765740291,32.2666761727 -77.1,28.5172790571,28.7802517893 -77.2,24.8944367641,26.0897322876 -77.3,22.3454830433,21.7372802415 -77.4,18.1561005681,19.911046766 -77.5,16.7099997883,18.8680406359 -77.6,15.1799952319,16.9239072124 -77.7,15.9046115618,17.8733817514 -77.8,17.6929133827,17.7536947716 -77.9,18.8548404087,19.3152049589 -78.0,20.4188773373,21.8868796458 -78.1,23.1715917669,21.9579025819 -78.2,24.8040377613,23.5988664493 -78.3,24.8144038663,25.6609524727 -78.4,26.6160660619,27.5022654699 -78.5,26.4876225843,27.3660817443 -78.6,27.158259123,28.494912435 -78.7,27.7346484327,27.6346753306 -78.8,27.6550256508,25.9951426395 -78.9,25.2251234651,24.7102197894 -79.0,22.5367150205,23.1119956206 -79.1,21.3537458122,19.2029072382 -79.2,20.3619256021,18.1860085767 -79.3,16.5661372971,16.5439965302 -79.4,15.5881074514,15.4534526883 -79.5,13.3975176879,16.33289472 -79.6,14.4688029138,15.1836557375 -79.7,15.6379771884,18.1326083826 -79.8,15.1388891203,19.750031376 -79.9,17.0846917345,21.9886174349 -80.0,19.8058744215,23.546737933 -80.1,24.9695336289,27.8464999688 -80.2,28.99388249,29.1503292206 -80.3,30.7437645557,30.0602871631 -80.4,29.9601236834,32.4467147616 -80.5,30.2309761328,32.6814675689 -80.6,29.458256235,31.4506719205 -80.7,28.126904849,28.2883794843 -80.8,27.7468395132,26.9542986587 -80.9,24.7288677405,22.0481693558 -81.0,21.1502393232,16.3513475779 -81.1,18.4678904182,11.9477558011 -81.2,14.5624667531,9.97856198305 -81.3,9.51396212412,3.1857284264 -81.4,5.34236171365,1.51056047344 -81.5,4.44704515244,-0.198095736022 -81.6,3.8616385196,-0.832428976761 -81.7,5.78701117245,-0.545223888757 -81.8,5.72630701004,-0.301068536562 -81.9,6.20501496931,2.1044079977 -82.0,6.44833768493,2.64714776616 -82.1,6.47828398889,4.57942646509 -82.2,4.85376137198,5.20410780954 -82.3,4.88042665043,4.36938255231 -82.4,3.78245920794,5.67188876339 -82.5,2.72460627199,3.58527819173 -82.6,2.23346776157,3.1372278576 -82.7,-0.28697497096,1.13308169908 -82.8,-2.69005826008,-2.00276299743 -82.9,-5.00825268929,-4.16638747906 -83.0,-8.49437033623,-6.83603092743 -83.1,-11.5386870298,-8.60047131049 -83.2,-14.0937433809,-12.1959581705 -83.3,-13.9622531146,-13.6744973807 -83.4,-15.9818733194,-14.7152473707 -83.5,-14.2497999498,-13.6618741484 -83.6,-12.0839026908,-14.3053801101 -83.7,-10.0383387294,-11.3282435174 -83.8,-6.21505074133,-8.34681671088 -83.9,-3.24285337613,-4.68443812213 -84.0,1.79949682504,1.91246331991 -84.1,6.34343468001,5.5730789109 -84.2,10.6060236125,9.32543973779 -84.3,12.8377990445,12.5267723628 -84.4,15.2746626033,14.1683679646 -84.5,17.1315707391,16.6318904082 -84.6,18.1948573909,16.6398424094 -84.7,17.6925915378,19.1812831197 -84.8,17.5137311967,17.1956717599 -84.9,16.3876166899,16.9619265763 -85.0,14.2559337118,15.4669233013 -85.1,13.2679787049,14.7000167339 -85.2,11.6146406968,14.5626390404 -85.3,9.58444861384,12.3291451076 -85.4,10.5984598493,12.7968780876 -85.5,11.3510016478,13.1761001924 -85.6,13.0634427034,12.0638063817 -85.7,13.7701382212,13.9762442 -85.8,16.9659486187,13.9404342761 -85.9,16.5752713759,16.3357060882 -86.0,18.2170252747,19.6976329302 -86.1,20.4737068114,20.0151182508 -86.2,22.3451669084,22.6498155964 -86.3,24.7751153833,24.9560569491 -86.4,26.9922316934,25.9098759219 -86.5,25.9316765641,24.0574713813 -86.6,24.4396655495,21.0064863758 -86.7,20.9484447227,19.7858751181 -86.8,18.8006576124,15.0851229175 -86.9,14.540932235,11.5592333692 -87.0,10.2780656949,8.27075573668 -87.1,6.02953154857,3.89787633847 -87.2,2.50465419692,0.654960974378 -87.3,-3.27125542425,-4.67825588523 -87.4,-3.90256010325,-6.81677297466 -87.5,-7.18961106585,-6.59710160735 -87.6,-7.60303348453,-8.49132247111 -87.7,-6.20067534039,-10.1335734935 -87.8,-6.9133164652,-7.24200444428 -87.9,-5.89243104639,-5.15495908897 -88.0,-3.35809626067,-0.980128643918 -88.1,-1.02876814877,0.403419671069 -88.2,0.578137422167,2.18159107537 -88.3,1.33141292693,3.8599032814 -88.4,0.332012472275,3.49890133029 -88.5,1.35494169331,4.42640990147 -88.6,-0.203420791282,4.61742404382 -88.7,-1.04086294557,3.85618208393 -88.8,-1.31350859175,1.43331112594 -88.9,-2.79017667551,-3.36045110317 -89.0,-5.07229294379,-3.81097404276 -89.1,-5.86622896468,-7.33109701294 -89.2,-8.31384121972,-8.76642978104 -89.3,-10.3595468137,-10.6286643928 -89.4,-10.9236618284,-11.8305101921 -89.5,-11.337794669,-10.3173503509 -89.6,-10.2675022324,-10.9582197989 -89.7,-9.04138344762,-8.30285494294 -89.8,-7.02634861511,-7.67413172249 -89.9,-4.50561654068,-4.89752923205 -90.0,-3.72598049644,-3.18529744195 -90.1,-0.845188080109,-0.962856718807 -90.2,0.949502369752,1.05313757474 -90.3,2.54550496961,1.55925406556 -90.4,3.80872539922,3.33618615983 -90.5,3.80842224611,4.24608187922 -90.6,1.79366506925,2.75644523911 -90.7,0.239024916089,1.0420728595 -90.8,-2.54182172681,-4.35857202039 -90.9,-6.48171022011,-7.02254942138 -91.0,-9.90595057823,-10.258160286 -91.1,-12.5624537374,-15.5102107791 -91.2,-16.5467259706,-18.0033762457 -91.3,-19.4286022902,-24.5676227709 -91.4,-21.3601889305,-26.1048745983 -91.5,-23.2471284797,-28.4940508623 -91.6,-23.8243066571,-28.1322723891 -91.7,-24.7512597124,-32.2977346382 -91.8,-26.202415619,-29.3799782574 -91.9,-26.6473277968,-28.2988210506 -92.0,-25.8765091362,-27.3442831156 -92.1,-24.9075485198,-24.3514334883 -92.2,-23.3630094573,-23.9206675374 -92.3,-22.1832080797,-25.6330387765 -92.4,-23.0380445979,-25.1461477807 -92.5,-23.0595536647,-24.3254887154 -92.6,-24.9926373588,-26.1810301858 -92.7,-26.7008124466,-27.7303439254 -92.8,-28.092062017,-30.8235261332 -92.9,-31.4274543475,-32.1204395435 -93.0,-33.2810435371,-33.9825327101 -93.1,-35.5881284014,-35.3822504825 -93.2,-35.764201744,-35.9017972879 -93.3,-37.3318729642,-37.565788987 -93.4,-36.9393201093,-38.9720950614 -93.5,-37.6645656341,-37.6592993907 -93.6,-35.5330895767,-36.3741544233 -93.7,-34.5241718011,-34.7335876786 -93.8,-29.8017580743,-30.0346739784 -93.9,-25.9595303876,-25.1936440185 -94.0,-21.1904230128,-20.0302592874 -94.1,-15.0925843618,-15.3368656973 -94.2,-10.2277154939,-12.0464689786 -94.3,-4.15093356082,-5.93855584274 -94.4,-3.60473189125,-2.39349052193 -94.5,0.735149054394,1.94812805198 -94.6,2.90269822647,5.27829963574 -94.7,4.74454427388,6.47737077477 -94.8,2.77802464423,5.71395058209 -94.9,4.50355112445,6.53625500804 -95.0,3.50013210282,6.18762846366 -95.1,3.12550062212,6.3363459668 -95.2,3.46039352975,5.90660574725 -95.3,4.0410514077,7.35904912363 -95.4,5.98968558318,6.62904192456 -95.5,8.53779912792,9.7668635119 -95.6,9.7273202568,10.6417606669 -95.7,10.7882441613,13.5563491367 -95.8,14.0784038242,16.674012869 -95.9,16.4086914152,19.7829624475 -96.0,19.8494703551,23.2707006596 -96.1,23.5384763318,27.9656958483 -96.2,26.6254449835,30.6757081432 -96.3,28.4807694498,32.879944528 -96.4,30.6745592779,34.8426433377 -96.5,31.484776821,33.9629606122 -96.6,32.9660550652,33.0675021465 -96.7,29.7541454742,32.5900358348 -96.8,30.1153048746,30.4339255548 -96.9,27.1102265021,30.2561949051 -97.0,25.1172521872,26.2648298923 -97.1,21.9849293438,25.374182084 -97.2,20.3372198773,21.3913440276 -97.3,19.0826775526,19.3926403441 -97.4,17.4704787135,17.9501300274 -97.5,19.3540627081,15.9707336983 -97.6,18.7191506447,19.1041593382 -97.7,20.2578936961,18.5408446998 -97.8,21.817146606,21.6079996484 -97.9,25.4935738335,22.860667985 -98.0,29.5911505187,26.6372170545 -98.1,32.6271048617,30.0976372536 -98.2,34.1584985081,31.7041351483 -98.3,38.3929041803,33.8498064146 -98.4,39.2901153393,36.3194969633 -98.5,41.2633676094,38.0335126733 -98.6,40.0181497966,38.2206041875 -98.7,39.6539037922,41.3068104438 -98.8,38.6798925312,40.6833236451 -98.9,37.4714731397,41.1613759836 -99.0,38.5735283964,40.0597245643 -99.1,37.0999305735,39.6690028518 -99.2,36.8544083015,38.5442761294 -99.3,37.3160243919,38.0464324711 -99.4,37.8243691385,39.2043965664 -99.5,38.4981674459,39.4764615141 -99.6,41.1048352768,39.7569958448 -99.7,44.4184339363,41.0722335235 -99.8,49.2447958197,45.2057937773 -99.9,51.9267480395,50.4699551271 +0.0,53.8436111718,51.6012587044 +0.1,58.0608762466,55.5842755159 +0.2,61.6939873544,59.2222666414 +0.3,64.1959310158,61.5198271173 +0.4,66.2073461948,63.1546193166 +0.5,69.1008733126,64.7375161222 +0.6,69.4236172352,64.9090433004 +0.7,70.1828110101,63.9556703116 +0.8,67.6647737378,63.9789662473 +0.9,65.6415408454,60.7677883872 +1.0,61.2822787504,58.8315531698 +1.1,57.417294257,57.768706961 +1.2,55.1802532572,56.0639224014 +1.3,52.3582783018,54.2985924052 +1.4,51.3971107508,51.2782416477 +1.5,50.1697726018,51.3808015904 +1.6,51.9285094575,48.3739412516 +1.7,50.8552201661,50.0396293476 +1.8,52.6543433085,50.5791912173 +1.9,53.5410913181,51.8759057762 +2.0,55.4953213486,53.6870519908 +2.1,58.3013190883,55.4681853325 +2.2,59.4183987656,57.9212289184 +2.3,61.7282435151,59.5155241148 +2.4,62.7733141787,60.2163208654 +2.5,62.6894877002,59.8210786414 +2.6,61.5468555498,57.3662281117 +2.7,60.0902872971,56.0587810843 +2.8,55.2945157913,55.7976003264 +2.9,54.32342493,55.367378668 +3.0,51.6568767385,51.0244475562 +3.1,51.7650150844,52.4060774038 +3.2,50.6196318912,51.361971016 +3.3,51.2066415981,51.0067392982 +3.4,50.4166357974,49.3202737637 +3.5,52.2666786345,51.7290355959 +3.6,53.7365261555,54.7578245391 +3.7,55.7175544089,56.7507342259 +3.8,58.0176925774,62.2945327008 +3.9,61.5412219913,66.7848408132 +4.0,65.4398975565,72.7158578686 +4.1,70.0822563334,77.1880376994 +4.2,74.0693823413,79.7049351697 +4.3,80.1599448606,83.9052009307 +4.4,84.599341385,85.2219695583 +4.5,87.6625688096,88.8527349565 +4.6,88.5702589767,90.846966111 +4.7,90.0435638472,92.7219789277 +4.8,90.3936946838,93.2719307518 +4.9,89.2669384335,93.1536946163 +5.0,89.3695781891,92.728158026 +5.1,89.0946307843,92.0280343737 +5.2,88.9447329435,92.586918346 +5.3,92.4279636521,92.9789688295 +5.4,92.1433481991,93.4373398452 +5.5,93.2741296975,94.3073414469 +5.6,94.2588662944,95.4915028238 +5.7,96.7426890571,96.1215109169 +5.8,99.021044456,97.8021932275 +5.9,102.051299605,102.224188448 +6.0,104.480527921,104.510743542 +6.1,108.261671906,107.210780948 +6.2,110.502155581,110.643672869 +6.3,113.598860279,109.685408573 +6.4,114.148829401,112.067856295 +6.5,113.240521232,112.351794375 +6.6,111.22926595,109.800652082 +6.7,108.332239609,109.212713392 +6.8,105.686119768,105.097564137 +6.9,102.956378712,103.096266334 +7.0,99.2325070734,98.8416070439 +7.1,97.3489708041,95.181271004 +7.2,93.0712681641,94.006820192 +7.3,90.8317953061,91.6015954736 +7.4,87.3495093595,89.565769417 +7.5,86.2340622662,87.3266735971 +7.6,84.1999103461,87.1739930429 +7.7,85.0679302042,85.1323842178 +7.8,85.2061346137,87.2567348985 +7.9,87.71268968,89.0303137048 +8.0,88.7699922484,91.9027452322 +8.1,90.9361887522,93.2004950145 +8.2,93.5067814554,95.4280324983 +8.3,95.7541574569,98.1366366574 +8.4,97.8227805573,97.9221776131 +8.5,95.9380525001,99.333625723 +8.6,94.6718682737,99.4232328745 +8.7,93.315955532,96.6430461883 +8.8,94.2389450238,95.7106567877 +8.9,91.3106480141,91.6482455908 +9.0,88.1495122055,89.5156097796 +9.1,85.5140348536,86.3703551165 +9.2,83.8013659909,84.0109236865 +9.3,83.9098596542,83.4131630544 +9.4,84.898601052,82.7628928751 +9.5,83.6259865946,82.8887165954 +9.6,83.9403004752,81.2720687343 +9.7,83.2326428405,82.5125511416 +9.8,83.8220539594,85.0889769466 +9.9,85.2762289088,88.6069673798 +10.0,87.98333793,90.3208156141 +10.1,90.3419982476,94.6961710855 +10.2,92.8488711171,95.0384335015 +10.3,94.6081358863,96.932308398 +10.4,95.8995057496,98.1539219336 +10.5,98.4362432813,98.7400852423 +10.6,97.0365314067,97.4762780395 +10.7,95.2836859957,94.1181822966 +10.8,91.1152109475,92.0700651172 +10.9,88.4132388464,88.7121550406 +11.0,82.3984001595,82.4077200144 +11.1,78.2446760039,79.1769588503 +11.2,75.9947128113,76.3328120497 +11.3,73.919935622,73.2831967614 +11.4,69.8554596011,68.8720317526 +11.5,68.4821516445,66.5835112398 +11.6,67.0347096141,65.1791105138 +11.7,66.1472257692,66.9421863513 +11.8,66.0537057036,65.5007405745 +11.9,65.2414480771,67.1547993285 +12.0,68.0139754156,66.5292152208 +12.1,69.4891146235,68.8083526085 +12.2,67.7314124035,69.2430127784 +12.3,67.8687419323,69.9849514775 +12.4,65.8990605697,69.0164195612 +12.5,65.0322000102,68.047242474 +12.6,65.5910501558,65.5440441004 +12.7,63.8968143775,63.9853800821 +12.8,60.4034686626,62.4190607149 +12.9,59.3135895118,58.7197722368 +13.0,56.9991618126,55.9784961325 +13.1,52.8916994432,54.1762222292 +13.2,51.8428346316,52.038029072 +13.3,49.6214958451,51.036737905 +13.4,49.5468956066,51.5622705111 +13.5,49.9781402104,52.0627010696 +13.6,52.4844741641,53.8067085685 +13.7,54.1943012529,55.32044 +13.8,57.2794643101,57.8585090035 +13.9,61.0175066856,61.3945957803 +14.0,63.8761235932,65.3793881445 +14.1,66.7486633263,69.296259773 +14.2,69.8995238565,73.6804038624 +14.3,74.5524906066,77.1119535008 +14.4,77.1248465131,81.2477978305 +14.5,78.510679969,82.5709053673 +14.6,81.4938844596,82.3045688345 +14.7,82.2967262859,83.8293562182 +14.8,82.8749442531,82.310504421 +14.9,82.7695607514,81.8169295408 +15.0,82.987859523,80.8258470099 +15.1,81.9607983724,79.7740877675 +15.2,81.725854012,78.1696061678 +15.3,79.4940807134,77.0427274688 +15.4,78.6916120385,77.360213827 +15.5,79.3176432034,77.9647463373 +15.6,82.6804028441,79.5656421159 +15.7,84.877252312,82.9055627055 +15.8,86.7357765534,86.0811245329 +15.9,89.0829728163,87.9196764362 +16.0,90.4307144429,91.1247228441 +16.1,94.0513233949,94.5038154842 +16.2,96.2264808166,97.1309538485 +16.3,96.3923145258,96.8416482314 +16.4,96.5707761457,97.6831804138 +16.5,97.0344358821,98.2979531565 +16.6,95.7212539654,95.8767686953 +16.7,93.3606688199,94.5323724584 +16.8,89.537067751,91.1260811606 +16.9,85.5669961691,87.3069298855 +17.0,82.841461777,86.409927994 +17.1,79.1661563214,81.0740014515 +17.2,77.1693972187,80.2104938223 +17.3,73.4605152795,76.4909431002 +17.4,73.120462793,75.0687395295 +17.5,71.9532593996,73.5782342491 +17.6,72.8038959282,71.3881347727 +17.7,73.0901499972,71.6950345059 +17.8,75.1855406089,73.3485945263 +17.9,76.4892121605,75.332997577 +18.0,78.2252387817,76.6006820646 +18.1,79.3736806837,78.5109476478 +18.2,82.5609194868,82.2070831129 +18.3,85.0078905215,84.2750329512 +18.4,85.0992305766,84.6304141212 +18.5,87.7736887542,85.3268757878 +18.6,86.1728336352,87.0791738633 +18.7,85.5990186736,85.0530417546 +18.8,84.8989468926,85.0048604908 +18.9,81.1938531314,81.1987623925 +19.0,80.7614363794,79.8294451003 +19.1,78.8564641385,78.7050415325 +19.2,75.9299568773,76.4579070444 +19.3,76.2192359931,76.7345175699 +19.4,72.9648189623,76.6943865349 +19.5,74.8021610394,75.4134815966 +19.6,74.0381402106,77.06292521 +19.7,75.9836891414,79.4796175179 +19.8,80.6078370786,81.6481118157 +19.9,82.2558858753,82.4391031004 +20.0,85.6505835247,86.225434437 +20.1,87.0262084291,88.0056881273 +20.2,90.1281781,88.2509952402 +20.3,92.2534006619,91.3281381642 +20.4,95.3017568443,89.8044627784 +20.5,95.1923863903,90.0861032216 +20.6,93.3073930013,89.4397809624 +20.7,90.7408037726,86.2480342853 +20.8,84.4219086824,82.6524399051 +20.9,80.7221195738,79.6841664627 +21.0,75.7191749381,75.7100094647 +21.1,71.0348013762,72.0995989 +21.2,67.4421805803,68.3026872094 +21.3,65.0296042582,66.0130633172 +21.4,61.3735374702,62.188717301 +21.5,57.9157942721,58.4277619124 +21.6,57.5141513887,58.6237031743 +21.7,56.4982762216,59.3451363719 +21.8,60.2132700979,58.8412177252 +21.9,58.222270882,59.1902038884 +22.0,59.3623846114,60.710234082 +22.1,61.6731495301,60.2682221613 +22.2,62.2897197756,62.4522818213 +22.3,63.2917789675,63.8376634125 +22.4,61.9780118105,61.663390796 +22.5,62.3426184372,60.0498635442 +22.6,58.0048938818,58.5570886975 +22.7,57.4583988274,56.1448385361 +22.8,55.135063793,53.1299372676 +22.9,52.8385034893,51.0070066004 +23.0,48.8023674593,47.3930735546 +23.1,44.1373223314,44.6524483628 +23.2,41.248527209,44.1060516801 +23.3,39.7281466873,41.7348478097 +23.4,38.1021736481,41.5779028545 +23.5,37.1188057953,42.5370428882 +23.6,38.068022211,42.5537161758 +23.7,40.7536771283,44.0472960892 +23.8,43.3787415526,44.7198825673 +23.9,47.5110350562,48.4872039308 +24.0,51.7265638284,51.2488342114 +24.1,53.9349479537,54.1827207274 +24.2,58.111637851,56.4652007608 +24.3,60.4644655187,58.3182803006 +24.4,62.5748665678,61.7823087322 +24.5,65.8714786419,60.7618165079 +24.6,66.0557560236,61.4077595089 +24.7,66.2298358504,61.4776306652 +24.8,66.8896582808,61.0657936235 +24.9,66.5742963056,60.7339186074 +25.0,64.7553465457,60.3109959466 +25.1,63.4268724939,59.4478278767 +25.2,60.5934283392,57.1071503534 +25.3,57.8480864148,57.1831888029 +25.4,56.128288372,56.1840178256 +25.5,57.2098588388,57.9752318158 +25.6,56.2482691631,57.3808341209 +25.7,58.3670929994,58.0709841694 +25.8,58.4792143404,58.2372844811 +25.9,60.0775934377,61.7905333356 +26.0,64.5135290027,63.2556920549 +26.1,67.3220957618,66.5825188205 +26.2,69.1932848635,66.1664981211 +26.3,69.3975738326,67.9319623451 +26.4,68.0564345707,66.9233946319 +26.5,66.7480493478,65.5257738429 +26.6,64.6993372387,63.558481131 +26.7,61.6123022497,59.5077423777 +26.8,57.8389864687,58.2909357866 +26.9,53.1814247829,51.9865103057 +27.0,48.8550780587,46.8076655091 +27.1,44.3669675061,41.7382789872 +27.2,39.4659147551,39.3650162869 +27.3,35.375453443,33.1765421264 +27.4,31.6195161536,31.4668837835 +27.5,30.057966705,28.5577606299 +27.6,29.7171977043,27.0529491206 +27.7,28.5022929962,26.6307806771 +27.8,28.7994010382,28.0460815486 +27.9,26.7000519653,26.9460215327 +28.0,27.5997727531,28.7823829593 +28.1,28.0243353133,28.9509629083 +28.2,29.5219318834,30.1424811612 +28.3,31.4596097434,29.4537213814 +28.4,33.1493858411,28.6253878552 +28.5,34.0077872727,27.5468721477 +28.6,32.3394096478,27.3111479784 +28.7,28.8060571375,25.5285631727 +28.8,26.3015577925,22.0017056808 +28.9,22.5799485637,19.0504695826 +29.0,18.6485512061,16.3284276439 +29.1,16.7195564986,13.9006869313 +29.2,13.9194804178,11.5683866415 +29.3,10.4382757669,10.2208571356 +29.4,10.0902676167,8.04236173979 +29.5,9.87236314773,6.14197282186 +29.6,8.22218519213,6.51362835198 +29.7,8.07863297375,7.58511052266 +29.8,8.13616295409,8.31036678643 +29.9,10.2891579965,8.46894141377 +30.0,12.3996650043,10.3520745208 +30.1,16.178567109,10.2858176533 +30.2,15.3426956788,12.9441185107 +30.3,18.6104468842,14.3431173074 +30.4,18.5713057455,16.4847124667 +30.5,18.1215602099,13.7776706666 +30.6,15.6350254181,11.8617030782 +30.7,11.3914862233,10.746648691 +30.8,8.39525737085,7.06980748661 +30.9,3.55899485629,2.2008492121 +31.0,-1.0904455385,-2.26065572197 +31.1,-5.45938898114,-6.34391800121 +31.2,-8.27200621166,-11.0970569795 +31.3,-13.7864217602,-15.8931175399 +31.4,-17.288107201,-18.3728985832 +31.5,-19.3108647786,-20.1346295041 +31.6,-22.5153769187,-21.2320824313 +31.7,-23.1588893937,-24.4707556752 +31.8,-24.0237135109,-25.9132698192 +31.9,-23.8523881184,-22.2582969233 +32.0,-24.7404500402,-23.4516303391 +32.1,-23.1793324316,-23.2951437968 +32.2,-23.6462618299,-22.0191139777 +32.3,-22.9027760172,-22.8594089143 +32.4,-22.9560556943,-21.8093478189 +32.5,-22.6562061025,-23.4953793425 +32.6,-23.4818121046,-24.5330132463 +32.7,-27.3001355602,-29.1321176164 +32.8,-30.7189362144,-30.3156386262 +32.9,-31.8035421511,-36.733377488 +33.0,-34.7420582252,-37.9473405569 +33.1,-37.0128673722,-39.5813293532 +33.2,-40.5597103845,-41.8533518786 +33.3,-42.3811129013,-42.0016907596 +33.4,-43.9258958643,-44.309599531 +33.5,-42.2693242478,-43.079113552 +33.6,-41.3245791058,-44.8325600911 +33.7,-38.5496966914,-42.2907026865 +33.8,-37.4254542662,-38.9965345656 +33.9,-34.38822234,-36.4246563713 +34.0,-30.5641567265,-29.8109866325 +34.1,-27.4293892083,-25.6352906591 +34.2,-24.0191756085,-21.6003081104 +34.3,-21.6663597855,-19.1445318044 +34.4,-17.9323985122,-14.6092918778 +34.5,-15.0105938357,-14.943761312 +34.6,-12.6612153331,-13.2632553339 +34.7,-10.123933777,-13.5356581131 +34.8,-11.7519983995,-14.1151864663 +34.9,-12.6552414158,-13.35617185 +35.0,-15.6620665436,-14.1556438804 +35.1,-14.9542665517,-14.474598256 +35.2,-17.8159980319,-14.1448471341 +35.3,-16.8101745034,-15.3762893504 +35.4,-17.1156443768,-15.8719118213 +35.5,-16.7292078233,-16.7257156061 +35.6,-13.8855624276,-15.8227585309 +35.7,-10.4893127233,-12.4663295045 +35.8,-8.6521462491,-10.0262712346 +35.9,-5.83927943096,-7.77899431259 +36.0,-0.339175353516,-6.33903778469 +36.1,1.61840746389,-3.37061457586 +36.2,3.34663986715,-0.0367191050929 +36.3,5.77691166937,0.68089017172 +36.4,4.71070549958,3.02708979955 +36.5,5.98413195286,2.72283838654 +36.6,1.68466135957,2.64689839796 +36.7,0.216951219981,2.05535034149 +36.8,-2.62014094335,-1.59504706614 +36.9,-2.88655301018,-1.90125880026 +37.0,-5.8455161269,-6.94706415321 +37.1,-7.22014174136,-12.4652494368 +37.2,-11.8107412205,-13.9666381781 +37.3,-13.9938611113,-15.972913347 +37.4,-14.7862925406,-18.0181301061 +37.5,-16.8077077536,-17.7957138376 +37.6,-17.2480026954,-16.8603944157 +37.7,-15.3845095972,-15.5847910517 +37.8,-13.1113968789,-14.346433116 +37.9,-11.2263589956,-11.3768600568 +38.0,-11.9180689438,-10.7754578932 +38.1,-9.15881547773,-6.05186721097 +38.2,-7.42086335927,-4.69338997672 +38.3,-3.64228963532,-0.16570552555 +38.4,-1.67207151643,-0.864689924367 +38.5,0.226377301941,1.02421301458 +38.6,1.43898095245,0.841037580868 +38.7,-0.0613958888484,0.748385076364 +38.8,-1.51035851206,0.41446354773 +38.9,-2.57531925561,-1.54423229844 +39.0,-3.5276010727,-3.13282169275 +39.1,-6.31322548657,-5.59267612551 +39.2,-6.03633516973,-7.6913823309 +39.3,-7.06727898758,-8.60450672714 +39.4,-5.82176878872,-8.74979755851 +39.5,-5.10262059386,-6.63265816137 +39.6,-2.696544622,-5.05033766994 +39.7,-0.123447387734,-1.32205833155 +39.8,2.22699628857,0.379398023967 +39.9,5.37263676763,3.43177321927 +40.0,7.27497947108,6.31958826706 +40.1,8.65056172601,9.49730597189 +40.2,13.3856978553,12.1483870103 +40.3,17.842540076,14.5043065666 +40.4,19.4805718559,15.5342823476 +40.5,19.5769144367,17.0239662908 +40.6,19.3459379695,15.8987134433 +40.7,17.1185596406,14.0968853185 +40.8,16.7905053922,13.8969254694 +40.9,14.1710155059,11.9415251807 +41.0,11.4189620377,7.6427971167 +41.1,6.3642419403,5.0613947923 +41.2,5.56741750449,1.59579203838 +41.3,0.484448509801,-3.81310901606 +41.4,0.123009265184,-5.89739275916 +41.5,-2.98897604351,-6.55626784244 +41.6,-4.12488633464,-7.69423437137 +41.7,-4.17726497833,-5.83981984817 +41.8,-2.17143181837,-5.56817767509 +41.9,-0.91475151309,-3.16664640628 +42.0,-0.512108853347,-2.60039421329 +42.1,0.402590435206,-0.353094013845 +42.2,1.38384193654,1.37215735314 +42.3,1.69278721168,4.30817473723 +42.4,1.30087416453,4.02437506961 +42.5,-0.881794195032,5.44698515508 +42.6,-1.53688946819,5.05829087659 +42.7,-2.78702815608,5.30771442963 +42.8,-3.35278615338,1.86404807729 +42.9,-5.15095601932,-0.766797326261 +43.0,-5.94187990104,-2.04889145867 +43.1,-7.03947602234,-3.52508821499 +43.2,-8.43441278604,-4.08444103276 +43.3,-8.85384219339,-5.6141017518 +43.4,-9.27247448662,-4.34961192195 +43.5,-10.5193596596,-4.41150981713 +43.6,-7.83138167625,-3.0224000056 +43.7,-4.19687741064,-0.239811395755 +43.8,-0.297591415857,3.53500617739 +43.9,4.10685383461,6.84308473948 +44.0,9.92064585333,13.2344525976 +44.1,14.5720328511,17.3003764028 +44.2,20.8795483867,20.3150155434 +44.3,25.0430333513,25.1279546426 +44.4,29.6055495625,28.3082320927 +44.5,32.5682698545,32.7599270045 +44.6,33.262983756,34.6776488142 +44.7,35.4565300147,36.7790342824 +44.8,32.7218702903,36.4558909963 +44.9,32.6162260254,34.3500807951 +45.0,31.1854775308,33.7775953647 +45.1,32.7923127009,33.9199932698 +45.2,30.970763927,32.7641398991 +45.3,30.1205027049,34.0565195615 +45.4,30.8962660687,32.5257529025 +45.5,30.7447060835,33.8701479282 +45.6,33.2341687543,34.8625680084 +45.7,36.1788173981,36.3051344164 +45.8,37.8374959668,40.0969080419 +45.9,40.6861824466,43.3842962484 +46.0,42.6393070003,46.2263458278 +46.1,43.8729052213,48.689271777 +46.2,47.2012528997,52.3021299784 +46.3,49.5789520239,53.5460546705 +46.4,51.5085097388,55.0770634874 +46.5,52.0260591273,53.8604375389 +46.6,51.322879487,53.6320105029 +46.7,49.1173776927,50.7253565528 +46.8,46.8642187264,47.9765543501 +46.9,43.8922703533,45.5975280651 +47.0,39.9487205405,41.8231456215 +47.1,36.3750662821,39.359318905 +47.2,33.5192326397,36.194274471 +47.3,30.9369191078,33.7723311743 +47.4,27.3710654036,31.4127561653 +47.5,27.3018483741,30.5914810405 +47.6,28.524011022,30.4502038514 +47.7,29.7793611554,30.4715044372 +47.8,29.4990178063,32.3731298796 +47.9,31.5826992273,31.3636973218 +48.0,32.5336087894,35.2668211908 +48.1,34.2285280187,37.792671757 +48.2,35.7579293743,36.3180546046 +48.3,39.9499788356,38.3101880247 +48.4,40.4595106348,41.5202999764 +48.5,42.7137366547,42.7460219165 +48.6,43.3185792463,42.5290913126 +48.7,42.3430978211,40.5470262618 +48.8,42.3638072373,39.6169523274 +48.9,40.0459919718,36.9378855366 +49.0,37.9513255957,36.6758785841 +49.1,37.8024754209,34.9131553118 +49.2,35.4760406556,33.1420306878 +49.3,33.7529666798,31.8221174227 +49.4,32.4458964625,31.6529320483 +49.5,33.4750479116,32.4514946881 +49.6,35.339509455,33.2142521718 +49.7,37.4756795207,36.5413449385 +49.8,38.8666624154,37.7775464073 +49.9,40.8990502836,41.2710646185 +50.0,41.9026160389,44.3184453973 +50.1,45.6584670043,47.2830775812 +50.2,47.4345549403,47.8066410439 +50.3,51.3704874052,48.3197953061 +50.4,52.4738803031,49.8273916164 +50.5,52.583858282,49.378494682 +50.6,50.029785574,50.9536727395 +50.7,48.4300446582,47.6177125915 +50.8,45.6732420022,44.6166563365 +50.9,41.8689509807,41.0858101527 +51.0,39.2350935364,39.2669513961 +51.1,36.3876841476,34.9747489593 +51.2,32.5472917032,32.5402358789 +51.3,29.8150515457,31.3806752094 +51.4,25.5253551359,29.3015601101 +51.5,23.879568305,27.4549776652 +51.6,22.4486866219,25.7608608591 +51.7,25.0175632316,26.6041370515 +51.8,25.6350479571,27.484235803 +51.9,24.4063263097,26.7816231461 +52.0,27.4999176872,28.1107013432 +52.1,28.7211843112,29.3534638949 +52.2,31.0782416809,32.0378960691 +52.3,33.5349279865,33.629956746 +52.4,34.7336538437,34.5159805397 +52.5,32.5069009094,33.0327007165 +52.6,32.41781489,32.4740812252 +52.7,30.3250618037,29.9608227411 +52.8,27.4477257998,27.7486009543 +52.9,25.8068640428,25.0015788004 +53.0,25.1363996628,21.58010611 +53.1,21.7990912307,22.2250429669 +53.2,20.4778717407,18.4927145098 +53.3,20.8592823252,20.0263729646 +53.4,20.3475920459,18.9754313605 +53.5,22.5251451361,20.9176772261 +53.6,22.3124636334,23.3479673985 +53.7,24.0125393129,27.7357121819 +53.8,27.4292147689,31.2222912741 +53.9,33.4834425156,35.5946909673 +54.0,37.5741300654,40.9077497475 +54.1,43.2332810116,44.9175606622 +54.2,47.5617917692,48.8503417406 +54.3,50.8546843466,53.6227050715 +54.4,56.1579294252,57.4167513081 +54.5,59.4581104398,59.7209115419 +54.6,62.3147652526,62.5628725116 +54.7,62.25087286,63.4401047313 +54.8,62.3329603547,63.1943775341 +54.9,60.3613924624,62.8646826752 +55.0,59.5463588859,62.8394031447 +55.1,61.4084182976,63.1218350098 +55.2,61.7502348049,62.6395779832 +55.3,61.5015593813,62.647077904 +55.4,61.9426318075,62.3651232183 +55.5,65.0432237903,63.9306041821 +55.6,64.8366194925,67.7831731454 +55.7,67.5223427834,71.4270562671 +55.8,71.1708748067,76.3541026199 +55.9,75.2643233938,79.1089080694 +56.0,79.2006144007,82.2375810081 +56.1,83.0598208868,84.5467022007 +56.2,85.8840079573,87.5306347777 +56.3,87.5789810545,90.6550974159 +56.4,89.7265382401,92.9065919193 +56.5,89.7740476244,93.0962694328 +56.6,88.3083296532,93.1873823577 +56.7,86.8959002791,92.0818516279 +56.8,85.4989272522,88.9891559701 +56.9,83.6967126221,87.7248239806 +57.0,80.0964843663,85.4412283595 +57.1,77.05325495,82.1039545731 +57.2,74.9616606052,79.379049089 +57.3,73.0293938237,78.4256109074 +57.4,72.421656433,76.6090940728 +57.5,72.1717502091,74.6297630083 +57.6,72.6259796383,76.9397701859 +57.7,74.9692369216,76.2114090388 +57.8,76.7525850762,78.7176512041 +57.9,79.2375459385,80.1143160845 +58.0,83.233195339,83.0096261141 +58.1,85.9968182437,84.0086689867 +58.2,89.2418890389,85.452485604 +58.3,89.5721578332,88.1641316626 +58.4,91.2188816687,91.3195949364 +58.5,93.6642360759,93.7205587599 +58.6,95.0340759219,94.1982042054 +58.7,95.4009115126,92.5700787075 +58.8,96.4829580081,94.2671832237 +58.9,95.0666313524,90.4737185829 +59.0,93.4813779384,90.8384578543 +59.1,92.502163445,88.1134319299 +59.2,90.6993730573,87.985492634 +59.3,89.996811002,86.8539924251 +59.4,87.8428457607,85.8196610505 +59.5,89.8189924515,88.0095953271 +59.6,89.9488105723,89.5731371288 +59.7,92.5717506848,92.4950097946 +59.8,95.7174594022,94.6829071103 +59.9,98.5875662315,98.1605635087 +60.0,101.776719301,101.672620674 +60.1,104.966328052,105.270365964 +60.2,108.110551864,109.618380143 +60.3,110.147250271,110.933077787 +60.4,111.401490648,112.565591332 +60.5,113.326135238,114.038013093 +60.6,112.604852686,113.05653795 +60.7,111.634070414,112.693012729 +60.8,109.758887403,110.663731929 +60.9,106.120947972,108.723672939 +61.0,101.464684413,106.060704463 +61.1,99.7070789679,102.374699916 +61.2,94.8420750537,100.101354553 +61.3,92.9617256384,96.5264712259 +61.4,91.4694255817,93.5349467234 +61.5,89.6102508017,92.84053628 +61.6,90.7206722952,91.5104519453 +61.7,90.2558254796,91.1230482675 +61.8,91.003228396,92.6694548567 +61.9,90.6528944968,92.5587629983 +62.0,90.9622089277,93.0944287926 +62.1,92.5036795346,95.6183563445 +62.2,93.1768130861,97.0018189842 +62.3,96.3872123342,96.3823684496 +62.4,94.9267940733,96.5155665664 +62.5,95.3055691963,95.1434574106 +62.6,93.221493174,95.5154670372 +62.7,92.3494394626,92.675734343 +62.8,89.2529233107,90.9816905244 +62.9,86.1946243836,88.6979596354 +63.0,81.4319616147,86.6164422552 +63.1,81.4735726296,83.282275428 +63.2,76.1168487674,82.6669409414 +63.3,77.441345517,79.5002282494 +63.4,77.9062201086,80.2422432012 +63.5,77.7718191201,81.5323584114 +63.6,79.7825431475,83.2514143566 +63.7,81.7748391484,85.4166340177 +63.8,83.7038522267,88.885832159 +63.9,88.5453091526,91.6573644528 +64.0,92.8642538281,94.3550753483 +64.1,98.4511569606,100.343672511 +64.2,100.541470968,104.333399836 +64.3,105.35214788,105.551154444 +64.4,109.293317092,110.227556585 +64.5,111.865827238,112.455396675 +64.6,113.015259633,112.60647181 +64.7,112.626950944,112.611197324 +64.8,111.364056024,113.445713776 +64.9,110.876796922,111.878389289 +65.0,111.737190533,110.257583527 +65.1,109.907627659,110.549382307 +65.2,109.881436362,109.220497075 +65.3,108.245111819,109.055869474 +65.4,108.789795505,108.706088813 +65.5,106.000935236,108.082278209 +65.6,106.328024538,108.206763728 +65.7,108.280992597,108.90768423 +65.8,109.782845402,110.837825779 +65.9,113.12057711,111.291855375 +66.0,113.500770111,114.287992042 +66.1,117.562842423,117.203614185 +66.2,119.520329175,118.019265897 +66.3,120.956614494,120.295869069 +66.4,120.488314212,119.988944618 +66.5,120.467599576,118.965720738 +66.6,117.809942793,117.345243267 +66.7,115.283009669,112.568656124 +66.8,111.363625683,109.100999471 +66.9,107.029577462,105.597678041 +67.0,102.317271624,101.76511549 +67.1,95.3129196433,97.9686902078 +67.2,91.9833659329,93.0610732491 +67.3,87.6313081725,89.2940591424 +67.4,84.4837345113,85.76012178 +67.5,82.0628599465,83.1979323193 +67.6,82.1002261996,85.0955692812 +67.7,83.1509063714,84.7961001969 +67.8,83.827183741,84.4832080711 +67.9,85.6726095998,86.6051778573 +68.0,86.6563560393,87.1221762543 +68.1,88.2046802055,86.8327249347 +68.2,89.118587054,87.4204930103 +68.3,89.4102666184,87.8715749013 +68.4,90.5337933881,87.7372107082 +68.5,89.4633368997,88.0343258435 +68.6,87.2910911505,86.7929281085 +68.7,84.4602981674,84.7015928046 +68.8,82.2676176724,83.6928255674 +68.9,80.3189540931,79.8727218702 +69.0,78.6585091857,77.867468091 +69.1,74.2006914905,76.8715210123 +69.2,71.4668220176,73.6410960157 +69.3,68.2036025743,72.5117310975 +69.4,67.7747428229,70.220027121 +69.5,65.5325681342,69.1126590522 +69.6,65.4588640377,66.8131617116 +69.7,67.0150875218,67.2624225374 +69.8,67.3061564803,68.8545730858 +69.9,71.196944089,70.5032187445 +70.0,71.2850031517,72.6390986664 +70.1,75.1222968398,73.2714902392 +70.2,75.7898898667,74.6394223536 +70.3,77.2245232623,73.3459991389 +70.4,77.2880050853,72.8230669216 +70.5,78.0222214768,74.209978908 +70.6,74.590574514,71.9915483956 +70.7,72.4933786933,68.3454775269 +70.8,66.2823388419,64.8424571807 +70.9,62.534518066,60.4812947905 +71.0,60.2624023729,57.7158160343 +71.1,55.3590104574,52.7864108405 +71.2,50.3059349867,49.1298012959 +71.3,48.0663197937,45.3075150086 +71.4,44.9201848741,41.3346041994 +71.5,42.314363982,39.003408586 +71.6,39.176082357,35.7755229219 +71.7,37.1637165772,34.1495270327 +71.8,37.2405267449,35.0249659592 +71.9,36.5232982246,33.9460778315 +72.0,36.5654608823,36.0292807372 +72.1,36.1064964999,36.151445332 +72.2,34.7315004763,34.0769797132 +72.3,34.2617712728,33.1440935662 +72.4,32.8839009922,32.9523358534 +72.5,30.5619109102,31.3672373304 +72.6,29.5867086242,28.3181330052 +72.7,26.0422583389,26.3694821809 +72.8,24.8873069151,22.6963340028 +72.9,20.8309906193,21.1294411502 +73.0,17.3523326869,17.379924375 +73.1,14.8254836159,16.9003734775 +73.2,13.5034478358,13.8030747437 +73.3,12.2357923189,13.0826001949 +73.4,11.4170425042,10.9115181438 +73.5,9.60843204474,10.2795432512 +73.6,10.1108442165,9.34094676315 +73.7,11.9008752873,12.2243581426 +73.8,14.0192248089,16.3361452665 +73.9,17.578330078,18.5473962891 +74.0,21.3597522062,22.7147041726 +74.1,24.5524756547,27.8623176961 +74.2,26.795508894,31.5822860615 +74.3,30.3840709594,34.8939320829 +74.4,32.2677007703,37.0656804405 +74.5,34.9447437745,38.2362764876 +74.6,35.2799043622,37.1622156873 +74.7,37.103594182,37.4390465827 +74.8,36.0651513654,36.7384133971 +74.9,34.3473553211,36.4380168159 +75.0,35.2503348497,35.6391045632 +75.1,33.8552223466,35.2694784063 +75.2,33.7362877513,32.6744577402 +75.3,32.3190715479,31.7642634423 +75.4,33.2958518406,32.1866341856 +75.5,32.2363622232,32.5604701747 +75.6,32.2205396445,32.9225484227 +75.7,31.9658566131,34.4487159985 +75.8,34.1183775657,35.9784892086 +75.9,36.9236967883,36.6134725422 +76.0,37.9664392955,40.3846340205 +76.1,39.6098539528,42.1617853886 +76.2,43.5675763153,44.3343365015 +76.3,42.8231197077,45.2655213193 +76.4,46.6686811812,45.234568047 +76.5,44.7506003282,45.1087942946 +76.6,43.7766620129,43.2326536226 +76.7,41.6551590726,41.9873359527 +76.8,38.9337257414,38.2742263605 +76.9,34.2076113589,35.9510844494 +77.0,31.7152992849,31.5822632753 +77.1,28.8185077552,28.6614106692 +77.2,24.587286183,25.8191700783 +77.3,22.0777595854,23.0413019494 +77.4,19.6175838276,20.0897338583 +77.5,18.6271254147,18.8501707959 +77.6,16.062525443,19.008621531 +77.7,16.4411707471,17.8423266327 +77.8,16.4128730397,19.2461648715 +77.9,18.559517932,21.1837759217 +78.0,21.1958249715,21.7055340324 +78.1,22.8849262292,24.3943863712 +78.2,24.3561931894,25.1493588191 +78.3,26.6085429525,26.6690478629 +78.4,27.3699394707,28.3214712354 +78.5,26.228743555,26.7211409996 +78.6,26.6739144103,26.137272406 +78.7,25.2209428504,25.6728138362 +78.8,24.6913737623,24.9654504427 +78.9,24.1606068913,22.5378300345 +79.0,23.5899828513,21.8836678157 +79.1,20.8988455513,19.9467700672 +79.2,18.5221486314,18.0616153658 +79.3,18.0826222184,17.4010014962 +79.4,18.3074474513,17.2459421725 +79.5,15.9094988208,15.4625693799 +79.6,16.5358166962,17.045571264 +79.7,15.7284227993,18.2175334808 +79.8,18.2450118472,19.8686551238 +79.9,20.3107051829,23.132939828 +80.0,21.0495785415,23.7571244908 +80.1,22.2645753104,27.6686138027 +80.2,24.5273858631,29.3132462087 +80.3,28.7194481201,30.6069365702 +80.4,31.2685358258,30.3030670836 +80.5,31.124106147,31.965749976 +80.6,28.4302883998,30.073155363 +80.7,26.8867343021,27.4964001187 +80.8,24.5552152572,26.4025785692 +80.9,21.8376515857,23.4596955603 +81.0,20.4473008965,19.6211900414 +81.1,16.9150430535,14.6341778635 +81.2,13.4100528662,12.3970675854 +81.3,11.195006731,7.5610728743 +81.4,8.30229312198,2.86743533579 +81.5,4.56687321023,0.272929657287 +81.6,1.86167342461,0.717557679743 +81.7,2.65754129129,-3.31171084031 +81.8,3.45322216886,-2.15700573972 +81.9,6.44020905778,-1.2532749759 +82.0,7.19802575075,0.251168326959 +82.1,7.99024764259,2.00031035708 +82.2,8.11953255976,2.89917893058 +82.3,7.71667875254,5.10732582552 +82.4,5.31714924211,4.645683784 +82.5,4.36206728354,4.896684815 +82.6,1.94233325777,3.36543897501 +82.7,-0.260492888979,0.154250881431 +82.8,-1.99719891523,-0.859643945623 +82.9,-5.34233936852,-4.92356605222 +83.0,-8.21670361174,-6.76034863236 +83.1,-10.5142529639,-9.36983160454 +83.2,-13.4524168534,-12.2073074859 +83.3,-15.3796598011,-13.1356295579 +83.4,-16.4591141039,-13.6909686029 +83.5,-14.568177533,-12.6063607399 +83.6,-14.7171572845,-12.8353574271 +83.7,-11.0658335237,-10.699865345 +83.8,-7.39948855375,-8.17592457978 +83.9,-3.79751139784,-3.90276810431 +84.0,0.882766992062,-1.93743585591 +84.1,4.45583811591,2.82646858952 +84.2,9.44802957204,6.63645587136 +84.3,13.4366993061,10.1208517765 +84.4,16.7295923854,15.5769960485 +84.5,17.5887332162,17.2653316846 +84.6,18.5407492883,18.4195357353 +84.7,18.7910714253,18.6566035446 +84.8,18.4485229355,17.2562500052 +84.9,16.7399243256,16.8890466431 +85.0,15.7029446938,14.5387700771 +85.1,14.0778348405,15.4028048112 +85.2,11.9248457023,12.5559487488 +85.3,11.3127127874,12.3266665253 +85.4,10.4175923566,11.6612613526 +85.5,9.43284539182,12.422964296 +85.6,11.6757066125,14.314538149 +85.7,13.6041822149,14.3592828981 +85.8,16.3846950495,17.0764314485 +85.9,17.7204210417,19.3990895023 +86.0,21.3590277542,19.6759834073 +86.1,20.740515525,22.2290924927 +86.2,22.0066585693,21.9649898271 +86.3,23.1537568821,23.228953605 +86.4,23.7801838025,24.6129901939 +86.5,24.4957328686,22.248109458 +86.6,24.9123687376,21.7104948316 +86.7,22.0140827937,20.6210301036 +86.8,18.8949556814,18.2487576194 +86.9,14.0563889542,13.4311083043 +87.0,11.2477568029,8.03703571863 +87.1,6.61569784123,5.30157690818 +87.2,2.7761931766,0.0450785405654 +87.3,-0.887777898513,-3.03454228448 +87.4,-3.15760893239,-4.92398438363 +87.5,-7.55653527193,-7.08175869817 +87.6,-6.43639951066,-7.50446607296 +87.7,-8.12209000659,-9.67724700346 +87.8,-6.79418227219,-8.6083288433 +87.9,-4.3310601926,-5.4275516403 +88.0,-3.96292078102,-4.87223023035 +88.1,-2.70099143602,-4.78825710669 +88.2,-0.0967928957769,-1.03195663114 +88.3,1.78543156066,1.00659176773 +88.4,2.4773203763,4.25877027185 +88.5,2.10089604776,3.97085940877 +88.6,-0.270030000985,3.52740281526 +88.7,-0.559276498122,2.68569760605 +88.8,-3.34798252852,-0.214122215543 +88.9,-5.01531260735,-1.56485546603 +89.0,-6.05150236436,-3.14030166879 +89.1,-7.58757937641,-4.9583362821 +89.2,-9.69071086033,-7.60363175071 +89.3,-9.71615763061,-11.7465675433 +89.4,-10.9974470211,-10.724101407 +89.5,-11.6368561044,-12.0853945814 +89.6,-10.6858067802,-10.8844430253 +89.7,-9.49276915583,-9.89307400985 +89.8,-7.06219116349,-8.31040692571 +89.9,-4.81825402762,-4.3663700674 +90.0,-2.1924336463,-3.18462917701 +90.1,0.354031658296,0.485573313895 +90.2,0.751732011033,1.19687967553 +90.3,2.70502135322,3.08698804213 +90.4,3.19385111682,2.99861099209 +90.5,3.18058196527,2.64828170119 +90.6,2.54403086208,1.5350343954 +90.7,0.773940362541,-1.37556495791 +90.8,-2.93182103516,-3.00613080452 +90.9,-5.85548299839,-5.19843013735 +91.0,-9.59463122236,-9.21771366717 +91.1,-13.920742637,-12.6761908981 +91.2,-17.3781404552,-18.8967716369 +91.3,-19.4625037985,-21.4051181826 +91.4,-22.4685427843,-23.549724662 +91.5,-24.0522296793,-26.9026264923 +91.6,-24.5308564705,-26.8897491964 +91.7,-24.7118093319,-30.5961379812 +91.8,-24.007174129,-29.2072412756 +91.9,-23.6372442967,-28.8858636601 +92.0,-24.264069444,-26.2853439125 +92.1,-24.2145556282,-28.887202428 +92.2,-23.3984093577,-25.211461805 +92.3,-22.8096994745,-24.2228587898 +92.4,-22.1159489274,-24.1665244659 +92.5,-22.1951705846,-22.7474750053 +92.6,-24.278214342,-24.3639645553 +92.7,-25.5765551173,-28.3430394526 +92.8,-28.5984204386,-30.0618109722 +92.9,-30.9743781689,-31.10685508 +93.0,-32.7179939891,-34.2387613491 +93.1,-35.8298737972,-36.2803972609 +93.2,-37.0634481821,-38.9616617371 +93.3,-38.3195572988,-38.9093033817 +93.4,-36.8736501014,-38.5428169874 +93.5,-36.7308761099,-36.9790208833 +93.6,-34.3023483053,-34.0175373164 +93.7,-33.1772861587,-31.9529993195 +93.8,-29.1727064194,-29.6802747408 +93.9,-26.7609565865,-25.033631365 +94.0,-20.8946874998,-21.0259762351 +94.1,-16.5866081216,-17.4854792356 +94.2,-11.729562305,-11.8454691402 +94.3,-6.3725052617,-7.07062912328 +94.4,-2.41421755334,-2.93706834662 +94.5,2.33985905798,-0.105996899501 +94.6,1.20696462908,0.695110154551 +94.7,4.14010481141,3.9464202867 +94.8,4.73482522757,4.55587919101 +94.9,5.68510942334,6.17168273324 +95.0,2.70759262653,7.2469927479 +95.1,4.13174568405,6.87037045638 +95.2,2.95353517629,5.3456542379 +95.3,3.40257553956,6.27049838432 +95.4,4.31983844147,6.84756821624 +95.5,6.13700195,8.61891003156 +95.6,9.22451039417,10.3099493905 +95.7,13.0666747078,14.1301712074 +95.8,15.3108985111,15.7367314545 +95.9,17.1819268705,20.9026553694 +96.0,20.8971541013,23.2488255995 +96.1,23.2635842206,26.8834963446 +96.2,26.2450364231,29.8495129429 +96.3,28.928343283,31.9009460197 +96.4,30.6980258914,33.4816452269 +96.5,30.8456014709,35.5621016648 +96.6,31.242187172,35.1645243295 +96.7,30.2667694215,34.034593709 +96.8,30.1866011711,32.7294813662 +96.9,25.7206203713,28.9395027706 +97.0,25.2688081698,25.7525045489 +97.1,21.870747812,23.8082707686 +97.2,20.3033734989,21.1409630946 +97.3,17.6933738527,21.4504582128 +97.4,17.417991577,18.8954368487 +97.5,17.5261637295,20.2534993843 +97.6,17.726061693,19.1207211276 +97.7,21.2702366471,20.3085045232 +97.8,22.2194057083,22.0956361682 +97.9,25.1620175101,23.0956676508 +98.0,27.5459616069,28.6930360281 +98.1,31.8980691283,29.8663912721 +98.2,35.909714565,33.8047390382 +98.3,38.5513101279,35.0113614756 +98.4,39.1502452271,37.8636769967 +98.5,42.2220789927,39.6470050984 +98.6,41.7961260281,39.0221758212 +98.7,42.4887176816,38.6340530238 +98.8,39.9281658677,38.5470640963 +98.9,38.7325656038,37.9608876869 +99.0,37.0518838446,36.3554798862 +99.1,35.7193659785,38.3547696258 +99.2,37.1025594358,37.4746570962 +99.3,36.3099256068,38.5652685842 +99.4,37.1206169536,38.8942879243 +99.5,38.8091857055,40.616045434 +99.6,40.8398496547,42.0772426978 +99.7,42.904474237,44.3786587588 +99.8,46.8291710834,48.262838134 +99.9,51.1241624829,50.903562328 From 6d2458ff8f97198c481f0a335df118d3e26218ed Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 7 May 2024 12:15:17 -0600 Subject: [PATCH 12/12] fixing some docstrings, handling P and Q if auto-select is True --- ravenframework/TSA/ARMA.py | 8 +++++++- ravenframework/TSA/TSAUser.py | 2 +- .../ROM/TimeSeries/SyntheticHistory/auto_arma.xml | 5 +---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/ravenframework/TSA/ARMA.py b/ravenframework/TSA/ARMA.py index 66c4074215..1ef9e668f3 100644 --- a/ravenframework/TSA/ARMA.py +++ b/ravenframework/TSA/ARMA.py @@ -85,7 +85,10 @@ class cls. option. """, default=False) specs.addParam('auto_select', param_type=InputTypes.BoolType, required=False, - descr=r""" """, default=False) + descr=r"""if set to True, the ARMA algorithm will use P and Q, the signal and + noise lag respectively, determined by the `autoarma` TSA algorithm. + The `autoarma` algorithm must be selected in the TSA input sequence before + the `ARMA` algorithm.""", default=False) specs.addSub(InputData.parameterInputFactory('P', contentType=InputTypes.IntegerListType, descr=r"""the number of terms in the AutoRegressive (AR) term to retain in the regression; typically represented as $P$ or Signal Lag in literature. @@ -134,6 +137,9 @@ def handleInput(self, spec): targets = settings['target'] if settings['auto_select']: + # checking to make sure P and Q are not selected + if spec.findAll('P') or spec.findAll('Q'): + raise IOError("P and Q values for ARMA are not accepted if `auto_select` is True.") # if auto-selecting, replace P and Q with Nones to check for and replace later settings['P'] = dict((target, None) for target in targets ) settings['Q'] = dict((target, None) for target in targets ) diff --git a/ravenframework/TSA/TSAUser.py b/ravenframework/TSA/TSAUser.py index 459ae7ab47..33c7dd839e 100644 --- a/ravenframework/TSA/TSAUser.py +++ b/ravenframework/TSA/TSAUser.py @@ -323,7 +323,7 @@ def getTSApointwiseData(self): @ In, None, @ Out, segmentData, dict """ - # + # gathering features that TSA does NOT use to cluster, but still useful to report back segmentNonFeatures = {} for algo in self._tsaAlgorithms: if algo not in self._tsaTrainedParams: diff --git a/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml b/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml index 1002b2ab0a..1d2f69ee58 100644 --- a/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml +++ b/tests/framework/ROM/TimeSeries/SyntheticHistory/auto_arma.xml @@ -73,10 +73,7 @@ 5 bic - -

1

- 0 -
+