From ed77ac54c750444ee68447896b36c88fb678a023 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 14 May 2024 11:22:56 -0600 Subject: [PATCH 01/23] new classes for multiresolutionTSA and discrete wavelet transform algo --- ravenframework/Models/ROM.py | 3 +- ravenframework/SupervisedLearning/Factory.py | 3 +- .../SupervisedLearning/MultiResolutionTSA.py | 133 ++++++++++ .../SupervisedLearning/ROMCollection.py | 241 ++++++++++++++++++ ravenframework/TSA/Factory.py | 5 +- ravenframework/TSA/Transformers/DWT.py | 208 +++++++++++++++ ravenframework/TSA/__init__.py | 2 +- 7 files changed, 590 insertions(+), 5 deletions(-) create mode 100644 ravenframework/SupervisedLearning/MultiResolutionTSA.py create mode 100644 ravenframework/TSA/Transformers/DWT.py diff --git a/ravenframework/Models/ROM.py b/ravenframework/Models/ROM.py index a10f422961..5278fc8ce0 100644 --- a/ravenframework/Models/ROM.py +++ b/ravenframework/Models/ROM.py @@ -43,7 +43,8 @@ class ROM(Dummy): interfaceFactory = factory segmentNameToClass = {'segment': 'Segments', 'cluster': 'Clusters', - 'interpolate': 'Interpolated'} + 'interpolate': 'Interpolated', + 'decomposition': 'Decomposition'} @classmethod def getInputSpecification(cls, xml=None): """ diff --git a/ravenframework/SupervisedLearning/Factory.py b/ravenframework/SupervisedLearning/Factory.py index 04f217610c..44fca9ab54 100644 --- a/ravenframework/SupervisedLearning/Factory.py +++ b/ravenframework/SupervisedLearning/Factory.py @@ -28,12 +28,13 @@ from .NDinvDistWeight import NDinvDistWeight from .NDspline import NDspline from .SyntheticHistory import SyntheticHistory +from .MultiResolutionTSA import MultiResolutionTSA from .pickledROM import pickledROM from .PolyExponential import PolyExponential from .DynamicModeDecomposition import DMD from .DynamicModeDecompositionControl import DMDC from .ARMA import ARMA -from .ROMCollection import Segments, Clusters, Interpolated +from .ROMCollection import Segments, Clusters, Interpolated, Decomposition ## Tensorflow-Keras Neural Network Models from .KerasMLPClassifier import KerasMLPClassifier diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py new file mode 100644 index 0000000000..36a305cbd8 --- /dev/null +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -0,0 +1,133 @@ +# 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. +""" + Created on January 10, 2019 + + @author: talbpaul, wangc + Container to handle ROMs that are made of many sub-roms +""" +# standard libraries +import copy +import warnings +from collections import defaultdict, OrderedDict +import pprint + +# external libraries +import abc +import numpy as np +import pandas as pd +from scipy.interpolate import interp1d +# internal libraries +from ..utils import utils, mathUtils, xmlUtils, randomUtils +from ..utils import InputData, InputTypes +from .SupervisedLearning import SupervisedLearning +from .SyntheticHistory import SyntheticHistory +# import pickle as pk # TODO remove me! +import os +# +# +# +# +class MultiResolutionTSA(SupervisedLearning): + """ In addition to clusters for each history, interpolates between histories. """ + + @classmethod + def getInputSpecification(cls): + """ + Method to get a reference to a class that specifies the input data for + class cls. + @ In, cls, the class for which we are retrieving the specification + @ Out, inputSpecification, InputData.ParameterInput, class to use for + specifying input of cls. + """ + spec = super().getInputSpecification() + spec.description = r"""Provides an alternative way to build the ROM. In addition to clusters for each history, interpolates between histories.""" + spec = SyntheticHistory.addTSASpecs(spec) + return spec + + def __init__(self): + """ + Constructor. + @ In, kwargs, dict, initialization options + @ Out, None + """ + super().__init__() + self.printTag = 'Multiresolution Synthetic History' + self._globalROM = SyntheticHistory() + self._decompParams = {} + + def _handleInput(self, paramInput): + """ + Function to handle the common parts of the model parameter input. + @ In, paramInput, InputData.ParameterInput, the already parsed input. + @ Out, None + """ + super()._handleInput(paramInput) + self._globalROM._handleInput(paramInput) + self._dynamicHandling = True # This ROM is able to manage the time-series on its own. + + def _train(self, featureVals, targetVals): + """ + Perform training on input database stored in featureVals. + @ In, featureVals, array, shape=[n_timeStep, n_dimensions], an array of input data # Not use for ARMA training + @ In, targetVals, array, shape = [n_timeStep, n_dimensions], an array of time series data + @ Out, None + """ + self._globalROM.trainTSASequential(targetVals) + + def __evaluateLocal__(self, featureVals): + """ + @ In, featureVals, float, a scalar feature value is passed as scaling factor + @ Out, rlz, dict, realization dictionary of values for each target + """ + rlz = self._globalROM.evaluateTSASequential() + return rlz + + ### ESSENTIALLY UNUSED ### + def _localNormalizeData(self,values,names,feat): + """ + Overwrites default normalization procedure, since we do not desire normalization in this implementation. + @ In, values, unused + @ In, names, unused + @ In, feat, feature to normalize + @ Out, None + """ + self.muAndSigmaFeatures[feat] = (0.0,1.0) + + def __confidenceLocal__(self,featureVals): + """ + This method is currently not needed for ARMA + """ + pass + + def __resetLocal__(self,featureVals): + """ + After this method the ROM should be described only by the initial parameter settings + Currently not implemented for ARMA + """ + pass + + def __returnInitialParametersLocal__(self): + """ + there are no possible default parameters to report + """ + localInitParam = {} + return localInitParam + + def __returnCurrentSettingLocal__(self): + """ + override this method to pass the set of parameters of the ROM that can change during simulation + Currently not implemented for ARMA + """ + pass diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index 4080652de4..cdc0e2b58c 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -32,6 +32,7 @@ from ..utils import utils, mathUtils, xmlUtils, randomUtils from ..utils import InputData, InputTypes from .SupervisedLearning import SupervisedLearning +from .SyntheticHistory import SyntheticHistory # import pickle as pk # TODO remove me! import os # @@ -1919,3 +1920,243 @@ def _train(self, featureVals, targetVals): associated with the corresponding points in featureVals """ pass +# +# +# +class Decomposition(SupervisedLearning): + + @classmethod + def getInputSpecification(cls): + spec = super().getInputSpecification() + # segmenting and clustering + segment = InputData.parameterInputFactory("Segment", strictMode=True, + descr=r"""provides an alternative way to build the ROM. When + this mode is enabled, the subspace of the ROM (e.g. ``time'') will be divided into segments as + requested, then a distinct ROM will be trained on each of the segments. This is especially helpful if + during the subspace the ROM representation of the signal changes significantly. For example, if the signal + is different during summer and winter, then a signal can be divided and a distinct ROM trained on the + segments. By default, no segmentation occurs.""") + segmentGroups = InputTypes.makeEnumType('segmentGroup', 'segmentGroupType', ['decomposition']) + segment.addParam('grouping', segmentGroups, descr=r"""enables the use of ROM subspace clustering in + addition to segmenting if set to \xmlString{cluster}. If set to \xmlString{segment}, then performs + segmentation without clustering. If clustering, then an additional node needs to be included in the + \xmlNode{Segment} node.""", default='decomposition') + # sl = SupervisedLearning.getInputSpecification() + # segment.addSub(SupervisedLearning.getInputSpecification()) + sl = SyntheticHistory.getInputSpecification() + for sub in sl.subs: + segment.addSub(sub) + # synthHist = SyntheticHistory.getInputSpecification() + # for sub in synthHist.subs: + # segment.addSub(sub) + spec.addSub(segment) + return spec + + def __init__(self): + super().__init__() + self._macroTemplate = SyntheticHistory() + self.name = 'Decomposition' + + def setTemplateROM(self, romInfo): + """ + Set the ROM that will be used in this grouping + @ In, romInfo, dict, {'name':romName, 'modelInstance':romInstance}, the information used to set up template ROM + @ Out, None + """ + self._templateROM = romInfo.get('modelInstance') + self._romName = romInfo.get('name', 'unnamed') + if self._templateROM is None: + self.raiseAnError(IOError, 'A rom instance is required by', self.name, 'please check your implementation') + + def _handleInput(self, paramInput): + """ + Function to handle the common parts of the model parameter input. + @ In, paramInput, InputData.ParameterInput, the already parsed input. + @ Out, None + """ + super()._handleInput(paramInput) + # notation: "pivotParameter" is for micro-steps (e.g. within-year, with a Clusters ROM representing each year) + # "macroParameter" is for macro-steps (e.g. from year to year) + inputSpecs = paramInput.findFirst('Segment') + self._macroSteps = {} # collection of macro steps (e.g. each year) + self._macroTemplate._handleInput(inputSpecs) # example "yearly" SVL engine collection + + ############### TRAINING #################### + def train(self, tdict): + """ + Trains the SVL and its supporting SVLs etc. Overwrites base class behavior due to + special clustering and macro-step needs. + @ In, trainDict, dict, dicitonary with training data + @ Out, None + """ + # run first set of MR TSA algorithms (should include some sort of MRA transformer) + self._templateROM.train(tdict) + + # Now we handle all the decomposition levels + # temporary... + mrTrainedParams = list(self._templateROM._globalROM._tsaTrainedParams.items())[-1] + assert mrTrainedParams[0].name == 'DWT', "Only recognizing DWT as MR TSA algo for now" + + noPivotTargets = [x for x in self.target if x != self.pivotID] + numLvls = len(mrTrainedParams[1][noPivotTargets[0]]['results']['coeff_d']) + + # create new ROM for every level + for lvl in range(numLvls): + new = copy.deepcopy(self._macroTemplate) + self._macroSteps[lvl] = new + + # NOW we train each level decomposition + for lvl, decomp in enumerate(self._macroSteps.values()): + # write training dict + decomp_tdict = copy.deepcopy(tdict) + for target in noPivotTargets: + decomp_tdict[target] = [mrTrainedParams[1][target]['results']['coeff_d'][lvl]] + # train global algos + _, newTrainingDict = decomp.getGlobalRomSegmentSettings(decomp_tdict, None) + # train + decomp.train(newTrainingDict) + + self.amITrained = True + + ############### EVALUATING #################### + def evaluate(self, edict): + """ + Evaluate the set of interpolated models + @ In, edict, dict, dictionary of evaluation parameters + @ Out, result, dict, result of evaluation + """ + # can we run SupervisedLearning.evaluate? Should this be an evaluateLocal? + ## set up the results dict with the correct dimensionality + ### actually, let's wait for the first sample to come in. + self.raiseADebug('Evaluating interpolated ROM ...') + results = None + + # mrTrainedParams = list(self._templateROM._globalROM._tsaTrainedParams.items())[-1] + noPivotTargets = [x for x in self.target if x != self.pivotID] + # numLvls, nPivot = mrTrainedParams[1][noPivotTargets[0]]['results']['coeff_d'].shape + + # first find the DWT/MRA re-comp algo + mrAlgo = [key for key in self._templateROM._globalROM._tsaTrainedParams.keys() if key.name=='DWT'] + assert len(mrAlgo)>0 + + # this should be reference to trainedParams + mrTrainedParams = self._templateROM._globalROM._tsaTrainedParams[mrAlgo[0]] + + for m, (macroStep, model) in enumerate(sorted(self._macroSteps.items(), key=lambda x: x[0])): + # evaluate algos + subResult = model.evaluate(edict) # TODO same input for all macro steps? True for ARMA at least... + # evaluate global algos + result = model.finalizeGlobalRomSegmentEvaluation(None, subResult, weights=None, slicer=None) + for target in noPivotTargets: + mrTrainedParams[target]['results']['coeff_d'][m] = result[target] + + + # run first set of MR TSA algorithms (should include some sort of MRA transformer) + results = self._templateROM.evaluate(edict) + + # ## TODO set up right for ND?? + # forcedMax = self._maxCycles if self._maxCycles is not None else np.inf + # numMacro = min(len(self._macroSteps), forcedMax) + # macroIndexValues = [] + # for m, (macroStep, model) in enumerate(sorted(self._macroSteps.items(), key=lambda x: x[0])): + # if m + 1 > numMacro: + # break + # # m is an index of the macro step, in order of the macro values (e.g. in order of years) + # # macroStep is the actual macro step value (e.g. the year) + # # model is the ClusterROM instance for this macro step + # macroIndexValues.append(macroStep) + # self.raiseADebug(f' ... evaluating macro step "{macroStep}" ({m+1} / {numMacro})') + # subResult = model.evaluate(edict) # TODO same input for all macro steps? True for ARMA at least... + # indexMap = subResult.get('_indexMap', {}) + # # if not set up yet, then frame results structure + # if results is None: + # results = {} + # finalIndexMap = indexMap # in case every rlz doesn't use same order, which would be lame + # pivotID = model._templateROM.pivotParameterID + # indices = set([pivotID, self._macroParameter]) + # for indexes in finalIndexMap.values(): + # indices.update(set(indexes)) + # #pivotVals = subResult[pivotID] + # #numPivot = len(pivotVals) + # for target, values in subResult.items(): + # # if an index, just set the values now # FIXME assuming always the same! + # ## FIXME thing is, they're not always the same, we're clustering, so sometimes there's diff num days! + # ## TODO for now, we simply require using a classifier that always has the same number of entries. + # if target in [pivotID, '_indexMap'] or target in indices: + # results[target] = values + # else: + # # TODO there's a strange behavior here where we have nested numpy arrays instead of + # # proper matrices sometimes; maybe it has to be this way for unequal clusters + # # As a result, we use the object dtype, onto which we can place a whole numpy array. + # results[target] = np.zeros([numMacro] + list(values.shape), dtype=object) + # # END setting up results structure, if needed + # # FIXME reshape in case indexMap is not the same as finalIndexMap? + # for target, values in subResult.items(): + # if target in [pivotID, '_indexMap'] or target in indices:# indexMap: + # continue + # indexer = tuple([m] + [None]*len(values.shape)) + # try: + # results[target][indexer] = values + # except ValueError: + # self.raiseAnError(RuntimeError, 'The shape of the histories along the pivot parameter is not consistent! Try using a clustering classifier that always returns the same number of clusters.') + # results['_indexMap'] = {} #finalIndexMap + # for target, vals in results.items(): + # if target not in indices and target not in ['_indexMap']: # TODO get a list of meta vars? + # default = [] if vals.size == 1 else [pivotID] + # results['_indexMap'][target] = [self._macroParameter] + list(finalIndexMap.get(target, default)) + # results[self._macroParameter] = macroIndexValues + return results + + ############### DUMMY #################### + # dummy methods that are required by SVL and not generally used + def __confidenceLocal__(self, featureVals): + """ + This should return an estimation of the quality of the prediction. + This could be distance or probability or anything else, the type needs to be declared in the variable cls.qualityEstType + @ In, featureVals, 2-D numpy array , [n_samples,n_features] + @ Out, __confidenceLocal__, float, the confidence + """ + pass + + def __resetLocal__(self): + """ + Reset ROM. After this method the ROM should be described only by the initial parameter settings + @ In, None + @ Out, None + """ + pass + + def __returnCurrentSettingLocal__(self): + """ + Returns a dictionary with the parameters and their current values + @ In, None + @ Out, params, dict, dictionary of parameter names and current values + """ + return {} + + def __returnInitialParametersLocal__(self): + """ + Returns a dictionary with the parameters and their initial values + @ In, None + @ Out, params, dict, dictionary of parameter names and initial values + """ + return {} + + # Are private-ish so should not be called directly, so we don't implement them, as they don't fit the collection. + def __evaluateLocal__(self, featureVals): + """ + @ In, featureVals, np.array, 2-D numpy array [n_samples,n_features] + @ Out, targetVals , np.array, 1-D numpy array [n_samples] + """ + pass + + def _train(self, featureVals, targetVals): + """ + Perform training on samples in featureVals with responses y. + For an one-class model, +1 or -1 is returned. + @ In, featureVals, {array-like, sparse matrix}, shape=[n_samples, n_features], + an array of input feature values + @ Out, targetVals, array, shape = [n_samples], an array of output target + associated with the corresponding points in featureVals + """ + pass diff --git a/ravenframework/TSA/Factory.py b/ravenframework/TSA/Factory.py index ca9d6704a8..367c78d3e2 100644 --- a/ravenframework/TSA/Factory.py +++ b/ravenframework/TSA/Factory.py @@ -30,7 +30,7 @@ from .STL import STL from .Transformers import ZeroFilter, LogTransformer, ArcsinhTransformer, TanhTransformer, SigmoidTransformer, \ OutTruncation, MaxAbsScaler, MinMaxScaler, StandardScaler, RobustScaler, \ - QuantileTransformer, Gaussianize, PreserveCDF, Differencing + QuantileTransformer, Gaussianize, PreserveCDF, Differencing, DWT factory = EntityFactory('TimeSeriesAnalyzer') # TODO map lower case to upper case, because of silly ROM namespace problems @@ -53,5 +53,6 @@ 'QuantileTransformer': 'quantiletransformer', 'Gaussianize': 'gaussianize', 'PreserveCDF': 'preserveCDF', - 'Differencing': 'differencing'} + 'Differencing': 'differencing', + 'DWT': 'dwt'} factory.registerAllSubtypes(TimeSeriesAnalyzer, alias=aliases) diff --git a/ravenframework/TSA/Transformers/DWT.py b/ravenframework/TSA/Transformers/DWT.py new file mode 100644 index 0000000000..154ac55f70 --- /dev/null +++ b/ravenframework/TSA/Transformers/DWT.py @@ -0,0 +1,208 @@ +# 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. + +""" +Created on November 13, 2023 +@author: sotogj + +Discrete Wavelet Transform +""" + +import numpy as np + +from ..TimeSeriesAnalyzer import TimeSeriesTransformer +from ...utils import xmlUtils, InputTypes, InputData + + +class DWT(TimeSeriesTransformer): + """ Differences the signal N times. """ + + _acceptsMissingValues = True + + def __init__(self, *args, **kwargs): + """ + A constructor that will appropriately intialize a time-series analysis 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) + + @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().getInputSpecification() + specs.name = 'dwt' + specs.description = r"""Discrete Wavelet TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform + on time-dependent data. Note: This TSA module requires pywavelets to be installed within your + python environment.""" + specs.addSub(InputData.parameterInputFactory( + 'family', + contentType=InputTypes.StringType, + descr=r"""The type of wavelet to use for the transformation. + There are several possible families to choose from, and most families contain + more than one variation. For more information regarding the wavelet families, + refer to the Pywavelets documentation located at: + https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) + \\ + Possible values are: + \begin{itemize} + \item \textbf{haar family}: haar + \item \textbf{db family}: db1, db2, db3, db4, db5, db6, db7, db8, db9, db10, db11, + db12, db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, db23, + db24, db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, + db36, db37, db38 + \item \textbf{sym family}: sym2, sym3, sym4, sym5, sym6, sym7, sym8, sym9, sym10, + sym11, sym12, sym13, sym14, sym15, sym16, sym17, sym18, sym19, sym20 + \item \textbf{coif family}: coif1, coif2, coif3, coif4, coif5, coif6, coif7, coif8, + coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17 + \item \textbf{bior family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, + bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, + bior6.8 + \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, rbio2.2, rbio2.4, rbio2.6, + rbio2.8, rbio3.1, rbio3.3, rbio3.5, rbio3.7, rbio3.9, rbio4.4, rbio5.5, + rbio6.8 + \item \textbf{dmey family}: dmey + \item \textbf{gaus family}: gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 + \item \textbf{mexh family}: mexh + \item \textbf{morl family}: morl + \item \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 + \item \textbf{shan family}: shan + \item \textbf{fbsp family}: fbsp + \item \textbf{cmor family}: cmor + \end{itemize}""")) + specs.addSub(InputData.parameterInputFactory('levels', contentType=InputTypes.IntegerType, + descr=r"""the number of wavelet decomposition levels for our signal. If level is 0, + it doesn't """)) + return specs + + 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['family'] = spec.findFirst('family').value + settings['levels'] = spec.findFirst('levels').value + return 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. + + @ 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 + @ Out, params, dict, characteristic parameters + """ + # TODO extend to continuous wavelet transform + try: + import pywt + except ModuleNotFoundError as exc: + print("This RAVEN TSA Module requires the PYWAVELETS library to be installed in the current python environment") + raise ModuleNotFoundError from exc + + ## The pivot input parameter isn't used explicity in the + ## transformation as it assumed/required that each element in the + ## time-dependent series is independent, uniquely indexed and + ## sorted in time. + family = settings['family'] + levels = settings.get('levels', 1) + params = {target: {'results': {}} for target in targets} + + # determine maximum decomposition level + max_level = pywt.dwt_max_level(len(pivot), family) + if levels>max_level: + print(f"Number of levels requested is larger than maximum DWT decomposition level, switching to maximum allowed: {max_level}") + levels = max_level + + for i, target in enumerate(targets): + history = signal[:, i] + mask = np.isnan(history) + history[mask] = 0 + # TODO:this is temporary for zero-filter SOLAR data... should this also look back to find filter results? + + results = params[target]['results'] + coeffs = pywt.mra(history, family, levels, transform='dwt' ) + for coeff in coeffs: + coeff[mask] = np.nan + + results['coeff_a'] = coeffs[0] + results['coeff_d'] = np.vstack([coeffs[i] for i in range(1,levels)]) if levels>1 else coeffs[1][np.newaxis] + + + return params + + def getResidual(self, initial, params, pivot, settings): + """ + Removes trained signal from data and find residual + @ In, initial, np.array, original signal shaped [pivotValues, targets], targets MUST be in + same order as self.target + @ In, params, dict, training parameters as from self.characterize + @ In, pivot, np.array, time-like array values + @ In, settings, dict, additional settings specific to algorithm + @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] + """ + residual = np.zeros(initial.shape) + for i, target in enumerate(settings['target']): + residual = initial[:,i] - params[target]['results']['coeff_a'] + return residual + + + def getComposite(self, initial, params, pivot, settings): + """ + Combines two component signals to form a composite signal. This is essentially the inverse + operation of the getResidual method. + @ In, initial, np.array, original signal shaped [pivotValues, targets], targets MUST be in + same order as self.target + @ In, params, dict, training parameters as from self.characterize + @ In, pivot, np.array, time-like array values + @ In, settings, dict, additional settings specific to algorithm + @ Out, composite, np.array, resulting composite signal + """ + try: + import pywt + except ModuleNotFoundError: + print("This RAVEN TSA Module requires the PYWAVELETS library to be installed in the current python environment") + raise ModuleNotFoundError + + synthetic = np.zeros((len(pivot), len(params))) + for t, (target, _) in enumerate(params.items()): + results = params[target]['results'] + cA = results['coeff_a'] + cD = results['coeff_d'] + synthetic[:, t] = pywt.imra(np.vstack([cA,cD])) + composite = initial + synthetic + return composite + + 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.fit + @ Out, None + """ + # Add model settings as subnodes to writeTO node + for target, info in params.items(): + base = xmlUtils.newNode(target) + writeTo.append(base) + base.append(xmlUtils.newNode('order', text=info['order'])) diff --git a/ravenframework/TSA/__init__.py b/ravenframework/TSA/__init__.py index c52006a6c7..8fc1fee576 100644 --- a/ravenframework/TSA/__init__.py +++ b/ravenframework/TSA/__init__.py @@ -31,7 +31,7 @@ from .Transformers import MaxAbsScaler, MinMaxScaler, StandardScaler, RobustScaler, \ LogTransformer, ArcsinhTransformer, TanhTransformer, SigmoidTransformer, \ QuantileTransformer, OutTruncation, ZeroFilter, PreserveCDF, Gaussianize, \ - Differencing + Differencing, DWT from .Factory import factory From b89d1a018a46ed2b133e8c3c5848960b192577ca Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Wed, 24 Jul 2024 07:51:36 -0600 Subject: [PATCH 02/23] updating submodules to match devel --- plugins/HERON | 2 +- plugins/TEAL | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/HERON b/plugins/HERON index febe0ba485..71152d13f9 160000 --- a/plugins/HERON +++ b/plugins/HERON @@ -1 +1 @@ -Subproject commit febe0ba48542b908393c59af0594c72d5e75af00 +Subproject commit 71152d13f9da46f8d9ddca72e843eae15b4a3879 diff --git a/plugins/TEAL b/plugins/TEAL index 97e32dbde3..fbc880c1de 160000 --- a/plugins/TEAL +++ b/plugins/TEAL @@ -1 +1 @@ -Subproject commit 97e32dbde3856aad8fda59010b1d845f2fbc7124 +Subproject commit fbc880c1de023048690b07823a9fafb1a9763ad2 From 95a0f2504f1d4913c978f9e87041d0c934f18e71 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Wed, 24 Jul 2024 08:25:09 -0600 Subject: [PATCH 03/23] renaming DWT to FilterBankDWT, adding class attrib for MRA --- .../SupervisedLearning/ROMCollection.py | 29 ++++++++++++------- ravenframework/TSA/Factory.py | 4 +-- ravenframework/TSA/README.md | 9 ++++++ ravenframework/TSA/TimeSeriesAnalyzer.py | 13 +++++++++ .../Transformers/{DWT.py => FilterBankDWT.py} | 13 +++++---- ravenframework/TSA/__init__.py | 2 +- 6 files changed, 52 insertions(+), 18 deletions(-) rename ravenframework/TSA/Transformers/{DWT.py => FilterBankDWT.py} (95%) diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index cdc0e2b58c..dfb5b94a5d 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -1941,14 +1941,9 @@ def getInputSpecification(cls): addition to segmenting if set to \xmlString{cluster}. If set to \xmlString{segment}, then performs segmentation without clustering. If clustering, then an additional node needs to be included in the \xmlNode{Segment} node.""", default='decomposition') - # sl = SupervisedLearning.getInputSpecification() - # segment.addSub(SupervisedLearning.getInputSpecification()) - sl = SyntheticHistory.getInputSpecification() - for sub in sl.subs: + sh = SyntheticHistory.getInputSpecification() + for sub in sh.subs: segment.addSub(sub) - # synthHist = SyntheticHistory.getInputSpecification() - # for sub in synthHist.subs: - # segment.addSub(sub) spec.addSub(segment) return spec @@ -1978,9 +1973,23 @@ def _handleInput(self, paramInput): # notation: "pivotParameter" is for micro-steps (e.g. within-year, with a Clusters ROM representing each year) # "macroParameter" is for macro-steps (e.g. from year to year) inputSpecs = paramInput.findFirst('Segment') - self._macroSteps = {} # collection of macro steps (e.g. each year) + self._macroSteps = {} # collection of macro steps (e.g. each year) self._macroTemplate._handleInput(inputSpecs) # example "yearly" SVL engine collection + # check that there is a multiresolution algorithm (by this point, the `_templateROM` will have been populated) + allAlgorithms = self._templateROM._globalROM._tsaAlgorithms + allAlgorithms.extend(self._templateROM._globalROM._tsaGlobalAlgorithms) + foundMRAalgorithm = False + for algo in allAlgorithms: + if algo.canTransform(): + if algo.isMultiResolutionAlgorithm(): + foundMRAalgorithm = True + if not foundMRAalgorithm: + msg = 'The Decomposition ROMCollection segment class requires a TSA algorithm capable of ' + msg += ' multiresolution time series analysis. None were found.' + raise IOError(msg) + + ############### TRAINING #################### def train(self, tdict): """ @@ -1995,7 +2004,7 @@ def train(self, tdict): # Now we handle all the decomposition levels # temporary... mrTrainedParams = list(self._templateROM._globalROM._tsaTrainedParams.items())[-1] - assert mrTrainedParams[0].name == 'DWT', "Only recognizing DWT as MR TSA algo for now" + assert mrTrainedParams[0].name == 'FilterBankDWT', "Only recognizing DWT as MR TSA algo for now" noPivotTargets = [x for x in self.target if x != self.pivotID] numLvls = len(mrTrainedParams[1][noPivotTargets[0]]['results']['coeff_d']) @@ -2036,7 +2045,7 @@ def evaluate(self, edict): # numLvls, nPivot = mrTrainedParams[1][noPivotTargets[0]]['results']['coeff_d'].shape # first find the DWT/MRA re-comp algo - mrAlgo = [key for key in self._templateROM._globalROM._tsaTrainedParams.keys() if key.name=='DWT'] + mrAlgo = [key for key in self._templateROM._globalROM._tsaTrainedParams.keys() if key.name=='FilterBankDWT'] assert len(mrAlgo)>0 # this should be reference to trainedParams diff --git a/ravenframework/TSA/Factory.py b/ravenframework/TSA/Factory.py index 367c78d3e2..eb9a89cee1 100644 --- a/ravenframework/TSA/Factory.py +++ b/ravenframework/TSA/Factory.py @@ -30,7 +30,7 @@ from .STL import STL from .Transformers import ZeroFilter, LogTransformer, ArcsinhTransformer, TanhTransformer, SigmoidTransformer, \ OutTruncation, MaxAbsScaler, MinMaxScaler, StandardScaler, RobustScaler, \ - QuantileTransformer, Gaussianize, PreserveCDF, Differencing, DWT + QuantileTransformer, Gaussianize, PreserveCDF, Differencing, FilterBankDWT factory = EntityFactory('TimeSeriesAnalyzer') # TODO map lower case to upper case, because of silly ROM namespace problems @@ -54,5 +54,5 @@ 'Gaussianize': 'gaussianize', 'PreserveCDF': 'preserveCDF', 'Differencing': 'differencing', - 'DWT': 'dwt'} + 'FilterBankDWT': 'filterbankdwt'} factory.registerAllSubtypes(TimeSeriesAnalyzer, alias=aliases) diff --git a/ravenframework/TSA/README.md b/ravenframework/TSA/README.md index 5734fcdbfe..78456b41cd 100644 --- a/ravenframework/TSA/README.md +++ b/ravenframework/TSA/README.md @@ -63,3 +63,12 @@ The following table shows which base classes each currently implemented TSA algo | `Gaussianize` | ✓ | | | | `Differencing` | ✓ | | | | `PreserveCDF` | ✓ | | | +| `FilterBankDWT` | | | ✓ | + + +### Note on Wavelet Algorithms: +There are currently two ways to apply a wavelet transform on a signal: + 1) the `Wavelet` algorithm, which is a Characterizer, Transformer, and Generator + 2) the `FilterBankDWT` algorithm, which is just a Transformer +Using the `Wavelet` algorithm uses the `dwt` and `idwt` methods of `PyWavelets` for characterization and generation, respectively. +The `FilterBankDWT` instead uses the `mra` and `imra` methods to create decomposition levels and communicate them to the `ROMCollection:Decomposition` class in RAVEN. diff --git a/ravenframework/TSA/TimeSeriesAnalyzer.py b/ravenframework/TSA/TimeSeriesAnalyzer.py index 3a94630b1a..dad655ae3a 100644 --- a/ravenframework/TSA/TimeSeriesAnalyzer.py +++ b/ravenframework/TSA/TimeSeriesAnalyzer.py @@ -317,6 +317,10 @@ class TimeSeriesTransformer(TimeSeriesAnalyzer): Acts as a mix-in class for algorithms that can transform time-dependent signals. Algorithms which receive an input signal, then produce an output signal should inherit from this class. """ + # class attribute + ## defines if algorithm is capable of decomposing a signal into multiple resolution signals + _multiResolution = False + @classmethod def getInputSpecification(cls): """ @@ -328,6 +332,15 @@ def getInputSpecification(cls): specs = super().getInputSpecification() return specs + @classmethod + def isMultiResolutionAlgorithm(cls): + """ + Determines if algorithm can be used to decompose a signal for multiresolution analysis. + @ In, None + @ Out, multiResolution, bool, True if this algorithm is capable of multiresolution analysis + """ + return cls._multiResolution + @abc.abstractmethod def getResidual(self, initial, params, pivot, settings): """ diff --git a/ravenframework/TSA/Transformers/DWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py similarity index 95% rename from ravenframework/TSA/Transformers/DWT.py rename to ravenframework/TSA/Transformers/FilterBankDWT.py index 154ac55f70..8c4d4c957c 100644 --- a/ravenframework/TSA/Transformers/DWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -25,10 +25,13 @@ from ...utils import xmlUtils, InputTypes, InputData -class DWT(TimeSeriesTransformer): - """ Differences the signal N times. """ +class FilterBankDWT(TimeSeriesTransformer): + """ Applies a Discrete Wavelet Transform algorithm as a filter bank to decompose signal into + multiple time resolution signals. + """ _acceptsMissingValues = True + _multiResolution = True def __init__(self, *args, **kwargs): """ @@ -48,9 +51,10 @@ def getInputSpecification(cls): @ Out, specs, InputData.ParameterInput, class to use for specifying input of cls. """ specs = super().getInputSpecification() - specs.name = 'dwt' + specs.name = 'filterbankdwt' specs.description = r"""Discrete Wavelet TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform - on time-dependent data. Note: This TSA module requires pywavelets to be installed within your + on time-dependent data as a filter bank to decompose the signal to multiple frequency levels. + Note: This TSA module requires pywavelets to be installed within your python environment.""" specs.addSub(InputData.parameterInputFactory( 'family', @@ -149,7 +153,6 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): results['coeff_a'] = coeffs[0] results['coeff_d'] = np.vstack([coeffs[i] for i in range(1,levels)]) if levels>1 else coeffs[1][np.newaxis] - return params def getResidual(self, initial, params, pivot, settings): diff --git a/ravenframework/TSA/__init__.py b/ravenframework/TSA/__init__.py index 8fc1fee576..e74fc0f112 100644 --- a/ravenframework/TSA/__init__.py +++ b/ravenframework/TSA/__init__.py @@ -31,7 +31,7 @@ from .Transformers import MaxAbsScaler, MinMaxScaler, StandardScaler, RobustScaler, \ LogTransformer, ArcsinhTransformer, TanhTransformer, SigmoidTransformer, \ QuantileTransformer, OutTruncation, ZeroFilter, PreserveCDF, Gaussianize, \ - Differencing, DWT + Differencing, FilterBankDWT from .Factory import factory From 19bd128b1827393a08e85571facee3360fa2afda Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Wed, 24 Jul 2024 15:02:14 -0600 Subject: [PATCH 04/23] allowing macroSteps (e.g., years) looping in training --- .../SupervisedLearning/MultiResolutionTSA.py | 28 ++++++ .../SupervisedLearning/ROMCollection.py | 96 +++++++++++-------- 2 files changed, 84 insertions(+), 40 deletions(-) diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index 36a305cbd8..aafb4ec8d0 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -66,6 +66,7 @@ def __init__(self): self.printTag = 'Multiresolution Synthetic History' self._globalROM = SyntheticHistory() self._decompParams = {} + self.decompositionAlgorithm = None def _handleInput(self, paramInput): """ @@ -77,6 +78,21 @@ def _handleInput(self, paramInput): self._globalROM._handleInput(paramInput) self._dynamicHandling = True # This ROM is able to manage the time-series on its own. + # check that there is a multiresolution algorithm + allAlgorithms = self._globalROM._tsaAlgorithms + allAlgorithms.extend(self._globalROM._tsaGlobalAlgorithms) + foundMRAalgorithm = False + for algo in allAlgorithms: + if algo.canTransform(): + if algo.isMultiResolutionAlgorithm(): + foundMRAalgorithm = True + self.decompositionAlgorithm = algo.name + break + if not foundMRAalgorithm: + msg = 'The MultiResolutionTSA ROM class requires a TSA algorithm capable of ' + msg += ' multiresolution time series analysis. None were found. Example: FilterBankDWT.' + self.raiseAnError(IOError, msg) + def _train(self, featureVals, targetVals): """ Perform training on input database stored in featureVals. @@ -86,6 +102,14 @@ def _train(self, featureVals, targetVals): """ self._globalROM.trainTSASequential(targetVals) + def _getTrainedParams(self): + + trainedParams = list(self._globalROM._tsaTrainedParams.items())[-1] + multiResolutionAlgoSettings = self._globalROM._tsaAlgoSettings[trainedParams[0]] + # TODO: this should be more generalizable once we add more algos + numLvls = multiResolutionAlgoSettings['levels'] - 1 + return trainedParams, numLvls + def __evaluateLocal__(self, featureVals): """ @ In, featureVals, float, a scalar feature value is passed as scaling factor @@ -94,6 +118,10 @@ def __evaluateLocal__(self, featureVals): rlz = self._globalROM.evaluateTSASequential() return rlz + + + + ### ESSENTIALLY UNUSED ### def _localNormalizeData(self,values,names,feat): """ diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index dfb5b94a5d..d2fe8edf05 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -1941,6 +1941,8 @@ def getInputSpecification(cls): addition to segmenting if set to \xmlString{cluster}. If set to \xmlString{segment}, then performs segmentation without clustering. If clustering, then an additional node needs to be included in the \xmlNode{Segment} node.""", default='decomposition') + segment.addSub(InputData.parameterInputFactory('macroParameter', contentType=InputTypes.StringType, + descr=r"""pivot parameter for macro steps (e.g. years)""")) sh = SyntheticHistory.getInputSpecification() for sub in sh.subs: segment.addSub(sub) @@ -1949,7 +1951,10 @@ def getInputSpecification(cls): def __init__(self): super().__init__() - self._macroTemplate = SyntheticHistory() + self._macroTemplate = SyntheticHistory() # empty SyntheticHistory object, deepcopy'd later to train multiple instances per decomposition level + self._macroParameter = None + self._macroSteps = {} # collection of macro steps (e.g. each year) + self._decompSteps = {} self.name = 'Decomposition' def setTemplateROM(self, romInfo): @@ -1962,6 +1967,9 @@ def setTemplateROM(self, romInfo): self._romName = romInfo.get('name', 'unnamed') if self._templateROM is None: self.raiseAnError(IOError, 'A rom instance is required by', self.name, 'please check your implementation') + # only allowing Decomposition ROMCollection to be used with MultiResolutionTSA ROM subtype + if self._templateROM.printTag != 'Multiresolution Synthetic History': + self.raiseAnError(IOError, 'The Decomposition ROMCollection segment class requires a ROM subtype of MultiResolutionTSA.') def _handleInput(self, paramInput): """ @@ -1973,21 +1981,12 @@ def _handleInput(self, paramInput): # notation: "pivotParameter" is for micro-steps (e.g. within-year, with a Clusters ROM representing each year) # "macroParameter" is for macro-steps (e.g. from year to year) inputSpecs = paramInput.findFirst('Segment') - self._macroSteps = {} # collection of macro steps (e.g. each year) - self._macroTemplate._handleInput(inputSpecs) # example "yearly" SVL engine collection + try: + self._macroParameter = inputSpecs.findFirst('macroParameter').value # pivot parameter for macro steps (e.g. years) + except: + self.raiseAnError(IOError, ' input spec is required for Decomposition class') - # check that there is a multiresolution algorithm (by this point, the `_templateROM` will have been populated) - allAlgorithms = self._templateROM._globalROM._tsaAlgorithms - allAlgorithms.extend(self._templateROM._globalROM._tsaGlobalAlgorithms) - foundMRAalgorithm = False - for algo in allAlgorithms: - if algo.canTransform(): - if algo.isMultiResolutionAlgorithm(): - foundMRAalgorithm = True - if not foundMRAalgorithm: - msg = 'The Decomposition ROMCollection segment class requires a TSA algorithm capable of ' - msg += ' multiresolution time series analysis. None were found.' - raise IOError(msg) + self._macroTemplate._handleInput(inputSpecs) # example "yearly" SVL engine collection ############### TRAINING #################### @@ -1995,38 +1994,55 @@ def train(self, tdict): """ Trains the SVL and its supporting SVLs etc. Overwrites base class behavior due to special clustering and macro-step needs. - @ In, trainDict, dict, dicitonary with training data + @ In, trainDict, dict, dictionary with training data @ Out, None """ - # run first set of MR TSA algorithms (should include some sort of MRA transformer) - self._templateROM.train(tdict) - - # Now we handle all the decomposition levels - # temporary... - mrTrainedParams = list(self._templateROM._globalROM._tsaTrainedParams.items())[-1] - assert mrTrainedParams[0].name == 'FilterBankDWT', "Only recognizing DWT as MR TSA algo for now" - + # create macro steps as needed + self._createMacroSteps(tdict) noPivotTargets = [x for x in self.target if x != self.pivotID] - numLvls = len(mrTrainedParams[1][noPivotTargets[0]]['results']['coeff_d']) - - # create new ROM for every level - for lvl in range(numLvls): - new = copy.deepcopy(self._macroTemplate) - self._macroSteps[lvl] = new - # NOW we train each level decomposition - for lvl, decomp in enumerate(self._macroSteps.values()): - # write training dict - decomp_tdict = copy.deepcopy(tdict) - for target in noPivotTargets: - decomp_tdict[target] = [mrTrainedParams[1][target]['results']['coeff_d'][lvl]] - # train global algos - _, newTrainingDict = decomp.getGlobalRomSegmentSettings(decomp_tdict, None) - # train - decomp.train(newTrainingDict) + # step through macroparameters (years) + for s, step in enumerate(self._macroSteps.values()): + self.raiseADebug('Training Statepoint Year {} ...'.format(s)) + trainingData = dict((var, [tdict[var][s]]) for var in tdict.keys()) + self.raiseADebug('... Training on Full Signal Year ...') + step.train(trainingData) + + trainedParams, numLvls = step._getTrainedParams() + self.raiseADebug('... Training Decomposition Levels ...') + + # create new ROM for every level + for lvl in range(numLvls): + new = copy.deepcopy(self._macroTemplate) + self._decompSteps[lvl] = new + + # NOW we train each level decomposition + for lvl, decomp in enumerate(self._decompSteps.values()): + # write training dict + decomp_tdict = copy.deepcopy(trainingData) + for target in noPivotTargets: + decomp_tdict[target] = [trainedParams[1][target]['results']['coeff_d'][lvl]] + # train global algos + _, newTrainingDict = decomp.getGlobalRomSegmentSettings(decomp_tdict, None) + # train + decomp.train(newTrainingDict) self.amITrained = True + def _createMacroSteps(self, tdict): + """ + """ + # tdict should have two parameters, the pivotParameter and the macroParameter -> one step per realization + if self._macroParameter not in tdict: + self.raiseAnError(IOError, f'The "{self._macroParameter}" was not found in the training DataObject! Training is not possible.') + + # create each progressive step + for macroID in tdict[self._macroParameter]: + macroID = macroID[0] + new = copy.deepcopy(self._templateROM) + self._macroSteps[macroID] = new + self._decompSteps[macroID] = {} + ############### EVALUATING #################### def evaluate(self, edict): """ From 7cbb35016d5899679f74de5fe4c8c4375c16a850 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Thu, 25 Jul 2024 09:15:40 -0600 Subject: [PATCH 05/23] formalizing getters for trained MRA params --- .../SupervisedLearning/MultiResolutionTSA.py | 19 ++++++---- .../SupervisedLearning/ROMCollection.py | 8 ++--- .../TSA/Transformers/FilterBankDWT.py | 36 +++++++++++++++++++ 3 files changed, 53 insertions(+), 10 deletions(-) diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index aafb4ec8d0..8ac697572d 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -102,13 +102,20 @@ def _train(self, featureVals, targetVals): """ self._globalROM.trainTSASequential(targetVals) - def _getTrainedParams(self): + def _getMRTrainedParams(self): - trainedParams = list(self._globalROM._tsaTrainedParams.items())[-1] - multiResolutionAlgoSettings = self._globalROM._tsaAlgoSettings[trainedParams[0]] - # TODO: this should be more generalizable once we add more algos - numLvls = multiResolutionAlgoSettings['levels'] - 1 - return trainedParams, numLvls + # get all trained parameters from final algorithm (should be multiresolution transformer) + trainedParams = list(self._globalROM._tsaTrainedParams.items()) + mrAlgo, mrTrainedParams = trainedParams[-1] + + # eh, maybe this should live in TSAUser in the future... + # extract settings used for that last algorithm (should have some sort of "levels") + numLevels = mrAlgo._getDecompositionLevels() + + # reformat the trained params + sortedTrainedParams = mrAlgo._sortTrainedParamsByLevels(mrTrainedParams) + + return numLevels, sortedTrainedParams def __evaluateLocal__(self, featureVals): """ diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index d2fe8edf05..cdecc3d5ab 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -2006,10 +2006,10 @@ def train(self, tdict): self.raiseADebug('Training Statepoint Year {} ...'.format(s)) trainingData = dict((var, [tdict[var][s]]) for var in tdict.keys()) - self.raiseADebug('... Training on Full Signal Year ...') + self.raiseADebug('... Training Global Signal per Year ...') step.train(trainingData) - trainedParams, numLvls = step._getTrainedParams() + numLvls, trainedParams = step._getMRTrainedParams() self.raiseADebug('... Training Decomposition Levels ...') # create new ROM for every level @@ -2022,10 +2022,10 @@ def train(self, tdict): # write training dict decomp_tdict = copy.deepcopy(trainingData) for target in noPivotTargets: - decomp_tdict[target] = [trainedParams[1][target]['results']['coeff_d'][lvl]] + decomp_tdict[target] = [trainedParams[target][lvl]] # train global algos _, newTrainingDict = decomp.getGlobalRomSegmentSettings(decomp_tdict, None) - # train + # train non-global algos decomp.train(newTrainingDict) self.amITrained = True diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index 8c4d4c957c..afd0f4fa08 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -42,6 +42,7 @@ def __init__(self, *args, **kwargs): """ # general infrastructure super().__init__(*args, **kwargs) + self._levels = 1 @classmethod def getInputSpecification(cls): @@ -105,6 +106,8 @@ def handleInput(self, spec): settings = super().handleInput(spec) settings['family'] = spec.findFirst('family').value settings['levels'] = spec.findFirst('levels').value + + self._levels = settings['levels'] - 1 return settings def fit(self, signal, pivot, targets, settings, trainedParams=None): @@ -209,3 +212,36 @@ def writeXML(self, writeTo, params): base = xmlUtils.newNode(target) writeTo.append(base) base.append(xmlUtils.newNode('order', text=info['order'])) + + + def _getDecompositionLevels(self): + """ + Removes trained signal from data and find residual + @ In, initial, np.array, original signal shaped [pivotValues, targets], targets MUST be in + same order as self.target + @ In, params, dict, training parameters as from self.characterize + @ In, pivot, np.array, time-like array values + @ In, settings, dict, additional settings specific to algorithm + @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] + """ + return self._levels + + def _sortTrainedParamsByLevels(self, params): + """ + Removes trained signal from data and find residual + @ In, initial, np.array, original signal shaped [pivotValues, targets], targets MUST be in + same order as self.target + @ In, params, dict, training parameters as from self.characterize + @ In, pivot, np.array, time-like array values + @ In, settings, dict, additional settings specific to algorithm + @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] + """ + # reformatting the results of the trained `params` to be: + # {target: {lvl: [ values, ... ], }, } + # this might look different per algorithm + sortedParams = {} + for target, contents in params.items(): + sortedParams[target] = {} + for lvl in range(self._levels): + sortedParams[target][lvl] = contents['results']['coeff_d'][lvl] + return sortedParams From 746a852ae50a3bac12d8e79302395373a9880699 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Mon, 29 Jul 2024 07:53:08 -0600 Subject: [PATCH 06/23] fixing evaluate for multiple macrosteps --- .../SupervisedLearning/MultiResolutionTSA.py | 8 ++ .../SupervisedLearning/ROMCollection.py | 136 +++++++----------- .../TSA/Transformers/FilterBankDWT.py | 17 +++ 3 files changed, 80 insertions(+), 81 deletions(-) diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index 8ac697572d..295fb0c7cc 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -117,6 +117,14 @@ def _getMRTrainedParams(self): return numLevels, sortedTrainedParams + def _updateMRTrainedParams(self, params): + + # get all trained parameters from final algorithm (should be multiresolution transformer) + trainedParams = list(self._globalROM._tsaTrainedParams.items()) + mrAlgo, mrTrainedParams = trainedParams[-1] + + mrAlgo._combineTrainedParamsByLevels(mrTrainedParams, params) + def __evaluateLocal__(self, featureVals): """ @ In, featureVals, float, a scalar feature value is passed as scaling factor diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index cdecc3d5ab..4b7ee80f0c 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -2002,27 +2002,27 @@ def train(self, tdict): noPivotTargets = [x for x in self.target if x != self.pivotID] # step through macroparameters (years) - for s, step in enumerate(self._macroSteps.values()): + for s, (macroID,step) in enumerate(self._macroSteps.items()): self.raiseADebug('Training Statepoint Year {} ...'.format(s)) trainingData = dict((var, [tdict[var][s]]) for var in tdict.keys()) - self.raiseADebug('... Training Global Signal per Year ...') + self.raiseADebug(f'... Training Global Signal per Year {macroID} ...') step.train(trainingData) numLvls, trainedParams = step._getMRTrainedParams() - self.raiseADebug('... Training Decomposition Levels ...') # create new ROM for every level for lvl in range(numLvls): new = copy.deepcopy(self._macroTemplate) - self._decompSteps[lvl] = new + self._decompSteps[macroID][lvl] = new # NOW we train each level decomposition - for lvl, decomp in enumerate(self._decompSteps.values()): + for lvl, decomp in enumerate(self._decompSteps[macroID].values()): # write training dict decomp_tdict = copy.deepcopy(trainingData) for target in noPivotTargets: decomp_tdict[target] = [trainedParams[target][lvl]] + self.raiseADebug(f'... Training Decomposition Level {lvl} ...') # train global algos _, newTrainingDict = decomp.getGlobalRomSegmentSettings(decomp_tdict, None) # train non-global algos @@ -2050,86 +2050,60 @@ def evaluate(self, edict): @ In, edict, dict, dictionary of evaluation parameters @ Out, result, dict, result of evaluation """ - # can we run SupervisedLearning.evaluate? Should this be an evaluateLocal? - ## set up the results dict with the correct dimensionality - ### actually, let's wait for the first sample to come in. - self.raiseADebug('Evaluating interpolated ROM ...') - results = None - - # mrTrainedParams = list(self._templateROM._globalROM._tsaTrainedParams.items())[-1] + self.raiseADebug('Evaluating decomposition ROM ...') noPivotTargets = [x for x in self.target if x != self.pivotID] - # numLvls, nPivot = mrTrainedParams[1][noPivotTargets[0]]['results']['coeff_d'].shape + # keys which include targets and other metadata + resultsKeys = [x for x in self.target] + resultsKeys.extend([self.pivotID,'_indexMap']) + results = {} # this is the dictionary that gets sent upstream to the rest of RAVEN/ROM stuff - # first find the DWT/MRA re-comp algo - mrAlgo = [key for key in self._templateROM._globalROM._tsaTrainedParams.keys() if key.name=='FilterBankDWT'] - assert len(mrAlgo)>0 + numMacro = len(self._macroSteps) - # this should be reference to trainedParams - mrTrainedParams = self._templateROM._globalROM._tsaTrainedParams[mrAlgo[0]] + # step through trained macroSteps (e.g., years) + macroIndexValues = [] + for m, (macroID, model) in enumerate(sorted(self._macroSteps.items(), key=lambda x: x[0])): + macroIndexValues.append(macroID) + decompModels = self._decompSteps[macroID] + decompResults = {x:{} for x in self.target if x != self.pivotID} + for d, (lvl, decompModel) in enumerate(decompModels.items()): + # evaluate algos for given decomposition level + subResult = decompModel.evaluate(edict) # TODO same input for all macro steps? True for ARMA at least... + # evaluate global algos for given decomposition level + decompResult = decompModel.finalizeGlobalRomSegmentEvaluation(None, subResult, weights=None, slicer=None) + + # singular decomposition level stored in larger decompResult*s* dict + for target, contents in decompResult.items(): + if target not in [self.pivotID,'_indexMap']: + decompResults[target][lvl] = contents + + # combine results and save to macroStep model trainedParams + model._updateMRTrainedParams(decompResults) + + # run first set of MR TSA algorithms (should include some sort of MRA transformer) + macroResults = model.evaluate(edict) + + # if first macro step, must set up dict correctly + if not results: + for k in resultsKeys: + if k == self.pivotID: + # storing pivot parameter array (assuming same for all macroSteps/years) + results[k] = macroResults[self.pivotID] + elif k == '_indexMap': + # an instance of _indexMap stored for each target + results[k] = {} + for target in self.target: + if target != self.pivotID: + results[k][target] = [self._macroParameter, self.pivotID] + elif k in noPivotTargets: + # this was taken from the Interpolated method, specifying dtype fixed an error as well... + results[k] = np.zeros([numMacro] + list((macroResults[noPivotTargets[0]].shape)), dtype=object) + + # storing results from a single macroStep (includes all decomp levels) + for target, contents in results.items(): + if target not in [self.pivotID, '_indexMap']: + contents = macroResults[target] - for m, (macroStep, model) in enumerate(sorted(self._macroSteps.items(), key=lambda x: x[0])): - # evaluate algos - subResult = model.evaluate(edict) # TODO same input for all macro steps? True for ARMA at least... - # evaluate global algos - result = model.finalizeGlobalRomSegmentEvaluation(None, subResult, weights=None, slicer=None) - for target in noPivotTargets: - mrTrainedParams[target]['results']['coeff_d'][m] = result[target] - - - # run first set of MR TSA algorithms (should include some sort of MRA transformer) - results = self._templateROM.evaluate(edict) - - # ## TODO set up right for ND?? - # forcedMax = self._maxCycles if self._maxCycles is not None else np.inf - # numMacro = min(len(self._macroSteps), forcedMax) - # macroIndexValues = [] - # for m, (macroStep, model) in enumerate(sorted(self._macroSteps.items(), key=lambda x: x[0])): - # if m + 1 > numMacro: - # break - # # m is an index of the macro step, in order of the macro values (e.g. in order of years) - # # macroStep is the actual macro step value (e.g. the year) - # # model is the ClusterROM instance for this macro step - # macroIndexValues.append(macroStep) - # self.raiseADebug(f' ... evaluating macro step "{macroStep}" ({m+1} / {numMacro})') - # subResult = model.evaluate(edict) # TODO same input for all macro steps? True for ARMA at least... - # indexMap = subResult.get('_indexMap', {}) - # # if not set up yet, then frame results structure - # if results is None: - # results = {} - # finalIndexMap = indexMap # in case every rlz doesn't use same order, which would be lame - # pivotID = model._templateROM.pivotParameterID - # indices = set([pivotID, self._macroParameter]) - # for indexes in finalIndexMap.values(): - # indices.update(set(indexes)) - # #pivotVals = subResult[pivotID] - # #numPivot = len(pivotVals) - # for target, values in subResult.items(): - # # if an index, just set the values now # FIXME assuming always the same! - # ## FIXME thing is, they're not always the same, we're clustering, so sometimes there's diff num days! - # ## TODO for now, we simply require using a classifier that always has the same number of entries. - # if target in [pivotID, '_indexMap'] or target in indices: - # results[target] = values - # else: - # # TODO there's a strange behavior here where we have nested numpy arrays instead of - # # proper matrices sometimes; maybe it has to be this way for unequal clusters - # # As a result, we use the object dtype, onto which we can place a whole numpy array. - # results[target] = np.zeros([numMacro] + list(values.shape), dtype=object) - # # END setting up results structure, if needed - # # FIXME reshape in case indexMap is not the same as finalIndexMap? - # for target, values in subResult.items(): - # if target in [pivotID, '_indexMap'] or target in indices:# indexMap: - # continue - # indexer = tuple([m] + [None]*len(values.shape)) - # try: - # results[target][indexer] = values - # except ValueError: - # self.raiseAnError(RuntimeError, 'The shape of the histories along the pivot parameter is not consistent! Try using a clustering classifier that always returns the same number of clusters.') - # results['_indexMap'] = {} #finalIndexMap - # for target, vals in results.items(): - # if target not in indices and target not in ['_indexMap']: # TODO get a list of meta vars? - # default = [] if vals.size == 1 else [pivotID] - # results['_indexMap'][target] = [self._macroParameter] + list(finalIndexMap.get(target, default)) - # results[self._macroParameter] = macroIndexValues + results[self._macroParameter] = macroIndexValues return results ############### DUMMY #################### diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index afd0f4fa08..8867fa59a9 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -245,3 +245,20 @@ def _sortTrainedParamsByLevels(self, params): for lvl in range(self._levels): sortedParams[target][lvl] = contents['results']['coeff_d'][lvl] return sortedParams + + def _combineTrainedParamsByLevels(self, params, newParams): + """ + Removes trained signal from data and find residual + @ In, initial, np.array, original signal shaped [pivotValues, targets], targets MUST be in + same order as self.target + @ In, params, dict, training parameters as from self.characterize + @ In, pivot, np.array, time-like array values + @ In, settings, dict, additional settings specific to algorithm + @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] + """ + # reformatting the results of the trained `params` to fit this algo's format: + # {target: {lvl: [ values, ... ], }, } + # this might look different per algorithm + for target, originalContents in params.items(): + for lvl, newContents in newParams[target].items(): + originalContents['results']['coeff_d'][lvl,:] = newContents From d2d12053bc411391912cae91289691a7e39a6183 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Mon, 29 Jul 2024 09:58:28 -0600 Subject: [PATCH 07/23] fixing levels error when requested exceeds max --- .../SupervisedLearning/MultiResolutionTSA.py | 11 +++++++++++ ravenframework/SupervisedLearning/ROMCollection.py | 10 ++++++++++ ravenframework/TSA/Transformers/FilterBankDWT.py | 12 ++++++------ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index 295fb0c7cc..74b161db59 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -125,6 +125,17 @@ def _updateMRTrainedParams(self, params): mrAlgo._combineTrainedParamsByLevels(mrTrainedParams, params) + + def writeXML(self, writeTo, targets=None, skip=None): + """ + Allows the SVE to put whatever it wants into an XML to print to file. + Overload in subclasses. + @ In, writeTo, xmlUtils.StaticXmlElement, entity to write to + @ In, targets, list, optional, unused (kept for compatability) + @ In, skip, list, optional, unused (kept for compatability) + @ Out, None + """ + def __evaluateLocal__(self, featureVals): """ @ In, featureVals, float, a scalar feature value is passed as scaling factor diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index 4b7ee80f0c..884e60ec6b 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -2106,6 +2106,16 @@ def evaluate(self, edict): results[self._macroParameter] = macroIndexValues return results + def writeXML(self, writeTo, targets=None, skip=None): + """ + Write out ARMA information + @ In, writeTo, xmlUtils.StaticXmlElement, entity to write to + @ In, targets, list, optional, unused + @ In, skip, list, optional, unused + @ Out, None + """ + + ############### DUMMY #################### # dummy methods that are required by SVL and not generally used def __confidenceLocal__(self, featureVals): diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index 8867fa59a9..5590a1a5e5 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -133,14 +133,14 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): ## time-dependent series is independent, uniquely indexed and ## sorted in time. family = settings['family'] - levels = settings.get('levels', 1) params = {target: {'results': {}} for target in targets} # determine maximum decomposition level max_level = pywt.dwt_max_level(len(pivot), family) - if levels>max_level: + if self._levels>max_level: print(f"Number of levels requested is larger than maximum DWT decomposition level, switching to maximum allowed: {max_level}") - levels = max_level + self._levels = max_level - 1 + settings['levels'] = self._levels for i, target in enumerate(targets): history = signal[:, i] @@ -149,12 +149,12 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): # TODO:this is temporary for zero-filter SOLAR data... should this also look back to find filter results? results = params[target]['results'] - coeffs = pywt.mra(history, family, levels, transform='dwt' ) + coeffs = pywt.mra(history, family, self._levels, transform='dwt' ) for coeff in coeffs: coeff[mask] = np.nan results['coeff_a'] = coeffs[0] - results['coeff_d'] = np.vstack([coeffs[i] for i in range(1,levels)]) if levels>1 else coeffs[1][np.newaxis] + results['coeff_d'] = np.vstack([coeffs[i] for i in range(1,self._levels+1)]) if self._levels>1 else coeffs[1][np.newaxis] return params @@ -243,7 +243,7 @@ def _sortTrainedParamsByLevels(self, params): for target, contents in params.items(): sortedParams[target] = {} for lvl in range(self._levels): - sortedParams[target][lvl] = contents['results']['coeff_d'][lvl] + sortedParams[target][lvl] = contents['results']['coeff_d'][lvl,:] return sortedParams def _combineTrainedParamsByLevels(self, params, newParams): From 0c0973de126e2c7ce12f639466fecb2533de800f Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Mon, 29 Jul 2024 10:00:31 -0600 Subject: [PATCH 08/23] multiresolution tests --- .../TrainingData/generateMultiYear.py | 75 + .../TrainingData/generateSimple.py | 66 + .../TrainingData/generators.py | 86 + .../TrainingData/multiYear.csv | 3 + .../TrainingData/multiYear_A.csv | 1001 +++++ .../TrainingData/multiYear_B.csv | 1001 +++++ .../TrainingData/simpleMR.csv | 2 + .../TrainingData/simpleMR_A.csv | 101 + .../gold/MultiYear/romMeta.xml | 10 + .../gold/MultiYear/samples.csv | 4001 +++++++++++++++++ .../gold/SimpleMR/romMeta.xml | 10 + .../gold/SimpleMR/samples.csv | 201 + .../MultiResolutionTSA/multiYearDWT.xml | 107 + .../MultiResolutionTSA/simpleDWT.xml | 107 + .../ROM/TimeSeries/MultiResolutionTSA/tests | 35 + 15 files changed, 6806 insertions(+) create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateMultiYear.py create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateSimple.py create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generators.py create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear.csv create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_A.csv create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_B.csv create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR.csv create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR_A.csv create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/romMeta.xml create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/samples.csv create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/romMeta.xml create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/samples.csv create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml create mode 100644 tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateMultiYear.py b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateMultiYear.py new file mode 100644 index 0000000000..858e537fe5 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateMultiYear.py @@ -0,0 +1,75 @@ +# 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. +""" + Generates training data in the form of Fourier signals. +""" +import numpy as np +import pandas as pd +from generators import fourier, arma + +plot = False + +pivot = np.arange(1000) + + +# macroStep 0 +amps = [16, 8, 10, 12] +periods = [75, 125, 250, 500] +phases = [0, np.pi/4, np.pi/2, np.pi] +intercept = 42 +f0 = fourier(amps, periods, phases, pivot, mean=intercept) + +slags = [0.4, 0.2] +nlags = [0.3, 0.2, 0.1] +a0, _ = arma(slags, nlags, pivot, plot=False) + +s0 = f0 + a0 + +# macroStep 1 +amps = [4, 21, 7, 35] +periods = [75, 125, 250, 500] +phases = [0, np.pi/4, np.pi/2, np.pi] +intercept = 42 +f1 = fourier(amps, periods, phases, pivot, mean=intercept) + +slags = [0.4, 0.2] +nlags = [0.3, 0.2, 0.1] +a1, _ = arma(slags, nlags, pivot, plot=False) + +s1 = f1 + a1 + +if plot: + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + ax.plot(pivot, s0, '.-', label='0') + ax.plot(pivot, s1, '.-', label='1') + ax.legend() + plt.show() + + +# Write signals to file using pandas DataFrames +df0 = pd.DataFrame({'seconds': pivot, 'signal0': s0}) +df0.to_csv('multiYear_A.csv', index=False) + +# Write signals to file using pandas DataFrames +df1 = pd.DataFrame({'seconds': pivot, 'signal0': s1}) +df1.to_csv('multiYear_B.csv', index=False) + +# Create pointer CSV file +pointer = pd.DataFrame({ + 'scaling': [1, 1], + 'macro': [1, 2], # interpolation still needed... ? + 'filename': ['multiYear_A.csv', 'multiYear_B.csv'] +}) +pointer.to_csv('multiYear.csv', index=False) diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateSimple.py b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateSimple.py new file mode 100644 index 0000000000..938bd9a252 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateSimple.py @@ -0,0 +1,66 @@ +# 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. +""" + Generates training data in the form of Fourier signals. +""" +import numpy as np +import pandas as pd +from generators import fourier, arma, toFile + +plot = True + +pivot = np.arange(100) + +amps = [8, 10, 12] +periods = [12.5, 25, 50] +phases = [0, np.pi/4, np.pi] +intercept = 42 +f = fourier(amps, periods, phases, pivot, mean=intercept) + +slags = [0.4, 0.2] +nlags = [0.3, 0.2, 0.1] +a0, _ = arma(slags, nlags, pivot, plot=False) +slags = [0.5, 0.3] +nlags = [0.1, 0.05, 0.01] +a1, _ = arma(slags, nlags, pivot, plot=False) + +s0 = f + a0 +s1 = f + a1 + +if plot: + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + ax.plot(pivot, s0, '.-', label='0') + ax.plot(pivot, s1, '.-', label='1') + ax.legend() + plt.show() + + +out = np.zeros((len(pivot), 3)) +out[:, 0] = pivot +out[:, 1] = s0 +out[:, 2] = s1 +# toFile(out, 'simpleMR') + +# Write signals to file using pandas DataFrames +df = pd.DataFrame({'pivot': out[:, 0], 'signal0': out[:, 1], 'signal1': out[:, 2]}) +df.to_csv('simpleMR_A.csv', index=False) + +# Create pointer CSV file +pointer = pd.DataFrame({ + 'scaling': [1], + 'macro': [1], + 'filename': ['simpleMR_A.csv'] +}) +pointer.to_csv('simpleMR.csv', index=False) diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generators.py b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generators.py new file mode 100644 index 0000000000..dc475dac39 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generators.py @@ -0,0 +1,86 @@ +# 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. +""" + Generates signals using predefined algorithms +""" +import numpy as np + +def fourier(amps, periods, phases, pivot, mean=0): + """ + Generates a signal using Fourier properties. + @ In, amps, np.array, amplitudes of waves + @ In, periods, np.array, periods to use + @ In, phases, np.array, phase offsets to use + @ In, pivot, np.array, time-like parameter + @ In, mean, float, offset value + @ Out, signal, np.array, generated signal + """ + signal = np.zeros(len(pivot)) + mean + for k, period in enumerate(periods): + signal += amps[k] * np.sin(2 * np.pi / period * pivot + phases[k]) + return signal + +def arma(slags, nlags, pivot, noise=None, intercept=0, plot=False): + """ + Generates a signal using ARMA properties. + @ In, slags, list, signal lag coefficients (aka AR coeffs, phi) + @ In, nlags, list, noise lag coefficients (aka MA coeffs, theta) + @ In, pivot, np.array, time-like array + @ In, noise, np.array, optional, instead of sampling random noise will use this if provided + @ In, intercept, float, optional, nominal level of signal + @ In, plot, bool, optional, if True then produce a plot of generated signal + @ Out, signal, np.array, generated signal + @ Out, noise, np.array, noise signal used in generation (provided or sampled) + """ + if plot: + import matplotlib.pyplot as plt + fig, ax = plt.subplots() + signal = np.zeros(len(pivot)) + intercept + if noise is None: + noise = np.random.normal(loc=0, scale=1, size=len(pivot)) + signal += noise + # moving average: random noise lag + for q, theta in enumerate(nlags): + signal[q+1:] += theta * noise[:-(q+1)] + # autoregressive: signal lag + for t, time in enumerate(pivot): + for p, phi in enumerate(slags): + if t > p: + signal[t] += phi * signal[t - p - 1] + if plot: + ax.plot(pivot, noise, 'k:') + ax.plot(pivot, signal, 'g.-') + plt.show() + return signal, noise + +def toFile(signal, baseName, targets=None, pivotName=None): + """ + writes signals to RAVEN CSV files + @ In, signal, np.ndarray, signals shaped (time, targets+1) with pivot as first target + @ In, baseName, str, base filename + @ In, targets, list(str), optional, target names + @ In, pivotName, str, optional, pivot parameter (time-like) name + @ Ou, None + """ + if len(signal.shape) < 2: + signal.shape = (signal.size, 1) + if targets is None: + targets = [f'signal{i}' for i in range(signal.shape[1] - 1)] + if pivotName is None: + pivotName = 'pivot' + subname = f'{baseName}_0.csv' + np.savetxt(subname, signal, delimiter=',', header=','.join([pivotName] + targets), comments='') + with open(f'{baseName}.csv', 'w') as f: + f.writelines('scaling,filename\n') + f.writelines(f'1,{subname}\n') diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear.csv new file mode 100644 index 0000000000..aab5ace095 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear.csv @@ -0,0 +1,3 @@ +scaling,macro,filename +1,1,multiYear_A.csv +1,2,multiYear_B.csv diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_A.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_A.csv new file mode 100644 index 0000000000..dc2539e57d --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_A.csv @@ -0,0 +1,1001 @@ +seconds,signal0 +0,57.81899776669288 +1,59.13990758389636 +2,61.27831359357931 +3,62.13380462685008 +4,62.640258129340666 +5,63.76028166343178 +6,66.8946372551312 +7,68.81090836747354 +8,68.01734550887221 +9,69.47041262564355 +10,70.39793575520811 +11,71.81851739436533 +12,71.32479466800038 +13,71.72207708548926 +14,70.86568059747357 +15,72.20307303395404 +16,72.20598410620468 +17,72.4224681156842 +18,73.19680646760851 +19,73.47400972134395 +20,72.27208403723579 +21,70.71314793148954 +22,71.37711356252737 +23,72.48137631311945 +24,72.5059562706679 +25,69.70397358946784 +26,68.57279632675208 +27,67.32539724455428 +28,66.00381366445738 +29,63.534196185323424 +30,61.8578300760367 +31,59.6099975342195 +32,58.404095498876856 +33,55.528894913441746 +34,53.33525527406068 +35,53.12983876705282 +36,49.23115915145355 +37,47.68288968413333 +38,44.9475132836835 +39,43.21758915557816 +40,42.768738043419056 +41,39.34465509403313 +42,37.820931312200564 +43,34.14888589439058 +44,33.639937268804196 +45,31.598837493434484 +46,30.431104290548674 +47,29.17913238285689 +48,28.050208662753548 +49,27.668825389763025 +50,25.622680668333455 +51,23.171313423568915 +52,21.43188823039244 +53,17.69351864280113 +54,18.645517362167787 +55,18.702870294681173 +56,16.427611050403392 +57,16.252750980863322 +58,14.363263255500298 +59,12.926982185889063 +60,12.366002712035963 +61,11.511610821105853 +62,10.98846816651676 +63,11.683627167691073 +64,12.112536368284424 +65,12.827817114872456 +66,13.325615390719955 +67,13.022599386876237 +68,13.894741773730809 +69,15.144287249653456 +70,17.4157645006972 +71,19.20209498689093 +72,17.610102965105384 +73,19.61662481027057 +74,20.276189267996205 +75,20.5970088555505 +76,22.84312553333938 +77,23.679542310411513 +78,23.464387156984454 +79,25.185486862944927 +80,26.157730066560358 +81,26.669135423412705 +82,26.0163476494054 +83,27.478871727702426 +84,28.93383309902923 +85,29.32128198818592 +86,29.42561535862524 +87,29.11799560385353 +88,29.649162222741694 +89,29.744417545380948 +90,29.968595568020415 +91,30.144391966952984 +92,32.441909217660886 +93,32.54498089666956 +94,34.43459890360567 +95,34.314940703623456 +96,32.20664304462714 +97,33.863272587806335 +98,33.271654998675984 +99,34.15649543048618 +100,33.57007001229996 +101,34.47745171188709 +102,33.45287340792191 +103,31.83818357681687 +104,32.34143088771855 +105,30.12148248837382 +106,28.821412295428107 +107,28.63252297099721 +108,28.778012805258555 +109,27.08139771710192 +110,26.190285078005633 +111,24.338979446565418 +112,22.677117916210996 +113,21.318863328514297 +114,20.722757838932424 +115,19.403496932304833 +116,18.471045946693604 +117,16.688224893939818 +118,15.741028912021305 +119,15.938735536783586 +120,16.627885763072733 +121,14.865456596245354 +122,14.692973966876902 +123,13.355188702640175 +124,14.334857900826009 +125,13.285221816189791 +126,12.811043438704713 +127,10.48431939401527 +128,11.096659826931981 +129,11.487694493118532 +130,10.735201402942335 +131,12.647669301698041 +132,11.738686612112062 +133,13.157476861050426 +134,14.869848464111687 +135,14.861375524411102 +136,15.117186076091052 +137,15.518635385674555 +138,14.881968073200866 +139,17.289987413776128 +140,16.99452602847992 +141,20.798275493993554 +142,23.95394731623487 +143,24.588561394579067 +144,25.03315565692344 +145,25.850964712886874 +146,26.05541297985865 +147,26.202621925647705 +148,27.76278845970168 +149,29.05281900030888 +150,31.88282582965413 +151,32.42351787756815 +152,32.38841924742587 +153,33.31794425122471 +154,33.78094336533864 +155,35.07336318130308 +156,36.88594878085203 +157,37.507256750977994 +158,39.74133143546888 +159,40.20274033741006 +160,40.02659839675519 +161,41.05879953266343 +162,39.61296461541578 +163,42.96267622201327 +164,42.03122655977471 +165,43.75003150320887 +166,43.65879089719783 +167,42.31358227766298 +168,42.67714900339352 +169,42.06064677124381 +170,42.85869050779864 +171,43.383775893996486 +172,42.46608698140631 +173,41.892256134658325 +174,43.84414734655787 +175,43.20835183214585 +176,41.596342998229304 +177,40.0642243598548 +178,40.01149830883789 +179,38.70631094861925 +180,37.88865220226474 +181,35.88745270844263 +182,34.692534532268866 +183,34.93207936185532 +184,33.42488323364679 +185,32.31429315591642 +186,30.5133871032071 +187,29.51962762048128 +188,27.594435505159254 +189,25.580184627871322 +190,24.79455361545425 +191,23.338653283864733 +192,23.33156985096987 +193,22.6034715710189 +194,21.11158622053679 +195,18.68942605888965 +196,17.134122775585716 +197,15.685636954720778 +198,15.90791934559375 +199,13.423044528043576 +200,14.092467609207194 +201,15.554208946269062 +202,16.29219652304149 +203,18.642697586616006 +204,19.046166099513574 +205,18.783706164232868 +206,18.784206223267834 +207,19.294236945608525 +208,19.273553959654965 +209,20.319743744320586 +210,19.808283270305317 +211,21.08283259522436 +212,20.256441279814602 +213,23.3928700126851 +214,23.31805594043369 +215,24.074640149907296 +216,25.48099226132587 +217,24.76809924291321 +218,30.308890736219233 +219,33.197850714113244 +220,34.95144098708333 +221,36.614420917492936 +222,37.79950591920877 +223,40.17615360813576 +224,42.25010477448099 +225,42.31143242312828 +226,45.39451934728234 +227,48.071326394817966 +228,51.43638108985376 +229,52.58447595539907 +230,55.64180002872166 +231,56.13491682198741 +232,56.69938860408802 +233,58.164293968838464 +234,60.13142292498625 +235,61.299584530022 +236,63.27668942867603 +237,65.85168319053756 +238,66.75423981418966 +239,67.12007205519984 +240,67.08831111786343 +241,64.90333853783069 +242,67.73786112767888 +243,67.03231661293063 +244,69.67724704682712 +245,69.29711893764318 +246,69.19766022492647 +247,70.98745024529707 +248,70.47668637136013 +249,71.55803110538127 +250,71.29513977661081 +251,70.91371323351129 +252,71.85435654589173 +253,72.90853966236634 +254,72.5796983940203 +255,70.45286529526261 +256,69.74777492047623 +257,67.51171420317927 +258,66.88430931027845 +259,65.63437648982045 +260,64.47893220843095 +261,61.99194730648263 +262,58.416129983158974 +263,57.33453626773019 +264,56.98949719748788 +265,56.89535618686111 +266,54.306021015393526 +267,53.93029058037181 +268,52.738251655751995 +269,51.7638747270557 +270,50.29680283879507 +271,50.64501970796996 +272,48.568756588657756 +273,48.697731849053675 +274,47.834884866223504 +275,45.792655044799275 +276,46.847711391252076 +277,46.267988533071566 +278,45.23526723107164 +279,44.316972815615124 +280,42.50909075773537 +281,41.6395032065956 +282,41.05523067825858 +283,43.06648007909329 +284,42.78630831227847 +285,42.02903454966055 +286,42.890352859562064 +287,43.16990251210732 +288,43.59179644888835 +289,44.50776837762726 +290,44.83873851970673 +291,44.24332163915227 +292,46.39520490635757 +293,46.62440916573112 +294,47.41907129381223 +295,47.83065971281858 +296,47.8175869973083 +297,48.990317289634795 +298,50.15718890814669 +299,49.66760069572238 +300,51.94824096732222 +301,51.5453030433555 +302,52.715195097874116 +303,52.52017495170115 +304,54.7678309026126 +305,56.302758601610435 +306,54.218376422808916 +307,54.582610186972786 +308,54.54896397153316 +309,57.22462396433014 +310,56.29894868848543 +311,55.40320459109372 +312,54.86235301038476 +313,54.632838953499224 +314,56.10847204994236 +315,56.53389815779131 +316,59.143807174503124 +317,58.125588511234604 +318,57.479423282251446 +319,58.0698570909914 +320,56.25700544099858 +321,55.53404375237373 +322,54.93963558117109 +323,53.218025257347186 +324,53.508393821940345 +325,52.39298902815885 +326,53.47432504861781 +327,51.63311603635163 +328,51.8069011853541 +329,49.741755534739376 +330,49.22679364802262 +331,46.08839117612907 +332,45.25118416207586 +333,45.12306769866725 +334,43.49517268080141 +335,43.80115845055162 +336,43.05602151332928 +337,43.42034815540054 +338,39.98484621770071 +339,37.357858888407314 +340,36.72508845083014 +341,35.06000314857533 +342,33.776844931085705 +343,32.06104891155521 +344,30.113741004228572 +345,30.273959789077125 +346,29.620080467378756 +347,29.439258137393033 +348,30.669317699586593 +349,28.783410894113295 +350,28.007475706347236 +351,27.653830673475916 +352,25.710104631902333 +353,26.43799785749069 +354,26.466117946134936 +355,26.01045680751805 +356,27.052423302992317 +357,27.571606178680423 +358,26.617568928691924 +359,27.3252344135665 +360,28.754825062674605 +361,30.50146741721465 +362,31.94300429788376 +363,31.731610636485854 +364,33.649239287834526 +365,34.2945136018227 +366,35.58434666584799 +367,36.648332316321856 +368,37.29944340562893 +369,38.74374095305159 +370,40.27417418339603 +371,42.04665328544369 +372,43.04487886396414 +373,45.41276955212273 +374,46.16262704615082 +375,48.70441474544936 +376,49.133057883801534 +377,50.968389661245915 +378,51.61062165804356 +379,55.05366413442295 +380,57.281827256912486 +381,60.87954407596834 +382,62.29913239341898 +383,65.3656379298127 +384,63.745138015907436 +385,64.95297019932016 +386,64.14023547818454 +387,64.28475388424293 +388,64.14844952346398 +389,65.81172902075248 +390,68.1958256417212 +391,68.70142653440391 +392,66.21620633059027 +393,69.09911372209712 +394,68.21619051754534 +395,68.92609274689023 +396,68.3335905350062 +397,69.17262323783042 +398,67.23738767727222 +399,67.55682393477551 +400,65.80806169992083 +401,63.808953179123314 +402,64.08395793971609 +403,64.04321998088932 +404,62.70898253198974 +405,60.437722688865215 +406,60.333697782949855 +407,58.286651154255885 +408,55.97115982678614 +409,54.705889319359514 +410,52.80499136948846 +411,51.971031750071106 +412,51.20471054666633 +413,49.74307866943322 +414,47.014122749670385 +415,45.388047629857695 +416,42.709400860627746 +417,42.279409583355005 +418,39.68050939817783 +419,39.80007120309844 +420,38.57026808267072 +421,36.46834131157299 +422,35.909469635270156 +423,35.89500310081805 +424,34.443338788379805 +425,32.32111612826737 +426,33.66090958413107 +427,31.809554197336563 +428,31.340711463559575 +429,31.075545066870877 +430,30.993652503764917 +431,30.35379199269262 +432,29.409854497439344 +433,30.998313789479564 +434,29.701554241882928 +435,31.740115666009412 +436,32.81728519616976 +437,34.31066722551337 +438,35.492390922324624 +439,34.921972937430795 +440,36.592992738266254 +441,37.42745920646574 +442,36.69262380773162 +443,36.99412852419904 +444,37.42678226916263 +445,36.876914725148296 +446,38.53766847481675 +447,39.49450371612671 +448,40.19160400798029 +449,41.541457552178905 +450,42.68307601120251 +451,43.46618120148691 +452,46.00961021638302 +453,48.912439052522416 +454,50.65455715496705 +455,51.01676000459167 +456,51.683789593126306 +457,51.30550570072657 +458,52.590694928127206 +459,52.14973299219796 +460,53.52770766103008 +461,56.166074105980044 +462,59.68153009344208 +463,59.058304834966066 +464,61.36101165294339 +465,63.453244502058276 +466,62.61891208549237 +467,63.99119133162163 +468,63.0915141613539 +469,61.8605959361305 +470,62.51292714841349 +471,62.259302126134976 +472,62.589892310153594 +473,61.49073096621252 +474,62.02077831234671 +475,63.10234749028279 +476,62.57199307049899 +477,63.27428185532724 +478,62.883637945131596 +479,63.13759058375403 +480,62.286505848679745 +481,63.092451975757314 +482,61.87920718690047 +483,60.8192402638415 +484,58.96289747072048 +485,56.98998245180455 +486,54.85465406771198 +487,54.16426305650128 +488,52.98108811207225 +489,51.489908940612324 +490,52.23491458340672 +491,52.33826126269341 +492,49.95714973557811 +493,49.688331610796595 +494,47.75322251431553 +495,47.424995840514704 +496,46.851274924425255 +497,46.95337392596784 +498,45.096223488939394 +499,43.76391985967452 +500,43.122889592836195 +501,42.41862263969669 +502,41.83018220558818 +503,41.10792407842204 +504,39.78261669196542 +505,40.70806648619596 +506,39.42826891670669 +507,39.468130173947884 +508,41.8213352924532 +509,41.85398312752822 +510,43.772637842573424 +511,44.24897012572015 +512,44.905637743875225 +513,44.63047265120654 +514,46.25619340889789 +515,45.83880668863099 +516,46.16232385070821 +517,45.65249217157978 +518,45.966139677700696 +519,47.00793785252999 +520,45.51597283329695 +521,47.79456243073306 +522,49.33669315373317 +523,50.53030906992622 +524,49.64786731987338 +525,51.079076354454905 +526,52.12996667575539 +527,53.568872121720986 +528,54.706526484317095 +529,54.31575807167726 +530,56.09801847446807 +531,54.34154739093603 +532,55.73456937874065 +533,58.586054741900604 +534,57.418903073273114 +535,59.16498971658114 +536,58.453927812545295 +537,59.389679214230284 +538,60.74639495615966 +539,59.12954851291943 +540,60.11669853621553 +541,59.37569940514202 +542,60.665622538949656 +543,59.83886398622178 +544,58.232960837079744 +545,56.79428736667438 +546,55.58333941328196 +547,54.055901505208645 +548,51.98480830598506 +549,50.34393515612207 +550,48.65638802583765 +551,48.699983741193826 +552,47.850327940528466 +553,47.28261466677164 +554,45.6881750054749 +555,45.04652816113773 +556,42.484724549396155 +557,39.51338783406814 +558,37.489249482259304 +559,34.93295898510795 +560,31.68493859478566 +561,29.52117843278455 +562,28.998667741479544 +563,26.24327186640796 +564,25.182908723557976 +565,23.83167285503729 +566,22.48486204804622 +567,19.390535477439954 +568,16.605371385741737 +569,16.064706996297655 +570,13.21685481330651 +571,12.221969751551102 +572,9.24655099324482 +573,7.882054776482628 +574,6.279243004932493 +575,4.307849095541425 +576,4.069700064433425 +577,3.899687055339704 +578,2.8789553932348912 +579,2.8036297843311235 +580,1.3714683264173821 +581,2.1515459066204574 +582,1.2090468373414283 +583,2.1794851377566276 +584,3.0199224935750695 +585,3.343563660762519 +586,3.2831209190949773 +587,4.66095684712494 +588,7.252327336196796 +589,6.654604577268779 +590,8.159991214328684 +591,9.1842735198759 +592,10.204372808748124 +593,12.782844290990663 +594,13.56389017370449 +595,14.01415082339864 +596,14.247703108736378 +597,14.114366857585834 +598,14.718541778433599 +599,16.600493557796856 +600,18.214184062247725 +601,21.200472403208128 +602,23.03513304281695 +603,24.19296657021578 +604,25.3799672124941 +605,28.244023737987256 +606,28.154530361042024 +607,28.247950389034205 +608,29.021131595720558 +609,29.824565666321917 +610,32.10829162664269 +611,33.41007710695252 +612,34.32545893645042 +613,35.2645861318572 +614,34.48260199732039 +615,36.262860154585695 +616,36.25339449087767 +617,37.22740008834101 +618,39.601345677566684 +619,39.38952682247026 +620,40.00197640296666 +621,39.78249985539615 +622,37.73009219591359 +623,37.651743072578476 +624,37.83488087855166 +625,38.55219165551753 +626,40.19382549451572 +627,39.855383750697975 +628,40.130515740615145 +629,37.98547041101619 +630,36.288890895561636 +631,34.89465871148005 +632,33.792499775418605 +633,33.01282905824574 +634,33.35981381135301 +635,31.713173564584334 +636,30.974466326943013 +637,30.461827827999166 +638,29.17381728653146 +639,26.76858334723667 +640,26.331757411154722 +641,25.327794285483193 +642,23.34033392698619 +643,23.688793456135055 +644,22.99174223749898 +645,21.579447820974895 +646,19.936927464053603 +647,17.749033365071217 +648,16.29372411238947 +649,13.994875796785765 +650,15.34365369643536 +651,14.32668465776785 +652,13.472136993229602 +653,13.83787431570741 +654,12.939022330155913 +655,10.492845395908319 +656,11.44372020761232 +657,12.424248467210056 +658,11.53353791446461 +659,11.66005097926149 +660,13.650450594224857 +661,13.07060763970327 +662,13.874941162216743 +663,15.216277197085857 +664,14.89780918131565 +665,16.75802740617964 +666,17.9556641377883 +667,17.970510370048515 +668,20.43899891061569 +669,20.738769443893332 +670,22.321462246715637 +671,22.285962222220075 +672,24.178527476460324 +673,25.22875306460776 +674,26.073319873364177 +675,28.156178565889732 +676,29.793974714035546 +677,30.898990418353904 +678,32.38808397983571 +679,35.28013537234593 +680,35.40242364183428 +681,38.34002627930111 +682,38.594504855856556 +683,40.303709147091624 +684,40.768419821151 +685,42.027994466570355 +686,42.16751880513993 +687,42.30563271984188 +688,42.206399935118924 +689,43.11904629429545 +690,44.908787553058836 +691,47.39239802705282 +692,46.791568880846086 +693,46.68260457020066 +694,47.60618883588457 +695,46.83001951431744 +696,46.88726738161585 +697,47.0796255964297 +698,47.72807799022464 +699,46.6335689022264 +700,44.887078242378934 +701,45.45051095792362 +702,44.75502771005168 +703,43.48348318763176 +704,41.83226728115632 +705,41.24929256245298 +706,40.145209554894734 +707,42.28221933161746 +708,41.46681601470775 +709,40.58831326474953 +710,40.20867317934636 +711,40.08451293463759 +712,38.91706180552319 +713,37.31977709864575 +714,36.50747384045358 +715,36.5197118451318 +716,34.81735490523334 +717,34.00632929132284 +718,33.74471506758785 +719,31.630256089043993 +720,28.615786416071174 +721,28.227338272422067 +722,27.52609780807154 +723,27.528305266109136 +724,26.343722790291636 +725,26.791835801050986 +726,27.299334482043054 +727,27.25241685775534 +728,27.57816207282525 +729,28.025434362039583 +730,30.05445374197473 +731,30.538309862659325 +732,31.773894883990657 +733,31.753183625012756 +734,34.124374359062735 +735,35.703312457142175 +736,36.05566956870303 +737,36.84057519579369 +738,38.27150081342709 +739,39.120194840864755 +740,42.6847029765618 +741,42.72459835057222 +742,44.36087017095057 +743,47.166210540436566 +744,47.929552951782924 +745,50.311531850875085 +746,51.380741110080976 +747,51.970302855061256 +748,54.48500595233055 +749,56.03459222599023 +750,59.2914405981453 +751,61.2191292827911 +752,61.18267693876045 +753,63.297201313270826 +754,65.09387355669195 +755,66.58241530487531 +756,67.29395391220916 +757,68.27331795289098 +758,69.09785694053154 +759,68.86827083083648 +760,72.5341399211318 +761,73.59042155276019 +762,75.3242236384344 +763,76.70052833496554 +764,76.9784617328335 +765,77.69914533226499 +766,77.28459984172595 +767,78.13568508340374 +768,77.25403113353057 +769,78.58790050033966 +770,77.86389289992125 +771,77.551552790928 +772,78.89041624537074 +773,77.368014861428 +774,75.95247099078826 +775,75.02400176173603 +776,75.15442679677227 +777,72.19032084009994 +778,71.94558026448493 +779,69.80004026581669 +780,68.62845343111279 +781,68.40655565325788 +782,67.14849595843101 +783,64.78768638088243 +784,63.72505487088347 +785,61.29576275501938 +786,59.44651964093186 +787,57.193382124826336 +788,55.74849241517516 +789,53.40644696024331 +790,49.93070096324293 +791,48.58266872424532 +792,46.394214771086205 +793,45.09492939901422 +794,43.48186471596553 +795,42.24836125897698 +796,42.58380816472533 +797,40.7457571880749 +798,38.93811025636843 +799,36.794369633330234 +800,37.174273269625274 +801,36.278598459016614 +802,35.33356777670722 +803,33.919340196307395 +804,33.50642767786712 +805,31.799683104684892 +806,31.294421537371694 +807,31.322956156682697 +808,32.583665197108225 +809,31.82931516180921 +810,32.54837234951759 +811,30.658473154923836 +812,31.68512290532521 +813,30.90999874668413 +814,30.518689439262424 +815,28.17306021630333 +816,28.89671807571428 +817,29.73836117712768 +818,32.20554207920942 +819,33.64698633675972 +820,34.09417690904721 +821,35.126652695630014 +822,36.26279086097436 +823,37.17196564579941 +824,37.525203564356566 +825,41.88084177042826 +826,41.76662761797989 +827,45.352838528481136 +828,44.98779834081521 +829,46.66378785944776 +830,47.33283471933215 +831,47.67701303919941 +832,46.804495035763395 +833,49.370457155896005 +834,52.72446435024526 +835,53.15192618511944 +836,54.7104118251901 +837,56.46763008655412 +838,56.79166026391765 +839,55.82729374550957 +840,56.84548152343348 +841,55.754890970993 +842,57.454864921789635 +843,56.48361306614549 +844,56.5674994748103 +845,55.31042612109549 +846,56.317518878925554 +847,55.807762343632824 +848,54.0126029738587 +849,56.21879166848082 +850,56.0615404793604 +851,55.060984624924174 +852,54.61542555392522 +853,53.80667282561726 +854,51.621225745384336 +855,51.762500493432334 +856,51.393282782615294 +857,50.384346930117076 +858,48.93945295849444 +859,49.27954776698433 +860,49.00948051803576 +861,47.69739043434873 +862,46.74609262484516 +863,46.064498333346215 +864,45.18678736394122 +865,44.57888320611168 +866,44.06497484557091 +867,42.160523350663986 +868,40.374576304065805 +869,39.907787894443615 +870,38.70408353201953 +871,37.404980105342275 +872,37.54185464905945 +873,37.80229260488892 +874,35.396288742205435 +875,36.10884584565608 +876,32.85289014131231 +877,32.07077246887178 +878,30.9737579699961 +879,32.77758270120929 +880,32.895372252989254 +881,33.92990279440597 +882,35.22622839844752 +883,35.05292802052381 +884,36.92317065877576 +885,37.01823083136245 +886,37.634147914685144 +887,39.305440099753895 +888,40.067744069381135 +889,42.24950895955691 +890,43.76313312062902 +891,44.65801350921793 +892,45.606405970645106 +893,46.789964858492525 +894,47.33659105864271 +895,47.44116333227598 +896,48.26883534870733 +897,48.311549101671204 +898,48.32463695222937 +899,48.43945089179804 +900,50.21854836244147 +901,52.74267970948159 +902,54.78425582305929 +903,55.706483328603504 +904,56.76693706812109 +905,59.96541997235289 +906,59.48274275675041 +907,59.98456138063452 +908,61.44621151848407 +909,62.26254946733319 +910,61.69199835867175 +911,62.769672754532266 +912,62.75054737470876 +913,62.96156806328422 +914,65.21871267844614 +915,65.66807859066074 +916,68.63765967666369 +917,68.11041386786859 +918,67.0298605411741 +919,65.63244402827586 +920,64.78010216068228 +921,64.16346251384572 +922,60.44033569820286 +923,61.041209772972806 +924,61.37091203349384 +925,60.925465605366725 +926,61.096652783348 +927,60.19444622976019 +928,58.65043759269266 +929,59.0074666537757 +930,56.67436211093873 +931,55.0889237558626 +932,54.97937782212058 +933,51.70751186095854 +934,50.67694234587863 +935,48.78932281282962 +936,47.36384935446708 +937,45.485086613083254 +938,45.44995969600738 +939,41.75943393780042 +940,40.743076947085726 +941,40.70819867565805 +942,39.15321989346676 +943,36.64479914302059 +944,37.12276344610236 +945,36.65668029238404 +946,36.33566256336408 +947,35.27134628194422 +948,34.12670278699067 +949,33.09968959088831 +950,31.807164700554004 +951,30.58413260291546 +952,31.04269317163896 +953,31.13124916078982 +954,29.255157671840184 +955,28.924399461916703 +956,25.933630887290413 +957,25.23011597080444 +958,27.604141010193256 +959,28.26227189708625 +960,30.355473658564303 +961,31.354781916580592 +962,32.84462510412085 +963,33.43836392391318 +964,33.220122670174355 +965,36.70181586449875 +966,35.689730595474416 +967,39.75820758065038 +968,38.79971249953343 +969,39.201492334039614 +970,42.496996566166644 +971,46.29594379996286 +972,48.45071040442347 +973,49.821231387963365 +974,53.13354487715293 +975,52.640804563836305 +976,56.100137424653546 +977,56.26255275723104 +978,56.204923122100155 +979,57.35309395825719 +980,57.971453451661624 +981,59.53210394560632 +982,60.26848153775481 +983,62.433970571964636 +984,65.71539637505956 +985,67.11080583259128 +986,69.21576760121175 +987,69.98399103108457 +988,71.33114508485946 +989,70.52646191663446 +990,72.60052363400773 +991,73.21529791710599 +992,73.04641872507274 +993,73.84451688735133 +994,73.33083315245418 +995,74.0659468126267 +996,74.29871760080681 +997,73.0315540649724 +998,71.66114726362149 +999,71.3136974581177 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_B.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_B.csv new file mode 100644 index 0000000000..678ca75250 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_B.csv @@ -0,0 +1,1001 @@ +seconds,signal0 +0,64.3788100701576 +1,63.305464852397435 +2,61.7194871317061 +3,62.29746310219582 +4,62.130464158584374 +5,62.33576703447582 +6,62.21610741050218 +7,61.61840901776225 +8,64.02431404137286 +9,65.9414405762248 +10,65.91535905491658 +11,66.61384185519307 +12,65.21916912487808 +13,64.92370537501279 +14,64.82179047012941 +15,63.964061132175196 +16,64.18567731898749 +17,63.66537979188672 +18,62.90869333233664 +19,61.98375610455514 +20,62.11848245367149 +21,60.607875598341984 +22,60.09841584624979 +23,59.81699735202108 +24,57.9377320686301 +25,58.136155491888026 +26,56.70056921303575 +27,54.41534640311674 +28,54.04242957093604 +29,52.74404502437292 +30,53.3666528139431 +31,51.405088845924325 +32,50.109038386692134 +33,48.97665031896081 +34,44.66816497893232 +35,41.32533653158878 +36,40.769360490566015 +37,39.05840833278703 +38,39.97430465806375 +39,39.06654146327853 +40,34.95951492769881 +41,33.22336274052594 +42,30.419021700348505 +43,28.46606700462773 +44,26.182216090491785 +45,26.1141902691676 +46,23.036613866016925 +47,21.666142621716755 +48,19.993191440239332 +49,19.181386707147038 +50,17.743632054264545 +51,18.37863692756317 +52,14.986329415819469 +53,15.629193659924487 +54,13.983055811866484 +55,11.392095253909575 +56,9.445926348809628 +57,5.129695061993423 +58,4.442199997392367 +59,2.8224255009310033 +60,1.014041630549907 +61,-0.7281070303985866 +62,-1.6933873450814956 +63,-1.9230914212334704 +64,-1.4002330723597765 +65,-3.4598147843633167 +66,-5.342282773597463 +67,-4.729881828678903 +68,-5.637164139425884 +69,-6.460990175052322 +70,-7.390922160730448 +71,-8.63476045607092 +72,-8.579207885406568 +73,-10.57866211253837 +74,-9.955106451777656 +75,-11.273449505516517 +76,-11.07300562579671 +77,-11.626649429703555 +78,-13.099595824836355 +79,-12.884558131895428 +80,-12.143287947923682 +81,-12.58607471006817 +82,-13.040384673788807 +83,-11.006141482611367 +84,-10.3411662424562 +85,-10.992001000134612 +86,-9.091984687780212 +87,-8.832097782639448 +88,-9.328424876267935 +89,-7.378344518548228 +90,-7.047778137224252 +91,-5.152648415327391 +92,-4.227052420571537 +93,-6.321421148054804 +94,-3.5584844686274195 +95,-4.899044088718021 +96,-3.2007225093191534 +97,-4.6607267691668754 +98,-2.924220141116845 +99,-2.581654486269348 +100,-2.0538126413589337 +101,-1.6701426974081968 +102,-1.6541642370533098 +103,-1.837277748526493 +104,-1.5321399925268744 +105,-0.49267434794078135 +106,-0.16033636516972027 +107,0.5057737892531528 +108,1.0381903224720626 +109,0.396456096859344 +110,-0.1333378827819005 +111,0.14005683745242292 +112,-0.1269939172117387 +113,2.3342953455262916 +114,3.3008537612759343 +115,4.116985725427192 +116,5.617944347483514 +117,6.517027947999358 +118,7.175597918424119 +119,8.236029171166953 +120,8.90296706153403 +121,9.003660310044793 +122,8.671971097090744 +123,9.667836328161288 +124,9.284092770949627 +125,7.985270627524306 +126,9.720501494186495 +127,10.63164421756819 +128,12.22682739736605 +129,13.12698231340929 +130,13.918559437583527 +131,15.353667677144552 +132,16.153668313332123 +133,15.11938788284894 +134,15.264467999484065 +135,15.389952558305476 +136,15.72526690061142 +137,16.723900792898174 +138,16.929147592608004 +139,17.535741755211475 +140,18.07374290832018 +141,18.706373705260514 +142,18.60729453514398 +143,17.55021415405335 +144,18.4184653762558 +145,17.01236420209063 +146,18.140215534003644 +147,18.989965378358242 +148,17.48362463680425 +149,19.210971371495617 +150,19.343638234851767 +151,20.418532625222735 +152,19.324631890686764 +153,19.385698993938064 +154,18.887307583620554 +155,18.171464701432676 +156,18.89455366401161 +157,19.221504813031252 +158,18.962864438133085 +159,20.22032411712217 +160,21.26298923392958 +161,22.34770130163729 +162,21.58572793812244 +163,20.39296750897129 +164,19.159720063109845 +165,19.941193524508222 +166,19.05622709649511 +167,19.484472957959298 +168,19.88782465766852 +169,17.006441521158088 +170,15.76145111386715 +171,14.822397663315312 +172,13.048136904771676 +173,14.513367179882511 +174,11.374778994021689 +175,10.786081328410205 +176,8.790773251386767 +177,8.66577504574575 +178,8.73560933866136 +179,8.301732052487028 +180,8.977337881115487 +181,8.450667799017255 +182,6.628343949719308 +183,6.221237976256467 +184,4.803402987680974 +185,4.775771792045356 +186,3.896373190593412 +187,4.4903676760679065 +188,4.091449126801524 +189,2.968107712970784 +190,2.802948018857567 +191,1.5703701293841903 +192,1.7008690378272713 +193,1.2900531257481536 +194,0.041600259090745384 +195,-0.901089778195038 +196,-1.8658392196349498 +197,-2.55048472709343 +198,-1.5121364372887696 +199,-0.47790003471532544 +200,-1.305611337700292 +201,-1.1548314927347327 +202,-1.494814875423624 +203,-0.4346950352918384 +204,0.6207123994330499 +205,-0.6135688916372495 +206,-2.390580392507358 +207,-2.030601746617359 +208,-1.1949752959720108 +209,0.5638042127184741 +210,1.220655797930302 +211,4.382168358057829 +212,6.402115298386688 +213,8.592752318539672 +214,9.530614505865724 +215,10.511610521920131 +216,12.341270085936342 +217,13.137706540655362 +218,15.781900527104236 +219,16.430631710507257 +220,19.77061630893087 +221,22.116443579143308 +222,22.952525965906194 +223,22.933862699711586 +224,24.274334987684725 +225,26.483934935536798 +226,29.62146638123258 +227,32.46892595424184 +228,34.510002435325156 +229,34.09857489977365 +230,35.57587954287975 +231,38.40570992568513 +232,39.94000329450884 +233,41.20630733151363 +234,43.641642250017476 +235,46.22595086384144 +236,46.63082372368573 +237,48.30931130349483 +238,48.708193216492454 +239,49.88220370129508 +240,51.805731933483564 +241,52.88499890389867 +242,54.67184031814286 +243,57.94835317293563 +244,59.58082021761684 +245,60.122751547531564 +246,61.30515763322347 +247,63.54359896824648 +248,64.30363548620424 +249,66.8286906184187 +250,66.59540700402658 +251,67.90656100584944 +252,68.85528348246011 +253,69.26409381946485 +254,68.59445179802012 +255,71.8792294434304 +256,72.62923125293551 +257,74.40905633140366 +258,75.02356280148264 +259,76.89079219173381 +260,76.35618650091325 +261,76.72085896640758 +262,76.49441854607545 +263,76.33787363827089 +264,75.40695430282426 +265,75.99579102754379 +266,75.4070043997009 +267,74.47107377266082 +268,74.72512629257128 +269,74.34513666037988 +270,74.12568758193316 +271,76.04443446127746 +272,76.01346137134057 +273,77.01522675913783 +274,76.45710760376437 +275,75.40864857046734 +276,76.11907508058754 +277,75.63831409990688 +278,75.15937897045805 +279,75.28824409400507 +280,72.35781332639134 +281,71.8398996635189 +282,68.73034845922372 +283,67.90829613064585 +284,65.65351918632649 +285,64.36395734898258 +286,66.91380816081451 +287,65.94895898916373 +288,67.38828586649508 +289,68.26518537572258 +290,66.66186204472899 +291,66.95362830147613 +292,65.82817247024303 +293,65.81849798063843 +294,66.54885167577416 +295,65.8003947692459 +296,63.14708467283183 +297,61.58523386714833 +298,61.32721652570219 +299,62.97957471188976 +300,63.567596530623746 +301,63.23840865979766 +302,62.95488441477431 +303,60.33349210678537 +304,59.460728409421925 +305,58.92992112758664 +306,59.185120062181895 +307,58.71917591172574 +308,57.03154372064393 +309,57.288786107598575 +310,55.977998870630934 +311,55.24220658710771 +312,55.24833170876931 +313,56.47699753982457 +314,55.930613747993895 +315,56.63351605892085 +316,57.20572056376551 +317,55.249791684133214 +318,54.55299268072292 +319,54.163443767572346 +320,52.50417730700486 +321,52.07768490104506 +322,51.61718548085837 +323,51.69622324950149 +324,51.983989071953005 +325,52.74777982797656 +326,51.764824888973216 +327,51.11913664490678 +328,51.09578026035805 +329,51.742526346573385 +330,51.129128093660974 +331,50.58991555209445 +332,49.68525520292186 +333,50.477508912385225 +334,50.244905874680754 +335,49.70455353242183 +336,50.46581643333269 +337,51.488761677793185 +338,49.22969187232803 +339,48.953698742453874 +340,48.86339761272331 +341,49.21462659195401 +342,50.78229070690018 +343,51.55119078807146 +344,52.117431888634975 +345,53.96195550360025 +346,53.13160220983179 +347,54.38290942673075 +348,55.513634676919025 +349,56.70085754829366 +350,56.12615102694596 +351,57.77760661356229 +352,58.39038232628437 +353,58.625816802411165 +354,58.99734513319523 +355,59.41911312069511 +356,59.73923907994024 +357,62.507106439081795 +358,62.96108802748713 +359,63.98334820713316 +360,65.43066558838436 +361,67.26919657531462 +362,67.66414931208963 +363,69.36573885910201 +364,72.48838893193266 +365,72.84454751696147 +366,72.73966528417931 +367,72.82516583128792 +368,76.08233826021063 +369,77.7978319305189 +370,80.18809700057517 +371,82.17028795563226 +372,83.32541562147625 +373,84.98679510225462 +374,85.50123272763383 +375,85.90078454579161 +376,86.4992319183496 +377,86.81421677565342 +378,86.66369450068272 +379,88.52075358964966 +380,89.43389874204729 +381,90.19859485146657 +382,90.66419177144807 +383,91.14499914202925 +384,89.86652959454075 +385,91.43960302625034 +386,92.58188876340076 +387,95.09657357143607 +388,95.6060959540443 +389,94.49930849269884 +390,95.7488773335077 +391,94.31225245087673 +392,93.03923164512186 +393,92.25373421092803 +394,91.75858632774614 +395,92.03506839820909 +396,91.72135489698098 +397,91.53464078375848 +398,90.82432640155126 +399,91.06321597250331 +400,92.07581878144198 +401,91.70367240125233 +402,89.01708759586957 +403,88.82660460841112 +404,88.18478663719118 +405,87.6586548177606 +406,86.50028497178187 +407,85.43728230422208 +408,85.73576427604384 +409,84.29841575031801 +410,82.33330518958094 +411,82.43781931468213 +412,81.18590172895435 +413,79.61483917241155 +414,76.02819289818012 +415,75.2134239300273 +416,72.4556734995769 +417,71.58076544756801 +418,69.65806463897236 +419,70.66788140241235 +420,69.92062729462933 +421,66.521675518245 +422,66.50374217978049 +423,65.62875530892441 +424,63.73015905068201 +425,62.23673637996325 +426,60.5146971668257 +427,59.02752383609155 +428,54.3494953439216 +429,55.28171142000755 +430,54.23104077905041 +431,54.897540395642636 +432,53.19878221999033 +433,50.620431637354045 +434,49.82574851249584 +435,49.19923922392319 +436,46.7125462693543 +437,47.3850194420897 +438,47.126185641047435 +439,47.65561925996885 +440,47.411783955598665 +441,46.41581504253164 +442,46.335973506137584 +443,46.49858996449073 +444,43.78422253857006 +445,45.61161184890475 +446,43.78714315595674 +447,44.37995566162409 +448,44.07293361427204 +449,44.33296316370861 +450,43.62642384935455 +451,43.30697443416231 +452,41.6589269801927 +453,43.18970605062608 +454,41.46455425041644 +455,44.60011572675329 +456,43.021336405364984 +457,42.42614458126573 +458,43.8498777205289 +459,44.501725392056194 +460,47.71384545110265 +461,47.79353918003594 +462,50.09389811989036 +463,48.69938236160968 +464,49.35904456282328 +465,50.46717132375378 +466,49.36222419354725 +467,50.50302320887902 +468,52.04445446639948 +469,52.10435051671568 +470,50.080446196023516 +471,50.4797485844668 +472,50.224134277133125 +473,51.54417782971975 +474,51.0315571503519 +475,52.536786741785235 +476,54.98501800565686 +477,54.32039154346508 +478,53.36614439754357 +479,54.55613660020384 +480,54.46761652674575 +481,54.56145686333937 +482,55.889309595412165 +483,54.575751415167574 +484,55.31954243546541 +485,56.8829947448482 +486,57.908811087216336 +487,58.553371071821786 +488,58.60293003649361 +489,59.120881364041026 +490,60.029138443154814 +491,56.69465847245426 +492,57.20107302938799 +493,58.8014952765815 +494,60.63095903958357 +495,60.4867891913082 +496,60.45407872246824 +497,61.97622528034705 +498,61.581077387714004 +499,60.13812819527251 +500,59.266999290534095 +501,61.303476224427975 +502,61.40241309947704 +503,61.65204442808669 +504,60.306938971168634 +505,60.900505492158594 +506,60.22417365413688 +507,60.63224106473937 +508,60.64435789492931 +509,60.31326902222032 +510,61.25674123194667 +511,62.749500043208876 +512,62.0804214498948 +513,60.84852513211894 +514,61.58553378301671 +515,60.1982707453823 +516,59.356801389414564 +517,60.72942108627963 +518,57.69011543142434 +519,57.10928118581674 +520,55.67788780568981 +521,57.09326150028421 +522,56.557376995460984 +523,58.60929898603701 +524,57.74968970910051 +525,57.61357574164517 +526,57.003298296036476 +527,55.287161144320656 +528,55.75250637758196 +529,52.6720818415903 +530,52.95178143216517 +531,51.90475586922974 +532,49.927323987364744 +533,48.35842569207996 +534,45.13008294470527 +535,43.522318655732434 +536,42.75520305614531 +537,39.749972407507805 +538,38.705576647099505 +539,38.710850970191395 +540,36.996842604643554 +541,37.247274772639884 +542,35.35833552671243 +543,34.015477487257975 +544,32.77361371740846 +545,31.37922799498958 +546,29.429999664643365 +547,28.34534973722792 +548,27.088169753533737 +549,26.71328516899832 +550,24.631733932208164 +551,24.73440745589031 +552,21.005981941468697 +553,19.045091869253255 +554,15.014935986936987 +555,14.171907389918614 +556,12.19764785424862 +557,9.540879710235513 +558,9.086467030950537 +559,7.284958865662867 +560,7.205176619683295 +561,6.636904527648557 +562,4.224773090354461 +563,2.4462709578236788 +564,0.47893392730860007 +565,-0.06692560021124372 +566,-2.5564383499837326 +567,-2.7139163917155193 +568,-5.621530183357523 +569,-7.323921117987412 +570,-10.082080963534708 +571,-10.11806366309139 +572,-13.232327206344227 +573,-12.732253829486258 +574,-12.472836709412082 +575,-12.827963894032893 +576,-15.229540859161606 +577,-16.216488855509585 +578,-16.96906855529713 +579,-18.51899317641393 +580,-18.744391988280963 +581,-17.54587384685209 +582,-17.326396009899046 +583,-16.577459416582908 +584,-16.511062828776712 +585,-16.822765527127398 +586,-15.985705686190922 +587,-16.09919356241559 +588,-15.697060464537794 +589,-15.447880831758733 +590,-14.908944543252339 +591,-14.536245853819524 +592,-13.944421641598208 +593,-13.680345392123536 +594,-13.160431892682755 +595,-13.090460363724013 +596,-12.77894992832439 +597,-11.964241148904822 +598,-9.18867336828109 +599,-7.155151509944622 +600,-7.214813089043139 +601,-3.925650137374279 +602,-3.6709989868788613 +603,-3.351059372735003 +604,-1.8942420716422568 +605,-1.8703462469541616 +606,0.6102616712047697 +607,3.0099126915414276 +608,3.2878702969266906 +609,4.39547356051223 +610,6.352327698411086 +611,7.703455340918602 +612,11.037476937899916 +613,11.718084550227081 +614,10.698771708994329 +615,12.260118119590835 +616,13.142753122071571 +617,14.030822220372139 +618,14.706507469924047 +619,15.450060529856465 +620,16.894792631787503 +621,15.041579976902433 +622,16.974221126914234 +623,18.9680672722877 +624,19.620668521001633 +625,20.352364111690047 +626,19.928439035246885 +627,20.746752686059963 +628,19.065025808108786 +629,19.699828203705533 +630,21.097530799444254 +631,20.42648582458958 +632,21.988891840743243 +633,20.188251855116548 +634,20.076844733802435 +635,19.75215067438861 +636,20.074843136652614 +637,21.62140657610596 +638,22.121514034910884 +639,22.253491710853677 +640,21.166859723058234 +641,22.232115534367868 +642,21.305141798256876 +643,22.20780124555066 +644,22.634615403815854 +645,20.60791039731099 +646,18.565525463437655 +647,16.590615283805782 +648,14.761190216012555 +649,13.715979818050519 +650,15.52025772488669 +651,15.178554121906274 +652,16.05431544557275 +653,15.197043188460075 +654,14.748708480364048 +655,15.541964261226013 +656,12.796026807679066 +657,13.318978247494451 +658,13.26463630246199 +659,14.339517657845096 +660,14.03964729077288 +661,12.721857465051077 +662,12.6591422990262 +663,12.440750953779446 +664,12.22082497643069 +665,11.170737646562522 +666,11.03076803825888 +667,12.559309302384719 +668,12.171924139073907 +669,13.836999457842957 +670,11.599588925108957 +671,11.856795399893564 +672,10.250444276335399 +673,9.946572316452173 +674,8.474989865895678 +675,7.971533647326445 +676,6.707350890848163 +677,6.837323333018516 +678,7.755832170056581 +679,7.734677700985182 +680,7.214678094224618 +681,6.344805280660716 +682,6.411660214347433 +683,4.824774649566261 +684,3.7034485584752517 +685,4.411951340038323 +686,6.34842069201336 +687,6.090511425110241 +688,7.26676014994073 +689,5.297027853054866 +690,5.365741633475244 +691,4.926779976747734 +692,3.3062314458602224 +693,5.422556652279555 +694,4.6997458662778735 +695,5.9535779929634725 +696,6.029926055400364 +697,5.265572810903845 +698,6.6418926946458265 +699,5.3402880423506165 +700,7.528621723338908 +701,8.904659971308662 +702,11.05590329419173 +703,10.529130671816594 +704,10.303979295618579 +705,8.80837888740385 +706,9.608159142420314 +707,9.065942930847246 +708,9.531987754849398 +709,10.60756962858248 +710,11.143947923774524 +711,12.416941036469698 +712,12.39712506030474 +713,12.560566494379952 +714,14.001999867921814 +715,14.60518411755976 +716,15.451378929591456 +717,16.71600296728339 +718,16.990040265034704 +719,17.986324576310015 +720,17.693995026587267 +721,17.917050727378378 +722,20.292999846325138 +723,21.552671726933934 +724,21.336198613081514 +725,24.564983750357175 +726,23.64813346365656 +727,26.30855562368191 +728,26.495352429010467 +729,29.77665844596347 +730,30.69067663813126 +731,32.407383705547936 +732,36.261051778612035 +733,37.03033285668002 +734,38.82003270194953 +735,40.98035142330639 +736,41.054227598911105 +737,42.53051797840974 +738,43.14342850636115 +739,46.13007574222622 +740,45.72362046630447 +741,48.78905705430836 +742,50.588905728529134 +743,52.540998113049724 +744,53.45448415779791 +745,55.980220269399254 +746,58.97243063464529 +747,61.74774676868095 +748,63.80250686962794 +749,65.18747579100344 +750,66.56484208505762 +751,66.21727615241045 +752,66.49746224735303 +753,67.71709093471918 +754,68.54764877894432 +755,70.60851118232455 +756,73.9680259281853 +757,74.95008208919805 +758,75.42349093191798 +759,75.90007818915964 +760,76.48138311387184 +761,77.07169733288198 +762,76.25741867153289 +763,76.4759127114395 +764,76.24868797396852 +765,77.44643324621808 +766,78.6770022391993 +767,80.39880296961113 +768,79.48310696916852 +769,80.42846175218848 +770,78.72928189711396 +771,78.93489287230078 +772,80.90790644212684 +773,80.45040669217609 +774,80.57137825363687 +775,81.99667549063017 +776,82.2144999839554 +777,82.85571728731794 +778,81.23502377711387 +779,81.47403227587165 +780,78.06047813914236 +781,78.29019624601985 +782,78.32872447451287 +783,77.54857139221423 +784,75.36259768575378 +785,74.95527164853651 +786,74.27787497379875 +787,73.05684686589012 +788,71.72685496588322 +789,70.0729608743811 +790,68.34377922765641 +791,66.94634088419816 +792,66.02886709234457 +793,65.04318849328135 +794,65.08533758775708 +795,64.58208347624861 +796,65.38003453314856 +797,64.02203455251085 +798,62.26317571433646 +799,60.76746804100889 +800,60.55272394675414 +801,59.74983426943659 +802,59.31341165850354 +803,58.577567033298614 +804,58.815649727910795 +805,56.34173788322786 +806,54.840588246551214 +807,51.567346321289236 +808,49.2421007406133 +809,48.58242617079162 +810,48.36690713574818 +811,48.435733163036154 +812,48.847419625768225 +813,47.97853482243171 +814,50.70852672996658 +815,50.00686200211729 +816,48.894121259157934 +817,48.56606114377693 +818,47.30030909321853 +819,47.21004525243834 +820,47.34963909261449 +821,46.952125083155934 +822,46.078212102081785 +823,45.24702851589278 +824,45.69994098898242 +825,45.6115526814768 +826,45.1899455585051 +827,45.799673823869 +828,46.12943278095875 +829,48.5547451816315 +830,49.89393481739855 +831,49.76965699917215 +832,52.03853091162869 +833,51.39219959652034 +834,51.08569179801756 +835,52.972225620546375 +836,50.98666619852132 +837,52.79090573870864 +838,51.14044562705689 +839,51.862360710353016 +840,52.06673763996639 +841,53.619033422121966 +842,54.59102353093409 +843,55.13149838516499 +844,58.889069254616786 +845,59.29329855563288 +846,60.07782142841288 +847,61.340287418528206 +848,63.26403919271188 +849,66.29864592158339 +850,65.0518168540699 +851,65.16980131676193 +852,66.23820102927623 +853,67.03340260505443 +854,67.96261201532307 +855,67.32026884004195 +856,67.07008850643015 +857,69.00755799045557 +858,70.15096245058629 +859,72.96222237288777 +860,72.72025189425534 +861,73.26040628060674 +862,74.03214296210575 +863,74.11980030068004 +864,75.41524962821232 +865,74.83245287183232 +866,76.70385586285686 +867,74.06376538516845 +868,77.20040867197852 +869,77.88285802797101 +870,77.97174371200465 +871,78.68274795614997 +872,81.19685970584912 +873,81.61521740961368 +874,80.56535820363543 +875,82.09446989844803 +876,83.50068140733725 +877,83.52572617717662 +878,84.08179114996945 +879,82.4042471693179 +880,81.2745625664887 +881,82.70670510221198 +882,81.67641886191008 +883,83.15823531342382 +884,85.41706403566278 +885,86.1711830749113 +886,85.97035216362467 +887,88.15840482702757 +888,87.57842182714562 +889,86.5743831683923 +890,86.66535735776117 +891,88.92719173814949 +892,88.91828348113303 +893,88.72318037182653 +894,89.53019371770108 +895,87.2625817004112 +896,87.30723595179323 +897,86.52697847066659 +898,87.1762813207215 +899,88.89803750432418 +900,88.53474415972887 +901,89.71758516552052 +902,89.03169617185478 +903,86.68279450749036 +904,86.46487360057681 +905,87.50545038309723 +906,85.26726921589771 +907,86.48558068754673 +908,84.68185535418742 +909,85.1441664091521 +910,85.39116736394767 +911,83.95323629176211 +912,83.38568657716067 +913,82.84954801348559 +914,81.4128624400601 +915,79.51869668478786 +916,78.46396015896657 +917,75.67235613923147 +918,74.18949909776316 +919,74.69901179182288 +920,74.00719652434813 +921,71.65274062162777 +922,69.87414259723475 +923,67.63853764476525 +924,67.13014644179772 +925,65.1224931394525 +926,63.77456564243954 +927,63.374623808436 +928,61.91469022241334 +929,60.02593033213573 +930,58.77427616377089 +931,56.24753528223883 +932,56.22366662122678 +933,55.464713501572895 +934,56.36422388664262 +935,56.64078242621871 +936,56.027998561776066 +937,54.90810737475389 +938,54.400318880184024 +939,52.11535076127324 +940,50.07923537629716 +941,49.046404161961846 +942,46.28038036612772 +943,44.04925065302201 +944,44.07014826776463 +945,41.609166539066884 +946,42.37402756594198 +947,41.903798988897506 +948,42.32435288810846 +949,41.13472454773123 +950,39.88187270799549 +951,40.096084312585354 +952,40.27817955787508 +953,39.439845296574184 +954,39.49181217590909 +955,40.38281688305427 +956,40.23430829843219 +957,40.376783866935384 +958,41.46244580707138 +959,39.42523991889198 +960,37.6671670543069 +961,35.38987091844887 +962,36.31961696633944 +963,39.677939681732205 +964,38.89610973115925 +965,42.35446024168155 +966,43.70639343050016 +967,43.86157354792278 +968,44.90745857413986 +969,45.231465247484685 +970,45.48322661380869 +971,45.53634738893378 +972,48.140263770131526 +973,47.24724767475913 +974,48.6180314149397 +975,48.1327821151072 +976,49.23784007228236 +977,48.80242082993334 +978,49.36903009076947 +979,50.193018630689274 +980,51.2176676363475 +981,52.33459843710076 +982,55.19828887615402 +983,56.66088545483354 +984,57.45295124834568 +985,59.458077885982654 +986,62.82347038256337 +987,62.03301318936236 +988,63.3581484961932 +989,64.05236952902673 +990,63.68076690201855 +991,65.45852952608595 +992,65.4236294400546 +993,65.89413901666583 +994,66.40218569725378 +995,65.42684725100277 +996,67.04060074837929 +997,68.01739182944584 +998,68.23022414293816 +999,67.6265953017679 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR.csv new file mode 100644 index 0000000000..fa91703655 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR.csv @@ -0,0 +1,2 @@ +scaling,macro,filename +1,1,simpleMR_A.csv diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR_A.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR_A.csv new file mode 100644 index 0000000000..de669e10bd --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR_A.csv @@ -0,0 +1,101 @@ +pivot,signal0,signal1 +0.0,49.54983944220783,50.09433414520015 +1.0,52.6970978207364,51.91544590552285 +2.0,54.472862047914774,55.039271156936586 +3.0,53.33254164033814,54.08149824048361 +4.0,52.398885012288034,52.69704923112341 +5.0,47.95732104333438,48.336749191375624 +6.0,41.995611349584806,41.71735404540245 +7.0,34.53711221372069,33.8701885031421 +8.0,27.69674740070055,27.720155227421266 +9.0,22.499310863993816,22.614021724113563 +10.0,20.74308566720757,18.086536551049857 +11.0,21.1137154930233,19.696929043634686 +12.0,21.681943491778338,20.230384640308735 +13.0,23.772528397583514,24.777515083480115 +14.0,25.69647956381209,26.81783717619455 +15.0,27.95157525823347,29.86946686260868 +16.0,29.9347444591284,31.185903097508724 +17.0,29.20134572422491,29.741222027051702 +18.0,30.867392130601885,28.04252405574178 +19.0,28.2540069802605,26.34235276871408 +20.0,28.24913895352052,24.64639131409379 +21.0,28.5132249963771,27.79859137225004 +22.0,30.272761522145192,30.744804050347277 +23.0,34.62896633430685,37.29410045458242 +24.0,41.0729599393201,44.83092738660316 +25.0,51.775074011616326,50.76124075544462 +26.0,57.7327669455922,58.54116144420404 +27.0,63.54674809514319,65.73734611237148 +28.0,66.70461311519895,67.68674904538042 +29.0,67.05747787659041,66.42271967603361 +30.0,65.7632413042674,63.97984335811091 +31.0,59.440589195110846,59.29757184816752 +32.0,56.02101384082861,54.29743359212972 +33.0,50.58850913680426,48.86101814995422 +34.0,46.92772148704119,45.46331178512475 +35.0,43.81645218309977,45.47904062148712 +36.0,44.802051586157134,43.56309315582151 +37.0,46.201309782394,47.20988916350355 +38.0,47.203327227712826,49.71554406666086 +39.0,49.81277092493964,51.84679982202542 +40.0,53.001838661705314,52.83011950017796 +41.0,51.5773618081381,52.683868907157255 +42.0,48.20932030823357,50.791389210235586 +43.0,45.50633211898812,47.93842473130441 +44.0,43.58158636292949,46.233029001839235 +45.0,40.060886474928004,43.035059737037166 +46.0,38.61670029046317,41.026687230390415 +47.0,40.742347732072666,41.112274588932046 +48.0,44.17390705444223,42.312889216876165 +49.0,48.72379773212896,48.25804659867207 +50.0,52.279273035286195,53.94375282557255 +51.0,56.31069465510406,57.436402534624875 +52.0,59.31392226672933,57.577116759603655 +53.0,59.175169639383185,55.99712940959766 +54.0,56.564294242264836,54.1420721072508 +55.0,51.15662295951644,48.62741805857791 +56.0,43.95386995723759,40.74653161265582 +57.0,36.69374338029079,35.88873244640077 +58.0,30.039024432745233,28.13704721397137 +59.0,24.87244603566618,24.6829338823739 +60.0,22.207692467612528,21.650770897562296 +61.0,21.394484860881267,19.981392747533004 +62.0,21.627464388000032,21.630996516604615 +63.0,24.2433705228588,22.371309691778542 +64.0,27.317243936466234,26.045295895154737 +65.0,28.670980773549157,28.239845410768996 +66.0,30.008235307237975,31.005445667727525 +67.0,29.612052879953545,31.45815700468124 +68.0,29.83962346044111,29.387301377800487 +69.0,27.84055324009312,27.15743530174945 +70.0,27.040358555034732,27.891832126145225 +71.0,27.57291657583435,27.283297275377347 +72.0,30.276562706340965,29.890110294407734 +73.0,36.960817166473355,35.60143012755945 +74.0,42.58965513133438,42.69950746011971 +75.0,49.3285777128163,50.13098287592544 +76.0,56.38173376910173,56.426301780526785 +77.0,61.831038164413506,62.82458524393499 +78.0,66.40005482368869,64.81285814533194 +79.0,67.28749842198482,63.45424201760611 +80.0,62.91001689781376,62.48405762431236 +81.0,58.73130189126395,57.39643505430432 +82.0,52.243638640724285,53.76414117463373 +83.0,47.19585669804296,49.11582055700549 +84.0,43.53749931837798,46.4711179744035 +85.0,42.09854507197639,45.952630483865626 +86.0,42.51128868619833,45.895064380332926 +87.0,44.85773794751527,47.096404331649524 +88.0,47.87777877257787,49.69525688558984 +89.0,50.931228019454686,50.70256792650591 +90.0,50.07848706218138,49.83461565325988 +91.0,50.46682625968651,51.146570813741505 +92.0,49.49401083138682,47.18371318544457 +93.0,46.102651864162645,44.00823760486923 +94.0,42.31674232817909,40.96564271331024 +95.0,38.85465381238403,39.54908698014911 +96.0,36.87757915362469,38.19368689321115 +97.0,37.109199128017956,39.6897140994637 +98.0,38.71994356985986,41.9336328348804 +99.0,44.824027293817686,45.776619082830955 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/romMeta.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/romMeta.xml new file mode 100644 index 0000000000..f4699621fe --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/romMeta.xml @@ -0,0 +1,10 @@ + + + + Decomposition + scaling + signal0,seconds + + + + diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/samples.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/samples.csv new file mode 100644 index 0000000000..5b04b955ca --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/samples.csv @@ -0,0 +1,4001 @@ +RAVEN_sample_ID,seconds,macro,scaling,signal0,PointProbability,prefix,ProbabilityWeight +0,0.0,1,1.0,0,1.0,1,1.0 +0,0.0,2,1.0,0,1.0,1,1.0 +0,1.0,1,1.0,0,1.0,1,1.0 +0,1.0,2,1.0,0,1.0,1,1.0 +0,2.0,1,1.0,0,1.0,1,1.0 +0,2.0,2,1.0,0,1.0,1,1.0 +0,3.0,1,1.0,0,1.0,1,1.0 +0,3.0,2,1.0,0,1.0,1,1.0 +0,4.0,1,1.0,0,1.0,1,1.0 +0,4.0,2,1.0,0,1.0,1,1.0 +0,5.0,1,1.0,0,1.0,1,1.0 +0,5.0,2,1.0,0,1.0,1,1.0 +0,6.0,1,1.0,0,1.0,1,1.0 +0,6.0,2,1.0,0,1.0,1,1.0 +0,7.0,1,1.0,0,1.0,1,1.0 +0,7.0,2,1.0,0,1.0,1,1.0 +0,8.0,1,1.0,0,1.0,1,1.0 +0,8.0,2,1.0,0,1.0,1,1.0 +0,9.0,1,1.0,0,1.0,1,1.0 +0,9.0,2,1.0,0,1.0,1,1.0 +0,10.0,1,1.0,0,1.0,1,1.0 +0,10.0,2,1.0,0,1.0,1,1.0 +0,11.0,1,1.0,0,1.0,1,1.0 +0,11.0,2,1.0,0,1.0,1,1.0 +0,12.0,1,1.0,0,1.0,1,1.0 +0,12.0,2,1.0,0,1.0,1,1.0 +0,13.0,1,1.0,0,1.0,1,1.0 +0,13.0,2,1.0,0,1.0,1,1.0 +0,14.0,1,1.0,0,1.0,1,1.0 +0,14.0,2,1.0,0,1.0,1,1.0 +0,15.0,1,1.0,0,1.0,1,1.0 +0,15.0,2,1.0,0,1.0,1,1.0 +0,16.0,1,1.0,0,1.0,1,1.0 +0,16.0,2,1.0,0,1.0,1,1.0 +0,17.0,1,1.0,0,1.0,1,1.0 +0,17.0,2,1.0,0,1.0,1,1.0 +0,18.0,1,1.0,0,1.0,1,1.0 +0,18.0,2,1.0,0,1.0,1,1.0 +0,19.0,1,1.0,0,1.0,1,1.0 +0,19.0,2,1.0,0,1.0,1,1.0 +0,20.0,1,1.0,0,1.0,1,1.0 +0,20.0,2,1.0,0,1.0,1,1.0 +0,21.0,1,1.0,0,1.0,1,1.0 +0,21.0,2,1.0,0,1.0,1,1.0 +0,22.0,1,1.0,0,1.0,1,1.0 +0,22.0,2,1.0,0,1.0,1,1.0 +0,23.0,1,1.0,0,1.0,1,1.0 +0,23.0,2,1.0,0,1.0,1,1.0 +0,24.0,1,1.0,0,1.0,1,1.0 +0,24.0,2,1.0,0,1.0,1,1.0 +0,25.0,1,1.0,0,1.0,1,1.0 +0,25.0,2,1.0,0,1.0,1,1.0 +0,26.0,1,1.0,0,1.0,1,1.0 +0,26.0,2,1.0,0,1.0,1,1.0 +0,27.0,1,1.0,0,1.0,1,1.0 +0,27.0,2,1.0,0,1.0,1,1.0 +0,28.0,1,1.0,0,1.0,1,1.0 +0,28.0,2,1.0,0,1.0,1,1.0 +0,29.0,1,1.0,0,1.0,1,1.0 +0,29.0,2,1.0,0,1.0,1,1.0 +0,30.0,1,1.0,0,1.0,1,1.0 +0,30.0,2,1.0,0,1.0,1,1.0 +0,31.0,1,1.0,0,1.0,1,1.0 +0,31.0,2,1.0,0,1.0,1,1.0 +0,32.0,1,1.0,0,1.0,1,1.0 +0,32.0,2,1.0,0,1.0,1,1.0 +0,33.0,1,1.0,0,1.0,1,1.0 +0,33.0,2,1.0,0,1.0,1,1.0 +0,34.0,1,1.0,0,1.0,1,1.0 +0,34.0,2,1.0,0,1.0,1,1.0 +0,35.0,1,1.0,0,1.0,1,1.0 +0,35.0,2,1.0,0,1.0,1,1.0 +0,36.0,1,1.0,0,1.0,1,1.0 +0,36.0,2,1.0,0,1.0,1,1.0 +0,37.0,1,1.0,0,1.0,1,1.0 +0,37.0,2,1.0,0,1.0,1,1.0 +0,38.0,1,1.0,0,1.0,1,1.0 +0,38.0,2,1.0,0,1.0,1,1.0 +0,39.0,1,1.0,0,1.0,1,1.0 +0,39.0,2,1.0,0,1.0,1,1.0 +0,40.0,1,1.0,0,1.0,1,1.0 +0,40.0,2,1.0,0,1.0,1,1.0 +0,41.0,1,1.0,0,1.0,1,1.0 +0,41.0,2,1.0,0,1.0,1,1.0 +0,42.0,1,1.0,0,1.0,1,1.0 +0,42.0,2,1.0,0,1.0,1,1.0 +0,43.0,1,1.0,0,1.0,1,1.0 +0,43.0,2,1.0,0,1.0,1,1.0 +0,44.0,1,1.0,0,1.0,1,1.0 +0,44.0,2,1.0,0,1.0,1,1.0 +0,45.0,1,1.0,0,1.0,1,1.0 +0,45.0,2,1.0,0,1.0,1,1.0 +0,46.0,1,1.0,0,1.0,1,1.0 +0,46.0,2,1.0,0,1.0,1,1.0 +0,47.0,1,1.0,0,1.0,1,1.0 +0,47.0,2,1.0,0,1.0,1,1.0 +0,48.0,1,1.0,0,1.0,1,1.0 +0,48.0,2,1.0,0,1.0,1,1.0 +0,49.0,1,1.0,0,1.0,1,1.0 +0,49.0,2,1.0,0,1.0,1,1.0 +0,50.0,1,1.0,0,1.0,1,1.0 +0,50.0,2,1.0,0,1.0,1,1.0 +0,51.0,1,1.0,0,1.0,1,1.0 +0,51.0,2,1.0,0,1.0,1,1.0 +0,52.0,1,1.0,0,1.0,1,1.0 +0,52.0,2,1.0,0,1.0,1,1.0 +0,53.0,1,1.0,0,1.0,1,1.0 +0,53.0,2,1.0,0,1.0,1,1.0 +0,54.0,1,1.0,0,1.0,1,1.0 +0,54.0,2,1.0,0,1.0,1,1.0 +0,55.0,1,1.0,0,1.0,1,1.0 +0,55.0,2,1.0,0,1.0,1,1.0 +0,56.0,1,1.0,0,1.0,1,1.0 +0,56.0,2,1.0,0,1.0,1,1.0 +0,57.0,1,1.0,0,1.0,1,1.0 +0,57.0,2,1.0,0,1.0,1,1.0 +0,58.0,1,1.0,0,1.0,1,1.0 +0,58.0,2,1.0,0,1.0,1,1.0 +0,59.0,1,1.0,0,1.0,1,1.0 +0,59.0,2,1.0,0,1.0,1,1.0 +0,60.0,1,1.0,0,1.0,1,1.0 +0,60.0,2,1.0,0,1.0,1,1.0 +0,61.0,1,1.0,0,1.0,1,1.0 +0,61.0,2,1.0,0,1.0,1,1.0 +0,62.0,1,1.0,0,1.0,1,1.0 +0,62.0,2,1.0,0,1.0,1,1.0 +0,63.0,1,1.0,0,1.0,1,1.0 +0,63.0,2,1.0,0,1.0,1,1.0 +0,64.0,1,1.0,0,1.0,1,1.0 +0,64.0,2,1.0,0,1.0,1,1.0 +0,65.0,1,1.0,0,1.0,1,1.0 +0,65.0,2,1.0,0,1.0,1,1.0 +0,66.0,1,1.0,0,1.0,1,1.0 +0,66.0,2,1.0,0,1.0,1,1.0 +0,67.0,1,1.0,0,1.0,1,1.0 +0,67.0,2,1.0,0,1.0,1,1.0 +0,68.0,1,1.0,0,1.0,1,1.0 +0,68.0,2,1.0,0,1.0,1,1.0 +0,69.0,1,1.0,0,1.0,1,1.0 +0,69.0,2,1.0,0,1.0,1,1.0 +0,70.0,1,1.0,0,1.0,1,1.0 +0,70.0,2,1.0,0,1.0,1,1.0 +0,71.0,1,1.0,0,1.0,1,1.0 +0,71.0,2,1.0,0,1.0,1,1.0 +0,72.0,1,1.0,0,1.0,1,1.0 +0,72.0,2,1.0,0,1.0,1,1.0 +0,73.0,1,1.0,0,1.0,1,1.0 +0,73.0,2,1.0,0,1.0,1,1.0 +0,74.0,1,1.0,0,1.0,1,1.0 +0,74.0,2,1.0,0,1.0,1,1.0 +0,75.0,1,1.0,0,1.0,1,1.0 +0,75.0,2,1.0,0,1.0,1,1.0 +0,76.0,1,1.0,0,1.0,1,1.0 +0,76.0,2,1.0,0,1.0,1,1.0 +0,77.0,1,1.0,0,1.0,1,1.0 +0,77.0,2,1.0,0,1.0,1,1.0 +0,78.0,1,1.0,0,1.0,1,1.0 +0,78.0,2,1.0,0,1.0,1,1.0 +0,79.0,1,1.0,0,1.0,1,1.0 +0,79.0,2,1.0,0,1.0,1,1.0 +0,80.0,1,1.0,0,1.0,1,1.0 +0,80.0,2,1.0,0,1.0,1,1.0 +0,81.0,1,1.0,0,1.0,1,1.0 +0,81.0,2,1.0,0,1.0,1,1.0 +0,82.0,1,1.0,0,1.0,1,1.0 +0,82.0,2,1.0,0,1.0,1,1.0 +0,83.0,1,1.0,0,1.0,1,1.0 +0,83.0,2,1.0,0,1.0,1,1.0 +0,84.0,1,1.0,0,1.0,1,1.0 +0,84.0,2,1.0,0,1.0,1,1.0 +0,85.0,1,1.0,0,1.0,1,1.0 +0,85.0,2,1.0,0,1.0,1,1.0 +0,86.0,1,1.0,0,1.0,1,1.0 +0,86.0,2,1.0,0,1.0,1,1.0 +0,87.0,1,1.0,0,1.0,1,1.0 +0,87.0,2,1.0,0,1.0,1,1.0 +0,88.0,1,1.0,0,1.0,1,1.0 +0,88.0,2,1.0,0,1.0,1,1.0 +0,89.0,1,1.0,0,1.0,1,1.0 +0,89.0,2,1.0,0,1.0,1,1.0 +0,90.0,1,1.0,0,1.0,1,1.0 +0,90.0,2,1.0,0,1.0,1,1.0 +0,91.0,1,1.0,0,1.0,1,1.0 +0,91.0,2,1.0,0,1.0,1,1.0 +0,92.0,1,1.0,0,1.0,1,1.0 +0,92.0,2,1.0,0,1.0,1,1.0 +0,93.0,1,1.0,0,1.0,1,1.0 +0,93.0,2,1.0,0,1.0,1,1.0 +0,94.0,1,1.0,0,1.0,1,1.0 +0,94.0,2,1.0,0,1.0,1,1.0 +0,95.0,1,1.0,0,1.0,1,1.0 +0,95.0,2,1.0,0,1.0,1,1.0 +0,96.0,1,1.0,0,1.0,1,1.0 +0,96.0,2,1.0,0,1.0,1,1.0 +0,97.0,1,1.0,0,1.0,1,1.0 +0,97.0,2,1.0,0,1.0,1,1.0 +0,98.0,1,1.0,0,1.0,1,1.0 +0,98.0,2,1.0,0,1.0,1,1.0 +0,99.0,1,1.0,0,1.0,1,1.0 +0,99.0,2,1.0,0,1.0,1,1.0 +0,100.0,1,1.0,0,1.0,1,1.0 +0,100.0,2,1.0,0,1.0,1,1.0 +0,101.0,1,1.0,0,1.0,1,1.0 +0,101.0,2,1.0,0,1.0,1,1.0 +0,102.0,1,1.0,0,1.0,1,1.0 +0,102.0,2,1.0,0,1.0,1,1.0 +0,103.0,1,1.0,0,1.0,1,1.0 +0,103.0,2,1.0,0,1.0,1,1.0 +0,104.0,1,1.0,0,1.0,1,1.0 +0,104.0,2,1.0,0,1.0,1,1.0 +0,105.0,1,1.0,0,1.0,1,1.0 +0,105.0,2,1.0,0,1.0,1,1.0 +0,106.0,1,1.0,0,1.0,1,1.0 +0,106.0,2,1.0,0,1.0,1,1.0 +0,107.0,1,1.0,0,1.0,1,1.0 +0,107.0,2,1.0,0,1.0,1,1.0 +0,108.0,1,1.0,0,1.0,1,1.0 +0,108.0,2,1.0,0,1.0,1,1.0 +0,109.0,1,1.0,0,1.0,1,1.0 +0,109.0,2,1.0,0,1.0,1,1.0 +0,110.0,1,1.0,0,1.0,1,1.0 +0,110.0,2,1.0,0,1.0,1,1.0 +0,111.0,1,1.0,0,1.0,1,1.0 +0,111.0,2,1.0,0,1.0,1,1.0 +0,112.0,1,1.0,0,1.0,1,1.0 +0,112.0,2,1.0,0,1.0,1,1.0 +0,113.0,1,1.0,0,1.0,1,1.0 +0,113.0,2,1.0,0,1.0,1,1.0 +0,114.0,1,1.0,0,1.0,1,1.0 +0,114.0,2,1.0,0,1.0,1,1.0 +0,115.0,1,1.0,0,1.0,1,1.0 +0,115.0,2,1.0,0,1.0,1,1.0 +0,116.0,1,1.0,0,1.0,1,1.0 +0,116.0,2,1.0,0,1.0,1,1.0 +0,117.0,1,1.0,0,1.0,1,1.0 +0,117.0,2,1.0,0,1.0,1,1.0 +0,118.0,1,1.0,0,1.0,1,1.0 +0,118.0,2,1.0,0,1.0,1,1.0 +0,119.0,1,1.0,0,1.0,1,1.0 +0,119.0,2,1.0,0,1.0,1,1.0 +0,120.0,1,1.0,0,1.0,1,1.0 +0,120.0,2,1.0,0,1.0,1,1.0 +0,121.0,1,1.0,0,1.0,1,1.0 +0,121.0,2,1.0,0,1.0,1,1.0 +0,122.0,1,1.0,0,1.0,1,1.0 +0,122.0,2,1.0,0,1.0,1,1.0 +0,123.0,1,1.0,0,1.0,1,1.0 +0,123.0,2,1.0,0,1.0,1,1.0 +0,124.0,1,1.0,0,1.0,1,1.0 +0,124.0,2,1.0,0,1.0,1,1.0 +0,125.0,1,1.0,0,1.0,1,1.0 +0,125.0,2,1.0,0,1.0,1,1.0 +0,126.0,1,1.0,0,1.0,1,1.0 +0,126.0,2,1.0,0,1.0,1,1.0 +0,127.0,1,1.0,0,1.0,1,1.0 +0,127.0,2,1.0,0,1.0,1,1.0 +0,128.0,1,1.0,0,1.0,1,1.0 +0,128.0,2,1.0,0,1.0,1,1.0 +0,129.0,1,1.0,0,1.0,1,1.0 +0,129.0,2,1.0,0,1.0,1,1.0 +0,130.0,1,1.0,0,1.0,1,1.0 +0,130.0,2,1.0,0,1.0,1,1.0 +0,131.0,1,1.0,0,1.0,1,1.0 +0,131.0,2,1.0,0,1.0,1,1.0 +0,132.0,1,1.0,0,1.0,1,1.0 +0,132.0,2,1.0,0,1.0,1,1.0 +0,133.0,1,1.0,0,1.0,1,1.0 +0,133.0,2,1.0,0,1.0,1,1.0 +0,134.0,1,1.0,0,1.0,1,1.0 +0,134.0,2,1.0,0,1.0,1,1.0 +0,135.0,1,1.0,0,1.0,1,1.0 +0,135.0,2,1.0,0,1.0,1,1.0 +0,136.0,1,1.0,0,1.0,1,1.0 +0,136.0,2,1.0,0,1.0,1,1.0 +0,137.0,1,1.0,0,1.0,1,1.0 +0,137.0,2,1.0,0,1.0,1,1.0 +0,138.0,1,1.0,0,1.0,1,1.0 +0,138.0,2,1.0,0,1.0,1,1.0 +0,139.0,1,1.0,0,1.0,1,1.0 +0,139.0,2,1.0,0,1.0,1,1.0 +0,140.0,1,1.0,0,1.0,1,1.0 +0,140.0,2,1.0,0,1.0,1,1.0 +0,141.0,1,1.0,0,1.0,1,1.0 +0,141.0,2,1.0,0,1.0,1,1.0 +0,142.0,1,1.0,0,1.0,1,1.0 +0,142.0,2,1.0,0,1.0,1,1.0 +0,143.0,1,1.0,0,1.0,1,1.0 +0,143.0,2,1.0,0,1.0,1,1.0 +0,144.0,1,1.0,0,1.0,1,1.0 +0,144.0,2,1.0,0,1.0,1,1.0 +0,145.0,1,1.0,0,1.0,1,1.0 +0,145.0,2,1.0,0,1.0,1,1.0 +0,146.0,1,1.0,0,1.0,1,1.0 +0,146.0,2,1.0,0,1.0,1,1.0 +0,147.0,1,1.0,0,1.0,1,1.0 +0,147.0,2,1.0,0,1.0,1,1.0 +0,148.0,1,1.0,0,1.0,1,1.0 +0,148.0,2,1.0,0,1.0,1,1.0 +0,149.0,1,1.0,0,1.0,1,1.0 +0,149.0,2,1.0,0,1.0,1,1.0 +0,150.0,1,1.0,0,1.0,1,1.0 +0,150.0,2,1.0,0,1.0,1,1.0 +0,151.0,1,1.0,0,1.0,1,1.0 +0,151.0,2,1.0,0,1.0,1,1.0 +0,152.0,1,1.0,0,1.0,1,1.0 +0,152.0,2,1.0,0,1.0,1,1.0 +0,153.0,1,1.0,0,1.0,1,1.0 +0,153.0,2,1.0,0,1.0,1,1.0 +0,154.0,1,1.0,0,1.0,1,1.0 +0,154.0,2,1.0,0,1.0,1,1.0 +0,155.0,1,1.0,0,1.0,1,1.0 +0,155.0,2,1.0,0,1.0,1,1.0 +0,156.0,1,1.0,0,1.0,1,1.0 +0,156.0,2,1.0,0,1.0,1,1.0 +0,157.0,1,1.0,0,1.0,1,1.0 +0,157.0,2,1.0,0,1.0,1,1.0 +0,158.0,1,1.0,0,1.0,1,1.0 +0,158.0,2,1.0,0,1.0,1,1.0 +0,159.0,1,1.0,0,1.0,1,1.0 +0,159.0,2,1.0,0,1.0,1,1.0 +0,160.0,1,1.0,0,1.0,1,1.0 +0,160.0,2,1.0,0,1.0,1,1.0 +0,161.0,1,1.0,0,1.0,1,1.0 +0,161.0,2,1.0,0,1.0,1,1.0 +0,162.0,1,1.0,0,1.0,1,1.0 +0,162.0,2,1.0,0,1.0,1,1.0 +0,163.0,1,1.0,0,1.0,1,1.0 +0,163.0,2,1.0,0,1.0,1,1.0 +0,164.0,1,1.0,0,1.0,1,1.0 +0,164.0,2,1.0,0,1.0,1,1.0 +0,165.0,1,1.0,0,1.0,1,1.0 +0,165.0,2,1.0,0,1.0,1,1.0 +0,166.0,1,1.0,0,1.0,1,1.0 +0,166.0,2,1.0,0,1.0,1,1.0 +0,167.0,1,1.0,0,1.0,1,1.0 +0,167.0,2,1.0,0,1.0,1,1.0 +0,168.0,1,1.0,0,1.0,1,1.0 +0,168.0,2,1.0,0,1.0,1,1.0 +0,169.0,1,1.0,0,1.0,1,1.0 +0,169.0,2,1.0,0,1.0,1,1.0 +0,170.0,1,1.0,0,1.0,1,1.0 +0,170.0,2,1.0,0,1.0,1,1.0 +0,171.0,1,1.0,0,1.0,1,1.0 +0,171.0,2,1.0,0,1.0,1,1.0 +0,172.0,1,1.0,0,1.0,1,1.0 +0,172.0,2,1.0,0,1.0,1,1.0 +0,173.0,1,1.0,0,1.0,1,1.0 +0,173.0,2,1.0,0,1.0,1,1.0 +0,174.0,1,1.0,0,1.0,1,1.0 +0,174.0,2,1.0,0,1.0,1,1.0 +0,175.0,1,1.0,0,1.0,1,1.0 +0,175.0,2,1.0,0,1.0,1,1.0 +0,176.0,1,1.0,0,1.0,1,1.0 +0,176.0,2,1.0,0,1.0,1,1.0 +0,177.0,1,1.0,0,1.0,1,1.0 +0,177.0,2,1.0,0,1.0,1,1.0 +0,178.0,1,1.0,0,1.0,1,1.0 +0,178.0,2,1.0,0,1.0,1,1.0 +0,179.0,1,1.0,0,1.0,1,1.0 +0,179.0,2,1.0,0,1.0,1,1.0 +0,180.0,1,1.0,0,1.0,1,1.0 +0,180.0,2,1.0,0,1.0,1,1.0 +0,181.0,1,1.0,0,1.0,1,1.0 +0,181.0,2,1.0,0,1.0,1,1.0 +0,182.0,1,1.0,0,1.0,1,1.0 +0,182.0,2,1.0,0,1.0,1,1.0 +0,183.0,1,1.0,0,1.0,1,1.0 +0,183.0,2,1.0,0,1.0,1,1.0 +0,184.0,1,1.0,0,1.0,1,1.0 +0,184.0,2,1.0,0,1.0,1,1.0 +0,185.0,1,1.0,0,1.0,1,1.0 +0,185.0,2,1.0,0,1.0,1,1.0 +0,186.0,1,1.0,0,1.0,1,1.0 +0,186.0,2,1.0,0,1.0,1,1.0 +0,187.0,1,1.0,0,1.0,1,1.0 +0,187.0,2,1.0,0,1.0,1,1.0 +0,188.0,1,1.0,0,1.0,1,1.0 +0,188.0,2,1.0,0,1.0,1,1.0 +0,189.0,1,1.0,0,1.0,1,1.0 +0,189.0,2,1.0,0,1.0,1,1.0 +0,190.0,1,1.0,0,1.0,1,1.0 +0,190.0,2,1.0,0,1.0,1,1.0 +0,191.0,1,1.0,0,1.0,1,1.0 +0,191.0,2,1.0,0,1.0,1,1.0 +0,192.0,1,1.0,0,1.0,1,1.0 +0,192.0,2,1.0,0,1.0,1,1.0 +0,193.0,1,1.0,0,1.0,1,1.0 +0,193.0,2,1.0,0,1.0,1,1.0 +0,194.0,1,1.0,0,1.0,1,1.0 +0,194.0,2,1.0,0,1.0,1,1.0 +0,195.0,1,1.0,0,1.0,1,1.0 +0,195.0,2,1.0,0,1.0,1,1.0 +0,196.0,1,1.0,0,1.0,1,1.0 +0,196.0,2,1.0,0,1.0,1,1.0 +0,197.0,1,1.0,0,1.0,1,1.0 +0,197.0,2,1.0,0,1.0,1,1.0 +0,198.0,1,1.0,0,1.0,1,1.0 +0,198.0,2,1.0,0,1.0,1,1.0 +0,199.0,1,1.0,0,1.0,1,1.0 +0,199.0,2,1.0,0,1.0,1,1.0 +0,200.0,1,1.0,0,1.0,1,1.0 +0,200.0,2,1.0,0,1.0,1,1.0 +0,201.0,1,1.0,0,1.0,1,1.0 +0,201.0,2,1.0,0,1.0,1,1.0 +0,202.0,1,1.0,0,1.0,1,1.0 +0,202.0,2,1.0,0,1.0,1,1.0 +0,203.0,1,1.0,0,1.0,1,1.0 +0,203.0,2,1.0,0,1.0,1,1.0 +0,204.0,1,1.0,0,1.0,1,1.0 +0,204.0,2,1.0,0,1.0,1,1.0 +0,205.0,1,1.0,0,1.0,1,1.0 +0,205.0,2,1.0,0,1.0,1,1.0 +0,206.0,1,1.0,0,1.0,1,1.0 +0,206.0,2,1.0,0,1.0,1,1.0 +0,207.0,1,1.0,0,1.0,1,1.0 +0,207.0,2,1.0,0,1.0,1,1.0 +0,208.0,1,1.0,0,1.0,1,1.0 +0,208.0,2,1.0,0,1.0,1,1.0 +0,209.0,1,1.0,0,1.0,1,1.0 +0,209.0,2,1.0,0,1.0,1,1.0 +0,210.0,1,1.0,0,1.0,1,1.0 +0,210.0,2,1.0,0,1.0,1,1.0 +0,211.0,1,1.0,0,1.0,1,1.0 +0,211.0,2,1.0,0,1.0,1,1.0 +0,212.0,1,1.0,0,1.0,1,1.0 +0,212.0,2,1.0,0,1.0,1,1.0 +0,213.0,1,1.0,0,1.0,1,1.0 +0,213.0,2,1.0,0,1.0,1,1.0 +0,214.0,1,1.0,0,1.0,1,1.0 +0,214.0,2,1.0,0,1.0,1,1.0 +0,215.0,1,1.0,0,1.0,1,1.0 +0,215.0,2,1.0,0,1.0,1,1.0 +0,216.0,1,1.0,0,1.0,1,1.0 +0,216.0,2,1.0,0,1.0,1,1.0 +0,217.0,1,1.0,0,1.0,1,1.0 +0,217.0,2,1.0,0,1.0,1,1.0 +0,218.0,1,1.0,0,1.0,1,1.0 +0,218.0,2,1.0,0,1.0,1,1.0 +0,219.0,1,1.0,0,1.0,1,1.0 +0,219.0,2,1.0,0,1.0,1,1.0 +0,220.0,1,1.0,0,1.0,1,1.0 +0,220.0,2,1.0,0,1.0,1,1.0 +0,221.0,1,1.0,0,1.0,1,1.0 +0,221.0,2,1.0,0,1.0,1,1.0 +0,222.0,1,1.0,0,1.0,1,1.0 +0,222.0,2,1.0,0,1.0,1,1.0 +0,223.0,1,1.0,0,1.0,1,1.0 +0,223.0,2,1.0,0,1.0,1,1.0 +0,224.0,1,1.0,0,1.0,1,1.0 +0,224.0,2,1.0,0,1.0,1,1.0 +0,225.0,1,1.0,0,1.0,1,1.0 +0,225.0,2,1.0,0,1.0,1,1.0 +0,226.0,1,1.0,0,1.0,1,1.0 +0,226.0,2,1.0,0,1.0,1,1.0 +0,227.0,1,1.0,0,1.0,1,1.0 +0,227.0,2,1.0,0,1.0,1,1.0 +0,228.0,1,1.0,0,1.0,1,1.0 +0,228.0,2,1.0,0,1.0,1,1.0 +0,229.0,1,1.0,0,1.0,1,1.0 +0,229.0,2,1.0,0,1.0,1,1.0 +0,230.0,1,1.0,0,1.0,1,1.0 +0,230.0,2,1.0,0,1.0,1,1.0 +0,231.0,1,1.0,0,1.0,1,1.0 +0,231.0,2,1.0,0,1.0,1,1.0 +0,232.0,1,1.0,0,1.0,1,1.0 +0,232.0,2,1.0,0,1.0,1,1.0 +0,233.0,1,1.0,0,1.0,1,1.0 +0,233.0,2,1.0,0,1.0,1,1.0 +0,234.0,1,1.0,0,1.0,1,1.0 +0,234.0,2,1.0,0,1.0,1,1.0 +0,235.0,1,1.0,0,1.0,1,1.0 +0,235.0,2,1.0,0,1.0,1,1.0 +0,236.0,1,1.0,0,1.0,1,1.0 +0,236.0,2,1.0,0,1.0,1,1.0 +0,237.0,1,1.0,0,1.0,1,1.0 +0,237.0,2,1.0,0,1.0,1,1.0 +0,238.0,1,1.0,0,1.0,1,1.0 +0,238.0,2,1.0,0,1.0,1,1.0 +0,239.0,1,1.0,0,1.0,1,1.0 +0,239.0,2,1.0,0,1.0,1,1.0 +0,240.0,1,1.0,0,1.0,1,1.0 +0,240.0,2,1.0,0,1.0,1,1.0 +0,241.0,1,1.0,0,1.0,1,1.0 +0,241.0,2,1.0,0,1.0,1,1.0 +0,242.0,1,1.0,0,1.0,1,1.0 +0,242.0,2,1.0,0,1.0,1,1.0 +0,243.0,1,1.0,0,1.0,1,1.0 +0,243.0,2,1.0,0,1.0,1,1.0 +0,244.0,1,1.0,0,1.0,1,1.0 +0,244.0,2,1.0,0,1.0,1,1.0 +0,245.0,1,1.0,0,1.0,1,1.0 +0,245.0,2,1.0,0,1.0,1,1.0 +0,246.0,1,1.0,0,1.0,1,1.0 +0,246.0,2,1.0,0,1.0,1,1.0 +0,247.0,1,1.0,0,1.0,1,1.0 +0,247.0,2,1.0,0,1.0,1,1.0 +0,248.0,1,1.0,0,1.0,1,1.0 +0,248.0,2,1.0,0,1.0,1,1.0 +0,249.0,1,1.0,0,1.0,1,1.0 +0,249.0,2,1.0,0,1.0,1,1.0 +0,250.0,1,1.0,0,1.0,1,1.0 +0,250.0,2,1.0,0,1.0,1,1.0 +0,251.0,1,1.0,0,1.0,1,1.0 +0,251.0,2,1.0,0,1.0,1,1.0 +0,252.0,1,1.0,0,1.0,1,1.0 +0,252.0,2,1.0,0,1.0,1,1.0 +0,253.0,1,1.0,0,1.0,1,1.0 +0,253.0,2,1.0,0,1.0,1,1.0 +0,254.0,1,1.0,0,1.0,1,1.0 +0,254.0,2,1.0,0,1.0,1,1.0 +0,255.0,1,1.0,0,1.0,1,1.0 +0,255.0,2,1.0,0,1.0,1,1.0 +0,256.0,1,1.0,0,1.0,1,1.0 +0,256.0,2,1.0,0,1.0,1,1.0 +0,257.0,1,1.0,0,1.0,1,1.0 +0,257.0,2,1.0,0,1.0,1,1.0 +0,258.0,1,1.0,0,1.0,1,1.0 +0,258.0,2,1.0,0,1.0,1,1.0 +0,259.0,1,1.0,0,1.0,1,1.0 +0,259.0,2,1.0,0,1.0,1,1.0 +0,260.0,1,1.0,0,1.0,1,1.0 +0,260.0,2,1.0,0,1.0,1,1.0 +0,261.0,1,1.0,0,1.0,1,1.0 +0,261.0,2,1.0,0,1.0,1,1.0 +0,262.0,1,1.0,0,1.0,1,1.0 +0,262.0,2,1.0,0,1.0,1,1.0 +0,263.0,1,1.0,0,1.0,1,1.0 +0,263.0,2,1.0,0,1.0,1,1.0 +0,264.0,1,1.0,0,1.0,1,1.0 +0,264.0,2,1.0,0,1.0,1,1.0 +0,265.0,1,1.0,0,1.0,1,1.0 +0,265.0,2,1.0,0,1.0,1,1.0 +0,266.0,1,1.0,0,1.0,1,1.0 +0,266.0,2,1.0,0,1.0,1,1.0 +0,267.0,1,1.0,0,1.0,1,1.0 +0,267.0,2,1.0,0,1.0,1,1.0 +0,268.0,1,1.0,0,1.0,1,1.0 +0,268.0,2,1.0,0,1.0,1,1.0 +0,269.0,1,1.0,0,1.0,1,1.0 +0,269.0,2,1.0,0,1.0,1,1.0 +0,270.0,1,1.0,0,1.0,1,1.0 +0,270.0,2,1.0,0,1.0,1,1.0 +0,271.0,1,1.0,0,1.0,1,1.0 +0,271.0,2,1.0,0,1.0,1,1.0 +0,272.0,1,1.0,0,1.0,1,1.0 +0,272.0,2,1.0,0,1.0,1,1.0 +0,273.0,1,1.0,0,1.0,1,1.0 +0,273.0,2,1.0,0,1.0,1,1.0 +0,274.0,1,1.0,0,1.0,1,1.0 +0,274.0,2,1.0,0,1.0,1,1.0 +0,275.0,1,1.0,0,1.0,1,1.0 +0,275.0,2,1.0,0,1.0,1,1.0 +0,276.0,1,1.0,0,1.0,1,1.0 +0,276.0,2,1.0,0,1.0,1,1.0 +0,277.0,1,1.0,0,1.0,1,1.0 +0,277.0,2,1.0,0,1.0,1,1.0 +0,278.0,1,1.0,0,1.0,1,1.0 +0,278.0,2,1.0,0,1.0,1,1.0 +0,279.0,1,1.0,0,1.0,1,1.0 +0,279.0,2,1.0,0,1.0,1,1.0 +0,280.0,1,1.0,0,1.0,1,1.0 +0,280.0,2,1.0,0,1.0,1,1.0 +0,281.0,1,1.0,0,1.0,1,1.0 +0,281.0,2,1.0,0,1.0,1,1.0 +0,282.0,1,1.0,0,1.0,1,1.0 +0,282.0,2,1.0,0,1.0,1,1.0 +0,283.0,1,1.0,0,1.0,1,1.0 +0,283.0,2,1.0,0,1.0,1,1.0 +0,284.0,1,1.0,0,1.0,1,1.0 +0,284.0,2,1.0,0,1.0,1,1.0 +0,285.0,1,1.0,0,1.0,1,1.0 +0,285.0,2,1.0,0,1.0,1,1.0 +0,286.0,1,1.0,0,1.0,1,1.0 +0,286.0,2,1.0,0,1.0,1,1.0 +0,287.0,1,1.0,0,1.0,1,1.0 +0,287.0,2,1.0,0,1.0,1,1.0 +0,288.0,1,1.0,0,1.0,1,1.0 +0,288.0,2,1.0,0,1.0,1,1.0 +0,289.0,1,1.0,0,1.0,1,1.0 +0,289.0,2,1.0,0,1.0,1,1.0 +0,290.0,1,1.0,0,1.0,1,1.0 +0,290.0,2,1.0,0,1.0,1,1.0 +0,291.0,1,1.0,0,1.0,1,1.0 +0,291.0,2,1.0,0,1.0,1,1.0 +0,292.0,1,1.0,0,1.0,1,1.0 +0,292.0,2,1.0,0,1.0,1,1.0 +0,293.0,1,1.0,0,1.0,1,1.0 +0,293.0,2,1.0,0,1.0,1,1.0 +0,294.0,1,1.0,0,1.0,1,1.0 +0,294.0,2,1.0,0,1.0,1,1.0 +0,295.0,1,1.0,0,1.0,1,1.0 +0,295.0,2,1.0,0,1.0,1,1.0 +0,296.0,1,1.0,0,1.0,1,1.0 +0,296.0,2,1.0,0,1.0,1,1.0 +0,297.0,1,1.0,0,1.0,1,1.0 +0,297.0,2,1.0,0,1.0,1,1.0 +0,298.0,1,1.0,0,1.0,1,1.0 +0,298.0,2,1.0,0,1.0,1,1.0 +0,299.0,1,1.0,0,1.0,1,1.0 +0,299.0,2,1.0,0,1.0,1,1.0 +0,300.0,1,1.0,0,1.0,1,1.0 +0,300.0,2,1.0,0,1.0,1,1.0 +0,301.0,1,1.0,0,1.0,1,1.0 +0,301.0,2,1.0,0,1.0,1,1.0 +0,302.0,1,1.0,0,1.0,1,1.0 +0,302.0,2,1.0,0,1.0,1,1.0 +0,303.0,1,1.0,0,1.0,1,1.0 +0,303.0,2,1.0,0,1.0,1,1.0 +0,304.0,1,1.0,0,1.0,1,1.0 +0,304.0,2,1.0,0,1.0,1,1.0 +0,305.0,1,1.0,0,1.0,1,1.0 +0,305.0,2,1.0,0,1.0,1,1.0 +0,306.0,1,1.0,0,1.0,1,1.0 +0,306.0,2,1.0,0,1.0,1,1.0 +0,307.0,1,1.0,0,1.0,1,1.0 +0,307.0,2,1.0,0,1.0,1,1.0 +0,308.0,1,1.0,0,1.0,1,1.0 +0,308.0,2,1.0,0,1.0,1,1.0 +0,309.0,1,1.0,0,1.0,1,1.0 +0,309.0,2,1.0,0,1.0,1,1.0 +0,310.0,1,1.0,0,1.0,1,1.0 +0,310.0,2,1.0,0,1.0,1,1.0 +0,311.0,1,1.0,0,1.0,1,1.0 +0,311.0,2,1.0,0,1.0,1,1.0 +0,312.0,1,1.0,0,1.0,1,1.0 +0,312.0,2,1.0,0,1.0,1,1.0 +0,313.0,1,1.0,0,1.0,1,1.0 +0,313.0,2,1.0,0,1.0,1,1.0 +0,314.0,1,1.0,0,1.0,1,1.0 +0,314.0,2,1.0,0,1.0,1,1.0 +0,315.0,1,1.0,0,1.0,1,1.0 +0,315.0,2,1.0,0,1.0,1,1.0 +0,316.0,1,1.0,0,1.0,1,1.0 +0,316.0,2,1.0,0,1.0,1,1.0 +0,317.0,1,1.0,0,1.0,1,1.0 +0,317.0,2,1.0,0,1.0,1,1.0 +0,318.0,1,1.0,0,1.0,1,1.0 +0,318.0,2,1.0,0,1.0,1,1.0 +0,319.0,1,1.0,0,1.0,1,1.0 +0,319.0,2,1.0,0,1.0,1,1.0 +0,320.0,1,1.0,0,1.0,1,1.0 +0,320.0,2,1.0,0,1.0,1,1.0 +0,321.0,1,1.0,0,1.0,1,1.0 +0,321.0,2,1.0,0,1.0,1,1.0 +0,322.0,1,1.0,0,1.0,1,1.0 +0,322.0,2,1.0,0,1.0,1,1.0 +0,323.0,1,1.0,0,1.0,1,1.0 +0,323.0,2,1.0,0,1.0,1,1.0 +0,324.0,1,1.0,0,1.0,1,1.0 +0,324.0,2,1.0,0,1.0,1,1.0 +0,325.0,1,1.0,0,1.0,1,1.0 +0,325.0,2,1.0,0,1.0,1,1.0 +0,326.0,1,1.0,0,1.0,1,1.0 +0,326.0,2,1.0,0,1.0,1,1.0 +0,327.0,1,1.0,0,1.0,1,1.0 +0,327.0,2,1.0,0,1.0,1,1.0 +0,328.0,1,1.0,0,1.0,1,1.0 +0,328.0,2,1.0,0,1.0,1,1.0 +0,329.0,1,1.0,0,1.0,1,1.0 +0,329.0,2,1.0,0,1.0,1,1.0 +0,330.0,1,1.0,0,1.0,1,1.0 +0,330.0,2,1.0,0,1.0,1,1.0 +0,331.0,1,1.0,0,1.0,1,1.0 +0,331.0,2,1.0,0,1.0,1,1.0 +0,332.0,1,1.0,0,1.0,1,1.0 +0,332.0,2,1.0,0,1.0,1,1.0 +0,333.0,1,1.0,0,1.0,1,1.0 +0,333.0,2,1.0,0,1.0,1,1.0 +0,334.0,1,1.0,0,1.0,1,1.0 +0,334.0,2,1.0,0,1.0,1,1.0 +0,335.0,1,1.0,0,1.0,1,1.0 +0,335.0,2,1.0,0,1.0,1,1.0 +0,336.0,1,1.0,0,1.0,1,1.0 +0,336.0,2,1.0,0,1.0,1,1.0 +0,337.0,1,1.0,0,1.0,1,1.0 +0,337.0,2,1.0,0,1.0,1,1.0 +0,338.0,1,1.0,0,1.0,1,1.0 +0,338.0,2,1.0,0,1.0,1,1.0 +0,339.0,1,1.0,0,1.0,1,1.0 +0,339.0,2,1.0,0,1.0,1,1.0 +0,340.0,1,1.0,0,1.0,1,1.0 +0,340.0,2,1.0,0,1.0,1,1.0 +0,341.0,1,1.0,0,1.0,1,1.0 +0,341.0,2,1.0,0,1.0,1,1.0 +0,342.0,1,1.0,0,1.0,1,1.0 +0,342.0,2,1.0,0,1.0,1,1.0 +0,343.0,1,1.0,0,1.0,1,1.0 +0,343.0,2,1.0,0,1.0,1,1.0 +0,344.0,1,1.0,0,1.0,1,1.0 +0,344.0,2,1.0,0,1.0,1,1.0 +0,345.0,1,1.0,0,1.0,1,1.0 +0,345.0,2,1.0,0,1.0,1,1.0 +0,346.0,1,1.0,0,1.0,1,1.0 +0,346.0,2,1.0,0,1.0,1,1.0 +0,347.0,1,1.0,0,1.0,1,1.0 +0,347.0,2,1.0,0,1.0,1,1.0 +0,348.0,1,1.0,0,1.0,1,1.0 +0,348.0,2,1.0,0,1.0,1,1.0 +0,349.0,1,1.0,0,1.0,1,1.0 +0,349.0,2,1.0,0,1.0,1,1.0 +0,350.0,1,1.0,0,1.0,1,1.0 +0,350.0,2,1.0,0,1.0,1,1.0 +0,351.0,1,1.0,0,1.0,1,1.0 +0,351.0,2,1.0,0,1.0,1,1.0 +0,352.0,1,1.0,0,1.0,1,1.0 +0,352.0,2,1.0,0,1.0,1,1.0 +0,353.0,1,1.0,0,1.0,1,1.0 +0,353.0,2,1.0,0,1.0,1,1.0 +0,354.0,1,1.0,0,1.0,1,1.0 +0,354.0,2,1.0,0,1.0,1,1.0 +0,355.0,1,1.0,0,1.0,1,1.0 +0,355.0,2,1.0,0,1.0,1,1.0 +0,356.0,1,1.0,0,1.0,1,1.0 +0,356.0,2,1.0,0,1.0,1,1.0 +0,357.0,1,1.0,0,1.0,1,1.0 +0,357.0,2,1.0,0,1.0,1,1.0 +0,358.0,1,1.0,0,1.0,1,1.0 +0,358.0,2,1.0,0,1.0,1,1.0 +0,359.0,1,1.0,0,1.0,1,1.0 +0,359.0,2,1.0,0,1.0,1,1.0 +0,360.0,1,1.0,0,1.0,1,1.0 +0,360.0,2,1.0,0,1.0,1,1.0 +0,361.0,1,1.0,0,1.0,1,1.0 +0,361.0,2,1.0,0,1.0,1,1.0 +0,362.0,1,1.0,0,1.0,1,1.0 +0,362.0,2,1.0,0,1.0,1,1.0 +0,363.0,1,1.0,0,1.0,1,1.0 +0,363.0,2,1.0,0,1.0,1,1.0 +0,364.0,1,1.0,0,1.0,1,1.0 +0,364.0,2,1.0,0,1.0,1,1.0 +0,365.0,1,1.0,0,1.0,1,1.0 +0,365.0,2,1.0,0,1.0,1,1.0 +0,366.0,1,1.0,0,1.0,1,1.0 +0,366.0,2,1.0,0,1.0,1,1.0 +0,367.0,1,1.0,0,1.0,1,1.0 +0,367.0,2,1.0,0,1.0,1,1.0 +0,368.0,1,1.0,0,1.0,1,1.0 +0,368.0,2,1.0,0,1.0,1,1.0 +0,369.0,1,1.0,0,1.0,1,1.0 +0,369.0,2,1.0,0,1.0,1,1.0 +0,370.0,1,1.0,0,1.0,1,1.0 +0,370.0,2,1.0,0,1.0,1,1.0 +0,371.0,1,1.0,0,1.0,1,1.0 +0,371.0,2,1.0,0,1.0,1,1.0 +0,372.0,1,1.0,0,1.0,1,1.0 +0,372.0,2,1.0,0,1.0,1,1.0 +0,373.0,1,1.0,0,1.0,1,1.0 +0,373.0,2,1.0,0,1.0,1,1.0 +0,374.0,1,1.0,0,1.0,1,1.0 +0,374.0,2,1.0,0,1.0,1,1.0 +0,375.0,1,1.0,0,1.0,1,1.0 +0,375.0,2,1.0,0,1.0,1,1.0 +0,376.0,1,1.0,0,1.0,1,1.0 +0,376.0,2,1.0,0,1.0,1,1.0 +0,377.0,1,1.0,0,1.0,1,1.0 +0,377.0,2,1.0,0,1.0,1,1.0 +0,378.0,1,1.0,0,1.0,1,1.0 +0,378.0,2,1.0,0,1.0,1,1.0 +0,379.0,1,1.0,0,1.0,1,1.0 +0,379.0,2,1.0,0,1.0,1,1.0 +0,380.0,1,1.0,0,1.0,1,1.0 +0,380.0,2,1.0,0,1.0,1,1.0 +0,381.0,1,1.0,0,1.0,1,1.0 +0,381.0,2,1.0,0,1.0,1,1.0 +0,382.0,1,1.0,0,1.0,1,1.0 +0,382.0,2,1.0,0,1.0,1,1.0 +0,383.0,1,1.0,0,1.0,1,1.0 +0,383.0,2,1.0,0,1.0,1,1.0 +0,384.0,1,1.0,0,1.0,1,1.0 +0,384.0,2,1.0,0,1.0,1,1.0 +0,385.0,1,1.0,0,1.0,1,1.0 +0,385.0,2,1.0,0,1.0,1,1.0 +0,386.0,1,1.0,0,1.0,1,1.0 +0,386.0,2,1.0,0,1.0,1,1.0 +0,387.0,1,1.0,0,1.0,1,1.0 +0,387.0,2,1.0,0,1.0,1,1.0 +0,388.0,1,1.0,0,1.0,1,1.0 +0,388.0,2,1.0,0,1.0,1,1.0 +0,389.0,1,1.0,0,1.0,1,1.0 +0,389.0,2,1.0,0,1.0,1,1.0 +0,390.0,1,1.0,0,1.0,1,1.0 +0,390.0,2,1.0,0,1.0,1,1.0 +0,391.0,1,1.0,0,1.0,1,1.0 +0,391.0,2,1.0,0,1.0,1,1.0 +0,392.0,1,1.0,0,1.0,1,1.0 +0,392.0,2,1.0,0,1.0,1,1.0 +0,393.0,1,1.0,0,1.0,1,1.0 +0,393.0,2,1.0,0,1.0,1,1.0 +0,394.0,1,1.0,0,1.0,1,1.0 +0,394.0,2,1.0,0,1.0,1,1.0 +0,395.0,1,1.0,0,1.0,1,1.0 +0,395.0,2,1.0,0,1.0,1,1.0 +0,396.0,1,1.0,0,1.0,1,1.0 +0,396.0,2,1.0,0,1.0,1,1.0 +0,397.0,1,1.0,0,1.0,1,1.0 +0,397.0,2,1.0,0,1.0,1,1.0 +0,398.0,1,1.0,0,1.0,1,1.0 +0,398.0,2,1.0,0,1.0,1,1.0 +0,399.0,1,1.0,0,1.0,1,1.0 +0,399.0,2,1.0,0,1.0,1,1.0 +0,400.0,1,1.0,0,1.0,1,1.0 +0,400.0,2,1.0,0,1.0,1,1.0 +0,401.0,1,1.0,0,1.0,1,1.0 +0,401.0,2,1.0,0,1.0,1,1.0 +0,402.0,1,1.0,0,1.0,1,1.0 +0,402.0,2,1.0,0,1.0,1,1.0 +0,403.0,1,1.0,0,1.0,1,1.0 +0,403.0,2,1.0,0,1.0,1,1.0 +0,404.0,1,1.0,0,1.0,1,1.0 +0,404.0,2,1.0,0,1.0,1,1.0 +0,405.0,1,1.0,0,1.0,1,1.0 +0,405.0,2,1.0,0,1.0,1,1.0 +0,406.0,1,1.0,0,1.0,1,1.0 +0,406.0,2,1.0,0,1.0,1,1.0 +0,407.0,1,1.0,0,1.0,1,1.0 +0,407.0,2,1.0,0,1.0,1,1.0 +0,408.0,1,1.0,0,1.0,1,1.0 +0,408.0,2,1.0,0,1.0,1,1.0 +0,409.0,1,1.0,0,1.0,1,1.0 +0,409.0,2,1.0,0,1.0,1,1.0 +0,410.0,1,1.0,0,1.0,1,1.0 +0,410.0,2,1.0,0,1.0,1,1.0 +0,411.0,1,1.0,0,1.0,1,1.0 +0,411.0,2,1.0,0,1.0,1,1.0 +0,412.0,1,1.0,0,1.0,1,1.0 +0,412.0,2,1.0,0,1.0,1,1.0 +0,413.0,1,1.0,0,1.0,1,1.0 +0,413.0,2,1.0,0,1.0,1,1.0 +0,414.0,1,1.0,0,1.0,1,1.0 +0,414.0,2,1.0,0,1.0,1,1.0 +0,415.0,1,1.0,0,1.0,1,1.0 +0,415.0,2,1.0,0,1.0,1,1.0 +0,416.0,1,1.0,0,1.0,1,1.0 +0,416.0,2,1.0,0,1.0,1,1.0 +0,417.0,1,1.0,0,1.0,1,1.0 +0,417.0,2,1.0,0,1.0,1,1.0 +0,418.0,1,1.0,0,1.0,1,1.0 +0,418.0,2,1.0,0,1.0,1,1.0 +0,419.0,1,1.0,0,1.0,1,1.0 +0,419.0,2,1.0,0,1.0,1,1.0 +0,420.0,1,1.0,0,1.0,1,1.0 +0,420.0,2,1.0,0,1.0,1,1.0 +0,421.0,1,1.0,0,1.0,1,1.0 +0,421.0,2,1.0,0,1.0,1,1.0 +0,422.0,1,1.0,0,1.0,1,1.0 +0,422.0,2,1.0,0,1.0,1,1.0 +0,423.0,1,1.0,0,1.0,1,1.0 +0,423.0,2,1.0,0,1.0,1,1.0 +0,424.0,1,1.0,0,1.0,1,1.0 +0,424.0,2,1.0,0,1.0,1,1.0 +0,425.0,1,1.0,0,1.0,1,1.0 +0,425.0,2,1.0,0,1.0,1,1.0 +0,426.0,1,1.0,0,1.0,1,1.0 +0,426.0,2,1.0,0,1.0,1,1.0 +0,427.0,1,1.0,0,1.0,1,1.0 +0,427.0,2,1.0,0,1.0,1,1.0 +0,428.0,1,1.0,0,1.0,1,1.0 +0,428.0,2,1.0,0,1.0,1,1.0 +0,429.0,1,1.0,0,1.0,1,1.0 +0,429.0,2,1.0,0,1.0,1,1.0 +0,430.0,1,1.0,0,1.0,1,1.0 +0,430.0,2,1.0,0,1.0,1,1.0 +0,431.0,1,1.0,0,1.0,1,1.0 +0,431.0,2,1.0,0,1.0,1,1.0 +0,432.0,1,1.0,0,1.0,1,1.0 +0,432.0,2,1.0,0,1.0,1,1.0 +0,433.0,1,1.0,0,1.0,1,1.0 +0,433.0,2,1.0,0,1.0,1,1.0 +0,434.0,1,1.0,0,1.0,1,1.0 +0,434.0,2,1.0,0,1.0,1,1.0 +0,435.0,1,1.0,0,1.0,1,1.0 +0,435.0,2,1.0,0,1.0,1,1.0 +0,436.0,1,1.0,0,1.0,1,1.0 +0,436.0,2,1.0,0,1.0,1,1.0 +0,437.0,1,1.0,0,1.0,1,1.0 +0,437.0,2,1.0,0,1.0,1,1.0 +0,438.0,1,1.0,0,1.0,1,1.0 +0,438.0,2,1.0,0,1.0,1,1.0 +0,439.0,1,1.0,0,1.0,1,1.0 +0,439.0,2,1.0,0,1.0,1,1.0 +0,440.0,1,1.0,0,1.0,1,1.0 +0,440.0,2,1.0,0,1.0,1,1.0 +0,441.0,1,1.0,0,1.0,1,1.0 +0,441.0,2,1.0,0,1.0,1,1.0 +0,442.0,1,1.0,0,1.0,1,1.0 +0,442.0,2,1.0,0,1.0,1,1.0 +0,443.0,1,1.0,0,1.0,1,1.0 +0,443.0,2,1.0,0,1.0,1,1.0 +0,444.0,1,1.0,0,1.0,1,1.0 +0,444.0,2,1.0,0,1.0,1,1.0 +0,445.0,1,1.0,0,1.0,1,1.0 +0,445.0,2,1.0,0,1.0,1,1.0 +0,446.0,1,1.0,0,1.0,1,1.0 +0,446.0,2,1.0,0,1.0,1,1.0 +0,447.0,1,1.0,0,1.0,1,1.0 +0,447.0,2,1.0,0,1.0,1,1.0 +0,448.0,1,1.0,0,1.0,1,1.0 +0,448.0,2,1.0,0,1.0,1,1.0 +0,449.0,1,1.0,0,1.0,1,1.0 +0,449.0,2,1.0,0,1.0,1,1.0 +0,450.0,1,1.0,0,1.0,1,1.0 +0,450.0,2,1.0,0,1.0,1,1.0 +0,451.0,1,1.0,0,1.0,1,1.0 +0,451.0,2,1.0,0,1.0,1,1.0 +0,452.0,1,1.0,0,1.0,1,1.0 +0,452.0,2,1.0,0,1.0,1,1.0 +0,453.0,1,1.0,0,1.0,1,1.0 +0,453.0,2,1.0,0,1.0,1,1.0 +0,454.0,1,1.0,0,1.0,1,1.0 +0,454.0,2,1.0,0,1.0,1,1.0 +0,455.0,1,1.0,0,1.0,1,1.0 +0,455.0,2,1.0,0,1.0,1,1.0 +0,456.0,1,1.0,0,1.0,1,1.0 +0,456.0,2,1.0,0,1.0,1,1.0 +0,457.0,1,1.0,0,1.0,1,1.0 +0,457.0,2,1.0,0,1.0,1,1.0 +0,458.0,1,1.0,0,1.0,1,1.0 +0,458.0,2,1.0,0,1.0,1,1.0 +0,459.0,1,1.0,0,1.0,1,1.0 +0,459.0,2,1.0,0,1.0,1,1.0 +0,460.0,1,1.0,0,1.0,1,1.0 +0,460.0,2,1.0,0,1.0,1,1.0 +0,461.0,1,1.0,0,1.0,1,1.0 +0,461.0,2,1.0,0,1.0,1,1.0 +0,462.0,1,1.0,0,1.0,1,1.0 +0,462.0,2,1.0,0,1.0,1,1.0 +0,463.0,1,1.0,0,1.0,1,1.0 +0,463.0,2,1.0,0,1.0,1,1.0 +0,464.0,1,1.0,0,1.0,1,1.0 +0,464.0,2,1.0,0,1.0,1,1.0 +0,465.0,1,1.0,0,1.0,1,1.0 +0,465.0,2,1.0,0,1.0,1,1.0 +0,466.0,1,1.0,0,1.0,1,1.0 +0,466.0,2,1.0,0,1.0,1,1.0 +0,467.0,1,1.0,0,1.0,1,1.0 +0,467.0,2,1.0,0,1.0,1,1.0 +0,468.0,1,1.0,0,1.0,1,1.0 +0,468.0,2,1.0,0,1.0,1,1.0 +0,469.0,1,1.0,0,1.0,1,1.0 +0,469.0,2,1.0,0,1.0,1,1.0 +0,470.0,1,1.0,0,1.0,1,1.0 +0,470.0,2,1.0,0,1.0,1,1.0 +0,471.0,1,1.0,0,1.0,1,1.0 +0,471.0,2,1.0,0,1.0,1,1.0 +0,472.0,1,1.0,0,1.0,1,1.0 +0,472.0,2,1.0,0,1.0,1,1.0 +0,473.0,1,1.0,0,1.0,1,1.0 +0,473.0,2,1.0,0,1.0,1,1.0 +0,474.0,1,1.0,0,1.0,1,1.0 +0,474.0,2,1.0,0,1.0,1,1.0 +0,475.0,1,1.0,0,1.0,1,1.0 +0,475.0,2,1.0,0,1.0,1,1.0 +0,476.0,1,1.0,0,1.0,1,1.0 +0,476.0,2,1.0,0,1.0,1,1.0 +0,477.0,1,1.0,0,1.0,1,1.0 +0,477.0,2,1.0,0,1.0,1,1.0 +0,478.0,1,1.0,0,1.0,1,1.0 +0,478.0,2,1.0,0,1.0,1,1.0 +0,479.0,1,1.0,0,1.0,1,1.0 +0,479.0,2,1.0,0,1.0,1,1.0 +0,480.0,1,1.0,0,1.0,1,1.0 +0,480.0,2,1.0,0,1.0,1,1.0 +0,481.0,1,1.0,0,1.0,1,1.0 +0,481.0,2,1.0,0,1.0,1,1.0 +0,482.0,1,1.0,0,1.0,1,1.0 +0,482.0,2,1.0,0,1.0,1,1.0 +0,483.0,1,1.0,0,1.0,1,1.0 +0,483.0,2,1.0,0,1.0,1,1.0 +0,484.0,1,1.0,0,1.0,1,1.0 +0,484.0,2,1.0,0,1.0,1,1.0 +0,485.0,1,1.0,0,1.0,1,1.0 +0,485.0,2,1.0,0,1.0,1,1.0 +0,486.0,1,1.0,0,1.0,1,1.0 +0,486.0,2,1.0,0,1.0,1,1.0 +0,487.0,1,1.0,0,1.0,1,1.0 +0,487.0,2,1.0,0,1.0,1,1.0 +0,488.0,1,1.0,0,1.0,1,1.0 +0,488.0,2,1.0,0,1.0,1,1.0 +0,489.0,1,1.0,0,1.0,1,1.0 +0,489.0,2,1.0,0,1.0,1,1.0 +0,490.0,1,1.0,0,1.0,1,1.0 +0,490.0,2,1.0,0,1.0,1,1.0 +0,491.0,1,1.0,0,1.0,1,1.0 +0,491.0,2,1.0,0,1.0,1,1.0 +0,492.0,1,1.0,0,1.0,1,1.0 +0,492.0,2,1.0,0,1.0,1,1.0 +0,493.0,1,1.0,0,1.0,1,1.0 +0,493.0,2,1.0,0,1.0,1,1.0 +0,494.0,1,1.0,0,1.0,1,1.0 +0,494.0,2,1.0,0,1.0,1,1.0 +0,495.0,1,1.0,0,1.0,1,1.0 +0,495.0,2,1.0,0,1.0,1,1.0 +0,496.0,1,1.0,0,1.0,1,1.0 +0,496.0,2,1.0,0,1.0,1,1.0 +0,497.0,1,1.0,0,1.0,1,1.0 +0,497.0,2,1.0,0,1.0,1,1.0 +0,498.0,1,1.0,0,1.0,1,1.0 +0,498.0,2,1.0,0,1.0,1,1.0 +0,499.0,1,1.0,0,1.0,1,1.0 +0,499.0,2,1.0,0,1.0,1,1.0 +0,500.0,1,1.0,0,1.0,1,1.0 +0,500.0,2,1.0,0,1.0,1,1.0 +0,501.0,1,1.0,0,1.0,1,1.0 +0,501.0,2,1.0,0,1.0,1,1.0 +0,502.0,1,1.0,0,1.0,1,1.0 +0,502.0,2,1.0,0,1.0,1,1.0 +0,503.0,1,1.0,0,1.0,1,1.0 +0,503.0,2,1.0,0,1.0,1,1.0 +0,504.0,1,1.0,0,1.0,1,1.0 +0,504.0,2,1.0,0,1.0,1,1.0 +0,505.0,1,1.0,0,1.0,1,1.0 +0,505.0,2,1.0,0,1.0,1,1.0 +0,506.0,1,1.0,0,1.0,1,1.0 +0,506.0,2,1.0,0,1.0,1,1.0 +0,507.0,1,1.0,0,1.0,1,1.0 +0,507.0,2,1.0,0,1.0,1,1.0 +0,508.0,1,1.0,0,1.0,1,1.0 +0,508.0,2,1.0,0,1.0,1,1.0 +0,509.0,1,1.0,0,1.0,1,1.0 +0,509.0,2,1.0,0,1.0,1,1.0 +0,510.0,1,1.0,0,1.0,1,1.0 +0,510.0,2,1.0,0,1.0,1,1.0 +0,511.0,1,1.0,0,1.0,1,1.0 +0,511.0,2,1.0,0,1.0,1,1.0 +0,512.0,1,1.0,0,1.0,1,1.0 +0,512.0,2,1.0,0,1.0,1,1.0 +0,513.0,1,1.0,0,1.0,1,1.0 +0,513.0,2,1.0,0,1.0,1,1.0 +0,514.0,1,1.0,0,1.0,1,1.0 +0,514.0,2,1.0,0,1.0,1,1.0 +0,515.0,1,1.0,0,1.0,1,1.0 +0,515.0,2,1.0,0,1.0,1,1.0 +0,516.0,1,1.0,0,1.0,1,1.0 +0,516.0,2,1.0,0,1.0,1,1.0 +0,517.0,1,1.0,0,1.0,1,1.0 +0,517.0,2,1.0,0,1.0,1,1.0 +0,518.0,1,1.0,0,1.0,1,1.0 +0,518.0,2,1.0,0,1.0,1,1.0 +0,519.0,1,1.0,0,1.0,1,1.0 +0,519.0,2,1.0,0,1.0,1,1.0 +0,520.0,1,1.0,0,1.0,1,1.0 +0,520.0,2,1.0,0,1.0,1,1.0 +0,521.0,1,1.0,0,1.0,1,1.0 +0,521.0,2,1.0,0,1.0,1,1.0 +0,522.0,1,1.0,0,1.0,1,1.0 +0,522.0,2,1.0,0,1.0,1,1.0 +0,523.0,1,1.0,0,1.0,1,1.0 +0,523.0,2,1.0,0,1.0,1,1.0 +0,524.0,1,1.0,0,1.0,1,1.0 +0,524.0,2,1.0,0,1.0,1,1.0 +0,525.0,1,1.0,0,1.0,1,1.0 +0,525.0,2,1.0,0,1.0,1,1.0 +0,526.0,1,1.0,0,1.0,1,1.0 +0,526.0,2,1.0,0,1.0,1,1.0 +0,527.0,1,1.0,0,1.0,1,1.0 +0,527.0,2,1.0,0,1.0,1,1.0 +0,528.0,1,1.0,0,1.0,1,1.0 +0,528.0,2,1.0,0,1.0,1,1.0 +0,529.0,1,1.0,0,1.0,1,1.0 +0,529.0,2,1.0,0,1.0,1,1.0 +0,530.0,1,1.0,0,1.0,1,1.0 +0,530.0,2,1.0,0,1.0,1,1.0 +0,531.0,1,1.0,0,1.0,1,1.0 +0,531.0,2,1.0,0,1.0,1,1.0 +0,532.0,1,1.0,0,1.0,1,1.0 +0,532.0,2,1.0,0,1.0,1,1.0 +0,533.0,1,1.0,0,1.0,1,1.0 +0,533.0,2,1.0,0,1.0,1,1.0 +0,534.0,1,1.0,0,1.0,1,1.0 +0,534.0,2,1.0,0,1.0,1,1.0 +0,535.0,1,1.0,0,1.0,1,1.0 +0,535.0,2,1.0,0,1.0,1,1.0 +0,536.0,1,1.0,0,1.0,1,1.0 +0,536.0,2,1.0,0,1.0,1,1.0 +0,537.0,1,1.0,0,1.0,1,1.0 +0,537.0,2,1.0,0,1.0,1,1.0 +0,538.0,1,1.0,0,1.0,1,1.0 +0,538.0,2,1.0,0,1.0,1,1.0 +0,539.0,1,1.0,0,1.0,1,1.0 +0,539.0,2,1.0,0,1.0,1,1.0 +0,540.0,1,1.0,0,1.0,1,1.0 +0,540.0,2,1.0,0,1.0,1,1.0 +0,541.0,1,1.0,0,1.0,1,1.0 +0,541.0,2,1.0,0,1.0,1,1.0 +0,542.0,1,1.0,0,1.0,1,1.0 +0,542.0,2,1.0,0,1.0,1,1.0 +0,543.0,1,1.0,0,1.0,1,1.0 +0,543.0,2,1.0,0,1.0,1,1.0 +0,544.0,1,1.0,0,1.0,1,1.0 +0,544.0,2,1.0,0,1.0,1,1.0 +0,545.0,1,1.0,0,1.0,1,1.0 +0,545.0,2,1.0,0,1.0,1,1.0 +0,546.0,1,1.0,0,1.0,1,1.0 +0,546.0,2,1.0,0,1.0,1,1.0 +0,547.0,1,1.0,0,1.0,1,1.0 +0,547.0,2,1.0,0,1.0,1,1.0 +0,548.0,1,1.0,0,1.0,1,1.0 +0,548.0,2,1.0,0,1.0,1,1.0 +0,549.0,1,1.0,0,1.0,1,1.0 +0,549.0,2,1.0,0,1.0,1,1.0 +0,550.0,1,1.0,0,1.0,1,1.0 +0,550.0,2,1.0,0,1.0,1,1.0 +0,551.0,1,1.0,0,1.0,1,1.0 +0,551.0,2,1.0,0,1.0,1,1.0 +0,552.0,1,1.0,0,1.0,1,1.0 +0,552.0,2,1.0,0,1.0,1,1.0 +0,553.0,1,1.0,0,1.0,1,1.0 +0,553.0,2,1.0,0,1.0,1,1.0 +0,554.0,1,1.0,0,1.0,1,1.0 +0,554.0,2,1.0,0,1.0,1,1.0 +0,555.0,1,1.0,0,1.0,1,1.0 +0,555.0,2,1.0,0,1.0,1,1.0 +0,556.0,1,1.0,0,1.0,1,1.0 +0,556.0,2,1.0,0,1.0,1,1.0 +0,557.0,1,1.0,0,1.0,1,1.0 +0,557.0,2,1.0,0,1.0,1,1.0 +0,558.0,1,1.0,0,1.0,1,1.0 +0,558.0,2,1.0,0,1.0,1,1.0 +0,559.0,1,1.0,0,1.0,1,1.0 +0,559.0,2,1.0,0,1.0,1,1.0 +0,560.0,1,1.0,0,1.0,1,1.0 +0,560.0,2,1.0,0,1.0,1,1.0 +0,561.0,1,1.0,0,1.0,1,1.0 +0,561.0,2,1.0,0,1.0,1,1.0 +0,562.0,1,1.0,0,1.0,1,1.0 +0,562.0,2,1.0,0,1.0,1,1.0 +0,563.0,1,1.0,0,1.0,1,1.0 +0,563.0,2,1.0,0,1.0,1,1.0 +0,564.0,1,1.0,0,1.0,1,1.0 +0,564.0,2,1.0,0,1.0,1,1.0 +0,565.0,1,1.0,0,1.0,1,1.0 +0,565.0,2,1.0,0,1.0,1,1.0 +0,566.0,1,1.0,0,1.0,1,1.0 +0,566.0,2,1.0,0,1.0,1,1.0 +0,567.0,1,1.0,0,1.0,1,1.0 +0,567.0,2,1.0,0,1.0,1,1.0 +0,568.0,1,1.0,0,1.0,1,1.0 +0,568.0,2,1.0,0,1.0,1,1.0 +0,569.0,1,1.0,0,1.0,1,1.0 +0,569.0,2,1.0,0,1.0,1,1.0 +0,570.0,1,1.0,0,1.0,1,1.0 +0,570.0,2,1.0,0,1.0,1,1.0 +0,571.0,1,1.0,0,1.0,1,1.0 +0,571.0,2,1.0,0,1.0,1,1.0 +0,572.0,1,1.0,0,1.0,1,1.0 +0,572.0,2,1.0,0,1.0,1,1.0 +0,573.0,1,1.0,0,1.0,1,1.0 +0,573.0,2,1.0,0,1.0,1,1.0 +0,574.0,1,1.0,0,1.0,1,1.0 +0,574.0,2,1.0,0,1.0,1,1.0 +0,575.0,1,1.0,0,1.0,1,1.0 +0,575.0,2,1.0,0,1.0,1,1.0 +0,576.0,1,1.0,0,1.0,1,1.0 +0,576.0,2,1.0,0,1.0,1,1.0 +0,577.0,1,1.0,0,1.0,1,1.0 +0,577.0,2,1.0,0,1.0,1,1.0 +0,578.0,1,1.0,0,1.0,1,1.0 +0,578.0,2,1.0,0,1.0,1,1.0 +0,579.0,1,1.0,0,1.0,1,1.0 +0,579.0,2,1.0,0,1.0,1,1.0 +0,580.0,1,1.0,0,1.0,1,1.0 +0,580.0,2,1.0,0,1.0,1,1.0 +0,581.0,1,1.0,0,1.0,1,1.0 +0,581.0,2,1.0,0,1.0,1,1.0 +0,582.0,1,1.0,0,1.0,1,1.0 +0,582.0,2,1.0,0,1.0,1,1.0 +0,583.0,1,1.0,0,1.0,1,1.0 +0,583.0,2,1.0,0,1.0,1,1.0 +0,584.0,1,1.0,0,1.0,1,1.0 +0,584.0,2,1.0,0,1.0,1,1.0 +0,585.0,1,1.0,0,1.0,1,1.0 +0,585.0,2,1.0,0,1.0,1,1.0 +0,586.0,1,1.0,0,1.0,1,1.0 +0,586.0,2,1.0,0,1.0,1,1.0 +0,587.0,1,1.0,0,1.0,1,1.0 +0,587.0,2,1.0,0,1.0,1,1.0 +0,588.0,1,1.0,0,1.0,1,1.0 +0,588.0,2,1.0,0,1.0,1,1.0 +0,589.0,1,1.0,0,1.0,1,1.0 +0,589.0,2,1.0,0,1.0,1,1.0 +0,590.0,1,1.0,0,1.0,1,1.0 +0,590.0,2,1.0,0,1.0,1,1.0 +0,591.0,1,1.0,0,1.0,1,1.0 +0,591.0,2,1.0,0,1.0,1,1.0 +0,592.0,1,1.0,0,1.0,1,1.0 +0,592.0,2,1.0,0,1.0,1,1.0 +0,593.0,1,1.0,0,1.0,1,1.0 +0,593.0,2,1.0,0,1.0,1,1.0 +0,594.0,1,1.0,0,1.0,1,1.0 +0,594.0,2,1.0,0,1.0,1,1.0 +0,595.0,1,1.0,0,1.0,1,1.0 +0,595.0,2,1.0,0,1.0,1,1.0 +0,596.0,1,1.0,0,1.0,1,1.0 +0,596.0,2,1.0,0,1.0,1,1.0 +0,597.0,1,1.0,0,1.0,1,1.0 +0,597.0,2,1.0,0,1.0,1,1.0 +0,598.0,1,1.0,0,1.0,1,1.0 +0,598.0,2,1.0,0,1.0,1,1.0 +0,599.0,1,1.0,0,1.0,1,1.0 +0,599.0,2,1.0,0,1.0,1,1.0 +0,600.0,1,1.0,0,1.0,1,1.0 +0,600.0,2,1.0,0,1.0,1,1.0 +0,601.0,1,1.0,0,1.0,1,1.0 +0,601.0,2,1.0,0,1.0,1,1.0 +0,602.0,1,1.0,0,1.0,1,1.0 +0,602.0,2,1.0,0,1.0,1,1.0 +0,603.0,1,1.0,0,1.0,1,1.0 +0,603.0,2,1.0,0,1.0,1,1.0 +0,604.0,1,1.0,0,1.0,1,1.0 +0,604.0,2,1.0,0,1.0,1,1.0 +0,605.0,1,1.0,0,1.0,1,1.0 +0,605.0,2,1.0,0,1.0,1,1.0 +0,606.0,1,1.0,0,1.0,1,1.0 +0,606.0,2,1.0,0,1.0,1,1.0 +0,607.0,1,1.0,0,1.0,1,1.0 +0,607.0,2,1.0,0,1.0,1,1.0 +0,608.0,1,1.0,0,1.0,1,1.0 +0,608.0,2,1.0,0,1.0,1,1.0 +0,609.0,1,1.0,0,1.0,1,1.0 +0,609.0,2,1.0,0,1.0,1,1.0 +0,610.0,1,1.0,0,1.0,1,1.0 +0,610.0,2,1.0,0,1.0,1,1.0 +0,611.0,1,1.0,0,1.0,1,1.0 +0,611.0,2,1.0,0,1.0,1,1.0 +0,612.0,1,1.0,0,1.0,1,1.0 +0,612.0,2,1.0,0,1.0,1,1.0 +0,613.0,1,1.0,0,1.0,1,1.0 +0,613.0,2,1.0,0,1.0,1,1.0 +0,614.0,1,1.0,0,1.0,1,1.0 +0,614.0,2,1.0,0,1.0,1,1.0 +0,615.0,1,1.0,0,1.0,1,1.0 +0,615.0,2,1.0,0,1.0,1,1.0 +0,616.0,1,1.0,0,1.0,1,1.0 +0,616.0,2,1.0,0,1.0,1,1.0 +0,617.0,1,1.0,0,1.0,1,1.0 +0,617.0,2,1.0,0,1.0,1,1.0 +0,618.0,1,1.0,0,1.0,1,1.0 +0,618.0,2,1.0,0,1.0,1,1.0 +0,619.0,1,1.0,0,1.0,1,1.0 +0,619.0,2,1.0,0,1.0,1,1.0 +0,620.0,1,1.0,0,1.0,1,1.0 +0,620.0,2,1.0,0,1.0,1,1.0 +0,621.0,1,1.0,0,1.0,1,1.0 +0,621.0,2,1.0,0,1.0,1,1.0 +0,622.0,1,1.0,0,1.0,1,1.0 +0,622.0,2,1.0,0,1.0,1,1.0 +0,623.0,1,1.0,0,1.0,1,1.0 +0,623.0,2,1.0,0,1.0,1,1.0 +0,624.0,1,1.0,0,1.0,1,1.0 +0,624.0,2,1.0,0,1.0,1,1.0 +0,625.0,1,1.0,0,1.0,1,1.0 +0,625.0,2,1.0,0,1.0,1,1.0 +0,626.0,1,1.0,0,1.0,1,1.0 +0,626.0,2,1.0,0,1.0,1,1.0 +0,627.0,1,1.0,0,1.0,1,1.0 +0,627.0,2,1.0,0,1.0,1,1.0 +0,628.0,1,1.0,0,1.0,1,1.0 +0,628.0,2,1.0,0,1.0,1,1.0 +0,629.0,1,1.0,0,1.0,1,1.0 +0,629.0,2,1.0,0,1.0,1,1.0 +0,630.0,1,1.0,0,1.0,1,1.0 +0,630.0,2,1.0,0,1.0,1,1.0 +0,631.0,1,1.0,0,1.0,1,1.0 +0,631.0,2,1.0,0,1.0,1,1.0 +0,632.0,1,1.0,0,1.0,1,1.0 +0,632.0,2,1.0,0,1.0,1,1.0 +0,633.0,1,1.0,0,1.0,1,1.0 +0,633.0,2,1.0,0,1.0,1,1.0 +0,634.0,1,1.0,0,1.0,1,1.0 +0,634.0,2,1.0,0,1.0,1,1.0 +0,635.0,1,1.0,0,1.0,1,1.0 +0,635.0,2,1.0,0,1.0,1,1.0 +0,636.0,1,1.0,0,1.0,1,1.0 +0,636.0,2,1.0,0,1.0,1,1.0 +0,637.0,1,1.0,0,1.0,1,1.0 +0,637.0,2,1.0,0,1.0,1,1.0 +0,638.0,1,1.0,0,1.0,1,1.0 +0,638.0,2,1.0,0,1.0,1,1.0 +0,639.0,1,1.0,0,1.0,1,1.0 +0,639.0,2,1.0,0,1.0,1,1.0 +0,640.0,1,1.0,0,1.0,1,1.0 +0,640.0,2,1.0,0,1.0,1,1.0 +0,641.0,1,1.0,0,1.0,1,1.0 +0,641.0,2,1.0,0,1.0,1,1.0 +0,642.0,1,1.0,0,1.0,1,1.0 +0,642.0,2,1.0,0,1.0,1,1.0 +0,643.0,1,1.0,0,1.0,1,1.0 +0,643.0,2,1.0,0,1.0,1,1.0 +0,644.0,1,1.0,0,1.0,1,1.0 +0,644.0,2,1.0,0,1.0,1,1.0 +0,645.0,1,1.0,0,1.0,1,1.0 +0,645.0,2,1.0,0,1.0,1,1.0 +0,646.0,1,1.0,0,1.0,1,1.0 +0,646.0,2,1.0,0,1.0,1,1.0 +0,647.0,1,1.0,0,1.0,1,1.0 +0,647.0,2,1.0,0,1.0,1,1.0 +0,648.0,1,1.0,0,1.0,1,1.0 +0,648.0,2,1.0,0,1.0,1,1.0 +0,649.0,1,1.0,0,1.0,1,1.0 +0,649.0,2,1.0,0,1.0,1,1.0 +0,650.0,1,1.0,0,1.0,1,1.0 +0,650.0,2,1.0,0,1.0,1,1.0 +0,651.0,1,1.0,0,1.0,1,1.0 +0,651.0,2,1.0,0,1.0,1,1.0 +0,652.0,1,1.0,0,1.0,1,1.0 +0,652.0,2,1.0,0,1.0,1,1.0 +0,653.0,1,1.0,0,1.0,1,1.0 +0,653.0,2,1.0,0,1.0,1,1.0 +0,654.0,1,1.0,0,1.0,1,1.0 +0,654.0,2,1.0,0,1.0,1,1.0 +0,655.0,1,1.0,0,1.0,1,1.0 +0,655.0,2,1.0,0,1.0,1,1.0 +0,656.0,1,1.0,0,1.0,1,1.0 +0,656.0,2,1.0,0,1.0,1,1.0 +0,657.0,1,1.0,0,1.0,1,1.0 +0,657.0,2,1.0,0,1.0,1,1.0 +0,658.0,1,1.0,0,1.0,1,1.0 +0,658.0,2,1.0,0,1.0,1,1.0 +0,659.0,1,1.0,0,1.0,1,1.0 +0,659.0,2,1.0,0,1.0,1,1.0 +0,660.0,1,1.0,0,1.0,1,1.0 +0,660.0,2,1.0,0,1.0,1,1.0 +0,661.0,1,1.0,0,1.0,1,1.0 +0,661.0,2,1.0,0,1.0,1,1.0 +0,662.0,1,1.0,0,1.0,1,1.0 +0,662.0,2,1.0,0,1.0,1,1.0 +0,663.0,1,1.0,0,1.0,1,1.0 +0,663.0,2,1.0,0,1.0,1,1.0 +0,664.0,1,1.0,0,1.0,1,1.0 +0,664.0,2,1.0,0,1.0,1,1.0 +0,665.0,1,1.0,0,1.0,1,1.0 +0,665.0,2,1.0,0,1.0,1,1.0 +0,666.0,1,1.0,0,1.0,1,1.0 +0,666.0,2,1.0,0,1.0,1,1.0 +0,667.0,1,1.0,0,1.0,1,1.0 +0,667.0,2,1.0,0,1.0,1,1.0 +0,668.0,1,1.0,0,1.0,1,1.0 +0,668.0,2,1.0,0,1.0,1,1.0 +0,669.0,1,1.0,0,1.0,1,1.0 +0,669.0,2,1.0,0,1.0,1,1.0 +0,670.0,1,1.0,0,1.0,1,1.0 +0,670.0,2,1.0,0,1.0,1,1.0 +0,671.0,1,1.0,0,1.0,1,1.0 +0,671.0,2,1.0,0,1.0,1,1.0 +0,672.0,1,1.0,0,1.0,1,1.0 +0,672.0,2,1.0,0,1.0,1,1.0 +0,673.0,1,1.0,0,1.0,1,1.0 +0,673.0,2,1.0,0,1.0,1,1.0 +0,674.0,1,1.0,0,1.0,1,1.0 +0,674.0,2,1.0,0,1.0,1,1.0 +0,675.0,1,1.0,0,1.0,1,1.0 +0,675.0,2,1.0,0,1.0,1,1.0 +0,676.0,1,1.0,0,1.0,1,1.0 +0,676.0,2,1.0,0,1.0,1,1.0 +0,677.0,1,1.0,0,1.0,1,1.0 +0,677.0,2,1.0,0,1.0,1,1.0 +0,678.0,1,1.0,0,1.0,1,1.0 +0,678.0,2,1.0,0,1.0,1,1.0 +0,679.0,1,1.0,0,1.0,1,1.0 +0,679.0,2,1.0,0,1.0,1,1.0 +0,680.0,1,1.0,0,1.0,1,1.0 +0,680.0,2,1.0,0,1.0,1,1.0 +0,681.0,1,1.0,0,1.0,1,1.0 +0,681.0,2,1.0,0,1.0,1,1.0 +0,682.0,1,1.0,0,1.0,1,1.0 +0,682.0,2,1.0,0,1.0,1,1.0 +0,683.0,1,1.0,0,1.0,1,1.0 +0,683.0,2,1.0,0,1.0,1,1.0 +0,684.0,1,1.0,0,1.0,1,1.0 +0,684.0,2,1.0,0,1.0,1,1.0 +0,685.0,1,1.0,0,1.0,1,1.0 +0,685.0,2,1.0,0,1.0,1,1.0 +0,686.0,1,1.0,0,1.0,1,1.0 +0,686.0,2,1.0,0,1.0,1,1.0 +0,687.0,1,1.0,0,1.0,1,1.0 +0,687.0,2,1.0,0,1.0,1,1.0 +0,688.0,1,1.0,0,1.0,1,1.0 +0,688.0,2,1.0,0,1.0,1,1.0 +0,689.0,1,1.0,0,1.0,1,1.0 +0,689.0,2,1.0,0,1.0,1,1.0 +0,690.0,1,1.0,0,1.0,1,1.0 +0,690.0,2,1.0,0,1.0,1,1.0 +0,691.0,1,1.0,0,1.0,1,1.0 +0,691.0,2,1.0,0,1.0,1,1.0 +0,692.0,1,1.0,0,1.0,1,1.0 +0,692.0,2,1.0,0,1.0,1,1.0 +0,693.0,1,1.0,0,1.0,1,1.0 +0,693.0,2,1.0,0,1.0,1,1.0 +0,694.0,1,1.0,0,1.0,1,1.0 +0,694.0,2,1.0,0,1.0,1,1.0 +0,695.0,1,1.0,0,1.0,1,1.0 +0,695.0,2,1.0,0,1.0,1,1.0 +0,696.0,1,1.0,0,1.0,1,1.0 +0,696.0,2,1.0,0,1.0,1,1.0 +0,697.0,1,1.0,0,1.0,1,1.0 +0,697.0,2,1.0,0,1.0,1,1.0 +0,698.0,1,1.0,0,1.0,1,1.0 +0,698.0,2,1.0,0,1.0,1,1.0 +0,699.0,1,1.0,0,1.0,1,1.0 +0,699.0,2,1.0,0,1.0,1,1.0 +0,700.0,1,1.0,0,1.0,1,1.0 +0,700.0,2,1.0,0,1.0,1,1.0 +0,701.0,1,1.0,0,1.0,1,1.0 +0,701.0,2,1.0,0,1.0,1,1.0 +0,702.0,1,1.0,0,1.0,1,1.0 +0,702.0,2,1.0,0,1.0,1,1.0 +0,703.0,1,1.0,0,1.0,1,1.0 +0,703.0,2,1.0,0,1.0,1,1.0 +0,704.0,1,1.0,0,1.0,1,1.0 +0,704.0,2,1.0,0,1.0,1,1.0 +0,705.0,1,1.0,0,1.0,1,1.0 +0,705.0,2,1.0,0,1.0,1,1.0 +0,706.0,1,1.0,0,1.0,1,1.0 +0,706.0,2,1.0,0,1.0,1,1.0 +0,707.0,1,1.0,0,1.0,1,1.0 +0,707.0,2,1.0,0,1.0,1,1.0 +0,708.0,1,1.0,0,1.0,1,1.0 +0,708.0,2,1.0,0,1.0,1,1.0 +0,709.0,1,1.0,0,1.0,1,1.0 +0,709.0,2,1.0,0,1.0,1,1.0 +0,710.0,1,1.0,0,1.0,1,1.0 +0,710.0,2,1.0,0,1.0,1,1.0 +0,711.0,1,1.0,0,1.0,1,1.0 +0,711.0,2,1.0,0,1.0,1,1.0 +0,712.0,1,1.0,0,1.0,1,1.0 +0,712.0,2,1.0,0,1.0,1,1.0 +0,713.0,1,1.0,0,1.0,1,1.0 +0,713.0,2,1.0,0,1.0,1,1.0 +0,714.0,1,1.0,0,1.0,1,1.0 +0,714.0,2,1.0,0,1.0,1,1.0 +0,715.0,1,1.0,0,1.0,1,1.0 +0,715.0,2,1.0,0,1.0,1,1.0 +0,716.0,1,1.0,0,1.0,1,1.0 +0,716.0,2,1.0,0,1.0,1,1.0 +0,717.0,1,1.0,0,1.0,1,1.0 +0,717.0,2,1.0,0,1.0,1,1.0 +0,718.0,1,1.0,0,1.0,1,1.0 +0,718.0,2,1.0,0,1.0,1,1.0 +0,719.0,1,1.0,0,1.0,1,1.0 +0,719.0,2,1.0,0,1.0,1,1.0 +0,720.0,1,1.0,0,1.0,1,1.0 +0,720.0,2,1.0,0,1.0,1,1.0 +0,721.0,1,1.0,0,1.0,1,1.0 +0,721.0,2,1.0,0,1.0,1,1.0 +0,722.0,1,1.0,0,1.0,1,1.0 +0,722.0,2,1.0,0,1.0,1,1.0 +0,723.0,1,1.0,0,1.0,1,1.0 +0,723.0,2,1.0,0,1.0,1,1.0 +0,724.0,1,1.0,0,1.0,1,1.0 +0,724.0,2,1.0,0,1.0,1,1.0 +0,725.0,1,1.0,0,1.0,1,1.0 +0,725.0,2,1.0,0,1.0,1,1.0 +0,726.0,1,1.0,0,1.0,1,1.0 +0,726.0,2,1.0,0,1.0,1,1.0 +0,727.0,1,1.0,0,1.0,1,1.0 +0,727.0,2,1.0,0,1.0,1,1.0 +0,728.0,1,1.0,0,1.0,1,1.0 +0,728.0,2,1.0,0,1.0,1,1.0 +0,729.0,1,1.0,0,1.0,1,1.0 +0,729.0,2,1.0,0,1.0,1,1.0 +0,730.0,1,1.0,0,1.0,1,1.0 +0,730.0,2,1.0,0,1.0,1,1.0 +0,731.0,1,1.0,0,1.0,1,1.0 +0,731.0,2,1.0,0,1.0,1,1.0 +0,732.0,1,1.0,0,1.0,1,1.0 +0,732.0,2,1.0,0,1.0,1,1.0 +0,733.0,1,1.0,0,1.0,1,1.0 +0,733.0,2,1.0,0,1.0,1,1.0 +0,734.0,1,1.0,0,1.0,1,1.0 +0,734.0,2,1.0,0,1.0,1,1.0 +0,735.0,1,1.0,0,1.0,1,1.0 +0,735.0,2,1.0,0,1.0,1,1.0 +0,736.0,1,1.0,0,1.0,1,1.0 +0,736.0,2,1.0,0,1.0,1,1.0 +0,737.0,1,1.0,0,1.0,1,1.0 +0,737.0,2,1.0,0,1.0,1,1.0 +0,738.0,1,1.0,0,1.0,1,1.0 +0,738.0,2,1.0,0,1.0,1,1.0 +0,739.0,1,1.0,0,1.0,1,1.0 +0,739.0,2,1.0,0,1.0,1,1.0 +0,740.0,1,1.0,0,1.0,1,1.0 +0,740.0,2,1.0,0,1.0,1,1.0 +0,741.0,1,1.0,0,1.0,1,1.0 +0,741.0,2,1.0,0,1.0,1,1.0 +0,742.0,1,1.0,0,1.0,1,1.0 +0,742.0,2,1.0,0,1.0,1,1.0 +0,743.0,1,1.0,0,1.0,1,1.0 +0,743.0,2,1.0,0,1.0,1,1.0 +0,744.0,1,1.0,0,1.0,1,1.0 +0,744.0,2,1.0,0,1.0,1,1.0 +0,745.0,1,1.0,0,1.0,1,1.0 +0,745.0,2,1.0,0,1.0,1,1.0 +0,746.0,1,1.0,0,1.0,1,1.0 +0,746.0,2,1.0,0,1.0,1,1.0 +0,747.0,1,1.0,0,1.0,1,1.0 +0,747.0,2,1.0,0,1.0,1,1.0 +0,748.0,1,1.0,0,1.0,1,1.0 +0,748.0,2,1.0,0,1.0,1,1.0 +0,749.0,1,1.0,0,1.0,1,1.0 +0,749.0,2,1.0,0,1.0,1,1.0 +0,750.0,1,1.0,0,1.0,1,1.0 +0,750.0,2,1.0,0,1.0,1,1.0 +0,751.0,1,1.0,0,1.0,1,1.0 +0,751.0,2,1.0,0,1.0,1,1.0 +0,752.0,1,1.0,0,1.0,1,1.0 +0,752.0,2,1.0,0,1.0,1,1.0 +0,753.0,1,1.0,0,1.0,1,1.0 +0,753.0,2,1.0,0,1.0,1,1.0 +0,754.0,1,1.0,0,1.0,1,1.0 +0,754.0,2,1.0,0,1.0,1,1.0 +0,755.0,1,1.0,0,1.0,1,1.0 +0,755.0,2,1.0,0,1.0,1,1.0 +0,756.0,1,1.0,0,1.0,1,1.0 +0,756.0,2,1.0,0,1.0,1,1.0 +0,757.0,1,1.0,0,1.0,1,1.0 +0,757.0,2,1.0,0,1.0,1,1.0 +0,758.0,1,1.0,0,1.0,1,1.0 +0,758.0,2,1.0,0,1.0,1,1.0 +0,759.0,1,1.0,0,1.0,1,1.0 +0,759.0,2,1.0,0,1.0,1,1.0 +0,760.0,1,1.0,0,1.0,1,1.0 +0,760.0,2,1.0,0,1.0,1,1.0 +0,761.0,1,1.0,0,1.0,1,1.0 +0,761.0,2,1.0,0,1.0,1,1.0 +0,762.0,1,1.0,0,1.0,1,1.0 +0,762.0,2,1.0,0,1.0,1,1.0 +0,763.0,1,1.0,0,1.0,1,1.0 +0,763.0,2,1.0,0,1.0,1,1.0 +0,764.0,1,1.0,0,1.0,1,1.0 +0,764.0,2,1.0,0,1.0,1,1.0 +0,765.0,1,1.0,0,1.0,1,1.0 +0,765.0,2,1.0,0,1.0,1,1.0 +0,766.0,1,1.0,0,1.0,1,1.0 +0,766.0,2,1.0,0,1.0,1,1.0 +0,767.0,1,1.0,0,1.0,1,1.0 +0,767.0,2,1.0,0,1.0,1,1.0 +0,768.0,1,1.0,0,1.0,1,1.0 +0,768.0,2,1.0,0,1.0,1,1.0 +0,769.0,1,1.0,0,1.0,1,1.0 +0,769.0,2,1.0,0,1.0,1,1.0 +0,770.0,1,1.0,0,1.0,1,1.0 +0,770.0,2,1.0,0,1.0,1,1.0 +0,771.0,1,1.0,0,1.0,1,1.0 +0,771.0,2,1.0,0,1.0,1,1.0 +0,772.0,1,1.0,0,1.0,1,1.0 +0,772.0,2,1.0,0,1.0,1,1.0 +0,773.0,1,1.0,0,1.0,1,1.0 +0,773.0,2,1.0,0,1.0,1,1.0 +0,774.0,1,1.0,0,1.0,1,1.0 +0,774.0,2,1.0,0,1.0,1,1.0 +0,775.0,1,1.0,0,1.0,1,1.0 +0,775.0,2,1.0,0,1.0,1,1.0 +0,776.0,1,1.0,0,1.0,1,1.0 +0,776.0,2,1.0,0,1.0,1,1.0 +0,777.0,1,1.0,0,1.0,1,1.0 +0,777.0,2,1.0,0,1.0,1,1.0 +0,778.0,1,1.0,0,1.0,1,1.0 +0,778.0,2,1.0,0,1.0,1,1.0 +0,779.0,1,1.0,0,1.0,1,1.0 +0,779.0,2,1.0,0,1.0,1,1.0 +0,780.0,1,1.0,0,1.0,1,1.0 +0,780.0,2,1.0,0,1.0,1,1.0 +0,781.0,1,1.0,0,1.0,1,1.0 +0,781.0,2,1.0,0,1.0,1,1.0 +0,782.0,1,1.0,0,1.0,1,1.0 +0,782.0,2,1.0,0,1.0,1,1.0 +0,783.0,1,1.0,0,1.0,1,1.0 +0,783.0,2,1.0,0,1.0,1,1.0 +0,784.0,1,1.0,0,1.0,1,1.0 +0,784.0,2,1.0,0,1.0,1,1.0 +0,785.0,1,1.0,0,1.0,1,1.0 +0,785.0,2,1.0,0,1.0,1,1.0 +0,786.0,1,1.0,0,1.0,1,1.0 +0,786.0,2,1.0,0,1.0,1,1.0 +0,787.0,1,1.0,0,1.0,1,1.0 +0,787.0,2,1.0,0,1.0,1,1.0 +0,788.0,1,1.0,0,1.0,1,1.0 +0,788.0,2,1.0,0,1.0,1,1.0 +0,789.0,1,1.0,0,1.0,1,1.0 +0,789.0,2,1.0,0,1.0,1,1.0 +0,790.0,1,1.0,0,1.0,1,1.0 +0,790.0,2,1.0,0,1.0,1,1.0 +0,791.0,1,1.0,0,1.0,1,1.0 +0,791.0,2,1.0,0,1.0,1,1.0 +0,792.0,1,1.0,0,1.0,1,1.0 +0,792.0,2,1.0,0,1.0,1,1.0 +0,793.0,1,1.0,0,1.0,1,1.0 +0,793.0,2,1.0,0,1.0,1,1.0 +0,794.0,1,1.0,0,1.0,1,1.0 +0,794.0,2,1.0,0,1.0,1,1.0 +0,795.0,1,1.0,0,1.0,1,1.0 +0,795.0,2,1.0,0,1.0,1,1.0 +0,796.0,1,1.0,0,1.0,1,1.0 +0,796.0,2,1.0,0,1.0,1,1.0 +0,797.0,1,1.0,0,1.0,1,1.0 +0,797.0,2,1.0,0,1.0,1,1.0 +0,798.0,1,1.0,0,1.0,1,1.0 +0,798.0,2,1.0,0,1.0,1,1.0 +0,799.0,1,1.0,0,1.0,1,1.0 +0,799.0,2,1.0,0,1.0,1,1.0 +0,800.0,1,1.0,0,1.0,1,1.0 +0,800.0,2,1.0,0,1.0,1,1.0 +0,801.0,1,1.0,0,1.0,1,1.0 +0,801.0,2,1.0,0,1.0,1,1.0 +0,802.0,1,1.0,0,1.0,1,1.0 +0,802.0,2,1.0,0,1.0,1,1.0 +0,803.0,1,1.0,0,1.0,1,1.0 +0,803.0,2,1.0,0,1.0,1,1.0 +0,804.0,1,1.0,0,1.0,1,1.0 +0,804.0,2,1.0,0,1.0,1,1.0 +0,805.0,1,1.0,0,1.0,1,1.0 +0,805.0,2,1.0,0,1.0,1,1.0 +0,806.0,1,1.0,0,1.0,1,1.0 +0,806.0,2,1.0,0,1.0,1,1.0 +0,807.0,1,1.0,0,1.0,1,1.0 +0,807.0,2,1.0,0,1.0,1,1.0 +0,808.0,1,1.0,0,1.0,1,1.0 +0,808.0,2,1.0,0,1.0,1,1.0 +0,809.0,1,1.0,0,1.0,1,1.0 +0,809.0,2,1.0,0,1.0,1,1.0 +0,810.0,1,1.0,0,1.0,1,1.0 +0,810.0,2,1.0,0,1.0,1,1.0 +0,811.0,1,1.0,0,1.0,1,1.0 +0,811.0,2,1.0,0,1.0,1,1.0 +0,812.0,1,1.0,0,1.0,1,1.0 +0,812.0,2,1.0,0,1.0,1,1.0 +0,813.0,1,1.0,0,1.0,1,1.0 +0,813.0,2,1.0,0,1.0,1,1.0 +0,814.0,1,1.0,0,1.0,1,1.0 +0,814.0,2,1.0,0,1.0,1,1.0 +0,815.0,1,1.0,0,1.0,1,1.0 +0,815.0,2,1.0,0,1.0,1,1.0 +0,816.0,1,1.0,0,1.0,1,1.0 +0,816.0,2,1.0,0,1.0,1,1.0 +0,817.0,1,1.0,0,1.0,1,1.0 +0,817.0,2,1.0,0,1.0,1,1.0 +0,818.0,1,1.0,0,1.0,1,1.0 +0,818.0,2,1.0,0,1.0,1,1.0 +0,819.0,1,1.0,0,1.0,1,1.0 +0,819.0,2,1.0,0,1.0,1,1.0 +0,820.0,1,1.0,0,1.0,1,1.0 +0,820.0,2,1.0,0,1.0,1,1.0 +0,821.0,1,1.0,0,1.0,1,1.0 +0,821.0,2,1.0,0,1.0,1,1.0 +0,822.0,1,1.0,0,1.0,1,1.0 +0,822.0,2,1.0,0,1.0,1,1.0 +0,823.0,1,1.0,0,1.0,1,1.0 +0,823.0,2,1.0,0,1.0,1,1.0 +0,824.0,1,1.0,0,1.0,1,1.0 +0,824.0,2,1.0,0,1.0,1,1.0 +0,825.0,1,1.0,0,1.0,1,1.0 +0,825.0,2,1.0,0,1.0,1,1.0 +0,826.0,1,1.0,0,1.0,1,1.0 +0,826.0,2,1.0,0,1.0,1,1.0 +0,827.0,1,1.0,0,1.0,1,1.0 +0,827.0,2,1.0,0,1.0,1,1.0 +0,828.0,1,1.0,0,1.0,1,1.0 +0,828.0,2,1.0,0,1.0,1,1.0 +0,829.0,1,1.0,0,1.0,1,1.0 +0,829.0,2,1.0,0,1.0,1,1.0 +0,830.0,1,1.0,0,1.0,1,1.0 +0,830.0,2,1.0,0,1.0,1,1.0 +0,831.0,1,1.0,0,1.0,1,1.0 +0,831.0,2,1.0,0,1.0,1,1.0 +0,832.0,1,1.0,0,1.0,1,1.0 +0,832.0,2,1.0,0,1.0,1,1.0 +0,833.0,1,1.0,0,1.0,1,1.0 +0,833.0,2,1.0,0,1.0,1,1.0 +0,834.0,1,1.0,0,1.0,1,1.0 +0,834.0,2,1.0,0,1.0,1,1.0 +0,835.0,1,1.0,0,1.0,1,1.0 +0,835.0,2,1.0,0,1.0,1,1.0 +0,836.0,1,1.0,0,1.0,1,1.0 +0,836.0,2,1.0,0,1.0,1,1.0 +0,837.0,1,1.0,0,1.0,1,1.0 +0,837.0,2,1.0,0,1.0,1,1.0 +0,838.0,1,1.0,0,1.0,1,1.0 +0,838.0,2,1.0,0,1.0,1,1.0 +0,839.0,1,1.0,0,1.0,1,1.0 +0,839.0,2,1.0,0,1.0,1,1.0 +0,840.0,1,1.0,0,1.0,1,1.0 +0,840.0,2,1.0,0,1.0,1,1.0 +0,841.0,1,1.0,0,1.0,1,1.0 +0,841.0,2,1.0,0,1.0,1,1.0 +0,842.0,1,1.0,0,1.0,1,1.0 +0,842.0,2,1.0,0,1.0,1,1.0 +0,843.0,1,1.0,0,1.0,1,1.0 +0,843.0,2,1.0,0,1.0,1,1.0 +0,844.0,1,1.0,0,1.0,1,1.0 +0,844.0,2,1.0,0,1.0,1,1.0 +0,845.0,1,1.0,0,1.0,1,1.0 +0,845.0,2,1.0,0,1.0,1,1.0 +0,846.0,1,1.0,0,1.0,1,1.0 +0,846.0,2,1.0,0,1.0,1,1.0 +0,847.0,1,1.0,0,1.0,1,1.0 +0,847.0,2,1.0,0,1.0,1,1.0 +0,848.0,1,1.0,0,1.0,1,1.0 +0,848.0,2,1.0,0,1.0,1,1.0 +0,849.0,1,1.0,0,1.0,1,1.0 +0,849.0,2,1.0,0,1.0,1,1.0 +0,850.0,1,1.0,0,1.0,1,1.0 +0,850.0,2,1.0,0,1.0,1,1.0 +0,851.0,1,1.0,0,1.0,1,1.0 +0,851.0,2,1.0,0,1.0,1,1.0 +0,852.0,1,1.0,0,1.0,1,1.0 +0,852.0,2,1.0,0,1.0,1,1.0 +0,853.0,1,1.0,0,1.0,1,1.0 +0,853.0,2,1.0,0,1.0,1,1.0 +0,854.0,1,1.0,0,1.0,1,1.0 +0,854.0,2,1.0,0,1.0,1,1.0 +0,855.0,1,1.0,0,1.0,1,1.0 +0,855.0,2,1.0,0,1.0,1,1.0 +0,856.0,1,1.0,0,1.0,1,1.0 +0,856.0,2,1.0,0,1.0,1,1.0 +0,857.0,1,1.0,0,1.0,1,1.0 +0,857.0,2,1.0,0,1.0,1,1.0 +0,858.0,1,1.0,0,1.0,1,1.0 +0,858.0,2,1.0,0,1.0,1,1.0 +0,859.0,1,1.0,0,1.0,1,1.0 +0,859.0,2,1.0,0,1.0,1,1.0 +0,860.0,1,1.0,0,1.0,1,1.0 +0,860.0,2,1.0,0,1.0,1,1.0 +0,861.0,1,1.0,0,1.0,1,1.0 +0,861.0,2,1.0,0,1.0,1,1.0 +0,862.0,1,1.0,0,1.0,1,1.0 +0,862.0,2,1.0,0,1.0,1,1.0 +0,863.0,1,1.0,0,1.0,1,1.0 +0,863.0,2,1.0,0,1.0,1,1.0 +0,864.0,1,1.0,0,1.0,1,1.0 +0,864.0,2,1.0,0,1.0,1,1.0 +0,865.0,1,1.0,0,1.0,1,1.0 +0,865.0,2,1.0,0,1.0,1,1.0 +0,866.0,1,1.0,0,1.0,1,1.0 +0,866.0,2,1.0,0,1.0,1,1.0 +0,867.0,1,1.0,0,1.0,1,1.0 +0,867.0,2,1.0,0,1.0,1,1.0 +0,868.0,1,1.0,0,1.0,1,1.0 +0,868.0,2,1.0,0,1.0,1,1.0 +0,869.0,1,1.0,0,1.0,1,1.0 +0,869.0,2,1.0,0,1.0,1,1.0 +0,870.0,1,1.0,0,1.0,1,1.0 +0,870.0,2,1.0,0,1.0,1,1.0 +0,871.0,1,1.0,0,1.0,1,1.0 +0,871.0,2,1.0,0,1.0,1,1.0 +0,872.0,1,1.0,0,1.0,1,1.0 +0,872.0,2,1.0,0,1.0,1,1.0 +0,873.0,1,1.0,0,1.0,1,1.0 +0,873.0,2,1.0,0,1.0,1,1.0 +0,874.0,1,1.0,0,1.0,1,1.0 +0,874.0,2,1.0,0,1.0,1,1.0 +0,875.0,1,1.0,0,1.0,1,1.0 +0,875.0,2,1.0,0,1.0,1,1.0 +0,876.0,1,1.0,0,1.0,1,1.0 +0,876.0,2,1.0,0,1.0,1,1.0 +0,877.0,1,1.0,0,1.0,1,1.0 +0,877.0,2,1.0,0,1.0,1,1.0 +0,878.0,1,1.0,0,1.0,1,1.0 +0,878.0,2,1.0,0,1.0,1,1.0 +0,879.0,1,1.0,0,1.0,1,1.0 +0,879.0,2,1.0,0,1.0,1,1.0 +0,880.0,1,1.0,0,1.0,1,1.0 +0,880.0,2,1.0,0,1.0,1,1.0 +0,881.0,1,1.0,0,1.0,1,1.0 +0,881.0,2,1.0,0,1.0,1,1.0 +0,882.0,1,1.0,0,1.0,1,1.0 +0,882.0,2,1.0,0,1.0,1,1.0 +0,883.0,1,1.0,0,1.0,1,1.0 +0,883.0,2,1.0,0,1.0,1,1.0 +0,884.0,1,1.0,0,1.0,1,1.0 +0,884.0,2,1.0,0,1.0,1,1.0 +0,885.0,1,1.0,0,1.0,1,1.0 +0,885.0,2,1.0,0,1.0,1,1.0 +0,886.0,1,1.0,0,1.0,1,1.0 +0,886.0,2,1.0,0,1.0,1,1.0 +0,887.0,1,1.0,0,1.0,1,1.0 +0,887.0,2,1.0,0,1.0,1,1.0 +0,888.0,1,1.0,0,1.0,1,1.0 +0,888.0,2,1.0,0,1.0,1,1.0 +0,889.0,1,1.0,0,1.0,1,1.0 +0,889.0,2,1.0,0,1.0,1,1.0 +0,890.0,1,1.0,0,1.0,1,1.0 +0,890.0,2,1.0,0,1.0,1,1.0 +0,891.0,1,1.0,0,1.0,1,1.0 +0,891.0,2,1.0,0,1.0,1,1.0 +0,892.0,1,1.0,0,1.0,1,1.0 +0,892.0,2,1.0,0,1.0,1,1.0 +0,893.0,1,1.0,0,1.0,1,1.0 +0,893.0,2,1.0,0,1.0,1,1.0 +0,894.0,1,1.0,0,1.0,1,1.0 +0,894.0,2,1.0,0,1.0,1,1.0 +0,895.0,1,1.0,0,1.0,1,1.0 +0,895.0,2,1.0,0,1.0,1,1.0 +0,896.0,1,1.0,0,1.0,1,1.0 +0,896.0,2,1.0,0,1.0,1,1.0 +0,897.0,1,1.0,0,1.0,1,1.0 +0,897.0,2,1.0,0,1.0,1,1.0 +0,898.0,1,1.0,0,1.0,1,1.0 +0,898.0,2,1.0,0,1.0,1,1.0 +0,899.0,1,1.0,0,1.0,1,1.0 +0,899.0,2,1.0,0,1.0,1,1.0 +0,900.0,1,1.0,0,1.0,1,1.0 +0,900.0,2,1.0,0,1.0,1,1.0 +0,901.0,1,1.0,0,1.0,1,1.0 +0,901.0,2,1.0,0,1.0,1,1.0 +0,902.0,1,1.0,0,1.0,1,1.0 +0,902.0,2,1.0,0,1.0,1,1.0 +0,903.0,1,1.0,0,1.0,1,1.0 +0,903.0,2,1.0,0,1.0,1,1.0 +0,904.0,1,1.0,0,1.0,1,1.0 +0,904.0,2,1.0,0,1.0,1,1.0 +0,905.0,1,1.0,0,1.0,1,1.0 +0,905.0,2,1.0,0,1.0,1,1.0 +0,906.0,1,1.0,0,1.0,1,1.0 +0,906.0,2,1.0,0,1.0,1,1.0 +0,907.0,1,1.0,0,1.0,1,1.0 +0,907.0,2,1.0,0,1.0,1,1.0 +0,908.0,1,1.0,0,1.0,1,1.0 +0,908.0,2,1.0,0,1.0,1,1.0 +0,909.0,1,1.0,0,1.0,1,1.0 +0,909.0,2,1.0,0,1.0,1,1.0 +0,910.0,1,1.0,0,1.0,1,1.0 +0,910.0,2,1.0,0,1.0,1,1.0 +0,911.0,1,1.0,0,1.0,1,1.0 +0,911.0,2,1.0,0,1.0,1,1.0 +0,912.0,1,1.0,0,1.0,1,1.0 +0,912.0,2,1.0,0,1.0,1,1.0 +0,913.0,1,1.0,0,1.0,1,1.0 +0,913.0,2,1.0,0,1.0,1,1.0 +0,914.0,1,1.0,0,1.0,1,1.0 +0,914.0,2,1.0,0,1.0,1,1.0 +0,915.0,1,1.0,0,1.0,1,1.0 +0,915.0,2,1.0,0,1.0,1,1.0 +0,916.0,1,1.0,0,1.0,1,1.0 +0,916.0,2,1.0,0,1.0,1,1.0 +0,917.0,1,1.0,0,1.0,1,1.0 +0,917.0,2,1.0,0,1.0,1,1.0 +0,918.0,1,1.0,0,1.0,1,1.0 +0,918.0,2,1.0,0,1.0,1,1.0 +0,919.0,1,1.0,0,1.0,1,1.0 +0,919.0,2,1.0,0,1.0,1,1.0 +0,920.0,1,1.0,0,1.0,1,1.0 +0,920.0,2,1.0,0,1.0,1,1.0 +0,921.0,1,1.0,0,1.0,1,1.0 +0,921.0,2,1.0,0,1.0,1,1.0 +0,922.0,1,1.0,0,1.0,1,1.0 +0,922.0,2,1.0,0,1.0,1,1.0 +0,923.0,1,1.0,0,1.0,1,1.0 +0,923.0,2,1.0,0,1.0,1,1.0 +0,924.0,1,1.0,0,1.0,1,1.0 +0,924.0,2,1.0,0,1.0,1,1.0 +0,925.0,1,1.0,0,1.0,1,1.0 +0,925.0,2,1.0,0,1.0,1,1.0 +0,926.0,1,1.0,0,1.0,1,1.0 +0,926.0,2,1.0,0,1.0,1,1.0 +0,927.0,1,1.0,0,1.0,1,1.0 +0,927.0,2,1.0,0,1.0,1,1.0 +0,928.0,1,1.0,0,1.0,1,1.0 +0,928.0,2,1.0,0,1.0,1,1.0 +0,929.0,1,1.0,0,1.0,1,1.0 +0,929.0,2,1.0,0,1.0,1,1.0 +0,930.0,1,1.0,0,1.0,1,1.0 +0,930.0,2,1.0,0,1.0,1,1.0 +0,931.0,1,1.0,0,1.0,1,1.0 +0,931.0,2,1.0,0,1.0,1,1.0 +0,932.0,1,1.0,0,1.0,1,1.0 +0,932.0,2,1.0,0,1.0,1,1.0 +0,933.0,1,1.0,0,1.0,1,1.0 +0,933.0,2,1.0,0,1.0,1,1.0 +0,934.0,1,1.0,0,1.0,1,1.0 +0,934.0,2,1.0,0,1.0,1,1.0 +0,935.0,1,1.0,0,1.0,1,1.0 +0,935.0,2,1.0,0,1.0,1,1.0 +0,936.0,1,1.0,0,1.0,1,1.0 +0,936.0,2,1.0,0,1.0,1,1.0 +0,937.0,1,1.0,0,1.0,1,1.0 +0,937.0,2,1.0,0,1.0,1,1.0 +0,938.0,1,1.0,0,1.0,1,1.0 +0,938.0,2,1.0,0,1.0,1,1.0 +0,939.0,1,1.0,0,1.0,1,1.0 +0,939.0,2,1.0,0,1.0,1,1.0 +0,940.0,1,1.0,0,1.0,1,1.0 +0,940.0,2,1.0,0,1.0,1,1.0 +0,941.0,1,1.0,0,1.0,1,1.0 +0,941.0,2,1.0,0,1.0,1,1.0 +0,942.0,1,1.0,0,1.0,1,1.0 +0,942.0,2,1.0,0,1.0,1,1.0 +0,943.0,1,1.0,0,1.0,1,1.0 +0,943.0,2,1.0,0,1.0,1,1.0 +0,944.0,1,1.0,0,1.0,1,1.0 +0,944.0,2,1.0,0,1.0,1,1.0 +0,945.0,1,1.0,0,1.0,1,1.0 +0,945.0,2,1.0,0,1.0,1,1.0 +0,946.0,1,1.0,0,1.0,1,1.0 +0,946.0,2,1.0,0,1.0,1,1.0 +0,947.0,1,1.0,0,1.0,1,1.0 +0,947.0,2,1.0,0,1.0,1,1.0 +0,948.0,1,1.0,0,1.0,1,1.0 +0,948.0,2,1.0,0,1.0,1,1.0 +0,949.0,1,1.0,0,1.0,1,1.0 +0,949.0,2,1.0,0,1.0,1,1.0 +0,950.0,1,1.0,0,1.0,1,1.0 +0,950.0,2,1.0,0,1.0,1,1.0 +0,951.0,1,1.0,0,1.0,1,1.0 +0,951.0,2,1.0,0,1.0,1,1.0 +0,952.0,1,1.0,0,1.0,1,1.0 +0,952.0,2,1.0,0,1.0,1,1.0 +0,953.0,1,1.0,0,1.0,1,1.0 +0,953.0,2,1.0,0,1.0,1,1.0 +0,954.0,1,1.0,0,1.0,1,1.0 +0,954.0,2,1.0,0,1.0,1,1.0 +0,955.0,1,1.0,0,1.0,1,1.0 +0,955.0,2,1.0,0,1.0,1,1.0 +0,956.0,1,1.0,0,1.0,1,1.0 +0,956.0,2,1.0,0,1.0,1,1.0 +0,957.0,1,1.0,0,1.0,1,1.0 +0,957.0,2,1.0,0,1.0,1,1.0 +0,958.0,1,1.0,0,1.0,1,1.0 +0,958.0,2,1.0,0,1.0,1,1.0 +0,959.0,1,1.0,0,1.0,1,1.0 +0,959.0,2,1.0,0,1.0,1,1.0 +0,960.0,1,1.0,0,1.0,1,1.0 +0,960.0,2,1.0,0,1.0,1,1.0 +0,961.0,1,1.0,0,1.0,1,1.0 +0,961.0,2,1.0,0,1.0,1,1.0 +0,962.0,1,1.0,0,1.0,1,1.0 +0,962.0,2,1.0,0,1.0,1,1.0 +0,963.0,1,1.0,0,1.0,1,1.0 +0,963.0,2,1.0,0,1.0,1,1.0 +0,964.0,1,1.0,0,1.0,1,1.0 +0,964.0,2,1.0,0,1.0,1,1.0 +0,965.0,1,1.0,0,1.0,1,1.0 +0,965.0,2,1.0,0,1.0,1,1.0 +0,966.0,1,1.0,0,1.0,1,1.0 +0,966.0,2,1.0,0,1.0,1,1.0 +0,967.0,1,1.0,0,1.0,1,1.0 +0,967.0,2,1.0,0,1.0,1,1.0 +0,968.0,1,1.0,0,1.0,1,1.0 +0,968.0,2,1.0,0,1.0,1,1.0 +0,969.0,1,1.0,0,1.0,1,1.0 +0,969.0,2,1.0,0,1.0,1,1.0 +0,970.0,1,1.0,0,1.0,1,1.0 +0,970.0,2,1.0,0,1.0,1,1.0 +0,971.0,1,1.0,0,1.0,1,1.0 +0,971.0,2,1.0,0,1.0,1,1.0 +0,972.0,1,1.0,0,1.0,1,1.0 +0,972.0,2,1.0,0,1.0,1,1.0 +0,973.0,1,1.0,0,1.0,1,1.0 +0,973.0,2,1.0,0,1.0,1,1.0 +0,974.0,1,1.0,0,1.0,1,1.0 +0,974.0,2,1.0,0,1.0,1,1.0 +0,975.0,1,1.0,0,1.0,1,1.0 +0,975.0,2,1.0,0,1.0,1,1.0 +0,976.0,1,1.0,0,1.0,1,1.0 +0,976.0,2,1.0,0,1.0,1,1.0 +0,977.0,1,1.0,0,1.0,1,1.0 +0,977.0,2,1.0,0,1.0,1,1.0 +0,978.0,1,1.0,0,1.0,1,1.0 +0,978.0,2,1.0,0,1.0,1,1.0 +0,979.0,1,1.0,0,1.0,1,1.0 +0,979.0,2,1.0,0,1.0,1,1.0 +0,980.0,1,1.0,0,1.0,1,1.0 +0,980.0,2,1.0,0,1.0,1,1.0 +0,981.0,1,1.0,0,1.0,1,1.0 +0,981.0,2,1.0,0,1.0,1,1.0 +0,982.0,1,1.0,0,1.0,1,1.0 +0,982.0,2,1.0,0,1.0,1,1.0 +0,983.0,1,1.0,0,1.0,1,1.0 +0,983.0,2,1.0,0,1.0,1,1.0 +0,984.0,1,1.0,0,1.0,1,1.0 +0,984.0,2,1.0,0,1.0,1,1.0 +0,985.0,1,1.0,0,1.0,1,1.0 +0,985.0,2,1.0,0,1.0,1,1.0 +0,986.0,1,1.0,0,1.0,1,1.0 +0,986.0,2,1.0,0,1.0,1,1.0 +0,987.0,1,1.0,0,1.0,1,1.0 +0,987.0,2,1.0,0,1.0,1,1.0 +0,988.0,1,1.0,0,1.0,1,1.0 +0,988.0,2,1.0,0,1.0,1,1.0 +0,989.0,1,1.0,0,1.0,1,1.0 +0,989.0,2,1.0,0,1.0,1,1.0 +0,990.0,1,1.0,0,1.0,1,1.0 +0,990.0,2,1.0,0,1.0,1,1.0 +0,991.0,1,1.0,0,1.0,1,1.0 +0,991.0,2,1.0,0,1.0,1,1.0 +0,992.0,1,1.0,0,1.0,1,1.0 +0,992.0,2,1.0,0,1.0,1,1.0 +0,993.0,1,1.0,0,1.0,1,1.0 +0,993.0,2,1.0,0,1.0,1,1.0 +0,994.0,1,1.0,0,1.0,1,1.0 +0,994.0,2,1.0,0,1.0,1,1.0 +0,995.0,1,1.0,0,1.0,1,1.0 +0,995.0,2,1.0,0,1.0,1,1.0 +0,996.0,1,1.0,0,1.0,1,1.0 +0,996.0,2,1.0,0,1.0,1,1.0 +0,997.0,1,1.0,0,1.0,1,1.0 +0,997.0,2,1.0,0,1.0,1,1.0 +0,998.0,1,1.0,0,1.0,1,1.0 +0,998.0,2,1.0,0,1.0,1,1.0 +0,999.0,1,1.0,0,1.0,1,1.0 +0,999.0,2,1.0,0,1.0,1,1.0 +1,0.0,1,1.0,0,1.0,2,1.0 +1,0.0,2,1.0,0,1.0,2,1.0 +1,1.0,1,1.0,0,1.0,2,1.0 +1,1.0,2,1.0,0,1.0,2,1.0 +1,2.0,1,1.0,0,1.0,2,1.0 +1,2.0,2,1.0,0,1.0,2,1.0 +1,3.0,1,1.0,0,1.0,2,1.0 +1,3.0,2,1.0,0,1.0,2,1.0 +1,4.0,1,1.0,0,1.0,2,1.0 +1,4.0,2,1.0,0,1.0,2,1.0 +1,5.0,1,1.0,0,1.0,2,1.0 +1,5.0,2,1.0,0,1.0,2,1.0 +1,6.0,1,1.0,0,1.0,2,1.0 +1,6.0,2,1.0,0,1.0,2,1.0 +1,7.0,1,1.0,0,1.0,2,1.0 +1,7.0,2,1.0,0,1.0,2,1.0 +1,8.0,1,1.0,0,1.0,2,1.0 +1,8.0,2,1.0,0,1.0,2,1.0 +1,9.0,1,1.0,0,1.0,2,1.0 +1,9.0,2,1.0,0,1.0,2,1.0 +1,10.0,1,1.0,0,1.0,2,1.0 +1,10.0,2,1.0,0,1.0,2,1.0 +1,11.0,1,1.0,0,1.0,2,1.0 +1,11.0,2,1.0,0,1.0,2,1.0 +1,12.0,1,1.0,0,1.0,2,1.0 +1,12.0,2,1.0,0,1.0,2,1.0 +1,13.0,1,1.0,0,1.0,2,1.0 +1,13.0,2,1.0,0,1.0,2,1.0 +1,14.0,1,1.0,0,1.0,2,1.0 +1,14.0,2,1.0,0,1.0,2,1.0 +1,15.0,1,1.0,0,1.0,2,1.0 +1,15.0,2,1.0,0,1.0,2,1.0 +1,16.0,1,1.0,0,1.0,2,1.0 +1,16.0,2,1.0,0,1.0,2,1.0 +1,17.0,1,1.0,0,1.0,2,1.0 +1,17.0,2,1.0,0,1.0,2,1.0 +1,18.0,1,1.0,0,1.0,2,1.0 +1,18.0,2,1.0,0,1.0,2,1.0 +1,19.0,1,1.0,0,1.0,2,1.0 +1,19.0,2,1.0,0,1.0,2,1.0 +1,20.0,1,1.0,0,1.0,2,1.0 +1,20.0,2,1.0,0,1.0,2,1.0 +1,21.0,1,1.0,0,1.0,2,1.0 +1,21.0,2,1.0,0,1.0,2,1.0 +1,22.0,1,1.0,0,1.0,2,1.0 +1,22.0,2,1.0,0,1.0,2,1.0 +1,23.0,1,1.0,0,1.0,2,1.0 +1,23.0,2,1.0,0,1.0,2,1.0 +1,24.0,1,1.0,0,1.0,2,1.0 +1,24.0,2,1.0,0,1.0,2,1.0 +1,25.0,1,1.0,0,1.0,2,1.0 +1,25.0,2,1.0,0,1.0,2,1.0 +1,26.0,1,1.0,0,1.0,2,1.0 +1,26.0,2,1.0,0,1.0,2,1.0 +1,27.0,1,1.0,0,1.0,2,1.0 +1,27.0,2,1.0,0,1.0,2,1.0 +1,28.0,1,1.0,0,1.0,2,1.0 +1,28.0,2,1.0,0,1.0,2,1.0 +1,29.0,1,1.0,0,1.0,2,1.0 +1,29.0,2,1.0,0,1.0,2,1.0 +1,30.0,1,1.0,0,1.0,2,1.0 +1,30.0,2,1.0,0,1.0,2,1.0 +1,31.0,1,1.0,0,1.0,2,1.0 +1,31.0,2,1.0,0,1.0,2,1.0 +1,32.0,1,1.0,0,1.0,2,1.0 +1,32.0,2,1.0,0,1.0,2,1.0 +1,33.0,1,1.0,0,1.0,2,1.0 +1,33.0,2,1.0,0,1.0,2,1.0 +1,34.0,1,1.0,0,1.0,2,1.0 +1,34.0,2,1.0,0,1.0,2,1.0 +1,35.0,1,1.0,0,1.0,2,1.0 +1,35.0,2,1.0,0,1.0,2,1.0 +1,36.0,1,1.0,0,1.0,2,1.0 +1,36.0,2,1.0,0,1.0,2,1.0 +1,37.0,1,1.0,0,1.0,2,1.0 +1,37.0,2,1.0,0,1.0,2,1.0 +1,38.0,1,1.0,0,1.0,2,1.0 +1,38.0,2,1.0,0,1.0,2,1.0 +1,39.0,1,1.0,0,1.0,2,1.0 +1,39.0,2,1.0,0,1.0,2,1.0 +1,40.0,1,1.0,0,1.0,2,1.0 +1,40.0,2,1.0,0,1.0,2,1.0 +1,41.0,1,1.0,0,1.0,2,1.0 +1,41.0,2,1.0,0,1.0,2,1.0 +1,42.0,1,1.0,0,1.0,2,1.0 +1,42.0,2,1.0,0,1.0,2,1.0 +1,43.0,1,1.0,0,1.0,2,1.0 +1,43.0,2,1.0,0,1.0,2,1.0 +1,44.0,1,1.0,0,1.0,2,1.0 +1,44.0,2,1.0,0,1.0,2,1.0 +1,45.0,1,1.0,0,1.0,2,1.0 +1,45.0,2,1.0,0,1.0,2,1.0 +1,46.0,1,1.0,0,1.0,2,1.0 +1,46.0,2,1.0,0,1.0,2,1.0 +1,47.0,1,1.0,0,1.0,2,1.0 +1,47.0,2,1.0,0,1.0,2,1.0 +1,48.0,1,1.0,0,1.0,2,1.0 +1,48.0,2,1.0,0,1.0,2,1.0 +1,49.0,1,1.0,0,1.0,2,1.0 +1,49.0,2,1.0,0,1.0,2,1.0 +1,50.0,1,1.0,0,1.0,2,1.0 +1,50.0,2,1.0,0,1.0,2,1.0 +1,51.0,1,1.0,0,1.0,2,1.0 +1,51.0,2,1.0,0,1.0,2,1.0 +1,52.0,1,1.0,0,1.0,2,1.0 +1,52.0,2,1.0,0,1.0,2,1.0 +1,53.0,1,1.0,0,1.0,2,1.0 +1,53.0,2,1.0,0,1.0,2,1.0 +1,54.0,1,1.0,0,1.0,2,1.0 +1,54.0,2,1.0,0,1.0,2,1.0 +1,55.0,1,1.0,0,1.0,2,1.0 +1,55.0,2,1.0,0,1.0,2,1.0 +1,56.0,1,1.0,0,1.0,2,1.0 +1,56.0,2,1.0,0,1.0,2,1.0 +1,57.0,1,1.0,0,1.0,2,1.0 +1,57.0,2,1.0,0,1.0,2,1.0 +1,58.0,1,1.0,0,1.0,2,1.0 +1,58.0,2,1.0,0,1.0,2,1.0 +1,59.0,1,1.0,0,1.0,2,1.0 +1,59.0,2,1.0,0,1.0,2,1.0 +1,60.0,1,1.0,0,1.0,2,1.0 +1,60.0,2,1.0,0,1.0,2,1.0 +1,61.0,1,1.0,0,1.0,2,1.0 +1,61.0,2,1.0,0,1.0,2,1.0 +1,62.0,1,1.0,0,1.0,2,1.0 +1,62.0,2,1.0,0,1.0,2,1.0 +1,63.0,1,1.0,0,1.0,2,1.0 +1,63.0,2,1.0,0,1.0,2,1.0 +1,64.0,1,1.0,0,1.0,2,1.0 +1,64.0,2,1.0,0,1.0,2,1.0 +1,65.0,1,1.0,0,1.0,2,1.0 +1,65.0,2,1.0,0,1.0,2,1.0 +1,66.0,1,1.0,0,1.0,2,1.0 +1,66.0,2,1.0,0,1.0,2,1.0 +1,67.0,1,1.0,0,1.0,2,1.0 +1,67.0,2,1.0,0,1.0,2,1.0 +1,68.0,1,1.0,0,1.0,2,1.0 +1,68.0,2,1.0,0,1.0,2,1.0 +1,69.0,1,1.0,0,1.0,2,1.0 +1,69.0,2,1.0,0,1.0,2,1.0 +1,70.0,1,1.0,0,1.0,2,1.0 +1,70.0,2,1.0,0,1.0,2,1.0 +1,71.0,1,1.0,0,1.0,2,1.0 +1,71.0,2,1.0,0,1.0,2,1.0 +1,72.0,1,1.0,0,1.0,2,1.0 +1,72.0,2,1.0,0,1.0,2,1.0 +1,73.0,1,1.0,0,1.0,2,1.0 +1,73.0,2,1.0,0,1.0,2,1.0 +1,74.0,1,1.0,0,1.0,2,1.0 +1,74.0,2,1.0,0,1.0,2,1.0 +1,75.0,1,1.0,0,1.0,2,1.0 +1,75.0,2,1.0,0,1.0,2,1.0 +1,76.0,1,1.0,0,1.0,2,1.0 +1,76.0,2,1.0,0,1.0,2,1.0 +1,77.0,1,1.0,0,1.0,2,1.0 +1,77.0,2,1.0,0,1.0,2,1.0 +1,78.0,1,1.0,0,1.0,2,1.0 +1,78.0,2,1.0,0,1.0,2,1.0 +1,79.0,1,1.0,0,1.0,2,1.0 +1,79.0,2,1.0,0,1.0,2,1.0 +1,80.0,1,1.0,0,1.0,2,1.0 +1,80.0,2,1.0,0,1.0,2,1.0 +1,81.0,1,1.0,0,1.0,2,1.0 +1,81.0,2,1.0,0,1.0,2,1.0 +1,82.0,1,1.0,0,1.0,2,1.0 +1,82.0,2,1.0,0,1.0,2,1.0 +1,83.0,1,1.0,0,1.0,2,1.0 +1,83.0,2,1.0,0,1.0,2,1.0 +1,84.0,1,1.0,0,1.0,2,1.0 +1,84.0,2,1.0,0,1.0,2,1.0 +1,85.0,1,1.0,0,1.0,2,1.0 +1,85.0,2,1.0,0,1.0,2,1.0 +1,86.0,1,1.0,0,1.0,2,1.0 +1,86.0,2,1.0,0,1.0,2,1.0 +1,87.0,1,1.0,0,1.0,2,1.0 +1,87.0,2,1.0,0,1.0,2,1.0 +1,88.0,1,1.0,0,1.0,2,1.0 +1,88.0,2,1.0,0,1.0,2,1.0 +1,89.0,1,1.0,0,1.0,2,1.0 +1,89.0,2,1.0,0,1.0,2,1.0 +1,90.0,1,1.0,0,1.0,2,1.0 +1,90.0,2,1.0,0,1.0,2,1.0 +1,91.0,1,1.0,0,1.0,2,1.0 +1,91.0,2,1.0,0,1.0,2,1.0 +1,92.0,1,1.0,0,1.0,2,1.0 +1,92.0,2,1.0,0,1.0,2,1.0 +1,93.0,1,1.0,0,1.0,2,1.0 +1,93.0,2,1.0,0,1.0,2,1.0 +1,94.0,1,1.0,0,1.0,2,1.0 +1,94.0,2,1.0,0,1.0,2,1.0 +1,95.0,1,1.0,0,1.0,2,1.0 +1,95.0,2,1.0,0,1.0,2,1.0 +1,96.0,1,1.0,0,1.0,2,1.0 +1,96.0,2,1.0,0,1.0,2,1.0 +1,97.0,1,1.0,0,1.0,2,1.0 +1,97.0,2,1.0,0,1.0,2,1.0 +1,98.0,1,1.0,0,1.0,2,1.0 +1,98.0,2,1.0,0,1.0,2,1.0 +1,99.0,1,1.0,0,1.0,2,1.0 +1,99.0,2,1.0,0,1.0,2,1.0 +1,100.0,1,1.0,0,1.0,2,1.0 +1,100.0,2,1.0,0,1.0,2,1.0 +1,101.0,1,1.0,0,1.0,2,1.0 +1,101.0,2,1.0,0,1.0,2,1.0 +1,102.0,1,1.0,0,1.0,2,1.0 +1,102.0,2,1.0,0,1.0,2,1.0 +1,103.0,1,1.0,0,1.0,2,1.0 +1,103.0,2,1.0,0,1.0,2,1.0 +1,104.0,1,1.0,0,1.0,2,1.0 +1,104.0,2,1.0,0,1.0,2,1.0 +1,105.0,1,1.0,0,1.0,2,1.0 +1,105.0,2,1.0,0,1.0,2,1.0 +1,106.0,1,1.0,0,1.0,2,1.0 +1,106.0,2,1.0,0,1.0,2,1.0 +1,107.0,1,1.0,0,1.0,2,1.0 +1,107.0,2,1.0,0,1.0,2,1.0 +1,108.0,1,1.0,0,1.0,2,1.0 +1,108.0,2,1.0,0,1.0,2,1.0 +1,109.0,1,1.0,0,1.0,2,1.0 +1,109.0,2,1.0,0,1.0,2,1.0 +1,110.0,1,1.0,0,1.0,2,1.0 +1,110.0,2,1.0,0,1.0,2,1.0 +1,111.0,1,1.0,0,1.0,2,1.0 +1,111.0,2,1.0,0,1.0,2,1.0 +1,112.0,1,1.0,0,1.0,2,1.0 +1,112.0,2,1.0,0,1.0,2,1.0 +1,113.0,1,1.0,0,1.0,2,1.0 +1,113.0,2,1.0,0,1.0,2,1.0 +1,114.0,1,1.0,0,1.0,2,1.0 +1,114.0,2,1.0,0,1.0,2,1.0 +1,115.0,1,1.0,0,1.0,2,1.0 +1,115.0,2,1.0,0,1.0,2,1.0 +1,116.0,1,1.0,0,1.0,2,1.0 +1,116.0,2,1.0,0,1.0,2,1.0 +1,117.0,1,1.0,0,1.0,2,1.0 +1,117.0,2,1.0,0,1.0,2,1.0 +1,118.0,1,1.0,0,1.0,2,1.0 +1,118.0,2,1.0,0,1.0,2,1.0 +1,119.0,1,1.0,0,1.0,2,1.0 +1,119.0,2,1.0,0,1.0,2,1.0 +1,120.0,1,1.0,0,1.0,2,1.0 +1,120.0,2,1.0,0,1.0,2,1.0 +1,121.0,1,1.0,0,1.0,2,1.0 +1,121.0,2,1.0,0,1.0,2,1.0 +1,122.0,1,1.0,0,1.0,2,1.0 +1,122.0,2,1.0,0,1.0,2,1.0 +1,123.0,1,1.0,0,1.0,2,1.0 +1,123.0,2,1.0,0,1.0,2,1.0 +1,124.0,1,1.0,0,1.0,2,1.0 +1,124.0,2,1.0,0,1.0,2,1.0 +1,125.0,1,1.0,0,1.0,2,1.0 +1,125.0,2,1.0,0,1.0,2,1.0 +1,126.0,1,1.0,0,1.0,2,1.0 +1,126.0,2,1.0,0,1.0,2,1.0 +1,127.0,1,1.0,0,1.0,2,1.0 +1,127.0,2,1.0,0,1.0,2,1.0 +1,128.0,1,1.0,0,1.0,2,1.0 +1,128.0,2,1.0,0,1.0,2,1.0 +1,129.0,1,1.0,0,1.0,2,1.0 +1,129.0,2,1.0,0,1.0,2,1.0 +1,130.0,1,1.0,0,1.0,2,1.0 +1,130.0,2,1.0,0,1.0,2,1.0 +1,131.0,1,1.0,0,1.0,2,1.0 +1,131.0,2,1.0,0,1.0,2,1.0 +1,132.0,1,1.0,0,1.0,2,1.0 +1,132.0,2,1.0,0,1.0,2,1.0 +1,133.0,1,1.0,0,1.0,2,1.0 +1,133.0,2,1.0,0,1.0,2,1.0 +1,134.0,1,1.0,0,1.0,2,1.0 +1,134.0,2,1.0,0,1.0,2,1.0 +1,135.0,1,1.0,0,1.0,2,1.0 +1,135.0,2,1.0,0,1.0,2,1.0 +1,136.0,1,1.0,0,1.0,2,1.0 +1,136.0,2,1.0,0,1.0,2,1.0 +1,137.0,1,1.0,0,1.0,2,1.0 +1,137.0,2,1.0,0,1.0,2,1.0 +1,138.0,1,1.0,0,1.0,2,1.0 +1,138.0,2,1.0,0,1.0,2,1.0 +1,139.0,1,1.0,0,1.0,2,1.0 +1,139.0,2,1.0,0,1.0,2,1.0 +1,140.0,1,1.0,0,1.0,2,1.0 +1,140.0,2,1.0,0,1.0,2,1.0 +1,141.0,1,1.0,0,1.0,2,1.0 +1,141.0,2,1.0,0,1.0,2,1.0 +1,142.0,1,1.0,0,1.0,2,1.0 +1,142.0,2,1.0,0,1.0,2,1.0 +1,143.0,1,1.0,0,1.0,2,1.0 +1,143.0,2,1.0,0,1.0,2,1.0 +1,144.0,1,1.0,0,1.0,2,1.0 +1,144.0,2,1.0,0,1.0,2,1.0 +1,145.0,1,1.0,0,1.0,2,1.0 +1,145.0,2,1.0,0,1.0,2,1.0 +1,146.0,1,1.0,0,1.0,2,1.0 +1,146.0,2,1.0,0,1.0,2,1.0 +1,147.0,1,1.0,0,1.0,2,1.0 +1,147.0,2,1.0,0,1.0,2,1.0 +1,148.0,1,1.0,0,1.0,2,1.0 +1,148.0,2,1.0,0,1.0,2,1.0 +1,149.0,1,1.0,0,1.0,2,1.0 +1,149.0,2,1.0,0,1.0,2,1.0 +1,150.0,1,1.0,0,1.0,2,1.0 +1,150.0,2,1.0,0,1.0,2,1.0 +1,151.0,1,1.0,0,1.0,2,1.0 +1,151.0,2,1.0,0,1.0,2,1.0 +1,152.0,1,1.0,0,1.0,2,1.0 +1,152.0,2,1.0,0,1.0,2,1.0 +1,153.0,1,1.0,0,1.0,2,1.0 +1,153.0,2,1.0,0,1.0,2,1.0 +1,154.0,1,1.0,0,1.0,2,1.0 +1,154.0,2,1.0,0,1.0,2,1.0 +1,155.0,1,1.0,0,1.0,2,1.0 +1,155.0,2,1.0,0,1.0,2,1.0 +1,156.0,1,1.0,0,1.0,2,1.0 +1,156.0,2,1.0,0,1.0,2,1.0 +1,157.0,1,1.0,0,1.0,2,1.0 +1,157.0,2,1.0,0,1.0,2,1.0 +1,158.0,1,1.0,0,1.0,2,1.0 +1,158.0,2,1.0,0,1.0,2,1.0 +1,159.0,1,1.0,0,1.0,2,1.0 +1,159.0,2,1.0,0,1.0,2,1.0 +1,160.0,1,1.0,0,1.0,2,1.0 +1,160.0,2,1.0,0,1.0,2,1.0 +1,161.0,1,1.0,0,1.0,2,1.0 +1,161.0,2,1.0,0,1.0,2,1.0 +1,162.0,1,1.0,0,1.0,2,1.0 +1,162.0,2,1.0,0,1.0,2,1.0 +1,163.0,1,1.0,0,1.0,2,1.0 +1,163.0,2,1.0,0,1.0,2,1.0 +1,164.0,1,1.0,0,1.0,2,1.0 +1,164.0,2,1.0,0,1.0,2,1.0 +1,165.0,1,1.0,0,1.0,2,1.0 +1,165.0,2,1.0,0,1.0,2,1.0 +1,166.0,1,1.0,0,1.0,2,1.0 +1,166.0,2,1.0,0,1.0,2,1.0 +1,167.0,1,1.0,0,1.0,2,1.0 +1,167.0,2,1.0,0,1.0,2,1.0 +1,168.0,1,1.0,0,1.0,2,1.0 +1,168.0,2,1.0,0,1.0,2,1.0 +1,169.0,1,1.0,0,1.0,2,1.0 +1,169.0,2,1.0,0,1.0,2,1.0 +1,170.0,1,1.0,0,1.0,2,1.0 +1,170.0,2,1.0,0,1.0,2,1.0 +1,171.0,1,1.0,0,1.0,2,1.0 +1,171.0,2,1.0,0,1.0,2,1.0 +1,172.0,1,1.0,0,1.0,2,1.0 +1,172.0,2,1.0,0,1.0,2,1.0 +1,173.0,1,1.0,0,1.0,2,1.0 +1,173.0,2,1.0,0,1.0,2,1.0 +1,174.0,1,1.0,0,1.0,2,1.0 +1,174.0,2,1.0,0,1.0,2,1.0 +1,175.0,1,1.0,0,1.0,2,1.0 +1,175.0,2,1.0,0,1.0,2,1.0 +1,176.0,1,1.0,0,1.0,2,1.0 +1,176.0,2,1.0,0,1.0,2,1.0 +1,177.0,1,1.0,0,1.0,2,1.0 +1,177.0,2,1.0,0,1.0,2,1.0 +1,178.0,1,1.0,0,1.0,2,1.0 +1,178.0,2,1.0,0,1.0,2,1.0 +1,179.0,1,1.0,0,1.0,2,1.0 +1,179.0,2,1.0,0,1.0,2,1.0 +1,180.0,1,1.0,0,1.0,2,1.0 +1,180.0,2,1.0,0,1.0,2,1.0 +1,181.0,1,1.0,0,1.0,2,1.0 +1,181.0,2,1.0,0,1.0,2,1.0 +1,182.0,1,1.0,0,1.0,2,1.0 +1,182.0,2,1.0,0,1.0,2,1.0 +1,183.0,1,1.0,0,1.0,2,1.0 +1,183.0,2,1.0,0,1.0,2,1.0 +1,184.0,1,1.0,0,1.0,2,1.0 +1,184.0,2,1.0,0,1.0,2,1.0 +1,185.0,1,1.0,0,1.0,2,1.0 +1,185.0,2,1.0,0,1.0,2,1.0 +1,186.0,1,1.0,0,1.0,2,1.0 +1,186.0,2,1.0,0,1.0,2,1.0 +1,187.0,1,1.0,0,1.0,2,1.0 +1,187.0,2,1.0,0,1.0,2,1.0 +1,188.0,1,1.0,0,1.0,2,1.0 +1,188.0,2,1.0,0,1.0,2,1.0 +1,189.0,1,1.0,0,1.0,2,1.0 +1,189.0,2,1.0,0,1.0,2,1.0 +1,190.0,1,1.0,0,1.0,2,1.0 +1,190.0,2,1.0,0,1.0,2,1.0 +1,191.0,1,1.0,0,1.0,2,1.0 +1,191.0,2,1.0,0,1.0,2,1.0 +1,192.0,1,1.0,0,1.0,2,1.0 +1,192.0,2,1.0,0,1.0,2,1.0 +1,193.0,1,1.0,0,1.0,2,1.0 +1,193.0,2,1.0,0,1.0,2,1.0 +1,194.0,1,1.0,0,1.0,2,1.0 +1,194.0,2,1.0,0,1.0,2,1.0 +1,195.0,1,1.0,0,1.0,2,1.0 +1,195.0,2,1.0,0,1.0,2,1.0 +1,196.0,1,1.0,0,1.0,2,1.0 +1,196.0,2,1.0,0,1.0,2,1.0 +1,197.0,1,1.0,0,1.0,2,1.0 +1,197.0,2,1.0,0,1.0,2,1.0 +1,198.0,1,1.0,0,1.0,2,1.0 +1,198.0,2,1.0,0,1.0,2,1.0 +1,199.0,1,1.0,0,1.0,2,1.0 +1,199.0,2,1.0,0,1.0,2,1.0 +1,200.0,1,1.0,0,1.0,2,1.0 +1,200.0,2,1.0,0,1.0,2,1.0 +1,201.0,1,1.0,0,1.0,2,1.0 +1,201.0,2,1.0,0,1.0,2,1.0 +1,202.0,1,1.0,0,1.0,2,1.0 +1,202.0,2,1.0,0,1.0,2,1.0 +1,203.0,1,1.0,0,1.0,2,1.0 +1,203.0,2,1.0,0,1.0,2,1.0 +1,204.0,1,1.0,0,1.0,2,1.0 +1,204.0,2,1.0,0,1.0,2,1.0 +1,205.0,1,1.0,0,1.0,2,1.0 +1,205.0,2,1.0,0,1.0,2,1.0 +1,206.0,1,1.0,0,1.0,2,1.0 +1,206.0,2,1.0,0,1.0,2,1.0 +1,207.0,1,1.0,0,1.0,2,1.0 +1,207.0,2,1.0,0,1.0,2,1.0 +1,208.0,1,1.0,0,1.0,2,1.0 +1,208.0,2,1.0,0,1.0,2,1.0 +1,209.0,1,1.0,0,1.0,2,1.0 +1,209.0,2,1.0,0,1.0,2,1.0 +1,210.0,1,1.0,0,1.0,2,1.0 +1,210.0,2,1.0,0,1.0,2,1.0 +1,211.0,1,1.0,0,1.0,2,1.0 +1,211.0,2,1.0,0,1.0,2,1.0 +1,212.0,1,1.0,0,1.0,2,1.0 +1,212.0,2,1.0,0,1.0,2,1.0 +1,213.0,1,1.0,0,1.0,2,1.0 +1,213.0,2,1.0,0,1.0,2,1.0 +1,214.0,1,1.0,0,1.0,2,1.0 +1,214.0,2,1.0,0,1.0,2,1.0 +1,215.0,1,1.0,0,1.0,2,1.0 +1,215.0,2,1.0,0,1.0,2,1.0 +1,216.0,1,1.0,0,1.0,2,1.0 +1,216.0,2,1.0,0,1.0,2,1.0 +1,217.0,1,1.0,0,1.0,2,1.0 +1,217.0,2,1.0,0,1.0,2,1.0 +1,218.0,1,1.0,0,1.0,2,1.0 +1,218.0,2,1.0,0,1.0,2,1.0 +1,219.0,1,1.0,0,1.0,2,1.0 +1,219.0,2,1.0,0,1.0,2,1.0 +1,220.0,1,1.0,0,1.0,2,1.0 +1,220.0,2,1.0,0,1.0,2,1.0 +1,221.0,1,1.0,0,1.0,2,1.0 +1,221.0,2,1.0,0,1.0,2,1.0 +1,222.0,1,1.0,0,1.0,2,1.0 +1,222.0,2,1.0,0,1.0,2,1.0 +1,223.0,1,1.0,0,1.0,2,1.0 +1,223.0,2,1.0,0,1.0,2,1.0 +1,224.0,1,1.0,0,1.0,2,1.0 +1,224.0,2,1.0,0,1.0,2,1.0 +1,225.0,1,1.0,0,1.0,2,1.0 +1,225.0,2,1.0,0,1.0,2,1.0 +1,226.0,1,1.0,0,1.0,2,1.0 +1,226.0,2,1.0,0,1.0,2,1.0 +1,227.0,1,1.0,0,1.0,2,1.0 +1,227.0,2,1.0,0,1.0,2,1.0 +1,228.0,1,1.0,0,1.0,2,1.0 +1,228.0,2,1.0,0,1.0,2,1.0 +1,229.0,1,1.0,0,1.0,2,1.0 +1,229.0,2,1.0,0,1.0,2,1.0 +1,230.0,1,1.0,0,1.0,2,1.0 +1,230.0,2,1.0,0,1.0,2,1.0 +1,231.0,1,1.0,0,1.0,2,1.0 +1,231.0,2,1.0,0,1.0,2,1.0 +1,232.0,1,1.0,0,1.0,2,1.0 +1,232.0,2,1.0,0,1.0,2,1.0 +1,233.0,1,1.0,0,1.0,2,1.0 +1,233.0,2,1.0,0,1.0,2,1.0 +1,234.0,1,1.0,0,1.0,2,1.0 +1,234.0,2,1.0,0,1.0,2,1.0 +1,235.0,1,1.0,0,1.0,2,1.0 +1,235.0,2,1.0,0,1.0,2,1.0 +1,236.0,1,1.0,0,1.0,2,1.0 +1,236.0,2,1.0,0,1.0,2,1.0 +1,237.0,1,1.0,0,1.0,2,1.0 +1,237.0,2,1.0,0,1.0,2,1.0 +1,238.0,1,1.0,0,1.0,2,1.0 +1,238.0,2,1.0,0,1.0,2,1.0 +1,239.0,1,1.0,0,1.0,2,1.0 +1,239.0,2,1.0,0,1.0,2,1.0 +1,240.0,1,1.0,0,1.0,2,1.0 +1,240.0,2,1.0,0,1.0,2,1.0 +1,241.0,1,1.0,0,1.0,2,1.0 +1,241.0,2,1.0,0,1.0,2,1.0 +1,242.0,1,1.0,0,1.0,2,1.0 +1,242.0,2,1.0,0,1.0,2,1.0 +1,243.0,1,1.0,0,1.0,2,1.0 +1,243.0,2,1.0,0,1.0,2,1.0 +1,244.0,1,1.0,0,1.0,2,1.0 +1,244.0,2,1.0,0,1.0,2,1.0 +1,245.0,1,1.0,0,1.0,2,1.0 +1,245.0,2,1.0,0,1.0,2,1.0 +1,246.0,1,1.0,0,1.0,2,1.0 +1,246.0,2,1.0,0,1.0,2,1.0 +1,247.0,1,1.0,0,1.0,2,1.0 +1,247.0,2,1.0,0,1.0,2,1.0 +1,248.0,1,1.0,0,1.0,2,1.0 +1,248.0,2,1.0,0,1.0,2,1.0 +1,249.0,1,1.0,0,1.0,2,1.0 +1,249.0,2,1.0,0,1.0,2,1.0 +1,250.0,1,1.0,0,1.0,2,1.0 +1,250.0,2,1.0,0,1.0,2,1.0 +1,251.0,1,1.0,0,1.0,2,1.0 +1,251.0,2,1.0,0,1.0,2,1.0 +1,252.0,1,1.0,0,1.0,2,1.0 +1,252.0,2,1.0,0,1.0,2,1.0 +1,253.0,1,1.0,0,1.0,2,1.0 +1,253.0,2,1.0,0,1.0,2,1.0 +1,254.0,1,1.0,0,1.0,2,1.0 +1,254.0,2,1.0,0,1.0,2,1.0 +1,255.0,1,1.0,0,1.0,2,1.0 +1,255.0,2,1.0,0,1.0,2,1.0 +1,256.0,1,1.0,0,1.0,2,1.0 +1,256.0,2,1.0,0,1.0,2,1.0 +1,257.0,1,1.0,0,1.0,2,1.0 +1,257.0,2,1.0,0,1.0,2,1.0 +1,258.0,1,1.0,0,1.0,2,1.0 +1,258.0,2,1.0,0,1.0,2,1.0 +1,259.0,1,1.0,0,1.0,2,1.0 +1,259.0,2,1.0,0,1.0,2,1.0 +1,260.0,1,1.0,0,1.0,2,1.0 +1,260.0,2,1.0,0,1.0,2,1.0 +1,261.0,1,1.0,0,1.0,2,1.0 +1,261.0,2,1.0,0,1.0,2,1.0 +1,262.0,1,1.0,0,1.0,2,1.0 +1,262.0,2,1.0,0,1.0,2,1.0 +1,263.0,1,1.0,0,1.0,2,1.0 +1,263.0,2,1.0,0,1.0,2,1.0 +1,264.0,1,1.0,0,1.0,2,1.0 +1,264.0,2,1.0,0,1.0,2,1.0 +1,265.0,1,1.0,0,1.0,2,1.0 +1,265.0,2,1.0,0,1.0,2,1.0 +1,266.0,1,1.0,0,1.0,2,1.0 +1,266.0,2,1.0,0,1.0,2,1.0 +1,267.0,1,1.0,0,1.0,2,1.0 +1,267.0,2,1.0,0,1.0,2,1.0 +1,268.0,1,1.0,0,1.0,2,1.0 +1,268.0,2,1.0,0,1.0,2,1.0 +1,269.0,1,1.0,0,1.0,2,1.0 +1,269.0,2,1.0,0,1.0,2,1.0 +1,270.0,1,1.0,0,1.0,2,1.0 +1,270.0,2,1.0,0,1.0,2,1.0 +1,271.0,1,1.0,0,1.0,2,1.0 +1,271.0,2,1.0,0,1.0,2,1.0 +1,272.0,1,1.0,0,1.0,2,1.0 +1,272.0,2,1.0,0,1.0,2,1.0 +1,273.0,1,1.0,0,1.0,2,1.0 +1,273.0,2,1.0,0,1.0,2,1.0 +1,274.0,1,1.0,0,1.0,2,1.0 +1,274.0,2,1.0,0,1.0,2,1.0 +1,275.0,1,1.0,0,1.0,2,1.0 +1,275.0,2,1.0,0,1.0,2,1.0 +1,276.0,1,1.0,0,1.0,2,1.0 +1,276.0,2,1.0,0,1.0,2,1.0 +1,277.0,1,1.0,0,1.0,2,1.0 +1,277.0,2,1.0,0,1.0,2,1.0 +1,278.0,1,1.0,0,1.0,2,1.0 +1,278.0,2,1.0,0,1.0,2,1.0 +1,279.0,1,1.0,0,1.0,2,1.0 +1,279.0,2,1.0,0,1.0,2,1.0 +1,280.0,1,1.0,0,1.0,2,1.0 +1,280.0,2,1.0,0,1.0,2,1.0 +1,281.0,1,1.0,0,1.0,2,1.0 +1,281.0,2,1.0,0,1.0,2,1.0 +1,282.0,1,1.0,0,1.0,2,1.0 +1,282.0,2,1.0,0,1.0,2,1.0 +1,283.0,1,1.0,0,1.0,2,1.0 +1,283.0,2,1.0,0,1.0,2,1.0 +1,284.0,1,1.0,0,1.0,2,1.0 +1,284.0,2,1.0,0,1.0,2,1.0 +1,285.0,1,1.0,0,1.0,2,1.0 +1,285.0,2,1.0,0,1.0,2,1.0 +1,286.0,1,1.0,0,1.0,2,1.0 +1,286.0,2,1.0,0,1.0,2,1.0 +1,287.0,1,1.0,0,1.0,2,1.0 +1,287.0,2,1.0,0,1.0,2,1.0 +1,288.0,1,1.0,0,1.0,2,1.0 +1,288.0,2,1.0,0,1.0,2,1.0 +1,289.0,1,1.0,0,1.0,2,1.0 +1,289.0,2,1.0,0,1.0,2,1.0 +1,290.0,1,1.0,0,1.0,2,1.0 +1,290.0,2,1.0,0,1.0,2,1.0 +1,291.0,1,1.0,0,1.0,2,1.0 +1,291.0,2,1.0,0,1.0,2,1.0 +1,292.0,1,1.0,0,1.0,2,1.0 +1,292.0,2,1.0,0,1.0,2,1.0 +1,293.0,1,1.0,0,1.0,2,1.0 +1,293.0,2,1.0,0,1.0,2,1.0 +1,294.0,1,1.0,0,1.0,2,1.0 +1,294.0,2,1.0,0,1.0,2,1.0 +1,295.0,1,1.0,0,1.0,2,1.0 +1,295.0,2,1.0,0,1.0,2,1.0 +1,296.0,1,1.0,0,1.0,2,1.0 +1,296.0,2,1.0,0,1.0,2,1.0 +1,297.0,1,1.0,0,1.0,2,1.0 +1,297.0,2,1.0,0,1.0,2,1.0 +1,298.0,1,1.0,0,1.0,2,1.0 +1,298.0,2,1.0,0,1.0,2,1.0 +1,299.0,1,1.0,0,1.0,2,1.0 +1,299.0,2,1.0,0,1.0,2,1.0 +1,300.0,1,1.0,0,1.0,2,1.0 +1,300.0,2,1.0,0,1.0,2,1.0 +1,301.0,1,1.0,0,1.0,2,1.0 +1,301.0,2,1.0,0,1.0,2,1.0 +1,302.0,1,1.0,0,1.0,2,1.0 +1,302.0,2,1.0,0,1.0,2,1.0 +1,303.0,1,1.0,0,1.0,2,1.0 +1,303.0,2,1.0,0,1.0,2,1.0 +1,304.0,1,1.0,0,1.0,2,1.0 +1,304.0,2,1.0,0,1.0,2,1.0 +1,305.0,1,1.0,0,1.0,2,1.0 +1,305.0,2,1.0,0,1.0,2,1.0 +1,306.0,1,1.0,0,1.0,2,1.0 +1,306.0,2,1.0,0,1.0,2,1.0 +1,307.0,1,1.0,0,1.0,2,1.0 +1,307.0,2,1.0,0,1.0,2,1.0 +1,308.0,1,1.0,0,1.0,2,1.0 +1,308.0,2,1.0,0,1.0,2,1.0 +1,309.0,1,1.0,0,1.0,2,1.0 +1,309.0,2,1.0,0,1.0,2,1.0 +1,310.0,1,1.0,0,1.0,2,1.0 +1,310.0,2,1.0,0,1.0,2,1.0 +1,311.0,1,1.0,0,1.0,2,1.0 +1,311.0,2,1.0,0,1.0,2,1.0 +1,312.0,1,1.0,0,1.0,2,1.0 +1,312.0,2,1.0,0,1.0,2,1.0 +1,313.0,1,1.0,0,1.0,2,1.0 +1,313.0,2,1.0,0,1.0,2,1.0 +1,314.0,1,1.0,0,1.0,2,1.0 +1,314.0,2,1.0,0,1.0,2,1.0 +1,315.0,1,1.0,0,1.0,2,1.0 +1,315.0,2,1.0,0,1.0,2,1.0 +1,316.0,1,1.0,0,1.0,2,1.0 +1,316.0,2,1.0,0,1.0,2,1.0 +1,317.0,1,1.0,0,1.0,2,1.0 +1,317.0,2,1.0,0,1.0,2,1.0 +1,318.0,1,1.0,0,1.0,2,1.0 +1,318.0,2,1.0,0,1.0,2,1.0 +1,319.0,1,1.0,0,1.0,2,1.0 +1,319.0,2,1.0,0,1.0,2,1.0 +1,320.0,1,1.0,0,1.0,2,1.0 +1,320.0,2,1.0,0,1.0,2,1.0 +1,321.0,1,1.0,0,1.0,2,1.0 +1,321.0,2,1.0,0,1.0,2,1.0 +1,322.0,1,1.0,0,1.0,2,1.0 +1,322.0,2,1.0,0,1.0,2,1.0 +1,323.0,1,1.0,0,1.0,2,1.0 +1,323.0,2,1.0,0,1.0,2,1.0 +1,324.0,1,1.0,0,1.0,2,1.0 +1,324.0,2,1.0,0,1.0,2,1.0 +1,325.0,1,1.0,0,1.0,2,1.0 +1,325.0,2,1.0,0,1.0,2,1.0 +1,326.0,1,1.0,0,1.0,2,1.0 +1,326.0,2,1.0,0,1.0,2,1.0 +1,327.0,1,1.0,0,1.0,2,1.0 +1,327.0,2,1.0,0,1.0,2,1.0 +1,328.0,1,1.0,0,1.0,2,1.0 +1,328.0,2,1.0,0,1.0,2,1.0 +1,329.0,1,1.0,0,1.0,2,1.0 +1,329.0,2,1.0,0,1.0,2,1.0 +1,330.0,1,1.0,0,1.0,2,1.0 +1,330.0,2,1.0,0,1.0,2,1.0 +1,331.0,1,1.0,0,1.0,2,1.0 +1,331.0,2,1.0,0,1.0,2,1.0 +1,332.0,1,1.0,0,1.0,2,1.0 +1,332.0,2,1.0,0,1.0,2,1.0 +1,333.0,1,1.0,0,1.0,2,1.0 +1,333.0,2,1.0,0,1.0,2,1.0 +1,334.0,1,1.0,0,1.0,2,1.0 +1,334.0,2,1.0,0,1.0,2,1.0 +1,335.0,1,1.0,0,1.0,2,1.0 +1,335.0,2,1.0,0,1.0,2,1.0 +1,336.0,1,1.0,0,1.0,2,1.0 +1,336.0,2,1.0,0,1.0,2,1.0 +1,337.0,1,1.0,0,1.0,2,1.0 +1,337.0,2,1.0,0,1.0,2,1.0 +1,338.0,1,1.0,0,1.0,2,1.0 +1,338.0,2,1.0,0,1.0,2,1.0 +1,339.0,1,1.0,0,1.0,2,1.0 +1,339.0,2,1.0,0,1.0,2,1.0 +1,340.0,1,1.0,0,1.0,2,1.0 +1,340.0,2,1.0,0,1.0,2,1.0 +1,341.0,1,1.0,0,1.0,2,1.0 +1,341.0,2,1.0,0,1.0,2,1.0 +1,342.0,1,1.0,0,1.0,2,1.0 +1,342.0,2,1.0,0,1.0,2,1.0 +1,343.0,1,1.0,0,1.0,2,1.0 +1,343.0,2,1.0,0,1.0,2,1.0 +1,344.0,1,1.0,0,1.0,2,1.0 +1,344.0,2,1.0,0,1.0,2,1.0 +1,345.0,1,1.0,0,1.0,2,1.0 +1,345.0,2,1.0,0,1.0,2,1.0 +1,346.0,1,1.0,0,1.0,2,1.0 +1,346.0,2,1.0,0,1.0,2,1.0 +1,347.0,1,1.0,0,1.0,2,1.0 +1,347.0,2,1.0,0,1.0,2,1.0 +1,348.0,1,1.0,0,1.0,2,1.0 +1,348.0,2,1.0,0,1.0,2,1.0 +1,349.0,1,1.0,0,1.0,2,1.0 +1,349.0,2,1.0,0,1.0,2,1.0 +1,350.0,1,1.0,0,1.0,2,1.0 +1,350.0,2,1.0,0,1.0,2,1.0 +1,351.0,1,1.0,0,1.0,2,1.0 +1,351.0,2,1.0,0,1.0,2,1.0 +1,352.0,1,1.0,0,1.0,2,1.0 +1,352.0,2,1.0,0,1.0,2,1.0 +1,353.0,1,1.0,0,1.0,2,1.0 +1,353.0,2,1.0,0,1.0,2,1.0 +1,354.0,1,1.0,0,1.0,2,1.0 +1,354.0,2,1.0,0,1.0,2,1.0 +1,355.0,1,1.0,0,1.0,2,1.0 +1,355.0,2,1.0,0,1.0,2,1.0 +1,356.0,1,1.0,0,1.0,2,1.0 +1,356.0,2,1.0,0,1.0,2,1.0 +1,357.0,1,1.0,0,1.0,2,1.0 +1,357.0,2,1.0,0,1.0,2,1.0 +1,358.0,1,1.0,0,1.0,2,1.0 +1,358.0,2,1.0,0,1.0,2,1.0 +1,359.0,1,1.0,0,1.0,2,1.0 +1,359.0,2,1.0,0,1.0,2,1.0 +1,360.0,1,1.0,0,1.0,2,1.0 +1,360.0,2,1.0,0,1.0,2,1.0 +1,361.0,1,1.0,0,1.0,2,1.0 +1,361.0,2,1.0,0,1.0,2,1.0 +1,362.0,1,1.0,0,1.0,2,1.0 +1,362.0,2,1.0,0,1.0,2,1.0 +1,363.0,1,1.0,0,1.0,2,1.0 +1,363.0,2,1.0,0,1.0,2,1.0 +1,364.0,1,1.0,0,1.0,2,1.0 +1,364.0,2,1.0,0,1.0,2,1.0 +1,365.0,1,1.0,0,1.0,2,1.0 +1,365.0,2,1.0,0,1.0,2,1.0 +1,366.0,1,1.0,0,1.0,2,1.0 +1,366.0,2,1.0,0,1.0,2,1.0 +1,367.0,1,1.0,0,1.0,2,1.0 +1,367.0,2,1.0,0,1.0,2,1.0 +1,368.0,1,1.0,0,1.0,2,1.0 +1,368.0,2,1.0,0,1.0,2,1.0 +1,369.0,1,1.0,0,1.0,2,1.0 +1,369.0,2,1.0,0,1.0,2,1.0 +1,370.0,1,1.0,0,1.0,2,1.0 +1,370.0,2,1.0,0,1.0,2,1.0 +1,371.0,1,1.0,0,1.0,2,1.0 +1,371.0,2,1.0,0,1.0,2,1.0 +1,372.0,1,1.0,0,1.0,2,1.0 +1,372.0,2,1.0,0,1.0,2,1.0 +1,373.0,1,1.0,0,1.0,2,1.0 +1,373.0,2,1.0,0,1.0,2,1.0 +1,374.0,1,1.0,0,1.0,2,1.0 +1,374.0,2,1.0,0,1.0,2,1.0 +1,375.0,1,1.0,0,1.0,2,1.0 +1,375.0,2,1.0,0,1.0,2,1.0 +1,376.0,1,1.0,0,1.0,2,1.0 +1,376.0,2,1.0,0,1.0,2,1.0 +1,377.0,1,1.0,0,1.0,2,1.0 +1,377.0,2,1.0,0,1.0,2,1.0 +1,378.0,1,1.0,0,1.0,2,1.0 +1,378.0,2,1.0,0,1.0,2,1.0 +1,379.0,1,1.0,0,1.0,2,1.0 +1,379.0,2,1.0,0,1.0,2,1.0 +1,380.0,1,1.0,0,1.0,2,1.0 +1,380.0,2,1.0,0,1.0,2,1.0 +1,381.0,1,1.0,0,1.0,2,1.0 +1,381.0,2,1.0,0,1.0,2,1.0 +1,382.0,1,1.0,0,1.0,2,1.0 +1,382.0,2,1.0,0,1.0,2,1.0 +1,383.0,1,1.0,0,1.0,2,1.0 +1,383.0,2,1.0,0,1.0,2,1.0 +1,384.0,1,1.0,0,1.0,2,1.0 +1,384.0,2,1.0,0,1.0,2,1.0 +1,385.0,1,1.0,0,1.0,2,1.0 +1,385.0,2,1.0,0,1.0,2,1.0 +1,386.0,1,1.0,0,1.0,2,1.0 +1,386.0,2,1.0,0,1.0,2,1.0 +1,387.0,1,1.0,0,1.0,2,1.0 +1,387.0,2,1.0,0,1.0,2,1.0 +1,388.0,1,1.0,0,1.0,2,1.0 +1,388.0,2,1.0,0,1.0,2,1.0 +1,389.0,1,1.0,0,1.0,2,1.0 +1,389.0,2,1.0,0,1.0,2,1.0 +1,390.0,1,1.0,0,1.0,2,1.0 +1,390.0,2,1.0,0,1.0,2,1.0 +1,391.0,1,1.0,0,1.0,2,1.0 +1,391.0,2,1.0,0,1.0,2,1.0 +1,392.0,1,1.0,0,1.0,2,1.0 +1,392.0,2,1.0,0,1.0,2,1.0 +1,393.0,1,1.0,0,1.0,2,1.0 +1,393.0,2,1.0,0,1.0,2,1.0 +1,394.0,1,1.0,0,1.0,2,1.0 +1,394.0,2,1.0,0,1.0,2,1.0 +1,395.0,1,1.0,0,1.0,2,1.0 +1,395.0,2,1.0,0,1.0,2,1.0 +1,396.0,1,1.0,0,1.0,2,1.0 +1,396.0,2,1.0,0,1.0,2,1.0 +1,397.0,1,1.0,0,1.0,2,1.0 +1,397.0,2,1.0,0,1.0,2,1.0 +1,398.0,1,1.0,0,1.0,2,1.0 +1,398.0,2,1.0,0,1.0,2,1.0 +1,399.0,1,1.0,0,1.0,2,1.0 +1,399.0,2,1.0,0,1.0,2,1.0 +1,400.0,1,1.0,0,1.0,2,1.0 +1,400.0,2,1.0,0,1.0,2,1.0 +1,401.0,1,1.0,0,1.0,2,1.0 +1,401.0,2,1.0,0,1.0,2,1.0 +1,402.0,1,1.0,0,1.0,2,1.0 +1,402.0,2,1.0,0,1.0,2,1.0 +1,403.0,1,1.0,0,1.0,2,1.0 +1,403.0,2,1.0,0,1.0,2,1.0 +1,404.0,1,1.0,0,1.0,2,1.0 +1,404.0,2,1.0,0,1.0,2,1.0 +1,405.0,1,1.0,0,1.0,2,1.0 +1,405.0,2,1.0,0,1.0,2,1.0 +1,406.0,1,1.0,0,1.0,2,1.0 +1,406.0,2,1.0,0,1.0,2,1.0 +1,407.0,1,1.0,0,1.0,2,1.0 +1,407.0,2,1.0,0,1.0,2,1.0 +1,408.0,1,1.0,0,1.0,2,1.0 +1,408.0,2,1.0,0,1.0,2,1.0 +1,409.0,1,1.0,0,1.0,2,1.0 +1,409.0,2,1.0,0,1.0,2,1.0 +1,410.0,1,1.0,0,1.0,2,1.0 +1,410.0,2,1.0,0,1.0,2,1.0 +1,411.0,1,1.0,0,1.0,2,1.0 +1,411.0,2,1.0,0,1.0,2,1.0 +1,412.0,1,1.0,0,1.0,2,1.0 +1,412.0,2,1.0,0,1.0,2,1.0 +1,413.0,1,1.0,0,1.0,2,1.0 +1,413.0,2,1.0,0,1.0,2,1.0 +1,414.0,1,1.0,0,1.0,2,1.0 +1,414.0,2,1.0,0,1.0,2,1.0 +1,415.0,1,1.0,0,1.0,2,1.0 +1,415.0,2,1.0,0,1.0,2,1.0 +1,416.0,1,1.0,0,1.0,2,1.0 +1,416.0,2,1.0,0,1.0,2,1.0 +1,417.0,1,1.0,0,1.0,2,1.0 +1,417.0,2,1.0,0,1.0,2,1.0 +1,418.0,1,1.0,0,1.0,2,1.0 +1,418.0,2,1.0,0,1.0,2,1.0 +1,419.0,1,1.0,0,1.0,2,1.0 +1,419.0,2,1.0,0,1.0,2,1.0 +1,420.0,1,1.0,0,1.0,2,1.0 +1,420.0,2,1.0,0,1.0,2,1.0 +1,421.0,1,1.0,0,1.0,2,1.0 +1,421.0,2,1.0,0,1.0,2,1.0 +1,422.0,1,1.0,0,1.0,2,1.0 +1,422.0,2,1.0,0,1.0,2,1.0 +1,423.0,1,1.0,0,1.0,2,1.0 +1,423.0,2,1.0,0,1.0,2,1.0 +1,424.0,1,1.0,0,1.0,2,1.0 +1,424.0,2,1.0,0,1.0,2,1.0 +1,425.0,1,1.0,0,1.0,2,1.0 +1,425.0,2,1.0,0,1.0,2,1.0 +1,426.0,1,1.0,0,1.0,2,1.0 +1,426.0,2,1.0,0,1.0,2,1.0 +1,427.0,1,1.0,0,1.0,2,1.0 +1,427.0,2,1.0,0,1.0,2,1.0 +1,428.0,1,1.0,0,1.0,2,1.0 +1,428.0,2,1.0,0,1.0,2,1.0 +1,429.0,1,1.0,0,1.0,2,1.0 +1,429.0,2,1.0,0,1.0,2,1.0 +1,430.0,1,1.0,0,1.0,2,1.0 +1,430.0,2,1.0,0,1.0,2,1.0 +1,431.0,1,1.0,0,1.0,2,1.0 +1,431.0,2,1.0,0,1.0,2,1.0 +1,432.0,1,1.0,0,1.0,2,1.0 +1,432.0,2,1.0,0,1.0,2,1.0 +1,433.0,1,1.0,0,1.0,2,1.0 +1,433.0,2,1.0,0,1.0,2,1.0 +1,434.0,1,1.0,0,1.0,2,1.0 +1,434.0,2,1.0,0,1.0,2,1.0 +1,435.0,1,1.0,0,1.0,2,1.0 +1,435.0,2,1.0,0,1.0,2,1.0 +1,436.0,1,1.0,0,1.0,2,1.0 +1,436.0,2,1.0,0,1.0,2,1.0 +1,437.0,1,1.0,0,1.0,2,1.0 +1,437.0,2,1.0,0,1.0,2,1.0 +1,438.0,1,1.0,0,1.0,2,1.0 +1,438.0,2,1.0,0,1.0,2,1.0 +1,439.0,1,1.0,0,1.0,2,1.0 +1,439.0,2,1.0,0,1.0,2,1.0 +1,440.0,1,1.0,0,1.0,2,1.0 +1,440.0,2,1.0,0,1.0,2,1.0 +1,441.0,1,1.0,0,1.0,2,1.0 +1,441.0,2,1.0,0,1.0,2,1.0 +1,442.0,1,1.0,0,1.0,2,1.0 +1,442.0,2,1.0,0,1.0,2,1.0 +1,443.0,1,1.0,0,1.0,2,1.0 +1,443.0,2,1.0,0,1.0,2,1.0 +1,444.0,1,1.0,0,1.0,2,1.0 +1,444.0,2,1.0,0,1.0,2,1.0 +1,445.0,1,1.0,0,1.0,2,1.0 +1,445.0,2,1.0,0,1.0,2,1.0 +1,446.0,1,1.0,0,1.0,2,1.0 +1,446.0,2,1.0,0,1.0,2,1.0 +1,447.0,1,1.0,0,1.0,2,1.0 +1,447.0,2,1.0,0,1.0,2,1.0 +1,448.0,1,1.0,0,1.0,2,1.0 +1,448.0,2,1.0,0,1.0,2,1.0 +1,449.0,1,1.0,0,1.0,2,1.0 +1,449.0,2,1.0,0,1.0,2,1.0 +1,450.0,1,1.0,0,1.0,2,1.0 +1,450.0,2,1.0,0,1.0,2,1.0 +1,451.0,1,1.0,0,1.0,2,1.0 +1,451.0,2,1.0,0,1.0,2,1.0 +1,452.0,1,1.0,0,1.0,2,1.0 +1,452.0,2,1.0,0,1.0,2,1.0 +1,453.0,1,1.0,0,1.0,2,1.0 +1,453.0,2,1.0,0,1.0,2,1.0 +1,454.0,1,1.0,0,1.0,2,1.0 +1,454.0,2,1.0,0,1.0,2,1.0 +1,455.0,1,1.0,0,1.0,2,1.0 +1,455.0,2,1.0,0,1.0,2,1.0 +1,456.0,1,1.0,0,1.0,2,1.0 +1,456.0,2,1.0,0,1.0,2,1.0 +1,457.0,1,1.0,0,1.0,2,1.0 +1,457.0,2,1.0,0,1.0,2,1.0 +1,458.0,1,1.0,0,1.0,2,1.0 +1,458.0,2,1.0,0,1.0,2,1.0 +1,459.0,1,1.0,0,1.0,2,1.0 +1,459.0,2,1.0,0,1.0,2,1.0 +1,460.0,1,1.0,0,1.0,2,1.0 +1,460.0,2,1.0,0,1.0,2,1.0 +1,461.0,1,1.0,0,1.0,2,1.0 +1,461.0,2,1.0,0,1.0,2,1.0 +1,462.0,1,1.0,0,1.0,2,1.0 +1,462.0,2,1.0,0,1.0,2,1.0 +1,463.0,1,1.0,0,1.0,2,1.0 +1,463.0,2,1.0,0,1.0,2,1.0 +1,464.0,1,1.0,0,1.0,2,1.0 +1,464.0,2,1.0,0,1.0,2,1.0 +1,465.0,1,1.0,0,1.0,2,1.0 +1,465.0,2,1.0,0,1.0,2,1.0 +1,466.0,1,1.0,0,1.0,2,1.0 +1,466.0,2,1.0,0,1.0,2,1.0 +1,467.0,1,1.0,0,1.0,2,1.0 +1,467.0,2,1.0,0,1.0,2,1.0 +1,468.0,1,1.0,0,1.0,2,1.0 +1,468.0,2,1.0,0,1.0,2,1.0 +1,469.0,1,1.0,0,1.0,2,1.0 +1,469.0,2,1.0,0,1.0,2,1.0 +1,470.0,1,1.0,0,1.0,2,1.0 +1,470.0,2,1.0,0,1.0,2,1.0 +1,471.0,1,1.0,0,1.0,2,1.0 +1,471.0,2,1.0,0,1.0,2,1.0 +1,472.0,1,1.0,0,1.0,2,1.0 +1,472.0,2,1.0,0,1.0,2,1.0 +1,473.0,1,1.0,0,1.0,2,1.0 +1,473.0,2,1.0,0,1.0,2,1.0 +1,474.0,1,1.0,0,1.0,2,1.0 +1,474.0,2,1.0,0,1.0,2,1.0 +1,475.0,1,1.0,0,1.0,2,1.0 +1,475.0,2,1.0,0,1.0,2,1.0 +1,476.0,1,1.0,0,1.0,2,1.0 +1,476.0,2,1.0,0,1.0,2,1.0 +1,477.0,1,1.0,0,1.0,2,1.0 +1,477.0,2,1.0,0,1.0,2,1.0 +1,478.0,1,1.0,0,1.0,2,1.0 +1,478.0,2,1.0,0,1.0,2,1.0 +1,479.0,1,1.0,0,1.0,2,1.0 +1,479.0,2,1.0,0,1.0,2,1.0 +1,480.0,1,1.0,0,1.0,2,1.0 +1,480.0,2,1.0,0,1.0,2,1.0 +1,481.0,1,1.0,0,1.0,2,1.0 +1,481.0,2,1.0,0,1.0,2,1.0 +1,482.0,1,1.0,0,1.0,2,1.0 +1,482.0,2,1.0,0,1.0,2,1.0 +1,483.0,1,1.0,0,1.0,2,1.0 +1,483.0,2,1.0,0,1.0,2,1.0 +1,484.0,1,1.0,0,1.0,2,1.0 +1,484.0,2,1.0,0,1.0,2,1.0 +1,485.0,1,1.0,0,1.0,2,1.0 +1,485.0,2,1.0,0,1.0,2,1.0 +1,486.0,1,1.0,0,1.0,2,1.0 +1,486.0,2,1.0,0,1.0,2,1.0 +1,487.0,1,1.0,0,1.0,2,1.0 +1,487.0,2,1.0,0,1.0,2,1.0 +1,488.0,1,1.0,0,1.0,2,1.0 +1,488.0,2,1.0,0,1.0,2,1.0 +1,489.0,1,1.0,0,1.0,2,1.0 +1,489.0,2,1.0,0,1.0,2,1.0 +1,490.0,1,1.0,0,1.0,2,1.0 +1,490.0,2,1.0,0,1.0,2,1.0 +1,491.0,1,1.0,0,1.0,2,1.0 +1,491.0,2,1.0,0,1.0,2,1.0 +1,492.0,1,1.0,0,1.0,2,1.0 +1,492.0,2,1.0,0,1.0,2,1.0 +1,493.0,1,1.0,0,1.0,2,1.0 +1,493.0,2,1.0,0,1.0,2,1.0 +1,494.0,1,1.0,0,1.0,2,1.0 +1,494.0,2,1.0,0,1.0,2,1.0 +1,495.0,1,1.0,0,1.0,2,1.0 +1,495.0,2,1.0,0,1.0,2,1.0 +1,496.0,1,1.0,0,1.0,2,1.0 +1,496.0,2,1.0,0,1.0,2,1.0 +1,497.0,1,1.0,0,1.0,2,1.0 +1,497.0,2,1.0,0,1.0,2,1.0 +1,498.0,1,1.0,0,1.0,2,1.0 +1,498.0,2,1.0,0,1.0,2,1.0 +1,499.0,1,1.0,0,1.0,2,1.0 +1,499.0,2,1.0,0,1.0,2,1.0 +1,500.0,1,1.0,0,1.0,2,1.0 +1,500.0,2,1.0,0,1.0,2,1.0 +1,501.0,1,1.0,0,1.0,2,1.0 +1,501.0,2,1.0,0,1.0,2,1.0 +1,502.0,1,1.0,0,1.0,2,1.0 +1,502.0,2,1.0,0,1.0,2,1.0 +1,503.0,1,1.0,0,1.0,2,1.0 +1,503.0,2,1.0,0,1.0,2,1.0 +1,504.0,1,1.0,0,1.0,2,1.0 +1,504.0,2,1.0,0,1.0,2,1.0 +1,505.0,1,1.0,0,1.0,2,1.0 +1,505.0,2,1.0,0,1.0,2,1.0 +1,506.0,1,1.0,0,1.0,2,1.0 +1,506.0,2,1.0,0,1.0,2,1.0 +1,507.0,1,1.0,0,1.0,2,1.0 +1,507.0,2,1.0,0,1.0,2,1.0 +1,508.0,1,1.0,0,1.0,2,1.0 +1,508.0,2,1.0,0,1.0,2,1.0 +1,509.0,1,1.0,0,1.0,2,1.0 +1,509.0,2,1.0,0,1.0,2,1.0 +1,510.0,1,1.0,0,1.0,2,1.0 +1,510.0,2,1.0,0,1.0,2,1.0 +1,511.0,1,1.0,0,1.0,2,1.0 +1,511.0,2,1.0,0,1.0,2,1.0 +1,512.0,1,1.0,0,1.0,2,1.0 +1,512.0,2,1.0,0,1.0,2,1.0 +1,513.0,1,1.0,0,1.0,2,1.0 +1,513.0,2,1.0,0,1.0,2,1.0 +1,514.0,1,1.0,0,1.0,2,1.0 +1,514.0,2,1.0,0,1.0,2,1.0 +1,515.0,1,1.0,0,1.0,2,1.0 +1,515.0,2,1.0,0,1.0,2,1.0 +1,516.0,1,1.0,0,1.0,2,1.0 +1,516.0,2,1.0,0,1.0,2,1.0 +1,517.0,1,1.0,0,1.0,2,1.0 +1,517.0,2,1.0,0,1.0,2,1.0 +1,518.0,1,1.0,0,1.0,2,1.0 +1,518.0,2,1.0,0,1.0,2,1.0 +1,519.0,1,1.0,0,1.0,2,1.0 +1,519.0,2,1.0,0,1.0,2,1.0 +1,520.0,1,1.0,0,1.0,2,1.0 +1,520.0,2,1.0,0,1.0,2,1.0 +1,521.0,1,1.0,0,1.0,2,1.0 +1,521.0,2,1.0,0,1.0,2,1.0 +1,522.0,1,1.0,0,1.0,2,1.0 +1,522.0,2,1.0,0,1.0,2,1.0 +1,523.0,1,1.0,0,1.0,2,1.0 +1,523.0,2,1.0,0,1.0,2,1.0 +1,524.0,1,1.0,0,1.0,2,1.0 +1,524.0,2,1.0,0,1.0,2,1.0 +1,525.0,1,1.0,0,1.0,2,1.0 +1,525.0,2,1.0,0,1.0,2,1.0 +1,526.0,1,1.0,0,1.0,2,1.0 +1,526.0,2,1.0,0,1.0,2,1.0 +1,527.0,1,1.0,0,1.0,2,1.0 +1,527.0,2,1.0,0,1.0,2,1.0 +1,528.0,1,1.0,0,1.0,2,1.0 +1,528.0,2,1.0,0,1.0,2,1.0 +1,529.0,1,1.0,0,1.0,2,1.0 +1,529.0,2,1.0,0,1.0,2,1.0 +1,530.0,1,1.0,0,1.0,2,1.0 +1,530.0,2,1.0,0,1.0,2,1.0 +1,531.0,1,1.0,0,1.0,2,1.0 +1,531.0,2,1.0,0,1.0,2,1.0 +1,532.0,1,1.0,0,1.0,2,1.0 +1,532.0,2,1.0,0,1.0,2,1.0 +1,533.0,1,1.0,0,1.0,2,1.0 +1,533.0,2,1.0,0,1.0,2,1.0 +1,534.0,1,1.0,0,1.0,2,1.0 +1,534.0,2,1.0,0,1.0,2,1.0 +1,535.0,1,1.0,0,1.0,2,1.0 +1,535.0,2,1.0,0,1.0,2,1.0 +1,536.0,1,1.0,0,1.0,2,1.0 +1,536.0,2,1.0,0,1.0,2,1.0 +1,537.0,1,1.0,0,1.0,2,1.0 +1,537.0,2,1.0,0,1.0,2,1.0 +1,538.0,1,1.0,0,1.0,2,1.0 +1,538.0,2,1.0,0,1.0,2,1.0 +1,539.0,1,1.0,0,1.0,2,1.0 +1,539.0,2,1.0,0,1.0,2,1.0 +1,540.0,1,1.0,0,1.0,2,1.0 +1,540.0,2,1.0,0,1.0,2,1.0 +1,541.0,1,1.0,0,1.0,2,1.0 +1,541.0,2,1.0,0,1.0,2,1.0 +1,542.0,1,1.0,0,1.0,2,1.0 +1,542.0,2,1.0,0,1.0,2,1.0 +1,543.0,1,1.0,0,1.0,2,1.0 +1,543.0,2,1.0,0,1.0,2,1.0 +1,544.0,1,1.0,0,1.0,2,1.0 +1,544.0,2,1.0,0,1.0,2,1.0 +1,545.0,1,1.0,0,1.0,2,1.0 +1,545.0,2,1.0,0,1.0,2,1.0 +1,546.0,1,1.0,0,1.0,2,1.0 +1,546.0,2,1.0,0,1.0,2,1.0 +1,547.0,1,1.0,0,1.0,2,1.0 +1,547.0,2,1.0,0,1.0,2,1.0 +1,548.0,1,1.0,0,1.0,2,1.0 +1,548.0,2,1.0,0,1.0,2,1.0 +1,549.0,1,1.0,0,1.0,2,1.0 +1,549.0,2,1.0,0,1.0,2,1.0 +1,550.0,1,1.0,0,1.0,2,1.0 +1,550.0,2,1.0,0,1.0,2,1.0 +1,551.0,1,1.0,0,1.0,2,1.0 +1,551.0,2,1.0,0,1.0,2,1.0 +1,552.0,1,1.0,0,1.0,2,1.0 +1,552.0,2,1.0,0,1.0,2,1.0 +1,553.0,1,1.0,0,1.0,2,1.0 +1,553.0,2,1.0,0,1.0,2,1.0 +1,554.0,1,1.0,0,1.0,2,1.0 +1,554.0,2,1.0,0,1.0,2,1.0 +1,555.0,1,1.0,0,1.0,2,1.0 +1,555.0,2,1.0,0,1.0,2,1.0 +1,556.0,1,1.0,0,1.0,2,1.0 +1,556.0,2,1.0,0,1.0,2,1.0 +1,557.0,1,1.0,0,1.0,2,1.0 +1,557.0,2,1.0,0,1.0,2,1.0 +1,558.0,1,1.0,0,1.0,2,1.0 +1,558.0,2,1.0,0,1.0,2,1.0 +1,559.0,1,1.0,0,1.0,2,1.0 +1,559.0,2,1.0,0,1.0,2,1.0 +1,560.0,1,1.0,0,1.0,2,1.0 +1,560.0,2,1.0,0,1.0,2,1.0 +1,561.0,1,1.0,0,1.0,2,1.0 +1,561.0,2,1.0,0,1.0,2,1.0 +1,562.0,1,1.0,0,1.0,2,1.0 +1,562.0,2,1.0,0,1.0,2,1.0 +1,563.0,1,1.0,0,1.0,2,1.0 +1,563.0,2,1.0,0,1.0,2,1.0 +1,564.0,1,1.0,0,1.0,2,1.0 +1,564.0,2,1.0,0,1.0,2,1.0 +1,565.0,1,1.0,0,1.0,2,1.0 +1,565.0,2,1.0,0,1.0,2,1.0 +1,566.0,1,1.0,0,1.0,2,1.0 +1,566.0,2,1.0,0,1.0,2,1.0 +1,567.0,1,1.0,0,1.0,2,1.0 +1,567.0,2,1.0,0,1.0,2,1.0 +1,568.0,1,1.0,0,1.0,2,1.0 +1,568.0,2,1.0,0,1.0,2,1.0 +1,569.0,1,1.0,0,1.0,2,1.0 +1,569.0,2,1.0,0,1.0,2,1.0 +1,570.0,1,1.0,0,1.0,2,1.0 +1,570.0,2,1.0,0,1.0,2,1.0 +1,571.0,1,1.0,0,1.0,2,1.0 +1,571.0,2,1.0,0,1.0,2,1.0 +1,572.0,1,1.0,0,1.0,2,1.0 +1,572.0,2,1.0,0,1.0,2,1.0 +1,573.0,1,1.0,0,1.0,2,1.0 +1,573.0,2,1.0,0,1.0,2,1.0 +1,574.0,1,1.0,0,1.0,2,1.0 +1,574.0,2,1.0,0,1.0,2,1.0 +1,575.0,1,1.0,0,1.0,2,1.0 +1,575.0,2,1.0,0,1.0,2,1.0 +1,576.0,1,1.0,0,1.0,2,1.0 +1,576.0,2,1.0,0,1.0,2,1.0 +1,577.0,1,1.0,0,1.0,2,1.0 +1,577.0,2,1.0,0,1.0,2,1.0 +1,578.0,1,1.0,0,1.0,2,1.0 +1,578.0,2,1.0,0,1.0,2,1.0 +1,579.0,1,1.0,0,1.0,2,1.0 +1,579.0,2,1.0,0,1.0,2,1.0 +1,580.0,1,1.0,0,1.0,2,1.0 +1,580.0,2,1.0,0,1.0,2,1.0 +1,581.0,1,1.0,0,1.0,2,1.0 +1,581.0,2,1.0,0,1.0,2,1.0 +1,582.0,1,1.0,0,1.0,2,1.0 +1,582.0,2,1.0,0,1.0,2,1.0 +1,583.0,1,1.0,0,1.0,2,1.0 +1,583.0,2,1.0,0,1.0,2,1.0 +1,584.0,1,1.0,0,1.0,2,1.0 +1,584.0,2,1.0,0,1.0,2,1.0 +1,585.0,1,1.0,0,1.0,2,1.0 +1,585.0,2,1.0,0,1.0,2,1.0 +1,586.0,1,1.0,0,1.0,2,1.0 +1,586.0,2,1.0,0,1.0,2,1.0 +1,587.0,1,1.0,0,1.0,2,1.0 +1,587.0,2,1.0,0,1.0,2,1.0 +1,588.0,1,1.0,0,1.0,2,1.0 +1,588.0,2,1.0,0,1.0,2,1.0 +1,589.0,1,1.0,0,1.0,2,1.0 +1,589.0,2,1.0,0,1.0,2,1.0 +1,590.0,1,1.0,0,1.0,2,1.0 +1,590.0,2,1.0,0,1.0,2,1.0 +1,591.0,1,1.0,0,1.0,2,1.0 +1,591.0,2,1.0,0,1.0,2,1.0 +1,592.0,1,1.0,0,1.0,2,1.0 +1,592.0,2,1.0,0,1.0,2,1.0 +1,593.0,1,1.0,0,1.0,2,1.0 +1,593.0,2,1.0,0,1.0,2,1.0 +1,594.0,1,1.0,0,1.0,2,1.0 +1,594.0,2,1.0,0,1.0,2,1.0 +1,595.0,1,1.0,0,1.0,2,1.0 +1,595.0,2,1.0,0,1.0,2,1.0 +1,596.0,1,1.0,0,1.0,2,1.0 +1,596.0,2,1.0,0,1.0,2,1.0 +1,597.0,1,1.0,0,1.0,2,1.0 +1,597.0,2,1.0,0,1.0,2,1.0 +1,598.0,1,1.0,0,1.0,2,1.0 +1,598.0,2,1.0,0,1.0,2,1.0 +1,599.0,1,1.0,0,1.0,2,1.0 +1,599.0,2,1.0,0,1.0,2,1.0 +1,600.0,1,1.0,0,1.0,2,1.0 +1,600.0,2,1.0,0,1.0,2,1.0 +1,601.0,1,1.0,0,1.0,2,1.0 +1,601.0,2,1.0,0,1.0,2,1.0 +1,602.0,1,1.0,0,1.0,2,1.0 +1,602.0,2,1.0,0,1.0,2,1.0 +1,603.0,1,1.0,0,1.0,2,1.0 +1,603.0,2,1.0,0,1.0,2,1.0 +1,604.0,1,1.0,0,1.0,2,1.0 +1,604.0,2,1.0,0,1.0,2,1.0 +1,605.0,1,1.0,0,1.0,2,1.0 +1,605.0,2,1.0,0,1.0,2,1.0 +1,606.0,1,1.0,0,1.0,2,1.0 +1,606.0,2,1.0,0,1.0,2,1.0 +1,607.0,1,1.0,0,1.0,2,1.0 +1,607.0,2,1.0,0,1.0,2,1.0 +1,608.0,1,1.0,0,1.0,2,1.0 +1,608.0,2,1.0,0,1.0,2,1.0 +1,609.0,1,1.0,0,1.0,2,1.0 +1,609.0,2,1.0,0,1.0,2,1.0 +1,610.0,1,1.0,0,1.0,2,1.0 +1,610.0,2,1.0,0,1.0,2,1.0 +1,611.0,1,1.0,0,1.0,2,1.0 +1,611.0,2,1.0,0,1.0,2,1.0 +1,612.0,1,1.0,0,1.0,2,1.0 +1,612.0,2,1.0,0,1.0,2,1.0 +1,613.0,1,1.0,0,1.0,2,1.0 +1,613.0,2,1.0,0,1.0,2,1.0 +1,614.0,1,1.0,0,1.0,2,1.0 +1,614.0,2,1.0,0,1.0,2,1.0 +1,615.0,1,1.0,0,1.0,2,1.0 +1,615.0,2,1.0,0,1.0,2,1.0 +1,616.0,1,1.0,0,1.0,2,1.0 +1,616.0,2,1.0,0,1.0,2,1.0 +1,617.0,1,1.0,0,1.0,2,1.0 +1,617.0,2,1.0,0,1.0,2,1.0 +1,618.0,1,1.0,0,1.0,2,1.0 +1,618.0,2,1.0,0,1.0,2,1.0 +1,619.0,1,1.0,0,1.0,2,1.0 +1,619.0,2,1.0,0,1.0,2,1.0 +1,620.0,1,1.0,0,1.0,2,1.0 +1,620.0,2,1.0,0,1.0,2,1.0 +1,621.0,1,1.0,0,1.0,2,1.0 +1,621.0,2,1.0,0,1.0,2,1.0 +1,622.0,1,1.0,0,1.0,2,1.0 +1,622.0,2,1.0,0,1.0,2,1.0 +1,623.0,1,1.0,0,1.0,2,1.0 +1,623.0,2,1.0,0,1.0,2,1.0 +1,624.0,1,1.0,0,1.0,2,1.0 +1,624.0,2,1.0,0,1.0,2,1.0 +1,625.0,1,1.0,0,1.0,2,1.0 +1,625.0,2,1.0,0,1.0,2,1.0 +1,626.0,1,1.0,0,1.0,2,1.0 +1,626.0,2,1.0,0,1.0,2,1.0 +1,627.0,1,1.0,0,1.0,2,1.0 +1,627.0,2,1.0,0,1.0,2,1.0 +1,628.0,1,1.0,0,1.0,2,1.0 +1,628.0,2,1.0,0,1.0,2,1.0 +1,629.0,1,1.0,0,1.0,2,1.0 +1,629.0,2,1.0,0,1.0,2,1.0 +1,630.0,1,1.0,0,1.0,2,1.0 +1,630.0,2,1.0,0,1.0,2,1.0 +1,631.0,1,1.0,0,1.0,2,1.0 +1,631.0,2,1.0,0,1.0,2,1.0 +1,632.0,1,1.0,0,1.0,2,1.0 +1,632.0,2,1.0,0,1.0,2,1.0 +1,633.0,1,1.0,0,1.0,2,1.0 +1,633.0,2,1.0,0,1.0,2,1.0 +1,634.0,1,1.0,0,1.0,2,1.0 +1,634.0,2,1.0,0,1.0,2,1.0 +1,635.0,1,1.0,0,1.0,2,1.0 +1,635.0,2,1.0,0,1.0,2,1.0 +1,636.0,1,1.0,0,1.0,2,1.0 +1,636.0,2,1.0,0,1.0,2,1.0 +1,637.0,1,1.0,0,1.0,2,1.0 +1,637.0,2,1.0,0,1.0,2,1.0 +1,638.0,1,1.0,0,1.0,2,1.0 +1,638.0,2,1.0,0,1.0,2,1.0 +1,639.0,1,1.0,0,1.0,2,1.0 +1,639.0,2,1.0,0,1.0,2,1.0 +1,640.0,1,1.0,0,1.0,2,1.0 +1,640.0,2,1.0,0,1.0,2,1.0 +1,641.0,1,1.0,0,1.0,2,1.0 +1,641.0,2,1.0,0,1.0,2,1.0 +1,642.0,1,1.0,0,1.0,2,1.0 +1,642.0,2,1.0,0,1.0,2,1.0 +1,643.0,1,1.0,0,1.0,2,1.0 +1,643.0,2,1.0,0,1.0,2,1.0 +1,644.0,1,1.0,0,1.0,2,1.0 +1,644.0,2,1.0,0,1.0,2,1.0 +1,645.0,1,1.0,0,1.0,2,1.0 +1,645.0,2,1.0,0,1.0,2,1.0 +1,646.0,1,1.0,0,1.0,2,1.0 +1,646.0,2,1.0,0,1.0,2,1.0 +1,647.0,1,1.0,0,1.0,2,1.0 +1,647.0,2,1.0,0,1.0,2,1.0 +1,648.0,1,1.0,0,1.0,2,1.0 +1,648.0,2,1.0,0,1.0,2,1.0 +1,649.0,1,1.0,0,1.0,2,1.0 +1,649.0,2,1.0,0,1.0,2,1.0 +1,650.0,1,1.0,0,1.0,2,1.0 +1,650.0,2,1.0,0,1.0,2,1.0 +1,651.0,1,1.0,0,1.0,2,1.0 +1,651.0,2,1.0,0,1.0,2,1.0 +1,652.0,1,1.0,0,1.0,2,1.0 +1,652.0,2,1.0,0,1.0,2,1.0 +1,653.0,1,1.0,0,1.0,2,1.0 +1,653.0,2,1.0,0,1.0,2,1.0 +1,654.0,1,1.0,0,1.0,2,1.0 +1,654.0,2,1.0,0,1.0,2,1.0 +1,655.0,1,1.0,0,1.0,2,1.0 +1,655.0,2,1.0,0,1.0,2,1.0 +1,656.0,1,1.0,0,1.0,2,1.0 +1,656.0,2,1.0,0,1.0,2,1.0 +1,657.0,1,1.0,0,1.0,2,1.0 +1,657.0,2,1.0,0,1.0,2,1.0 +1,658.0,1,1.0,0,1.0,2,1.0 +1,658.0,2,1.0,0,1.0,2,1.0 +1,659.0,1,1.0,0,1.0,2,1.0 +1,659.0,2,1.0,0,1.0,2,1.0 +1,660.0,1,1.0,0,1.0,2,1.0 +1,660.0,2,1.0,0,1.0,2,1.0 +1,661.0,1,1.0,0,1.0,2,1.0 +1,661.0,2,1.0,0,1.0,2,1.0 +1,662.0,1,1.0,0,1.0,2,1.0 +1,662.0,2,1.0,0,1.0,2,1.0 +1,663.0,1,1.0,0,1.0,2,1.0 +1,663.0,2,1.0,0,1.0,2,1.0 +1,664.0,1,1.0,0,1.0,2,1.0 +1,664.0,2,1.0,0,1.0,2,1.0 +1,665.0,1,1.0,0,1.0,2,1.0 +1,665.0,2,1.0,0,1.0,2,1.0 +1,666.0,1,1.0,0,1.0,2,1.0 +1,666.0,2,1.0,0,1.0,2,1.0 +1,667.0,1,1.0,0,1.0,2,1.0 +1,667.0,2,1.0,0,1.0,2,1.0 +1,668.0,1,1.0,0,1.0,2,1.0 +1,668.0,2,1.0,0,1.0,2,1.0 +1,669.0,1,1.0,0,1.0,2,1.0 +1,669.0,2,1.0,0,1.0,2,1.0 +1,670.0,1,1.0,0,1.0,2,1.0 +1,670.0,2,1.0,0,1.0,2,1.0 +1,671.0,1,1.0,0,1.0,2,1.0 +1,671.0,2,1.0,0,1.0,2,1.0 +1,672.0,1,1.0,0,1.0,2,1.0 +1,672.0,2,1.0,0,1.0,2,1.0 +1,673.0,1,1.0,0,1.0,2,1.0 +1,673.0,2,1.0,0,1.0,2,1.0 +1,674.0,1,1.0,0,1.0,2,1.0 +1,674.0,2,1.0,0,1.0,2,1.0 +1,675.0,1,1.0,0,1.0,2,1.0 +1,675.0,2,1.0,0,1.0,2,1.0 +1,676.0,1,1.0,0,1.0,2,1.0 +1,676.0,2,1.0,0,1.0,2,1.0 +1,677.0,1,1.0,0,1.0,2,1.0 +1,677.0,2,1.0,0,1.0,2,1.0 +1,678.0,1,1.0,0,1.0,2,1.0 +1,678.0,2,1.0,0,1.0,2,1.0 +1,679.0,1,1.0,0,1.0,2,1.0 +1,679.0,2,1.0,0,1.0,2,1.0 +1,680.0,1,1.0,0,1.0,2,1.0 +1,680.0,2,1.0,0,1.0,2,1.0 +1,681.0,1,1.0,0,1.0,2,1.0 +1,681.0,2,1.0,0,1.0,2,1.0 +1,682.0,1,1.0,0,1.0,2,1.0 +1,682.0,2,1.0,0,1.0,2,1.0 +1,683.0,1,1.0,0,1.0,2,1.0 +1,683.0,2,1.0,0,1.0,2,1.0 +1,684.0,1,1.0,0,1.0,2,1.0 +1,684.0,2,1.0,0,1.0,2,1.0 +1,685.0,1,1.0,0,1.0,2,1.0 +1,685.0,2,1.0,0,1.0,2,1.0 +1,686.0,1,1.0,0,1.0,2,1.0 +1,686.0,2,1.0,0,1.0,2,1.0 +1,687.0,1,1.0,0,1.0,2,1.0 +1,687.0,2,1.0,0,1.0,2,1.0 +1,688.0,1,1.0,0,1.0,2,1.0 +1,688.0,2,1.0,0,1.0,2,1.0 +1,689.0,1,1.0,0,1.0,2,1.0 +1,689.0,2,1.0,0,1.0,2,1.0 +1,690.0,1,1.0,0,1.0,2,1.0 +1,690.0,2,1.0,0,1.0,2,1.0 +1,691.0,1,1.0,0,1.0,2,1.0 +1,691.0,2,1.0,0,1.0,2,1.0 +1,692.0,1,1.0,0,1.0,2,1.0 +1,692.0,2,1.0,0,1.0,2,1.0 +1,693.0,1,1.0,0,1.0,2,1.0 +1,693.0,2,1.0,0,1.0,2,1.0 +1,694.0,1,1.0,0,1.0,2,1.0 +1,694.0,2,1.0,0,1.0,2,1.0 +1,695.0,1,1.0,0,1.0,2,1.0 +1,695.0,2,1.0,0,1.0,2,1.0 +1,696.0,1,1.0,0,1.0,2,1.0 +1,696.0,2,1.0,0,1.0,2,1.0 +1,697.0,1,1.0,0,1.0,2,1.0 +1,697.0,2,1.0,0,1.0,2,1.0 +1,698.0,1,1.0,0,1.0,2,1.0 +1,698.0,2,1.0,0,1.0,2,1.0 +1,699.0,1,1.0,0,1.0,2,1.0 +1,699.0,2,1.0,0,1.0,2,1.0 +1,700.0,1,1.0,0,1.0,2,1.0 +1,700.0,2,1.0,0,1.0,2,1.0 +1,701.0,1,1.0,0,1.0,2,1.0 +1,701.0,2,1.0,0,1.0,2,1.0 +1,702.0,1,1.0,0,1.0,2,1.0 +1,702.0,2,1.0,0,1.0,2,1.0 +1,703.0,1,1.0,0,1.0,2,1.0 +1,703.0,2,1.0,0,1.0,2,1.0 +1,704.0,1,1.0,0,1.0,2,1.0 +1,704.0,2,1.0,0,1.0,2,1.0 +1,705.0,1,1.0,0,1.0,2,1.0 +1,705.0,2,1.0,0,1.0,2,1.0 +1,706.0,1,1.0,0,1.0,2,1.0 +1,706.0,2,1.0,0,1.0,2,1.0 +1,707.0,1,1.0,0,1.0,2,1.0 +1,707.0,2,1.0,0,1.0,2,1.0 +1,708.0,1,1.0,0,1.0,2,1.0 +1,708.0,2,1.0,0,1.0,2,1.0 +1,709.0,1,1.0,0,1.0,2,1.0 +1,709.0,2,1.0,0,1.0,2,1.0 +1,710.0,1,1.0,0,1.0,2,1.0 +1,710.0,2,1.0,0,1.0,2,1.0 +1,711.0,1,1.0,0,1.0,2,1.0 +1,711.0,2,1.0,0,1.0,2,1.0 +1,712.0,1,1.0,0,1.0,2,1.0 +1,712.0,2,1.0,0,1.0,2,1.0 +1,713.0,1,1.0,0,1.0,2,1.0 +1,713.0,2,1.0,0,1.0,2,1.0 +1,714.0,1,1.0,0,1.0,2,1.0 +1,714.0,2,1.0,0,1.0,2,1.0 +1,715.0,1,1.0,0,1.0,2,1.0 +1,715.0,2,1.0,0,1.0,2,1.0 +1,716.0,1,1.0,0,1.0,2,1.0 +1,716.0,2,1.0,0,1.0,2,1.0 +1,717.0,1,1.0,0,1.0,2,1.0 +1,717.0,2,1.0,0,1.0,2,1.0 +1,718.0,1,1.0,0,1.0,2,1.0 +1,718.0,2,1.0,0,1.0,2,1.0 +1,719.0,1,1.0,0,1.0,2,1.0 +1,719.0,2,1.0,0,1.0,2,1.0 +1,720.0,1,1.0,0,1.0,2,1.0 +1,720.0,2,1.0,0,1.0,2,1.0 +1,721.0,1,1.0,0,1.0,2,1.0 +1,721.0,2,1.0,0,1.0,2,1.0 +1,722.0,1,1.0,0,1.0,2,1.0 +1,722.0,2,1.0,0,1.0,2,1.0 +1,723.0,1,1.0,0,1.0,2,1.0 +1,723.0,2,1.0,0,1.0,2,1.0 +1,724.0,1,1.0,0,1.0,2,1.0 +1,724.0,2,1.0,0,1.0,2,1.0 +1,725.0,1,1.0,0,1.0,2,1.0 +1,725.0,2,1.0,0,1.0,2,1.0 +1,726.0,1,1.0,0,1.0,2,1.0 +1,726.0,2,1.0,0,1.0,2,1.0 +1,727.0,1,1.0,0,1.0,2,1.0 +1,727.0,2,1.0,0,1.0,2,1.0 +1,728.0,1,1.0,0,1.0,2,1.0 +1,728.0,2,1.0,0,1.0,2,1.0 +1,729.0,1,1.0,0,1.0,2,1.0 +1,729.0,2,1.0,0,1.0,2,1.0 +1,730.0,1,1.0,0,1.0,2,1.0 +1,730.0,2,1.0,0,1.0,2,1.0 +1,731.0,1,1.0,0,1.0,2,1.0 +1,731.0,2,1.0,0,1.0,2,1.0 +1,732.0,1,1.0,0,1.0,2,1.0 +1,732.0,2,1.0,0,1.0,2,1.0 +1,733.0,1,1.0,0,1.0,2,1.0 +1,733.0,2,1.0,0,1.0,2,1.0 +1,734.0,1,1.0,0,1.0,2,1.0 +1,734.0,2,1.0,0,1.0,2,1.0 +1,735.0,1,1.0,0,1.0,2,1.0 +1,735.0,2,1.0,0,1.0,2,1.0 +1,736.0,1,1.0,0,1.0,2,1.0 +1,736.0,2,1.0,0,1.0,2,1.0 +1,737.0,1,1.0,0,1.0,2,1.0 +1,737.0,2,1.0,0,1.0,2,1.0 +1,738.0,1,1.0,0,1.0,2,1.0 +1,738.0,2,1.0,0,1.0,2,1.0 +1,739.0,1,1.0,0,1.0,2,1.0 +1,739.0,2,1.0,0,1.0,2,1.0 +1,740.0,1,1.0,0,1.0,2,1.0 +1,740.0,2,1.0,0,1.0,2,1.0 +1,741.0,1,1.0,0,1.0,2,1.0 +1,741.0,2,1.0,0,1.0,2,1.0 +1,742.0,1,1.0,0,1.0,2,1.0 +1,742.0,2,1.0,0,1.0,2,1.0 +1,743.0,1,1.0,0,1.0,2,1.0 +1,743.0,2,1.0,0,1.0,2,1.0 +1,744.0,1,1.0,0,1.0,2,1.0 +1,744.0,2,1.0,0,1.0,2,1.0 +1,745.0,1,1.0,0,1.0,2,1.0 +1,745.0,2,1.0,0,1.0,2,1.0 +1,746.0,1,1.0,0,1.0,2,1.0 +1,746.0,2,1.0,0,1.0,2,1.0 +1,747.0,1,1.0,0,1.0,2,1.0 +1,747.0,2,1.0,0,1.0,2,1.0 +1,748.0,1,1.0,0,1.0,2,1.0 +1,748.0,2,1.0,0,1.0,2,1.0 +1,749.0,1,1.0,0,1.0,2,1.0 +1,749.0,2,1.0,0,1.0,2,1.0 +1,750.0,1,1.0,0,1.0,2,1.0 +1,750.0,2,1.0,0,1.0,2,1.0 +1,751.0,1,1.0,0,1.0,2,1.0 +1,751.0,2,1.0,0,1.0,2,1.0 +1,752.0,1,1.0,0,1.0,2,1.0 +1,752.0,2,1.0,0,1.0,2,1.0 +1,753.0,1,1.0,0,1.0,2,1.0 +1,753.0,2,1.0,0,1.0,2,1.0 +1,754.0,1,1.0,0,1.0,2,1.0 +1,754.0,2,1.0,0,1.0,2,1.0 +1,755.0,1,1.0,0,1.0,2,1.0 +1,755.0,2,1.0,0,1.0,2,1.0 +1,756.0,1,1.0,0,1.0,2,1.0 +1,756.0,2,1.0,0,1.0,2,1.0 +1,757.0,1,1.0,0,1.0,2,1.0 +1,757.0,2,1.0,0,1.0,2,1.0 +1,758.0,1,1.0,0,1.0,2,1.0 +1,758.0,2,1.0,0,1.0,2,1.0 +1,759.0,1,1.0,0,1.0,2,1.0 +1,759.0,2,1.0,0,1.0,2,1.0 +1,760.0,1,1.0,0,1.0,2,1.0 +1,760.0,2,1.0,0,1.0,2,1.0 +1,761.0,1,1.0,0,1.0,2,1.0 +1,761.0,2,1.0,0,1.0,2,1.0 +1,762.0,1,1.0,0,1.0,2,1.0 +1,762.0,2,1.0,0,1.0,2,1.0 +1,763.0,1,1.0,0,1.0,2,1.0 +1,763.0,2,1.0,0,1.0,2,1.0 +1,764.0,1,1.0,0,1.0,2,1.0 +1,764.0,2,1.0,0,1.0,2,1.0 +1,765.0,1,1.0,0,1.0,2,1.0 +1,765.0,2,1.0,0,1.0,2,1.0 +1,766.0,1,1.0,0,1.0,2,1.0 +1,766.0,2,1.0,0,1.0,2,1.0 +1,767.0,1,1.0,0,1.0,2,1.0 +1,767.0,2,1.0,0,1.0,2,1.0 +1,768.0,1,1.0,0,1.0,2,1.0 +1,768.0,2,1.0,0,1.0,2,1.0 +1,769.0,1,1.0,0,1.0,2,1.0 +1,769.0,2,1.0,0,1.0,2,1.0 +1,770.0,1,1.0,0,1.0,2,1.0 +1,770.0,2,1.0,0,1.0,2,1.0 +1,771.0,1,1.0,0,1.0,2,1.0 +1,771.0,2,1.0,0,1.0,2,1.0 +1,772.0,1,1.0,0,1.0,2,1.0 +1,772.0,2,1.0,0,1.0,2,1.0 +1,773.0,1,1.0,0,1.0,2,1.0 +1,773.0,2,1.0,0,1.0,2,1.0 +1,774.0,1,1.0,0,1.0,2,1.0 +1,774.0,2,1.0,0,1.0,2,1.0 +1,775.0,1,1.0,0,1.0,2,1.0 +1,775.0,2,1.0,0,1.0,2,1.0 +1,776.0,1,1.0,0,1.0,2,1.0 +1,776.0,2,1.0,0,1.0,2,1.0 +1,777.0,1,1.0,0,1.0,2,1.0 +1,777.0,2,1.0,0,1.0,2,1.0 +1,778.0,1,1.0,0,1.0,2,1.0 +1,778.0,2,1.0,0,1.0,2,1.0 +1,779.0,1,1.0,0,1.0,2,1.0 +1,779.0,2,1.0,0,1.0,2,1.0 +1,780.0,1,1.0,0,1.0,2,1.0 +1,780.0,2,1.0,0,1.0,2,1.0 +1,781.0,1,1.0,0,1.0,2,1.0 +1,781.0,2,1.0,0,1.0,2,1.0 +1,782.0,1,1.0,0,1.0,2,1.0 +1,782.0,2,1.0,0,1.0,2,1.0 +1,783.0,1,1.0,0,1.0,2,1.0 +1,783.0,2,1.0,0,1.0,2,1.0 +1,784.0,1,1.0,0,1.0,2,1.0 +1,784.0,2,1.0,0,1.0,2,1.0 +1,785.0,1,1.0,0,1.0,2,1.0 +1,785.0,2,1.0,0,1.0,2,1.0 +1,786.0,1,1.0,0,1.0,2,1.0 +1,786.0,2,1.0,0,1.0,2,1.0 +1,787.0,1,1.0,0,1.0,2,1.0 +1,787.0,2,1.0,0,1.0,2,1.0 +1,788.0,1,1.0,0,1.0,2,1.0 +1,788.0,2,1.0,0,1.0,2,1.0 +1,789.0,1,1.0,0,1.0,2,1.0 +1,789.0,2,1.0,0,1.0,2,1.0 +1,790.0,1,1.0,0,1.0,2,1.0 +1,790.0,2,1.0,0,1.0,2,1.0 +1,791.0,1,1.0,0,1.0,2,1.0 +1,791.0,2,1.0,0,1.0,2,1.0 +1,792.0,1,1.0,0,1.0,2,1.0 +1,792.0,2,1.0,0,1.0,2,1.0 +1,793.0,1,1.0,0,1.0,2,1.0 +1,793.0,2,1.0,0,1.0,2,1.0 +1,794.0,1,1.0,0,1.0,2,1.0 +1,794.0,2,1.0,0,1.0,2,1.0 +1,795.0,1,1.0,0,1.0,2,1.0 +1,795.0,2,1.0,0,1.0,2,1.0 +1,796.0,1,1.0,0,1.0,2,1.0 +1,796.0,2,1.0,0,1.0,2,1.0 +1,797.0,1,1.0,0,1.0,2,1.0 +1,797.0,2,1.0,0,1.0,2,1.0 +1,798.0,1,1.0,0,1.0,2,1.0 +1,798.0,2,1.0,0,1.0,2,1.0 +1,799.0,1,1.0,0,1.0,2,1.0 +1,799.0,2,1.0,0,1.0,2,1.0 +1,800.0,1,1.0,0,1.0,2,1.0 +1,800.0,2,1.0,0,1.0,2,1.0 +1,801.0,1,1.0,0,1.0,2,1.0 +1,801.0,2,1.0,0,1.0,2,1.0 +1,802.0,1,1.0,0,1.0,2,1.0 +1,802.0,2,1.0,0,1.0,2,1.0 +1,803.0,1,1.0,0,1.0,2,1.0 +1,803.0,2,1.0,0,1.0,2,1.0 +1,804.0,1,1.0,0,1.0,2,1.0 +1,804.0,2,1.0,0,1.0,2,1.0 +1,805.0,1,1.0,0,1.0,2,1.0 +1,805.0,2,1.0,0,1.0,2,1.0 +1,806.0,1,1.0,0,1.0,2,1.0 +1,806.0,2,1.0,0,1.0,2,1.0 +1,807.0,1,1.0,0,1.0,2,1.0 +1,807.0,2,1.0,0,1.0,2,1.0 +1,808.0,1,1.0,0,1.0,2,1.0 +1,808.0,2,1.0,0,1.0,2,1.0 +1,809.0,1,1.0,0,1.0,2,1.0 +1,809.0,2,1.0,0,1.0,2,1.0 +1,810.0,1,1.0,0,1.0,2,1.0 +1,810.0,2,1.0,0,1.0,2,1.0 +1,811.0,1,1.0,0,1.0,2,1.0 +1,811.0,2,1.0,0,1.0,2,1.0 +1,812.0,1,1.0,0,1.0,2,1.0 +1,812.0,2,1.0,0,1.0,2,1.0 +1,813.0,1,1.0,0,1.0,2,1.0 +1,813.0,2,1.0,0,1.0,2,1.0 +1,814.0,1,1.0,0,1.0,2,1.0 +1,814.0,2,1.0,0,1.0,2,1.0 +1,815.0,1,1.0,0,1.0,2,1.0 +1,815.0,2,1.0,0,1.0,2,1.0 +1,816.0,1,1.0,0,1.0,2,1.0 +1,816.0,2,1.0,0,1.0,2,1.0 +1,817.0,1,1.0,0,1.0,2,1.0 +1,817.0,2,1.0,0,1.0,2,1.0 +1,818.0,1,1.0,0,1.0,2,1.0 +1,818.0,2,1.0,0,1.0,2,1.0 +1,819.0,1,1.0,0,1.0,2,1.0 +1,819.0,2,1.0,0,1.0,2,1.0 +1,820.0,1,1.0,0,1.0,2,1.0 +1,820.0,2,1.0,0,1.0,2,1.0 +1,821.0,1,1.0,0,1.0,2,1.0 +1,821.0,2,1.0,0,1.0,2,1.0 +1,822.0,1,1.0,0,1.0,2,1.0 +1,822.0,2,1.0,0,1.0,2,1.0 +1,823.0,1,1.0,0,1.0,2,1.0 +1,823.0,2,1.0,0,1.0,2,1.0 +1,824.0,1,1.0,0,1.0,2,1.0 +1,824.0,2,1.0,0,1.0,2,1.0 +1,825.0,1,1.0,0,1.0,2,1.0 +1,825.0,2,1.0,0,1.0,2,1.0 +1,826.0,1,1.0,0,1.0,2,1.0 +1,826.0,2,1.0,0,1.0,2,1.0 +1,827.0,1,1.0,0,1.0,2,1.0 +1,827.0,2,1.0,0,1.0,2,1.0 +1,828.0,1,1.0,0,1.0,2,1.0 +1,828.0,2,1.0,0,1.0,2,1.0 +1,829.0,1,1.0,0,1.0,2,1.0 +1,829.0,2,1.0,0,1.0,2,1.0 +1,830.0,1,1.0,0,1.0,2,1.0 +1,830.0,2,1.0,0,1.0,2,1.0 +1,831.0,1,1.0,0,1.0,2,1.0 +1,831.0,2,1.0,0,1.0,2,1.0 +1,832.0,1,1.0,0,1.0,2,1.0 +1,832.0,2,1.0,0,1.0,2,1.0 +1,833.0,1,1.0,0,1.0,2,1.0 +1,833.0,2,1.0,0,1.0,2,1.0 +1,834.0,1,1.0,0,1.0,2,1.0 +1,834.0,2,1.0,0,1.0,2,1.0 +1,835.0,1,1.0,0,1.0,2,1.0 +1,835.0,2,1.0,0,1.0,2,1.0 +1,836.0,1,1.0,0,1.0,2,1.0 +1,836.0,2,1.0,0,1.0,2,1.0 +1,837.0,1,1.0,0,1.0,2,1.0 +1,837.0,2,1.0,0,1.0,2,1.0 +1,838.0,1,1.0,0,1.0,2,1.0 +1,838.0,2,1.0,0,1.0,2,1.0 +1,839.0,1,1.0,0,1.0,2,1.0 +1,839.0,2,1.0,0,1.0,2,1.0 +1,840.0,1,1.0,0,1.0,2,1.0 +1,840.0,2,1.0,0,1.0,2,1.0 +1,841.0,1,1.0,0,1.0,2,1.0 +1,841.0,2,1.0,0,1.0,2,1.0 +1,842.0,1,1.0,0,1.0,2,1.0 +1,842.0,2,1.0,0,1.0,2,1.0 +1,843.0,1,1.0,0,1.0,2,1.0 +1,843.0,2,1.0,0,1.0,2,1.0 +1,844.0,1,1.0,0,1.0,2,1.0 +1,844.0,2,1.0,0,1.0,2,1.0 +1,845.0,1,1.0,0,1.0,2,1.0 +1,845.0,2,1.0,0,1.0,2,1.0 +1,846.0,1,1.0,0,1.0,2,1.0 +1,846.0,2,1.0,0,1.0,2,1.0 +1,847.0,1,1.0,0,1.0,2,1.0 +1,847.0,2,1.0,0,1.0,2,1.0 +1,848.0,1,1.0,0,1.0,2,1.0 +1,848.0,2,1.0,0,1.0,2,1.0 +1,849.0,1,1.0,0,1.0,2,1.0 +1,849.0,2,1.0,0,1.0,2,1.0 +1,850.0,1,1.0,0,1.0,2,1.0 +1,850.0,2,1.0,0,1.0,2,1.0 +1,851.0,1,1.0,0,1.0,2,1.0 +1,851.0,2,1.0,0,1.0,2,1.0 +1,852.0,1,1.0,0,1.0,2,1.0 +1,852.0,2,1.0,0,1.0,2,1.0 +1,853.0,1,1.0,0,1.0,2,1.0 +1,853.0,2,1.0,0,1.0,2,1.0 +1,854.0,1,1.0,0,1.0,2,1.0 +1,854.0,2,1.0,0,1.0,2,1.0 +1,855.0,1,1.0,0,1.0,2,1.0 +1,855.0,2,1.0,0,1.0,2,1.0 +1,856.0,1,1.0,0,1.0,2,1.0 +1,856.0,2,1.0,0,1.0,2,1.0 +1,857.0,1,1.0,0,1.0,2,1.0 +1,857.0,2,1.0,0,1.0,2,1.0 +1,858.0,1,1.0,0,1.0,2,1.0 +1,858.0,2,1.0,0,1.0,2,1.0 +1,859.0,1,1.0,0,1.0,2,1.0 +1,859.0,2,1.0,0,1.0,2,1.0 +1,860.0,1,1.0,0,1.0,2,1.0 +1,860.0,2,1.0,0,1.0,2,1.0 +1,861.0,1,1.0,0,1.0,2,1.0 +1,861.0,2,1.0,0,1.0,2,1.0 +1,862.0,1,1.0,0,1.0,2,1.0 +1,862.0,2,1.0,0,1.0,2,1.0 +1,863.0,1,1.0,0,1.0,2,1.0 +1,863.0,2,1.0,0,1.0,2,1.0 +1,864.0,1,1.0,0,1.0,2,1.0 +1,864.0,2,1.0,0,1.0,2,1.0 +1,865.0,1,1.0,0,1.0,2,1.0 +1,865.0,2,1.0,0,1.0,2,1.0 +1,866.0,1,1.0,0,1.0,2,1.0 +1,866.0,2,1.0,0,1.0,2,1.0 +1,867.0,1,1.0,0,1.0,2,1.0 +1,867.0,2,1.0,0,1.0,2,1.0 +1,868.0,1,1.0,0,1.0,2,1.0 +1,868.0,2,1.0,0,1.0,2,1.0 +1,869.0,1,1.0,0,1.0,2,1.0 +1,869.0,2,1.0,0,1.0,2,1.0 +1,870.0,1,1.0,0,1.0,2,1.0 +1,870.0,2,1.0,0,1.0,2,1.0 +1,871.0,1,1.0,0,1.0,2,1.0 +1,871.0,2,1.0,0,1.0,2,1.0 +1,872.0,1,1.0,0,1.0,2,1.0 +1,872.0,2,1.0,0,1.0,2,1.0 +1,873.0,1,1.0,0,1.0,2,1.0 +1,873.0,2,1.0,0,1.0,2,1.0 +1,874.0,1,1.0,0,1.0,2,1.0 +1,874.0,2,1.0,0,1.0,2,1.0 +1,875.0,1,1.0,0,1.0,2,1.0 +1,875.0,2,1.0,0,1.0,2,1.0 +1,876.0,1,1.0,0,1.0,2,1.0 +1,876.0,2,1.0,0,1.0,2,1.0 +1,877.0,1,1.0,0,1.0,2,1.0 +1,877.0,2,1.0,0,1.0,2,1.0 +1,878.0,1,1.0,0,1.0,2,1.0 +1,878.0,2,1.0,0,1.0,2,1.0 +1,879.0,1,1.0,0,1.0,2,1.0 +1,879.0,2,1.0,0,1.0,2,1.0 +1,880.0,1,1.0,0,1.0,2,1.0 +1,880.0,2,1.0,0,1.0,2,1.0 +1,881.0,1,1.0,0,1.0,2,1.0 +1,881.0,2,1.0,0,1.0,2,1.0 +1,882.0,1,1.0,0,1.0,2,1.0 +1,882.0,2,1.0,0,1.0,2,1.0 +1,883.0,1,1.0,0,1.0,2,1.0 +1,883.0,2,1.0,0,1.0,2,1.0 +1,884.0,1,1.0,0,1.0,2,1.0 +1,884.0,2,1.0,0,1.0,2,1.0 +1,885.0,1,1.0,0,1.0,2,1.0 +1,885.0,2,1.0,0,1.0,2,1.0 +1,886.0,1,1.0,0,1.0,2,1.0 +1,886.0,2,1.0,0,1.0,2,1.0 +1,887.0,1,1.0,0,1.0,2,1.0 +1,887.0,2,1.0,0,1.0,2,1.0 +1,888.0,1,1.0,0,1.0,2,1.0 +1,888.0,2,1.0,0,1.0,2,1.0 +1,889.0,1,1.0,0,1.0,2,1.0 +1,889.0,2,1.0,0,1.0,2,1.0 +1,890.0,1,1.0,0,1.0,2,1.0 +1,890.0,2,1.0,0,1.0,2,1.0 +1,891.0,1,1.0,0,1.0,2,1.0 +1,891.0,2,1.0,0,1.0,2,1.0 +1,892.0,1,1.0,0,1.0,2,1.0 +1,892.0,2,1.0,0,1.0,2,1.0 +1,893.0,1,1.0,0,1.0,2,1.0 +1,893.0,2,1.0,0,1.0,2,1.0 +1,894.0,1,1.0,0,1.0,2,1.0 +1,894.0,2,1.0,0,1.0,2,1.0 +1,895.0,1,1.0,0,1.0,2,1.0 +1,895.0,2,1.0,0,1.0,2,1.0 +1,896.0,1,1.0,0,1.0,2,1.0 +1,896.0,2,1.0,0,1.0,2,1.0 +1,897.0,1,1.0,0,1.0,2,1.0 +1,897.0,2,1.0,0,1.0,2,1.0 +1,898.0,1,1.0,0,1.0,2,1.0 +1,898.0,2,1.0,0,1.0,2,1.0 +1,899.0,1,1.0,0,1.0,2,1.0 +1,899.0,2,1.0,0,1.0,2,1.0 +1,900.0,1,1.0,0,1.0,2,1.0 +1,900.0,2,1.0,0,1.0,2,1.0 +1,901.0,1,1.0,0,1.0,2,1.0 +1,901.0,2,1.0,0,1.0,2,1.0 +1,902.0,1,1.0,0,1.0,2,1.0 +1,902.0,2,1.0,0,1.0,2,1.0 +1,903.0,1,1.0,0,1.0,2,1.0 +1,903.0,2,1.0,0,1.0,2,1.0 +1,904.0,1,1.0,0,1.0,2,1.0 +1,904.0,2,1.0,0,1.0,2,1.0 +1,905.0,1,1.0,0,1.0,2,1.0 +1,905.0,2,1.0,0,1.0,2,1.0 +1,906.0,1,1.0,0,1.0,2,1.0 +1,906.0,2,1.0,0,1.0,2,1.0 +1,907.0,1,1.0,0,1.0,2,1.0 +1,907.0,2,1.0,0,1.0,2,1.0 +1,908.0,1,1.0,0,1.0,2,1.0 +1,908.0,2,1.0,0,1.0,2,1.0 +1,909.0,1,1.0,0,1.0,2,1.0 +1,909.0,2,1.0,0,1.0,2,1.0 +1,910.0,1,1.0,0,1.0,2,1.0 +1,910.0,2,1.0,0,1.0,2,1.0 +1,911.0,1,1.0,0,1.0,2,1.0 +1,911.0,2,1.0,0,1.0,2,1.0 +1,912.0,1,1.0,0,1.0,2,1.0 +1,912.0,2,1.0,0,1.0,2,1.0 +1,913.0,1,1.0,0,1.0,2,1.0 +1,913.0,2,1.0,0,1.0,2,1.0 +1,914.0,1,1.0,0,1.0,2,1.0 +1,914.0,2,1.0,0,1.0,2,1.0 +1,915.0,1,1.0,0,1.0,2,1.0 +1,915.0,2,1.0,0,1.0,2,1.0 +1,916.0,1,1.0,0,1.0,2,1.0 +1,916.0,2,1.0,0,1.0,2,1.0 +1,917.0,1,1.0,0,1.0,2,1.0 +1,917.0,2,1.0,0,1.0,2,1.0 +1,918.0,1,1.0,0,1.0,2,1.0 +1,918.0,2,1.0,0,1.0,2,1.0 +1,919.0,1,1.0,0,1.0,2,1.0 +1,919.0,2,1.0,0,1.0,2,1.0 +1,920.0,1,1.0,0,1.0,2,1.0 +1,920.0,2,1.0,0,1.0,2,1.0 +1,921.0,1,1.0,0,1.0,2,1.0 +1,921.0,2,1.0,0,1.0,2,1.0 +1,922.0,1,1.0,0,1.0,2,1.0 +1,922.0,2,1.0,0,1.0,2,1.0 +1,923.0,1,1.0,0,1.0,2,1.0 +1,923.0,2,1.0,0,1.0,2,1.0 +1,924.0,1,1.0,0,1.0,2,1.0 +1,924.0,2,1.0,0,1.0,2,1.0 +1,925.0,1,1.0,0,1.0,2,1.0 +1,925.0,2,1.0,0,1.0,2,1.0 +1,926.0,1,1.0,0,1.0,2,1.0 +1,926.0,2,1.0,0,1.0,2,1.0 +1,927.0,1,1.0,0,1.0,2,1.0 +1,927.0,2,1.0,0,1.0,2,1.0 +1,928.0,1,1.0,0,1.0,2,1.0 +1,928.0,2,1.0,0,1.0,2,1.0 +1,929.0,1,1.0,0,1.0,2,1.0 +1,929.0,2,1.0,0,1.0,2,1.0 +1,930.0,1,1.0,0,1.0,2,1.0 +1,930.0,2,1.0,0,1.0,2,1.0 +1,931.0,1,1.0,0,1.0,2,1.0 +1,931.0,2,1.0,0,1.0,2,1.0 +1,932.0,1,1.0,0,1.0,2,1.0 +1,932.0,2,1.0,0,1.0,2,1.0 +1,933.0,1,1.0,0,1.0,2,1.0 +1,933.0,2,1.0,0,1.0,2,1.0 +1,934.0,1,1.0,0,1.0,2,1.0 +1,934.0,2,1.0,0,1.0,2,1.0 +1,935.0,1,1.0,0,1.0,2,1.0 +1,935.0,2,1.0,0,1.0,2,1.0 +1,936.0,1,1.0,0,1.0,2,1.0 +1,936.0,2,1.0,0,1.0,2,1.0 +1,937.0,1,1.0,0,1.0,2,1.0 +1,937.0,2,1.0,0,1.0,2,1.0 +1,938.0,1,1.0,0,1.0,2,1.0 +1,938.0,2,1.0,0,1.0,2,1.0 +1,939.0,1,1.0,0,1.0,2,1.0 +1,939.0,2,1.0,0,1.0,2,1.0 +1,940.0,1,1.0,0,1.0,2,1.0 +1,940.0,2,1.0,0,1.0,2,1.0 +1,941.0,1,1.0,0,1.0,2,1.0 +1,941.0,2,1.0,0,1.0,2,1.0 +1,942.0,1,1.0,0,1.0,2,1.0 +1,942.0,2,1.0,0,1.0,2,1.0 +1,943.0,1,1.0,0,1.0,2,1.0 +1,943.0,2,1.0,0,1.0,2,1.0 +1,944.0,1,1.0,0,1.0,2,1.0 +1,944.0,2,1.0,0,1.0,2,1.0 +1,945.0,1,1.0,0,1.0,2,1.0 +1,945.0,2,1.0,0,1.0,2,1.0 +1,946.0,1,1.0,0,1.0,2,1.0 +1,946.0,2,1.0,0,1.0,2,1.0 +1,947.0,1,1.0,0,1.0,2,1.0 +1,947.0,2,1.0,0,1.0,2,1.0 +1,948.0,1,1.0,0,1.0,2,1.0 +1,948.0,2,1.0,0,1.0,2,1.0 +1,949.0,1,1.0,0,1.0,2,1.0 +1,949.0,2,1.0,0,1.0,2,1.0 +1,950.0,1,1.0,0,1.0,2,1.0 +1,950.0,2,1.0,0,1.0,2,1.0 +1,951.0,1,1.0,0,1.0,2,1.0 +1,951.0,2,1.0,0,1.0,2,1.0 +1,952.0,1,1.0,0,1.0,2,1.0 +1,952.0,2,1.0,0,1.0,2,1.0 +1,953.0,1,1.0,0,1.0,2,1.0 +1,953.0,2,1.0,0,1.0,2,1.0 +1,954.0,1,1.0,0,1.0,2,1.0 +1,954.0,2,1.0,0,1.0,2,1.0 +1,955.0,1,1.0,0,1.0,2,1.0 +1,955.0,2,1.0,0,1.0,2,1.0 +1,956.0,1,1.0,0,1.0,2,1.0 +1,956.0,2,1.0,0,1.0,2,1.0 +1,957.0,1,1.0,0,1.0,2,1.0 +1,957.0,2,1.0,0,1.0,2,1.0 +1,958.0,1,1.0,0,1.0,2,1.0 +1,958.0,2,1.0,0,1.0,2,1.0 +1,959.0,1,1.0,0,1.0,2,1.0 +1,959.0,2,1.0,0,1.0,2,1.0 +1,960.0,1,1.0,0,1.0,2,1.0 +1,960.0,2,1.0,0,1.0,2,1.0 +1,961.0,1,1.0,0,1.0,2,1.0 +1,961.0,2,1.0,0,1.0,2,1.0 +1,962.0,1,1.0,0,1.0,2,1.0 +1,962.0,2,1.0,0,1.0,2,1.0 +1,963.0,1,1.0,0,1.0,2,1.0 +1,963.0,2,1.0,0,1.0,2,1.0 +1,964.0,1,1.0,0,1.0,2,1.0 +1,964.0,2,1.0,0,1.0,2,1.0 +1,965.0,1,1.0,0,1.0,2,1.0 +1,965.0,2,1.0,0,1.0,2,1.0 +1,966.0,1,1.0,0,1.0,2,1.0 +1,966.0,2,1.0,0,1.0,2,1.0 +1,967.0,1,1.0,0,1.0,2,1.0 +1,967.0,2,1.0,0,1.0,2,1.0 +1,968.0,1,1.0,0,1.0,2,1.0 +1,968.0,2,1.0,0,1.0,2,1.0 +1,969.0,1,1.0,0,1.0,2,1.0 +1,969.0,2,1.0,0,1.0,2,1.0 +1,970.0,1,1.0,0,1.0,2,1.0 +1,970.0,2,1.0,0,1.0,2,1.0 +1,971.0,1,1.0,0,1.0,2,1.0 +1,971.0,2,1.0,0,1.0,2,1.0 +1,972.0,1,1.0,0,1.0,2,1.0 +1,972.0,2,1.0,0,1.0,2,1.0 +1,973.0,1,1.0,0,1.0,2,1.0 +1,973.0,2,1.0,0,1.0,2,1.0 +1,974.0,1,1.0,0,1.0,2,1.0 +1,974.0,2,1.0,0,1.0,2,1.0 +1,975.0,1,1.0,0,1.0,2,1.0 +1,975.0,2,1.0,0,1.0,2,1.0 +1,976.0,1,1.0,0,1.0,2,1.0 +1,976.0,2,1.0,0,1.0,2,1.0 +1,977.0,1,1.0,0,1.0,2,1.0 +1,977.0,2,1.0,0,1.0,2,1.0 +1,978.0,1,1.0,0,1.0,2,1.0 +1,978.0,2,1.0,0,1.0,2,1.0 +1,979.0,1,1.0,0,1.0,2,1.0 +1,979.0,2,1.0,0,1.0,2,1.0 +1,980.0,1,1.0,0,1.0,2,1.0 +1,980.0,2,1.0,0,1.0,2,1.0 +1,981.0,1,1.0,0,1.0,2,1.0 +1,981.0,2,1.0,0,1.0,2,1.0 +1,982.0,1,1.0,0,1.0,2,1.0 +1,982.0,2,1.0,0,1.0,2,1.0 +1,983.0,1,1.0,0,1.0,2,1.0 +1,983.0,2,1.0,0,1.0,2,1.0 +1,984.0,1,1.0,0,1.0,2,1.0 +1,984.0,2,1.0,0,1.0,2,1.0 +1,985.0,1,1.0,0,1.0,2,1.0 +1,985.0,2,1.0,0,1.0,2,1.0 +1,986.0,1,1.0,0,1.0,2,1.0 +1,986.0,2,1.0,0,1.0,2,1.0 +1,987.0,1,1.0,0,1.0,2,1.0 +1,987.0,2,1.0,0,1.0,2,1.0 +1,988.0,1,1.0,0,1.0,2,1.0 +1,988.0,2,1.0,0,1.0,2,1.0 +1,989.0,1,1.0,0,1.0,2,1.0 +1,989.0,2,1.0,0,1.0,2,1.0 +1,990.0,1,1.0,0,1.0,2,1.0 +1,990.0,2,1.0,0,1.0,2,1.0 +1,991.0,1,1.0,0,1.0,2,1.0 +1,991.0,2,1.0,0,1.0,2,1.0 +1,992.0,1,1.0,0,1.0,2,1.0 +1,992.0,2,1.0,0,1.0,2,1.0 +1,993.0,1,1.0,0,1.0,2,1.0 +1,993.0,2,1.0,0,1.0,2,1.0 +1,994.0,1,1.0,0,1.0,2,1.0 +1,994.0,2,1.0,0,1.0,2,1.0 +1,995.0,1,1.0,0,1.0,2,1.0 +1,995.0,2,1.0,0,1.0,2,1.0 +1,996.0,1,1.0,0,1.0,2,1.0 +1,996.0,2,1.0,0,1.0,2,1.0 +1,997.0,1,1.0,0,1.0,2,1.0 +1,997.0,2,1.0,0,1.0,2,1.0 +1,998.0,1,1.0,0,1.0,2,1.0 +1,998.0,2,1.0,0,1.0,2,1.0 +1,999.0,1,1.0,0,1.0,2,1.0 +1,999.0,2,1.0,0,1.0,2,1.0 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/romMeta.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/romMeta.xml new file mode 100644 index 0000000000..7a2e16a76b --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/romMeta.xml @@ -0,0 +1,10 @@ + + + + Decomposition + scaling + signal0,signal1,pivot + + + + diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/samples.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/samples.csv new file mode 100644 index 0000000000..2d71996930 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/samples.csv @@ -0,0 +1,201 @@ +RAVEN_sample_ID,pivot,macro,scaling,signal0,signal1,PointProbability,prefix,ProbabilityWeight +0,0.0,1,1.0,0,0,1.0,1,1.0 +0,1.0,1,1.0,0,0,1.0,1,1.0 +0,2.0,1,1.0,0,0,1.0,1,1.0 +0,3.0,1,1.0,0,0,1.0,1,1.0 +0,4.0,1,1.0,0,0,1.0,1,1.0 +0,5.0,1,1.0,0,0,1.0,1,1.0 +0,6.0,1,1.0,0,0,1.0,1,1.0 +0,7.0,1,1.0,0,0,1.0,1,1.0 +0,8.0,1,1.0,0,0,1.0,1,1.0 +0,9.0,1,1.0,0,0,1.0,1,1.0 +0,10.0,1,1.0,0,0,1.0,1,1.0 +0,11.0,1,1.0,0,0,1.0,1,1.0 +0,12.0,1,1.0,0,0,1.0,1,1.0 +0,13.0,1,1.0,0,0,1.0,1,1.0 +0,14.0,1,1.0,0,0,1.0,1,1.0 +0,15.0,1,1.0,0,0,1.0,1,1.0 +0,16.0,1,1.0,0,0,1.0,1,1.0 +0,17.0,1,1.0,0,0,1.0,1,1.0 +0,18.0,1,1.0,0,0,1.0,1,1.0 +0,19.0,1,1.0,0,0,1.0,1,1.0 +0,20.0,1,1.0,0,0,1.0,1,1.0 +0,21.0,1,1.0,0,0,1.0,1,1.0 +0,22.0,1,1.0,0,0,1.0,1,1.0 +0,23.0,1,1.0,0,0,1.0,1,1.0 +0,24.0,1,1.0,0,0,1.0,1,1.0 +0,25.0,1,1.0,0,0,1.0,1,1.0 +0,26.0,1,1.0,0,0,1.0,1,1.0 +0,27.0,1,1.0,0,0,1.0,1,1.0 +0,28.0,1,1.0,0,0,1.0,1,1.0 +0,29.0,1,1.0,0,0,1.0,1,1.0 +0,30.0,1,1.0,0,0,1.0,1,1.0 +0,31.0,1,1.0,0,0,1.0,1,1.0 +0,32.0,1,1.0,0,0,1.0,1,1.0 +0,33.0,1,1.0,0,0,1.0,1,1.0 +0,34.0,1,1.0,0,0,1.0,1,1.0 +0,35.0,1,1.0,0,0,1.0,1,1.0 +0,36.0,1,1.0,0,0,1.0,1,1.0 +0,37.0,1,1.0,0,0,1.0,1,1.0 +0,38.0,1,1.0,0,0,1.0,1,1.0 +0,39.0,1,1.0,0,0,1.0,1,1.0 +0,40.0,1,1.0,0,0,1.0,1,1.0 +0,41.0,1,1.0,0,0,1.0,1,1.0 +0,42.0,1,1.0,0,0,1.0,1,1.0 +0,43.0,1,1.0,0,0,1.0,1,1.0 +0,44.0,1,1.0,0,0,1.0,1,1.0 +0,45.0,1,1.0,0,0,1.0,1,1.0 +0,46.0,1,1.0,0,0,1.0,1,1.0 +0,47.0,1,1.0,0,0,1.0,1,1.0 +0,48.0,1,1.0,0,0,1.0,1,1.0 +0,49.0,1,1.0,0,0,1.0,1,1.0 +0,50.0,1,1.0,0,0,1.0,1,1.0 +0,51.0,1,1.0,0,0,1.0,1,1.0 +0,52.0,1,1.0,0,0,1.0,1,1.0 +0,53.0,1,1.0,0,0,1.0,1,1.0 +0,54.0,1,1.0,0,0,1.0,1,1.0 +0,55.0,1,1.0,0,0,1.0,1,1.0 +0,56.0,1,1.0,0,0,1.0,1,1.0 +0,57.0,1,1.0,0,0,1.0,1,1.0 +0,58.0,1,1.0,0,0,1.0,1,1.0 +0,59.0,1,1.0,0,0,1.0,1,1.0 +0,60.0,1,1.0,0,0,1.0,1,1.0 +0,61.0,1,1.0,0,0,1.0,1,1.0 +0,62.0,1,1.0,0,0,1.0,1,1.0 +0,63.0,1,1.0,0,0,1.0,1,1.0 +0,64.0,1,1.0,0,0,1.0,1,1.0 +0,65.0,1,1.0,0,0,1.0,1,1.0 +0,66.0,1,1.0,0,0,1.0,1,1.0 +0,67.0,1,1.0,0,0,1.0,1,1.0 +0,68.0,1,1.0,0,0,1.0,1,1.0 +0,69.0,1,1.0,0,0,1.0,1,1.0 +0,70.0,1,1.0,0,0,1.0,1,1.0 +0,71.0,1,1.0,0,0,1.0,1,1.0 +0,72.0,1,1.0,0,0,1.0,1,1.0 +0,73.0,1,1.0,0,0,1.0,1,1.0 +0,74.0,1,1.0,0,0,1.0,1,1.0 +0,75.0,1,1.0,0,0,1.0,1,1.0 +0,76.0,1,1.0,0,0,1.0,1,1.0 +0,77.0,1,1.0,0,0,1.0,1,1.0 +0,78.0,1,1.0,0,0,1.0,1,1.0 +0,79.0,1,1.0,0,0,1.0,1,1.0 +0,80.0,1,1.0,0,0,1.0,1,1.0 +0,81.0,1,1.0,0,0,1.0,1,1.0 +0,82.0,1,1.0,0,0,1.0,1,1.0 +0,83.0,1,1.0,0,0,1.0,1,1.0 +0,84.0,1,1.0,0,0,1.0,1,1.0 +0,85.0,1,1.0,0,0,1.0,1,1.0 +0,86.0,1,1.0,0,0,1.0,1,1.0 +0,87.0,1,1.0,0,0,1.0,1,1.0 +0,88.0,1,1.0,0,0,1.0,1,1.0 +0,89.0,1,1.0,0,0,1.0,1,1.0 +0,90.0,1,1.0,0,0,1.0,1,1.0 +0,91.0,1,1.0,0,0,1.0,1,1.0 +0,92.0,1,1.0,0,0,1.0,1,1.0 +0,93.0,1,1.0,0,0,1.0,1,1.0 +0,94.0,1,1.0,0,0,1.0,1,1.0 +0,95.0,1,1.0,0,0,1.0,1,1.0 +0,96.0,1,1.0,0,0,1.0,1,1.0 +0,97.0,1,1.0,0,0,1.0,1,1.0 +0,98.0,1,1.0,0,0,1.0,1,1.0 +0,99.0,1,1.0,0,0,1.0,1,1.0 +1,0.0,1,1.0,0,0,1.0,2,1.0 +1,1.0,1,1.0,0,0,1.0,2,1.0 +1,2.0,1,1.0,0,0,1.0,2,1.0 +1,3.0,1,1.0,0,0,1.0,2,1.0 +1,4.0,1,1.0,0,0,1.0,2,1.0 +1,5.0,1,1.0,0,0,1.0,2,1.0 +1,6.0,1,1.0,0,0,1.0,2,1.0 +1,7.0,1,1.0,0,0,1.0,2,1.0 +1,8.0,1,1.0,0,0,1.0,2,1.0 +1,9.0,1,1.0,0,0,1.0,2,1.0 +1,10.0,1,1.0,0,0,1.0,2,1.0 +1,11.0,1,1.0,0,0,1.0,2,1.0 +1,12.0,1,1.0,0,0,1.0,2,1.0 +1,13.0,1,1.0,0,0,1.0,2,1.0 +1,14.0,1,1.0,0,0,1.0,2,1.0 +1,15.0,1,1.0,0,0,1.0,2,1.0 +1,16.0,1,1.0,0,0,1.0,2,1.0 +1,17.0,1,1.0,0,0,1.0,2,1.0 +1,18.0,1,1.0,0,0,1.0,2,1.0 +1,19.0,1,1.0,0,0,1.0,2,1.0 +1,20.0,1,1.0,0,0,1.0,2,1.0 +1,21.0,1,1.0,0,0,1.0,2,1.0 +1,22.0,1,1.0,0,0,1.0,2,1.0 +1,23.0,1,1.0,0,0,1.0,2,1.0 +1,24.0,1,1.0,0,0,1.0,2,1.0 +1,25.0,1,1.0,0,0,1.0,2,1.0 +1,26.0,1,1.0,0,0,1.0,2,1.0 +1,27.0,1,1.0,0,0,1.0,2,1.0 +1,28.0,1,1.0,0,0,1.0,2,1.0 +1,29.0,1,1.0,0,0,1.0,2,1.0 +1,30.0,1,1.0,0,0,1.0,2,1.0 +1,31.0,1,1.0,0,0,1.0,2,1.0 +1,32.0,1,1.0,0,0,1.0,2,1.0 +1,33.0,1,1.0,0,0,1.0,2,1.0 +1,34.0,1,1.0,0,0,1.0,2,1.0 +1,35.0,1,1.0,0,0,1.0,2,1.0 +1,36.0,1,1.0,0,0,1.0,2,1.0 +1,37.0,1,1.0,0,0,1.0,2,1.0 +1,38.0,1,1.0,0,0,1.0,2,1.0 +1,39.0,1,1.0,0,0,1.0,2,1.0 +1,40.0,1,1.0,0,0,1.0,2,1.0 +1,41.0,1,1.0,0,0,1.0,2,1.0 +1,42.0,1,1.0,0,0,1.0,2,1.0 +1,43.0,1,1.0,0,0,1.0,2,1.0 +1,44.0,1,1.0,0,0,1.0,2,1.0 +1,45.0,1,1.0,0,0,1.0,2,1.0 +1,46.0,1,1.0,0,0,1.0,2,1.0 +1,47.0,1,1.0,0,0,1.0,2,1.0 +1,48.0,1,1.0,0,0,1.0,2,1.0 +1,49.0,1,1.0,0,0,1.0,2,1.0 +1,50.0,1,1.0,0,0,1.0,2,1.0 +1,51.0,1,1.0,0,0,1.0,2,1.0 +1,52.0,1,1.0,0,0,1.0,2,1.0 +1,53.0,1,1.0,0,0,1.0,2,1.0 +1,54.0,1,1.0,0,0,1.0,2,1.0 +1,55.0,1,1.0,0,0,1.0,2,1.0 +1,56.0,1,1.0,0,0,1.0,2,1.0 +1,57.0,1,1.0,0,0,1.0,2,1.0 +1,58.0,1,1.0,0,0,1.0,2,1.0 +1,59.0,1,1.0,0,0,1.0,2,1.0 +1,60.0,1,1.0,0,0,1.0,2,1.0 +1,61.0,1,1.0,0,0,1.0,2,1.0 +1,62.0,1,1.0,0,0,1.0,2,1.0 +1,63.0,1,1.0,0,0,1.0,2,1.0 +1,64.0,1,1.0,0,0,1.0,2,1.0 +1,65.0,1,1.0,0,0,1.0,2,1.0 +1,66.0,1,1.0,0,0,1.0,2,1.0 +1,67.0,1,1.0,0,0,1.0,2,1.0 +1,68.0,1,1.0,0,0,1.0,2,1.0 +1,69.0,1,1.0,0,0,1.0,2,1.0 +1,70.0,1,1.0,0,0,1.0,2,1.0 +1,71.0,1,1.0,0,0,1.0,2,1.0 +1,72.0,1,1.0,0,0,1.0,2,1.0 +1,73.0,1,1.0,0,0,1.0,2,1.0 +1,74.0,1,1.0,0,0,1.0,2,1.0 +1,75.0,1,1.0,0,0,1.0,2,1.0 +1,76.0,1,1.0,0,0,1.0,2,1.0 +1,77.0,1,1.0,0,0,1.0,2,1.0 +1,78.0,1,1.0,0,0,1.0,2,1.0 +1,79.0,1,1.0,0,0,1.0,2,1.0 +1,80.0,1,1.0,0,0,1.0,2,1.0 +1,81.0,1,1.0,0,0,1.0,2,1.0 +1,82.0,1,1.0,0,0,1.0,2,1.0 +1,83.0,1,1.0,0,0,1.0,2,1.0 +1,84.0,1,1.0,0,0,1.0,2,1.0 +1,85.0,1,1.0,0,0,1.0,2,1.0 +1,86.0,1,1.0,0,0,1.0,2,1.0 +1,87.0,1,1.0,0,0,1.0,2,1.0 +1,88.0,1,1.0,0,0,1.0,2,1.0 +1,89.0,1,1.0,0,0,1.0,2,1.0 +1,90.0,1,1.0,0,0,1.0,2,1.0 +1,91.0,1,1.0,0,0,1.0,2,1.0 +1,92.0,1,1.0,0,0,1.0,2,1.0 +1,93.0,1,1.0,0,0,1.0,2,1.0 +1,94.0,1,1.0,0,0,1.0,2,1.0 +1,95.0,1,1.0,0,0,1.0,2,1.0 +1,96.0,1,1.0,0,0,1.0,2,1.0 +1,97.0,1,1.0,0,0,1.0,2,1.0 +1,98.0,1,1.0,0,0,1.0,2,1.0 +1,99.0,1,1.0,0,0,1.0,2,1.0 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml new file mode 100644 index 0000000000..2cd8a05992 --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml @@ -0,0 +1,107 @@ + + + + framework/ROM/TimeSeries/SyntheticHistory.Fourier + talbpaul + 2021-01-08 + SupervisedLearning.SyntheticHistory,TSA.Fourier + + Tests the SyntheticHistory ROM using only the Fourier TimeSeriesAnalyzer algorithm. + + + + + MultiYearDWT + read, train, print, sample + 1 + + + + + infile + indata + + + indata + synth + + + synth + romMeta + romMeta + + + placeholder + synth + mc + samples + samples + + + + + ../TrainingData/multiYear.csv + + + + + + 2 + 42 + + 1.0 + + + + + + signal0, seconds + scaling + seconds + + db2 + 4 + + + signal0, seconds + macro + scaling + seconds + +

2

+ 3 +
+
+
+
+ + + + csv + samples + + + csv + romMeta + + + + + + + scaling, macro + signal0, seconds + + seconds + + + + scaling + seconds, signal0 + signal0 + signal0 + + + + +
diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml new file mode 100644 index 0000000000..7c3ef68b9c --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml @@ -0,0 +1,107 @@ + + + + framework/ROM/TimeSeries/MultiResolutionTSA + talbpaul + 2021-01-08 + SupervisedLearning.MultiResolutionTSA,TSA.FilterBankDWT + + Tests the SyntheticHistory ROM using only the Fourier TimeSeriesAnalyzer algorithm. + + + + + SimpleDWT + read, train, print, sample + 1 + + + + + infile + indata + + + indata + synth + + + synth + romMeta + romMeta + + + placeholder + synth + mc + samples + samples + + + + + ../TrainingData/SimpleMR.csv + + + + + + 2 + 42 + + 1.0 + + + + + + signal0, signal1, pivot + scaling + pivot + + db8 + 4 + + + signal0, signal1, pivot + scaling + macro + pivot + +

2

+ 3 +
+
+
+
+ + + + csv + samples + + + csv + romMeta + + + + + + + scaling, macro + pivot, signal0, signal1 + + pivot + + + + scaling + pivot, signal0, signal1 + signal0, signal1 + signal0, signal1 + + + + +
diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests new file mode 100644 index 0000000000..bbbd173dcb --- /dev/null +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests @@ -0,0 +1,35 @@ +[Tests] + [./simpleDWT] + type = 'RavenFramework' + input = 'simpleDWT.xml' + [./csv] + type = OrderedCSV + output = 'SimpleDWT/samples.csv' + rel_err = 4.7e-1 # thank you, Windows and Linux diffs + zero_threshold = 1e-12 + [../] + [./xml] + type = XML + output = 'SimpleDWT/romMeta.xml' + rel_err = 1e-2 + zero_threshold = 1e-3 # "constant" causes problems, all the rest are more accurate + [../] + [../] + + [./multiYearDWT] + type = 'RavenFramework' + input = 'multiYearDWT.xml' + [./csv] + type = OrderedCSV + output = 'multiYearDWT/samples.csv' + rel_err = 4.7e-1 + zero_threshold = 1e-12 + [../] + [./xml] + type = XML + output = 'multiYearDWT/romMeta.xml' + rel_err = 1e-2 + zero_threshold = 1e-3 + [../] + [../] +[] From 045bc725b610debc4e41dab2352db6074b174472 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Mon, 29 Jul 2024 12:45:58 -0600 Subject: [PATCH 09/23] pywavelets not optional, but imported with lazy loading --- dependencies.xml | 2 +- .../TSA/Transformers/FilterBankDWT.py | 19 ++++++------------- 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/dependencies.xml b/dependencies.xml index d12e2e978a..beb1f49a37 100644 --- a/dependencies.xml +++ b/dependencies.xml @@ -74,7 +74,7 @@ Note all install methods after "main" take - 1.2 + 1.2 0.9 diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index 5590a1a5e5..e43918dd53 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -22,8 +22,12 @@ import numpy as np from ..TimeSeriesAnalyzer import TimeSeriesTransformer -from ...utils import xmlUtils, InputTypes, InputData - +from ...utils import xmlUtils, InputTypes, InputData, importerUtils +try: + pywv = importerUtils.importModuleLazy("pywt", globals()) +except ModuleNotFoundError as exc: + print("The FilterBankDWT TSA Module requires the PYWAVELETS library to be installed in the current python environment") + raise ModuleNotFoundError from exc class FilterBankDWT(TimeSeriesTransformer): """ Applies a Discrete Wavelet Transform algorithm as a filter bank to decompose signal into @@ -122,11 +126,6 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): @ Out, params, dict, characteristic parameters """ # TODO extend to continuous wavelet transform - try: - import pywt - except ModuleNotFoundError as exc: - print("This RAVEN TSA Module requires the PYWAVELETS library to be installed in the current python environment") - raise ModuleNotFoundError from exc ## The pivot input parameter isn't used explicity in the ## transformation as it assumed/required that each element in the @@ -185,12 +184,6 @@ def getComposite(self, initial, params, pivot, settings): @ In, settings, dict, additional settings specific to algorithm @ Out, composite, np.array, resulting composite signal """ - try: - import pywt - except ModuleNotFoundError: - print("This RAVEN TSA Module requires the PYWAVELETS library to be installed in the current python environment") - raise ModuleNotFoundError - synthetic = np.zeros((len(pivot), len(params))) for t, (target, _) in enumerate(params.items()): results = params[target]['results'] From 59211285aaad004cad10fc4e3095205d341cd1f0 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Mon, 29 Jul 2024 15:19:28 -0600 Subject: [PATCH 10/23] fixing typo in pywt call, gold dirnames, add docstrings --- .../SupervisedLearning/MultiResolutionTSA.py | 42 +++++++++---------- .../SupervisedLearning/ROMCollection.py | 24 +++++++++-- .../TSA/Transformers/FilterBankDWT.py | 34 ++++++--------- .../{MultiYear => MultiYearDWT}/romMeta.xml | 0 .../{MultiYear => MultiYearDWT}/samples.csv | 0 .../gold/{SimpleMR => SimpleDWT}/romMeta.xml | 0 .../gold/{SimpleMR => SimpleDWT}/samples.csv | 0 .../ROM/TimeSeries/MultiResolutionTSA/tests | 2 +- 8 files changed, 54 insertions(+), 48 deletions(-) rename tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/{MultiYear => MultiYearDWT}/romMeta.xml (100%) rename tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/{MultiYear => MultiYearDWT}/samples.csv (100%) rename tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/{SimpleMR => SimpleDWT}/romMeta.xml (100%) rename tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/{SimpleMR => SimpleDWT}/samples.csv (100%) diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index 74b161db59..e60014cdd7 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -12,35 +12,20 @@ # See the License for the specific language governing permissions and # limitations under the License. """ - Created on January 10, 2019 + Created on July 29, 2024 - @author: talbpaul, wangc - Container to handle ROMs that are made of many sub-roms + @author: sotogj + Class to specifically handle multi-resolution time series analysis training """ -# standard libraries -import copy -import warnings -from collections import defaultdict, OrderedDict -import pprint - -# external libraries -import abc -import numpy as np -import pandas as pd -from scipy.interpolate import interp1d # internal libraries -from ..utils import utils, mathUtils, xmlUtils, randomUtils -from ..utils import InputData, InputTypes from .SupervisedLearning import SupervisedLearning from .SyntheticHistory import SyntheticHistory -# import pickle as pk # TODO remove me! -import os # # # # class MultiResolutionTSA(SupervisedLearning): - """ In addition to clusters for each history, interpolates between histories. """ + """ Class to specifically handle multi-resolution time series analysis training and evaluation.""" @classmethod def getInputSpecification(cls): @@ -52,7 +37,7 @@ class cls. specifying input of cls. """ spec = super().getInputSpecification() - spec.description = r"""Provides an alternative way to build the ROM. In addition to clusters for each history, interpolates between histories.""" + spec.description = r"""Class to specifically handle multi-resolution time series analysis training and evaluation.""" spec = SyntheticHistory.addTSASpecs(spec) return spec @@ -103,7 +88,13 @@ def _train(self, featureVals, targetVals): self._globalROM.trainTSASequential(targetVals) def _getMRTrainedParams(self): - + """ + Get trained params for multi-resolution time series analysis. Returns number of decomposition levels + and a sorted (or re-indexed) version of the trained params dictionary. + @ In, None + @ Out, numLevels, int, number of decomposition levels + @ Out, sortedTrainedParams, dict, dictionary of trained parameters + """ # get all trained parameters from final algorithm (should be multiresolution transformer) trainedParams = list(self._globalROM._tsaTrainedParams.items()) mrAlgo, mrTrainedParams = trainedParams[-1] @@ -114,11 +105,15 @@ def _getMRTrainedParams(self): # reformat the trained params sortedTrainedParams = mrAlgo._sortTrainedParamsByLevels(mrTrainedParams) - return numLevels, sortedTrainedParams def _updateMRTrainedParams(self, params): - + """ + Method to update trained parameter dictionary from this class using imported `params` dictionary + containing multiple-decomposition-level trainings + @ In, params, dict, dictionary of trained parameters from previous decomposition levels + @ Out, None + """ # get all trained parameters from final algorithm (should be multiresolution transformer) trainedParams = list(self._globalROM._tsaTrainedParams.items()) mrAlgo, mrTrainedParams = trainedParams[-1] @@ -138,6 +133,7 @@ def writeXML(self, writeTo, targets=None, skip=None): def __evaluateLocal__(self, featureVals): """ + Evaluate algorithms for ROM generation @ In, featureVals, float, a scalar feature value is passed as scaling factor @ Out, rlz, dict, realization dictionary of values for each target """ diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index 884e60ec6b..e5ef85afb6 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -1924,9 +1924,19 @@ def _train(self, featureVals, targetVals): # # class Decomposition(SupervisedLearning): + """ Time series histories are decomposed into multiple levels for training and evaluation. + Histories are combined into a single signal upon evaluation. + """ @classmethod def getInputSpecification(cls): + """ + Method to get a reference to a class that specifies the input data for + class cls. + @ In, cls, the class for which we are retrieving the specification + @ Out, inputSpecification, InputData.ParameterInput, class to use for + specifying input of cls. + """ spec = super().getInputSpecification() # segmenting and clustering segment = InputData.parameterInputFactory("Segment", strictMode=True, @@ -1950,6 +1960,11 @@ def getInputSpecification(cls): return spec def __init__(self): + """ + Constructor. + @ In, None + @ Out, None + """ super().__init__() self._macroTemplate = SyntheticHistory() # empty SyntheticHistory object, deepcopy'd later to train multiple instances per decomposition level self._macroParameter = None @@ -1993,8 +2008,8 @@ def _handleInput(self, paramInput): def train(self, tdict): """ Trains the SVL and its supporting SVLs etc. Overwrites base class behavior due to - special clustering and macro-step needs. - @ In, trainDict, dict, dictionary with training data + special decomposition and macro-step needs. + @ In, tdict, dict, dictionary with training data @ Out, None """ # create macro steps as needed @@ -2031,6 +2046,9 @@ def train(self, tdict): def _createMacroSteps(self, tdict): """ + Initializes the macroStep ROMs required for each step (e.g., year). + @ In, tdict, dict, dictionary with training data + @ Out, None """ # tdict should have two parameters, the pivotParameter and the macroParameter -> one step per realization if self._macroParameter not in tdict: @@ -2046,7 +2064,7 @@ def _createMacroSteps(self, tdict): ############### EVALUATING #################### def evaluate(self, edict): """ - Evaluate the set of interpolated models + Evaluate the set of decomposition models @ In, edict, dict, dictionary of evaluation parameters @ Out, result, dict, result of evaluation """ diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index e43918dd53..5bce44ee2c 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -24,7 +24,7 @@ from ..TimeSeriesAnalyzer import TimeSeriesTransformer from ...utils import xmlUtils, InputTypes, InputData, importerUtils try: - pywv = importerUtils.importModuleLazy("pywt", globals()) + pywt = importerUtils.importModuleLazy("pywt", globals()) except ModuleNotFoundError as exc: print("The FilterBankDWT TSA Module requires the PYWAVELETS library to be installed in the current python environment") raise ModuleNotFoundError from exc @@ -209,25 +209,19 @@ def writeXML(self, writeTo, params): def _getDecompositionLevels(self): """ - Removes trained signal from data and find residual - @ In, initial, np.array, original signal shaped [pivotValues, targets], targets MUST be in - same order as self.target - @ In, params, dict, training parameters as from self.characterize - @ In, pivot, np.array, time-like array values - @ In, settings, dict, additional settings specific to algorithm - @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] + Returns number of decomposition levels requested from user (overwritten by max. allowed + per wavelet family as a function of signal length). + @ In, None + @ Out, levels, int, number of decomposition levels """ return self._levels def _sortTrainedParamsByLevels(self, params): """ - Removes trained signal from data and find residual - @ In, initial, np.array, original signal shaped [pivotValues, targets], targets MUST be in - same order as self.target + Sorts or reformats the training parameters dictionary in a manner specific to each + multi resolution algorithm. @ In, params, dict, training parameters as from self.characterize - @ In, pivot, np.array, time-like array values - @ In, settings, dict, additional settings specific to algorithm - @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] + @ Out, sortedParams, dict, reformatted training parameters """ # reformatting the results of the trained `params` to be: # {target: {lvl: [ values, ... ], }, } @@ -241,13 +235,11 @@ def _sortTrainedParamsByLevels(self, params): def _combineTrainedParamsByLevels(self, params, newParams): """ - Removes trained signal from data and find residual - @ In, initial, np.array, original signal shaped [pivotValues, targets], targets MUST be in - same order as self.target - @ In, params, dict, training parameters as from self.characterize - @ In, pivot, np.array, time-like array values - @ In, settings, dict, additional settings specific to algorithm - @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] + Updates training parameter dictionary with trained parameters from previous + decomposition levels. + @ In, params, dict, original training parameters as from self.characterize + @ In, newParams, dict, new training parameters from other decomposition levels + @ Out, None """ # reformatting the results of the trained `params` to fit this algo's format: # {target: {lvl: [ values, ... ], }, } diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/romMeta.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml similarity index 100% rename from tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/romMeta.xml rename to tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/samples.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/samples.csv similarity index 100% rename from tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYear/samples.csv rename to tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/samples.csv diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/romMeta.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml similarity index 100% rename from tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/romMeta.xml rename to tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/samples.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/samples.csv similarity index 100% rename from tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleMR/samples.csv rename to tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/samples.csv diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests index bbbd173dcb..70f170ba5e 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests @@ -21,7 +21,7 @@ input = 'multiYearDWT.xml' [./csv] type = OrderedCSV - output = 'multiYearDWT/samples.csv' + output = 'MultiYearDWT/samples.csv' rel_err = 4.7e-1 zero_threshold = 1e-12 [../] From c2e8911d538a881ece45f89e2d7c0d3be342949d Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 30 Jul 2024 13:42:12 -0600 Subject: [PATCH 11/23] fixing other typos --- tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml | 2 +- tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml index 7c3ef68b9c..07ce6646e1 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml @@ -40,7 +40,7 @@ - ../TrainingData/SimpleMR.csv + ../TrainingData/simpleMR.csv diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests index 70f170ba5e..09e2453a26 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/tests @@ -27,7 +27,7 @@ [../] [./xml] type = XML - output = 'multiYearDWT/romMeta.xml' + output = 'MultiYearDWT/romMeta.xml' rel_err = 1e-2 zero_threshold = 1e-3 [../] From 84d3222dec21cf985b252e0a4e44b2e2a44057df Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Mon, 5 Aug 2024 10:13:46 -0600 Subject: [PATCH 12/23] fixing docstrings --- ravenframework/SupervisedLearning/MultiResolutionTSA.py | 3 ++- ravenframework/TSA/Fourier.py | 1 + ravenframework/TSA/Transformers/FilterBankDWT.py | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index e60014cdd7..fcc1d908c0 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -44,7 +44,7 @@ class cls. def __init__(self): """ Constructor. - @ In, kwargs, dict, initialization options + @ In, None @ Out, None """ super().__init__() @@ -130,6 +130,7 @@ def writeXML(self, writeTo, targets=None, skip=None): @ In, skip, list, optional, unused (kept for compatability) @ Out, None """ + return def __evaluateLocal__(self, featureVals): """ diff --git a/ravenframework/TSA/Fourier.py b/ravenframework/TSA/Fourier.py index d9a38eecf8..f344302ba0 100644 --- a/ravenframework/TSA/Fourier.py +++ b/ravenframework/TSA/Fourier.py @@ -90,6 +90,7 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None, simultFit=Tr @ 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 @ In, simultFit, bool, optional, if False then fit Fourier individually @ Out, params, dict, characteristic parameters """ diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index 5bce44ee2c..d9fd1082a3 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -20,6 +20,7 @@ """ import numpy as np +import copy from ..TimeSeriesAnalyzer import TimeSeriesTransformer from ...utils import xmlUtils, InputTypes, InputData, importerUtils @@ -123,6 +124,7 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): @ 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 @@ -167,7 +169,7 @@ def getResidual(self, initial, params, pivot, settings): @ In, settings, dict, additional settings specific to algorithm @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] """ - residual = np.zeros(initial.shape) + residual = copy.deepcopy(initial) for i, target in enumerate(settings['target']): residual = initial[:,i] - params[target]['results']['coeff_a'] return residual From 8a16c42ec38494243a576cf32feb98fc1dd71d56 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Wed, 11 Sep 2024 16:36:34 -0600 Subject: [PATCH 13/23] addressing reviewer comments, fixing writeXML and additional getters --- .../SupervisedLearning/MultiResolutionTSA.py | 67 +++++++++++-------- .../SupervisedLearning/ROMCollection.py | 32 +++++++-- .../SupervisedLearning/SyntheticHistory.py | 33 ++++----- ravenframework/TSA/TSAUser.py | 27 ++++++++ .../TSA/Transformers/FilterBankDWT.py | 23 +++++-- 5 files changed, 125 insertions(+), 57 deletions(-) diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index fcc1d908c0..ce17824534 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -48,10 +48,30 @@ def __init__(self): @ Out, None """ super().__init__() - self.printTag = 'Multiresolution Synthetic History' + self.printTag = 'Multi-Resolution Synthetic History' + # _globalROM is an instance of the SyntheticHistoryROM: + # It handles all TSA algorithms up to and including one that splits signal (or creates decompositions). + # In other words, it handles all TSA training and evaluation on the "global" signal before decomposition. + # A decomposition TSA algorithms is specified with _multiResolution=True within its class in the TSA module. self._globalROM = SyntheticHistory() - self._decompParams = {} self.decompositionAlgorithm = None + self._dynamicHandling = True # This ROM is able to manage the time-series on its own. + + def getGlobalROM(self): + """ + Getter for the globalROM (i.e., SyntheticHistory ROM) + @ In, None + @ Out, _globalROM, SyntheticHistory ROM, instance of a SyntheticHistory ROM + """ + return self._globalROM + + def setGlobalROM(self, globalROM): + """ + Setter for the globalROM (i.e., SyntheticHistory ROM) + @ In, _globalROM, SyntheticHistory ROM, instance of a SyntheticHistory ROM + @ Out, None + """ + self._globalROM = globalROM def _handleInput(self, paramInput): """ @@ -60,12 +80,12 @@ def _handleInput(self, paramInput): @ Out, None """ super()._handleInput(paramInput) - self._globalROM._handleInput(paramInput) - self._dynamicHandling = True # This ROM is able to manage the time-series on its own. + globalROM = self.getGlobalROM() + globalROM._handleInput(paramInput) # check that there is a multiresolution algorithm - allAlgorithms = self._globalROM._tsaAlgorithms - allAlgorithms.extend(self._globalROM._tsaGlobalAlgorithms) + allAlgorithms = globalROM.getTsaAlgorithms() # get non-global algorithms + allAlgorithms.extend(globalROM.getGlobalTsaAlgorithms()) # add all global algorithms foundMRAalgorithm = False for algo in allAlgorithms: if algo.canTransform(): @@ -95,16 +115,22 @@ def _getMRTrainedParams(self): @ Out, numLevels, int, number of decomposition levels @ Out, sortedTrainedParams, dict, dictionary of trained parameters """ - # get all trained parameters from final algorithm (should be multiresolution transformer) - trainedParams = list(self._globalROM._tsaTrainedParams.items()) + globalROM = self.getGlobalROM() + + # get all trained parameters from final algorithm so far (should be multiresolution transformer) + trainedParams = list(globalROM.getTsaTrainedParams().items()) mrAlgo, mrTrainedParams = trainedParams[-1] + if mrAlgo.name != self.decompositionAlgorithm: + msg = f'TSA Algorithm {self.decompositionAlgorithm} for multiresolution time series analysis must be ' + msg += 'the *last* algorithm applied before the node.' + self.raiseAnError(IOError, msg) # eh, maybe this should live in TSAUser in the future... # extract settings used for that last algorithm (should have some sort of "levels") - numLevels = mrAlgo._getDecompositionLevels() + numLevels = mrAlgo.getDecompositionLevels() # reformat the trained params - sortedTrainedParams = mrAlgo._sortTrainedParamsByLevels(mrTrainedParams) + sortedTrainedParams = mrAlgo.sortTrainedParamsByLevels(mrTrainedParams) return numLevels, sortedTrainedParams def _updateMRTrainedParams(self, params): @@ -115,10 +141,10 @@ def _updateMRTrainedParams(self, params): @ Out, None """ # get all trained parameters from final algorithm (should be multiresolution transformer) - trainedParams = list(self._globalROM._tsaTrainedParams.items()) + trainedParams = list(self._globalROM.getTsaTrainedParams().items()) mrAlgo, mrTrainedParams = trainedParams[-1] - mrAlgo._combineTrainedParamsByLevels(mrTrainedParams, params) + mrAlgo.combineTrainedParamsByLevels(mrTrainedParams, params) def writeXML(self, writeTo, targets=None, skip=None): @@ -130,11 +156,11 @@ def writeXML(self, writeTo, targets=None, skip=None): @ In, skip, list, optional, unused (kept for compatability) @ Out, None """ - return + self._globalROM.writeTSAtoXML(writeTo) def __evaluateLocal__(self, featureVals): """ - Evaluate algorithms for ROM generation + Evaluate algorithms for ROM generation @ In, featureVals, float, a scalar feature value is passed as scaling factor @ Out, rlz, dict, realization dictionary of values for each target """ @@ -142,20 +168,7 @@ def __evaluateLocal__(self, featureVals): return rlz - - - ### ESSENTIALLY UNUSED ### - def _localNormalizeData(self,values,names,feat): - """ - Overwrites default normalization procedure, since we do not desire normalization in this implementation. - @ In, values, unused - @ In, names, unused - @ In, feat, feature to normalize - @ Out, None - """ - self.muAndSigmaFeatures[feat] = (0.0,1.0) - def __confidenceLocal__(self,featureVals): """ This method is currently not needed for ARMA diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index e5ef85afb6..fa9c2c50f5 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -1967,10 +1967,10 @@ def __init__(self): """ super().__init__() self._macroTemplate = SyntheticHistory() # empty SyntheticHistory object, deepcopy'd later to train multiple instances per decomposition level - self._macroParameter = None - self._macroSteps = {} # collection of macro steps (e.g. each year) - self._decompSteps = {} - self.name = 'Decomposition' + self._macroParameter = None # macroParameter name (str), e.g. 'YEAR' + self._macroSteps = {} # collection of macro steps (e.g. each year) + self._decompSteps = {} # collection of decomposition steps, indexed per macroID and then per level + self.name = 'Decomposition' # ROM Collection subtype def setTemplateROM(self, romInfo): """ @@ -1983,7 +1983,7 @@ def setTemplateROM(self, romInfo): if self._templateROM is None: self.raiseAnError(IOError, 'A rom instance is required by', self.name, 'please check your implementation') # only allowing Decomposition ROMCollection to be used with MultiResolutionTSA ROM subtype - if self._templateROM.printTag != 'Multiresolution Synthetic History': + if self._templateROM.printTag != 'Multi-Resolution Synthetic History': self.raiseAnError(IOError, 'The Decomposition ROMCollection segment class requires a ROM subtype of MultiResolutionTSA.') def _handleInput(self, paramInput): @@ -2126,13 +2126,31 @@ def evaluate(self, edict): def writeXML(self, writeTo, targets=None, skip=None): """ - Write out ARMA information + Write out Decomposition information @ In, writeTo, xmlUtils.StaticXmlElement, entity to write to @ In, targets, list, optional, unused @ In, skip, list, optional, unused @ Out, None """ - + # write global information + newNode = xmlUtils.StaticXmlElement('DecompositionMultiyearROM') + ## macro steps information + newNode.getRoot().append(xmlUtils.newNode('MacroParameterID', text=self._macroParameter)) + newNode.getRoot().append(xmlUtils.newNode('MacroSteps', text=len(self._macroSteps))) + newNode.getRoot().append(xmlUtils.newNode('MacroFirstStep', text=min(self._macroSteps))) + newNode.getRoot().append(xmlUtils.newNode('MacroLastStep', text=max(self._macroSteps))) + writeTo.getRoot().append(newNode.getRoot()) + # write info about EACH macro step + main = writeTo.getRoot() + for macroID, step in self._macroSteps.items(): + newNode = xmlUtils.StaticXmlElement('MacroStepROM', attrib={self._macroParameter: str(macroID)}) + step.writeXML(newNode, targets, skip) + # write info about EACH decomposition step + for decompID, dStep in self._decompSteps[macroID].items(): + newSubNode = xmlUtils.StaticXmlElement('DecompStepROM', attrib={'detail_level': str(decompID)}) + dStep.writeXML(newSubNode, targets, skip) + newNode.getRoot().append(newSubNode.getRoot()) + main.append(newNode.getRoot()) ############### DUMMY #################### # dummy methods that are required by SVL and not generally used diff --git a/ravenframework/SupervisedLearning/SyntheticHistory.py b/ravenframework/SupervisedLearning/SyntheticHistory.py index 083fa3ffe8..547235b356 100644 --- a/ravenframework/SupervisedLearning/SyntheticHistory.py +++ b/ravenframework/SupervisedLearning/SyntheticHistory.py @@ -79,7 +79,7 @@ def _handleInput(self, paramInput): """ SupervisedLearning._handleInput(self, paramInput) self.readTSAInput(paramInput, self.hasClusters()) - if len(self._tsaAlgorithms)==0: + if len(self.getTsaAlgorithms())==0: self.raiseAWarning("No Segmenting algorithms were requested.") def _train(self, featureVals, targetVals): @@ -143,7 +143,7 @@ def finalizeGlobalRomSegmentEvaluation(self, settings, evaluation, weights, slic @ In, slicer, slice, indexer for data range of this segment FROM GLOBAL SIGNAL @ Out, evaluation, dict, {target: np.ndarray} adjusted global evaluation """ - if len(self._tsaGlobalAlgorithms)>0: + if len(self.getGlobalTsaAlgorithms())>0: rlz = self.evaluateTSASequential(evalGlobal=True, evaluation=evaluation, slicer=slicer) for key,val in rlz.items(): evaluation[key] = val @@ -237,7 +237,7 @@ def _getClusterableFeatures(self, trainGlobal=False): """ features = {} # check: is it possible tsaAlgorithms isn't populated by now? - algorithms = self._tsaGlobalAlgorithms if trainGlobal else self._tsaAlgorithms + algorithms = self.getGlobalTsaAlgorithms() if trainGlobal else self.getTsaAlgorithms() for algo in algorithms: if algo.canCharacterize(): features[algo.name] = algo._features @@ -256,11 +256,11 @@ def getLocalRomClusterFeatures(self, featureTemplate, settings, request, picker= @ Out, features, dict, {target_metric: np.array(floats)} features to cluster on """ features = {} - for algo in self._tsaAlgorithms: + for algo in self.getTsaAlgorithms(): if algo.name not in request or not algo.canCharacterize(): continue algoReq = request[algo.name] if request is not None else None - algoFeatures = algo.getClusteringValues(featureTemplate, algoReq, self._tsaTrainedParams[algo]) + algoFeatures = algo.getClusteringValues(featureTemplate, algoReq, self.getTsaTrainedParams()[algo]) features.update(algoFeatures) return features @@ -274,11 +274,11 @@ def setLocalRomClusterFeatures(self, settings): for feature, values in settings.items(): target, algoName, ident = feature.split('|', maxsplit=2) byAlgo[algoName].append((target, ident, values)) - for algo in self._tsaAlgorithms: + for algo in self.getTsaAlgorithms(): settings = byAlgo.get(algo.name, None) if settings: - params = algo.setClusteringValues(settings, self._tsaTrainedParams[algo]) - self._tsaTrainedParams[algo] = params + params = algo.setClusteringValues(settings, self.getTsaTrainedParams()[algo]) + self.getTsaTrainedParams()[algo] = params def findAlgoByName(self, name): """ @@ -286,7 +286,7 @@ def findAlgoByName(self, name): @ In, name, str, name of algorithm @ Out, algo, TSA.TimeSeriesAnalyzer, algorithm """ - for algo in self._tsaAlgorithms: + for algo in self.getTsaAlgorithms(): if algo.name == name: return algo return None @@ -342,11 +342,11 @@ def parametrizeGlobalRomFeatures(self, featureDict): params = {} requests = self._getClusterableFeatures(trainGlobal=True) - for algo in self._tsaGlobalAlgorithms: + for algo in self.getGlobalTsaAlgorithms(): 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]) + algoFeatures = algo.getClusteringValues(featureTemplate, algoReq, self.getTsaTrainedParams()[algo]) params.update(algoFeatures) return params @@ -362,14 +362,15 @@ def setGlobalRomFeatures(self, params, pivotValues): for feature, values in params.items(): target, algoName, ident = feature.split('|', maxsplit=2) byAlgo[algoName].append((target, ident, values)) - for algo in self._tsaAlgorithms: + trainedParams = self.getTsaTrainedParams() + for algo in self.getTsaAlgorithms(): 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 + # filtered_settings = [feat for feat in settings if feat[0] in self.getTsaTrainedParams()[algo]] + params = algo.setClusteringValues(settings, trainedParams[algo]) + trainedParams[algo] = params + return trainedParams def finalizeLocalRomSegmentEvaluation(self, settings, evaluation, globalPicker, localPicker=None): """ diff --git a/ravenframework/TSA/TSAUser.py b/ravenframework/TSA/TSAUser.py index 33c7dd839e..f5503e054c 100644 --- a/ravenframework/TSA/TSAUser.py +++ b/ravenframework/TSA/TSAUser.py @@ -342,3 +342,30 @@ def writeTSAPointwiseData(self, writeTo): continue algo_rlz = {} return algo_rlz + + +## Additional getters + + def getTsaAlgorithms(self): + """ + Get list of TSA Algorithms in order of application + @ In, None + @ Out, tsaAlgorithms, list, list and order for TSA algorithms to use + """ + return self._tsaAlgorithms + + def getGlobalTsaAlgorithms(self): + """ + Get list of TSA Global Algorithms in order of application + @ In, None + @ Out, tsaGlobalAlgorithms, list, list and order for Global TSA algorithms to use + """ + return self._tsaGlobalAlgorithms + + def getTsaTrainedParams(self): + """ + Get dict of TSA trained parameters + @ In, None + @ Out, tsaTrainedParams, dict, trained parameters for all TSA algorithms + """ + return self._tsaTrainedParams diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index d9fd1082a3..2d1b3502e6 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -47,6 +47,9 @@ def __init__(self, *args, **kwargs): """ # general infrastructure super().__init__(*args, **kwargs) + # total number of decomposition levels, including approximation level and detail levels. + # NOTE: the number of levels will start with user input but may be modified to lower level + # if algorithm determines it cannot decompose the signal further. self._levels = 1 @classmethod @@ -98,8 +101,11 @@ def getInputSpecification(cls): \item \textbf{cmor family}: cmor \end{itemize}""")) specs.addSub(InputData.parameterInputFactory('levels', contentType=InputTypes.IntegerType, - descr=r"""the number of wavelet decomposition levels for our signal. If level is 0, - it doesn't """)) + descr=r"""the number of wavelet decomposition levels for our signal. This includes approximation level + which is used as the trend of the signal and the detail level(s) for which further algorithms will + be applied. Note that there is a maximum decomposition level depending on signal length and the chosen + wavelet family: if desired level is larger than the maximum decomposition level, the latter will be used. + If provided level is 0, no decomposition is conducted. """)) return specs def handleInput(self, spec): @@ -206,10 +212,13 @@ def writeXML(self, writeTo, params): for target, info in params.items(): base = xmlUtils.newNode(target) writeTo.append(base) - base.append(xmlUtils.newNode('order', text=info['order'])) + if 'coeff_a' in info['results']: + base.append(xmlUtils.newNode('N_approx_levels', text=1)) # number of approximation levels (should be 1) + if 'coeff_d' in info['results']: + coeff_d = info['results']['coeff_d'] + base.append(xmlUtils.newNode('N_detail_levels', text=len(coeff_d))) # number of detail levels (>1) - - def _getDecompositionLevels(self): + def getDecompositionLevels(self): """ Returns number of decomposition levels requested from user (overwritten by max. allowed per wavelet family as a function of signal length). @@ -218,7 +227,7 @@ def _getDecompositionLevels(self): """ return self._levels - def _sortTrainedParamsByLevels(self, params): + def sortTrainedParamsByLevels(self, params): """ Sorts or reformats the training parameters dictionary in a manner specific to each multi resolution algorithm. @@ -235,7 +244,7 @@ def _sortTrainedParamsByLevels(self, params): sortedParams[target][lvl] = contents['results']['coeff_d'][lvl,:] return sortedParams - def _combineTrainedParamsByLevels(self, params, newParams): + def combineTrainedParamsByLevels(self, params, newParams): """ Updates training parameter dictionary with trained parameters from previous decomposition levels. From 038c71ce2add7539f7ae311de81a65a03e8def20 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Wed, 11 Sep 2024 16:38:31 -0600 Subject: [PATCH 14/23] fixing test files and regolding romMeta --- .../gold/MultiYearDWT/romMeta.xml | 106 ++++++++++++++++++ .../gold/SimpleDWT/romMeta.xml | 44 +++++++- .../MultiResolutionTSA/multiYearDWT.xml | 10 +- .../MultiResolutionTSA/simpleDWT.xml | 8 +- 4 files changed, 160 insertions(+), 8 deletions(-) diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml index f4699621fe..813cd1296c 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml @@ -5,6 +5,112 @@ scaling signal0,seconds + + macro + 2 + 1 + 2 + + + + + 1 + 3 + + + + + + -1.418533300e-02 + 5.657565539e-01 + -2.016899601e-01 + 8.876686906e-01 + 8.877409636e-01 + 9.999347861e-01 + 1.262257641e-01 + 2,0,3 + + + + + + + -9.723375158e-05 + 1.303824395e+00 + -8.023112427e-01 + -8.608740430e-01 + -9.942496311e-01 + 8.665437137e-01 + 7.065351710e-02 + 2,0,3 + + + + + + + -4.988595934e-05 + -1.226963709e+00 + -6.496999724e-01 + -7.693561036e-02 + -5.886814381e-01 + -2.653647705e-01 + 1.131946969e-01 + 2,0,3 + + + + + + + + 1 + 3 + + + + + + -2.007533604e-03 + 5.477200913e-01 + -1.776652906e-01 + 9.059678394e-01 + 9.060010166e-01 + 9.999696266e-01 + 9.395131913e-02 + 2,0,3 + + + + + + + -2.470720544e-05 + 1.303100240e+00 + -7.216840523e-01 + -9.745108132e-01 + -9.990488840e-01 + 9.754062835e-01 + 5.656817923e-02 + 2,0,3 + + + + + + + -8.744662762e-04 + -5.482244404e-01 + 3.878420774e-01 + -8.841872851e-01 + -9.381941028e-01 + 8.712503276e-01 + 7.113185334e-02 + 2,0,3 + + + + diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml index 7a2e16a76b..4b076fbda3 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml @@ -5,6 +5,48 @@ scaling signal0,signal1,pivot + + macro + 1 + 1 + 1 + + + + + 1 + 1 + + + 1 + 1 + + + + + + 2.114254284e-05 + -1.134903740e+00 + -2.630983873e-01 + -9.932710697e-01 + -8.366523797e-01 + 8.840743465e-01 + 2.945535390e-02 + 2,0,3 + + + -1.872842056e-05 + -1.347367989e+00 + -4.082267741e-01 + -9.881227307e-01 + -9.381630843e-01 + 9.686163148e-01 + 2.694538532e-02 + 2,0,3 + + + + - + diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml index 2cd8a05992..057e03a48b 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml @@ -1,12 +1,14 @@ - framework/ROM/TimeSeries/SyntheticHistory.Fourier - talbpaul - 2021-01-08 + framework/ROM/TimeSeries/MultiResolutionTSA + sotogj + 2024-07-29 SupervisedLearning.SyntheticHistory,TSA.Fourier - Tests the SyntheticHistory ROM using only the Fourier TimeSeriesAnalyzer algorithm. + Tests the MultiResolutionTSA ROM using multiple macroSteps/years and the FilterBankDWT algorithm. + An ARMA model is trained on each detail level. Requested number of levels in FilterBankDWT + should exceed the theoretical maximum, so the result should have only 3 detail levels per year. diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml index 07ce6646e1..9a2e782932 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml @@ -2,11 +2,13 @@ framework/ROM/TimeSeries/MultiResolutionTSA - talbpaul - 2021-01-08 + sotogj + 2024-07-29 SupervisedLearning.MultiResolutionTSA,TSA.FilterBankDWT - Tests the SyntheticHistory ROM using only the Fourier TimeSeriesAnalyzer algorithm. + Tests the MultiResolutionTSA ROM using a singular macroStep and the FilterBankDWT algorithm. + An ARMA model is trained on each detail level. Requested number of levels in FilterBankDWT + should exceed the theoretical maximum, so the result should have only 1 detail level. From 31bfc5a5a4dcc7d5b3eaf1660988eb76157cab30 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 17 Sep 2024 09:59:32 -0600 Subject: [PATCH 15/23] updating descriptions and some fixes to levels input --- doc/user_manual/raven_user_manual.tex | 5 +- .../SupervisedLearning/ROMCollection.py | 5 +- .../TSA/Transformers/FilterBankDWT.py | 122 +++++++++++------- ravenframework/TSA/Transformers/__init__.py | 1 + 4 files changed, 79 insertions(+), 54 deletions(-) diff --git a/doc/user_manual/raven_user_manual.tex b/doc/user_manual/raven_user_manual.tex index 1e34053fc7..1548d8c3ea 100644 --- a/doc/user_manual/raven_user_manual.tex +++ b/doc/user_manual/raven_user_manual.tex @@ -273,7 +273,8 @@ \\Mohammad G. Abdo \\Dylan J. McDowell \\Ramon K. Yoshiura -\\Junyung Kim\\ +\\Junyung Kim +\\Gabriel J. Soto\\ \textbf{\textit{Former Developers:}} \\Cristian Rabiti \\Daniel P. Maljovec @@ -307,7 +308,7 @@ \SANDnum{INL/EXT-15-34123} \SANDprintDate{\today} \SANDauthor{Cristian Rabiti, Andrea Alfonsi, Joshua Cogliati, Diego Mandelli, Congjian Wang, Paul W. Talbot, -Mohammad G. Abdo, Dylan J. McDowell, Ramon K. Yoshiura, Daniel P. Maljovec, Jun Chen, Jia Zhou, Junyung Kim, Robert Kinoshita, Sonat Sen} +Mohammad G. Abdo, Dylan J. McDowell, Ramon K. Yoshiura, Daniel P. Maljovec, Jun Chen, Jia Zhou, Junyung Kim, Robert Kinoshita, Sonat Sen, Gabriel J. Soto} \SANDreleaseType{Revision 10} % ---------------------------------------------------------------------------- % diff --git a/ravenframework/SupervisedLearning/ROMCollection.py b/ravenframework/SupervisedLearning/ROMCollection.py index fa9c2c50f5..4dad97d46b 100644 --- a/ravenframework/SupervisedLearning/ROMCollection.py +++ b/ravenframework/SupervisedLearning/ROMCollection.py @@ -2117,9 +2117,8 @@ def evaluate(self, edict): results[k] = np.zeros([numMacro] + list((macroResults[noPivotTargets[0]].shape)), dtype=object) # storing results from a single macroStep (includes all decomp levels) - for target, contents in results.items(): - if target not in [self.pivotID, '_indexMap']: - contents = macroResults[target] + for target in noPivotTargets: + results[target][m] = macroResults[target] results[self._macroParameter] = macroIndexValues return results diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index 2d1b3502e6..20cbdfd8eb 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -16,7 +16,7 @@ Created on November 13, 2023 @author: sotogj -Discrete Wavelet Transform +Filter Bank Discrete Wavelet Transform """ import numpy as np @@ -34,7 +34,6 @@ class FilterBankDWT(TimeSeriesTransformer): """ Applies a Discrete Wavelet Transform algorithm as a filter bank to decompose signal into multiple time resolution signals. """ - _acceptsMissingValues = True _multiResolution = True @@ -61,51 +60,72 @@ def getInputSpecification(cls): """ specs = super().getInputSpecification() specs.name = 'filterbankdwt' - specs.description = r"""Discrete Wavelet TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform - on time-dependent data as a filter bank to decompose the signal to multiple frequency levels. - Note: This TSA module requires pywavelets to be installed within your - python environment.""" + specs.description = r"""Filter Bank Discrete Wavelet Transform, a multi-resolution-capable TimeSeriesAnalysis + algorithm. Performs a discrete wavelet transform (DWT) on time-dependent data as a filter bank to decompose the + signal to multiple frequency levels. Given a wavelet family and the original signal, the signal is projected + onto modifications of the original "mother" wavelet $\Psi$ to produce wavelet coefficients. The modifications + $\psi_{a,b}$ happen in two ways: + \begin{itemize} + \item the wavelet is scaled by factor $a$ to capture features at different time scales (e.g., if the wavelet + is "thinner" it better captures faster frequency features) + \item the wavelet is shifted in time by factor $b$ across the entire time domain of the signal for each + scale $a$ + \end{itemize} + After all projections, there is a 2-D array of coefficients regarding the scale $a$ and shift $b$. The modified + wavelets are given by: + \begin{equation*} + \psi_{a,b} = \frac{1}{\sqrt{a}} \Psi(\frac{t-b}{a}) + \end{equation*} + The Filter Bank DWT works in a cascading sequence of low- and high-pass filters for all requested decomposition + levels to create the wavelet coefficients. The low- and high-pass filters create a set of approximation and + detail coefficients, respectively, for each scale. Approximation coefficients correspond to lower + frequency/large wavelength features; detail cofficients, to higher frequency/smaller wavelength features. + Subsequent decompositions apply the filters to the previous approximation coefficients. For N levels of + decomposition, N sets of detail coefficients and 1 set of approximation coefficients are produced. Currently, + the approximation coefficients are treated as a trend in the signal and subtracted from the signal. + Note: This TSA module requires pywavelets to be installed within your python environment.""" specs.addSub(InputData.parameterInputFactory( - 'family', - contentType=InputTypes.StringType, - descr=r"""The type of wavelet to use for the transformation. - There are several possible families to choose from, and most families contain - more than one variation. For more information regarding the wavelet families, - refer to the Pywavelets documentation located at: - https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) - \\ - Possible values are: - \begin{itemize} - \item \textbf{haar family}: haar - \item \textbf{db family}: db1, db2, db3, db4, db5, db6, db7, db8, db9, db10, db11, - db12, db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, db23, - db24, db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, - db36, db37, db38 - \item \textbf{sym family}: sym2, sym3, sym4, sym5, sym6, sym7, sym8, sym9, sym10, - sym11, sym12, sym13, sym14, sym15, sym16, sym17, sym18, sym19, sym20 - \item \textbf{coif family}: coif1, coif2, coif3, coif4, coif5, coif6, coif7, coif8, - coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17 - \item \textbf{bior family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, - bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, - bior6.8 - \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, rbio2.2, rbio2.4, rbio2.6, - rbio2.8, rbio3.1, rbio3.3, rbio3.5, rbio3.7, rbio3.9, rbio4.4, rbio5.5, - rbio6.8 - \item \textbf{dmey family}: dmey - \item \textbf{gaus family}: gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 - \item \textbf{mexh family}: mexh - \item \textbf{morl family}: morl - \item \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 - \item \textbf{shan family}: shan - \item \textbf{fbsp family}: fbsp - \item \textbf{cmor family}: cmor - \end{itemize}""")) + 'family', + contentType=InputTypes.StringType, + descr=r"""The type of wavelet to use for the transformation. + There are several possible families to choose from, and most families contain + more than one variation. For more information regarding the wavelet families, + refer to the Pywavelets documentation located at: + https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) + \\ + Possible values are: + \begin{itemize} + \item \textbf{haar family}: haar + \item \textbf{db family}: db1, db2, db3, db4, db5, db6, db7, db8, db9, db10, db11, + db12, db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, db23, + db24, db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, + db36, db37, db38 + \item \textbf{sym family}: sym2, sym3, sym4, sym5, sym6, sym7, sym8, sym9, sym10, + sym11, sym12, sym13, sym14, sym15, sym16, sym17, sym18, sym19, sym20 + \item \textbf{coif family}: coif1, coif2, coif3, coif4, coif5, coif6, coif7, coif8, + coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17 + \item \textbf{bior family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, + bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, + bior6.8 + \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, rbio2.2, rbio2.4, rbio2.6, + rbio2.8, rbio3.1, rbio3.3, rbio3.5, rbio3.7, rbio3.9, rbio4.4, rbio5.5, + rbio6.8 + \item \textbf{dmey family}: dmey + \item \textbf{gaus family}: gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 + \item \textbf{mexh family}: mexh + \item \textbf{morl family}: morl + \item \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 + \item \textbf{shan family}: shan + \item \textbf{fbsp family}: fbsp + \item \textbf{cmor family}: cmor + \end{itemize}""")) specs.addSub(InputData.parameterInputFactory('levels', contentType=InputTypes.IntegerType, - descr=r"""the number of wavelet decomposition levels for our signal. This includes approximation level - which is used as the trend of the signal and the detail level(s) for which further algorithms will - be applied. Note that there is a maximum decomposition level depending on signal length and the chosen - wavelet family: if desired level is larger than the maximum decomposition level, the latter will be used. - If provided level is 0, no decomposition is conducted. """)) + descr=r"""the number of wavelet decomposition levels for requested for the signal. This is equivalent to + the number of sets of detail coefficients produced. Note that there will always be one set of + approximation cofficients produced, which is treated as a trend in the signal. Note that there is a + maximum decomposition level depending on signal length and the chosen wavelet family: if desired + level is larger than the maximum decomposition level, the latter will be used. Provided level must + be nonzero.""")) return specs def handleInput(self, spec): @@ -118,7 +138,11 @@ def handleInput(self, spec): settings['family'] = spec.findFirst('family').value settings['levels'] = spec.findFirst('levels').value - self._levels = settings['levels'] - 1 + if settings['levels'] == 0: + raise IOError("Discrete Wavelet Transform requires non-zero number of decomposition levels.") + + self._levels = settings['levels'] + return settings def fit(self, signal, pivot, targets, settings, trainedParams=None): @@ -146,7 +170,7 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): max_level = pywt.dwt_max_level(len(pivot), family) if self._levels>max_level: print(f"Number of levels requested is larger than maximum DWT decomposition level, switching to maximum allowed: {max_level}") - self._levels = max_level - 1 + self._levels = max_level settings['levels'] = self._levels for i, target in enumerate(targets): @@ -156,7 +180,7 @@ def fit(self, signal, pivot, targets, settings, trainedParams=None): # TODO:this is temporary for zero-filter SOLAR data... should this also look back to find filter results? results = params[target]['results'] - coeffs = pywt.mra(history, family, self._levels, transform='dwt' ) + coeffs = pywt.mra(history, family, self._levels, transform='dwt') for coeff in coeffs: coeff[mask] = np.nan @@ -175,7 +199,7 @@ def getResidual(self, initial, params, pivot, settings): @ In, settings, dict, additional settings specific to algorithm @ Out, residual, np.array, reduced signal shaped [pivotValues, targets] """ - residual = copy.deepcopy(initial) + residual = initial.copy() for i, target in enumerate(settings['target']): residual = initial[:,i] - params[target]['results']['coeff_a'] return residual diff --git a/ravenframework/TSA/Transformers/__init__.py b/ravenframework/TSA/Transformers/__init__.py index 7a94725ce8..76c589cc1c 100644 --- a/ravenframework/TSA/Transformers/__init__.py +++ b/ravenframework/TSA/Transformers/__init__.py @@ -26,3 +26,4 @@ from .Normalizers import MaxAbsScaler, MinMaxScaler, StandardScaler, RobustScaler from .Distributions import Gaussianize, QuantileTransformer, PreserveCDF from .Differencing import Differencing +from .FilterBankDWT import FilterBankDWT From 521ae78904045ac410f0cc85f6a0e4c3e4efe07e Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Tue, 17 Sep 2024 15:07:57 -0600 Subject: [PATCH 16/23] matching TEAL plugin to remote --- plugins/TEAL | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/TEAL b/plugins/TEAL index fbc880c1de..0207d569e0 160000 --- a/plugins/TEAL +++ b/plugins/TEAL @@ -1 +1 @@ -Subproject commit fbc880c1de023048690b07823a9fafb1a9763ad2 +Subproject commit 0207d569e0f47d2dfca3001143f149343db78c5f From 0fd5ae0c2276896f66dc9f31665e8ceba6b1e075 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Wed, 18 Sep 2024 10:59:11 -0600 Subject: [PATCH 17/23] changing training data and MRA tests --- .../TrainingData/generateMultiYear.py | 87 +- .../TrainingData/generateSimple.py | 118 +- .../TrainingData/multiYear_A.csv | 1066 +---------------- .../TrainingData/multiYear_B.csv | 1066 +---------------- .../TrainingData/simpleMR_A.csv | 356 ++++-- .../MultiResolutionTSA/multiYearDWT.xml | 29 +- .../MultiResolutionTSA/simpleDWT.xml | 33 +- 7 files changed, 568 insertions(+), 2187 deletions(-) diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateMultiYear.py b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateMultiYear.py index 858e537fe5..66e5535257 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateMultiYear.py +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateMultiYear.py @@ -12,64 +12,91 @@ # See the License for the specific language governing permissions and # limitations under the License. """ - Generates training data in the form of Fourier signals. + Generates training data for a FilterBank multiresolution test, applying Fourier signals and + ARMA-style signals at different resolutions. Additionally generates multiyear signals. """ import numpy as np import pandas as pd +import os.path as path from generators import fourier, arma plot = False -pivot = np.arange(1000) +dirname = path.dirname(path.abspath(__file__)) +# YEAR 0 signal +pivot = np.arange(0,2**6) +year0 = np.zeros(len(pivot)) +year1 = np.zeros(len(pivot)) -# macroStep 0 -amps = [16, 8, 10, 12] -periods = [75, 125, 250, 500] -phases = [0, np.pi/4, np.pi/2, np.pi] -intercept = 42 -f0 = fourier(amps, periods, phases, pivot, mean=intercept) +amps = [ 8, 20] +periods = [ 4, 15] +phases = [np.pi/6, np.pi/2] +intercept = 3 +f = fourier(amps, periods, phases, pivot, mean=intercept) -slags = [0.4, 0.2] -nlags = [0.3, 0.2, 0.1] -a0, _ = arma(slags, nlags, pivot, plot=False) +l = 1 +slags = [-0.05, 0.1] +nlags = [0.05, 0.25, -0.12] +a0, _ = arma(slags, nlags, pivot[::l], plot=False) +a0 = np.repeat(a0,l) -s0 = f0 + a0 +l = 2 +slags = [0.2, -0.03] +nlags = [-0.15, -0.2, 0.1] +a1, _ = arma(slags, nlags, pivot[::l], plot=False) +a1 = np.repeat(a1,l) -# macroStep 1 -amps = [4, 21, 7, 35] -periods = [75, 125, 250, 500] -phases = [0, np.pi/4, np.pi/2, np.pi] -intercept = 42 -f1 = fourier(amps, periods, phases, pivot, mean=intercept) +year0 += f +year0 += a0 +year0 += a1 -slags = [0.4, 0.2] -nlags = [0.3, 0.2, 0.1] -a1, _ = arma(slags, nlags, pivot, plot=False) +# YEAR 0 signal +year1 = np.zeros(len(pivot)) +phases = [np.pi/3, np.pi/4] +intercept = 5 +f = fourier(amps, periods, phases, pivot, mean=intercept) -s1 = f1 + a1 +l = 1 +slags = [0.15, 0.03] +nlags = [-0.15, -0.2, 0.1] +a0, _ = arma(slags, nlags, pivot[::l], plot=False) +a0 = np.repeat(a0,l) + +l = 2 +slags = [-0.05, 0.2] +nlags = [0.05, 0.25, -0.12] +a1, _ = arma(slags, nlags, pivot[::l], plot=False) +a1 = np.repeat(a1,l) + +year1 += f +year1 += a0 +year1 += a1 if plot: import matplotlib.pyplot as plt fig, ax = plt.subplots() - ax.plot(pivot, s0, '.-', label='0') - ax.plot(pivot, s1, '.-', label='1') + ax.plot(pivot, year0, '.-', label='0') + ax.plot(pivot, year1, '.-', label='1') ax.legend() plt.show() # Write signals to file using pandas DataFrames -df0 = pd.DataFrame({'seconds': pivot, 'signal0': s0}) -df0.to_csv('multiYear_A.csv', index=False) +df0 = pd.DataFrame({'seconds': pivot, 'signal': year0}) +df_filepath = path.join(dirname, 'multiYear_A.csv') +df0.to_csv(df_filepath, index=False) # Write signals to file using pandas DataFrames -df1 = pd.DataFrame({'seconds': pivot, 'signal0': s1}) -df1.to_csv('multiYear_B.csv', index=False) +df1 = pd.DataFrame({'seconds': pivot, 'signal': year1}) +df_filepath = path.join(dirname, 'multiYear_B.csv') +df1.to_csv(df_filepath, index=False) # Create pointer CSV file pointer = pd.DataFrame({ 'scaling': [1, 1], - 'macro': [1, 2], # interpolation still needed... ? + 'macro': [1, 2], # interpolation still needed... ? 'filename': ['multiYear_A.csv', 'multiYear_B.csv'] }) -pointer.to_csv('multiYear.csv', index=False) +pointer_filepath = path.join(dirname, 'multiYear.csv') +pointer.to_csv(pointer_filepath, index=False) diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateSimple.py b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateSimple.py index 938bd9a252..bef7d9c5fc 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateSimple.py +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/generateSimple.py @@ -12,55 +12,119 @@ # See the License for the specific language governing permissions and # limitations under the License. """ - Generates training data in the form of Fourier signals. + Generates training data for a FilterBank multiresolution test, applying Fourier signals and + ARMA-style signals at different resolutions. """ import numpy as np import pandas as pd -from generators import fourier, arma, toFile +import os.path as path +from generators import fourier, arma -plot = True +plot = False -pivot = np.arange(100) +dirname = path.dirname(path.abspath(__file__)) -amps = [8, 10, 12] -periods = [12.5, 25, 50] -phases = [0, np.pi/4, np.pi] -intercept = 42 +# using a signal with length 2**j where j is a positive integer +pivot = np.arange(0,2**8) +signal0 = np.zeros(len(pivot)) +signal1 = np.zeros(len(pivot)) + +# adding sinusoidal trend for *one* signal +amps = [ 15, 5] +periods = [ 12, 20] +phases = [np.pi, np.pi/3] +intercept = 10 f = fourier(amps, periods, phases, pivot, mean=intercept) -slags = [0.4, 0.2] -nlags = [0.3, 0.2, 0.1] -a0, _ = arma(slags, nlags, pivot, plot=False) -slags = [0.5, 0.3] -nlags = [0.1, 0.05, 0.01] -a1, _ = arma(slags, nlags, pivot, plot=False) +# adding ARMA-style noise with different resolutions for both signals +## SIGNAL0 with P=1 and Q=1 +l = 1 +slags = [0.4] +nlags = [0.3] +a0, _ = arma(slags, nlags, pivot[::l], plot=False) +a0 = np.repeat(a0,l) + +l = 2 +slags = [-0.5] +nlags = [0.1] +a1, _ = arma(slags, nlags, pivot[::l], plot=False) +a1 = np.repeat(a1,l) + +l = 4 +slags = [0.1] +nlags = [-0.25] +a2, _ = arma(slags, nlags, pivot[::l], plot=False) +a2 = np.repeat(a2,l) + +l = 8 +slags = [-0.4] +nlags = [0.15] +a3, _ = arma(slags, nlags, pivot[::l], plot=False) +a3 = np.repeat(a3,l) + +signal0 += f +signal0 += a0 +signal0 += a1 +signal0 += a2 +signal0 += a3 -s0 = f + a0 -s1 = f + a1 +# adding ARMA-style noise with different resolutions for both signals +## SIGNAL1 with P=1 and Q=2 +l = 1 +slags = [0.4] +nlags = [0.3, 0.2] +a0, _ = arma(slags, nlags, pivot[::l], plot=False) +a0 = np.repeat(a0,l) + +l = 2 +slags = [-0.5] +nlags = [0.1, -0.05] +a1, _ = arma(slags, nlags, pivot[::l], plot=False) +a1 = np.repeat(a1,l) + +l = 4 +slags = [0.1] +nlags = [-0.25, 0.3] +a2, _ = arma(slags, nlags, pivot[::l], plot=False) +a2 = np.repeat(a2,l) + +l = 8 +slags = [-0.4] +nlags = [0.15, 0.2] +a3, _ = arma(slags, nlags, pivot[::l], plot=False) +a3 = np.repeat(a3,l) + +# no fourier +signal1 += a0 +signal1 += a1 +signal1 += a2 +signal1 += a3 if plot: import matplotlib.pyplot as plt fig, ax = plt.subplots() - ax.plot(pivot, s0, '.-', label='0') - ax.plot(pivot, s1, '.-', label='1') + ax.plot(pivot, signal0, '.-', label='0') + ax.plot(pivot, signal1, '.-', label='1') ax.legend() plt.show() - out = np.zeros((len(pivot), 3)) out[:, 0] = pivot -out[:, 1] = s0 -out[:, 2] = s1 -# toFile(out, 'simpleMR') +out[:, 1] = signal0 +out[:, 2] = signal1 # Write signals to file using pandas DataFrames -df = pd.DataFrame({'pivot': out[:, 0], 'signal0': out[:, 1], 'signal1': out[:, 2]}) -df.to_csv('simpleMR_A.csv', index=False) +df = pd.DataFrame.from_dict({'pivot': out[:, 0], + 'signal0': out[:, 1], + 'signal1': out[:, 2]}) +df_filepath = path.join(dirname, 'simpleMR_A.csv') +df.to_csv(df_filepath, index=False) # Create pointer CSV file -pointer = pd.DataFrame({ +pointer = pd.DataFrame.from_dict({ 'scaling': [1], - 'macro': [1], + 'macro': [1], 'filename': ['simpleMR_A.csv'] }) -pointer.to_csv('simpleMR.csv', index=False) +pointer_filepath = path.join(dirname, 'simpleMR.csv') +pointer.to_csv(pointer_filepath, index=False) diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_A.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_A.csv index dc2539e57d..33ef3fbc64 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_A.csv +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_A.csv @@ -1,1001 +1,65 @@ -seconds,signal0 -0,57.81899776669288 -1,59.13990758389636 -2,61.27831359357931 -3,62.13380462685008 -4,62.640258129340666 -5,63.76028166343178 -6,66.8946372551312 -7,68.81090836747354 -8,68.01734550887221 -9,69.47041262564355 -10,70.39793575520811 -11,71.81851739436533 -12,71.32479466800038 -13,71.72207708548926 -14,70.86568059747357 -15,72.20307303395404 -16,72.20598410620468 -17,72.4224681156842 -18,73.19680646760851 -19,73.47400972134395 -20,72.27208403723579 -21,70.71314793148954 -22,71.37711356252737 -23,72.48137631311945 -24,72.5059562706679 -25,69.70397358946784 -26,68.57279632675208 -27,67.32539724455428 -28,66.00381366445738 -29,63.534196185323424 -30,61.8578300760367 -31,59.6099975342195 -32,58.404095498876856 -33,55.528894913441746 -34,53.33525527406068 -35,53.12983876705282 -36,49.23115915145355 -37,47.68288968413333 -38,44.9475132836835 -39,43.21758915557816 -40,42.768738043419056 -41,39.34465509403313 -42,37.820931312200564 -43,34.14888589439058 -44,33.639937268804196 -45,31.598837493434484 -46,30.431104290548674 -47,29.17913238285689 -48,28.050208662753548 -49,27.668825389763025 -50,25.622680668333455 -51,23.171313423568915 -52,21.43188823039244 -53,17.69351864280113 -54,18.645517362167787 -55,18.702870294681173 -56,16.427611050403392 -57,16.252750980863322 -58,14.363263255500298 -59,12.926982185889063 -60,12.366002712035963 -61,11.511610821105853 -62,10.98846816651676 -63,11.683627167691073 -64,12.112536368284424 -65,12.827817114872456 -66,13.325615390719955 -67,13.022599386876237 -68,13.894741773730809 -69,15.144287249653456 -70,17.4157645006972 -71,19.20209498689093 -72,17.610102965105384 -73,19.61662481027057 -74,20.276189267996205 -75,20.5970088555505 -76,22.84312553333938 -77,23.679542310411513 -78,23.464387156984454 -79,25.185486862944927 -80,26.157730066560358 -81,26.669135423412705 -82,26.0163476494054 -83,27.478871727702426 -84,28.93383309902923 -85,29.32128198818592 -86,29.42561535862524 -87,29.11799560385353 -88,29.649162222741694 -89,29.744417545380948 -90,29.968595568020415 -91,30.144391966952984 -92,32.441909217660886 -93,32.54498089666956 -94,34.43459890360567 -95,34.314940703623456 -96,32.20664304462714 -97,33.863272587806335 -98,33.271654998675984 -99,34.15649543048618 -100,33.57007001229996 -101,34.47745171188709 -102,33.45287340792191 -103,31.83818357681687 -104,32.34143088771855 -105,30.12148248837382 -106,28.821412295428107 -107,28.63252297099721 -108,28.778012805258555 -109,27.08139771710192 -110,26.190285078005633 -111,24.338979446565418 -112,22.677117916210996 -113,21.318863328514297 -114,20.722757838932424 -115,19.403496932304833 -116,18.471045946693604 -117,16.688224893939818 -118,15.741028912021305 -119,15.938735536783586 -120,16.627885763072733 -121,14.865456596245354 -122,14.692973966876902 -123,13.355188702640175 -124,14.334857900826009 -125,13.285221816189791 -126,12.811043438704713 -127,10.48431939401527 -128,11.096659826931981 -129,11.487694493118532 -130,10.735201402942335 -131,12.647669301698041 -132,11.738686612112062 -133,13.157476861050426 -134,14.869848464111687 -135,14.861375524411102 -136,15.117186076091052 -137,15.518635385674555 -138,14.881968073200866 -139,17.289987413776128 -140,16.99452602847992 -141,20.798275493993554 -142,23.95394731623487 -143,24.588561394579067 -144,25.03315565692344 -145,25.850964712886874 -146,26.05541297985865 -147,26.202621925647705 -148,27.76278845970168 -149,29.05281900030888 -150,31.88282582965413 -151,32.42351787756815 -152,32.38841924742587 -153,33.31794425122471 -154,33.78094336533864 -155,35.07336318130308 -156,36.88594878085203 -157,37.507256750977994 -158,39.74133143546888 -159,40.20274033741006 -160,40.02659839675519 -161,41.05879953266343 -162,39.61296461541578 -163,42.96267622201327 -164,42.03122655977471 -165,43.75003150320887 -166,43.65879089719783 -167,42.31358227766298 -168,42.67714900339352 -169,42.06064677124381 -170,42.85869050779864 -171,43.383775893996486 -172,42.46608698140631 -173,41.892256134658325 -174,43.84414734655787 -175,43.20835183214585 -176,41.596342998229304 -177,40.0642243598548 -178,40.01149830883789 -179,38.70631094861925 -180,37.88865220226474 -181,35.88745270844263 -182,34.692534532268866 -183,34.93207936185532 -184,33.42488323364679 -185,32.31429315591642 -186,30.5133871032071 -187,29.51962762048128 -188,27.594435505159254 -189,25.580184627871322 -190,24.79455361545425 -191,23.338653283864733 -192,23.33156985096987 -193,22.6034715710189 -194,21.11158622053679 -195,18.68942605888965 -196,17.134122775585716 -197,15.685636954720778 -198,15.90791934559375 -199,13.423044528043576 -200,14.092467609207194 -201,15.554208946269062 -202,16.29219652304149 -203,18.642697586616006 -204,19.046166099513574 -205,18.783706164232868 -206,18.784206223267834 -207,19.294236945608525 -208,19.273553959654965 -209,20.319743744320586 -210,19.808283270305317 -211,21.08283259522436 -212,20.256441279814602 -213,23.3928700126851 -214,23.31805594043369 -215,24.074640149907296 -216,25.48099226132587 -217,24.76809924291321 -218,30.308890736219233 -219,33.197850714113244 -220,34.95144098708333 -221,36.614420917492936 -222,37.79950591920877 -223,40.17615360813576 -224,42.25010477448099 -225,42.31143242312828 -226,45.39451934728234 -227,48.071326394817966 -228,51.43638108985376 -229,52.58447595539907 -230,55.64180002872166 -231,56.13491682198741 -232,56.69938860408802 -233,58.164293968838464 -234,60.13142292498625 -235,61.299584530022 -236,63.27668942867603 -237,65.85168319053756 -238,66.75423981418966 -239,67.12007205519984 -240,67.08831111786343 -241,64.90333853783069 -242,67.73786112767888 -243,67.03231661293063 -244,69.67724704682712 -245,69.29711893764318 -246,69.19766022492647 -247,70.98745024529707 -248,70.47668637136013 -249,71.55803110538127 -250,71.29513977661081 -251,70.91371323351129 -252,71.85435654589173 -253,72.90853966236634 -254,72.5796983940203 -255,70.45286529526261 -256,69.74777492047623 -257,67.51171420317927 -258,66.88430931027845 -259,65.63437648982045 -260,64.47893220843095 -261,61.99194730648263 -262,58.416129983158974 -263,57.33453626773019 -264,56.98949719748788 -265,56.89535618686111 -266,54.306021015393526 -267,53.93029058037181 -268,52.738251655751995 -269,51.7638747270557 -270,50.29680283879507 -271,50.64501970796996 -272,48.568756588657756 -273,48.697731849053675 -274,47.834884866223504 -275,45.792655044799275 -276,46.847711391252076 -277,46.267988533071566 -278,45.23526723107164 -279,44.316972815615124 -280,42.50909075773537 -281,41.6395032065956 -282,41.05523067825858 -283,43.06648007909329 -284,42.78630831227847 -285,42.02903454966055 -286,42.890352859562064 -287,43.16990251210732 -288,43.59179644888835 -289,44.50776837762726 -290,44.83873851970673 -291,44.24332163915227 -292,46.39520490635757 -293,46.62440916573112 -294,47.41907129381223 -295,47.83065971281858 -296,47.8175869973083 -297,48.990317289634795 -298,50.15718890814669 -299,49.66760069572238 -300,51.94824096732222 -301,51.5453030433555 -302,52.715195097874116 -303,52.52017495170115 -304,54.7678309026126 -305,56.302758601610435 -306,54.218376422808916 -307,54.582610186972786 -308,54.54896397153316 -309,57.22462396433014 -310,56.29894868848543 -311,55.40320459109372 -312,54.86235301038476 -313,54.632838953499224 -314,56.10847204994236 -315,56.53389815779131 -316,59.143807174503124 -317,58.125588511234604 -318,57.479423282251446 -319,58.0698570909914 -320,56.25700544099858 -321,55.53404375237373 -322,54.93963558117109 -323,53.218025257347186 -324,53.508393821940345 -325,52.39298902815885 -326,53.47432504861781 -327,51.63311603635163 -328,51.8069011853541 -329,49.741755534739376 -330,49.22679364802262 -331,46.08839117612907 -332,45.25118416207586 -333,45.12306769866725 -334,43.49517268080141 -335,43.80115845055162 -336,43.05602151332928 -337,43.42034815540054 -338,39.98484621770071 -339,37.357858888407314 -340,36.72508845083014 -341,35.06000314857533 -342,33.776844931085705 -343,32.06104891155521 -344,30.113741004228572 -345,30.273959789077125 -346,29.620080467378756 -347,29.439258137393033 -348,30.669317699586593 -349,28.783410894113295 -350,28.007475706347236 -351,27.653830673475916 -352,25.710104631902333 -353,26.43799785749069 -354,26.466117946134936 -355,26.01045680751805 -356,27.052423302992317 -357,27.571606178680423 -358,26.617568928691924 -359,27.3252344135665 -360,28.754825062674605 -361,30.50146741721465 -362,31.94300429788376 -363,31.731610636485854 -364,33.649239287834526 -365,34.2945136018227 -366,35.58434666584799 -367,36.648332316321856 -368,37.29944340562893 -369,38.74374095305159 -370,40.27417418339603 -371,42.04665328544369 -372,43.04487886396414 -373,45.41276955212273 -374,46.16262704615082 -375,48.70441474544936 -376,49.133057883801534 -377,50.968389661245915 -378,51.61062165804356 -379,55.05366413442295 -380,57.281827256912486 -381,60.87954407596834 -382,62.29913239341898 -383,65.3656379298127 -384,63.745138015907436 -385,64.95297019932016 -386,64.14023547818454 -387,64.28475388424293 -388,64.14844952346398 -389,65.81172902075248 -390,68.1958256417212 -391,68.70142653440391 -392,66.21620633059027 -393,69.09911372209712 -394,68.21619051754534 -395,68.92609274689023 -396,68.3335905350062 -397,69.17262323783042 -398,67.23738767727222 -399,67.55682393477551 -400,65.80806169992083 -401,63.808953179123314 -402,64.08395793971609 -403,64.04321998088932 -404,62.70898253198974 -405,60.437722688865215 -406,60.333697782949855 -407,58.286651154255885 -408,55.97115982678614 -409,54.705889319359514 -410,52.80499136948846 -411,51.971031750071106 -412,51.20471054666633 -413,49.74307866943322 -414,47.014122749670385 -415,45.388047629857695 -416,42.709400860627746 -417,42.279409583355005 -418,39.68050939817783 -419,39.80007120309844 -420,38.57026808267072 -421,36.46834131157299 -422,35.909469635270156 -423,35.89500310081805 -424,34.443338788379805 -425,32.32111612826737 -426,33.66090958413107 -427,31.809554197336563 -428,31.340711463559575 -429,31.075545066870877 -430,30.993652503764917 -431,30.35379199269262 -432,29.409854497439344 -433,30.998313789479564 -434,29.701554241882928 -435,31.740115666009412 -436,32.81728519616976 -437,34.31066722551337 -438,35.492390922324624 -439,34.921972937430795 -440,36.592992738266254 -441,37.42745920646574 -442,36.69262380773162 -443,36.99412852419904 -444,37.42678226916263 -445,36.876914725148296 -446,38.53766847481675 -447,39.49450371612671 -448,40.19160400798029 -449,41.541457552178905 -450,42.68307601120251 -451,43.46618120148691 -452,46.00961021638302 -453,48.912439052522416 -454,50.65455715496705 -455,51.01676000459167 -456,51.683789593126306 -457,51.30550570072657 -458,52.590694928127206 -459,52.14973299219796 -460,53.52770766103008 -461,56.166074105980044 -462,59.68153009344208 -463,59.058304834966066 -464,61.36101165294339 -465,63.453244502058276 -466,62.61891208549237 -467,63.99119133162163 -468,63.0915141613539 -469,61.8605959361305 -470,62.51292714841349 -471,62.259302126134976 -472,62.589892310153594 -473,61.49073096621252 -474,62.02077831234671 -475,63.10234749028279 -476,62.57199307049899 -477,63.27428185532724 -478,62.883637945131596 -479,63.13759058375403 -480,62.286505848679745 -481,63.092451975757314 -482,61.87920718690047 -483,60.8192402638415 -484,58.96289747072048 -485,56.98998245180455 -486,54.85465406771198 -487,54.16426305650128 -488,52.98108811207225 -489,51.489908940612324 -490,52.23491458340672 -491,52.33826126269341 -492,49.95714973557811 -493,49.688331610796595 -494,47.75322251431553 -495,47.424995840514704 -496,46.851274924425255 -497,46.95337392596784 -498,45.096223488939394 -499,43.76391985967452 -500,43.122889592836195 -501,42.41862263969669 -502,41.83018220558818 -503,41.10792407842204 -504,39.78261669196542 -505,40.70806648619596 -506,39.42826891670669 -507,39.468130173947884 -508,41.8213352924532 -509,41.85398312752822 -510,43.772637842573424 -511,44.24897012572015 -512,44.905637743875225 -513,44.63047265120654 -514,46.25619340889789 -515,45.83880668863099 -516,46.16232385070821 -517,45.65249217157978 -518,45.966139677700696 -519,47.00793785252999 -520,45.51597283329695 -521,47.79456243073306 -522,49.33669315373317 -523,50.53030906992622 -524,49.64786731987338 -525,51.079076354454905 -526,52.12996667575539 -527,53.568872121720986 -528,54.706526484317095 -529,54.31575807167726 -530,56.09801847446807 -531,54.34154739093603 -532,55.73456937874065 -533,58.586054741900604 -534,57.418903073273114 -535,59.16498971658114 -536,58.453927812545295 -537,59.389679214230284 -538,60.74639495615966 -539,59.12954851291943 -540,60.11669853621553 -541,59.37569940514202 -542,60.665622538949656 -543,59.83886398622178 -544,58.232960837079744 -545,56.79428736667438 -546,55.58333941328196 -547,54.055901505208645 -548,51.98480830598506 -549,50.34393515612207 -550,48.65638802583765 -551,48.699983741193826 -552,47.850327940528466 -553,47.28261466677164 -554,45.6881750054749 -555,45.04652816113773 -556,42.484724549396155 -557,39.51338783406814 -558,37.489249482259304 -559,34.93295898510795 -560,31.68493859478566 -561,29.52117843278455 -562,28.998667741479544 -563,26.24327186640796 -564,25.182908723557976 -565,23.83167285503729 -566,22.48486204804622 -567,19.390535477439954 -568,16.605371385741737 -569,16.064706996297655 -570,13.21685481330651 -571,12.221969751551102 -572,9.24655099324482 -573,7.882054776482628 -574,6.279243004932493 -575,4.307849095541425 -576,4.069700064433425 -577,3.899687055339704 -578,2.8789553932348912 -579,2.8036297843311235 -580,1.3714683264173821 -581,2.1515459066204574 -582,1.2090468373414283 -583,2.1794851377566276 -584,3.0199224935750695 -585,3.343563660762519 -586,3.2831209190949773 -587,4.66095684712494 -588,7.252327336196796 -589,6.654604577268779 -590,8.159991214328684 -591,9.1842735198759 -592,10.204372808748124 -593,12.782844290990663 -594,13.56389017370449 -595,14.01415082339864 -596,14.247703108736378 -597,14.114366857585834 -598,14.718541778433599 -599,16.600493557796856 -600,18.214184062247725 -601,21.200472403208128 -602,23.03513304281695 -603,24.19296657021578 -604,25.3799672124941 -605,28.244023737987256 -606,28.154530361042024 -607,28.247950389034205 -608,29.021131595720558 -609,29.824565666321917 -610,32.10829162664269 -611,33.41007710695252 -612,34.32545893645042 -613,35.2645861318572 -614,34.48260199732039 -615,36.262860154585695 -616,36.25339449087767 -617,37.22740008834101 -618,39.601345677566684 -619,39.38952682247026 -620,40.00197640296666 -621,39.78249985539615 -622,37.73009219591359 -623,37.651743072578476 -624,37.83488087855166 -625,38.55219165551753 -626,40.19382549451572 -627,39.855383750697975 -628,40.130515740615145 -629,37.98547041101619 -630,36.288890895561636 -631,34.89465871148005 -632,33.792499775418605 -633,33.01282905824574 -634,33.35981381135301 -635,31.713173564584334 -636,30.974466326943013 -637,30.461827827999166 -638,29.17381728653146 -639,26.76858334723667 -640,26.331757411154722 -641,25.327794285483193 -642,23.34033392698619 -643,23.688793456135055 -644,22.99174223749898 -645,21.579447820974895 -646,19.936927464053603 -647,17.749033365071217 -648,16.29372411238947 -649,13.994875796785765 -650,15.34365369643536 -651,14.32668465776785 -652,13.472136993229602 -653,13.83787431570741 -654,12.939022330155913 -655,10.492845395908319 -656,11.44372020761232 -657,12.424248467210056 -658,11.53353791446461 -659,11.66005097926149 -660,13.650450594224857 -661,13.07060763970327 -662,13.874941162216743 -663,15.216277197085857 -664,14.89780918131565 -665,16.75802740617964 -666,17.9556641377883 -667,17.970510370048515 -668,20.43899891061569 -669,20.738769443893332 -670,22.321462246715637 -671,22.285962222220075 -672,24.178527476460324 -673,25.22875306460776 -674,26.073319873364177 -675,28.156178565889732 -676,29.793974714035546 -677,30.898990418353904 -678,32.38808397983571 -679,35.28013537234593 -680,35.40242364183428 -681,38.34002627930111 -682,38.594504855856556 -683,40.303709147091624 -684,40.768419821151 -685,42.027994466570355 -686,42.16751880513993 -687,42.30563271984188 -688,42.206399935118924 -689,43.11904629429545 -690,44.908787553058836 -691,47.39239802705282 -692,46.791568880846086 -693,46.68260457020066 -694,47.60618883588457 -695,46.83001951431744 -696,46.88726738161585 -697,47.0796255964297 -698,47.72807799022464 -699,46.6335689022264 -700,44.887078242378934 -701,45.45051095792362 -702,44.75502771005168 -703,43.48348318763176 -704,41.83226728115632 -705,41.24929256245298 -706,40.145209554894734 -707,42.28221933161746 -708,41.46681601470775 -709,40.58831326474953 -710,40.20867317934636 -711,40.08451293463759 -712,38.91706180552319 -713,37.31977709864575 -714,36.50747384045358 -715,36.5197118451318 -716,34.81735490523334 -717,34.00632929132284 -718,33.74471506758785 -719,31.630256089043993 -720,28.615786416071174 -721,28.227338272422067 -722,27.52609780807154 -723,27.528305266109136 -724,26.343722790291636 -725,26.791835801050986 -726,27.299334482043054 -727,27.25241685775534 -728,27.57816207282525 -729,28.025434362039583 -730,30.05445374197473 -731,30.538309862659325 -732,31.773894883990657 -733,31.753183625012756 -734,34.124374359062735 -735,35.703312457142175 -736,36.05566956870303 -737,36.84057519579369 -738,38.27150081342709 -739,39.120194840864755 -740,42.6847029765618 -741,42.72459835057222 -742,44.36087017095057 -743,47.166210540436566 -744,47.929552951782924 -745,50.311531850875085 -746,51.380741110080976 -747,51.970302855061256 -748,54.48500595233055 -749,56.03459222599023 -750,59.2914405981453 -751,61.2191292827911 -752,61.18267693876045 -753,63.297201313270826 -754,65.09387355669195 -755,66.58241530487531 -756,67.29395391220916 -757,68.27331795289098 -758,69.09785694053154 -759,68.86827083083648 -760,72.5341399211318 -761,73.59042155276019 -762,75.3242236384344 -763,76.70052833496554 -764,76.9784617328335 -765,77.69914533226499 -766,77.28459984172595 -767,78.13568508340374 -768,77.25403113353057 -769,78.58790050033966 -770,77.86389289992125 -771,77.551552790928 -772,78.89041624537074 -773,77.368014861428 -774,75.95247099078826 -775,75.02400176173603 -776,75.15442679677227 -777,72.19032084009994 -778,71.94558026448493 -779,69.80004026581669 -780,68.62845343111279 -781,68.40655565325788 -782,67.14849595843101 -783,64.78768638088243 -784,63.72505487088347 -785,61.29576275501938 -786,59.44651964093186 -787,57.193382124826336 -788,55.74849241517516 -789,53.40644696024331 -790,49.93070096324293 -791,48.58266872424532 -792,46.394214771086205 -793,45.09492939901422 -794,43.48186471596553 -795,42.24836125897698 -796,42.58380816472533 -797,40.7457571880749 -798,38.93811025636843 -799,36.794369633330234 -800,37.174273269625274 -801,36.278598459016614 -802,35.33356777670722 -803,33.919340196307395 -804,33.50642767786712 -805,31.799683104684892 -806,31.294421537371694 -807,31.322956156682697 -808,32.583665197108225 -809,31.82931516180921 -810,32.54837234951759 -811,30.658473154923836 -812,31.68512290532521 -813,30.90999874668413 -814,30.518689439262424 -815,28.17306021630333 -816,28.89671807571428 -817,29.73836117712768 -818,32.20554207920942 -819,33.64698633675972 -820,34.09417690904721 -821,35.126652695630014 -822,36.26279086097436 -823,37.17196564579941 -824,37.525203564356566 -825,41.88084177042826 -826,41.76662761797989 -827,45.352838528481136 -828,44.98779834081521 -829,46.66378785944776 -830,47.33283471933215 -831,47.67701303919941 -832,46.804495035763395 -833,49.370457155896005 -834,52.72446435024526 -835,53.15192618511944 -836,54.7104118251901 -837,56.46763008655412 -838,56.79166026391765 -839,55.82729374550957 -840,56.84548152343348 -841,55.754890970993 -842,57.454864921789635 -843,56.48361306614549 -844,56.5674994748103 -845,55.31042612109549 -846,56.317518878925554 -847,55.807762343632824 -848,54.0126029738587 -849,56.21879166848082 -850,56.0615404793604 -851,55.060984624924174 -852,54.61542555392522 -853,53.80667282561726 -854,51.621225745384336 -855,51.762500493432334 -856,51.393282782615294 -857,50.384346930117076 -858,48.93945295849444 -859,49.27954776698433 -860,49.00948051803576 -861,47.69739043434873 -862,46.74609262484516 -863,46.064498333346215 -864,45.18678736394122 -865,44.57888320611168 -866,44.06497484557091 -867,42.160523350663986 -868,40.374576304065805 -869,39.907787894443615 -870,38.70408353201953 -871,37.404980105342275 -872,37.54185464905945 -873,37.80229260488892 -874,35.396288742205435 -875,36.10884584565608 -876,32.85289014131231 -877,32.07077246887178 -878,30.9737579699961 -879,32.77758270120929 -880,32.895372252989254 -881,33.92990279440597 -882,35.22622839844752 -883,35.05292802052381 -884,36.92317065877576 -885,37.01823083136245 -886,37.634147914685144 -887,39.305440099753895 -888,40.067744069381135 -889,42.24950895955691 -890,43.76313312062902 -891,44.65801350921793 -892,45.606405970645106 -893,46.789964858492525 -894,47.33659105864271 -895,47.44116333227598 -896,48.26883534870733 -897,48.311549101671204 -898,48.32463695222937 -899,48.43945089179804 -900,50.21854836244147 -901,52.74267970948159 -902,54.78425582305929 -903,55.706483328603504 -904,56.76693706812109 -905,59.96541997235289 -906,59.48274275675041 -907,59.98456138063452 -908,61.44621151848407 -909,62.26254946733319 -910,61.69199835867175 -911,62.769672754532266 -912,62.75054737470876 -913,62.96156806328422 -914,65.21871267844614 -915,65.66807859066074 -916,68.63765967666369 -917,68.11041386786859 -918,67.0298605411741 -919,65.63244402827586 -920,64.78010216068228 -921,64.16346251384572 -922,60.44033569820286 -923,61.041209772972806 -924,61.37091203349384 -925,60.925465605366725 -926,61.096652783348 -927,60.19444622976019 -928,58.65043759269266 -929,59.0074666537757 -930,56.67436211093873 -931,55.0889237558626 -932,54.97937782212058 -933,51.70751186095854 -934,50.67694234587863 -935,48.78932281282962 -936,47.36384935446708 -937,45.485086613083254 -938,45.44995969600738 -939,41.75943393780042 -940,40.743076947085726 -941,40.70819867565805 -942,39.15321989346676 -943,36.64479914302059 -944,37.12276344610236 -945,36.65668029238404 -946,36.33566256336408 -947,35.27134628194422 -948,34.12670278699067 -949,33.09968959088831 -950,31.807164700554004 -951,30.58413260291546 -952,31.04269317163896 -953,31.13124916078982 -954,29.255157671840184 -955,28.924399461916703 -956,25.933630887290413 -957,25.23011597080444 -958,27.604141010193256 -959,28.26227189708625 -960,30.355473658564303 -961,31.354781916580592 -962,32.84462510412085 -963,33.43836392391318 -964,33.220122670174355 -965,36.70181586449875 -966,35.689730595474416 -967,39.75820758065038 -968,38.79971249953343 -969,39.201492334039614 -970,42.496996566166644 -971,46.29594379996286 -972,48.45071040442347 -973,49.821231387963365 -974,53.13354487715293 -975,52.640804563836305 -976,56.100137424653546 -977,56.26255275723104 -978,56.204923122100155 -979,57.35309395825719 -980,57.971453451661624 -981,59.53210394560632 -982,60.26848153775481 -983,62.433970571964636 -984,65.71539637505956 -985,67.11080583259128 -986,69.21576760121175 -987,69.98399103108457 -988,71.33114508485946 -989,70.52646191663446 -990,72.60052363400773 -991,73.21529791710599 -992,73.04641872507274 -993,73.84451688735133 -994,73.33083315245418 -995,74.0659468126267 -996,74.29871760080681 -997,73.0315540649724 -998,71.66114726362149 -999,71.3136974581177 +seconds,signal +0,27.65043185945467 +1,28.50016566342561 +2,12.796420761686347 +3,1.5905933310296962 +4,2.4833400285756806 +5,-1.3768353041458947 +6,-20.050562779814783 +7,-24.189600505270587 +8,-11.774124981834504 +9,-4.590839660607696 +10,-11.936153241080005 +11,-5.719349268775893 +12,13.978209072417084 +13,22.98146709799195 +14,19.355080782161664 +15,16.07552648477538 +16,28.035509008637355 +17,24.13960180138136 +18,7.758316592444558 +19,-4.8174593657676406 +20,-1.9541482953047704 +21,-7.272310653729238 +22,-21.673906210337556 +23,-25.70940923117392 +24,-11.063924662544766 +25,-1.82444441623274 +26,-1.9480391693346877 +27,1.5311295446250495 +28,20.22522077092837 +29,27.39202582471461 +30,19.73178141579789 +31,14.656380065894933 +32,21.00505911801326 +33,15.262787903778444 +34,-1.554819207614118 +35,-13.658427667534747 +36,-7.0630327690859795 +37,-7.642417816715931 +38,-17.64703950010513 +39,-18.287808543471535 +40,-1.861134046612342 +41,6.877856142786712 +42,5.505508370474776 +43,10.584896771249783 +44,25.068302944096484 +45,29.623127383633108 +46,19.106969888269656 +47,11.33207454990867 +48,12.884566041857845 +49,7.58426589475179 +50,-10.75082775741204 +51,-20.784745413824076 +52,-11.744977557667848 +53,-9.59941800933135 +54,-15.11991370117545 +55,-16.370599754195634 +56,4.879539686637865 +57,15.898048304686757 +58,11.47847366446306 +59,16.50434903421937 +60,27.475294095979372 +61,29.853569281625525 +62,13.679768478626148 +63,4.271749763974935 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_B.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_B.csv index 678ca75250..1dd6fffd2a 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_B.csv +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/multiYear_B.csv @@ -1,1001 +1,65 @@ -seconds,signal0 -0,64.3788100701576 -1,63.305464852397435 -2,61.7194871317061 -3,62.29746310219582 -4,62.130464158584374 -5,62.33576703447582 -6,62.21610741050218 -7,61.61840901776225 -8,64.02431404137286 -9,65.9414405762248 -10,65.91535905491658 -11,66.61384185519307 -12,65.21916912487808 -13,64.92370537501279 -14,64.82179047012941 -15,63.964061132175196 -16,64.18567731898749 -17,63.66537979188672 -18,62.90869333233664 -19,61.98375610455514 -20,62.11848245367149 -21,60.607875598341984 -22,60.09841584624979 -23,59.81699735202108 -24,57.9377320686301 -25,58.136155491888026 -26,56.70056921303575 -27,54.41534640311674 -28,54.04242957093604 -29,52.74404502437292 -30,53.3666528139431 -31,51.405088845924325 -32,50.109038386692134 -33,48.97665031896081 -34,44.66816497893232 -35,41.32533653158878 -36,40.769360490566015 -37,39.05840833278703 -38,39.97430465806375 -39,39.06654146327853 -40,34.95951492769881 -41,33.22336274052594 -42,30.419021700348505 -43,28.46606700462773 -44,26.182216090491785 -45,26.1141902691676 -46,23.036613866016925 -47,21.666142621716755 -48,19.993191440239332 -49,19.181386707147038 -50,17.743632054264545 -51,18.37863692756317 -52,14.986329415819469 -53,15.629193659924487 -54,13.983055811866484 -55,11.392095253909575 -56,9.445926348809628 -57,5.129695061993423 -58,4.442199997392367 -59,2.8224255009310033 -60,1.014041630549907 -61,-0.7281070303985866 -62,-1.6933873450814956 -63,-1.9230914212334704 -64,-1.4002330723597765 -65,-3.4598147843633167 -66,-5.342282773597463 -67,-4.729881828678903 -68,-5.637164139425884 -69,-6.460990175052322 -70,-7.390922160730448 -71,-8.63476045607092 -72,-8.579207885406568 -73,-10.57866211253837 -74,-9.955106451777656 -75,-11.273449505516517 -76,-11.07300562579671 -77,-11.626649429703555 -78,-13.099595824836355 -79,-12.884558131895428 -80,-12.143287947923682 -81,-12.58607471006817 -82,-13.040384673788807 -83,-11.006141482611367 -84,-10.3411662424562 -85,-10.992001000134612 -86,-9.091984687780212 -87,-8.832097782639448 -88,-9.328424876267935 -89,-7.378344518548228 -90,-7.047778137224252 -91,-5.152648415327391 -92,-4.227052420571537 -93,-6.321421148054804 -94,-3.5584844686274195 -95,-4.899044088718021 -96,-3.2007225093191534 -97,-4.6607267691668754 -98,-2.924220141116845 -99,-2.581654486269348 -100,-2.0538126413589337 -101,-1.6701426974081968 -102,-1.6541642370533098 -103,-1.837277748526493 -104,-1.5321399925268744 -105,-0.49267434794078135 -106,-0.16033636516972027 -107,0.5057737892531528 -108,1.0381903224720626 -109,0.396456096859344 -110,-0.1333378827819005 -111,0.14005683745242292 -112,-0.1269939172117387 -113,2.3342953455262916 -114,3.3008537612759343 -115,4.116985725427192 -116,5.617944347483514 -117,6.517027947999358 -118,7.175597918424119 -119,8.236029171166953 -120,8.90296706153403 -121,9.003660310044793 -122,8.671971097090744 -123,9.667836328161288 -124,9.284092770949627 -125,7.985270627524306 -126,9.720501494186495 -127,10.63164421756819 -128,12.22682739736605 -129,13.12698231340929 -130,13.918559437583527 -131,15.353667677144552 -132,16.153668313332123 -133,15.11938788284894 -134,15.264467999484065 -135,15.389952558305476 -136,15.72526690061142 -137,16.723900792898174 -138,16.929147592608004 -139,17.535741755211475 -140,18.07374290832018 -141,18.706373705260514 -142,18.60729453514398 -143,17.55021415405335 -144,18.4184653762558 -145,17.01236420209063 -146,18.140215534003644 -147,18.989965378358242 -148,17.48362463680425 -149,19.210971371495617 -150,19.343638234851767 -151,20.418532625222735 -152,19.324631890686764 -153,19.385698993938064 -154,18.887307583620554 -155,18.171464701432676 -156,18.89455366401161 -157,19.221504813031252 -158,18.962864438133085 -159,20.22032411712217 -160,21.26298923392958 -161,22.34770130163729 -162,21.58572793812244 -163,20.39296750897129 -164,19.159720063109845 -165,19.941193524508222 -166,19.05622709649511 -167,19.484472957959298 -168,19.88782465766852 -169,17.006441521158088 -170,15.76145111386715 -171,14.822397663315312 -172,13.048136904771676 -173,14.513367179882511 -174,11.374778994021689 -175,10.786081328410205 -176,8.790773251386767 -177,8.66577504574575 -178,8.73560933866136 -179,8.301732052487028 -180,8.977337881115487 -181,8.450667799017255 -182,6.628343949719308 -183,6.221237976256467 -184,4.803402987680974 -185,4.775771792045356 -186,3.896373190593412 -187,4.4903676760679065 -188,4.091449126801524 -189,2.968107712970784 -190,2.802948018857567 -191,1.5703701293841903 -192,1.7008690378272713 -193,1.2900531257481536 -194,0.041600259090745384 -195,-0.901089778195038 -196,-1.8658392196349498 -197,-2.55048472709343 -198,-1.5121364372887696 -199,-0.47790003471532544 -200,-1.305611337700292 -201,-1.1548314927347327 -202,-1.494814875423624 -203,-0.4346950352918384 -204,0.6207123994330499 -205,-0.6135688916372495 -206,-2.390580392507358 -207,-2.030601746617359 -208,-1.1949752959720108 -209,0.5638042127184741 -210,1.220655797930302 -211,4.382168358057829 -212,6.402115298386688 -213,8.592752318539672 -214,9.530614505865724 -215,10.511610521920131 -216,12.341270085936342 -217,13.137706540655362 -218,15.781900527104236 -219,16.430631710507257 -220,19.77061630893087 -221,22.116443579143308 -222,22.952525965906194 -223,22.933862699711586 -224,24.274334987684725 -225,26.483934935536798 -226,29.62146638123258 -227,32.46892595424184 -228,34.510002435325156 -229,34.09857489977365 -230,35.57587954287975 -231,38.40570992568513 -232,39.94000329450884 -233,41.20630733151363 -234,43.641642250017476 -235,46.22595086384144 -236,46.63082372368573 -237,48.30931130349483 -238,48.708193216492454 -239,49.88220370129508 -240,51.805731933483564 -241,52.88499890389867 -242,54.67184031814286 -243,57.94835317293563 -244,59.58082021761684 -245,60.122751547531564 -246,61.30515763322347 -247,63.54359896824648 -248,64.30363548620424 -249,66.8286906184187 -250,66.59540700402658 -251,67.90656100584944 -252,68.85528348246011 -253,69.26409381946485 -254,68.59445179802012 -255,71.8792294434304 -256,72.62923125293551 -257,74.40905633140366 -258,75.02356280148264 -259,76.89079219173381 -260,76.35618650091325 -261,76.72085896640758 -262,76.49441854607545 -263,76.33787363827089 -264,75.40695430282426 -265,75.99579102754379 -266,75.4070043997009 -267,74.47107377266082 -268,74.72512629257128 -269,74.34513666037988 -270,74.12568758193316 -271,76.04443446127746 -272,76.01346137134057 -273,77.01522675913783 -274,76.45710760376437 -275,75.40864857046734 -276,76.11907508058754 -277,75.63831409990688 -278,75.15937897045805 -279,75.28824409400507 -280,72.35781332639134 -281,71.8398996635189 -282,68.73034845922372 -283,67.90829613064585 -284,65.65351918632649 -285,64.36395734898258 -286,66.91380816081451 -287,65.94895898916373 -288,67.38828586649508 -289,68.26518537572258 -290,66.66186204472899 -291,66.95362830147613 -292,65.82817247024303 -293,65.81849798063843 -294,66.54885167577416 -295,65.8003947692459 -296,63.14708467283183 -297,61.58523386714833 -298,61.32721652570219 -299,62.97957471188976 -300,63.567596530623746 -301,63.23840865979766 -302,62.95488441477431 -303,60.33349210678537 -304,59.460728409421925 -305,58.92992112758664 -306,59.185120062181895 -307,58.71917591172574 -308,57.03154372064393 -309,57.288786107598575 -310,55.977998870630934 -311,55.24220658710771 -312,55.24833170876931 -313,56.47699753982457 -314,55.930613747993895 -315,56.63351605892085 -316,57.20572056376551 -317,55.249791684133214 -318,54.55299268072292 -319,54.163443767572346 -320,52.50417730700486 -321,52.07768490104506 -322,51.61718548085837 -323,51.69622324950149 -324,51.983989071953005 -325,52.74777982797656 -326,51.764824888973216 -327,51.11913664490678 -328,51.09578026035805 -329,51.742526346573385 -330,51.129128093660974 -331,50.58991555209445 -332,49.68525520292186 -333,50.477508912385225 -334,50.244905874680754 -335,49.70455353242183 -336,50.46581643333269 -337,51.488761677793185 -338,49.22969187232803 -339,48.953698742453874 -340,48.86339761272331 -341,49.21462659195401 -342,50.78229070690018 -343,51.55119078807146 -344,52.117431888634975 -345,53.96195550360025 -346,53.13160220983179 -347,54.38290942673075 -348,55.513634676919025 -349,56.70085754829366 -350,56.12615102694596 -351,57.77760661356229 -352,58.39038232628437 -353,58.625816802411165 -354,58.99734513319523 -355,59.41911312069511 -356,59.73923907994024 -357,62.507106439081795 -358,62.96108802748713 -359,63.98334820713316 -360,65.43066558838436 -361,67.26919657531462 -362,67.66414931208963 -363,69.36573885910201 -364,72.48838893193266 -365,72.84454751696147 -366,72.73966528417931 -367,72.82516583128792 -368,76.08233826021063 -369,77.7978319305189 -370,80.18809700057517 -371,82.17028795563226 -372,83.32541562147625 -373,84.98679510225462 -374,85.50123272763383 -375,85.90078454579161 -376,86.4992319183496 -377,86.81421677565342 -378,86.66369450068272 -379,88.52075358964966 -380,89.43389874204729 -381,90.19859485146657 -382,90.66419177144807 -383,91.14499914202925 -384,89.86652959454075 -385,91.43960302625034 -386,92.58188876340076 -387,95.09657357143607 -388,95.6060959540443 -389,94.49930849269884 -390,95.7488773335077 -391,94.31225245087673 -392,93.03923164512186 -393,92.25373421092803 -394,91.75858632774614 -395,92.03506839820909 -396,91.72135489698098 -397,91.53464078375848 -398,90.82432640155126 -399,91.06321597250331 -400,92.07581878144198 -401,91.70367240125233 -402,89.01708759586957 -403,88.82660460841112 -404,88.18478663719118 -405,87.6586548177606 -406,86.50028497178187 -407,85.43728230422208 -408,85.73576427604384 -409,84.29841575031801 -410,82.33330518958094 -411,82.43781931468213 -412,81.18590172895435 -413,79.61483917241155 -414,76.02819289818012 -415,75.2134239300273 -416,72.4556734995769 -417,71.58076544756801 -418,69.65806463897236 -419,70.66788140241235 -420,69.92062729462933 -421,66.521675518245 -422,66.50374217978049 -423,65.62875530892441 -424,63.73015905068201 -425,62.23673637996325 -426,60.5146971668257 -427,59.02752383609155 -428,54.3494953439216 -429,55.28171142000755 -430,54.23104077905041 -431,54.897540395642636 -432,53.19878221999033 -433,50.620431637354045 -434,49.82574851249584 -435,49.19923922392319 -436,46.7125462693543 -437,47.3850194420897 -438,47.126185641047435 -439,47.65561925996885 -440,47.411783955598665 -441,46.41581504253164 -442,46.335973506137584 -443,46.49858996449073 -444,43.78422253857006 -445,45.61161184890475 -446,43.78714315595674 -447,44.37995566162409 -448,44.07293361427204 -449,44.33296316370861 -450,43.62642384935455 -451,43.30697443416231 -452,41.6589269801927 -453,43.18970605062608 -454,41.46455425041644 -455,44.60011572675329 -456,43.021336405364984 -457,42.42614458126573 -458,43.8498777205289 -459,44.501725392056194 -460,47.71384545110265 -461,47.79353918003594 -462,50.09389811989036 -463,48.69938236160968 -464,49.35904456282328 -465,50.46717132375378 -466,49.36222419354725 -467,50.50302320887902 -468,52.04445446639948 -469,52.10435051671568 -470,50.080446196023516 -471,50.4797485844668 -472,50.224134277133125 -473,51.54417782971975 -474,51.0315571503519 -475,52.536786741785235 -476,54.98501800565686 -477,54.32039154346508 -478,53.36614439754357 -479,54.55613660020384 -480,54.46761652674575 -481,54.56145686333937 -482,55.889309595412165 -483,54.575751415167574 -484,55.31954243546541 -485,56.8829947448482 -486,57.908811087216336 -487,58.553371071821786 -488,58.60293003649361 -489,59.120881364041026 -490,60.029138443154814 -491,56.69465847245426 -492,57.20107302938799 -493,58.8014952765815 -494,60.63095903958357 -495,60.4867891913082 -496,60.45407872246824 -497,61.97622528034705 -498,61.581077387714004 -499,60.13812819527251 -500,59.266999290534095 -501,61.303476224427975 -502,61.40241309947704 -503,61.65204442808669 -504,60.306938971168634 -505,60.900505492158594 -506,60.22417365413688 -507,60.63224106473937 -508,60.64435789492931 -509,60.31326902222032 -510,61.25674123194667 -511,62.749500043208876 -512,62.0804214498948 -513,60.84852513211894 -514,61.58553378301671 -515,60.1982707453823 -516,59.356801389414564 -517,60.72942108627963 -518,57.69011543142434 -519,57.10928118581674 -520,55.67788780568981 -521,57.09326150028421 -522,56.557376995460984 -523,58.60929898603701 -524,57.74968970910051 -525,57.61357574164517 -526,57.003298296036476 -527,55.287161144320656 -528,55.75250637758196 -529,52.6720818415903 -530,52.95178143216517 -531,51.90475586922974 -532,49.927323987364744 -533,48.35842569207996 -534,45.13008294470527 -535,43.522318655732434 -536,42.75520305614531 -537,39.749972407507805 -538,38.705576647099505 -539,38.710850970191395 -540,36.996842604643554 -541,37.247274772639884 -542,35.35833552671243 -543,34.015477487257975 -544,32.77361371740846 -545,31.37922799498958 -546,29.429999664643365 -547,28.34534973722792 -548,27.088169753533737 -549,26.71328516899832 -550,24.631733932208164 -551,24.73440745589031 -552,21.005981941468697 -553,19.045091869253255 -554,15.014935986936987 -555,14.171907389918614 -556,12.19764785424862 -557,9.540879710235513 -558,9.086467030950537 -559,7.284958865662867 -560,7.205176619683295 -561,6.636904527648557 -562,4.224773090354461 -563,2.4462709578236788 -564,0.47893392730860007 -565,-0.06692560021124372 -566,-2.5564383499837326 -567,-2.7139163917155193 -568,-5.621530183357523 -569,-7.323921117987412 -570,-10.082080963534708 -571,-10.11806366309139 -572,-13.232327206344227 -573,-12.732253829486258 -574,-12.472836709412082 -575,-12.827963894032893 -576,-15.229540859161606 -577,-16.216488855509585 -578,-16.96906855529713 -579,-18.51899317641393 -580,-18.744391988280963 -581,-17.54587384685209 -582,-17.326396009899046 -583,-16.577459416582908 -584,-16.511062828776712 -585,-16.822765527127398 -586,-15.985705686190922 -587,-16.09919356241559 -588,-15.697060464537794 -589,-15.447880831758733 -590,-14.908944543252339 -591,-14.536245853819524 -592,-13.944421641598208 -593,-13.680345392123536 -594,-13.160431892682755 -595,-13.090460363724013 -596,-12.77894992832439 -597,-11.964241148904822 -598,-9.18867336828109 -599,-7.155151509944622 -600,-7.214813089043139 -601,-3.925650137374279 -602,-3.6709989868788613 -603,-3.351059372735003 -604,-1.8942420716422568 -605,-1.8703462469541616 -606,0.6102616712047697 -607,3.0099126915414276 -608,3.2878702969266906 -609,4.39547356051223 -610,6.352327698411086 -611,7.703455340918602 -612,11.037476937899916 -613,11.718084550227081 -614,10.698771708994329 -615,12.260118119590835 -616,13.142753122071571 -617,14.030822220372139 -618,14.706507469924047 -619,15.450060529856465 -620,16.894792631787503 -621,15.041579976902433 -622,16.974221126914234 -623,18.9680672722877 -624,19.620668521001633 -625,20.352364111690047 -626,19.928439035246885 -627,20.746752686059963 -628,19.065025808108786 -629,19.699828203705533 -630,21.097530799444254 -631,20.42648582458958 -632,21.988891840743243 -633,20.188251855116548 -634,20.076844733802435 -635,19.75215067438861 -636,20.074843136652614 -637,21.62140657610596 -638,22.121514034910884 -639,22.253491710853677 -640,21.166859723058234 -641,22.232115534367868 -642,21.305141798256876 -643,22.20780124555066 -644,22.634615403815854 -645,20.60791039731099 -646,18.565525463437655 -647,16.590615283805782 -648,14.761190216012555 -649,13.715979818050519 -650,15.52025772488669 -651,15.178554121906274 -652,16.05431544557275 -653,15.197043188460075 -654,14.748708480364048 -655,15.541964261226013 -656,12.796026807679066 -657,13.318978247494451 -658,13.26463630246199 -659,14.339517657845096 -660,14.03964729077288 -661,12.721857465051077 -662,12.6591422990262 -663,12.440750953779446 -664,12.22082497643069 -665,11.170737646562522 -666,11.03076803825888 -667,12.559309302384719 -668,12.171924139073907 -669,13.836999457842957 -670,11.599588925108957 -671,11.856795399893564 -672,10.250444276335399 -673,9.946572316452173 -674,8.474989865895678 -675,7.971533647326445 -676,6.707350890848163 -677,6.837323333018516 -678,7.755832170056581 -679,7.734677700985182 -680,7.214678094224618 -681,6.344805280660716 -682,6.411660214347433 -683,4.824774649566261 -684,3.7034485584752517 -685,4.411951340038323 -686,6.34842069201336 -687,6.090511425110241 -688,7.26676014994073 -689,5.297027853054866 -690,5.365741633475244 -691,4.926779976747734 -692,3.3062314458602224 -693,5.422556652279555 -694,4.6997458662778735 -695,5.9535779929634725 -696,6.029926055400364 -697,5.265572810903845 -698,6.6418926946458265 -699,5.3402880423506165 -700,7.528621723338908 -701,8.904659971308662 -702,11.05590329419173 -703,10.529130671816594 -704,10.303979295618579 -705,8.80837888740385 -706,9.608159142420314 -707,9.065942930847246 -708,9.531987754849398 -709,10.60756962858248 -710,11.143947923774524 -711,12.416941036469698 -712,12.39712506030474 -713,12.560566494379952 -714,14.001999867921814 -715,14.60518411755976 -716,15.451378929591456 -717,16.71600296728339 -718,16.990040265034704 -719,17.986324576310015 -720,17.693995026587267 -721,17.917050727378378 -722,20.292999846325138 -723,21.552671726933934 -724,21.336198613081514 -725,24.564983750357175 -726,23.64813346365656 -727,26.30855562368191 -728,26.495352429010467 -729,29.77665844596347 -730,30.69067663813126 -731,32.407383705547936 -732,36.261051778612035 -733,37.03033285668002 -734,38.82003270194953 -735,40.98035142330639 -736,41.054227598911105 -737,42.53051797840974 -738,43.14342850636115 -739,46.13007574222622 -740,45.72362046630447 -741,48.78905705430836 -742,50.588905728529134 -743,52.540998113049724 -744,53.45448415779791 -745,55.980220269399254 -746,58.97243063464529 -747,61.74774676868095 -748,63.80250686962794 -749,65.18747579100344 -750,66.56484208505762 -751,66.21727615241045 -752,66.49746224735303 -753,67.71709093471918 -754,68.54764877894432 -755,70.60851118232455 -756,73.9680259281853 -757,74.95008208919805 -758,75.42349093191798 -759,75.90007818915964 -760,76.48138311387184 -761,77.07169733288198 -762,76.25741867153289 -763,76.4759127114395 -764,76.24868797396852 -765,77.44643324621808 -766,78.6770022391993 -767,80.39880296961113 -768,79.48310696916852 -769,80.42846175218848 -770,78.72928189711396 -771,78.93489287230078 -772,80.90790644212684 -773,80.45040669217609 -774,80.57137825363687 -775,81.99667549063017 -776,82.2144999839554 -777,82.85571728731794 -778,81.23502377711387 -779,81.47403227587165 -780,78.06047813914236 -781,78.29019624601985 -782,78.32872447451287 -783,77.54857139221423 -784,75.36259768575378 -785,74.95527164853651 -786,74.27787497379875 -787,73.05684686589012 -788,71.72685496588322 -789,70.0729608743811 -790,68.34377922765641 -791,66.94634088419816 -792,66.02886709234457 -793,65.04318849328135 -794,65.08533758775708 -795,64.58208347624861 -796,65.38003453314856 -797,64.02203455251085 -798,62.26317571433646 -799,60.76746804100889 -800,60.55272394675414 -801,59.74983426943659 -802,59.31341165850354 -803,58.577567033298614 -804,58.815649727910795 -805,56.34173788322786 -806,54.840588246551214 -807,51.567346321289236 -808,49.2421007406133 -809,48.58242617079162 -810,48.36690713574818 -811,48.435733163036154 -812,48.847419625768225 -813,47.97853482243171 -814,50.70852672996658 -815,50.00686200211729 -816,48.894121259157934 -817,48.56606114377693 -818,47.30030909321853 -819,47.21004525243834 -820,47.34963909261449 -821,46.952125083155934 -822,46.078212102081785 -823,45.24702851589278 -824,45.69994098898242 -825,45.6115526814768 -826,45.1899455585051 -827,45.799673823869 -828,46.12943278095875 -829,48.5547451816315 -830,49.89393481739855 -831,49.76965699917215 -832,52.03853091162869 -833,51.39219959652034 -834,51.08569179801756 -835,52.972225620546375 -836,50.98666619852132 -837,52.79090573870864 -838,51.14044562705689 -839,51.862360710353016 -840,52.06673763996639 -841,53.619033422121966 -842,54.59102353093409 -843,55.13149838516499 -844,58.889069254616786 -845,59.29329855563288 -846,60.07782142841288 -847,61.340287418528206 -848,63.26403919271188 -849,66.29864592158339 -850,65.0518168540699 -851,65.16980131676193 -852,66.23820102927623 -853,67.03340260505443 -854,67.96261201532307 -855,67.32026884004195 -856,67.07008850643015 -857,69.00755799045557 -858,70.15096245058629 -859,72.96222237288777 -860,72.72025189425534 -861,73.26040628060674 -862,74.03214296210575 -863,74.11980030068004 -864,75.41524962821232 -865,74.83245287183232 -866,76.70385586285686 -867,74.06376538516845 -868,77.20040867197852 -869,77.88285802797101 -870,77.97174371200465 -871,78.68274795614997 -872,81.19685970584912 -873,81.61521740961368 -874,80.56535820363543 -875,82.09446989844803 -876,83.50068140733725 -877,83.52572617717662 -878,84.08179114996945 -879,82.4042471693179 -880,81.2745625664887 -881,82.70670510221198 -882,81.67641886191008 -883,83.15823531342382 -884,85.41706403566278 -885,86.1711830749113 -886,85.97035216362467 -887,88.15840482702757 -888,87.57842182714562 -889,86.5743831683923 -890,86.66535735776117 -891,88.92719173814949 -892,88.91828348113303 -893,88.72318037182653 -894,89.53019371770108 -895,87.2625817004112 -896,87.30723595179323 -897,86.52697847066659 -898,87.1762813207215 -899,88.89803750432418 -900,88.53474415972887 -901,89.71758516552052 -902,89.03169617185478 -903,86.68279450749036 -904,86.46487360057681 -905,87.50545038309723 -906,85.26726921589771 -907,86.48558068754673 -908,84.68185535418742 -909,85.1441664091521 -910,85.39116736394767 -911,83.95323629176211 -912,83.38568657716067 -913,82.84954801348559 -914,81.4128624400601 -915,79.51869668478786 -916,78.46396015896657 -917,75.67235613923147 -918,74.18949909776316 -919,74.69901179182288 -920,74.00719652434813 -921,71.65274062162777 -922,69.87414259723475 -923,67.63853764476525 -924,67.13014644179772 -925,65.1224931394525 -926,63.77456564243954 -927,63.374623808436 -928,61.91469022241334 -929,60.02593033213573 -930,58.77427616377089 -931,56.24753528223883 -932,56.22366662122678 -933,55.464713501572895 -934,56.36422388664262 -935,56.64078242621871 -936,56.027998561776066 -937,54.90810737475389 -938,54.400318880184024 -939,52.11535076127324 -940,50.07923537629716 -941,49.046404161961846 -942,46.28038036612772 -943,44.04925065302201 -944,44.07014826776463 -945,41.609166539066884 -946,42.37402756594198 -947,41.903798988897506 -948,42.32435288810846 -949,41.13472454773123 -950,39.88187270799549 -951,40.096084312585354 -952,40.27817955787508 -953,39.439845296574184 -954,39.49181217590909 -955,40.38281688305427 -956,40.23430829843219 -957,40.376783866935384 -958,41.46244580707138 -959,39.42523991889198 -960,37.6671670543069 -961,35.38987091844887 -962,36.31961696633944 -963,39.677939681732205 -964,38.89610973115925 -965,42.35446024168155 -966,43.70639343050016 -967,43.86157354792278 -968,44.90745857413986 -969,45.231465247484685 -970,45.48322661380869 -971,45.53634738893378 -972,48.140263770131526 -973,47.24724767475913 -974,48.6180314149397 -975,48.1327821151072 -976,49.23784007228236 -977,48.80242082993334 -978,49.36903009076947 -979,50.193018630689274 -980,51.2176676363475 -981,52.33459843710076 -982,55.19828887615402 -983,56.66088545483354 -984,57.45295124834568 -985,59.458077885982654 -986,62.82347038256337 -987,62.03301318936236 -988,63.3581484961932 -989,64.05236952902673 -990,63.68076690201855 -991,65.45852952608595 -992,65.4236294400546 -993,65.89413901666583 -994,66.40218569725378 -995,65.42684725100277 -996,67.04060074837929 -997,68.01739182944584 -998,68.23022414293816 -999,67.6265953017679 +seconds,signal +0,28.055245083023095 +1,31.74557492869721 +2,18.812805734227286 +3,17.419782084431503 +4,25.05103275449707 +5,13.536572232946346 +6,-5.3479639892317055 +7,-10.40465884956618 +8,-3.9158016548892363 +9,-11.682562925664866 +10,-23.54229314158991 +11,-15.870425120886638 +12,2.719322694633398 +13,8.251979734640774 +14,7.173606279061625 +15,15.179051401854476 +16,29.104375796250665 +17,30.10451992139529 +18,14.856980127180153 +19,13.732478382554417 +20,16.80023314162697 +21,2.979871184999253 +22,-12.702737541000259 +23,-15.425050325433979 +24,-9.311806915517126 +25,-10.955409729314331 +26,-15.45891057148046 +27,-6.760190052470855 +28,9.419103625301544 +29,16.696982759921013 +30,11.176731772580007 +31,20.871339869391523 +32,32.59478556061765 +33,27.528677287374883 +34,11.183300536129936 +35,7.515453490917278 +36,7.380114984992637 +37,-3.83892561968533 +38,-19.926825684373533 +39,-20.39766862433174 +40,-7.774312030975387 +41,-7.834972790173616 +42,-11.042556934722016 +43,0.3624232535021846 +44,17.127443337532238 +45,22.72476261254411 +46,16.361574290389168 +47,20.281880174993034 +48,29.106065242391097 +49,22.340438694006778 +50,1.4294548037958128 +51,-4.11946733735558 +52,-0.11226358407633141 +53,-8.953825925005544 +54,-23.54811720215018 +55,-18.60793101242374 +56,-4.512752798738903 +57,0.5779860142884294 +58,-2.8641594998930726 +59,9.873110724875056 +60,25.864293062437422 +61,28.151877758068586 +62,17.24978629325802 +63,19.23905628386673 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR_A.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR_A.csv index de669e10bd..b2774c8c9e 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR_A.csv +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/TrainingData/simpleMR_A.csv @@ -1,101 +1,257 @@ pivot,signal0,signal1 -0.0,49.54983944220783,50.09433414520015 -1.0,52.6970978207364,51.91544590552285 -2.0,54.472862047914774,55.039271156936586 -3.0,53.33254164033814,54.08149824048361 -4.0,52.398885012288034,52.69704923112341 -5.0,47.95732104333438,48.336749191375624 -6.0,41.995611349584806,41.71735404540245 -7.0,34.53711221372069,33.8701885031421 -8.0,27.69674740070055,27.720155227421266 -9.0,22.499310863993816,22.614021724113563 -10.0,20.74308566720757,18.086536551049857 -11.0,21.1137154930233,19.696929043634686 -12.0,21.681943491778338,20.230384640308735 -13.0,23.772528397583514,24.777515083480115 -14.0,25.69647956381209,26.81783717619455 -15.0,27.95157525823347,29.86946686260868 -16.0,29.9347444591284,31.185903097508724 -17.0,29.20134572422491,29.741222027051702 -18.0,30.867392130601885,28.04252405574178 -19.0,28.2540069802605,26.34235276871408 -20.0,28.24913895352052,24.64639131409379 -21.0,28.5132249963771,27.79859137225004 -22.0,30.272761522145192,30.744804050347277 -23.0,34.62896633430685,37.29410045458242 -24.0,41.0729599393201,44.83092738660316 -25.0,51.775074011616326,50.76124075544462 -26.0,57.7327669455922,58.54116144420404 -27.0,63.54674809514319,65.73734611237148 -28.0,66.70461311519895,67.68674904538042 -29.0,67.05747787659041,66.42271967603361 -30.0,65.7632413042674,63.97984335811091 -31.0,59.440589195110846,59.29757184816752 -32.0,56.02101384082861,54.29743359212972 -33.0,50.58850913680426,48.86101814995422 -34.0,46.92772148704119,45.46331178512475 -35.0,43.81645218309977,45.47904062148712 -36.0,44.802051586157134,43.56309315582151 -37.0,46.201309782394,47.20988916350355 -38.0,47.203327227712826,49.71554406666086 -39.0,49.81277092493964,51.84679982202542 -40.0,53.001838661705314,52.83011950017796 -41.0,51.5773618081381,52.683868907157255 -42.0,48.20932030823357,50.791389210235586 -43.0,45.50633211898812,47.93842473130441 -44.0,43.58158636292949,46.233029001839235 -45.0,40.060886474928004,43.035059737037166 -46.0,38.61670029046317,41.026687230390415 -47.0,40.742347732072666,41.112274588932046 -48.0,44.17390705444223,42.312889216876165 -49.0,48.72379773212896,48.25804659867207 -50.0,52.279273035286195,53.94375282557255 -51.0,56.31069465510406,57.436402534624875 -52.0,59.31392226672933,57.577116759603655 -53.0,59.175169639383185,55.99712940959766 -54.0,56.564294242264836,54.1420721072508 -55.0,51.15662295951644,48.62741805857791 -56.0,43.95386995723759,40.74653161265582 -57.0,36.69374338029079,35.88873244640077 -58.0,30.039024432745233,28.13704721397137 -59.0,24.87244603566618,24.6829338823739 -60.0,22.207692467612528,21.650770897562296 -61.0,21.394484860881267,19.981392747533004 -62.0,21.627464388000032,21.630996516604615 -63.0,24.2433705228588,22.371309691778542 -64.0,27.317243936466234,26.045295895154737 -65.0,28.670980773549157,28.239845410768996 -66.0,30.008235307237975,31.005445667727525 -67.0,29.612052879953545,31.45815700468124 -68.0,29.83962346044111,29.387301377800487 -69.0,27.84055324009312,27.15743530174945 -70.0,27.040358555034732,27.891832126145225 -71.0,27.57291657583435,27.283297275377347 -72.0,30.276562706340965,29.890110294407734 -73.0,36.960817166473355,35.60143012755945 -74.0,42.58965513133438,42.69950746011971 -75.0,49.3285777128163,50.13098287592544 -76.0,56.38173376910173,56.426301780526785 -77.0,61.831038164413506,62.82458524393499 -78.0,66.40005482368869,64.81285814533194 -79.0,67.28749842198482,63.45424201760611 -80.0,62.91001689781376,62.48405762431236 -81.0,58.73130189126395,57.39643505430432 -82.0,52.243638640724285,53.76414117463373 -83.0,47.19585669804296,49.11582055700549 -84.0,43.53749931837798,46.4711179744035 -85.0,42.09854507197639,45.952630483865626 -86.0,42.51128868619833,45.895064380332926 -87.0,44.85773794751527,47.096404331649524 -88.0,47.87777877257787,49.69525688558984 -89.0,50.931228019454686,50.70256792650591 -90.0,50.07848706218138,49.83461565325988 -91.0,50.46682625968651,51.146570813741505 -92.0,49.49401083138682,47.18371318544457 -93.0,46.102651864162645,44.00823760486923 -94.0,42.31674232817909,40.96564271331024 -95.0,38.85465381238403,39.54908698014911 -96.0,36.87757915362469,38.19368689321115 -97.0,37.109199128017956,39.6897140994637 -98.0,38.71994356985986,41.9336328348804 -99.0,44.824027293817686,45.776619082830955 +0.0,14.30105576167303,1.3803263762999978 +1.0,7.587340174433297,2.5600768926884587 +2.0,4.627419581158936,0.5060272908622858 +3.0,2.555572432766192,-0.4587756707518796 +4.0,0.704537433435358,-0.5110477939730977 +5.0,4.347566426405577,-0.012530657920219623 +6.0,12.449539764039901,0.8648467840396605 +7.0,19.821090034247494,1.2630299735047155 +8.0,21.101465183900917,0.25439740827230384 +9.0,19.41941062115691,-0.4962310998928249 +10.0,16.292527002152585,-1.9983977900063472 +11.0,9.965338671739001,-2.022937045940547 +12.0,4.378641280902318,-0.048221405349267804 +13.0,-4.943323356253657,0.828788896436648 +14.0,-9.37920776938003,1.1062750531846042 +15.0,-8.083981705479038,-0.31609693497712854 +16.0,-2.495376192662335,-2.713434940103954 +17.0,3.941509419439583,-2.344059481152956 +18.0,13.970058875018298,-2.039491912996633 +19.0,22.79674464556353,-3.461879367927781 +20.0,30.156751950704653,-2.899056025119631 +21.0,33.139492117586116,-2.472967561424662 +22.0,30.27283256457938,-3.32859058370715 +23.0,26.596750877757692,-4.063700443360988 +24.0,15.169655090102657,2.5733957428983527 +25.0,5.043093706511134,2.440473668623884 +26.0,-3.2351295948464607,-0.14517208650841235 +27.0,-6.5092655839675855,-0.07405275011329043 +28.0,-3.88131604693739,5.180456443930083 +29.0,0.14011239540091647,3.7757726604104054 +30.0,4.136885301999942,0.7529613218140685 +31.0,12.15934702331596,-0.3317697159798755 +32.0,19.0805186971833,-1.9558192905474616 +33.0,20.133067415870002,-1.7998682174451053 +34.0,18.561000155853975,-1.8900116487984895 +35.0,15.145096780141355,-1.4544203947619412 +36.0,8.776316388437206,-0.6938579350998104 +37.0,2.955035589026675,-1.3916719354344016 +38.0,-1.3625909571815917,-4.344104209461528 +39.0,-1.9838049944524156,-5.1059432565725675 +40.0,3.0140977896983907,-2.2845653856385644 +41.0,9.000025426213622,-1.222886278814199 +42.0,16.29150395386787,-1.2982803276508355 +43.0,25.09793301794981,-0.33372562056615074 +44.0,27.936436280757032,3.3549605448624877 +45.0,27.909784929214915,0.06694103016197939 +46.0,22.55294431189636,-0.13561471765705224 +47.0,15.345787824564715,-0.6726477463943565 +48.0,9.525764852194108,1.1863846952671446 +49.0,0.9639435234285527,0.8872558929399456 +50.0,-4.890435053767879,0.7119164518781104 +51.0,-7.086957295552773,0.5509145863893105 +52.0,-9.612509331479393,-1.987879279596303 +53.0,-2.0540553794164156,-1.2507028646205631 +54.0,6.534897154670376,-2.7112234351172333 +55.0,15.007504328947157,-4.029417571820221 +56.0,21.744265401203098,0.6148311446287882 +57.0,25.74084081084604,2.029527026668897 +58.0,26.01720506810902,1.9564305263696347 +59.0,21.067735607649663,1.3155273441016386 +60.0,12.415319209991557,-2.879058265472392 +61.0,4.063403946208271,-3.7643215894096764 +62.0,-0.46600734628875917,-0.6641554562504683 +63.0,-2.6909185204134296,-1.5433201836211068 +64.0,-2.5607088326432677,-0.464476075123889 +65.0,4.0024856042174655,0.4949569342885036 +66.0,11.521409999786039,-0.3860554244958909 +67.0,16.38365472757818,-1.2191832970676133 +68.0,21.426794055685864,2.336163443619895 +69.0,22.266912897448695,0.8015381964878469 +70.0,16.031938138682836,-0.3176251805771144 +71.0,11.53331211776351,-0.7578216062946799 +72.0,5.511589175494286,0.7328136878081555 +73.0,-1.4829519011096666,-0.606564418010834 +74.0,-7.412298790257439,0.19957670945817751 +75.0,-7.687271911631302,-0.6149129848299224 +76.0,-0.8922784448230667,2.596353968896307 +77.0,4.621640621406336,2.033496287162787 +78.0,13.178724061848976,3.2724069529012025 +79.0,23.453025632932867,3.7772691511090786 +80.0,28.164497471432444,-4.727983724572453 +81.0,30.877419122547355,-3.6303189322605376 +82.0,27.91421762488432,0.6390577737017724 +83.0,21.22909109934215,-0.2862529825698905 +84.0,12.360887105527137,-0.6903292770459087 +85.0,3.3203152828717952,-0.7366161551416359 +86.0,-3.8936541865957164,-3.966369506969718 +87.0,-6.970504678839256,-4.089700901517279 +88.0,-4.901606901679031,0.6697454492049126 +89.0,-0.44824649837572217,1.8240701618306567 +90.0,4.806451467971147,-0.35347754187685165 +91.0,13.022070642320667,0.4790170005227435 +92.0,19.94862158462117,-1.313688946004454 +93.0,20.271585157053817,-2.4926795356238918 +94.0,21.72457680951221,-0.8428389017400106 +95.0,18.433129106117487,-0.38340565499170753 +96.0,11.216146668365223,-1.3917012910330633 +97.0,4.128826762476301,-0.46178854416488396 +98.0,-1.5023288079844046,1.0457170903209643 +99.0,-2.67619719907495,1.2231214485193833 +100.0,2.581993031366634,-0.7026426160429047 +101.0,6.944524598146302,0.6917308214802247 +102.0,13.767201262837393,1.7794624478622483 +103.0,20.95915443210263,-0.20691663016515816 +104.0,26.61283123767078,1.7119796463899255 +105.0,27.980514127507764,1.0414429720218337 +106.0,27.582716694520304,-1.0883477323606647 +107.0,20.30952154757386,-1.234437002567312 +108.0,10.187099882175321,1.7985990514034134 +109.0,1.7073920713435689,4.117674042155337 +110.0,-7.033903152515164,2.409696917893644 +111.0,-10.825166976699048,0.5024933579656263 +112.0,-9.487344503306588,-0.5900746468466822 +113.0,-3.8181224433665024,0.8954942203171946 +114.0,4.679489412540969,0.1801523319677118 +115.0,12.233614234194281,-1.1030306876392806 +116.0,21.146362231734255,0.6899883754863296 +117.0,26.153308172485385,0.4202726006461298 +118.0,23.01860210817435,2.432787175699075 +119.0,19.28363923700901,2.311559716374887 +120.0,15.049383863671277,-2.5227656609978233 +121.0,6.8644437301212315,-4.061427960636513 +122.0,-0.8029179518837255,-3.3862841335834424 +123.0,-3.94202478276358,-3.1868174509002056 +124.0,-0.012451269157886191,0.5339657025972362 +125.0,3.948393615339052,-1.6183001797133754 +126.0,9.816489024847588,-2.1454665309909893 +127.0,17.202036598198504,-0.38146669616805484 +128.0,19.10102839676617,1.0109495657094398 +129.0,20.773862847367184,2.8936222072063975 +130.0,19.092592554851677,3.5886980423142942 +131.0,10.223069613913054,2.1726951130762187 +132.0,3.0864688685614485,-2.0653037092744313 +133.0,-5.947580005484729,-2.750231389245478 +134.0,-10.791529408928364,1.4191014159829547 +135.0,-10.114133169224933,1.0180839767060001 +136.0,-4.25978180215516,-0.8370749959223461 +137.0,4.49511209732786,0.31015577763203295 +138.0,15.250050579961103,0.5727639054872355 +139.0,22.69037736929265,0.4175393444754685 +140.0,28.046179645104036,3.167576053822156 +141.0,32.14295168820986,1.2793503878825674 +142.0,29.340346441761636,-4.472246801805836 +143.0,24.787963874065372,-3.8078396935868497 +144.0,12.256122317197363,1.9710422753340495 +145.0,2.6258753872575165,3.005384199742085 +146.0,-2.5555609213536066,6.900413311037065 +147.0,-7.134458992808288,4.873275904039156 +148.0,-6.081563247021864,-0.12851101290717093 +149.0,0.06597235294825998,-1.249108585586229 +150.0,9.210793589279168,0.46645500775425786 +151.0,14.93279039517323,1.2407172580681531 +152.0,15.483487027738123,0.3493980404575099 +153.0,17.906612015626674,-1.3872968496227607 +154.0,18.565031965132142,-3.46031943398588 +155.0,15.509055398501065,-3.776604372229103 +156.0,8.675381772499524,1.694423581609271 +157.0,2.4284886175889038,2.7538978516361765 +158.0,-0.5473824558444542,2.855243082123203 +159.0,-1.876600000215193,4.875309663215166 +160.0,-0.3947066593672205,4.429376303111695 +161.0,5.367052166867899,3.5427317829196783 +162.0,15.452874112030251,1.7151811626859557 +163.0,21.652926383703832,0.8711171474618417 +164.0,25.09841451916272,0.9144031698391716 +165.0,25.974028307933295,-0.0457954133294316 +166.0,23.694654113244287,0.7039515250364639 +167.0,18.590042215673826,0.7514248354636623 +168.0,6.324884045139905,0.27032962177768094 +169.0,-2.81608129928646,-0.7167963815045717 +170.0,-6.673935158893267,1.3988415804918228 +171.0,-9.704531677741217,3.6689983020699737 +172.0,-7.418849297201999,2.657628006000621 +173.0,-0.28650706923887354,2.3432000564178352 +174.0,7.33762240813026,3.7386132340625027 +175.0,16.13070847143846,5.736580870895593 +176.0,19.61670914544991,2.091461846129591 +177.0,23.43157811751569,0.611687915900029 +178.0,21.51645155398222,-5.506043831596394 +179.0,17.257335996936416,-4.173214290664666 +180.0,14.500244400326546,-2.1948751969725255 +181.0,8.665645179009344,-0.10120498364598057 +182.0,2.6265660511693265,-4.138045980696289 +183.0,0.12471447599336666,-4.676591725427363 +184.0,1.3546075714782453,-0.26142700028138277 +185.0,3.7986728113183905,0.03524375901640764 +186.0,9.450076946329773,1.1153544432424685 +187.0,16.850265442247498,1.8654353250327085 +188.0,19.90494090373919,-1.5542507542960073 +189.0,18.92724577773996,-0.30473210731492784 +190.0,17.063108499200958,-2.0401118635418953 +191.0,11.898306045646935,-1.0000515362631577 +192.0,3.0786649652719262,-1.2541666646341023 +193.0,-4.0476203087870966,-0.9513068474017266 +194.0,-8.45584511438621,1.8611728248087542 +195.0,-8.31117580656672,2.6519979794318242 +196.0,-4.1842689245331055,0.9952875221540989 +197.0,2.8537702894523713,1.6213363407761252 +198.0,12.191994039864612,0.7670212544621648 +199.0,22.75613807900774,-0.11373957546284896 +200.0,25.996082131401767,5.724446841040436 +201.0,27.642300703741473,4.358925899465399 +202.0,27.0808482871043,4.583751714796136 +203.0,21.83770241682738,4.420221270836198 +204.0,13.725230654486742,-0.08689230406502935 +205.0,6.119319646165977,1.7168673315970513 +206.0,0.8649864787949684,0.8230171767684975 +207.0,-2.833077325607782,2.6293187116157917 +208.0,-0.6286232397823477,2.6167939865293475 +209.0,2.953559180366076,2.0412979249700967 +210.0,4.385193307014454,-1.5506229673062892 +211.0,11.861190430224696,-1.992537253825703 +212.0,18.41236296165594,1.0542523603621754 +213.0,21.480499239692236,0.6876319600421088 +214.0,20.34235739663174,-0.9567514406880674 +215.0,14.99240978740508,-1.9211797518289984 +216.0,5.178557843107014,-1.87616233687194 +217.0,0.42358794309897574,-1.918449602815103 +218.0,0.018912277094465413,-3.9541927266251147 +219.0,-0.1437693079407194,-5.550979728399359 +220.0,1.4679511809356702,-0.14496102414742806 +221.0,4.828574398895724,-0.07263141662181238 +222.0,17.78996305548076,-2.042443029855085 +223.0,24.883336106579883,-2.4332198366797013 +224.0,27.099020991980673,0.7434078649539033 +225.0,27.042100371989033,-0.08225017308764615 +226.0,24.289930688106537,-1.2524174558097592 +227.0,18.608110614170176,-0.5625381801270954 +228.0,11.272106621222058,1.5746876507268959 +229.0,1.582878871685275,0.8386709589058741 +230.0,-6.51170421136232,0.9697065504747071 +231.0,-7.374791504360325,0.9617292390635144 +232.0,-4.365144489053961,-3.3094995666500946 +233.0,-0.8284374353660382,-5.401317923858982 +234.0,8.734764526861133,-3.7040834693056555 +235.0,18.368140392541026,-4.556819650125485 +236.0,22.89323839365701,-4.5052373043808 +237.0,26.871664057244928,-4.641483710477013 +238.0,25.155407348233933,-5.479123176052905 +239.0,22.266135762372016,-5.197496450863547 +240.0,14.71797085125592,0.204286014998867 +241.0,5.534550326888564,1.5601431343983094 +242.0,-1.442573108960684,1.2858430408237296 +243.0,-1.9881002576566207,-0.29351006350097997 +244.0,-1.1909647804029408,-4.21977100710359 +245.0,2.8136827580100627,-3.066283935186445 +246.0,11.629460320383103,-4.797099275560196 +247.0,19.05131685197596,-3.376790617937684 +248.0,21.058199390240816,1.6804229484775626 +249.0,21.258542283510426,1.6903444336181899 +250.0,20.014968105017886,-3.49168868681771 +251.0,15.08503740616617,-3.2925317690705445 +252.0,1.7076429026851017,1.1997487474747053 +253.0,-3.751419951115767,1.6116283086172698 +254.0,-10.333215534701893,0.05405846452969529 +255.0,-10.955325583439093,0.8499509519045907 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml index 057e03a48b..2acfeffdaf 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/multiYearDWT.xml @@ -7,8 +7,7 @@ SupervisedLearning.SyntheticHistory,TSA.Fourier Tests the MultiResolutionTSA ROM using multiple macroSteps/years and the FilterBankDWT algorithm. - An ARMA model is trained on each detail level. Requested number of levels in FilterBankDWT - should exceed the theoretical maximum, so the result should have only 3 detail levels per year. + An ARMA model is trained on each detail level. @@ -48,7 +47,7 @@ - 2 + 1 42 1.0 @@ -57,19 +56,23 @@ - signal0, seconds + signal, seconds scaling seconds - - db2 - 4 + + 4, 15 + + + db10 + 2 - signal0, seconds + signal, seconds macro scaling seconds - + +

2

3
@@ -92,16 +95,16 @@ scaling, macro - signal0, seconds + signal, seconds seconds scaling - seconds, signal0 - signal0 - signal0 + seconds, signal + signal + signal diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml index 9a2e782932..b99f28e7e2 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/simpleDWT.xml @@ -7,8 +7,7 @@ SupervisedLearning.MultiResolutionTSA,TSA.FilterBankDWT Tests the MultiResolutionTSA ROM using a singular macroStep and the FilterBankDWT algorithm. - An ARMA model is trained on each detail level. Requested number of levels in FilterBankDWT - should exceed the theoretical maximum, so the result should have only 1 detail level. + An ARMA model is trained on each detail level. Two signals trained. @@ -48,7 +47,7 @@ - 2 + 1 42 1.0 @@ -57,21 +56,25 @@ - signal0, signal1, pivot + signal0,signal1, pivot scaling - pivot - - db8 + pivots + + 10, 20 + + + coif10 4 - signal0, signal1, pivot + signal0,signal1, pivot scaling macro pivot - -

2

- 3 + + +

1,1

+ 1,2
@@ -92,16 +95,16 @@ scaling, macro - pivot, signal0, signal1 + pivot, signal0,signal1 pivot scaling - pivot, signal0, signal1 - signal0, signal1 - signal0, signal1 + pivot, signal0,signal1 + signal0,signal1 + signal0,signal1 From 48c5e1b2198a775bcbda45c7f0a1d61c7b753202 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Wed, 18 Sep 2024 11:01:02 -0600 Subject: [PATCH 18/23] regolding --- .../gold/MultiYearDWT/romMeta.xml | 138 +- .../gold/MultiYearDWT/samples.csv | 4130 +---------------- .../gold/SimpleDWT/romMeta.xml | 73 +- .../gold/SimpleDWT/samples.csv | 458 +- 4 files changed, 497 insertions(+), 4302 deletions(-) diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml index 813cd1296c..c0602ec87a 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/romMeta.xml @@ -3,7 +3,7 @@ Decomposition scaling - signal0,seconds + signal,seconds macro @@ -12,102 +12,78 @@ 2 + + + 3.287798977e+00 + + 7.781916578e+00 + 5.161264404e-01 + + + 2.038282750e+01 + 1.561131395e+00 + + + - + 1 - 3 - + 1 + + + + - - -1.418533300e-02 - 5.657565539e-01 - -2.016899601e-01 - 8.876686906e-01 - 8.877409636e-01 - 9.999347861e-01 - 1.262257641e-01 + + -6.217113902e-03 + -1.185912541e+00 + -2.907717255e-01 + -2.613457988e-01 + -8.213112973e-01 + 8.615640653e-02 + 4.761564202e-01 2,0,3 - - - - - - - -9.723375158e-05 - 1.303824395e+00 - -8.023112427e-01 - -8.608740430e-01 - -9.942496311e-01 - 8.665437137e-01 - 7.065351710e-02 - 2,0,3 - - - - - - - -4.988595934e-05 - -1.226963709e+00 - -6.496999724e-01 - -7.693561036e-02 - -5.886814381e-01 - -2.653647705e-01 - 1.131946969e-01 - 2,0,3 - + + + + 4.730485908e+00 + + 7.926389026e+00 + 1.045351921e+00 + + + 2.058569355e+01 + 8.081683268e-01 + + + - + 1 - 3 - + 1 + + + + - - -2.007533604e-03 - 5.477200913e-01 - -1.776652906e-01 - 9.059678394e-01 - 9.060010166e-01 - 9.999696266e-01 - 9.395131913e-02 - 2,0,3 - - - - - - - -2.470720544e-05 - 1.303100240e+00 - -7.216840523e-01 - -9.745108132e-01 - -9.990488840e-01 - 9.754062835e-01 - 5.656817923e-02 - 2,0,3 - - - - - - - -8.744662762e-04 - -5.482244404e-01 - 3.878420774e-01 - -8.841872851e-01 - -9.381941028e-01 - 8.712503276e-01 - 7.113185334e-02 + + -2.194729136e-03 + -3.962321760e-01 + -4.832490406e-01 + -2.662806536e-01 + 1.078173681e-01 + 9.383190024e-02 + 1.050620541e+00 2,0,3 - + diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/samples.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/samples.csv index 5b04b955ca..e13d16087f 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/samples.csv +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/MultiYearDWT/samples.csv @@ -1,4001 +1,129 @@ -RAVEN_sample_ID,seconds,macro,scaling,signal0,PointProbability,prefix,ProbabilityWeight -0,0.0,1,1.0,0,1.0,1,1.0 -0,0.0,2,1.0,0,1.0,1,1.0 -0,1.0,1,1.0,0,1.0,1,1.0 -0,1.0,2,1.0,0,1.0,1,1.0 -0,2.0,1,1.0,0,1.0,1,1.0 -0,2.0,2,1.0,0,1.0,1,1.0 -0,3.0,1,1.0,0,1.0,1,1.0 -0,3.0,2,1.0,0,1.0,1,1.0 -0,4.0,1,1.0,0,1.0,1,1.0 -0,4.0,2,1.0,0,1.0,1,1.0 -0,5.0,1,1.0,0,1.0,1,1.0 -0,5.0,2,1.0,0,1.0,1,1.0 -0,6.0,1,1.0,0,1.0,1,1.0 -0,6.0,2,1.0,0,1.0,1,1.0 -0,7.0,1,1.0,0,1.0,1,1.0 -0,7.0,2,1.0,0,1.0,1,1.0 -0,8.0,1,1.0,0,1.0,1,1.0 -0,8.0,2,1.0,0,1.0,1,1.0 -0,9.0,1,1.0,0,1.0,1,1.0 -0,9.0,2,1.0,0,1.0,1,1.0 -0,10.0,1,1.0,0,1.0,1,1.0 -0,10.0,2,1.0,0,1.0,1,1.0 -0,11.0,1,1.0,0,1.0,1,1.0 -0,11.0,2,1.0,0,1.0,1,1.0 -0,12.0,1,1.0,0,1.0,1,1.0 -0,12.0,2,1.0,0,1.0,1,1.0 -0,13.0,1,1.0,0,1.0,1,1.0 -0,13.0,2,1.0,0,1.0,1,1.0 -0,14.0,1,1.0,0,1.0,1,1.0 -0,14.0,2,1.0,0,1.0,1,1.0 -0,15.0,1,1.0,0,1.0,1,1.0 -0,15.0,2,1.0,0,1.0,1,1.0 -0,16.0,1,1.0,0,1.0,1,1.0 -0,16.0,2,1.0,0,1.0,1,1.0 -0,17.0,1,1.0,0,1.0,1,1.0 -0,17.0,2,1.0,0,1.0,1,1.0 -0,18.0,1,1.0,0,1.0,1,1.0 -0,18.0,2,1.0,0,1.0,1,1.0 -0,19.0,1,1.0,0,1.0,1,1.0 -0,19.0,2,1.0,0,1.0,1,1.0 -0,20.0,1,1.0,0,1.0,1,1.0 -0,20.0,2,1.0,0,1.0,1,1.0 -0,21.0,1,1.0,0,1.0,1,1.0 -0,21.0,2,1.0,0,1.0,1,1.0 -0,22.0,1,1.0,0,1.0,1,1.0 -0,22.0,2,1.0,0,1.0,1,1.0 -0,23.0,1,1.0,0,1.0,1,1.0 -0,23.0,2,1.0,0,1.0,1,1.0 -0,24.0,1,1.0,0,1.0,1,1.0 -0,24.0,2,1.0,0,1.0,1,1.0 -0,25.0,1,1.0,0,1.0,1,1.0 -0,25.0,2,1.0,0,1.0,1,1.0 -0,26.0,1,1.0,0,1.0,1,1.0 -0,26.0,2,1.0,0,1.0,1,1.0 -0,27.0,1,1.0,0,1.0,1,1.0 -0,27.0,2,1.0,0,1.0,1,1.0 -0,28.0,1,1.0,0,1.0,1,1.0 -0,28.0,2,1.0,0,1.0,1,1.0 -0,29.0,1,1.0,0,1.0,1,1.0 -0,29.0,2,1.0,0,1.0,1,1.0 -0,30.0,1,1.0,0,1.0,1,1.0 -0,30.0,2,1.0,0,1.0,1,1.0 -0,31.0,1,1.0,0,1.0,1,1.0 -0,31.0,2,1.0,0,1.0,1,1.0 -0,32.0,1,1.0,0,1.0,1,1.0 -0,32.0,2,1.0,0,1.0,1,1.0 -0,33.0,1,1.0,0,1.0,1,1.0 -0,33.0,2,1.0,0,1.0,1,1.0 -0,34.0,1,1.0,0,1.0,1,1.0 -0,34.0,2,1.0,0,1.0,1,1.0 -0,35.0,1,1.0,0,1.0,1,1.0 -0,35.0,2,1.0,0,1.0,1,1.0 -0,36.0,1,1.0,0,1.0,1,1.0 -0,36.0,2,1.0,0,1.0,1,1.0 -0,37.0,1,1.0,0,1.0,1,1.0 -0,37.0,2,1.0,0,1.0,1,1.0 -0,38.0,1,1.0,0,1.0,1,1.0 -0,38.0,2,1.0,0,1.0,1,1.0 -0,39.0,1,1.0,0,1.0,1,1.0 -0,39.0,2,1.0,0,1.0,1,1.0 -0,40.0,1,1.0,0,1.0,1,1.0 -0,40.0,2,1.0,0,1.0,1,1.0 -0,41.0,1,1.0,0,1.0,1,1.0 -0,41.0,2,1.0,0,1.0,1,1.0 -0,42.0,1,1.0,0,1.0,1,1.0 -0,42.0,2,1.0,0,1.0,1,1.0 -0,43.0,1,1.0,0,1.0,1,1.0 -0,43.0,2,1.0,0,1.0,1,1.0 -0,44.0,1,1.0,0,1.0,1,1.0 -0,44.0,2,1.0,0,1.0,1,1.0 -0,45.0,1,1.0,0,1.0,1,1.0 -0,45.0,2,1.0,0,1.0,1,1.0 -0,46.0,1,1.0,0,1.0,1,1.0 -0,46.0,2,1.0,0,1.0,1,1.0 -0,47.0,1,1.0,0,1.0,1,1.0 -0,47.0,2,1.0,0,1.0,1,1.0 -0,48.0,1,1.0,0,1.0,1,1.0 -0,48.0,2,1.0,0,1.0,1,1.0 -0,49.0,1,1.0,0,1.0,1,1.0 -0,49.0,2,1.0,0,1.0,1,1.0 -0,50.0,1,1.0,0,1.0,1,1.0 -0,50.0,2,1.0,0,1.0,1,1.0 -0,51.0,1,1.0,0,1.0,1,1.0 -0,51.0,2,1.0,0,1.0,1,1.0 -0,52.0,1,1.0,0,1.0,1,1.0 -0,52.0,2,1.0,0,1.0,1,1.0 -0,53.0,1,1.0,0,1.0,1,1.0 -0,53.0,2,1.0,0,1.0,1,1.0 -0,54.0,1,1.0,0,1.0,1,1.0 -0,54.0,2,1.0,0,1.0,1,1.0 -0,55.0,1,1.0,0,1.0,1,1.0 -0,55.0,2,1.0,0,1.0,1,1.0 -0,56.0,1,1.0,0,1.0,1,1.0 -0,56.0,2,1.0,0,1.0,1,1.0 -0,57.0,1,1.0,0,1.0,1,1.0 -0,57.0,2,1.0,0,1.0,1,1.0 -0,58.0,1,1.0,0,1.0,1,1.0 -0,58.0,2,1.0,0,1.0,1,1.0 -0,59.0,1,1.0,0,1.0,1,1.0 -0,59.0,2,1.0,0,1.0,1,1.0 -0,60.0,1,1.0,0,1.0,1,1.0 -0,60.0,2,1.0,0,1.0,1,1.0 -0,61.0,1,1.0,0,1.0,1,1.0 -0,61.0,2,1.0,0,1.0,1,1.0 -0,62.0,1,1.0,0,1.0,1,1.0 -0,62.0,2,1.0,0,1.0,1,1.0 -0,63.0,1,1.0,0,1.0,1,1.0 -0,63.0,2,1.0,0,1.0,1,1.0 -0,64.0,1,1.0,0,1.0,1,1.0 -0,64.0,2,1.0,0,1.0,1,1.0 -0,65.0,1,1.0,0,1.0,1,1.0 -0,65.0,2,1.0,0,1.0,1,1.0 -0,66.0,1,1.0,0,1.0,1,1.0 -0,66.0,2,1.0,0,1.0,1,1.0 -0,67.0,1,1.0,0,1.0,1,1.0 -0,67.0,2,1.0,0,1.0,1,1.0 -0,68.0,1,1.0,0,1.0,1,1.0 -0,68.0,2,1.0,0,1.0,1,1.0 -0,69.0,1,1.0,0,1.0,1,1.0 -0,69.0,2,1.0,0,1.0,1,1.0 -0,70.0,1,1.0,0,1.0,1,1.0 -0,70.0,2,1.0,0,1.0,1,1.0 -0,71.0,1,1.0,0,1.0,1,1.0 -0,71.0,2,1.0,0,1.0,1,1.0 -0,72.0,1,1.0,0,1.0,1,1.0 -0,72.0,2,1.0,0,1.0,1,1.0 -0,73.0,1,1.0,0,1.0,1,1.0 -0,73.0,2,1.0,0,1.0,1,1.0 -0,74.0,1,1.0,0,1.0,1,1.0 -0,74.0,2,1.0,0,1.0,1,1.0 -0,75.0,1,1.0,0,1.0,1,1.0 -0,75.0,2,1.0,0,1.0,1,1.0 -0,76.0,1,1.0,0,1.0,1,1.0 -0,76.0,2,1.0,0,1.0,1,1.0 -0,77.0,1,1.0,0,1.0,1,1.0 -0,77.0,2,1.0,0,1.0,1,1.0 -0,78.0,1,1.0,0,1.0,1,1.0 -0,78.0,2,1.0,0,1.0,1,1.0 -0,79.0,1,1.0,0,1.0,1,1.0 -0,79.0,2,1.0,0,1.0,1,1.0 -0,80.0,1,1.0,0,1.0,1,1.0 -0,80.0,2,1.0,0,1.0,1,1.0 -0,81.0,1,1.0,0,1.0,1,1.0 -0,81.0,2,1.0,0,1.0,1,1.0 -0,82.0,1,1.0,0,1.0,1,1.0 -0,82.0,2,1.0,0,1.0,1,1.0 -0,83.0,1,1.0,0,1.0,1,1.0 -0,83.0,2,1.0,0,1.0,1,1.0 -0,84.0,1,1.0,0,1.0,1,1.0 -0,84.0,2,1.0,0,1.0,1,1.0 -0,85.0,1,1.0,0,1.0,1,1.0 -0,85.0,2,1.0,0,1.0,1,1.0 -0,86.0,1,1.0,0,1.0,1,1.0 -0,86.0,2,1.0,0,1.0,1,1.0 -0,87.0,1,1.0,0,1.0,1,1.0 -0,87.0,2,1.0,0,1.0,1,1.0 -0,88.0,1,1.0,0,1.0,1,1.0 -0,88.0,2,1.0,0,1.0,1,1.0 -0,89.0,1,1.0,0,1.0,1,1.0 -0,89.0,2,1.0,0,1.0,1,1.0 -0,90.0,1,1.0,0,1.0,1,1.0 -0,90.0,2,1.0,0,1.0,1,1.0 -0,91.0,1,1.0,0,1.0,1,1.0 -0,91.0,2,1.0,0,1.0,1,1.0 -0,92.0,1,1.0,0,1.0,1,1.0 -0,92.0,2,1.0,0,1.0,1,1.0 -0,93.0,1,1.0,0,1.0,1,1.0 -0,93.0,2,1.0,0,1.0,1,1.0 -0,94.0,1,1.0,0,1.0,1,1.0 -0,94.0,2,1.0,0,1.0,1,1.0 -0,95.0,1,1.0,0,1.0,1,1.0 -0,95.0,2,1.0,0,1.0,1,1.0 -0,96.0,1,1.0,0,1.0,1,1.0 -0,96.0,2,1.0,0,1.0,1,1.0 -0,97.0,1,1.0,0,1.0,1,1.0 -0,97.0,2,1.0,0,1.0,1,1.0 -0,98.0,1,1.0,0,1.0,1,1.0 -0,98.0,2,1.0,0,1.0,1,1.0 -0,99.0,1,1.0,0,1.0,1,1.0 -0,99.0,2,1.0,0,1.0,1,1.0 -0,100.0,1,1.0,0,1.0,1,1.0 -0,100.0,2,1.0,0,1.0,1,1.0 -0,101.0,1,1.0,0,1.0,1,1.0 -0,101.0,2,1.0,0,1.0,1,1.0 -0,102.0,1,1.0,0,1.0,1,1.0 -0,102.0,2,1.0,0,1.0,1,1.0 -0,103.0,1,1.0,0,1.0,1,1.0 -0,103.0,2,1.0,0,1.0,1,1.0 -0,104.0,1,1.0,0,1.0,1,1.0 -0,104.0,2,1.0,0,1.0,1,1.0 -0,105.0,1,1.0,0,1.0,1,1.0 -0,105.0,2,1.0,0,1.0,1,1.0 -0,106.0,1,1.0,0,1.0,1,1.0 -0,106.0,2,1.0,0,1.0,1,1.0 -0,107.0,1,1.0,0,1.0,1,1.0 -0,107.0,2,1.0,0,1.0,1,1.0 -0,108.0,1,1.0,0,1.0,1,1.0 -0,108.0,2,1.0,0,1.0,1,1.0 -0,109.0,1,1.0,0,1.0,1,1.0 -0,109.0,2,1.0,0,1.0,1,1.0 -0,110.0,1,1.0,0,1.0,1,1.0 -0,110.0,2,1.0,0,1.0,1,1.0 -0,111.0,1,1.0,0,1.0,1,1.0 -0,111.0,2,1.0,0,1.0,1,1.0 -0,112.0,1,1.0,0,1.0,1,1.0 -0,112.0,2,1.0,0,1.0,1,1.0 -0,113.0,1,1.0,0,1.0,1,1.0 -0,113.0,2,1.0,0,1.0,1,1.0 -0,114.0,1,1.0,0,1.0,1,1.0 -0,114.0,2,1.0,0,1.0,1,1.0 -0,115.0,1,1.0,0,1.0,1,1.0 -0,115.0,2,1.0,0,1.0,1,1.0 -0,116.0,1,1.0,0,1.0,1,1.0 -0,116.0,2,1.0,0,1.0,1,1.0 -0,117.0,1,1.0,0,1.0,1,1.0 -0,117.0,2,1.0,0,1.0,1,1.0 -0,118.0,1,1.0,0,1.0,1,1.0 -0,118.0,2,1.0,0,1.0,1,1.0 -0,119.0,1,1.0,0,1.0,1,1.0 -0,119.0,2,1.0,0,1.0,1,1.0 -0,120.0,1,1.0,0,1.0,1,1.0 -0,120.0,2,1.0,0,1.0,1,1.0 -0,121.0,1,1.0,0,1.0,1,1.0 -0,121.0,2,1.0,0,1.0,1,1.0 -0,122.0,1,1.0,0,1.0,1,1.0 -0,122.0,2,1.0,0,1.0,1,1.0 -0,123.0,1,1.0,0,1.0,1,1.0 -0,123.0,2,1.0,0,1.0,1,1.0 -0,124.0,1,1.0,0,1.0,1,1.0 -0,124.0,2,1.0,0,1.0,1,1.0 -0,125.0,1,1.0,0,1.0,1,1.0 -0,125.0,2,1.0,0,1.0,1,1.0 -0,126.0,1,1.0,0,1.0,1,1.0 -0,126.0,2,1.0,0,1.0,1,1.0 -0,127.0,1,1.0,0,1.0,1,1.0 -0,127.0,2,1.0,0,1.0,1,1.0 -0,128.0,1,1.0,0,1.0,1,1.0 -0,128.0,2,1.0,0,1.0,1,1.0 -0,129.0,1,1.0,0,1.0,1,1.0 -0,129.0,2,1.0,0,1.0,1,1.0 -0,130.0,1,1.0,0,1.0,1,1.0 -0,130.0,2,1.0,0,1.0,1,1.0 -0,131.0,1,1.0,0,1.0,1,1.0 -0,131.0,2,1.0,0,1.0,1,1.0 -0,132.0,1,1.0,0,1.0,1,1.0 -0,132.0,2,1.0,0,1.0,1,1.0 -0,133.0,1,1.0,0,1.0,1,1.0 -0,133.0,2,1.0,0,1.0,1,1.0 -0,134.0,1,1.0,0,1.0,1,1.0 -0,134.0,2,1.0,0,1.0,1,1.0 -0,135.0,1,1.0,0,1.0,1,1.0 -0,135.0,2,1.0,0,1.0,1,1.0 -0,136.0,1,1.0,0,1.0,1,1.0 -0,136.0,2,1.0,0,1.0,1,1.0 -0,137.0,1,1.0,0,1.0,1,1.0 -0,137.0,2,1.0,0,1.0,1,1.0 -0,138.0,1,1.0,0,1.0,1,1.0 -0,138.0,2,1.0,0,1.0,1,1.0 -0,139.0,1,1.0,0,1.0,1,1.0 -0,139.0,2,1.0,0,1.0,1,1.0 -0,140.0,1,1.0,0,1.0,1,1.0 -0,140.0,2,1.0,0,1.0,1,1.0 -0,141.0,1,1.0,0,1.0,1,1.0 -0,141.0,2,1.0,0,1.0,1,1.0 -0,142.0,1,1.0,0,1.0,1,1.0 -0,142.0,2,1.0,0,1.0,1,1.0 -0,143.0,1,1.0,0,1.0,1,1.0 -0,143.0,2,1.0,0,1.0,1,1.0 -0,144.0,1,1.0,0,1.0,1,1.0 -0,144.0,2,1.0,0,1.0,1,1.0 -0,145.0,1,1.0,0,1.0,1,1.0 -0,145.0,2,1.0,0,1.0,1,1.0 -0,146.0,1,1.0,0,1.0,1,1.0 -0,146.0,2,1.0,0,1.0,1,1.0 -0,147.0,1,1.0,0,1.0,1,1.0 -0,147.0,2,1.0,0,1.0,1,1.0 -0,148.0,1,1.0,0,1.0,1,1.0 -0,148.0,2,1.0,0,1.0,1,1.0 -0,149.0,1,1.0,0,1.0,1,1.0 -0,149.0,2,1.0,0,1.0,1,1.0 -0,150.0,1,1.0,0,1.0,1,1.0 -0,150.0,2,1.0,0,1.0,1,1.0 -0,151.0,1,1.0,0,1.0,1,1.0 -0,151.0,2,1.0,0,1.0,1,1.0 -0,152.0,1,1.0,0,1.0,1,1.0 -0,152.0,2,1.0,0,1.0,1,1.0 -0,153.0,1,1.0,0,1.0,1,1.0 -0,153.0,2,1.0,0,1.0,1,1.0 -0,154.0,1,1.0,0,1.0,1,1.0 -0,154.0,2,1.0,0,1.0,1,1.0 -0,155.0,1,1.0,0,1.0,1,1.0 -0,155.0,2,1.0,0,1.0,1,1.0 -0,156.0,1,1.0,0,1.0,1,1.0 -0,156.0,2,1.0,0,1.0,1,1.0 -0,157.0,1,1.0,0,1.0,1,1.0 -0,157.0,2,1.0,0,1.0,1,1.0 -0,158.0,1,1.0,0,1.0,1,1.0 -0,158.0,2,1.0,0,1.0,1,1.0 -0,159.0,1,1.0,0,1.0,1,1.0 -0,159.0,2,1.0,0,1.0,1,1.0 -0,160.0,1,1.0,0,1.0,1,1.0 -0,160.0,2,1.0,0,1.0,1,1.0 -0,161.0,1,1.0,0,1.0,1,1.0 -0,161.0,2,1.0,0,1.0,1,1.0 -0,162.0,1,1.0,0,1.0,1,1.0 -0,162.0,2,1.0,0,1.0,1,1.0 -0,163.0,1,1.0,0,1.0,1,1.0 -0,163.0,2,1.0,0,1.0,1,1.0 -0,164.0,1,1.0,0,1.0,1,1.0 -0,164.0,2,1.0,0,1.0,1,1.0 -0,165.0,1,1.0,0,1.0,1,1.0 -0,165.0,2,1.0,0,1.0,1,1.0 -0,166.0,1,1.0,0,1.0,1,1.0 -0,166.0,2,1.0,0,1.0,1,1.0 -0,167.0,1,1.0,0,1.0,1,1.0 -0,167.0,2,1.0,0,1.0,1,1.0 -0,168.0,1,1.0,0,1.0,1,1.0 -0,168.0,2,1.0,0,1.0,1,1.0 -0,169.0,1,1.0,0,1.0,1,1.0 -0,169.0,2,1.0,0,1.0,1,1.0 -0,170.0,1,1.0,0,1.0,1,1.0 -0,170.0,2,1.0,0,1.0,1,1.0 -0,171.0,1,1.0,0,1.0,1,1.0 -0,171.0,2,1.0,0,1.0,1,1.0 -0,172.0,1,1.0,0,1.0,1,1.0 -0,172.0,2,1.0,0,1.0,1,1.0 -0,173.0,1,1.0,0,1.0,1,1.0 -0,173.0,2,1.0,0,1.0,1,1.0 -0,174.0,1,1.0,0,1.0,1,1.0 -0,174.0,2,1.0,0,1.0,1,1.0 -0,175.0,1,1.0,0,1.0,1,1.0 -0,175.0,2,1.0,0,1.0,1,1.0 -0,176.0,1,1.0,0,1.0,1,1.0 -0,176.0,2,1.0,0,1.0,1,1.0 -0,177.0,1,1.0,0,1.0,1,1.0 -0,177.0,2,1.0,0,1.0,1,1.0 -0,178.0,1,1.0,0,1.0,1,1.0 -0,178.0,2,1.0,0,1.0,1,1.0 -0,179.0,1,1.0,0,1.0,1,1.0 -0,179.0,2,1.0,0,1.0,1,1.0 -0,180.0,1,1.0,0,1.0,1,1.0 -0,180.0,2,1.0,0,1.0,1,1.0 -0,181.0,1,1.0,0,1.0,1,1.0 -0,181.0,2,1.0,0,1.0,1,1.0 -0,182.0,1,1.0,0,1.0,1,1.0 -0,182.0,2,1.0,0,1.0,1,1.0 -0,183.0,1,1.0,0,1.0,1,1.0 -0,183.0,2,1.0,0,1.0,1,1.0 -0,184.0,1,1.0,0,1.0,1,1.0 -0,184.0,2,1.0,0,1.0,1,1.0 -0,185.0,1,1.0,0,1.0,1,1.0 -0,185.0,2,1.0,0,1.0,1,1.0 -0,186.0,1,1.0,0,1.0,1,1.0 -0,186.0,2,1.0,0,1.0,1,1.0 -0,187.0,1,1.0,0,1.0,1,1.0 -0,187.0,2,1.0,0,1.0,1,1.0 -0,188.0,1,1.0,0,1.0,1,1.0 -0,188.0,2,1.0,0,1.0,1,1.0 -0,189.0,1,1.0,0,1.0,1,1.0 -0,189.0,2,1.0,0,1.0,1,1.0 -0,190.0,1,1.0,0,1.0,1,1.0 -0,190.0,2,1.0,0,1.0,1,1.0 -0,191.0,1,1.0,0,1.0,1,1.0 -0,191.0,2,1.0,0,1.0,1,1.0 -0,192.0,1,1.0,0,1.0,1,1.0 -0,192.0,2,1.0,0,1.0,1,1.0 -0,193.0,1,1.0,0,1.0,1,1.0 -0,193.0,2,1.0,0,1.0,1,1.0 -0,194.0,1,1.0,0,1.0,1,1.0 -0,194.0,2,1.0,0,1.0,1,1.0 -0,195.0,1,1.0,0,1.0,1,1.0 -0,195.0,2,1.0,0,1.0,1,1.0 -0,196.0,1,1.0,0,1.0,1,1.0 -0,196.0,2,1.0,0,1.0,1,1.0 -0,197.0,1,1.0,0,1.0,1,1.0 -0,197.0,2,1.0,0,1.0,1,1.0 -0,198.0,1,1.0,0,1.0,1,1.0 -0,198.0,2,1.0,0,1.0,1,1.0 -0,199.0,1,1.0,0,1.0,1,1.0 -0,199.0,2,1.0,0,1.0,1,1.0 -0,200.0,1,1.0,0,1.0,1,1.0 -0,200.0,2,1.0,0,1.0,1,1.0 -0,201.0,1,1.0,0,1.0,1,1.0 -0,201.0,2,1.0,0,1.0,1,1.0 -0,202.0,1,1.0,0,1.0,1,1.0 -0,202.0,2,1.0,0,1.0,1,1.0 -0,203.0,1,1.0,0,1.0,1,1.0 -0,203.0,2,1.0,0,1.0,1,1.0 -0,204.0,1,1.0,0,1.0,1,1.0 -0,204.0,2,1.0,0,1.0,1,1.0 -0,205.0,1,1.0,0,1.0,1,1.0 -0,205.0,2,1.0,0,1.0,1,1.0 -0,206.0,1,1.0,0,1.0,1,1.0 -0,206.0,2,1.0,0,1.0,1,1.0 -0,207.0,1,1.0,0,1.0,1,1.0 -0,207.0,2,1.0,0,1.0,1,1.0 -0,208.0,1,1.0,0,1.0,1,1.0 -0,208.0,2,1.0,0,1.0,1,1.0 -0,209.0,1,1.0,0,1.0,1,1.0 -0,209.0,2,1.0,0,1.0,1,1.0 -0,210.0,1,1.0,0,1.0,1,1.0 -0,210.0,2,1.0,0,1.0,1,1.0 -0,211.0,1,1.0,0,1.0,1,1.0 -0,211.0,2,1.0,0,1.0,1,1.0 -0,212.0,1,1.0,0,1.0,1,1.0 -0,212.0,2,1.0,0,1.0,1,1.0 -0,213.0,1,1.0,0,1.0,1,1.0 -0,213.0,2,1.0,0,1.0,1,1.0 -0,214.0,1,1.0,0,1.0,1,1.0 -0,214.0,2,1.0,0,1.0,1,1.0 -0,215.0,1,1.0,0,1.0,1,1.0 -0,215.0,2,1.0,0,1.0,1,1.0 -0,216.0,1,1.0,0,1.0,1,1.0 -0,216.0,2,1.0,0,1.0,1,1.0 -0,217.0,1,1.0,0,1.0,1,1.0 -0,217.0,2,1.0,0,1.0,1,1.0 -0,218.0,1,1.0,0,1.0,1,1.0 -0,218.0,2,1.0,0,1.0,1,1.0 -0,219.0,1,1.0,0,1.0,1,1.0 -0,219.0,2,1.0,0,1.0,1,1.0 -0,220.0,1,1.0,0,1.0,1,1.0 -0,220.0,2,1.0,0,1.0,1,1.0 -0,221.0,1,1.0,0,1.0,1,1.0 -0,221.0,2,1.0,0,1.0,1,1.0 -0,222.0,1,1.0,0,1.0,1,1.0 -0,222.0,2,1.0,0,1.0,1,1.0 -0,223.0,1,1.0,0,1.0,1,1.0 -0,223.0,2,1.0,0,1.0,1,1.0 -0,224.0,1,1.0,0,1.0,1,1.0 -0,224.0,2,1.0,0,1.0,1,1.0 -0,225.0,1,1.0,0,1.0,1,1.0 -0,225.0,2,1.0,0,1.0,1,1.0 -0,226.0,1,1.0,0,1.0,1,1.0 -0,226.0,2,1.0,0,1.0,1,1.0 -0,227.0,1,1.0,0,1.0,1,1.0 -0,227.0,2,1.0,0,1.0,1,1.0 -0,228.0,1,1.0,0,1.0,1,1.0 -0,228.0,2,1.0,0,1.0,1,1.0 -0,229.0,1,1.0,0,1.0,1,1.0 -0,229.0,2,1.0,0,1.0,1,1.0 -0,230.0,1,1.0,0,1.0,1,1.0 -0,230.0,2,1.0,0,1.0,1,1.0 -0,231.0,1,1.0,0,1.0,1,1.0 -0,231.0,2,1.0,0,1.0,1,1.0 -0,232.0,1,1.0,0,1.0,1,1.0 -0,232.0,2,1.0,0,1.0,1,1.0 -0,233.0,1,1.0,0,1.0,1,1.0 -0,233.0,2,1.0,0,1.0,1,1.0 -0,234.0,1,1.0,0,1.0,1,1.0 -0,234.0,2,1.0,0,1.0,1,1.0 -0,235.0,1,1.0,0,1.0,1,1.0 -0,235.0,2,1.0,0,1.0,1,1.0 -0,236.0,1,1.0,0,1.0,1,1.0 -0,236.0,2,1.0,0,1.0,1,1.0 -0,237.0,1,1.0,0,1.0,1,1.0 -0,237.0,2,1.0,0,1.0,1,1.0 -0,238.0,1,1.0,0,1.0,1,1.0 -0,238.0,2,1.0,0,1.0,1,1.0 -0,239.0,1,1.0,0,1.0,1,1.0 -0,239.0,2,1.0,0,1.0,1,1.0 -0,240.0,1,1.0,0,1.0,1,1.0 -0,240.0,2,1.0,0,1.0,1,1.0 -0,241.0,1,1.0,0,1.0,1,1.0 -0,241.0,2,1.0,0,1.0,1,1.0 -0,242.0,1,1.0,0,1.0,1,1.0 -0,242.0,2,1.0,0,1.0,1,1.0 -0,243.0,1,1.0,0,1.0,1,1.0 -0,243.0,2,1.0,0,1.0,1,1.0 -0,244.0,1,1.0,0,1.0,1,1.0 -0,244.0,2,1.0,0,1.0,1,1.0 -0,245.0,1,1.0,0,1.0,1,1.0 -0,245.0,2,1.0,0,1.0,1,1.0 -0,246.0,1,1.0,0,1.0,1,1.0 -0,246.0,2,1.0,0,1.0,1,1.0 -0,247.0,1,1.0,0,1.0,1,1.0 -0,247.0,2,1.0,0,1.0,1,1.0 -0,248.0,1,1.0,0,1.0,1,1.0 -0,248.0,2,1.0,0,1.0,1,1.0 -0,249.0,1,1.0,0,1.0,1,1.0 -0,249.0,2,1.0,0,1.0,1,1.0 -0,250.0,1,1.0,0,1.0,1,1.0 -0,250.0,2,1.0,0,1.0,1,1.0 -0,251.0,1,1.0,0,1.0,1,1.0 -0,251.0,2,1.0,0,1.0,1,1.0 -0,252.0,1,1.0,0,1.0,1,1.0 -0,252.0,2,1.0,0,1.0,1,1.0 -0,253.0,1,1.0,0,1.0,1,1.0 -0,253.0,2,1.0,0,1.0,1,1.0 -0,254.0,1,1.0,0,1.0,1,1.0 -0,254.0,2,1.0,0,1.0,1,1.0 -0,255.0,1,1.0,0,1.0,1,1.0 -0,255.0,2,1.0,0,1.0,1,1.0 -0,256.0,1,1.0,0,1.0,1,1.0 -0,256.0,2,1.0,0,1.0,1,1.0 -0,257.0,1,1.0,0,1.0,1,1.0 -0,257.0,2,1.0,0,1.0,1,1.0 -0,258.0,1,1.0,0,1.0,1,1.0 -0,258.0,2,1.0,0,1.0,1,1.0 -0,259.0,1,1.0,0,1.0,1,1.0 -0,259.0,2,1.0,0,1.0,1,1.0 -0,260.0,1,1.0,0,1.0,1,1.0 -0,260.0,2,1.0,0,1.0,1,1.0 -0,261.0,1,1.0,0,1.0,1,1.0 -0,261.0,2,1.0,0,1.0,1,1.0 -0,262.0,1,1.0,0,1.0,1,1.0 -0,262.0,2,1.0,0,1.0,1,1.0 -0,263.0,1,1.0,0,1.0,1,1.0 -0,263.0,2,1.0,0,1.0,1,1.0 -0,264.0,1,1.0,0,1.0,1,1.0 -0,264.0,2,1.0,0,1.0,1,1.0 -0,265.0,1,1.0,0,1.0,1,1.0 -0,265.0,2,1.0,0,1.0,1,1.0 -0,266.0,1,1.0,0,1.0,1,1.0 -0,266.0,2,1.0,0,1.0,1,1.0 -0,267.0,1,1.0,0,1.0,1,1.0 -0,267.0,2,1.0,0,1.0,1,1.0 -0,268.0,1,1.0,0,1.0,1,1.0 -0,268.0,2,1.0,0,1.0,1,1.0 -0,269.0,1,1.0,0,1.0,1,1.0 -0,269.0,2,1.0,0,1.0,1,1.0 -0,270.0,1,1.0,0,1.0,1,1.0 -0,270.0,2,1.0,0,1.0,1,1.0 -0,271.0,1,1.0,0,1.0,1,1.0 -0,271.0,2,1.0,0,1.0,1,1.0 -0,272.0,1,1.0,0,1.0,1,1.0 -0,272.0,2,1.0,0,1.0,1,1.0 -0,273.0,1,1.0,0,1.0,1,1.0 -0,273.0,2,1.0,0,1.0,1,1.0 -0,274.0,1,1.0,0,1.0,1,1.0 -0,274.0,2,1.0,0,1.0,1,1.0 -0,275.0,1,1.0,0,1.0,1,1.0 -0,275.0,2,1.0,0,1.0,1,1.0 -0,276.0,1,1.0,0,1.0,1,1.0 -0,276.0,2,1.0,0,1.0,1,1.0 -0,277.0,1,1.0,0,1.0,1,1.0 -0,277.0,2,1.0,0,1.0,1,1.0 -0,278.0,1,1.0,0,1.0,1,1.0 -0,278.0,2,1.0,0,1.0,1,1.0 -0,279.0,1,1.0,0,1.0,1,1.0 -0,279.0,2,1.0,0,1.0,1,1.0 -0,280.0,1,1.0,0,1.0,1,1.0 -0,280.0,2,1.0,0,1.0,1,1.0 -0,281.0,1,1.0,0,1.0,1,1.0 -0,281.0,2,1.0,0,1.0,1,1.0 -0,282.0,1,1.0,0,1.0,1,1.0 -0,282.0,2,1.0,0,1.0,1,1.0 -0,283.0,1,1.0,0,1.0,1,1.0 -0,283.0,2,1.0,0,1.0,1,1.0 -0,284.0,1,1.0,0,1.0,1,1.0 -0,284.0,2,1.0,0,1.0,1,1.0 -0,285.0,1,1.0,0,1.0,1,1.0 -0,285.0,2,1.0,0,1.0,1,1.0 -0,286.0,1,1.0,0,1.0,1,1.0 -0,286.0,2,1.0,0,1.0,1,1.0 -0,287.0,1,1.0,0,1.0,1,1.0 -0,287.0,2,1.0,0,1.0,1,1.0 -0,288.0,1,1.0,0,1.0,1,1.0 -0,288.0,2,1.0,0,1.0,1,1.0 -0,289.0,1,1.0,0,1.0,1,1.0 -0,289.0,2,1.0,0,1.0,1,1.0 -0,290.0,1,1.0,0,1.0,1,1.0 -0,290.0,2,1.0,0,1.0,1,1.0 -0,291.0,1,1.0,0,1.0,1,1.0 -0,291.0,2,1.0,0,1.0,1,1.0 -0,292.0,1,1.0,0,1.0,1,1.0 -0,292.0,2,1.0,0,1.0,1,1.0 -0,293.0,1,1.0,0,1.0,1,1.0 -0,293.0,2,1.0,0,1.0,1,1.0 -0,294.0,1,1.0,0,1.0,1,1.0 -0,294.0,2,1.0,0,1.0,1,1.0 -0,295.0,1,1.0,0,1.0,1,1.0 -0,295.0,2,1.0,0,1.0,1,1.0 -0,296.0,1,1.0,0,1.0,1,1.0 -0,296.0,2,1.0,0,1.0,1,1.0 -0,297.0,1,1.0,0,1.0,1,1.0 -0,297.0,2,1.0,0,1.0,1,1.0 -0,298.0,1,1.0,0,1.0,1,1.0 -0,298.0,2,1.0,0,1.0,1,1.0 -0,299.0,1,1.0,0,1.0,1,1.0 -0,299.0,2,1.0,0,1.0,1,1.0 -0,300.0,1,1.0,0,1.0,1,1.0 -0,300.0,2,1.0,0,1.0,1,1.0 -0,301.0,1,1.0,0,1.0,1,1.0 -0,301.0,2,1.0,0,1.0,1,1.0 -0,302.0,1,1.0,0,1.0,1,1.0 -0,302.0,2,1.0,0,1.0,1,1.0 -0,303.0,1,1.0,0,1.0,1,1.0 -0,303.0,2,1.0,0,1.0,1,1.0 -0,304.0,1,1.0,0,1.0,1,1.0 -0,304.0,2,1.0,0,1.0,1,1.0 -0,305.0,1,1.0,0,1.0,1,1.0 -0,305.0,2,1.0,0,1.0,1,1.0 -0,306.0,1,1.0,0,1.0,1,1.0 -0,306.0,2,1.0,0,1.0,1,1.0 -0,307.0,1,1.0,0,1.0,1,1.0 -0,307.0,2,1.0,0,1.0,1,1.0 -0,308.0,1,1.0,0,1.0,1,1.0 -0,308.0,2,1.0,0,1.0,1,1.0 -0,309.0,1,1.0,0,1.0,1,1.0 -0,309.0,2,1.0,0,1.0,1,1.0 -0,310.0,1,1.0,0,1.0,1,1.0 -0,310.0,2,1.0,0,1.0,1,1.0 -0,311.0,1,1.0,0,1.0,1,1.0 -0,311.0,2,1.0,0,1.0,1,1.0 -0,312.0,1,1.0,0,1.0,1,1.0 -0,312.0,2,1.0,0,1.0,1,1.0 -0,313.0,1,1.0,0,1.0,1,1.0 -0,313.0,2,1.0,0,1.0,1,1.0 -0,314.0,1,1.0,0,1.0,1,1.0 -0,314.0,2,1.0,0,1.0,1,1.0 -0,315.0,1,1.0,0,1.0,1,1.0 -0,315.0,2,1.0,0,1.0,1,1.0 -0,316.0,1,1.0,0,1.0,1,1.0 -0,316.0,2,1.0,0,1.0,1,1.0 -0,317.0,1,1.0,0,1.0,1,1.0 -0,317.0,2,1.0,0,1.0,1,1.0 -0,318.0,1,1.0,0,1.0,1,1.0 -0,318.0,2,1.0,0,1.0,1,1.0 -0,319.0,1,1.0,0,1.0,1,1.0 -0,319.0,2,1.0,0,1.0,1,1.0 -0,320.0,1,1.0,0,1.0,1,1.0 -0,320.0,2,1.0,0,1.0,1,1.0 -0,321.0,1,1.0,0,1.0,1,1.0 -0,321.0,2,1.0,0,1.0,1,1.0 -0,322.0,1,1.0,0,1.0,1,1.0 -0,322.0,2,1.0,0,1.0,1,1.0 -0,323.0,1,1.0,0,1.0,1,1.0 -0,323.0,2,1.0,0,1.0,1,1.0 -0,324.0,1,1.0,0,1.0,1,1.0 -0,324.0,2,1.0,0,1.0,1,1.0 -0,325.0,1,1.0,0,1.0,1,1.0 -0,325.0,2,1.0,0,1.0,1,1.0 -0,326.0,1,1.0,0,1.0,1,1.0 -0,326.0,2,1.0,0,1.0,1,1.0 -0,327.0,1,1.0,0,1.0,1,1.0 -0,327.0,2,1.0,0,1.0,1,1.0 -0,328.0,1,1.0,0,1.0,1,1.0 -0,328.0,2,1.0,0,1.0,1,1.0 -0,329.0,1,1.0,0,1.0,1,1.0 -0,329.0,2,1.0,0,1.0,1,1.0 -0,330.0,1,1.0,0,1.0,1,1.0 -0,330.0,2,1.0,0,1.0,1,1.0 -0,331.0,1,1.0,0,1.0,1,1.0 -0,331.0,2,1.0,0,1.0,1,1.0 -0,332.0,1,1.0,0,1.0,1,1.0 -0,332.0,2,1.0,0,1.0,1,1.0 -0,333.0,1,1.0,0,1.0,1,1.0 -0,333.0,2,1.0,0,1.0,1,1.0 -0,334.0,1,1.0,0,1.0,1,1.0 -0,334.0,2,1.0,0,1.0,1,1.0 -0,335.0,1,1.0,0,1.0,1,1.0 -0,335.0,2,1.0,0,1.0,1,1.0 -0,336.0,1,1.0,0,1.0,1,1.0 -0,336.0,2,1.0,0,1.0,1,1.0 -0,337.0,1,1.0,0,1.0,1,1.0 -0,337.0,2,1.0,0,1.0,1,1.0 -0,338.0,1,1.0,0,1.0,1,1.0 -0,338.0,2,1.0,0,1.0,1,1.0 -0,339.0,1,1.0,0,1.0,1,1.0 -0,339.0,2,1.0,0,1.0,1,1.0 -0,340.0,1,1.0,0,1.0,1,1.0 -0,340.0,2,1.0,0,1.0,1,1.0 -0,341.0,1,1.0,0,1.0,1,1.0 -0,341.0,2,1.0,0,1.0,1,1.0 -0,342.0,1,1.0,0,1.0,1,1.0 -0,342.0,2,1.0,0,1.0,1,1.0 -0,343.0,1,1.0,0,1.0,1,1.0 -0,343.0,2,1.0,0,1.0,1,1.0 -0,344.0,1,1.0,0,1.0,1,1.0 -0,344.0,2,1.0,0,1.0,1,1.0 -0,345.0,1,1.0,0,1.0,1,1.0 -0,345.0,2,1.0,0,1.0,1,1.0 -0,346.0,1,1.0,0,1.0,1,1.0 -0,346.0,2,1.0,0,1.0,1,1.0 -0,347.0,1,1.0,0,1.0,1,1.0 -0,347.0,2,1.0,0,1.0,1,1.0 -0,348.0,1,1.0,0,1.0,1,1.0 -0,348.0,2,1.0,0,1.0,1,1.0 -0,349.0,1,1.0,0,1.0,1,1.0 -0,349.0,2,1.0,0,1.0,1,1.0 -0,350.0,1,1.0,0,1.0,1,1.0 -0,350.0,2,1.0,0,1.0,1,1.0 -0,351.0,1,1.0,0,1.0,1,1.0 -0,351.0,2,1.0,0,1.0,1,1.0 -0,352.0,1,1.0,0,1.0,1,1.0 -0,352.0,2,1.0,0,1.0,1,1.0 -0,353.0,1,1.0,0,1.0,1,1.0 -0,353.0,2,1.0,0,1.0,1,1.0 -0,354.0,1,1.0,0,1.0,1,1.0 -0,354.0,2,1.0,0,1.0,1,1.0 -0,355.0,1,1.0,0,1.0,1,1.0 -0,355.0,2,1.0,0,1.0,1,1.0 -0,356.0,1,1.0,0,1.0,1,1.0 -0,356.0,2,1.0,0,1.0,1,1.0 -0,357.0,1,1.0,0,1.0,1,1.0 -0,357.0,2,1.0,0,1.0,1,1.0 -0,358.0,1,1.0,0,1.0,1,1.0 -0,358.0,2,1.0,0,1.0,1,1.0 -0,359.0,1,1.0,0,1.0,1,1.0 -0,359.0,2,1.0,0,1.0,1,1.0 -0,360.0,1,1.0,0,1.0,1,1.0 -0,360.0,2,1.0,0,1.0,1,1.0 -0,361.0,1,1.0,0,1.0,1,1.0 -0,361.0,2,1.0,0,1.0,1,1.0 -0,362.0,1,1.0,0,1.0,1,1.0 -0,362.0,2,1.0,0,1.0,1,1.0 -0,363.0,1,1.0,0,1.0,1,1.0 -0,363.0,2,1.0,0,1.0,1,1.0 -0,364.0,1,1.0,0,1.0,1,1.0 -0,364.0,2,1.0,0,1.0,1,1.0 -0,365.0,1,1.0,0,1.0,1,1.0 -0,365.0,2,1.0,0,1.0,1,1.0 -0,366.0,1,1.0,0,1.0,1,1.0 -0,366.0,2,1.0,0,1.0,1,1.0 -0,367.0,1,1.0,0,1.0,1,1.0 -0,367.0,2,1.0,0,1.0,1,1.0 -0,368.0,1,1.0,0,1.0,1,1.0 -0,368.0,2,1.0,0,1.0,1,1.0 -0,369.0,1,1.0,0,1.0,1,1.0 -0,369.0,2,1.0,0,1.0,1,1.0 -0,370.0,1,1.0,0,1.0,1,1.0 -0,370.0,2,1.0,0,1.0,1,1.0 -0,371.0,1,1.0,0,1.0,1,1.0 -0,371.0,2,1.0,0,1.0,1,1.0 -0,372.0,1,1.0,0,1.0,1,1.0 -0,372.0,2,1.0,0,1.0,1,1.0 -0,373.0,1,1.0,0,1.0,1,1.0 -0,373.0,2,1.0,0,1.0,1,1.0 -0,374.0,1,1.0,0,1.0,1,1.0 -0,374.0,2,1.0,0,1.0,1,1.0 -0,375.0,1,1.0,0,1.0,1,1.0 -0,375.0,2,1.0,0,1.0,1,1.0 -0,376.0,1,1.0,0,1.0,1,1.0 -0,376.0,2,1.0,0,1.0,1,1.0 -0,377.0,1,1.0,0,1.0,1,1.0 -0,377.0,2,1.0,0,1.0,1,1.0 -0,378.0,1,1.0,0,1.0,1,1.0 -0,378.0,2,1.0,0,1.0,1,1.0 -0,379.0,1,1.0,0,1.0,1,1.0 -0,379.0,2,1.0,0,1.0,1,1.0 -0,380.0,1,1.0,0,1.0,1,1.0 -0,380.0,2,1.0,0,1.0,1,1.0 -0,381.0,1,1.0,0,1.0,1,1.0 -0,381.0,2,1.0,0,1.0,1,1.0 -0,382.0,1,1.0,0,1.0,1,1.0 -0,382.0,2,1.0,0,1.0,1,1.0 -0,383.0,1,1.0,0,1.0,1,1.0 -0,383.0,2,1.0,0,1.0,1,1.0 -0,384.0,1,1.0,0,1.0,1,1.0 -0,384.0,2,1.0,0,1.0,1,1.0 -0,385.0,1,1.0,0,1.0,1,1.0 -0,385.0,2,1.0,0,1.0,1,1.0 -0,386.0,1,1.0,0,1.0,1,1.0 -0,386.0,2,1.0,0,1.0,1,1.0 -0,387.0,1,1.0,0,1.0,1,1.0 -0,387.0,2,1.0,0,1.0,1,1.0 -0,388.0,1,1.0,0,1.0,1,1.0 -0,388.0,2,1.0,0,1.0,1,1.0 -0,389.0,1,1.0,0,1.0,1,1.0 -0,389.0,2,1.0,0,1.0,1,1.0 -0,390.0,1,1.0,0,1.0,1,1.0 -0,390.0,2,1.0,0,1.0,1,1.0 -0,391.0,1,1.0,0,1.0,1,1.0 -0,391.0,2,1.0,0,1.0,1,1.0 -0,392.0,1,1.0,0,1.0,1,1.0 -0,392.0,2,1.0,0,1.0,1,1.0 -0,393.0,1,1.0,0,1.0,1,1.0 -0,393.0,2,1.0,0,1.0,1,1.0 -0,394.0,1,1.0,0,1.0,1,1.0 -0,394.0,2,1.0,0,1.0,1,1.0 -0,395.0,1,1.0,0,1.0,1,1.0 -0,395.0,2,1.0,0,1.0,1,1.0 -0,396.0,1,1.0,0,1.0,1,1.0 -0,396.0,2,1.0,0,1.0,1,1.0 -0,397.0,1,1.0,0,1.0,1,1.0 -0,397.0,2,1.0,0,1.0,1,1.0 -0,398.0,1,1.0,0,1.0,1,1.0 -0,398.0,2,1.0,0,1.0,1,1.0 -0,399.0,1,1.0,0,1.0,1,1.0 -0,399.0,2,1.0,0,1.0,1,1.0 -0,400.0,1,1.0,0,1.0,1,1.0 -0,400.0,2,1.0,0,1.0,1,1.0 -0,401.0,1,1.0,0,1.0,1,1.0 -0,401.0,2,1.0,0,1.0,1,1.0 -0,402.0,1,1.0,0,1.0,1,1.0 -0,402.0,2,1.0,0,1.0,1,1.0 -0,403.0,1,1.0,0,1.0,1,1.0 -0,403.0,2,1.0,0,1.0,1,1.0 -0,404.0,1,1.0,0,1.0,1,1.0 -0,404.0,2,1.0,0,1.0,1,1.0 -0,405.0,1,1.0,0,1.0,1,1.0 -0,405.0,2,1.0,0,1.0,1,1.0 -0,406.0,1,1.0,0,1.0,1,1.0 -0,406.0,2,1.0,0,1.0,1,1.0 -0,407.0,1,1.0,0,1.0,1,1.0 -0,407.0,2,1.0,0,1.0,1,1.0 -0,408.0,1,1.0,0,1.0,1,1.0 -0,408.0,2,1.0,0,1.0,1,1.0 -0,409.0,1,1.0,0,1.0,1,1.0 -0,409.0,2,1.0,0,1.0,1,1.0 -0,410.0,1,1.0,0,1.0,1,1.0 -0,410.0,2,1.0,0,1.0,1,1.0 -0,411.0,1,1.0,0,1.0,1,1.0 -0,411.0,2,1.0,0,1.0,1,1.0 -0,412.0,1,1.0,0,1.0,1,1.0 -0,412.0,2,1.0,0,1.0,1,1.0 -0,413.0,1,1.0,0,1.0,1,1.0 -0,413.0,2,1.0,0,1.0,1,1.0 -0,414.0,1,1.0,0,1.0,1,1.0 -0,414.0,2,1.0,0,1.0,1,1.0 -0,415.0,1,1.0,0,1.0,1,1.0 -0,415.0,2,1.0,0,1.0,1,1.0 -0,416.0,1,1.0,0,1.0,1,1.0 -0,416.0,2,1.0,0,1.0,1,1.0 -0,417.0,1,1.0,0,1.0,1,1.0 -0,417.0,2,1.0,0,1.0,1,1.0 -0,418.0,1,1.0,0,1.0,1,1.0 -0,418.0,2,1.0,0,1.0,1,1.0 -0,419.0,1,1.0,0,1.0,1,1.0 -0,419.0,2,1.0,0,1.0,1,1.0 -0,420.0,1,1.0,0,1.0,1,1.0 -0,420.0,2,1.0,0,1.0,1,1.0 -0,421.0,1,1.0,0,1.0,1,1.0 -0,421.0,2,1.0,0,1.0,1,1.0 -0,422.0,1,1.0,0,1.0,1,1.0 -0,422.0,2,1.0,0,1.0,1,1.0 -0,423.0,1,1.0,0,1.0,1,1.0 -0,423.0,2,1.0,0,1.0,1,1.0 -0,424.0,1,1.0,0,1.0,1,1.0 -0,424.0,2,1.0,0,1.0,1,1.0 -0,425.0,1,1.0,0,1.0,1,1.0 -0,425.0,2,1.0,0,1.0,1,1.0 -0,426.0,1,1.0,0,1.0,1,1.0 -0,426.0,2,1.0,0,1.0,1,1.0 -0,427.0,1,1.0,0,1.0,1,1.0 -0,427.0,2,1.0,0,1.0,1,1.0 -0,428.0,1,1.0,0,1.0,1,1.0 -0,428.0,2,1.0,0,1.0,1,1.0 -0,429.0,1,1.0,0,1.0,1,1.0 -0,429.0,2,1.0,0,1.0,1,1.0 -0,430.0,1,1.0,0,1.0,1,1.0 -0,430.0,2,1.0,0,1.0,1,1.0 -0,431.0,1,1.0,0,1.0,1,1.0 -0,431.0,2,1.0,0,1.0,1,1.0 -0,432.0,1,1.0,0,1.0,1,1.0 -0,432.0,2,1.0,0,1.0,1,1.0 -0,433.0,1,1.0,0,1.0,1,1.0 -0,433.0,2,1.0,0,1.0,1,1.0 -0,434.0,1,1.0,0,1.0,1,1.0 -0,434.0,2,1.0,0,1.0,1,1.0 -0,435.0,1,1.0,0,1.0,1,1.0 -0,435.0,2,1.0,0,1.0,1,1.0 -0,436.0,1,1.0,0,1.0,1,1.0 -0,436.0,2,1.0,0,1.0,1,1.0 -0,437.0,1,1.0,0,1.0,1,1.0 -0,437.0,2,1.0,0,1.0,1,1.0 -0,438.0,1,1.0,0,1.0,1,1.0 -0,438.0,2,1.0,0,1.0,1,1.0 -0,439.0,1,1.0,0,1.0,1,1.0 -0,439.0,2,1.0,0,1.0,1,1.0 -0,440.0,1,1.0,0,1.0,1,1.0 -0,440.0,2,1.0,0,1.0,1,1.0 -0,441.0,1,1.0,0,1.0,1,1.0 -0,441.0,2,1.0,0,1.0,1,1.0 -0,442.0,1,1.0,0,1.0,1,1.0 -0,442.0,2,1.0,0,1.0,1,1.0 -0,443.0,1,1.0,0,1.0,1,1.0 -0,443.0,2,1.0,0,1.0,1,1.0 -0,444.0,1,1.0,0,1.0,1,1.0 -0,444.0,2,1.0,0,1.0,1,1.0 -0,445.0,1,1.0,0,1.0,1,1.0 -0,445.0,2,1.0,0,1.0,1,1.0 -0,446.0,1,1.0,0,1.0,1,1.0 -0,446.0,2,1.0,0,1.0,1,1.0 -0,447.0,1,1.0,0,1.0,1,1.0 -0,447.0,2,1.0,0,1.0,1,1.0 -0,448.0,1,1.0,0,1.0,1,1.0 -0,448.0,2,1.0,0,1.0,1,1.0 -0,449.0,1,1.0,0,1.0,1,1.0 -0,449.0,2,1.0,0,1.0,1,1.0 -0,450.0,1,1.0,0,1.0,1,1.0 -0,450.0,2,1.0,0,1.0,1,1.0 -0,451.0,1,1.0,0,1.0,1,1.0 -0,451.0,2,1.0,0,1.0,1,1.0 -0,452.0,1,1.0,0,1.0,1,1.0 -0,452.0,2,1.0,0,1.0,1,1.0 -0,453.0,1,1.0,0,1.0,1,1.0 -0,453.0,2,1.0,0,1.0,1,1.0 -0,454.0,1,1.0,0,1.0,1,1.0 -0,454.0,2,1.0,0,1.0,1,1.0 -0,455.0,1,1.0,0,1.0,1,1.0 -0,455.0,2,1.0,0,1.0,1,1.0 -0,456.0,1,1.0,0,1.0,1,1.0 -0,456.0,2,1.0,0,1.0,1,1.0 -0,457.0,1,1.0,0,1.0,1,1.0 -0,457.0,2,1.0,0,1.0,1,1.0 -0,458.0,1,1.0,0,1.0,1,1.0 -0,458.0,2,1.0,0,1.0,1,1.0 -0,459.0,1,1.0,0,1.0,1,1.0 -0,459.0,2,1.0,0,1.0,1,1.0 -0,460.0,1,1.0,0,1.0,1,1.0 -0,460.0,2,1.0,0,1.0,1,1.0 -0,461.0,1,1.0,0,1.0,1,1.0 -0,461.0,2,1.0,0,1.0,1,1.0 -0,462.0,1,1.0,0,1.0,1,1.0 -0,462.0,2,1.0,0,1.0,1,1.0 -0,463.0,1,1.0,0,1.0,1,1.0 -0,463.0,2,1.0,0,1.0,1,1.0 -0,464.0,1,1.0,0,1.0,1,1.0 -0,464.0,2,1.0,0,1.0,1,1.0 -0,465.0,1,1.0,0,1.0,1,1.0 -0,465.0,2,1.0,0,1.0,1,1.0 -0,466.0,1,1.0,0,1.0,1,1.0 -0,466.0,2,1.0,0,1.0,1,1.0 -0,467.0,1,1.0,0,1.0,1,1.0 -0,467.0,2,1.0,0,1.0,1,1.0 -0,468.0,1,1.0,0,1.0,1,1.0 -0,468.0,2,1.0,0,1.0,1,1.0 -0,469.0,1,1.0,0,1.0,1,1.0 -0,469.0,2,1.0,0,1.0,1,1.0 -0,470.0,1,1.0,0,1.0,1,1.0 -0,470.0,2,1.0,0,1.0,1,1.0 -0,471.0,1,1.0,0,1.0,1,1.0 -0,471.0,2,1.0,0,1.0,1,1.0 -0,472.0,1,1.0,0,1.0,1,1.0 -0,472.0,2,1.0,0,1.0,1,1.0 -0,473.0,1,1.0,0,1.0,1,1.0 -0,473.0,2,1.0,0,1.0,1,1.0 -0,474.0,1,1.0,0,1.0,1,1.0 -0,474.0,2,1.0,0,1.0,1,1.0 -0,475.0,1,1.0,0,1.0,1,1.0 -0,475.0,2,1.0,0,1.0,1,1.0 -0,476.0,1,1.0,0,1.0,1,1.0 -0,476.0,2,1.0,0,1.0,1,1.0 -0,477.0,1,1.0,0,1.0,1,1.0 -0,477.0,2,1.0,0,1.0,1,1.0 -0,478.0,1,1.0,0,1.0,1,1.0 -0,478.0,2,1.0,0,1.0,1,1.0 -0,479.0,1,1.0,0,1.0,1,1.0 -0,479.0,2,1.0,0,1.0,1,1.0 -0,480.0,1,1.0,0,1.0,1,1.0 -0,480.0,2,1.0,0,1.0,1,1.0 -0,481.0,1,1.0,0,1.0,1,1.0 -0,481.0,2,1.0,0,1.0,1,1.0 -0,482.0,1,1.0,0,1.0,1,1.0 -0,482.0,2,1.0,0,1.0,1,1.0 -0,483.0,1,1.0,0,1.0,1,1.0 -0,483.0,2,1.0,0,1.0,1,1.0 -0,484.0,1,1.0,0,1.0,1,1.0 -0,484.0,2,1.0,0,1.0,1,1.0 -0,485.0,1,1.0,0,1.0,1,1.0 -0,485.0,2,1.0,0,1.0,1,1.0 -0,486.0,1,1.0,0,1.0,1,1.0 -0,486.0,2,1.0,0,1.0,1,1.0 -0,487.0,1,1.0,0,1.0,1,1.0 -0,487.0,2,1.0,0,1.0,1,1.0 -0,488.0,1,1.0,0,1.0,1,1.0 -0,488.0,2,1.0,0,1.0,1,1.0 -0,489.0,1,1.0,0,1.0,1,1.0 -0,489.0,2,1.0,0,1.0,1,1.0 -0,490.0,1,1.0,0,1.0,1,1.0 -0,490.0,2,1.0,0,1.0,1,1.0 -0,491.0,1,1.0,0,1.0,1,1.0 -0,491.0,2,1.0,0,1.0,1,1.0 -0,492.0,1,1.0,0,1.0,1,1.0 -0,492.0,2,1.0,0,1.0,1,1.0 -0,493.0,1,1.0,0,1.0,1,1.0 -0,493.0,2,1.0,0,1.0,1,1.0 -0,494.0,1,1.0,0,1.0,1,1.0 -0,494.0,2,1.0,0,1.0,1,1.0 -0,495.0,1,1.0,0,1.0,1,1.0 -0,495.0,2,1.0,0,1.0,1,1.0 -0,496.0,1,1.0,0,1.0,1,1.0 -0,496.0,2,1.0,0,1.0,1,1.0 -0,497.0,1,1.0,0,1.0,1,1.0 -0,497.0,2,1.0,0,1.0,1,1.0 -0,498.0,1,1.0,0,1.0,1,1.0 -0,498.0,2,1.0,0,1.0,1,1.0 -0,499.0,1,1.0,0,1.0,1,1.0 -0,499.0,2,1.0,0,1.0,1,1.0 -0,500.0,1,1.0,0,1.0,1,1.0 -0,500.0,2,1.0,0,1.0,1,1.0 -0,501.0,1,1.0,0,1.0,1,1.0 -0,501.0,2,1.0,0,1.0,1,1.0 -0,502.0,1,1.0,0,1.0,1,1.0 -0,502.0,2,1.0,0,1.0,1,1.0 -0,503.0,1,1.0,0,1.0,1,1.0 -0,503.0,2,1.0,0,1.0,1,1.0 -0,504.0,1,1.0,0,1.0,1,1.0 -0,504.0,2,1.0,0,1.0,1,1.0 -0,505.0,1,1.0,0,1.0,1,1.0 -0,505.0,2,1.0,0,1.0,1,1.0 -0,506.0,1,1.0,0,1.0,1,1.0 -0,506.0,2,1.0,0,1.0,1,1.0 -0,507.0,1,1.0,0,1.0,1,1.0 -0,507.0,2,1.0,0,1.0,1,1.0 -0,508.0,1,1.0,0,1.0,1,1.0 -0,508.0,2,1.0,0,1.0,1,1.0 -0,509.0,1,1.0,0,1.0,1,1.0 -0,509.0,2,1.0,0,1.0,1,1.0 -0,510.0,1,1.0,0,1.0,1,1.0 -0,510.0,2,1.0,0,1.0,1,1.0 -0,511.0,1,1.0,0,1.0,1,1.0 -0,511.0,2,1.0,0,1.0,1,1.0 -0,512.0,1,1.0,0,1.0,1,1.0 -0,512.0,2,1.0,0,1.0,1,1.0 -0,513.0,1,1.0,0,1.0,1,1.0 -0,513.0,2,1.0,0,1.0,1,1.0 -0,514.0,1,1.0,0,1.0,1,1.0 -0,514.0,2,1.0,0,1.0,1,1.0 -0,515.0,1,1.0,0,1.0,1,1.0 -0,515.0,2,1.0,0,1.0,1,1.0 -0,516.0,1,1.0,0,1.0,1,1.0 -0,516.0,2,1.0,0,1.0,1,1.0 -0,517.0,1,1.0,0,1.0,1,1.0 -0,517.0,2,1.0,0,1.0,1,1.0 -0,518.0,1,1.0,0,1.0,1,1.0 -0,518.0,2,1.0,0,1.0,1,1.0 -0,519.0,1,1.0,0,1.0,1,1.0 -0,519.0,2,1.0,0,1.0,1,1.0 -0,520.0,1,1.0,0,1.0,1,1.0 -0,520.0,2,1.0,0,1.0,1,1.0 -0,521.0,1,1.0,0,1.0,1,1.0 -0,521.0,2,1.0,0,1.0,1,1.0 -0,522.0,1,1.0,0,1.0,1,1.0 -0,522.0,2,1.0,0,1.0,1,1.0 -0,523.0,1,1.0,0,1.0,1,1.0 -0,523.0,2,1.0,0,1.0,1,1.0 -0,524.0,1,1.0,0,1.0,1,1.0 -0,524.0,2,1.0,0,1.0,1,1.0 -0,525.0,1,1.0,0,1.0,1,1.0 -0,525.0,2,1.0,0,1.0,1,1.0 -0,526.0,1,1.0,0,1.0,1,1.0 -0,526.0,2,1.0,0,1.0,1,1.0 -0,527.0,1,1.0,0,1.0,1,1.0 -0,527.0,2,1.0,0,1.0,1,1.0 -0,528.0,1,1.0,0,1.0,1,1.0 -0,528.0,2,1.0,0,1.0,1,1.0 -0,529.0,1,1.0,0,1.0,1,1.0 -0,529.0,2,1.0,0,1.0,1,1.0 -0,530.0,1,1.0,0,1.0,1,1.0 -0,530.0,2,1.0,0,1.0,1,1.0 -0,531.0,1,1.0,0,1.0,1,1.0 -0,531.0,2,1.0,0,1.0,1,1.0 -0,532.0,1,1.0,0,1.0,1,1.0 -0,532.0,2,1.0,0,1.0,1,1.0 -0,533.0,1,1.0,0,1.0,1,1.0 -0,533.0,2,1.0,0,1.0,1,1.0 -0,534.0,1,1.0,0,1.0,1,1.0 -0,534.0,2,1.0,0,1.0,1,1.0 -0,535.0,1,1.0,0,1.0,1,1.0 -0,535.0,2,1.0,0,1.0,1,1.0 -0,536.0,1,1.0,0,1.0,1,1.0 -0,536.0,2,1.0,0,1.0,1,1.0 -0,537.0,1,1.0,0,1.0,1,1.0 -0,537.0,2,1.0,0,1.0,1,1.0 -0,538.0,1,1.0,0,1.0,1,1.0 -0,538.0,2,1.0,0,1.0,1,1.0 -0,539.0,1,1.0,0,1.0,1,1.0 -0,539.0,2,1.0,0,1.0,1,1.0 -0,540.0,1,1.0,0,1.0,1,1.0 -0,540.0,2,1.0,0,1.0,1,1.0 -0,541.0,1,1.0,0,1.0,1,1.0 -0,541.0,2,1.0,0,1.0,1,1.0 -0,542.0,1,1.0,0,1.0,1,1.0 -0,542.0,2,1.0,0,1.0,1,1.0 -0,543.0,1,1.0,0,1.0,1,1.0 -0,543.0,2,1.0,0,1.0,1,1.0 -0,544.0,1,1.0,0,1.0,1,1.0 -0,544.0,2,1.0,0,1.0,1,1.0 -0,545.0,1,1.0,0,1.0,1,1.0 -0,545.0,2,1.0,0,1.0,1,1.0 -0,546.0,1,1.0,0,1.0,1,1.0 -0,546.0,2,1.0,0,1.0,1,1.0 -0,547.0,1,1.0,0,1.0,1,1.0 -0,547.0,2,1.0,0,1.0,1,1.0 -0,548.0,1,1.0,0,1.0,1,1.0 -0,548.0,2,1.0,0,1.0,1,1.0 -0,549.0,1,1.0,0,1.0,1,1.0 -0,549.0,2,1.0,0,1.0,1,1.0 -0,550.0,1,1.0,0,1.0,1,1.0 -0,550.0,2,1.0,0,1.0,1,1.0 -0,551.0,1,1.0,0,1.0,1,1.0 -0,551.0,2,1.0,0,1.0,1,1.0 -0,552.0,1,1.0,0,1.0,1,1.0 -0,552.0,2,1.0,0,1.0,1,1.0 -0,553.0,1,1.0,0,1.0,1,1.0 -0,553.0,2,1.0,0,1.0,1,1.0 -0,554.0,1,1.0,0,1.0,1,1.0 -0,554.0,2,1.0,0,1.0,1,1.0 -0,555.0,1,1.0,0,1.0,1,1.0 -0,555.0,2,1.0,0,1.0,1,1.0 -0,556.0,1,1.0,0,1.0,1,1.0 -0,556.0,2,1.0,0,1.0,1,1.0 -0,557.0,1,1.0,0,1.0,1,1.0 -0,557.0,2,1.0,0,1.0,1,1.0 -0,558.0,1,1.0,0,1.0,1,1.0 -0,558.0,2,1.0,0,1.0,1,1.0 -0,559.0,1,1.0,0,1.0,1,1.0 -0,559.0,2,1.0,0,1.0,1,1.0 -0,560.0,1,1.0,0,1.0,1,1.0 -0,560.0,2,1.0,0,1.0,1,1.0 -0,561.0,1,1.0,0,1.0,1,1.0 -0,561.0,2,1.0,0,1.0,1,1.0 -0,562.0,1,1.0,0,1.0,1,1.0 -0,562.0,2,1.0,0,1.0,1,1.0 -0,563.0,1,1.0,0,1.0,1,1.0 -0,563.0,2,1.0,0,1.0,1,1.0 -0,564.0,1,1.0,0,1.0,1,1.0 -0,564.0,2,1.0,0,1.0,1,1.0 -0,565.0,1,1.0,0,1.0,1,1.0 -0,565.0,2,1.0,0,1.0,1,1.0 -0,566.0,1,1.0,0,1.0,1,1.0 -0,566.0,2,1.0,0,1.0,1,1.0 -0,567.0,1,1.0,0,1.0,1,1.0 -0,567.0,2,1.0,0,1.0,1,1.0 -0,568.0,1,1.0,0,1.0,1,1.0 -0,568.0,2,1.0,0,1.0,1,1.0 -0,569.0,1,1.0,0,1.0,1,1.0 -0,569.0,2,1.0,0,1.0,1,1.0 -0,570.0,1,1.0,0,1.0,1,1.0 -0,570.0,2,1.0,0,1.0,1,1.0 -0,571.0,1,1.0,0,1.0,1,1.0 -0,571.0,2,1.0,0,1.0,1,1.0 -0,572.0,1,1.0,0,1.0,1,1.0 -0,572.0,2,1.0,0,1.0,1,1.0 -0,573.0,1,1.0,0,1.0,1,1.0 -0,573.0,2,1.0,0,1.0,1,1.0 -0,574.0,1,1.0,0,1.0,1,1.0 -0,574.0,2,1.0,0,1.0,1,1.0 -0,575.0,1,1.0,0,1.0,1,1.0 -0,575.0,2,1.0,0,1.0,1,1.0 -0,576.0,1,1.0,0,1.0,1,1.0 -0,576.0,2,1.0,0,1.0,1,1.0 -0,577.0,1,1.0,0,1.0,1,1.0 -0,577.0,2,1.0,0,1.0,1,1.0 -0,578.0,1,1.0,0,1.0,1,1.0 -0,578.0,2,1.0,0,1.0,1,1.0 -0,579.0,1,1.0,0,1.0,1,1.0 -0,579.0,2,1.0,0,1.0,1,1.0 -0,580.0,1,1.0,0,1.0,1,1.0 -0,580.0,2,1.0,0,1.0,1,1.0 -0,581.0,1,1.0,0,1.0,1,1.0 -0,581.0,2,1.0,0,1.0,1,1.0 -0,582.0,1,1.0,0,1.0,1,1.0 -0,582.0,2,1.0,0,1.0,1,1.0 -0,583.0,1,1.0,0,1.0,1,1.0 -0,583.0,2,1.0,0,1.0,1,1.0 -0,584.0,1,1.0,0,1.0,1,1.0 -0,584.0,2,1.0,0,1.0,1,1.0 -0,585.0,1,1.0,0,1.0,1,1.0 -0,585.0,2,1.0,0,1.0,1,1.0 -0,586.0,1,1.0,0,1.0,1,1.0 -0,586.0,2,1.0,0,1.0,1,1.0 -0,587.0,1,1.0,0,1.0,1,1.0 -0,587.0,2,1.0,0,1.0,1,1.0 -0,588.0,1,1.0,0,1.0,1,1.0 -0,588.0,2,1.0,0,1.0,1,1.0 -0,589.0,1,1.0,0,1.0,1,1.0 -0,589.0,2,1.0,0,1.0,1,1.0 -0,590.0,1,1.0,0,1.0,1,1.0 -0,590.0,2,1.0,0,1.0,1,1.0 -0,591.0,1,1.0,0,1.0,1,1.0 -0,591.0,2,1.0,0,1.0,1,1.0 -0,592.0,1,1.0,0,1.0,1,1.0 -0,592.0,2,1.0,0,1.0,1,1.0 -0,593.0,1,1.0,0,1.0,1,1.0 -0,593.0,2,1.0,0,1.0,1,1.0 -0,594.0,1,1.0,0,1.0,1,1.0 -0,594.0,2,1.0,0,1.0,1,1.0 -0,595.0,1,1.0,0,1.0,1,1.0 -0,595.0,2,1.0,0,1.0,1,1.0 -0,596.0,1,1.0,0,1.0,1,1.0 -0,596.0,2,1.0,0,1.0,1,1.0 -0,597.0,1,1.0,0,1.0,1,1.0 -0,597.0,2,1.0,0,1.0,1,1.0 -0,598.0,1,1.0,0,1.0,1,1.0 -0,598.0,2,1.0,0,1.0,1,1.0 -0,599.0,1,1.0,0,1.0,1,1.0 -0,599.0,2,1.0,0,1.0,1,1.0 -0,600.0,1,1.0,0,1.0,1,1.0 -0,600.0,2,1.0,0,1.0,1,1.0 -0,601.0,1,1.0,0,1.0,1,1.0 -0,601.0,2,1.0,0,1.0,1,1.0 -0,602.0,1,1.0,0,1.0,1,1.0 -0,602.0,2,1.0,0,1.0,1,1.0 -0,603.0,1,1.0,0,1.0,1,1.0 -0,603.0,2,1.0,0,1.0,1,1.0 -0,604.0,1,1.0,0,1.0,1,1.0 -0,604.0,2,1.0,0,1.0,1,1.0 -0,605.0,1,1.0,0,1.0,1,1.0 -0,605.0,2,1.0,0,1.0,1,1.0 -0,606.0,1,1.0,0,1.0,1,1.0 -0,606.0,2,1.0,0,1.0,1,1.0 -0,607.0,1,1.0,0,1.0,1,1.0 -0,607.0,2,1.0,0,1.0,1,1.0 -0,608.0,1,1.0,0,1.0,1,1.0 -0,608.0,2,1.0,0,1.0,1,1.0 -0,609.0,1,1.0,0,1.0,1,1.0 -0,609.0,2,1.0,0,1.0,1,1.0 -0,610.0,1,1.0,0,1.0,1,1.0 -0,610.0,2,1.0,0,1.0,1,1.0 -0,611.0,1,1.0,0,1.0,1,1.0 -0,611.0,2,1.0,0,1.0,1,1.0 -0,612.0,1,1.0,0,1.0,1,1.0 -0,612.0,2,1.0,0,1.0,1,1.0 -0,613.0,1,1.0,0,1.0,1,1.0 -0,613.0,2,1.0,0,1.0,1,1.0 -0,614.0,1,1.0,0,1.0,1,1.0 -0,614.0,2,1.0,0,1.0,1,1.0 -0,615.0,1,1.0,0,1.0,1,1.0 -0,615.0,2,1.0,0,1.0,1,1.0 -0,616.0,1,1.0,0,1.0,1,1.0 -0,616.0,2,1.0,0,1.0,1,1.0 -0,617.0,1,1.0,0,1.0,1,1.0 -0,617.0,2,1.0,0,1.0,1,1.0 -0,618.0,1,1.0,0,1.0,1,1.0 -0,618.0,2,1.0,0,1.0,1,1.0 -0,619.0,1,1.0,0,1.0,1,1.0 -0,619.0,2,1.0,0,1.0,1,1.0 -0,620.0,1,1.0,0,1.0,1,1.0 -0,620.0,2,1.0,0,1.0,1,1.0 -0,621.0,1,1.0,0,1.0,1,1.0 -0,621.0,2,1.0,0,1.0,1,1.0 -0,622.0,1,1.0,0,1.0,1,1.0 -0,622.0,2,1.0,0,1.0,1,1.0 -0,623.0,1,1.0,0,1.0,1,1.0 -0,623.0,2,1.0,0,1.0,1,1.0 -0,624.0,1,1.0,0,1.0,1,1.0 -0,624.0,2,1.0,0,1.0,1,1.0 -0,625.0,1,1.0,0,1.0,1,1.0 -0,625.0,2,1.0,0,1.0,1,1.0 -0,626.0,1,1.0,0,1.0,1,1.0 -0,626.0,2,1.0,0,1.0,1,1.0 -0,627.0,1,1.0,0,1.0,1,1.0 -0,627.0,2,1.0,0,1.0,1,1.0 -0,628.0,1,1.0,0,1.0,1,1.0 -0,628.0,2,1.0,0,1.0,1,1.0 -0,629.0,1,1.0,0,1.0,1,1.0 -0,629.0,2,1.0,0,1.0,1,1.0 -0,630.0,1,1.0,0,1.0,1,1.0 -0,630.0,2,1.0,0,1.0,1,1.0 -0,631.0,1,1.0,0,1.0,1,1.0 -0,631.0,2,1.0,0,1.0,1,1.0 -0,632.0,1,1.0,0,1.0,1,1.0 -0,632.0,2,1.0,0,1.0,1,1.0 -0,633.0,1,1.0,0,1.0,1,1.0 -0,633.0,2,1.0,0,1.0,1,1.0 -0,634.0,1,1.0,0,1.0,1,1.0 -0,634.0,2,1.0,0,1.0,1,1.0 -0,635.0,1,1.0,0,1.0,1,1.0 -0,635.0,2,1.0,0,1.0,1,1.0 -0,636.0,1,1.0,0,1.0,1,1.0 -0,636.0,2,1.0,0,1.0,1,1.0 -0,637.0,1,1.0,0,1.0,1,1.0 -0,637.0,2,1.0,0,1.0,1,1.0 -0,638.0,1,1.0,0,1.0,1,1.0 -0,638.0,2,1.0,0,1.0,1,1.0 -0,639.0,1,1.0,0,1.0,1,1.0 -0,639.0,2,1.0,0,1.0,1,1.0 -0,640.0,1,1.0,0,1.0,1,1.0 -0,640.0,2,1.0,0,1.0,1,1.0 -0,641.0,1,1.0,0,1.0,1,1.0 -0,641.0,2,1.0,0,1.0,1,1.0 -0,642.0,1,1.0,0,1.0,1,1.0 -0,642.0,2,1.0,0,1.0,1,1.0 -0,643.0,1,1.0,0,1.0,1,1.0 -0,643.0,2,1.0,0,1.0,1,1.0 -0,644.0,1,1.0,0,1.0,1,1.0 -0,644.0,2,1.0,0,1.0,1,1.0 -0,645.0,1,1.0,0,1.0,1,1.0 -0,645.0,2,1.0,0,1.0,1,1.0 -0,646.0,1,1.0,0,1.0,1,1.0 -0,646.0,2,1.0,0,1.0,1,1.0 -0,647.0,1,1.0,0,1.0,1,1.0 -0,647.0,2,1.0,0,1.0,1,1.0 -0,648.0,1,1.0,0,1.0,1,1.0 -0,648.0,2,1.0,0,1.0,1,1.0 -0,649.0,1,1.0,0,1.0,1,1.0 -0,649.0,2,1.0,0,1.0,1,1.0 -0,650.0,1,1.0,0,1.0,1,1.0 -0,650.0,2,1.0,0,1.0,1,1.0 -0,651.0,1,1.0,0,1.0,1,1.0 -0,651.0,2,1.0,0,1.0,1,1.0 -0,652.0,1,1.0,0,1.0,1,1.0 -0,652.0,2,1.0,0,1.0,1,1.0 -0,653.0,1,1.0,0,1.0,1,1.0 -0,653.0,2,1.0,0,1.0,1,1.0 -0,654.0,1,1.0,0,1.0,1,1.0 -0,654.0,2,1.0,0,1.0,1,1.0 -0,655.0,1,1.0,0,1.0,1,1.0 -0,655.0,2,1.0,0,1.0,1,1.0 -0,656.0,1,1.0,0,1.0,1,1.0 -0,656.0,2,1.0,0,1.0,1,1.0 -0,657.0,1,1.0,0,1.0,1,1.0 -0,657.0,2,1.0,0,1.0,1,1.0 -0,658.0,1,1.0,0,1.0,1,1.0 -0,658.0,2,1.0,0,1.0,1,1.0 -0,659.0,1,1.0,0,1.0,1,1.0 -0,659.0,2,1.0,0,1.0,1,1.0 -0,660.0,1,1.0,0,1.0,1,1.0 -0,660.0,2,1.0,0,1.0,1,1.0 -0,661.0,1,1.0,0,1.0,1,1.0 -0,661.0,2,1.0,0,1.0,1,1.0 -0,662.0,1,1.0,0,1.0,1,1.0 -0,662.0,2,1.0,0,1.0,1,1.0 -0,663.0,1,1.0,0,1.0,1,1.0 -0,663.0,2,1.0,0,1.0,1,1.0 -0,664.0,1,1.0,0,1.0,1,1.0 -0,664.0,2,1.0,0,1.0,1,1.0 -0,665.0,1,1.0,0,1.0,1,1.0 -0,665.0,2,1.0,0,1.0,1,1.0 -0,666.0,1,1.0,0,1.0,1,1.0 -0,666.0,2,1.0,0,1.0,1,1.0 -0,667.0,1,1.0,0,1.0,1,1.0 -0,667.0,2,1.0,0,1.0,1,1.0 -0,668.0,1,1.0,0,1.0,1,1.0 -0,668.0,2,1.0,0,1.0,1,1.0 -0,669.0,1,1.0,0,1.0,1,1.0 -0,669.0,2,1.0,0,1.0,1,1.0 -0,670.0,1,1.0,0,1.0,1,1.0 -0,670.0,2,1.0,0,1.0,1,1.0 -0,671.0,1,1.0,0,1.0,1,1.0 -0,671.0,2,1.0,0,1.0,1,1.0 -0,672.0,1,1.0,0,1.0,1,1.0 -0,672.0,2,1.0,0,1.0,1,1.0 -0,673.0,1,1.0,0,1.0,1,1.0 -0,673.0,2,1.0,0,1.0,1,1.0 -0,674.0,1,1.0,0,1.0,1,1.0 -0,674.0,2,1.0,0,1.0,1,1.0 -0,675.0,1,1.0,0,1.0,1,1.0 -0,675.0,2,1.0,0,1.0,1,1.0 -0,676.0,1,1.0,0,1.0,1,1.0 -0,676.0,2,1.0,0,1.0,1,1.0 -0,677.0,1,1.0,0,1.0,1,1.0 -0,677.0,2,1.0,0,1.0,1,1.0 -0,678.0,1,1.0,0,1.0,1,1.0 -0,678.0,2,1.0,0,1.0,1,1.0 -0,679.0,1,1.0,0,1.0,1,1.0 -0,679.0,2,1.0,0,1.0,1,1.0 -0,680.0,1,1.0,0,1.0,1,1.0 -0,680.0,2,1.0,0,1.0,1,1.0 -0,681.0,1,1.0,0,1.0,1,1.0 -0,681.0,2,1.0,0,1.0,1,1.0 -0,682.0,1,1.0,0,1.0,1,1.0 -0,682.0,2,1.0,0,1.0,1,1.0 -0,683.0,1,1.0,0,1.0,1,1.0 -0,683.0,2,1.0,0,1.0,1,1.0 -0,684.0,1,1.0,0,1.0,1,1.0 -0,684.0,2,1.0,0,1.0,1,1.0 -0,685.0,1,1.0,0,1.0,1,1.0 -0,685.0,2,1.0,0,1.0,1,1.0 -0,686.0,1,1.0,0,1.0,1,1.0 -0,686.0,2,1.0,0,1.0,1,1.0 -0,687.0,1,1.0,0,1.0,1,1.0 -0,687.0,2,1.0,0,1.0,1,1.0 -0,688.0,1,1.0,0,1.0,1,1.0 -0,688.0,2,1.0,0,1.0,1,1.0 -0,689.0,1,1.0,0,1.0,1,1.0 -0,689.0,2,1.0,0,1.0,1,1.0 -0,690.0,1,1.0,0,1.0,1,1.0 -0,690.0,2,1.0,0,1.0,1,1.0 -0,691.0,1,1.0,0,1.0,1,1.0 -0,691.0,2,1.0,0,1.0,1,1.0 -0,692.0,1,1.0,0,1.0,1,1.0 -0,692.0,2,1.0,0,1.0,1,1.0 -0,693.0,1,1.0,0,1.0,1,1.0 -0,693.0,2,1.0,0,1.0,1,1.0 -0,694.0,1,1.0,0,1.0,1,1.0 -0,694.0,2,1.0,0,1.0,1,1.0 -0,695.0,1,1.0,0,1.0,1,1.0 -0,695.0,2,1.0,0,1.0,1,1.0 -0,696.0,1,1.0,0,1.0,1,1.0 -0,696.0,2,1.0,0,1.0,1,1.0 -0,697.0,1,1.0,0,1.0,1,1.0 -0,697.0,2,1.0,0,1.0,1,1.0 -0,698.0,1,1.0,0,1.0,1,1.0 -0,698.0,2,1.0,0,1.0,1,1.0 -0,699.0,1,1.0,0,1.0,1,1.0 -0,699.0,2,1.0,0,1.0,1,1.0 -0,700.0,1,1.0,0,1.0,1,1.0 -0,700.0,2,1.0,0,1.0,1,1.0 -0,701.0,1,1.0,0,1.0,1,1.0 -0,701.0,2,1.0,0,1.0,1,1.0 -0,702.0,1,1.0,0,1.0,1,1.0 -0,702.0,2,1.0,0,1.0,1,1.0 -0,703.0,1,1.0,0,1.0,1,1.0 -0,703.0,2,1.0,0,1.0,1,1.0 -0,704.0,1,1.0,0,1.0,1,1.0 -0,704.0,2,1.0,0,1.0,1,1.0 -0,705.0,1,1.0,0,1.0,1,1.0 -0,705.0,2,1.0,0,1.0,1,1.0 -0,706.0,1,1.0,0,1.0,1,1.0 -0,706.0,2,1.0,0,1.0,1,1.0 -0,707.0,1,1.0,0,1.0,1,1.0 -0,707.0,2,1.0,0,1.0,1,1.0 -0,708.0,1,1.0,0,1.0,1,1.0 -0,708.0,2,1.0,0,1.0,1,1.0 -0,709.0,1,1.0,0,1.0,1,1.0 -0,709.0,2,1.0,0,1.0,1,1.0 -0,710.0,1,1.0,0,1.0,1,1.0 -0,710.0,2,1.0,0,1.0,1,1.0 -0,711.0,1,1.0,0,1.0,1,1.0 -0,711.0,2,1.0,0,1.0,1,1.0 -0,712.0,1,1.0,0,1.0,1,1.0 -0,712.0,2,1.0,0,1.0,1,1.0 -0,713.0,1,1.0,0,1.0,1,1.0 -0,713.0,2,1.0,0,1.0,1,1.0 -0,714.0,1,1.0,0,1.0,1,1.0 -0,714.0,2,1.0,0,1.0,1,1.0 -0,715.0,1,1.0,0,1.0,1,1.0 -0,715.0,2,1.0,0,1.0,1,1.0 -0,716.0,1,1.0,0,1.0,1,1.0 -0,716.0,2,1.0,0,1.0,1,1.0 -0,717.0,1,1.0,0,1.0,1,1.0 -0,717.0,2,1.0,0,1.0,1,1.0 -0,718.0,1,1.0,0,1.0,1,1.0 -0,718.0,2,1.0,0,1.0,1,1.0 -0,719.0,1,1.0,0,1.0,1,1.0 -0,719.0,2,1.0,0,1.0,1,1.0 -0,720.0,1,1.0,0,1.0,1,1.0 -0,720.0,2,1.0,0,1.0,1,1.0 -0,721.0,1,1.0,0,1.0,1,1.0 -0,721.0,2,1.0,0,1.0,1,1.0 -0,722.0,1,1.0,0,1.0,1,1.0 -0,722.0,2,1.0,0,1.0,1,1.0 -0,723.0,1,1.0,0,1.0,1,1.0 -0,723.0,2,1.0,0,1.0,1,1.0 -0,724.0,1,1.0,0,1.0,1,1.0 -0,724.0,2,1.0,0,1.0,1,1.0 -0,725.0,1,1.0,0,1.0,1,1.0 -0,725.0,2,1.0,0,1.0,1,1.0 -0,726.0,1,1.0,0,1.0,1,1.0 -0,726.0,2,1.0,0,1.0,1,1.0 -0,727.0,1,1.0,0,1.0,1,1.0 -0,727.0,2,1.0,0,1.0,1,1.0 -0,728.0,1,1.0,0,1.0,1,1.0 -0,728.0,2,1.0,0,1.0,1,1.0 -0,729.0,1,1.0,0,1.0,1,1.0 -0,729.0,2,1.0,0,1.0,1,1.0 -0,730.0,1,1.0,0,1.0,1,1.0 -0,730.0,2,1.0,0,1.0,1,1.0 -0,731.0,1,1.0,0,1.0,1,1.0 -0,731.0,2,1.0,0,1.0,1,1.0 -0,732.0,1,1.0,0,1.0,1,1.0 -0,732.0,2,1.0,0,1.0,1,1.0 -0,733.0,1,1.0,0,1.0,1,1.0 -0,733.0,2,1.0,0,1.0,1,1.0 -0,734.0,1,1.0,0,1.0,1,1.0 -0,734.0,2,1.0,0,1.0,1,1.0 -0,735.0,1,1.0,0,1.0,1,1.0 -0,735.0,2,1.0,0,1.0,1,1.0 -0,736.0,1,1.0,0,1.0,1,1.0 -0,736.0,2,1.0,0,1.0,1,1.0 -0,737.0,1,1.0,0,1.0,1,1.0 -0,737.0,2,1.0,0,1.0,1,1.0 -0,738.0,1,1.0,0,1.0,1,1.0 -0,738.0,2,1.0,0,1.0,1,1.0 -0,739.0,1,1.0,0,1.0,1,1.0 -0,739.0,2,1.0,0,1.0,1,1.0 -0,740.0,1,1.0,0,1.0,1,1.0 -0,740.0,2,1.0,0,1.0,1,1.0 -0,741.0,1,1.0,0,1.0,1,1.0 -0,741.0,2,1.0,0,1.0,1,1.0 -0,742.0,1,1.0,0,1.0,1,1.0 -0,742.0,2,1.0,0,1.0,1,1.0 -0,743.0,1,1.0,0,1.0,1,1.0 -0,743.0,2,1.0,0,1.0,1,1.0 -0,744.0,1,1.0,0,1.0,1,1.0 -0,744.0,2,1.0,0,1.0,1,1.0 -0,745.0,1,1.0,0,1.0,1,1.0 -0,745.0,2,1.0,0,1.0,1,1.0 -0,746.0,1,1.0,0,1.0,1,1.0 -0,746.0,2,1.0,0,1.0,1,1.0 -0,747.0,1,1.0,0,1.0,1,1.0 -0,747.0,2,1.0,0,1.0,1,1.0 -0,748.0,1,1.0,0,1.0,1,1.0 -0,748.0,2,1.0,0,1.0,1,1.0 -0,749.0,1,1.0,0,1.0,1,1.0 -0,749.0,2,1.0,0,1.0,1,1.0 -0,750.0,1,1.0,0,1.0,1,1.0 -0,750.0,2,1.0,0,1.0,1,1.0 -0,751.0,1,1.0,0,1.0,1,1.0 -0,751.0,2,1.0,0,1.0,1,1.0 -0,752.0,1,1.0,0,1.0,1,1.0 -0,752.0,2,1.0,0,1.0,1,1.0 -0,753.0,1,1.0,0,1.0,1,1.0 -0,753.0,2,1.0,0,1.0,1,1.0 -0,754.0,1,1.0,0,1.0,1,1.0 -0,754.0,2,1.0,0,1.0,1,1.0 -0,755.0,1,1.0,0,1.0,1,1.0 -0,755.0,2,1.0,0,1.0,1,1.0 -0,756.0,1,1.0,0,1.0,1,1.0 -0,756.0,2,1.0,0,1.0,1,1.0 -0,757.0,1,1.0,0,1.0,1,1.0 -0,757.0,2,1.0,0,1.0,1,1.0 -0,758.0,1,1.0,0,1.0,1,1.0 -0,758.0,2,1.0,0,1.0,1,1.0 -0,759.0,1,1.0,0,1.0,1,1.0 -0,759.0,2,1.0,0,1.0,1,1.0 -0,760.0,1,1.0,0,1.0,1,1.0 -0,760.0,2,1.0,0,1.0,1,1.0 -0,761.0,1,1.0,0,1.0,1,1.0 -0,761.0,2,1.0,0,1.0,1,1.0 -0,762.0,1,1.0,0,1.0,1,1.0 -0,762.0,2,1.0,0,1.0,1,1.0 -0,763.0,1,1.0,0,1.0,1,1.0 -0,763.0,2,1.0,0,1.0,1,1.0 -0,764.0,1,1.0,0,1.0,1,1.0 -0,764.0,2,1.0,0,1.0,1,1.0 -0,765.0,1,1.0,0,1.0,1,1.0 -0,765.0,2,1.0,0,1.0,1,1.0 -0,766.0,1,1.0,0,1.0,1,1.0 -0,766.0,2,1.0,0,1.0,1,1.0 -0,767.0,1,1.0,0,1.0,1,1.0 -0,767.0,2,1.0,0,1.0,1,1.0 -0,768.0,1,1.0,0,1.0,1,1.0 -0,768.0,2,1.0,0,1.0,1,1.0 -0,769.0,1,1.0,0,1.0,1,1.0 -0,769.0,2,1.0,0,1.0,1,1.0 -0,770.0,1,1.0,0,1.0,1,1.0 -0,770.0,2,1.0,0,1.0,1,1.0 -0,771.0,1,1.0,0,1.0,1,1.0 -0,771.0,2,1.0,0,1.0,1,1.0 -0,772.0,1,1.0,0,1.0,1,1.0 -0,772.0,2,1.0,0,1.0,1,1.0 -0,773.0,1,1.0,0,1.0,1,1.0 -0,773.0,2,1.0,0,1.0,1,1.0 -0,774.0,1,1.0,0,1.0,1,1.0 -0,774.0,2,1.0,0,1.0,1,1.0 -0,775.0,1,1.0,0,1.0,1,1.0 -0,775.0,2,1.0,0,1.0,1,1.0 -0,776.0,1,1.0,0,1.0,1,1.0 -0,776.0,2,1.0,0,1.0,1,1.0 -0,777.0,1,1.0,0,1.0,1,1.0 -0,777.0,2,1.0,0,1.0,1,1.0 -0,778.0,1,1.0,0,1.0,1,1.0 -0,778.0,2,1.0,0,1.0,1,1.0 -0,779.0,1,1.0,0,1.0,1,1.0 -0,779.0,2,1.0,0,1.0,1,1.0 -0,780.0,1,1.0,0,1.0,1,1.0 -0,780.0,2,1.0,0,1.0,1,1.0 -0,781.0,1,1.0,0,1.0,1,1.0 -0,781.0,2,1.0,0,1.0,1,1.0 -0,782.0,1,1.0,0,1.0,1,1.0 -0,782.0,2,1.0,0,1.0,1,1.0 -0,783.0,1,1.0,0,1.0,1,1.0 -0,783.0,2,1.0,0,1.0,1,1.0 -0,784.0,1,1.0,0,1.0,1,1.0 -0,784.0,2,1.0,0,1.0,1,1.0 -0,785.0,1,1.0,0,1.0,1,1.0 -0,785.0,2,1.0,0,1.0,1,1.0 -0,786.0,1,1.0,0,1.0,1,1.0 -0,786.0,2,1.0,0,1.0,1,1.0 -0,787.0,1,1.0,0,1.0,1,1.0 -0,787.0,2,1.0,0,1.0,1,1.0 -0,788.0,1,1.0,0,1.0,1,1.0 -0,788.0,2,1.0,0,1.0,1,1.0 -0,789.0,1,1.0,0,1.0,1,1.0 -0,789.0,2,1.0,0,1.0,1,1.0 -0,790.0,1,1.0,0,1.0,1,1.0 -0,790.0,2,1.0,0,1.0,1,1.0 -0,791.0,1,1.0,0,1.0,1,1.0 -0,791.0,2,1.0,0,1.0,1,1.0 -0,792.0,1,1.0,0,1.0,1,1.0 -0,792.0,2,1.0,0,1.0,1,1.0 -0,793.0,1,1.0,0,1.0,1,1.0 -0,793.0,2,1.0,0,1.0,1,1.0 -0,794.0,1,1.0,0,1.0,1,1.0 -0,794.0,2,1.0,0,1.0,1,1.0 -0,795.0,1,1.0,0,1.0,1,1.0 -0,795.0,2,1.0,0,1.0,1,1.0 -0,796.0,1,1.0,0,1.0,1,1.0 -0,796.0,2,1.0,0,1.0,1,1.0 -0,797.0,1,1.0,0,1.0,1,1.0 -0,797.0,2,1.0,0,1.0,1,1.0 -0,798.0,1,1.0,0,1.0,1,1.0 -0,798.0,2,1.0,0,1.0,1,1.0 -0,799.0,1,1.0,0,1.0,1,1.0 -0,799.0,2,1.0,0,1.0,1,1.0 -0,800.0,1,1.0,0,1.0,1,1.0 -0,800.0,2,1.0,0,1.0,1,1.0 -0,801.0,1,1.0,0,1.0,1,1.0 -0,801.0,2,1.0,0,1.0,1,1.0 -0,802.0,1,1.0,0,1.0,1,1.0 -0,802.0,2,1.0,0,1.0,1,1.0 -0,803.0,1,1.0,0,1.0,1,1.0 -0,803.0,2,1.0,0,1.0,1,1.0 -0,804.0,1,1.0,0,1.0,1,1.0 -0,804.0,2,1.0,0,1.0,1,1.0 -0,805.0,1,1.0,0,1.0,1,1.0 -0,805.0,2,1.0,0,1.0,1,1.0 -0,806.0,1,1.0,0,1.0,1,1.0 -0,806.0,2,1.0,0,1.0,1,1.0 -0,807.0,1,1.0,0,1.0,1,1.0 -0,807.0,2,1.0,0,1.0,1,1.0 -0,808.0,1,1.0,0,1.0,1,1.0 -0,808.0,2,1.0,0,1.0,1,1.0 -0,809.0,1,1.0,0,1.0,1,1.0 -0,809.0,2,1.0,0,1.0,1,1.0 -0,810.0,1,1.0,0,1.0,1,1.0 -0,810.0,2,1.0,0,1.0,1,1.0 -0,811.0,1,1.0,0,1.0,1,1.0 -0,811.0,2,1.0,0,1.0,1,1.0 -0,812.0,1,1.0,0,1.0,1,1.0 -0,812.0,2,1.0,0,1.0,1,1.0 -0,813.0,1,1.0,0,1.0,1,1.0 -0,813.0,2,1.0,0,1.0,1,1.0 -0,814.0,1,1.0,0,1.0,1,1.0 -0,814.0,2,1.0,0,1.0,1,1.0 -0,815.0,1,1.0,0,1.0,1,1.0 -0,815.0,2,1.0,0,1.0,1,1.0 -0,816.0,1,1.0,0,1.0,1,1.0 -0,816.0,2,1.0,0,1.0,1,1.0 -0,817.0,1,1.0,0,1.0,1,1.0 -0,817.0,2,1.0,0,1.0,1,1.0 -0,818.0,1,1.0,0,1.0,1,1.0 -0,818.0,2,1.0,0,1.0,1,1.0 -0,819.0,1,1.0,0,1.0,1,1.0 -0,819.0,2,1.0,0,1.0,1,1.0 -0,820.0,1,1.0,0,1.0,1,1.0 -0,820.0,2,1.0,0,1.0,1,1.0 -0,821.0,1,1.0,0,1.0,1,1.0 -0,821.0,2,1.0,0,1.0,1,1.0 -0,822.0,1,1.0,0,1.0,1,1.0 -0,822.0,2,1.0,0,1.0,1,1.0 -0,823.0,1,1.0,0,1.0,1,1.0 -0,823.0,2,1.0,0,1.0,1,1.0 -0,824.0,1,1.0,0,1.0,1,1.0 -0,824.0,2,1.0,0,1.0,1,1.0 -0,825.0,1,1.0,0,1.0,1,1.0 -0,825.0,2,1.0,0,1.0,1,1.0 -0,826.0,1,1.0,0,1.0,1,1.0 -0,826.0,2,1.0,0,1.0,1,1.0 -0,827.0,1,1.0,0,1.0,1,1.0 -0,827.0,2,1.0,0,1.0,1,1.0 -0,828.0,1,1.0,0,1.0,1,1.0 -0,828.0,2,1.0,0,1.0,1,1.0 -0,829.0,1,1.0,0,1.0,1,1.0 -0,829.0,2,1.0,0,1.0,1,1.0 -0,830.0,1,1.0,0,1.0,1,1.0 -0,830.0,2,1.0,0,1.0,1,1.0 -0,831.0,1,1.0,0,1.0,1,1.0 -0,831.0,2,1.0,0,1.0,1,1.0 -0,832.0,1,1.0,0,1.0,1,1.0 -0,832.0,2,1.0,0,1.0,1,1.0 -0,833.0,1,1.0,0,1.0,1,1.0 -0,833.0,2,1.0,0,1.0,1,1.0 -0,834.0,1,1.0,0,1.0,1,1.0 -0,834.0,2,1.0,0,1.0,1,1.0 -0,835.0,1,1.0,0,1.0,1,1.0 -0,835.0,2,1.0,0,1.0,1,1.0 -0,836.0,1,1.0,0,1.0,1,1.0 -0,836.0,2,1.0,0,1.0,1,1.0 -0,837.0,1,1.0,0,1.0,1,1.0 -0,837.0,2,1.0,0,1.0,1,1.0 -0,838.0,1,1.0,0,1.0,1,1.0 -0,838.0,2,1.0,0,1.0,1,1.0 -0,839.0,1,1.0,0,1.0,1,1.0 -0,839.0,2,1.0,0,1.0,1,1.0 -0,840.0,1,1.0,0,1.0,1,1.0 -0,840.0,2,1.0,0,1.0,1,1.0 -0,841.0,1,1.0,0,1.0,1,1.0 -0,841.0,2,1.0,0,1.0,1,1.0 -0,842.0,1,1.0,0,1.0,1,1.0 -0,842.0,2,1.0,0,1.0,1,1.0 -0,843.0,1,1.0,0,1.0,1,1.0 -0,843.0,2,1.0,0,1.0,1,1.0 -0,844.0,1,1.0,0,1.0,1,1.0 -0,844.0,2,1.0,0,1.0,1,1.0 -0,845.0,1,1.0,0,1.0,1,1.0 -0,845.0,2,1.0,0,1.0,1,1.0 -0,846.0,1,1.0,0,1.0,1,1.0 -0,846.0,2,1.0,0,1.0,1,1.0 -0,847.0,1,1.0,0,1.0,1,1.0 -0,847.0,2,1.0,0,1.0,1,1.0 -0,848.0,1,1.0,0,1.0,1,1.0 -0,848.0,2,1.0,0,1.0,1,1.0 -0,849.0,1,1.0,0,1.0,1,1.0 -0,849.0,2,1.0,0,1.0,1,1.0 -0,850.0,1,1.0,0,1.0,1,1.0 -0,850.0,2,1.0,0,1.0,1,1.0 -0,851.0,1,1.0,0,1.0,1,1.0 -0,851.0,2,1.0,0,1.0,1,1.0 -0,852.0,1,1.0,0,1.0,1,1.0 -0,852.0,2,1.0,0,1.0,1,1.0 -0,853.0,1,1.0,0,1.0,1,1.0 -0,853.0,2,1.0,0,1.0,1,1.0 -0,854.0,1,1.0,0,1.0,1,1.0 -0,854.0,2,1.0,0,1.0,1,1.0 -0,855.0,1,1.0,0,1.0,1,1.0 -0,855.0,2,1.0,0,1.0,1,1.0 -0,856.0,1,1.0,0,1.0,1,1.0 -0,856.0,2,1.0,0,1.0,1,1.0 -0,857.0,1,1.0,0,1.0,1,1.0 -0,857.0,2,1.0,0,1.0,1,1.0 -0,858.0,1,1.0,0,1.0,1,1.0 -0,858.0,2,1.0,0,1.0,1,1.0 -0,859.0,1,1.0,0,1.0,1,1.0 -0,859.0,2,1.0,0,1.0,1,1.0 -0,860.0,1,1.0,0,1.0,1,1.0 -0,860.0,2,1.0,0,1.0,1,1.0 -0,861.0,1,1.0,0,1.0,1,1.0 -0,861.0,2,1.0,0,1.0,1,1.0 -0,862.0,1,1.0,0,1.0,1,1.0 -0,862.0,2,1.0,0,1.0,1,1.0 -0,863.0,1,1.0,0,1.0,1,1.0 -0,863.0,2,1.0,0,1.0,1,1.0 -0,864.0,1,1.0,0,1.0,1,1.0 -0,864.0,2,1.0,0,1.0,1,1.0 -0,865.0,1,1.0,0,1.0,1,1.0 -0,865.0,2,1.0,0,1.0,1,1.0 -0,866.0,1,1.0,0,1.0,1,1.0 -0,866.0,2,1.0,0,1.0,1,1.0 -0,867.0,1,1.0,0,1.0,1,1.0 -0,867.0,2,1.0,0,1.0,1,1.0 -0,868.0,1,1.0,0,1.0,1,1.0 -0,868.0,2,1.0,0,1.0,1,1.0 -0,869.0,1,1.0,0,1.0,1,1.0 -0,869.0,2,1.0,0,1.0,1,1.0 -0,870.0,1,1.0,0,1.0,1,1.0 -0,870.0,2,1.0,0,1.0,1,1.0 -0,871.0,1,1.0,0,1.0,1,1.0 -0,871.0,2,1.0,0,1.0,1,1.0 -0,872.0,1,1.0,0,1.0,1,1.0 -0,872.0,2,1.0,0,1.0,1,1.0 -0,873.0,1,1.0,0,1.0,1,1.0 -0,873.0,2,1.0,0,1.0,1,1.0 -0,874.0,1,1.0,0,1.0,1,1.0 -0,874.0,2,1.0,0,1.0,1,1.0 -0,875.0,1,1.0,0,1.0,1,1.0 -0,875.0,2,1.0,0,1.0,1,1.0 -0,876.0,1,1.0,0,1.0,1,1.0 -0,876.0,2,1.0,0,1.0,1,1.0 -0,877.0,1,1.0,0,1.0,1,1.0 -0,877.0,2,1.0,0,1.0,1,1.0 -0,878.0,1,1.0,0,1.0,1,1.0 -0,878.0,2,1.0,0,1.0,1,1.0 -0,879.0,1,1.0,0,1.0,1,1.0 -0,879.0,2,1.0,0,1.0,1,1.0 -0,880.0,1,1.0,0,1.0,1,1.0 -0,880.0,2,1.0,0,1.0,1,1.0 -0,881.0,1,1.0,0,1.0,1,1.0 -0,881.0,2,1.0,0,1.0,1,1.0 -0,882.0,1,1.0,0,1.0,1,1.0 -0,882.0,2,1.0,0,1.0,1,1.0 -0,883.0,1,1.0,0,1.0,1,1.0 -0,883.0,2,1.0,0,1.0,1,1.0 -0,884.0,1,1.0,0,1.0,1,1.0 -0,884.0,2,1.0,0,1.0,1,1.0 -0,885.0,1,1.0,0,1.0,1,1.0 -0,885.0,2,1.0,0,1.0,1,1.0 -0,886.0,1,1.0,0,1.0,1,1.0 -0,886.0,2,1.0,0,1.0,1,1.0 -0,887.0,1,1.0,0,1.0,1,1.0 -0,887.0,2,1.0,0,1.0,1,1.0 -0,888.0,1,1.0,0,1.0,1,1.0 -0,888.0,2,1.0,0,1.0,1,1.0 -0,889.0,1,1.0,0,1.0,1,1.0 -0,889.0,2,1.0,0,1.0,1,1.0 -0,890.0,1,1.0,0,1.0,1,1.0 -0,890.0,2,1.0,0,1.0,1,1.0 -0,891.0,1,1.0,0,1.0,1,1.0 -0,891.0,2,1.0,0,1.0,1,1.0 -0,892.0,1,1.0,0,1.0,1,1.0 -0,892.0,2,1.0,0,1.0,1,1.0 -0,893.0,1,1.0,0,1.0,1,1.0 -0,893.0,2,1.0,0,1.0,1,1.0 -0,894.0,1,1.0,0,1.0,1,1.0 -0,894.0,2,1.0,0,1.0,1,1.0 -0,895.0,1,1.0,0,1.0,1,1.0 -0,895.0,2,1.0,0,1.0,1,1.0 -0,896.0,1,1.0,0,1.0,1,1.0 -0,896.0,2,1.0,0,1.0,1,1.0 -0,897.0,1,1.0,0,1.0,1,1.0 -0,897.0,2,1.0,0,1.0,1,1.0 -0,898.0,1,1.0,0,1.0,1,1.0 -0,898.0,2,1.0,0,1.0,1,1.0 -0,899.0,1,1.0,0,1.0,1,1.0 -0,899.0,2,1.0,0,1.0,1,1.0 -0,900.0,1,1.0,0,1.0,1,1.0 -0,900.0,2,1.0,0,1.0,1,1.0 -0,901.0,1,1.0,0,1.0,1,1.0 -0,901.0,2,1.0,0,1.0,1,1.0 -0,902.0,1,1.0,0,1.0,1,1.0 -0,902.0,2,1.0,0,1.0,1,1.0 -0,903.0,1,1.0,0,1.0,1,1.0 -0,903.0,2,1.0,0,1.0,1,1.0 -0,904.0,1,1.0,0,1.0,1,1.0 -0,904.0,2,1.0,0,1.0,1,1.0 -0,905.0,1,1.0,0,1.0,1,1.0 -0,905.0,2,1.0,0,1.0,1,1.0 -0,906.0,1,1.0,0,1.0,1,1.0 -0,906.0,2,1.0,0,1.0,1,1.0 -0,907.0,1,1.0,0,1.0,1,1.0 -0,907.0,2,1.0,0,1.0,1,1.0 -0,908.0,1,1.0,0,1.0,1,1.0 -0,908.0,2,1.0,0,1.0,1,1.0 -0,909.0,1,1.0,0,1.0,1,1.0 -0,909.0,2,1.0,0,1.0,1,1.0 -0,910.0,1,1.0,0,1.0,1,1.0 -0,910.0,2,1.0,0,1.0,1,1.0 -0,911.0,1,1.0,0,1.0,1,1.0 -0,911.0,2,1.0,0,1.0,1,1.0 -0,912.0,1,1.0,0,1.0,1,1.0 -0,912.0,2,1.0,0,1.0,1,1.0 -0,913.0,1,1.0,0,1.0,1,1.0 -0,913.0,2,1.0,0,1.0,1,1.0 -0,914.0,1,1.0,0,1.0,1,1.0 -0,914.0,2,1.0,0,1.0,1,1.0 -0,915.0,1,1.0,0,1.0,1,1.0 -0,915.0,2,1.0,0,1.0,1,1.0 -0,916.0,1,1.0,0,1.0,1,1.0 -0,916.0,2,1.0,0,1.0,1,1.0 -0,917.0,1,1.0,0,1.0,1,1.0 -0,917.0,2,1.0,0,1.0,1,1.0 -0,918.0,1,1.0,0,1.0,1,1.0 -0,918.0,2,1.0,0,1.0,1,1.0 -0,919.0,1,1.0,0,1.0,1,1.0 -0,919.0,2,1.0,0,1.0,1,1.0 -0,920.0,1,1.0,0,1.0,1,1.0 -0,920.0,2,1.0,0,1.0,1,1.0 -0,921.0,1,1.0,0,1.0,1,1.0 -0,921.0,2,1.0,0,1.0,1,1.0 -0,922.0,1,1.0,0,1.0,1,1.0 -0,922.0,2,1.0,0,1.0,1,1.0 -0,923.0,1,1.0,0,1.0,1,1.0 -0,923.0,2,1.0,0,1.0,1,1.0 -0,924.0,1,1.0,0,1.0,1,1.0 -0,924.0,2,1.0,0,1.0,1,1.0 -0,925.0,1,1.0,0,1.0,1,1.0 -0,925.0,2,1.0,0,1.0,1,1.0 -0,926.0,1,1.0,0,1.0,1,1.0 -0,926.0,2,1.0,0,1.0,1,1.0 -0,927.0,1,1.0,0,1.0,1,1.0 -0,927.0,2,1.0,0,1.0,1,1.0 -0,928.0,1,1.0,0,1.0,1,1.0 -0,928.0,2,1.0,0,1.0,1,1.0 -0,929.0,1,1.0,0,1.0,1,1.0 -0,929.0,2,1.0,0,1.0,1,1.0 -0,930.0,1,1.0,0,1.0,1,1.0 -0,930.0,2,1.0,0,1.0,1,1.0 -0,931.0,1,1.0,0,1.0,1,1.0 -0,931.0,2,1.0,0,1.0,1,1.0 -0,932.0,1,1.0,0,1.0,1,1.0 -0,932.0,2,1.0,0,1.0,1,1.0 -0,933.0,1,1.0,0,1.0,1,1.0 -0,933.0,2,1.0,0,1.0,1,1.0 -0,934.0,1,1.0,0,1.0,1,1.0 -0,934.0,2,1.0,0,1.0,1,1.0 -0,935.0,1,1.0,0,1.0,1,1.0 -0,935.0,2,1.0,0,1.0,1,1.0 -0,936.0,1,1.0,0,1.0,1,1.0 -0,936.0,2,1.0,0,1.0,1,1.0 -0,937.0,1,1.0,0,1.0,1,1.0 -0,937.0,2,1.0,0,1.0,1,1.0 -0,938.0,1,1.0,0,1.0,1,1.0 -0,938.0,2,1.0,0,1.0,1,1.0 -0,939.0,1,1.0,0,1.0,1,1.0 -0,939.0,2,1.0,0,1.0,1,1.0 -0,940.0,1,1.0,0,1.0,1,1.0 -0,940.0,2,1.0,0,1.0,1,1.0 -0,941.0,1,1.0,0,1.0,1,1.0 -0,941.0,2,1.0,0,1.0,1,1.0 -0,942.0,1,1.0,0,1.0,1,1.0 -0,942.0,2,1.0,0,1.0,1,1.0 -0,943.0,1,1.0,0,1.0,1,1.0 -0,943.0,2,1.0,0,1.0,1,1.0 -0,944.0,1,1.0,0,1.0,1,1.0 -0,944.0,2,1.0,0,1.0,1,1.0 -0,945.0,1,1.0,0,1.0,1,1.0 -0,945.0,2,1.0,0,1.0,1,1.0 -0,946.0,1,1.0,0,1.0,1,1.0 -0,946.0,2,1.0,0,1.0,1,1.0 -0,947.0,1,1.0,0,1.0,1,1.0 -0,947.0,2,1.0,0,1.0,1,1.0 -0,948.0,1,1.0,0,1.0,1,1.0 -0,948.0,2,1.0,0,1.0,1,1.0 -0,949.0,1,1.0,0,1.0,1,1.0 -0,949.0,2,1.0,0,1.0,1,1.0 -0,950.0,1,1.0,0,1.0,1,1.0 -0,950.0,2,1.0,0,1.0,1,1.0 -0,951.0,1,1.0,0,1.0,1,1.0 -0,951.0,2,1.0,0,1.0,1,1.0 -0,952.0,1,1.0,0,1.0,1,1.0 -0,952.0,2,1.0,0,1.0,1,1.0 -0,953.0,1,1.0,0,1.0,1,1.0 -0,953.0,2,1.0,0,1.0,1,1.0 -0,954.0,1,1.0,0,1.0,1,1.0 -0,954.0,2,1.0,0,1.0,1,1.0 -0,955.0,1,1.0,0,1.0,1,1.0 -0,955.0,2,1.0,0,1.0,1,1.0 -0,956.0,1,1.0,0,1.0,1,1.0 -0,956.0,2,1.0,0,1.0,1,1.0 -0,957.0,1,1.0,0,1.0,1,1.0 -0,957.0,2,1.0,0,1.0,1,1.0 -0,958.0,1,1.0,0,1.0,1,1.0 -0,958.0,2,1.0,0,1.0,1,1.0 -0,959.0,1,1.0,0,1.0,1,1.0 -0,959.0,2,1.0,0,1.0,1,1.0 -0,960.0,1,1.0,0,1.0,1,1.0 -0,960.0,2,1.0,0,1.0,1,1.0 -0,961.0,1,1.0,0,1.0,1,1.0 -0,961.0,2,1.0,0,1.0,1,1.0 -0,962.0,1,1.0,0,1.0,1,1.0 -0,962.0,2,1.0,0,1.0,1,1.0 -0,963.0,1,1.0,0,1.0,1,1.0 -0,963.0,2,1.0,0,1.0,1,1.0 -0,964.0,1,1.0,0,1.0,1,1.0 -0,964.0,2,1.0,0,1.0,1,1.0 -0,965.0,1,1.0,0,1.0,1,1.0 -0,965.0,2,1.0,0,1.0,1,1.0 -0,966.0,1,1.0,0,1.0,1,1.0 -0,966.0,2,1.0,0,1.0,1,1.0 -0,967.0,1,1.0,0,1.0,1,1.0 -0,967.0,2,1.0,0,1.0,1,1.0 -0,968.0,1,1.0,0,1.0,1,1.0 -0,968.0,2,1.0,0,1.0,1,1.0 -0,969.0,1,1.0,0,1.0,1,1.0 -0,969.0,2,1.0,0,1.0,1,1.0 -0,970.0,1,1.0,0,1.0,1,1.0 -0,970.0,2,1.0,0,1.0,1,1.0 -0,971.0,1,1.0,0,1.0,1,1.0 -0,971.0,2,1.0,0,1.0,1,1.0 -0,972.0,1,1.0,0,1.0,1,1.0 -0,972.0,2,1.0,0,1.0,1,1.0 -0,973.0,1,1.0,0,1.0,1,1.0 -0,973.0,2,1.0,0,1.0,1,1.0 -0,974.0,1,1.0,0,1.0,1,1.0 -0,974.0,2,1.0,0,1.0,1,1.0 -0,975.0,1,1.0,0,1.0,1,1.0 -0,975.0,2,1.0,0,1.0,1,1.0 -0,976.0,1,1.0,0,1.0,1,1.0 -0,976.0,2,1.0,0,1.0,1,1.0 -0,977.0,1,1.0,0,1.0,1,1.0 -0,977.0,2,1.0,0,1.0,1,1.0 -0,978.0,1,1.0,0,1.0,1,1.0 -0,978.0,2,1.0,0,1.0,1,1.0 -0,979.0,1,1.0,0,1.0,1,1.0 -0,979.0,2,1.0,0,1.0,1,1.0 -0,980.0,1,1.0,0,1.0,1,1.0 -0,980.0,2,1.0,0,1.0,1,1.0 -0,981.0,1,1.0,0,1.0,1,1.0 -0,981.0,2,1.0,0,1.0,1,1.0 -0,982.0,1,1.0,0,1.0,1,1.0 -0,982.0,2,1.0,0,1.0,1,1.0 -0,983.0,1,1.0,0,1.0,1,1.0 -0,983.0,2,1.0,0,1.0,1,1.0 -0,984.0,1,1.0,0,1.0,1,1.0 -0,984.0,2,1.0,0,1.0,1,1.0 -0,985.0,1,1.0,0,1.0,1,1.0 -0,985.0,2,1.0,0,1.0,1,1.0 -0,986.0,1,1.0,0,1.0,1,1.0 -0,986.0,2,1.0,0,1.0,1,1.0 -0,987.0,1,1.0,0,1.0,1,1.0 -0,987.0,2,1.0,0,1.0,1,1.0 -0,988.0,1,1.0,0,1.0,1,1.0 -0,988.0,2,1.0,0,1.0,1,1.0 -0,989.0,1,1.0,0,1.0,1,1.0 -0,989.0,2,1.0,0,1.0,1,1.0 -0,990.0,1,1.0,0,1.0,1,1.0 -0,990.0,2,1.0,0,1.0,1,1.0 -0,991.0,1,1.0,0,1.0,1,1.0 -0,991.0,2,1.0,0,1.0,1,1.0 -0,992.0,1,1.0,0,1.0,1,1.0 -0,992.0,2,1.0,0,1.0,1,1.0 -0,993.0,1,1.0,0,1.0,1,1.0 -0,993.0,2,1.0,0,1.0,1,1.0 -0,994.0,1,1.0,0,1.0,1,1.0 -0,994.0,2,1.0,0,1.0,1,1.0 -0,995.0,1,1.0,0,1.0,1,1.0 -0,995.0,2,1.0,0,1.0,1,1.0 -0,996.0,1,1.0,0,1.0,1,1.0 -0,996.0,2,1.0,0,1.0,1,1.0 -0,997.0,1,1.0,0,1.0,1,1.0 -0,997.0,2,1.0,0,1.0,1,1.0 -0,998.0,1,1.0,0,1.0,1,1.0 -0,998.0,2,1.0,0,1.0,1,1.0 -0,999.0,1,1.0,0,1.0,1,1.0 -0,999.0,2,1.0,0,1.0,1,1.0 -1,0.0,1,1.0,0,1.0,2,1.0 -1,0.0,2,1.0,0,1.0,2,1.0 -1,1.0,1,1.0,0,1.0,2,1.0 -1,1.0,2,1.0,0,1.0,2,1.0 -1,2.0,1,1.0,0,1.0,2,1.0 -1,2.0,2,1.0,0,1.0,2,1.0 -1,3.0,1,1.0,0,1.0,2,1.0 -1,3.0,2,1.0,0,1.0,2,1.0 -1,4.0,1,1.0,0,1.0,2,1.0 -1,4.0,2,1.0,0,1.0,2,1.0 -1,5.0,1,1.0,0,1.0,2,1.0 -1,5.0,2,1.0,0,1.0,2,1.0 -1,6.0,1,1.0,0,1.0,2,1.0 -1,6.0,2,1.0,0,1.0,2,1.0 -1,7.0,1,1.0,0,1.0,2,1.0 -1,7.0,2,1.0,0,1.0,2,1.0 -1,8.0,1,1.0,0,1.0,2,1.0 -1,8.0,2,1.0,0,1.0,2,1.0 -1,9.0,1,1.0,0,1.0,2,1.0 -1,9.0,2,1.0,0,1.0,2,1.0 -1,10.0,1,1.0,0,1.0,2,1.0 -1,10.0,2,1.0,0,1.0,2,1.0 -1,11.0,1,1.0,0,1.0,2,1.0 -1,11.0,2,1.0,0,1.0,2,1.0 -1,12.0,1,1.0,0,1.0,2,1.0 -1,12.0,2,1.0,0,1.0,2,1.0 -1,13.0,1,1.0,0,1.0,2,1.0 -1,13.0,2,1.0,0,1.0,2,1.0 -1,14.0,1,1.0,0,1.0,2,1.0 -1,14.0,2,1.0,0,1.0,2,1.0 -1,15.0,1,1.0,0,1.0,2,1.0 -1,15.0,2,1.0,0,1.0,2,1.0 -1,16.0,1,1.0,0,1.0,2,1.0 -1,16.0,2,1.0,0,1.0,2,1.0 -1,17.0,1,1.0,0,1.0,2,1.0 -1,17.0,2,1.0,0,1.0,2,1.0 -1,18.0,1,1.0,0,1.0,2,1.0 -1,18.0,2,1.0,0,1.0,2,1.0 -1,19.0,1,1.0,0,1.0,2,1.0 -1,19.0,2,1.0,0,1.0,2,1.0 -1,20.0,1,1.0,0,1.0,2,1.0 -1,20.0,2,1.0,0,1.0,2,1.0 -1,21.0,1,1.0,0,1.0,2,1.0 -1,21.0,2,1.0,0,1.0,2,1.0 -1,22.0,1,1.0,0,1.0,2,1.0 -1,22.0,2,1.0,0,1.0,2,1.0 -1,23.0,1,1.0,0,1.0,2,1.0 -1,23.0,2,1.0,0,1.0,2,1.0 -1,24.0,1,1.0,0,1.0,2,1.0 -1,24.0,2,1.0,0,1.0,2,1.0 -1,25.0,1,1.0,0,1.0,2,1.0 -1,25.0,2,1.0,0,1.0,2,1.0 -1,26.0,1,1.0,0,1.0,2,1.0 -1,26.0,2,1.0,0,1.0,2,1.0 -1,27.0,1,1.0,0,1.0,2,1.0 -1,27.0,2,1.0,0,1.0,2,1.0 -1,28.0,1,1.0,0,1.0,2,1.0 -1,28.0,2,1.0,0,1.0,2,1.0 -1,29.0,1,1.0,0,1.0,2,1.0 -1,29.0,2,1.0,0,1.0,2,1.0 -1,30.0,1,1.0,0,1.0,2,1.0 -1,30.0,2,1.0,0,1.0,2,1.0 -1,31.0,1,1.0,0,1.0,2,1.0 -1,31.0,2,1.0,0,1.0,2,1.0 -1,32.0,1,1.0,0,1.0,2,1.0 -1,32.0,2,1.0,0,1.0,2,1.0 -1,33.0,1,1.0,0,1.0,2,1.0 -1,33.0,2,1.0,0,1.0,2,1.0 -1,34.0,1,1.0,0,1.0,2,1.0 -1,34.0,2,1.0,0,1.0,2,1.0 -1,35.0,1,1.0,0,1.0,2,1.0 -1,35.0,2,1.0,0,1.0,2,1.0 -1,36.0,1,1.0,0,1.0,2,1.0 -1,36.0,2,1.0,0,1.0,2,1.0 -1,37.0,1,1.0,0,1.0,2,1.0 -1,37.0,2,1.0,0,1.0,2,1.0 -1,38.0,1,1.0,0,1.0,2,1.0 -1,38.0,2,1.0,0,1.0,2,1.0 -1,39.0,1,1.0,0,1.0,2,1.0 -1,39.0,2,1.0,0,1.0,2,1.0 -1,40.0,1,1.0,0,1.0,2,1.0 -1,40.0,2,1.0,0,1.0,2,1.0 -1,41.0,1,1.0,0,1.0,2,1.0 -1,41.0,2,1.0,0,1.0,2,1.0 -1,42.0,1,1.0,0,1.0,2,1.0 -1,42.0,2,1.0,0,1.0,2,1.0 -1,43.0,1,1.0,0,1.0,2,1.0 -1,43.0,2,1.0,0,1.0,2,1.0 -1,44.0,1,1.0,0,1.0,2,1.0 -1,44.0,2,1.0,0,1.0,2,1.0 -1,45.0,1,1.0,0,1.0,2,1.0 -1,45.0,2,1.0,0,1.0,2,1.0 -1,46.0,1,1.0,0,1.0,2,1.0 -1,46.0,2,1.0,0,1.0,2,1.0 -1,47.0,1,1.0,0,1.0,2,1.0 -1,47.0,2,1.0,0,1.0,2,1.0 -1,48.0,1,1.0,0,1.0,2,1.0 -1,48.0,2,1.0,0,1.0,2,1.0 -1,49.0,1,1.0,0,1.0,2,1.0 -1,49.0,2,1.0,0,1.0,2,1.0 -1,50.0,1,1.0,0,1.0,2,1.0 -1,50.0,2,1.0,0,1.0,2,1.0 -1,51.0,1,1.0,0,1.0,2,1.0 -1,51.0,2,1.0,0,1.0,2,1.0 -1,52.0,1,1.0,0,1.0,2,1.0 -1,52.0,2,1.0,0,1.0,2,1.0 -1,53.0,1,1.0,0,1.0,2,1.0 -1,53.0,2,1.0,0,1.0,2,1.0 -1,54.0,1,1.0,0,1.0,2,1.0 -1,54.0,2,1.0,0,1.0,2,1.0 -1,55.0,1,1.0,0,1.0,2,1.0 -1,55.0,2,1.0,0,1.0,2,1.0 -1,56.0,1,1.0,0,1.0,2,1.0 -1,56.0,2,1.0,0,1.0,2,1.0 -1,57.0,1,1.0,0,1.0,2,1.0 -1,57.0,2,1.0,0,1.0,2,1.0 -1,58.0,1,1.0,0,1.0,2,1.0 -1,58.0,2,1.0,0,1.0,2,1.0 -1,59.0,1,1.0,0,1.0,2,1.0 -1,59.0,2,1.0,0,1.0,2,1.0 -1,60.0,1,1.0,0,1.0,2,1.0 -1,60.0,2,1.0,0,1.0,2,1.0 -1,61.0,1,1.0,0,1.0,2,1.0 -1,61.0,2,1.0,0,1.0,2,1.0 -1,62.0,1,1.0,0,1.0,2,1.0 -1,62.0,2,1.0,0,1.0,2,1.0 -1,63.0,1,1.0,0,1.0,2,1.0 -1,63.0,2,1.0,0,1.0,2,1.0 -1,64.0,1,1.0,0,1.0,2,1.0 -1,64.0,2,1.0,0,1.0,2,1.0 -1,65.0,1,1.0,0,1.0,2,1.0 -1,65.0,2,1.0,0,1.0,2,1.0 -1,66.0,1,1.0,0,1.0,2,1.0 -1,66.0,2,1.0,0,1.0,2,1.0 -1,67.0,1,1.0,0,1.0,2,1.0 -1,67.0,2,1.0,0,1.0,2,1.0 -1,68.0,1,1.0,0,1.0,2,1.0 -1,68.0,2,1.0,0,1.0,2,1.0 -1,69.0,1,1.0,0,1.0,2,1.0 -1,69.0,2,1.0,0,1.0,2,1.0 -1,70.0,1,1.0,0,1.0,2,1.0 -1,70.0,2,1.0,0,1.0,2,1.0 -1,71.0,1,1.0,0,1.0,2,1.0 -1,71.0,2,1.0,0,1.0,2,1.0 -1,72.0,1,1.0,0,1.0,2,1.0 -1,72.0,2,1.0,0,1.0,2,1.0 -1,73.0,1,1.0,0,1.0,2,1.0 -1,73.0,2,1.0,0,1.0,2,1.0 -1,74.0,1,1.0,0,1.0,2,1.0 -1,74.0,2,1.0,0,1.0,2,1.0 -1,75.0,1,1.0,0,1.0,2,1.0 -1,75.0,2,1.0,0,1.0,2,1.0 -1,76.0,1,1.0,0,1.0,2,1.0 -1,76.0,2,1.0,0,1.0,2,1.0 -1,77.0,1,1.0,0,1.0,2,1.0 -1,77.0,2,1.0,0,1.0,2,1.0 -1,78.0,1,1.0,0,1.0,2,1.0 -1,78.0,2,1.0,0,1.0,2,1.0 -1,79.0,1,1.0,0,1.0,2,1.0 -1,79.0,2,1.0,0,1.0,2,1.0 -1,80.0,1,1.0,0,1.0,2,1.0 -1,80.0,2,1.0,0,1.0,2,1.0 -1,81.0,1,1.0,0,1.0,2,1.0 -1,81.0,2,1.0,0,1.0,2,1.0 -1,82.0,1,1.0,0,1.0,2,1.0 -1,82.0,2,1.0,0,1.0,2,1.0 -1,83.0,1,1.0,0,1.0,2,1.0 -1,83.0,2,1.0,0,1.0,2,1.0 -1,84.0,1,1.0,0,1.0,2,1.0 -1,84.0,2,1.0,0,1.0,2,1.0 -1,85.0,1,1.0,0,1.0,2,1.0 -1,85.0,2,1.0,0,1.0,2,1.0 -1,86.0,1,1.0,0,1.0,2,1.0 -1,86.0,2,1.0,0,1.0,2,1.0 -1,87.0,1,1.0,0,1.0,2,1.0 -1,87.0,2,1.0,0,1.0,2,1.0 -1,88.0,1,1.0,0,1.0,2,1.0 -1,88.0,2,1.0,0,1.0,2,1.0 -1,89.0,1,1.0,0,1.0,2,1.0 -1,89.0,2,1.0,0,1.0,2,1.0 -1,90.0,1,1.0,0,1.0,2,1.0 -1,90.0,2,1.0,0,1.0,2,1.0 -1,91.0,1,1.0,0,1.0,2,1.0 -1,91.0,2,1.0,0,1.0,2,1.0 -1,92.0,1,1.0,0,1.0,2,1.0 -1,92.0,2,1.0,0,1.0,2,1.0 -1,93.0,1,1.0,0,1.0,2,1.0 -1,93.0,2,1.0,0,1.0,2,1.0 -1,94.0,1,1.0,0,1.0,2,1.0 -1,94.0,2,1.0,0,1.0,2,1.0 -1,95.0,1,1.0,0,1.0,2,1.0 -1,95.0,2,1.0,0,1.0,2,1.0 -1,96.0,1,1.0,0,1.0,2,1.0 -1,96.0,2,1.0,0,1.0,2,1.0 -1,97.0,1,1.0,0,1.0,2,1.0 -1,97.0,2,1.0,0,1.0,2,1.0 -1,98.0,1,1.0,0,1.0,2,1.0 -1,98.0,2,1.0,0,1.0,2,1.0 -1,99.0,1,1.0,0,1.0,2,1.0 -1,99.0,2,1.0,0,1.0,2,1.0 -1,100.0,1,1.0,0,1.0,2,1.0 -1,100.0,2,1.0,0,1.0,2,1.0 -1,101.0,1,1.0,0,1.0,2,1.0 -1,101.0,2,1.0,0,1.0,2,1.0 -1,102.0,1,1.0,0,1.0,2,1.0 -1,102.0,2,1.0,0,1.0,2,1.0 -1,103.0,1,1.0,0,1.0,2,1.0 -1,103.0,2,1.0,0,1.0,2,1.0 -1,104.0,1,1.0,0,1.0,2,1.0 -1,104.0,2,1.0,0,1.0,2,1.0 -1,105.0,1,1.0,0,1.0,2,1.0 -1,105.0,2,1.0,0,1.0,2,1.0 -1,106.0,1,1.0,0,1.0,2,1.0 -1,106.0,2,1.0,0,1.0,2,1.0 -1,107.0,1,1.0,0,1.0,2,1.0 -1,107.0,2,1.0,0,1.0,2,1.0 -1,108.0,1,1.0,0,1.0,2,1.0 -1,108.0,2,1.0,0,1.0,2,1.0 -1,109.0,1,1.0,0,1.0,2,1.0 -1,109.0,2,1.0,0,1.0,2,1.0 -1,110.0,1,1.0,0,1.0,2,1.0 -1,110.0,2,1.0,0,1.0,2,1.0 -1,111.0,1,1.0,0,1.0,2,1.0 -1,111.0,2,1.0,0,1.0,2,1.0 -1,112.0,1,1.0,0,1.0,2,1.0 -1,112.0,2,1.0,0,1.0,2,1.0 -1,113.0,1,1.0,0,1.0,2,1.0 -1,113.0,2,1.0,0,1.0,2,1.0 -1,114.0,1,1.0,0,1.0,2,1.0 -1,114.0,2,1.0,0,1.0,2,1.0 -1,115.0,1,1.0,0,1.0,2,1.0 -1,115.0,2,1.0,0,1.0,2,1.0 -1,116.0,1,1.0,0,1.0,2,1.0 -1,116.0,2,1.0,0,1.0,2,1.0 -1,117.0,1,1.0,0,1.0,2,1.0 -1,117.0,2,1.0,0,1.0,2,1.0 -1,118.0,1,1.0,0,1.0,2,1.0 -1,118.0,2,1.0,0,1.0,2,1.0 -1,119.0,1,1.0,0,1.0,2,1.0 -1,119.0,2,1.0,0,1.0,2,1.0 -1,120.0,1,1.0,0,1.0,2,1.0 -1,120.0,2,1.0,0,1.0,2,1.0 -1,121.0,1,1.0,0,1.0,2,1.0 -1,121.0,2,1.0,0,1.0,2,1.0 -1,122.0,1,1.0,0,1.0,2,1.0 -1,122.0,2,1.0,0,1.0,2,1.0 -1,123.0,1,1.0,0,1.0,2,1.0 -1,123.0,2,1.0,0,1.0,2,1.0 -1,124.0,1,1.0,0,1.0,2,1.0 -1,124.0,2,1.0,0,1.0,2,1.0 -1,125.0,1,1.0,0,1.0,2,1.0 -1,125.0,2,1.0,0,1.0,2,1.0 -1,126.0,1,1.0,0,1.0,2,1.0 -1,126.0,2,1.0,0,1.0,2,1.0 -1,127.0,1,1.0,0,1.0,2,1.0 -1,127.0,2,1.0,0,1.0,2,1.0 -1,128.0,1,1.0,0,1.0,2,1.0 -1,128.0,2,1.0,0,1.0,2,1.0 -1,129.0,1,1.0,0,1.0,2,1.0 -1,129.0,2,1.0,0,1.0,2,1.0 -1,130.0,1,1.0,0,1.0,2,1.0 -1,130.0,2,1.0,0,1.0,2,1.0 -1,131.0,1,1.0,0,1.0,2,1.0 -1,131.0,2,1.0,0,1.0,2,1.0 -1,132.0,1,1.0,0,1.0,2,1.0 -1,132.0,2,1.0,0,1.0,2,1.0 -1,133.0,1,1.0,0,1.0,2,1.0 -1,133.0,2,1.0,0,1.0,2,1.0 -1,134.0,1,1.0,0,1.0,2,1.0 -1,134.0,2,1.0,0,1.0,2,1.0 -1,135.0,1,1.0,0,1.0,2,1.0 -1,135.0,2,1.0,0,1.0,2,1.0 -1,136.0,1,1.0,0,1.0,2,1.0 -1,136.0,2,1.0,0,1.0,2,1.0 -1,137.0,1,1.0,0,1.0,2,1.0 -1,137.0,2,1.0,0,1.0,2,1.0 -1,138.0,1,1.0,0,1.0,2,1.0 -1,138.0,2,1.0,0,1.0,2,1.0 -1,139.0,1,1.0,0,1.0,2,1.0 -1,139.0,2,1.0,0,1.0,2,1.0 -1,140.0,1,1.0,0,1.0,2,1.0 -1,140.0,2,1.0,0,1.0,2,1.0 -1,141.0,1,1.0,0,1.0,2,1.0 -1,141.0,2,1.0,0,1.0,2,1.0 -1,142.0,1,1.0,0,1.0,2,1.0 -1,142.0,2,1.0,0,1.0,2,1.0 -1,143.0,1,1.0,0,1.0,2,1.0 -1,143.0,2,1.0,0,1.0,2,1.0 -1,144.0,1,1.0,0,1.0,2,1.0 -1,144.0,2,1.0,0,1.0,2,1.0 -1,145.0,1,1.0,0,1.0,2,1.0 -1,145.0,2,1.0,0,1.0,2,1.0 -1,146.0,1,1.0,0,1.0,2,1.0 -1,146.0,2,1.0,0,1.0,2,1.0 -1,147.0,1,1.0,0,1.0,2,1.0 -1,147.0,2,1.0,0,1.0,2,1.0 -1,148.0,1,1.0,0,1.0,2,1.0 -1,148.0,2,1.0,0,1.0,2,1.0 -1,149.0,1,1.0,0,1.0,2,1.0 -1,149.0,2,1.0,0,1.0,2,1.0 -1,150.0,1,1.0,0,1.0,2,1.0 -1,150.0,2,1.0,0,1.0,2,1.0 -1,151.0,1,1.0,0,1.0,2,1.0 -1,151.0,2,1.0,0,1.0,2,1.0 -1,152.0,1,1.0,0,1.0,2,1.0 -1,152.0,2,1.0,0,1.0,2,1.0 -1,153.0,1,1.0,0,1.0,2,1.0 -1,153.0,2,1.0,0,1.0,2,1.0 -1,154.0,1,1.0,0,1.0,2,1.0 -1,154.0,2,1.0,0,1.0,2,1.0 -1,155.0,1,1.0,0,1.0,2,1.0 -1,155.0,2,1.0,0,1.0,2,1.0 -1,156.0,1,1.0,0,1.0,2,1.0 -1,156.0,2,1.0,0,1.0,2,1.0 -1,157.0,1,1.0,0,1.0,2,1.0 -1,157.0,2,1.0,0,1.0,2,1.0 -1,158.0,1,1.0,0,1.0,2,1.0 -1,158.0,2,1.0,0,1.0,2,1.0 -1,159.0,1,1.0,0,1.0,2,1.0 -1,159.0,2,1.0,0,1.0,2,1.0 -1,160.0,1,1.0,0,1.0,2,1.0 -1,160.0,2,1.0,0,1.0,2,1.0 -1,161.0,1,1.0,0,1.0,2,1.0 -1,161.0,2,1.0,0,1.0,2,1.0 -1,162.0,1,1.0,0,1.0,2,1.0 -1,162.0,2,1.0,0,1.0,2,1.0 -1,163.0,1,1.0,0,1.0,2,1.0 -1,163.0,2,1.0,0,1.0,2,1.0 -1,164.0,1,1.0,0,1.0,2,1.0 -1,164.0,2,1.0,0,1.0,2,1.0 -1,165.0,1,1.0,0,1.0,2,1.0 -1,165.0,2,1.0,0,1.0,2,1.0 -1,166.0,1,1.0,0,1.0,2,1.0 -1,166.0,2,1.0,0,1.0,2,1.0 -1,167.0,1,1.0,0,1.0,2,1.0 -1,167.0,2,1.0,0,1.0,2,1.0 -1,168.0,1,1.0,0,1.0,2,1.0 -1,168.0,2,1.0,0,1.0,2,1.0 -1,169.0,1,1.0,0,1.0,2,1.0 -1,169.0,2,1.0,0,1.0,2,1.0 -1,170.0,1,1.0,0,1.0,2,1.0 -1,170.0,2,1.0,0,1.0,2,1.0 -1,171.0,1,1.0,0,1.0,2,1.0 -1,171.0,2,1.0,0,1.0,2,1.0 -1,172.0,1,1.0,0,1.0,2,1.0 -1,172.0,2,1.0,0,1.0,2,1.0 -1,173.0,1,1.0,0,1.0,2,1.0 -1,173.0,2,1.0,0,1.0,2,1.0 -1,174.0,1,1.0,0,1.0,2,1.0 -1,174.0,2,1.0,0,1.0,2,1.0 -1,175.0,1,1.0,0,1.0,2,1.0 -1,175.0,2,1.0,0,1.0,2,1.0 -1,176.0,1,1.0,0,1.0,2,1.0 -1,176.0,2,1.0,0,1.0,2,1.0 -1,177.0,1,1.0,0,1.0,2,1.0 -1,177.0,2,1.0,0,1.0,2,1.0 -1,178.0,1,1.0,0,1.0,2,1.0 -1,178.0,2,1.0,0,1.0,2,1.0 -1,179.0,1,1.0,0,1.0,2,1.0 -1,179.0,2,1.0,0,1.0,2,1.0 -1,180.0,1,1.0,0,1.0,2,1.0 -1,180.0,2,1.0,0,1.0,2,1.0 -1,181.0,1,1.0,0,1.0,2,1.0 -1,181.0,2,1.0,0,1.0,2,1.0 -1,182.0,1,1.0,0,1.0,2,1.0 -1,182.0,2,1.0,0,1.0,2,1.0 -1,183.0,1,1.0,0,1.0,2,1.0 -1,183.0,2,1.0,0,1.0,2,1.0 -1,184.0,1,1.0,0,1.0,2,1.0 -1,184.0,2,1.0,0,1.0,2,1.0 -1,185.0,1,1.0,0,1.0,2,1.0 -1,185.0,2,1.0,0,1.0,2,1.0 -1,186.0,1,1.0,0,1.0,2,1.0 -1,186.0,2,1.0,0,1.0,2,1.0 -1,187.0,1,1.0,0,1.0,2,1.0 -1,187.0,2,1.0,0,1.0,2,1.0 -1,188.0,1,1.0,0,1.0,2,1.0 -1,188.0,2,1.0,0,1.0,2,1.0 -1,189.0,1,1.0,0,1.0,2,1.0 -1,189.0,2,1.0,0,1.0,2,1.0 -1,190.0,1,1.0,0,1.0,2,1.0 -1,190.0,2,1.0,0,1.0,2,1.0 -1,191.0,1,1.0,0,1.0,2,1.0 -1,191.0,2,1.0,0,1.0,2,1.0 -1,192.0,1,1.0,0,1.0,2,1.0 -1,192.0,2,1.0,0,1.0,2,1.0 -1,193.0,1,1.0,0,1.0,2,1.0 -1,193.0,2,1.0,0,1.0,2,1.0 -1,194.0,1,1.0,0,1.0,2,1.0 -1,194.0,2,1.0,0,1.0,2,1.0 -1,195.0,1,1.0,0,1.0,2,1.0 -1,195.0,2,1.0,0,1.0,2,1.0 -1,196.0,1,1.0,0,1.0,2,1.0 -1,196.0,2,1.0,0,1.0,2,1.0 -1,197.0,1,1.0,0,1.0,2,1.0 -1,197.0,2,1.0,0,1.0,2,1.0 -1,198.0,1,1.0,0,1.0,2,1.0 -1,198.0,2,1.0,0,1.0,2,1.0 -1,199.0,1,1.0,0,1.0,2,1.0 -1,199.0,2,1.0,0,1.0,2,1.0 -1,200.0,1,1.0,0,1.0,2,1.0 -1,200.0,2,1.0,0,1.0,2,1.0 -1,201.0,1,1.0,0,1.0,2,1.0 -1,201.0,2,1.0,0,1.0,2,1.0 -1,202.0,1,1.0,0,1.0,2,1.0 -1,202.0,2,1.0,0,1.0,2,1.0 -1,203.0,1,1.0,0,1.0,2,1.0 -1,203.0,2,1.0,0,1.0,2,1.0 -1,204.0,1,1.0,0,1.0,2,1.0 -1,204.0,2,1.0,0,1.0,2,1.0 -1,205.0,1,1.0,0,1.0,2,1.0 -1,205.0,2,1.0,0,1.0,2,1.0 -1,206.0,1,1.0,0,1.0,2,1.0 -1,206.0,2,1.0,0,1.0,2,1.0 -1,207.0,1,1.0,0,1.0,2,1.0 -1,207.0,2,1.0,0,1.0,2,1.0 -1,208.0,1,1.0,0,1.0,2,1.0 -1,208.0,2,1.0,0,1.0,2,1.0 -1,209.0,1,1.0,0,1.0,2,1.0 -1,209.0,2,1.0,0,1.0,2,1.0 -1,210.0,1,1.0,0,1.0,2,1.0 -1,210.0,2,1.0,0,1.0,2,1.0 -1,211.0,1,1.0,0,1.0,2,1.0 -1,211.0,2,1.0,0,1.0,2,1.0 -1,212.0,1,1.0,0,1.0,2,1.0 -1,212.0,2,1.0,0,1.0,2,1.0 -1,213.0,1,1.0,0,1.0,2,1.0 -1,213.0,2,1.0,0,1.0,2,1.0 -1,214.0,1,1.0,0,1.0,2,1.0 -1,214.0,2,1.0,0,1.0,2,1.0 -1,215.0,1,1.0,0,1.0,2,1.0 -1,215.0,2,1.0,0,1.0,2,1.0 -1,216.0,1,1.0,0,1.0,2,1.0 -1,216.0,2,1.0,0,1.0,2,1.0 -1,217.0,1,1.0,0,1.0,2,1.0 -1,217.0,2,1.0,0,1.0,2,1.0 -1,218.0,1,1.0,0,1.0,2,1.0 -1,218.0,2,1.0,0,1.0,2,1.0 -1,219.0,1,1.0,0,1.0,2,1.0 -1,219.0,2,1.0,0,1.0,2,1.0 -1,220.0,1,1.0,0,1.0,2,1.0 -1,220.0,2,1.0,0,1.0,2,1.0 -1,221.0,1,1.0,0,1.0,2,1.0 -1,221.0,2,1.0,0,1.0,2,1.0 -1,222.0,1,1.0,0,1.0,2,1.0 -1,222.0,2,1.0,0,1.0,2,1.0 -1,223.0,1,1.0,0,1.0,2,1.0 -1,223.0,2,1.0,0,1.0,2,1.0 -1,224.0,1,1.0,0,1.0,2,1.0 -1,224.0,2,1.0,0,1.0,2,1.0 -1,225.0,1,1.0,0,1.0,2,1.0 -1,225.0,2,1.0,0,1.0,2,1.0 -1,226.0,1,1.0,0,1.0,2,1.0 -1,226.0,2,1.0,0,1.0,2,1.0 -1,227.0,1,1.0,0,1.0,2,1.0 -1,227.0,2,1.0,0,1.0,2,1.0 -1,228.0,1,1.0,0,1.0,2,1.0 -1,228.0,2,1.0,0,1.0,2,1.0 -1,229.0,1,1.0,0,1.0,2,1.0 -1,229.0,2,1.0,0,1.0,2,1.0 -1,230.0,1,1.0,0,1.0,2,1.0 -1,230.0,2,1.0,0,1.0,2,1.0 -1,231.0,1,1.0,0,1.0,2,1.0 -1,231.0,2,1.0,0,1.0,2,1.0 -1,232.0,1,1.0,0,1.0,2,1.0 -1,232.0,2,1.0,0,1.0,2,1.0 -1,233.0,1,1.0,0,1.0,2,1.0 -1,233.0,2,1.0,0,1.0,2,1.0 -1,234.0,1,1.0,0,1.0,2,1.0 -1,234.0,2,1.0,0,1.0,2,1.0 -1,235.0,1,1.0,0,1.0,2,1.0 -1,235.0,2,1.0,0,1.0,2,1.0 -1,236.0,1,1.0,0,1.0,2,1.0 -1,236.0,2,1.0,0,1.0,2,1.0 -1,237.0,1,1.0,0,1.0,2,1.0 -1,237.0,2,1.0,0,1.0,2,1.0 -1,238.0,1,1.0,0,1.0,2,1.0 -1,238.0,2,1.0,0,1.0,2,1.0 -1,239.0,1,1.0,0,1.0,2,1.0 -1,239.0,2,1.0,0,1.0,2,1.0 -1,240.0,1,1.0,0,1.0,2,1.0 -1,240.0,2,1.0,0,1.0,2,1.0 -1,241.0,1,1.0,0,1.0,2,1.0 -1,241.0,2,1.0,0,1.0,2,1.0 -1,242.0,1,1.0,0,1.0,2,1.0 -1,242.0,2,1.0,0,1.0,2,1.0 -1,243.0,1,1.0,0,1.0,2,1.0 -1,243.0,2,1.0,0,1.0,2,1.0 -1,244.0,1,1.0,0,1.0,2,1.0 -1,244.0,2,1.0,0,1.0,2,1.0 -1,245.0,1,1.0,0,1.0,2,1.0 -1,245.0,2,1.0,0,1.0,2,1.0 -1,246.0,1,1.0,0,1.0,2,1.0 -1,246.0,2,1.0,0,1.0,2,1.0 -1,247.0,1,1.0,0,1.0,2,1.0 -1,247.0,2,1.0,0,1.0,2,1.0 -1,248.0,1,1.0,0,1.0,2,1.0 -1,248.0,2,1.0,0,1.0,2,1.0 -1,249.0,1,1.0,0,1.0,2,1.0 -1,249.0,2,1.0,0,1.0,2,1.0 -1,250.0,1,1.0,0,1.0,2,1.0 -1,250.0,2,1.0,0,1.0,2,1.0 -1,251.0,1,1.0,0,1.0,2,1.0 -1,251.0,2,1.0,0,1.0,2,1.0 -1,252.0,1,1.0,0,1.0,2,1.0 -1,252.0,2,1.0,0,1.0,2,1.0 -1,253.0,1,1.0,0,1.0,2,1.0 -1,253.0,2,1.0,0,1.0,2,1.0 -1,254.0,1,1.0,0,1.0,2,1.0 -1,254.0,2,1.0,0,1.0,2,1.0 -1,255.0,1,1.0,0,1.0,2,1.0 -1,255.0,2,1.0,0,1.0,2,1.0 -1,256.0,1,1.0,0,1.0,2,1.0 -1,256.0,2,1.0,0,1.0,2,1.0 -1,257.0,1,1.0,0,1.0,2,1.0 -1,257.0,2,1.0,0,1.0,2,1.0 -1,258.0,1,1.0,0,1.0,2,1.0 -1,258.0,2,1.0,0,1.0,2,1.0 -1,259.0,1,1.0,0,1.0,2,1.0 -1,259.0,2,1.0,0,1.0,2,1.0 -1,260.0,1,1.0,0,1.0,2,1.0 -1,260.0,2,1.0,0,1.0,2,1.0 -1,261.0,1,1.0,0,1.0,2,1.0 -1,261.0,2,1.0,0,1.0,2,1.0 -1,262.0,1,1.0,0,1.0,2,1.0 -1,262.0,2,1.0,0,1.0,2,1.0 -1,263.0,1,1.0,0,1.0,2,1.0 -1,263.0,2,1.0,0,1.0,2,1.0 -1,264.0,1,1.0,0,1.0,2,1.0 -1,264.0,2,1.0,0,1.0,2,1.0 -1,265.0,1,1.0,0,1.0,2,1.0 -1,265.0,2,1.0,0,1.0,2,1.0 -1,266.0,1,1.0,0,1.0,2,1.0 -1,266.0,2,1.0,0,1.0,2,1.0 -1,267.0,1,1.0,0,1.0,2,1.0 -1,267.0,2,1.0,0,1.0,2,1.0 -1,268.0,1,1.0,0,1.0,2,1.0 -1,268.0,2,1.0,0,1.0,2,1.0 -1,269.0,1,1.0,0,1.0,2,1.0 -1,269.0,2,1.0,0,1.0,2,1.0 -1,270.0,1,1.0,0,1.0,2,1.0 -1,270.0,2,1.0,0,1.0,2,1.0 -1,271.0,1,1.0,0,1.0,2,1.0 -1,271.0,2,1.0,0,1.0,2,1.0 -1,272.0,1,1.0,0,1.0,2,1.0 -1,272.0,2,1.0,0,1.0,2,1.0 -1,273.0,1,1.0,0,1.0,2,1.0 -1,273.0,2,1.0,0,1.0,2,1.0 -1,274.0,1,1.0,0,1.0,2,1.0 -1,274.0,2,1.0,0,1.0,2,1.0 -1,275.0,1,1.0,0,1.0,2,1.0 -1,275.0,2,1.0,0,1.0,2,1.0 -1,276.0,1,1.0,0,1.0,2,1.0 -1,276.0,2,1.0,0,1.0,2,1.0 -1,277.0,1,1.0,0,1.0,2,1.0 -1,277.0,2,1.0,0,1.0,2,1.0 -1,278.0,1,1.0,0,1.0,2,1.0 -1,278.0,2,1.0,0,1.0,2,1.0 -1,279.0,1,1.0,0,1.0,2,1.0 -1,279.0,2,1.0,0,1.0,2,1.0 -1,280.0,1,1.0,0,1.0,2,1.0 -1,280.0,2,1.0,0,1.0,2,1.0 -1,281.0,1,1.0,0,1.0,2,1.0 -1,281.0,2,1.0,0,1.0,2,1.0 -1,282.0,1,1.0,0,1.0,2,1.0 -1,282.0,2,1.0,0,1.0,2,1.0 -1,283.0,1,1.0,0,1.0,2,1.0 -1,283.0,2,1.0,0,1.0,2,1.0 -1,284.0,1,1.0,0,1.0,2,1.0 -1,284.0,2,1.0,0,1.0,2,1.0 -1,285.0,1,1.0,0,1.0,2,1.0 -1,285.0,2,1.0,0,1.0,2,1.0 -1,286.0,1,1.0,0,1.0,2,1.0 -1,286.0,2,1.0,0,1.0,2,1.0 -1,287.0,1,1.0,0,1.0,2,1.0 -1,287.0,2,1.0,0,1.0,2,1.0 -1,288.0,1,1.0,0,1.0,2,1.0 -1,288.0,2,1.0,0,1.0,2,1.0 -1,289.0,1,1.0,0,1.0,2,1.0 -1,289.0,2,1.0,0,1.0,2,1.0 -1,290.0,1,1.0,0,1.0,2,1.0 -1,290.0,2,1.0,0,1.0,2,1.0 -1,291.0,1,1.0,0,1.0,2,1.0 -1,291.0,2,1.0,0,1.0,2,1.0 -1,292.0,1,1.0,0,1.0,2,1.0 -1,292.0,2,1.0,0,1.0,2,1.0 -1,293.0,1,1.0,0,1.0,2,1.0 -1,293.0,2,1.0,0,1.0,2,1.0 -1,294.0,1,1.0,0,1.0,2,1.0 -1,294.0,2,1.0,0,1.0,2,1.0 -1,295.0,1,1.0,0,1.0,2,1.0 -1,295.0,2,1.0,0,1.0,2,1.0 -1,296.0,1,1.0,0,1.0,2,1.0 -1,296.0,2,1.0,0,1.0,2,1.0 -1,297.0,1,1.0,0,1.0,2,1.0 -1,297.0,2,1.0,0,1.0,2,1.0 -1,298.0,1,1.0,0,1.0,2,1.0 -1,298.0,2,1.0,0,1.0,2,1.0 -1,299.0,1,1.0,0,1.0,2,1.0 -1,299.0,2,1.0,0,1.0,2,1.0 -1,300.0,1,1.0,0,1.0,2,1.0 -1,300.0,2,1.0,0,1.0,2,1.0 -1,301.0,1,1.0,0,1.0,2,1.0 -1,301.0,2,1.0,0,1.0,2,1.0 -1,302.0,1,1.0,0,1.0,2,1.0 -1,302.0,2,1.0,0,1.0,2,1.0 -1,303.0,1,1.0,0,1.0,2,1.0 -1,303.0,2,1.0,0,1.0,2,1.0 -1,304.0,1,1.0,0,1.0,2,1.0 -1,304.0,2,1.0,0,1.0,2,1.0 -1,305.0,1,1.0,0,1.0,2,1.0 -1,305.0,2,1.0,0,1.0,2,1.0 -1,306.0,1,1.0,0,1.0,2,1.0 -1,306.0,2,1.0,0,1.0,2,1.0 -1,307.0,1,1.0,0,1.0,2,1.0 -1,307.0,2,1.0,0,1.0,2,1.0 -1,308.0,1,1.0,0,1.0,2,1.0 -1,308.0,2,1.0,0,1.0,2,1.0 -1,309.0,1,1.0,0,1.0,2,1.0 -1,309.0,2,1.0,0,1.0,2,1.0 -1,310.0,1,1.0,0,1.0,2,1.0 -1,310.0,2,1.0,0,1.0,2,1.0 -1,311.0,1,1.0,0,1.0,2,1.0 -1,311.0,2,1.0,0,1.0,2,1.0 -1,312.0,1,1.0,0,1.0,2,1.0 -1,312.0,2,1.0,0,1.0,2,1.0 -1,313.0,1,1.0,0,1.0,2,1.0 -1,313.0,2,1.0,0,1.0,2,1.0 -1,314.0,1,1.0,0,1.0,2,1.0 -1,314.0,2,1.0,0,1.0,2,1.0 -1,315.0,1,1.0,0,1.0,2,1.0 -1,315.0,2,1.0,0,1.0,2,1.0 -1,316.0,1,1.0,0,1.0,2,1.0 -1,316.0,2,1.0,0,1.0,2,1.0 -1,317.0,1,1.0,0,1.0,2,1.0 -1,317.0,2,1.0,0,1.0,2,1.0 -1,318.0,1,1.0,0,1.0,2,1.0 -1,318.0,2,1.0,0,1.0,2,1.0 -1,319.0,1,1.0,0,1.0,2,1.0 -1,319.0,2,1.0,0,1.0,2,1.0 -1,320.0,1,1.0,0,1.0,2,1.0 -1,320.0,2,1.0,0,1.0,2,1.0 -1,321.0,1,1.0,0,1.0,2,1.0 -1,321.0,2,1.0,0,1.0,2,1.0 -1,322.0,1,1.0,0,1.0,2,1.0 -1,322.0,2,1.0,0,1.0,2,1.0 -1,323.0,1,1.0,0,1.0,2,1.0 -1,323.0,2,1.0,0,1.0,2,1.0 -1,324.0,1,1.0,0,1.0,2,1.0 -1,324.0,2,1.0,0,1.0,2,1.0 -1,325.0,1,1.0,0,1.0,2,1.0 -1,325.0,2,1.0,0,1.0,2,1.0 -1,326.0,1,1.0,0,1.0,2,1.0 -1,326.0,2,1.0,0,1.0,2,1.0 -1,327.0,1,1.0,0,1.0,2,1.0 -1,327.0,2,1.0,0,1.0,2,1.0 -1,328.0,1,1.0,0,1.0,2,1.0 -1,328.0,2,1.0,0,1.0,2,1.0 -1,329.0,1,1.0,0,1.0,2,1.0 -1,329.0,2,1.0,0,1.0,2,1.0 -1,330.0,1,1.0,0,1.0,2,1.0 -1,330.0,2,1.0,0,1.0,2,1.0 -1,331.0,1,1.0,0,1.0,2,1.0 -1,331.0,2,1.0,0,1.0,2,1.0 -1,332.0,1,1.0,0,1.0,2,1.0 -1,332.0,2,1.0,0,1.0,2,1.0 -1,333.0,1,1.0,0,1.0,2,1.0 -1,333.0,2,1.0,0,1.0,2,1.0 -1,334.0,1,1.0,0,1.0,2,1.0 -1,334.0,2,1.0,0,1.0,2,1.0 -1,335.0,1,1.0,0,1.0,2,1.0 -1,335.0,2,1.0,0,1.0,2,1.0 -1,336.0,1,1.0,0,1.0,2,1.0 -1,336.0,2,1.0,0,1.0,2,1.0 -1,337.0,1,1.0,0,1.0,2,1.0 -1,337.0,2,1.0,0,1.0,2,1.0 -1,338.0,1,1.0,0,1.0,2,1.0 -1,338.0,2,1.0,0,1.0,2,1.0 -1,339.0,1,1.0,0,1.0,2,1.0 -1,339.0,2,1.0,0,1.0,2,1.0 -1,340.0,1,1.0,0,1.0,2,1.0 -1,340.0,2,1.0,0,1.0,2,1.0 -1,341.0,1,1.0,0,1.0,2,1.0 -1,341.0,2,1.0,0,1.0,2,1.0 -1,342.0,1,1.0,0,1.0,2,1.0 -1,342.0,2,1.0,0,1.0,2,1.0 -1,343.0,1,1.0,0,1.0,2,1.0 -1,343.0,2,1.0,0,1.0,2,1.0 -1,344.0,1,1.0,0,1.0,2,1.0 -1,344.0,2,1.0,0,1.0,2,1.0 -1,345.0,1,1.0,0,1.0,2,1.0 -1,345.0,2,1.0,0,1.0,2,1.0 -1,346.0,1,1.0,0,1.0,2,1.0 -1,346.0,2,1.0,0,1.0,2,1.0 -1,347.0,1,1.0,0,1.0,2,1.0 -1,347.0,2,1.0,0,1.0,2,1.0 -1,348.0,1,1.0,0,1.0,2,1.0 -1,348.0,2,1.0,0,1.0,2,1.0 -1,349.0,1,1.0,0,1.0,2,1.0 -1,349.0,2,1.0,0,1.0,2,1.0 -1,350.0,1,1.0,0,1.0,2,1.0 -1,350.0,2,1.0,0,1.0,2,1.0 -1,351.0,1,1.0,0,1.0,2,1.0 -1,351.0,2,1.0,0,1.0,2,1.0 -1,352.0,1,1.0,0,1.0,2,1.0 -1,352.0,2,1.0,0,1.0,2,1.0 -1,353.0,1,1.0,0,1.0,2,1.0 -1,353.0,2,1.0,0,1.0,2,1.0 -1,354.0,1,1.0,0,1.0,2,1.0 -1,354.0,2,1.0,0,1.0,2,1.0 -1,355.0,1,1.0,0,1.0,2,1.0 -1,355.0,2,1.0,0,1.0,2,1.0 -1,356.0,1,1.0,0,1.0,2,1.0 -1,356.0,2,1.0,0,1.0,2,1.0 -1,357.0,1,1.0,0,1.0,2,1.0 -1,357.0,2,1.0,0,1.0,2,1.0 -1,358.0,1,1.0,0,1.0,2,1.0 -1,358.0,2,1.0,0,1.0,2,1.0 -1,359.0,1,1.0,0,1.0,2,1.0 -1,359.0,2,1.0,0,1.0,2,1.0 -1,360.0,1,1.0,0,1.0,2,1.0 -1,360.0,2,1.0,0,1.0,2,1.0 -1,361.0,1,1.0,0,1.0,2,1.0 -1,361.0,2,1.0,0,1.0,2,1.0 -1,362.0,1,1.0,0,1.0,2,1.0 -1,362.0,2,1.0,0,1.0,2,1.0 -1,363.0,1,1.0,0,1.0,2,1.0 -1,363.0,2,1.0,0,1.0,2,1.0 -1,364.0,1,1.0,0,1.0,2,1.0 -1,364.0,2,1.0,0,1.0,2,1.0 -1,365.0,1,1.0,0,1.0,2,1.0 -1,365.0,2,1.0,0,1.0,2,1.0 -1,366.0,1,1.0,0,1.0,2,1.0 -1,366.0,2,1.0,0,1.0,2,1.0 -1,367.0,1,1.0,0,1.0,2,1.0 -1,367.0,2,1.0,0,1.0,2,1.0 -1,368.0,1,1.0,0,1.0,2,1.0 -1,368.0,2,1.0,0,1.0,2,1.0 -1,369.0,1,1.0,0,1.0,2,1.0 -1,369.0,2,1.0,0,1.0,2,1.0 -1,370.0,1,1.0,0,1.0,2,1.0 -1,370.0,2,1.0,0,1.0,2,1.0 -1,371.0,1,1.0,0,1.0,2,1.0 -1,371.0,2,1.0,0,1.0,2,1.0 -1,372.0,1,1.0,0,1.0,2,1.0 -1,372.0,2,1.0,0,1.0,2,1.0 -1,373.0,1,1.0,0,1.0,2,1.0 -1,373.0,2,1.0,0,1.0,2,1.0 -1,374.0,1,1.0,0,1.0,2,1.0 -1,374.0,2,1.0,0,1.0,2,1.0 -1,375.0,1,1.0,0,1.0,2,1.0 -1,375.0,2,1.0,0,1.0,2,1.0 -1,376.0,1,1.0,0,1.0,2,1.0 -1,376.0,2,1.0,0,1.0,2,1.0 -1,377.0,1,1.0,0,1.0,2,1.0 -1,377.0,2,1.0,0,1.0,2,1.0 -1,378.0,1,1.0,0,1.0,2,1.0 -1,378.0,2,1.0,0,1.0,2,1.0 -1,379.0,1,1.0,0,1.0,2,1.0 -1,379.0,2,1.0,0,1.0,2,1.0 -1,380.0,1,1.0,0,1.0,2,1.0 -1,380.0,2,1.0,0,1.0,2,1.0 -1,381.0,1,1.0,0,1.0,2,1.0 -1,381.0,2,1.0,0,1.0,2,1.0 -1,382.0,1,1.0,0,1.0,2,1.0 -1,382.0,2,1.0,0,1.0,2,1.0 -1,383.0,1,1.0,0,1.0,2,1.0 -1,383.0,2,1.0,0,1.0,2,1.0 -1,384.0,1,1.0,0,1.0,2,1.0 -1,384.0,2,1.0,0,1.0,2,1.0 -1,385.0,1,1.0,0,1.0,2,1.0 -1,385.0,2,1.0,0,1.0,2,1.0 -1,386.0,1,1.0,0,1.0,2,1.0 -1,386.0,2,1.0,0,1.0,2,1.0 -1,387.0,1,1.0,0,1.0,2,1.0 -1,387.0,2,1.0,0,1.0,2,1.0 -1,388.0,1,1.0,0,1.0,2,1.0 -1,388.0,2,1.0,0,1.0,2,1.0 -1,389.0,1,1.0,0,1.0,2,1.0 -1,389.0,2,1.0,0,1.0,2,1.0 -1,390.0,1,1.0,0,1.0,2,1.0 -1,390.0,2,1.0,0,1.0,2,1.0 -1,391.0,1,1.0,0,1.0,2,1.0 -1,391.0,2,1.0,0,1.0,2,1.0 -1,392.0,1,1.0,0,1.0,2,1.0 -1,392.0,2,1.0,0,1.0,2,1.0 -1,393.0,1,1.0,0,1.0,2,1.0 -1,393.0,2,1.0,0,1.0,2,1.0 -1,394.0,1,1.0,0,1.0,2,1.0 -1,394.0,2,1.0,0,1.0,2,1.0 -1,395.0,1,1.0,0,1.0,2,1.0 -1,395.0,2,1.0,0,1.0,2,1.0 -1,396.0,1,1.0,0,1.0,2,1.0 -1,396.0,2,1.0,0,1.0,2,1.0 -1,397.0,1,1.0,0,1.0,2,1.0 -1,397.0,2,1.0,0,1.0,2,1.0 -1,398.0,1,1.0,0,1.0,2,1.0 -1,398.0,2,1.0,0,1.0,2,1.0 -1,399.0,1,1.0,0,1.0,2,1.0 -1,399.0,2,1.0,0,1.0,2,1.0 -1,400.0,1,1.0,0,1.0,2,1.0 -1,400.0,2,1.0,0,1.0,2,1.0 -1,401.0,1,1.0,0,1.0,2,1.0 -1,401.0,2,1.0,0,1.0,2,1.0 -1,402.0,1,1.0,0,1.0,2,1.0 -1,402.0,2,1.0,0,1.0,2,1.0 -1,403.0,1,1.0,0,1.0,2,1.0 -1,403.0,2,1.0,0,1.0,2,1.0 -1,404.0,1,1.0,0,1.0,2,1.0 -1,404.0,2,1.0,0,1.0,2,1.0 -1,405.0,1,1.0,0,1.0,2,1.0 -1,405.0,2,1.0,0,1.0,2,1.0 -1,406.0,1,1.0,0,1.0,2,1.0 -1,406.0,2,1.0,0,1.0,2,1.0 -1,407.0,1,1.0,0,1.0,2,1.0 -1,407.0,2,1.0,0,1.0,2,1.0 -1,408.0,1,1.0,0,1.0,2,1.0 -1,408.0,2,1.0,0,1.0,2,1.0 -1,409.0,1,1.0,0,1.0,2,1.0 -1,409.0,2,1.0,0,1.0,2,1.0 -1,410.0,1,1.0,0,1.0,2,1.0 -1,410.0,2,1.0,0,1.0,2,1.0 -1,411.0,1,1.0,0,1.0,2,1.0 -1,411.0,2,1.0,0,1.0,2,1.0 -1,412.0,1,1.0,0,1.0,2,1.0 -1,412.0,2,1.0,0,1.0,2,1.0 -1,413.0,1,1.0,0,1.0,2,1.0 -1,413.0,2,1.0,0,1.0,2,1.0 -1,414.0,1,1.0,0,1.0,2,1.0 -1,414.0,2,1.0,0,1.0,2,1.0 -1,415.0,1,1.0,0,1.0,2,1.0 -1,415.0,2,1.0,0,1.0,2,1.0 -1,416.0,1,1.0,0,1.0,2,1.0 -1,416.0,2,1.0,0,1.0,2,1.0 -1,417.0,1,1.0,0,1.0,2,1.0 -1,417.0,2,1.0,0,1.0,2,1.0 -1,418.0,1,1.0,0,1.0,2,1.0 -1,418.0,2,1.0,0,1.0,2,1.0 -1,419.0,1,1.0,0,1.0,2,1.0 -1,419.0,2,1.0,0,1.0,2,1.0 -1,420.0,1,1.0,0,1.0,2,1.0 -1,420.0,2,1.0,0,1.0,2,1.0 -1,421.0,1,1.0,0,1.0,2,1.0 -1,421.0,2,1.0,0,1.0,2,1.0 -1,422.0,1,1.0,0,1.0,2,1.0 -1,422.0,2,1.0,0,1.0,2,1.0 -1,423.0,1,1.0,0,1.0,2,1.0 -1,423.0,2,1.0,0,1.0,2,1.0 -1,424.0,1,1.0,0,1.0,2,1.0 -1,424.0,2,1.0,0,1.0,2,1.0 -1,425.0,1,1.0,0,1.0,2,1.0 -1,425.0,2,1.0,0,1.0,2,1.0 -1,426.0,1,1.0,0,1.0,2,1.0 -1,426.0,2,1.0,0,1.0,2,1.0 -1,427.0,1,1.0,0,1.0,2,1.0 -1,427.0,2,1.0,0,1.0,2,1.0 -1,428.0,1,1.0,0,1.0,2,1.0 -1,428.0,2,1.0,0,1.0,2,1.0 -1,429.0,1,1.0,0,1.0,2,1.0 -1,429.0,2,1.0,0,1.0,2,1.0 -1,430.0,1,1.0,0,1.0,2,1.0 -1,430.0,2,1.0,0,1.0,2,1.0 -1,431.0,1,1.0,0,1.0,2,1.0 -1,431.0,2,1.0,0,1.0,2,1.0 -1,432.0,1,1.0,0,1.0,2,1.0 -1,432.0,2,1.0,0,1.0,2,1.0 -1,433.0,1,1.0,0,1.0,2,1.0 -1,433.0,2,1.0,0,1.0,2,1.0 -1,434.0,1,1.0,0,1.0,2,1.0 -1,434.0,2,1.0,0,1.0,2,1.0 -1,435.0,1,1.0,0,1.0,2,1.0 -1,435.0,2,1.0,0,1.0,2,1.0 -1,436.0,1,1.0,0,1.0,2,1.0 -1,436.0,2,1.0,0,1.0,2,1.0 -1,437.0,1,1.0,0,1.0,2,1.0 -1,437.0,2,1.0,0,1.0,2,1.0 -1,438.0,1,1.0,0,1.0,2,1.0 -1,438.0,2,1.0,0,1.0,2,1.0 -1,439.0,1,1.0,0,1.0,2,1.0 -1,439.0,2,1.0,0,1.0,2,1.0 -1,440.0,1,1.0,0,1.0,2,1.0 -1,440.0,2,1.0,0,1.0,2,1.0 -1,441.0,1,1.0,0,1.0,2,1.0 -1,441.0,2,1.0,0,1.0,2,1.0 -1,442.0,1,1.0,0,1.0,2,1.0 -1,442.0,2,1.0,0,1.0,2,1.0 -1,443.0,1,1.0,0,1.0,2,1.0 -1,443.0,2,1.0,0,1.0,2,1.0 -1,444.0,1,1.0,0,1.0,2,1.0 -1,444.0,2,1.0,0,1.0,2,1.0 -1,445.0,1,1.0,0,1.0,2,1.0 -1,445.0,2,1.0,0,1.0,2,1.0 -1,446.0,1,1.0,0,1.0,2,1.0 -1,446.0,2,1.0,0,1.0,2,1.0 -1,447.0,1,1.0,0,1.0,2,1.0 -1,447.0,2,1.0,0,1.0,2,1.0 -1,448.0,1,1.0,0,1.0,2,1.0 -1,448.0,2,1.0,0,1.0,2,1.0 -1,449.0,1,1.0,0,1.0,2,1.0 -1,449.0,2,1.0,0,1.0,2,1.0 -1,450.0,1,1.0,0,1.0,2,1.0 -1,450.0,2,1.0,0,1.0,2,1.0 -1,451.0,1,1.0,0,1.0,2,1.0 -1,451.0,2,1.0,0,1.0,2,1.0 -1,452.0,1,1.0,0,1.0,2,1.0 -1,452.0,2,1.0,0,1.0,2,1.0 -1,453.0,1,1.0,0,1.0,2,1.0 -1,453.0,2,1.0,0,1.0,2,1.0 -1,454.0,1,1.0,0,1.0,2,1.0 -1,454.0,2,1.0,0,1.0,2,1.0 -1,455.0,1,1.0,0,1.0,2,1.0 -1,455.0,2,1.0,0,1.0,2,1.0 -1,456.0,1,1.0,0,1.0,2,1.0 -1,456.0,2,1.0,0,1.0,2,1.0 -1,457.0,1,1.0,0,1.0,2,1.0 -1,457.0,2,1.0,0,1.0,2,1.0 -1,458.0,1,1.0,0,1.0,2,1.0 -1,458.0,2,1.0,0,1.0,2,1.0 -1,459.0,1,1.0,0,1.0,2,1.0 -1,459.0,2,1.0,0,1.0,2,1.0 -1,460.0,1,1.0,0,1.0,2,1.0 -1,460.0,2,1.0,0,1.0,2,1.0 -1,461.0,1,1.0,0,1.0,2,1.0 -1,461.0,2,1.0,0,1.0,2,1.0 -1,462.0,1,1.0,0,1.0,2,1.0 -1,462.0,2,1.0,0,1.0,2,1.0 -1,463.0,1,1.0,0,1.0,2,1.0 -1,463.0,2,1.0,0,1.0,2,1.0 -1,464.0,1,1.0,0,1.0,2,1.0 -1,464.0,2,1.0,0,1.0,2,1.0 -1,465.0,1,1.0,0,1.0,2,1.0 -1,465.0,2,1.0,0,1.0,2,1.0 -1,466.0,1,1.0,0,1.0,2,1.0 -1,466.0,2,1.0,0,1.0,2,1.0 -1,467.0,1,1.0,0,1.0,2,1.0 -1,467.0,2,1.0,0,1.0,2,1.0 -1,468.0,1,1.0,0,1.0,2,1.0 -1,468.0,2,1.0,0,1.0,2,1.0 -1,469.0,1,1.0,0,1.0,2,1.0 -1,469.0,2,1.0,0,1.0,2,1.0 -1,470.0,1,1.0,0,1.0,2,1.0 -1,470.0,2,1.0,0,1.0,2,1.0 -1,471.0,1,1.0,0,1.0,2,1.0 -1,471.0,2,1.0,0,1.0,2,1.0 -1,472.0,1,1.0,0,1.0,2,1.0 -1,472.0,2,1.0,0,1.0,2,1.0 -1,473.0,1,1.0,0,1.0,2,1.0 -1,473.0,2,1.0,0,1.0,2,1.0 -1,474.0,1,1.0,0,1.0,2,1.0 -1,474.0,2,1.0,0,1.0,2,1.0 -1,475.0,1,1.0,0,1.0,2,1.0 -1,475.0,2,1.0,0,1.0,2,1.0 -1,476.0,1,1.0,0,1.0,2,1.0 -1,476.0,2,1.0,0,1.0,2,1.0 -1,477.0,1,1.0,0,1.0,2,1.0 -1,477.0,2,1.0,0,1.0,2,1.0 -1,478.0,1,1.0,0,1.0,2,1.0 -1,478.0,2,1.0,0,1.0,2,1.0 -1,479.0,1,1.0,0,1.0,2,1.0 -1,479.0,2,1.0,0,1.0,2,1.0 -1,480.0,1,1.0,0,1.0,2,1.0 -1,480.0,2,1.0,0,1.0,2,1.0 -1,481.0,1,1.0,0,1.0,2,1.0 -1,481.0,2,1.0,0,1.0,2,1.0 -1,482.0,1,1.0,0,1.0,2,1.0 -1,482.0,2,1.0,0,1.0,2,1.0 -1,483.0,1,1.0,0,1.0,2,1.0 -1,483.0,2,1.0,0,1.0,2,1.0 -1,484.0,1,1.0,0,1.0,2,1.0 -1,484.0,2,1.0,0,1.0,2,1.0 -1,485.0,1,1.0,0,1.0,2,1.0 -1,485.0,2,1.0,0,1.0,2,1.0 -1,486.0,1,1.0,0,1.0,2,1.0 -1,486.0,2,1.0,0,1.0,2,1.0 -1,487.0,1,1.0,0,1.0,2,1.0 -1,487.0,2,1.0,0,1.0,2,1.0 -1,488.0,1,1.0,0,1.0,2,1.0 -1,488.0,2,1.0,0,1.0,2,1.0 -1,489.0,1,1.0,0,1.0,2,1.0 -1,489.0,2,1.0,0,1.0,2,1.0 -1,490.0,1,1.0,0,1.0,2,1.0 -1,490.0,2,1.0,0,1.0,2,1.0 -1,491.0,1,1.0,0,1.0,2,1.0 -1,491.0,2,1.0,0,1.0,2,1.0 -1,492.0,1,1.0,0,1.0,2,1.0 -1,492.0,2,1.0,0,1.0,2,1.0 -1,493.0,1,1.0,0,1.0,2,1.0 -1,493.0,2,1.0,0,1.0,2,1.0 -1,494.0,1,1.0,0,1.0,2,1.0 -1,494.0,2,1.0,0,1.0,2,1.0 -1,495.0,1,1.0,0,1.0,2,1.0 -1,495.0,2,1.0,0,1.0,2,1.0 -1,496.0,1,1.0,0,1.0,2,1.0 -1,496.0,2,1.0,0,1.0,2,1.0 -1,497.0,1,1.0,0,1.0,2,1.0 -1,497.0,2,1.0,0,1.0,2,1.0 -1,498.0,1,1.0,0,1.0,2,1.0 -1,498.0,2,1.0,0,1.0,2,1.0 -1,499.0,1,1.0,0,1.0,2,1.0 -1,499.0,2,1.0,0,1.0,2,1.0 -1,500.0,1,1.0,0,1.0,2,1.0 -1,500.0,2,1.0,0,1.0,2,1.0 -1,501.0,1,1.0,0,1.0,2,1.0 -1,501.0,2,1.0,0,1.0,2,1.0 -1,502.0,1,1.0,0,1.0,2,1.0 -1,502.0,2,1.0,0,1.0,2,1.0 -1,503.0,1,1.0,0,1.0,2,1.0 -1,503.0,2,1.0,0,1.0,2,1.0 -1,504.0,1,1.0,0,1.0,2,1.0 -1,504.0,2,1.0,0,1.0,2,1.0 -1,505.0,1,1.0,0,1.0,2,1.0 -1,505.0,2,1.0,0,1.0,2,1.0 -1,506.0,1,1.0,0,1.0,2,1.0 -1,506.0,2,1.0,0,1.0,2,1.0 -1,507.0,1,1.0,0,1.0,2,1.0 -1,507.0,2,1.0,0,1.0,2,1.0 -1,508.0,1,1.0,0,1.0,2,1.0 -1,508.0,2,1.0,0,1.0,2,1.0 -1,509.0,1,1.0,0,1.0,2,1.0 -1,509.0,2,1.0,0,1.0,2,1.0 -1,510.0,1,1.0,0,1.0,2,1.0 -1,510.0,2,1.0,0,1.0,2,1.0 -1,511.0,1,1.0,0,1.0,2,1.0 -1,511.0,2,1.0,0,1.0,2,1.0 -1,512.0,1,1.0,0,1.0,2,1.0 -1,512.0,2,1.0,0,1.0,2,1.0 -1,513.0,1,1.0,0,1.0,2,1.0 -1,513.0,2,1.0,0,1.0,2,1.0 -1,514.0,1,1.0,0,1.0,2,1.0 -1,514.0,2,1.0,0,1.0,2,1.0 -1,515.0,1,1.0,0,1.0,2,1.0 -1,515.0,2,1.0,0,1.0,2,1.0 -1,516.0,1,1.0,0,1.0,2,1.0 -1,516.0,2,1.0,0,1.0,2,1.0 -1,517.0,1,1.0,0,1.0,2,1.0 -1,517.0,2,1.0,0,1.0,2,1.0 -1,518.0,1,1.0,0,1.0,2,1.0 -1,518.0,2,1.0,0,1.0,2,1.0 -1,519.0,1,1.0,0,1.0,2,1.0 -1,519.0,2,1.0,0,1.0,2,1.0 -1,520.0,1,1.0,0,1.0,2,1.0 -1,520.0,2,1.0,0,1.0,2,1.0 -1,521.0,1,1.0,0,1.0,2,1.0 -1,521.0,2,1.0,0,1.0,2,1.0 -1,522.0,1,1.0,0,1.0,2,1.0 -1,522.0,2,1.0,0,1.0,2,1.0 -1,523.0,1,1.0,0,1.0,2,1.0 -1,523.0,2,1.0,0,1.0,2,1.0 -1,524.0,1,1.0,0,1.0,2,1.0 -1,524.0,2,1.0,0,1.0,2,1.0 -1,525.0,1,1.0,0,1.0,2,1.0 -1,525.0,2,1.0,0,1.0,2,1.0 -1,526.0,1,1.0,0,1.0,2,1.0 -1,526.0,2,1.0,0,1.0,2,1.0 -1,527.0,1,1.0,0,1.0,2,1.0 -1,527.0,2,1.0,0,1.0,2,1.0 -1,528.0,1,1.0,0,1.0,2,1.0 -1,528.0,2,1.0,0,1.0,2,1.0 -1,529.0,1,1.0,0,1.0,2,1.0 -1,529.0,2,1.0,0,1.0,2,1.0 -1,530.0,1,1.0,0,1.0,2,1.0 -1,530.0,2,1.0,0,1.0,2,1.0 -1,531.0,1,1.0,0,1.0,2,1.0 -1,531.0,2,1.0,0,1.0,2,1.0 -1,532.0,1,1.0,0,1.0,2,1.0 -1,532.0,2,1.0,0,1.0,2,1.0 -1,533.0,1,1.0,0,1.0,2,1.0 -1,533.0,2,1.0,0,1.0,2,1.0 -1,534.0,1,1.0,0,1.0,2,1.0 -1,534.0,2,1.0,0,1.0,2,1.0 -1,535.0,1,1.0,0,1.0,2,1.0 -1,535.0,2,1.0,0,1.0,2,1.0 -1,536.0,1,1.0,0,1.0,2,1.0 -1,536.0,2,1.0,0,1.0,2,1.0 -1,537.0,1,1.0,0,1.0,2,1.0 -1,537.0,2,1.0,0,1.0,2,1.0 -1,538.0,1,1.0,0,1.0,2,1.0 -1,538.0,2,1.0,0,1.0,2,1.0 -1,539.0,1,1.0,0,1.0,2,1.0 -1,539.0,2,1.0,0,1.0,2,1.0 -1,540.0,1,1.0,0,1.0,2,1.0 -1,540.0,2,1.0,0,1.0,2,1.0 -1,541.0,1,1.0,0,1.0,2,1.0 -1,541.0,2,1.0,0,1.0,2,1.0 -1,542.0,1,1.0,0,1.0,2,1.0 -1,542.0,2,1.0,0,1.0,2,1.0 -1,543.0,1,1.0,0,1.0,2,1.0 -1,543.0,2,1.0,0,1.0,2,1.0 -1,544.0,1,1.0,0,1.0,2,1.0 -1,544.0,2,1.0,0,1.0,2,1.0 -1,545.0,1,1.0,0,1.0,2,1.0 -1,545.0,2,1.0,0,1.0,2,1.0 -1,546.0,1,1.0,0,1.0,2,1.0 -1,546.0,2,1.0,0,1.0,2,1.0 -1,547.0,1,1.0,0,1.0,2,1.0 -1,547.0,2,1.0,0,1.0,2,1.0 -1,548.0,1,1.0,0,1.0,2,1.0 -1,548.0,2,1.0,0,1.0,2,1.0 -1,549.0,1,1.0,0,1.0,2,1.0 -1,549.0,2,1.0,0,1.0,2,1.0 -1,550.0,1,1.0,0,1.0,2,1.0 -1,550.0,2,1.0,0,1.0,2,1.0 -1,551.0,1,1.0,0,1.0,2,1.0 -1,551.0,2,1.0,0,1.0,2,1.0 -1,552.0,1,1.0,0,1.0,2,1.0 -1,552.0,2,1.0,0,1.0,2,1.0 -1,553.0,1,1.0,0,1.0,2,1.0 -1,553.0,2,1.0,0,1.0,2,1.0 -1,554.0,1,1.0,0,1.0,2,1.0 -1,554.0,2,1.0,0,1.0,2,1.0 -1,555.0,1,1.0,0,1.0,2,1.0 -1,555.0,2,1.0,0,1.0,2,1.0 -1,556.0,1,1.0,0,1.0,2,1.0 -1,556.0,2,1.0,0,1.0,2,1.0 -1,557.0,1,1.0,0,1.0,2,1.0 -1,557.0,2,1.0,0,1.0,2,1.0 -1,558.0,1,1.0,0,1.0,2,1.0 -1,558.0,2,1.0,0,1.0,2,1.0 -1,559.0,1,1.0,0,1.0,2,1.0 -1,559.0,2,1.0,0,1.0,2,1.0 -1,560.0,1,1.0,0,1.0,2,1.0 -1,560.0,2,1.0,0,1.0,2,1.0 -1,561.0,1,1.0,0,1.0,2,1.0 -1,561.0,2,1.0,0,1.0,2,1.0 -1,562.0,1,1.0,0,1.0,2,1.0 -1,562.0,2,1.0,0,1.0,2,1.0 -1,563.0,1,1.0,0,1.0,2,1.0 -1,563.0,2,1.0,0,1.0,2,1.0 -1,564.0,1,1.0,0,1.0,2,1.0 -1,564.0,2,1.0,0,1.0,2,1.0 -1,565.0,1,1.0,0,1.0,2,1.0 -1,565.0,2,1.0,0,1.0,2,1.0 -1,566.0,1,1.0,0,1.0,2,1.0 -1,566.0,2,1.0,0,1.0,2,1.0 -1,567.0,1,1.0,0,1.0,2,1.0 -1,567.0,2,1.0,0,1.0,2,1.0 -1,568.0,1,1.0,0,1.0,2,1.0 -1,568.0,2,1.0,0,1.0,2,1.0 -1,569.0,1,1.0,0,1.0,2,1.0 -1,569.0,2,1.0,0,1.0,2,1.0 -1,570.0,1,1.0,0,1.0,2,1.0 -1,570.0,2,1.0,0,1.0,2,1.0 -1,571.0,1,1.0,0,1.0,2,1.0 -1,571.0,2,1.0,0,1.0,2,1.0 -1,572.0,1,1.0,0,1.0,2,1.0 -1,572.0,2,1.0,0,1.0,2,1.0 -1,573.0,1,1.0,0,1.0,2,1.0 -1,573.0,2,1.0,0,1.0,2,1.0 -1,574.0,1,1.0,0,1.0,2,1.0 -1,574.0,2,1.0,0,1.0,2,1.0 -1,575.0,1,1.0,0,1.0,2,1.0 -1,575.0,2,1.0,0,1.0,2,1.0 -1,576.0,1,1.0,0,1.0,2,1.0 -1,576.0,2,1.0,0,1.0,2,1.0 -1,577.0,1,1.0,0,1.0,2,1.0 -1,577.0,2,1.0,0,1.0,2,1.0 -1,578.0,1,1.0,0,1.0,2,1.0 -1,578.0,2,1.0,0,1.0,2,1.0 -1,579.0,1,1.0,0,1.0,2,1.0 -1,579.0,2,1.0,0,1.0,2,1.0 -1,580.0,1,1.0,0,1.0,2,1.0 -1,580.0,2,1.0,0,1.0,2,1.0 -1,581.0,1,1.0,0,1.0,2,1.0 -1,581.0,2,1.0,0,1.0,2,1.0 -1,582.0,1,1.0,0,1.0,2,1.0 -1,582.0,2,1.0,0,1.0,2,1.0 -1,583.0,1,1.0,0,1.0,2,1.0 -1,583.0,2,1.0,0,1.0,2,1.0 -1,584.0,1,1.0,0,1.0,2,1.0 -1,584.0,2,1.0,0,1.0,2,1.0 -1,585.0,1,1.0,0,1.0,2,1.0 -1,585.0,2,1.0,0,1.0,2,1.0 -1,586.0,1,1.0,0,1.0,2,1.0 -1,586.0,2,1.0,0,1.0,2,1.0 -1,587.0,1,1.0,0,1.0,2,1.0 -1,587.0,2,1.0,0,1.0,2,1.0 -1,588.0,1,1.0,0,1.0,2,1.0 -1,588.0,2,1.0,0,1.0,2,1.0 -1,589.0,1,1.0,0,1.0,2,1.0 -1,589.0,2,1.0,0,1.0,2,1.0 -1,590.0,1,1.0,0,1.0,2,1.0 -1,590.0,2,1.0,0,1.0,2,1.0 -1,591.0,1,1.0,0,1.0,2,1.0 -1,591.0,2,1.0,0,1.0,2,1.0 -1,592.0,1,1.0,0,1.0,2,1.0 -1,592.0,2,1.0,0,1.0,2,1.0 -1,593.0,1,1.0,0,1.0,2,1.0 -1,593.0,2,1.0,0,1.0,2,1.0 -1,594.0,1,1.0,0,1.0,2,1.0 -1,594.0,2,1.0,0,1.0,2,1.0 -1,595.0,1,1.0,0,1.0,2,1.0 -1,595.0,2,1.0,0,1.0,2,1.0 -1,596.0,1,1.0,0,1.0,2,1.0 -1,596.0,2,1.0,0,1.0,2,1.0 -1,597.0,1,1.0,0,1.0,2,1.0 -1,597.0,2,1.0,0,1.0,2,1.0 -1,598.0,1,1.0,0,1.0,2,1.0 -1,598.0,2,1.0,0,1.0,2,1.0 -1,599.0,1,1.0,0,1.0,2,1.0 -1,599.0,2,1.0,0,1.0,2,1.0 -1,600.0,1,1.0,0,1.0,2,1.0 -1,600.0,2,1.0,0,1.0,2,1.0 -1,601.0,1,1.0,0,1.0,2,1.0 -1,601.0,2,1.0,0,1.0,2,1.0 -1,602.0,1,1.0,0,1.0,2,1.0 -1,602.0,2,1.0,0,1.0,2,1.0 -1,603.0,1,1.0,0,1.0,2,1.0 -1,603.0,2,1.0,0,1.0,2,1.0 -1,604.0,1,1.0,0,1.0,2,1.0 -1,604.0,2,1.0,0,1.0,2,1.0 -1,605.0,1,1.0,0,1.0,2,1.0 -1,605.0,2,1.0,0,1.0,2,1.0 -1,606.0,1,1.0,0,1.0,2,1.0 -1,606.0,2,1.0,0,1.0,2,1.0 -1,607.0,1,1.0,0,1.0,2,1.0 -1,607.0,2,1.0,0,1.0,2,1.0 -1,608.0,1,1.0,0,1.0,2,1.0 -1,608.0,2,1.0,0,1.0,2,1.0 -1,609.0,1,1.0,0,1.0,2,1.0 -1,609.0,2,1.0,0,1.0,2,1.0 -1,610.0,1,1.0,0,1.0,2,1.0 -1,610.0,2,1.0,0,1.0,2,1.0 -1,611.0,1,1.0,0,1.0,2,1.0 -1,611.0,2,1.0,0,1.0,2,1.0 -1,612.0,1,1.0,0,1.0,2,1.0 -1,612.0,2,1.0,0,1.0,2,1.0 -1,613.0,1,1.0,0,1.0,2,1.0 -1,613.0,2,1.0,0,1.0,2,1.0 -1,614.0,1,1.0,0,1.0,2,1.0 -1,614.0,2,1.0,0,1.0,2,1.0 -1,615.0,1,1.0,0,1.0,2,1.0 -1,615.0,2,1.0,0,1.0,2,1.0 -1,616.0,1,1.0,0,1.0,2,1.0 -1,616.0,2,1.0,0,1.0,2,1.0 -1,617.0,1,1.0,0,1.0,2,1.0 -1,617.0,2,1.0,0,1.0,2,1.0 -1,618.0,1,1.0,0,1.0,2,1.0 -1,618.0,2,1.0,0,1.0,2,1.0 -1,619.0,1,1.0,0,1.0,2,1.0 -1,619.0,2,1.0,0,1.0,2,1.0 -1,620.0,1,1.0,0,1.0,2,1.0 -1,620.0,2,1.0,0,1.0,2,1.0 -1,621.0,1,1.0,0,1.0,2,1.0 -1,621.0,2,1.0,0,1.0,2,1.0 -1,622.0,1,1.0,0,1.0,2,1.0 -1,622.0,2,1.0,0,1.0,2,1.0 -1,623.0,1,1.0,0,1.0,2,1.0 -1,623.0,2,1.0,0,1.0,2,1.0 -1,624.0,1,1.0,0,1.0,2,1.0 -1,624.0,2,1.0,0,1.0,2,1.0 -1,625.0,1,1.0,0,1.0,2,1.0 -1,625.0,2,1.0,0,1.0,2,1.0 -1,626.0,1,1.0,0,1.0,2,1.0 -1,626.0,2,1.0,0,1.0,2,1.0 -1,627.0,1,1.0,0,1.0,2,1.0 -1,627.0,2,1.0,0,1.0,2,1.0 -1,628.0,1,1.0,0,1.0,2,1.0 -1,628.0,2,1.0,0,1.0,2,1.0 -1,629.0,1,1.0,0,1.0,2,1.0 -1,629.0,2,1.0,0,1.0,2,1.0 -1,630.0,1,1.0,0,1.0,2,1.0 -1,630.0,2,1.0,0,1.0,2,1.0 -1,631.0,1,1.0,0,1.0,2,1.0 -1,631.0,2,1.0,0,1.0,2,1.0 -1,632.0,1,1.0,0,1.0,2,1.0 -1,632.0,2,1.0,0,1.0,2,1.0 -1,633.0,1,1.0,0,1.0,2,1.0 -1,633.0,2,1.0,0,1.0,2,1.0 -1,634.0,1,1.0,0,1.0,2,1.0 -1,634.0,2,1.0,0,1.0,2,1.0 -1,635.0,1,1.0,0,1.0,2,1.0 -1,635.0,2,1.0,0,1.0,2,1.0 -1,636.0,1,1.0,0,1.0,2,1.0 -1,636.0,2,1.0,0,1.0,2,1.0 -1,637.0,1,1.0,0,1.0,2,1.0 -1,637.0,2,1.0,0,1.0,2,1.0 -1,638.0,1,1.0,0,1.0,2,1.0 -1,638.0,2,1.0,0,1.0,2,1.0 -1,639.0,1,1.0,0,1.0,2,1.0 -1,639.0,2,1.0,0,1.0,2,1.0 -1,640.0,1,1.0,0,1.0,2,1.0 -1,640.0,2,1.0,0,1.0,2,1.0 -1,641.0,1,1.0,0,1.0,2,1.0 -1,641.0,2,1.0,0,1.0,2,1.0 -1,642.0,1,1.0,0,1.0,2,1.0 -1,642.0,2,1.0,0,1.0,2,1.0 -1,643.0,1,1.0,0,1.0,2,1.0 -1,643.0,2,1.0,0,1.0,2,1.0 -1,644.0,1,1.0,0,1.0,2,1.0 -1,644.0,2,1.0,0,1.0,2,1.0 -1,645.0,1,1.0,0,1.0,2,1.0 -1,645.0,2,1.0,0,1.0,2,1.0 -1,646.0,1,1.0,0,1.0,2,1.0 -1,646.0,2,1.0,0,1.0,2,1.0 -1,647.0,1,1.0,0,1.0,2,1.0 -1,647.0,2,1.0,0,1.0,2,1.0 -1,648.0,1,1.0,0,1.0,2,1.0 -1,648.0,2,1.0,0,1.0,2,1.0 -1,649.0,1,1.0,0,1.0,2,1.0 -1,649.0,2,1.0,0,1.0,2,1.0 -1,650.0,1,1.0,0,1.0,2,1.0 -1,650.0,2,1.0,0,1.0,2,1.0 -1,651.0,1,1.0,0,1.0,2,1.0 -1,651.0,2,1.0,0,1.0,2,1.0 -1,652.0,1,1.0,0,1.0,2,1.0 -1,652.0,2,1.0,0,1.0,2,1.0 -1,653.0,1,1.0,0,1.0,2,1.0 -1,653.0,2,1.0,0,1.0,2,1.0 -1,654.0,1,1.0,0,1.0,2,1.0 -1,654.0,2,1.0,0,1.0,2,1.0 -1,655.0,1,1.0,0,1.0,2,1.0 -1,655.0,2,1.0,0,1.0,2,1.0 -1,656.0,1,1.0,0,1.0,2,1.0 -1,656.0,2,1.0,0,1.0,2,1.0 -1,657.0,1,1.0,0,1.0,2,1.0 -1,657.0,2,1.0,0,1.0,2,1.0 -1,658.0,1,1.0,0,1.0,2,1.0 -1,658.0,2,1.0,0,1.0,2,1.0 -1,659.0,1,1.0,0,1.0,2,1.0 -1,659.0,2,1.0,0,1.0,2,1.0 -1,660.0,1,1.0,0,1.0,2,1.0 -1,660.0,2,1.0,0,1.0,2,1.0 -1,661.0,1,1.0,0,1.0,2,1.0 -1,661.0,2,1.0,0,1.0,2,1.0 -1,662.0,1,1.0,0,1.0,2,1.0 -1,662.0,2,1.0,0,1.0,2,1.0 -1,663.0,1,1.0,0,1.0,2,1.0 -1,663.0,2,1.0,0,1.0,2,1.0 -1,664.0,1,1.0,0,1.0,2,1.0 -1,664.0,2,1.0,0,1.0,2,1.0 -1,665.0,1,1.0,0,1.0,2,1.0 -1,665.0,2,1.0,0,1.0,2,1.0 -1,666.0,1,1.0,0,1.0,2,1.0 -1,666.0,2,1.0,0,1.0,2,1.0 -1,667.0,1,1.0,0,1.0,2,1.0 -1,667.0,2,1.0,0,1.0,2,1.0 -1,668.0,1,1.0,0,1.0,2,1.0 -1,668.0,2,1.0,0,1.0,2,1.0 -1,669.0,1,1.0,0,1.0,2,1.0 -1,669.0,2,1.0,0,1.0,2,1.0 -1,670.0,1,1.0,0,1.0,2,1.0 -1,670.0,2,1.0,0,1.0,2,1.0 -1,671.0,1,1.0,0,1.0,2,1.0 -1,671.0,2,1.0,0,1.0,2,1.0 -1,672.0,1,1.0,0,1.0,2,1.0 -1,672.0,2,1.0,0,1.0,2,1.0 -1,673.0,1,1.0,0,1.0,2,1.0 -1,673.0,2,1.0,0,1.0,2,1.0 -1,674.0,1,1.0,0,1.0,2,1.0 -1,674.0,2,1.0,0,1.0,2,1.0 -1,675.0,1,1.0,0,1.0,2,1.0 -1,675.0,2,1.0,0,1.0,2,1.0 -1,676.0,1,1.0,0,1.0,2,1.0 -1,676.0,2,1.0,0,1.0,2,1.0 -1,677.0,1,1.0,0,1.0,2,1.0 -1,677.0,2,1.0,0,1.0,2,1.0 -1,678.0,1,1.0,0,1.0,2,1.0 -1,678.0,2,1.0,0,1.0,2,1.0 -1,679.0,1,1.0,0,1.0,2,1.0 -1,679.0,2,1.0,0,1.0,2,1.0 -1,680.0,1,1.0,0,1.0,2,1.0 -1,680.0,2,1.0,0,1.0,2,1.0 -1,681.0,1,1.0,0,1.0,2,1.0 -1,681.0,2,1.0,0,1.0,2,1.0 -1,682.0,1,1.0,0,1.0,2,1.0 -1,682.0,2,1.0,0,1.0,2,1.0 -1,683.0,1,1.0,0,1.0,2,1.0 -1,683.0,2,1.0,0,1.0,2,1.0 -1,684.0,1,1.0,0,1.0,2,1.0 -1,684.0,2,1.0,0,1.0,2,1.0 -1,685.0,1,1.0,0,1.0,2,1.0 -1,685.0,2,1.0,0,1.0,2,1.0 -1,686.0,1,1.0,0,1.0,2,1.0 -1,686.0,2,1.0,0,1.0,2,1.0 -1,687.0,1,1.0,0,1.0,2,1.0 -1,687.0,2,1.0,0,1.0,2,1.0 -1,688.0,1,1.0,0,1.0,2,1.0 -1,688.0,2,1.0,0,1.0,2,1.0 -1,689.0,1,1.0,0,1.0,2,1.0 -1,689.0,2,1.0,0,1.0,2,1.0 -1,690.0,1,1.0,0,1.0,2,1.0 -1,690.0,2,1.0,0,1.0,2,1.0 -1,691.0,1,1.0,0,1.0,2,1.0 -1,691.0,2,1.0,0,1.0,2,1.0 -1,692.0,1,1.0,0,1.0,2,1.0 -1,692.0,2,1.0,0,1.0,2,1.0 -1,693.0,1,1.0,0,1.0,2,1.0 -1,693.0,2,1.0,0,1.0,2,1.0 -1,694.0,1,1.0,0,1.0,2,1.0 -1,694.0,2,1.0,0,1.0,2,1.0 -1,695.0,1,1.0,0,1.0,2,1.0 -1,695.0,2,1.0,0,1.0,2,1.0 -1,696.0,1,1.0,0,1.0,2,1.0 -1,696.0,2,1.0,0,1.0,2,1.0 -1,697.0,1,1.0,0,1.0,2,1.0 -1,697.0,2,1.0,0,1.0,2,1.0 -1,698.0,1,1.0,0,1.0,2,1.0 -1,698.0,2,1.0,0,1.0,2,1.0 -1,699.0,1,1.0,0,1.0,2,1.0 -1,699.0,2,1.0,0,1.0,2,1.0 -1,700.0,1,1.0,0,1.0,2,1.0 -1,700.0,2,1.0,0,1.0,2,1.0 -1,701.0,1,1.0,0,1.0,2,1.0 -1,701.0,2,1.0,0,1.0,2,1.0 -1,702.0,1,1.0,0,1.0,2,1.0 -1,702.0,2,1.0,0,1.0,2,1.0 -1,703.0,1,1.0,0,1.0,2,1.0 -1,703.0,2,1.0,0,1.0,2,1.0 -1,704.0,1,1.0,0,1.0,2,1.0 -1,704.0,2,1.0,0,1.0,2,1.0 -1,705.0,1,1.0,0,1.0,2,1.0 -1,705.0,2,1.0,0,1.0,2,1.0 -1,706.0,1,1.0,0,1.0,2,1.0 -1,706.0,2,1.0,0,1.0,2,1.0 -1,707.0,1,1.0,0,1.0,2,1.0 -1,707.0,2,1.0,0,1.0,2,1.0 -1,708.0,1,1.0,0,1.0,2,1.0 -1,708.0,2,1.0,0,1.0,2,1.0 -1,709.0,1,1.0,0,1.0,2,1.0 -1,709.0,2,1.0,0,1.0,2,1.0 -1,710.0,1,1.0,0,1.0,2,1.0 -1,710.0,2,1.0,0,1.0,2,1.0 -1,711.0,1,1.0,0,1.0,2,1.0 -1,711.0,2,1.0,0,1.0,2,1.0 -1,712.0,1,1.0,0,1.0,2,1.0 -1,712.0,2,1.0,0,1.0,2,1.0 -1,713.0,1,1.0,0,1.0,2,1.0 -1,713.0,2,1.0,0,1.0,2,1.0 -1,714.0,1,1.0,0,1.0,2,1.0 -1,714.0,2,1.0,0,1.0,2,1.0 -1,715.0,1,1.0,0,1.0,2,1.0 -1,715.0,2,1.0,0,1.0,2,1.0 -1,716.0,1,1.0,0,1.0,2,1.0 -1,716.0,2,1.0,0,1.0,2,1.0 -1,717.0,1,1.0,0,1.0,2,1.0 -1,717.0,2,1.0,0,1.0,2,1.0 -1,718.0,1,1.0,0,1.0,2,1.0 -1,718.0,2,1.0,0,1.0,2,1.0 -1,719.0,1,1.0,0,1.0,2,1.0 -1,719.0,2,1.0,0,1.0,2,1.0 -1,720.0,1,1.0,0,1.0,2,1.0 -1,720.0,2,1.0,0,1.0,2,1.0 -1,721.0,1,1.0,0,1.0,2,1.0 -1,721.0,2,1.0,0,1.0,2,1.0 -1,722.0,1,1.0,0,1.0,2,1.0 -1,722.0,2,1.0,0,1.0,2,1.0 -1,723.0,1,1.0,0,1.0,2,1.0 -1,723.0,2,1.0,0,1.0,2,1.0 -1,724.0,1,1.0,0,1.0,2,1.0 -1,724.0,2,1.0,0,1.0,2,1.0 -1,725.0,1,1.0,0,1.0,2,1.0 -1,725.0,2,1.0,0,1.0,2,1.0 -1,726.0,1,1.0,0,1.0,2,1.0 -1,726.0,2,1.0,0,1.0,2,1.0 -1,727.0,1,1.0,0,1.0,2,1.0 -1,727.0,2,1.0,0,1.0,2,1.0 -1,728.0,1,1.0,0,1.0,2,1.0 -1,728.0,2,1.0,0,1.0,2,1.0 -1,729.0,1,1.0,0,1.0,2,1.0 -1,729.0,2,1.0,0,1.0,2,1.0 -1,730.0,1,1.0,0,1.0,2,1.0 -1,730.0,2,1.0,0,1.0,2,1.0 -1,731.0,1,1.0,0,1.0,2,1.0 -1,731.0,2,1.0,0,1.0,2,1.0 -1,732.0,1,1.0,0,1.0,2,1.0 -1,732.0,2,1.0,0,1.0,2,1.0 -1,733.0,1,1.0,0,1.0,2,1.0 -1,733.0,2,1.0,0,1.0,2,1.0 -1,734.0,1,1.0,0,1.0,2,1.0 -1,734.0,2,1.0,0,1.0,2,1.0 -1,735.0,1,1.0,0,1.0,2,1.0 -1,735.0,2,1.0,0,1.0,2,1.0 -1,736.0,1,1.0,0,1.0,2,1.0 -1,736.0,2,1.0,0,1.0,2,1.0 -1,737.0,1,1.0,0,1.0,2,1.0 -1,737.0,2,1.0,0,1.0,2,1.0 -1,738.0,1,1.0,0,1.0,2,1.0 -1,738.0,2,1.0,0,1.0,2,1.0 -1,739.0,1,1.0,0,1.0,2,1.0 -1,739.0,2,1.0,0,1.0,2,1.0 -1,740.0,1,1.0,0,1.0,2,1.0 -1,740.0,2,1.0,0,1.0,2,1.0 -1,741.0,1,1.0,0,1.0,2,1.0 -1,741.0,2,1.0,0,1.0,2,1.0 -1,742.0,1,1.0,0,1.0,2,1.0 -1,742.0,2,1.0,0,1.0,2,1.0 -1,743.0,1,1.0,0,1.0,2,1.0 -1,743.0,2,1.0,0,1.0,2,1.0 -1,744.0,1,1.0,0,1.0,2,1.0 -1,744.0,2,1.0,0,1.0,2,1.0 -1,745.0,1,1.0,0,1.0,2,1.0 -1,745.0,2,1.0,0,1.0,2,1.0 -1,746.0,1,1.0,0,1.0,2,1.0 -1,746.0,2,1.0,0,1.0,2,1.0 -1,747.0,1,1.0,0,1.0,2,1.0 -1,747.0,2,1.0,0,1.0,2,1.0 -1,748.0,1,1.0,0,1.0,2,1.0 -1,748.0,2,1.0,0,1.0,2,1.0 -1,749.0,1,1.0,0,1.0,2,1.0 -1,749.0,2,1.0,0,1.0,2,1.0 -1,750.0,1,1.0,0,1.0,2,1.0 -1,750.0,2,1.0,0,1.0,2,1.0 -1,751.0,1,1.0,0,1.0,2,1.0 -1,751.0,2,1.0,0,1.0,2,1.0 -1,752.0,1,1.0,0,1.0,2,1.0 -1,752.0,2,1.0,0,1.0,2,1.0 -1,753.0,1,1.0,0,1.0,2,1.0 -1,753.0,2,1.0,0,1.0,2,1.0 -1,754.0,1,1.0,0,1.0,2,1.0 -1,754.0,2,1.0,0,1.0,2,1.0 -1,755.0,1,1.0,0,1.0,2,1.0 -1,755.0,2,1.0,0,1.0,2,1.0 -1,756.0,1,1.0,0,1.0,2,1.0 -1,756.0,2,1.0,0,1.0,2,1.0 -1,757.0,1,1.0,0,1.0,2,1.0 -1,757.0,2,1.0,0,1.0,2,1.0 -1,758.0,1,1.0,0,1.0,2,1.0 -1,758.0,2,1.0,0,1.0,2,1.0 -1,759.0,1,1.0,0,1.0,2,1.0 -1,759.0,2,1.0,0,1.0,2,1.0 -1,760.0,1,1.0,0,1.0,2,1.0 -1,760.0,2,1.0,0,1.0,2,1.0 -1,761.0,1,1.0,0,1.0,2,1.0 -1,761.0,2,1.0,0,1.0,2,1.0 -1,762.0,1,1.0,0,1.0,2,1.0 -1,762.0,2,1.0,0,1.0,2,1.0 -1,763.0,1,1.0,0,1.0,2,1.0 -1,763.0,2,1.0,0,1.0,2,1.0 -1,764.0,1,1.0,0,1.0,2,1.0 -1,764.0,2,1.0,0,1.0,2,1.0 -1,765.0,1,1.0,0,1.0,2,1.0 -1,765.0,2,1.0,0,1.0,2,1.0 -1,766.0,1,1.0,0,1.0,2,1.0 -1,766.0,2,1.0,0,1.0,2,1.0 -1,767.0,1,1.0,0,1.0,2,1.0 -1,767.0,2,1.0,0,1.0,2,1.0 -1,768.0,1,1.0,0,1.0,2,1.0 -1,768.0,2,1.0,0,1.0,2,1.0 -1,769.0,1,1.0,0,1.0,2,1.0 -1,769.0,2,1.0,0,1.0,2,1.0 -1,770.0,1,1.0,0,1.0,2,1.0 -1,770.0,2,1.0,0,1.0,2,1.0 -1,771.0,1,1.0,0,1.0,2,1.0 -1,771.0,2,1.0,0,1.0,2,1.0 -1,772.0,1,1.0,0,1.0,2,1.0 -1,772.0,2,1.0,0,1.0,2,1.0 -1,773.0,1,1.0,0,1.0,2,1.0 -1,773.0,2,1.0,0,1.0,2,1.0 -1,774.0,1,1.0,0,1.0,2,1.0 -1,774.0,2,1.0,0,1.0,2,1.0 -1,775.0,1,1.0,0,1.0,2,1.0 -1,775.0,2,1.0,0,1.0,2,1.0 -1,776.0,1,1.0,0,1.0,2,1.0 -1,776.0,2,1.0,0,1.0,2,1.0 -1,777.0,1,1.0,0,1.0,2,1.0 -1,777.0,2,1.0,0,1.0,2,1.0 -1,778.0,1,1.0,0,1.0,2,1.0 -1,778.0,2,1.0,0,1.0,2,1.0 -1,779.0,1,1.0,0,1.0,2,1.0 -1,779.0,2,1.0,0,1.0,2,1.0 -1,780.0,1,1.0,0,1.0,2,1.0 -1,780.0,2,1.0,0,1.0,2,1.0 -1,781.0,1,1.0,0,1.0,2,1.0 -1,781.0,2,1.0,0,1.0,2,1.0 -1,782.0,1,1.0,0,1.0,2,1.0 -1,782.0,2,1.0,0,1.0,2,1.0 -1,783.0,1,1.0,0,1.0,2,1.0 -1,783.0,2,1.0,0,1.0,2,1.0 -1,784.0,1,1.0,0,1.0,2,1.0 -1,784.0,2,1.0,0,1.0,2,1.0 -1,785.0,1,1.0,0,1.0,2,1.0 -1,785.0,2,1.0,0,1.0,2,1.0 -1,786.0,1,1.0,0,1.0,2,1.0 -1,786.0,2,1.0,0,1.0,2,1.0 -1,787.0,1,1.0,0,1.0,2,1.0 -1,787.0,2,1.0,0,1.0,2,1.0 -1,788.0,1,1.0,0,1.0,2,1.0 -1,788.0,2,1.0,0,1.0,2,1.0 -1,789.0,1,1.0,0,1.0,2,1.0 -1,789.0,2,1.0,0,1.0,2,1.0 -1,790.0,1,1.0,0,1.0,2,1.0 -1,790.0,2,1.0,0,1.0,2,1.0 -1,791.0,1,1.0,0,1.0,2,1.0 -1,791.0,2,1.0,0,1.0,2,1.0 -1,792.0,1,1.0,0,1.0,2,1.0 -1,792.0,2,1.0,0,1.0,2,1.0 -1,793.0,1,1.0,0,1.0,2,1.0 -1,793.0,2,1.0,0,1.0,2,1.0 -1,794.0,1,1.0,0,1.0,2,1.0 -1,794.0,2,1.0,0,1.0,2,1.0 -1,795.0,1,1.0,0,1.0,2,1.0 -1,795.0,2,1.0,0,1.0,2,1.0 -1,796.0,1,1.0,0,1.0,2,1.0 -1,796.0,2,1.0,0,1.0,2,1.0 -1,797.0,1,1.0,0,1.0,2,1.0 -1,797.0,2,1.0,0,1.0,2,1.0 -1,798.0,1,1.0,0,1.0,2,1.0 -1,798.0,2,1.0,0,1.0,2,1.0 -1,799.0,1,1.0,0,1.0,2,1.0 -1,799.0,2,1.0,0,1.0,2,1.0 -1,800.0,1,1.0,0,1.0,2,1.0 -1,800.0,2,1.0,0,1.0,2,1.0 -1,801.0,1,1.0,0,1.0,2,1.0 -1,801.0,2,1.0,0,1.0,2,1.0 -1,802.0,1,1.0,0,1.0,2,1.0 -1,802.0,2,1.0,0,1.0,2,1.0 -1,803.0,1,1.0,0,1.0,2,1.0 -1,803.0,2,1.0,0,1.0,2,1.0 -1,804.0,1,1.0,0,1.0,2,1.0 -1,804.0,2,1.0,0,1.0,2,1.0 -1,805.0,1,1.0,0,1.0,2,1.0 -1,805.0,2,1.0,0,1.0,2,1.0 -1,806.0,1,1.0,0,1.0,2,1.0 -1,806.0,2,1.0,0,1.0,2,1.0 -1,807.0,1,1.0,0,1.0,2,1.0 -1,807.0,2,1.0,0,1.0,2,1.0 -1,808.0,1,1.0,0,1.0,2,1.0 -1,808.0,2,1.0,0,1.0,2,1.0 -1,809.0,1,1.0,0,1.0,2,1.0 -1,809.0,2,1.0,0,1.0,2,1.0 -1,810.0,1,1.0,0,1.0,2,1.0 -1,810.0,2,1.0,0,1.0,2,1.0 -1,811.0,1,1.0,0,1.0,2,1.0 -1,811.0,2,1.0,0,1.0,2,1.0 -1,812.0,1,1.0,0,1.0,2,1.0 -1,812.0,2,1.0,0,1.0,2,1.0 -1,813.0,1,1.0,0,1.0,2,1.0 -1,813.0,2,1.0,0,1.0,2,1.0 -1,814.0,1,1.0,0,1.0,2,1.0 -1,814.0,2,1.0,0,1.0,2,1.0 -1,815.0,1,1.0,0,1.0,2,1.0 -1,815.0,2,1.0,0,1.0,2,1.0 -1,816.0,1,1.0,0,1.0,2,1.0 -1,816.0,2,1.0,0,1.0,2,1.0 -1,817.0,1,1.0,0,1.0,2,1.0 -1,817.0,2,1.0,0,1.0,2,1.0 -1,818.0,1,1.0,0,1.0,2,1.0 -1,818.0,2,1.0,0,1.0,2,1.0 -1,819.0,1,1.0,0,1.0,2,1.0 -1,819.0,2,1.0,0,1.0,2,1.0 -1,820.0,1,1.0,0,1.0,2,1.0 -1,820.0,2,1.0,0,1.0,2,1.0 -1,821.0,1,1.0,0,1.0,2,1.0 -1,821.0,2,1.0,0,1.0,2,1.0 -1,822.0,1,1.0,0,1.0,2,1.0 -1,822.0,2,1.0,0,1.0,2,1.0 -1,823.0,1,1.0,0,1.0,2,1.0 -1,823.0,2,1.0,0,1.0,2,1.0 -1,824.0,1,1.0,0,1.0,2,1.0 -1,824.0,2,1.0,0,1.0,2,1.0 -1,825.0,1,1.0,0,1.0,2,1.0 -1,825.0,2,1.0,0,1.0,2,1.0 -1,826.0,1,1.0,0,1.0,2,1.0 -1,826.0,2,1.0,0,1.0,2,1.0 -1,827.0,1,1.0,0,1.0,2,1.0 -1,827.0,2,1.0,0,1.0,2,1.0 -1,828.0,1,1.0,0,1.0,2,1.0 -1,828.0,2,1.0,0,1.0,2,1.0 -1,829.0,1,1.0,0,1.0,2,1.0 -1,829.0,2,1.0,0,1.0,2,1.0 -1,830.0,1,1.0,0,1.0,2,1.0 -1,830.0,2,1.0,0,1.0,2,1.0 -1,831.0,1,1.0,0,1.0,2,1.0 -1,831.0,2,1.0,0,1.0,2,1.0 -1,832.0,1,1.0,0,1.0,2,1.0 -1,832.0,2,1.0,0,1.0,2,1.0 -1,833.0,1,1.0,0,1.0,2,1.0 -1,833.0,2,1.0,0,1.0,2,1.0 -1,834.0,1,1.0,0,1.0,2,1.0 -1,834.0,2,1.0,0,1.0,2,1.0 -1,835.0,1,1.0,0,1.0,2,1.0 -1,835.0,2,1.0,0,1.0,2,1.0 -1,836.0,1,1.0,0,1.0,2,1.0 -1,836.0,2,1.0,0,1.0,2,1.0 -1,837.0,1,1.0,0,1.0,2,1.0 -1,837.0,2,1.0,0,1.0,2,1.0 -1,838.0,1,1.0,0,1.0,2,1.0 -1,838.0,2,1.0,0,1.0,2,1.0 -1,839.0,1,1.0,0,1.0,2,1.0 -1,839.0,2,1.0,0,1.0,2,1.0 -1,840.0,1,1.0,0,1.0,2,1.0 -1,840.0,2,1.0,0,1.0,2,1.0 -1,841.0,1,1.0,0,1.0,2,1.0 -1,841.0,2,1.0,0,1.0,2,1.0 -1,842.0,1,1.0,0,1.0,2,1.0 -1,842.0,2,1.0,0,1.0,2,1.0 -1,843.0,1,1.0,0,1.0,2,1.0 -1,843.0,2,1.0,0,1.0,2,1.0 -1,844.0,1,1.0,0,1.0,2,1.0 -1,844.0,2,1.0,0,1.0,2,1.0 -1,845.0,1,1.0,0,1.0,2,1.0 -1,845.0,2,1.0,0,1.0,2,1.0 -1,846.0,1,1.0,0,1.0,2,1.0 -1,846.0,2,1.0,0,1.0,2,1.0 -1,847.0,1,1.0,0,1.0,2,1.0 -1,847.0,2,1.0,0,1.0,2,1.0 -1,848.0,1,1.0,0,1.0,2,1.0 -1,848.0,2,1.0,0,1.0,2,1.0 -1,849.0,1,1.0,0,1.0,2,1.0 -1,849.0,2,1.0,0,1.0,2,1.0 -1,850.0,1,1.0,0,1.0,2,1.0 -1,850.0,2,1.0,0,1.0,2,1.0 -1,851.0,1,1.0,0,1.0,2,1.0 -1,851.0,2,1.0,0,1.0,2,1.0 -1,852.0,1,1.0,0,1.0,2,1.0 -1,852.0,2,1.0,0,1.0,2,1.0 -1,853.0,1,1.0,0,1.0,2,1.0 -1,853.0,2,1.0,0,1.0,2,1.0 -1,854.0,1,1.0,0,1.0,2,1.0 -1,854.0,2,1.0,0,1.0,2,1.0 -1,855.0,1,1.0,0,1.0,2,1.0 -1,855.0,2,1.0,0,1.0,2,1.0 -1,856.0,1,1.0,0,1.0,2,1.0 -1,856.0,2,1.0,0,1.0,2,1.0 -1,857.0,1,1.0,0,1.0,2,1.0 -1,857.0,2,1.0,0,1.0,2,1.0 -1,858.0,1,1.0,0,1.0,2,1.0 -1,858.0,2,1.0,0,1.0,2,1.0 -1,859.0,1,1.0,0,1.0,2,1.0 -1,859.0,2,1.0,0,1.0,2,1.0 -1,860.0,1,1.0,0,1.0,2,1.0 -1,860.0,2,1.0,0,1.0,2,1.0 -1,861.0,1,1.0,0,1.0,2,1.0 -1,861.0,2,1.0,0,1.0,2,1.0 -1,862.0,1,1.0,0,1.0,2,1.0 -1,862.0,2,1.0,0,1.0,2,1.0 -1,863.0,1,1.0,0,1.0,2,1.0 -1,863.0,2,1.0,0,1.0,2,1.0 -1,864.0,1,1.0,0,1.0,2,1.0 -1,864.0,2,1.0,0,1.0,2,1.0 -1,865.0,1,1.0,0,1.0,2,1.0 -1,865.0,2,1.0,0,1.0,2,1.0 -1,866.0,1,1.0,0,1.0,2,1.0 -1,866.0,2,1.0,0,1.0,2,1.0 -1,867.0,1,1.0,0,1.0,2,1.0 -1,867.0,2,1.0,0,1.0,2,1.0 -1,868.0,1,1.0,0,1.0,2,1.0 -1,868.0,2,1.0,0,1.0,2,1.0 -1,869.0,1,1.0,0,1.0,2,1.0 -1,869.0,2,1.0,0,1.0,2,1.0 -1,870.0,1,1.0,0,1.0,2,1.0 -1,870.0,2,1.0,0,1.0,2,1.0 -1,871.0,1,1.0,0,1.0,2,1.0 -1,871.0,2,1.0,0,1.0,2,1.0 -1,872.0,1,1.0,0,1.0,2,1.0 -1,872.0,2,1.0,0,1.0,2,1.0 -1,873.0,1,1.0,0,1.0,2,1.0 -1,873.0,2,1.0,0,1.0,2,1.0 -1,874.0,1,1.0,0,1.0,2,1.0 -1,874.0,2,1.0,0,1.0,2,1.0 -1,875.0,1,1.0,0,1.0,2,1.0 -1,875.0,2,1.0,0,1.0,2,1.0 -1,876.0,1,1.0,0,1.0,2,1.0 -1,876.0,2,1.0,0,1.0,2,1.0 -1,877.0,1,1.0,0,1.0,2,1.0 -1,877.0,2,1.0,0,1.0,2,1.0 -1,878.0,1,1.0,0,1.0,2,1.0 -1,878.0,2,1.0,0,1.0,2,1.0 -1,879.0,1,1.0,0,1.0,2,1.0 -1,879.0,2,1.0,0,1.0,2,1.0 -1,880.0,1,1.0,0,1.0,2,1.0 -1,880.0,2,1.0,0,1.0,2,1.0 -1,881.0,1,1.0,0,1.0,2,1.0 -1,881.0,2,1.0,0,1.0,2,1.0 -1,882.0,1,1.0,0,1.0,2,1.0 -1,882.0,2,1.0,0,1.0,2,1.0 -1,883.0,1,1.0,0,1.0,2,1.0 -1,883.0,2,1.0,0,1.0,2,1.0 -1,884.0,1,1.0,0,1.0,2,1.0 -1,884.0,2,1.0,0,1.0,2,1.0 -1,885.0,1,1.0,0,1.0,2,1.0 -1,885.0,2,1.0,0,1.0,2,1.0 -1,886.0,1,1.0,0,1.0,2,1.0 -1,886.0,2,1.0,0,1.0,2,1.0 -1,887.0,1,1.0,0,1.0,2,1.0 -1,887.0,2,1.0,0,1.0,2,1.0 -1,888.0,1,1.0,0,1.0,2,1.0 -1,888.0,2,1.0,0,1.0,2,1.0 -1,889.0,1,1.0,0,1.0,2,1.0 -1,889.0,2,1.0,0,1.0,2,1.0 -1,890.0,1,1.0,0,1.0,2,1.0 -1,890.0,2,1.0,0,1.0,2,1.0 -1,891.0,1,1.0,0,1.0,2,1.0 -1,891.0,2,1.0,0,1.0,2,1.0 -1,892.0,1,1.0,0,1.0,2,1.0 -1,892.0,2,1.0,0,1.0,2,1.0 -1,893.0,1,1.0,0,1.0,2,1.0 -1,893.0,2,1.0,0,1.0,2,1.0 -1,894.0,1,1.0,0,1.0,2,1.0 -1,894.0,2,1.0,0,1.0,2,1.0 -1,895.0,1,1.0,0,1.0,2,1.0 -1,895.0,2,1.0,0,1.0,2,1.0 -1,896.0,1,1.0,0,1.0,2,1.0 -1,896.0,2,1.0,0,1.0,2,1.0 -1,897.0,1,1.0,0,1.0,2,1.0 -1,897.0,2,1.0,0,1.0,2,1.0 -1,898.0,1,1.0,0,1.0,2,1.0 -1,898.0,2,1.0,0,1.0,2,1.0 -1,899.0,1,1.0,0,1.0,2,1.0 -1,899.0,2,1.0,0,1.0,2,1.0 -1,900.0,1,1.0,0,1.0,2,1.0 -1,900.0,2,1.0,0,1.0,2,1.0 -1,901.0,1,1.0,0,1.0,2,1.0 -1,901.0,2,1.0,0,1.0,2,1.0 -1,902.0,1,1.0,0,1.0,2,1.0 -1,902.0,2,1.0,0,1.0,2,1.0 -1,903.0,1,1.0,0,1.0,2,1.0 -1,903.0,2,1.0,0,1.0,2,1.0 -1,904.0,1,1.0,0,1.0,2,1.0 -1,904.0,2,1.0,0,1.0,2,1.0 -1,905.0,1,1.0,0,1.0,2,1.0 -1,905.0,2,1.0,0,1.0,2,1.0 -1,906.0,1,1.0,0,1.0,2,1.0 -1,906.0,2,1.0,0,1.0,2,1.0 -1,907.0,1,1.0,0,1.0,2,1.0 -1,907.0,2,1.0,0,1.0,2,1.0 -1,908.0,1,1.0,0,1.0,2,1.0 -1,908.0,2,1.0,0,1.0,2,1.0 -1,909.0,1,1.0,0,1.0,2,1.0 -1,909.0,2,1.0,0,1.0,2,1.0 -1,910.0,1,1.0,0,1.0,2,1.0 -1,910.0,2,1.0,0,1.0,2,1.0 -1,911.0,1,1.0,0,1.0,2,1.0 -1,911.0,2,1.0,0,1.0,2,1.0 -1,912.0,1,1.0,0,1.0,2,1.0 -1,912.0,2,1.0,0,1.0,2,1.0 -1,913.0,1,1.0,0,1.0,2,1.0 -1,913.0,2,1.0,0,1.0,2,1.0 -1,914.0,1,1.0,0,1.0,2,1.0 -1,914.0,2,1.0,0,1.0,2,1.0 -1,915.0,1,1.0,0,1.0,2,1.0 -1,915.0,2,1.0,0,1.0,2,1.0 -1,916.0,1,1.0,0,1.0,2,1.0 -1,916.0,2,1.0,0,1.0,2,1.0 -1,917.0,1,1.0,0,1.0,2,1.0 -1,917.0,2,1.0,0,1.0,2,1.0 -1,918.0,1,1.0,0,1.0,2,1.0 -1,918.0,2,1.0,0,1.0,2,1.0 -1,919.0,1,1.0,0,1.0,2,1.0 -1,919.0,2,1.0,0,1.0,2,1.0 -1,920.0,1,1.0,0,1.0,2,1.0 -1,920.0,2,1.0,0,1.0,2,1.0 -1,921.0,1,1.0,0,1.0,2,1.0 -1,921.0,2,1.0,0,1.0,2,1.0 -1,922.0,1,1.0,0,1.0,2,1.0 -1,922.0,2,1.0,0,1.0,2,1.0 -1,923.0,1,1.0,0,1.0,2,1.0 -1,923.0,2,1.0,0,1.0,2,1.0 -1,924.0,1,1.0,0,1.0,2,1.0 -1,924.0,2,1.0,0,1.0,2,1.0 -1,925.0,1,1.0,0,1.0,2,1.0 -1,925.0,2,1.0,0,1.0,2,1.0 -1,926.0,1,1.0,0,1.0,2,1.0 -1,926.0,2,1.0,0,1.0,2,1.0 -1,927.0,1,1.0,0,1.0,2,1.0 -1,927.0,2,1.0,0,1.0,2,1.0 -1,928.0,1,1.0,0,1.0,2,1.0 -1,928.0,2,1.0,0,1.0,2,1.0 -1,929.0,1,1.0,0,1.0,2,1.0 -1,929.0,2,1.0,0,1.0,2,1.0 -1,930.0,1,1.0,0,1.0,2,1.0 -1,930.0,2,1.0,0,1.0,2,1.0 -1,931.0,1,1.0,0,1.0,2,1.0 -1,931.0,2,1.0,0,1.0,2,1.0 -1,932.0,1,1.0,0,1.0,2,1.0 -1,932.0,2,1.0,0,1.0,2,1.0 -1,933.0,1,1.0,0,1.0,2,1.0 -1,933.0,2,1.0,0,1.0,2,1.0 -1,934.0,1,1.0,0,1.0,2,1.0 -1,934.0,2,1.0,0,1.0,2,1.0 -1,935.0,1,1.0,0,1.0,2,1.0 -1,935.0,2,1.0,0,1.0,2,1.0 -1,936.0,1,1.0,0,1.0,2,1.0 -1,936.0,2,1.0,0,1.0,2,1.0 -1,937.0,1,1.0,0,1.0,2,1.0 -1,937.0,2,1.0,0,1.0,2,1.0 -1,938.0,1,1.0,0,1.0,2,1.0 -1,938.0,2,1.0,0,1.0,2,1.0 -1,939.0,1,1.0,0,1.0,2,1.0 -1,939.0,2,1.0,0,1.0,2,1.0 -1,940.0,1,1.0,0,1.0,2,1.0 -1,940.0,2,1.0,0,1.0,2,1.0 -1,941.0,1,1.0,0,1.0,2,1.0 -1,941.0,2,1.0,0,1.0,2,1.0 -1,942.0,1,1.0,0,1.0,2,1.0 -1,942.0,2,1.0,0,1.0,2,1.0 -1,943.0,1,1.0,0,1.0,2,1.0 -1,943.0,2,1.0,0,1.0,2,1.0 -1,944.0,1,1.0,0,1.0,2,1.0 -1,944.0,2,1.0,0,1.0,2,1.0 -1,945.0,1,1.0,0,1.0,2,1.0 -1,945.0,2,1.0,0,1.0,2,1.0 -1,946.0,1,1.0,0,1.0,2,1.0 -1,946.0,2,1.0,0,1.0,2,1.0 -1,947.0,1,1.0,0,1.0,2,1.0 -1,947.0,2,1.0,0,1.0,2,1.0 -1,948.0,1,1.0,0,1.0,2,1.0 -1,948.0,2,1.0,0,1.0,2,1.0 -1,949.0,1,1.0,0,1.0,2,1.0 -1,949.0,2,1.0,0,1.0,2,1.0 -1,950.0,1,1.0,0,1.0,2,1.0 -1,950.0,2,1.0,0,1.0,2,1.0 -1,951.0,1,1.0,0,1.0,2,1.0 -1,951.0,2,1.0,0,1.0,2,1.0 -1,952.0,1,1.0,0,1.0,2,1.0 -1,952.0,2,1.0,0,1.0,2,1.0 -1,953.0,1,1.0,0,1.0,2,1.0 -1,953.0,2,1.0,0,1.0,2,1.0 -1,954.0,1,1.0,0,1.0,2,1.0 -1,954.0,2,1.0,0,1.0,2,1.0 -1,955.0,1,1.0,0,1.0,2,1.0 -1,955.0,2,1.0,0,1.0,2,1.0 -1,956.0,1,1.0,0,1.0,2,1.0 -1,956.0,2,1.0,0,1.0,2,1.0 -1,957.0,1,1.0,0,1.0,2,1.0 -1,957.0,2,1.0,0,1.0,2,1.0 -1,958.0,1,1.0,0,1.0,2,1.0 -1,958.0,2,1.0,0,1.0,2,1.0 -1,959.0,1,1.0,0,1.0,2,1.0 -1,959.0,2,1.0,0,1.0,2,1.0 -1,960.0,1,1.0,0,1.0,2,1.0 -1,960.0,2,1.0,0,1.0,2,1.0 -1,961.0,1,1.0,0,1.0,2,1.0 -1,961.0,2,1.0,0,1.0,2,1.0 -1,962.0,1,1.0,0,1.0,2,1.0 -1,962.0,2,1.0,0,1.0,2,1.0 -1,963.0,1,1.0,0,1.0,2,1.0 -1,963.0,2,1.0,0,1.0,2,1.0 -1,964.0,1,1.0,0,1.0,2,1.0 -1,964.0,2,1.0,0,1.0,2,1.0 -1,965.0,1,1.0,0,1.0,2,1.0 -1,965.0,2,1.0,0,1.0,2,1.0 -1,966.0,1,1.0,0,1.0,2,1.0 -1,966.0,2,1.0,0,1.0,2,1.0 -1,967.0,1,1.0,0,1.0,2,1.0 -1,967.0,2,1.0,0,1.0,2,1.0 -1,968.0,1,1.0,0,1.0,2,1.0 -1,968.0,2,1.0,0,1.0,2,1.0 -1,969.0,1,1.0,0,1.0,2,1.0 -1,969.0,2,1.0,0,1.0,2,1.0 -1,970.0,1,1.0,0,1.0,2,1.0 -1,970.0,2,1.0,0,1.0,2,1.0 -1,971.0,1,1.0,0,1.0,2,1.0 -1,971.0,2,1.0,0,1.0,2,1.0 -1,972.0,1,1.0,0,1.0,2,1.0 -1,972.0,2,1.0,0,1.0,2,1.0 -1,973.0,1,1.0,0,1.0,2,1.0 -1,973.0,2,1.0,0,1.0,2,1.0 -1,974.0,1,1.0,0,1.0,2,1.0 -1,974.0,2,1.0,0,1.0,2,1.0 -1,975.0,1,1.0,0,1.0,2,1.0 -1,975.0,2,1.0,0,1.0,2,1.0 -1,976.0,1,1.0,0,1.0,2,1.0 -1,976.0,2,1.0,0,1.0,2,1.0 -1,977.0,1,1.0,0,1.0,2,1.0 -1,977.0,2,1.0,0,1.0,2,1.0 -1,978.0,1,1.0,0,1.0,2,1.0 -1,978.0,2,1.0,0,1.0,2,1.0 -1,979.0,1,1.0,0,1.0,2,1.0 -1,979.0,2,1.0,0,1.0,2,1.0 -1,980.0,1,1.0,0,1.0,2,1.0 -1,980.0,2,1.0,0,1.0,2,1.0 -1,981.0,1,1.0,0,1.0,2,1.0 -1,981.0,2,1.0,0,1.0,2,1.0 -1,982.0,1,1.0,0,1.0,2,1.0 -1,982.0,2,1.0,0,1.0,2,1.0 -1,983.0,1,1.0,0,1.0,2,1.0 -1,983.0,2,1.0,0,1.0,2,1.0 -1,984.0,1,1.0,0,1.0,2,1.0 -1,984.0,2,1.0,0,1.0,2,1.0 -1,985.0,1,1.0,0,1.0,2,1.0 -1,985.0,2,1.0,0,1.0,2,1.0 -1,986.0,1,1.0,0,1.0,2,1.0 -1,986.0,2,1.0,0,1.0,2,1.0 -1,987.0,1,1.0,0,1.0,2,1.0 -1,987.0,2,1.0,0,1.0,2,1.0 -1,988.0,1,1.0,0,1.0,2,1.0 -1,988.0,2,1.0,0,1.0,2,1.0 -1,989.0,1,1.0,0,1.0,2,1.0 -1,989.0,2,1.0,0,1.0,2,1.0 -1,990.0,1,1.0,0,1.0,2,1.0 -1,990.0,2,1.0,0,1.0,2,1.0 -1,991.0,1,1.0,0,1.0,2,1.0 -1,991.0,2,1.0,0,1.0,2,1.0 -1,992.0,1,1.0,0,1.0,2,1.0 -1,992.0,2,1.0,0,1.0,2,1.0 -1,993.0,1,1.0,0,1.0,2,1.0 -1,993.0,2,1.0,0,1.0,2,1.0 -1,994.0,1,1.0,0,1.0,2,1.0 -1,994.0,2,1.0,0,1.0,2,1.0 -1,995.0,1,1.0,0,1.0,2,1.0 -1,995.0,2,1.0,0,1.0,2,1.0 -1,996.0,1,1.0,0,1.0,2,1.0 -1,996.0,2,1.0,0,1.0,2,1.0 -1,997.0,1,1.0,0,1.0,2,1.0 -1,997.0,2,1.0,0,1.0,2,1.0 -1,998.0,1,1.0,0,1.0,2,1.0 -1,998.0,2,1.0,0,1.0,2,1.0 -1,999.0,1,1.0,0,1.0,2,1.0 -1,999.0,2,1.0,0,1.0,2,1.0 +RAVEN_sample_ID,seconds,macro,scaling,signal,prefix,PointProbability,ProbabilityWeight +0,0.0,1,1.0,27.0242322491,1,1.0,1.0 +0,0.0,2,1.0,29.2573638308,1,1.0,1.0 +0,1.0,1,1.0,28.8348697181,1,1.0,1.0 +0,1.0,2,1.0,30.2568050745,1,1.0,1.0 +0,2.0,1,1.0,13.4127772486,1,1.0,1.0 +0,2.0,2,1.0,16.8925678704,1,1.0,1.0 +0,3.0,1,1.0,0.0561538792736,1,1.0,1.0 +0,3.0,2,1.0,20.3273250499,1,1.0,1.0 +0,4.0,1,1.0,4.249232925,1,1.0,1.0 +0,4.0,2,1.0,24.0371969976,1,1.0,1.0 +0,5.0,1,1.0,-3.22284799673,1,1.0,1.0 +0,5.0,2,1.0,11.6268727853,1,1.0,1.0 +0,6.0,1,1.0,-19.3466812631,1,1.0,1.0 +0,6.0,2,1.0,-4.05635111105,1,1.0,1.0 +0,7.0,1,1.0,-23.7411678307,1,1.0,1.0 +0,7.0,2,1.0,-10.1752870398,1,1.0,1.0 +0,8.0,1,1.0,-12.1286195893,1,1.0,1.0 +0,8.0,2,1.0,-6.36858331451,1,1.0,1.0 +0,9.0,1,1.0,-4.87751086208,1,1.0,1.0 +0,9.0,2,1.0,-10.6475758977,1,1.0,1.0 +0,10.0,1,1.0,-10.6408436372,1,1.0,1.0 +0,10.0,2,1.0,-23.673965767,1,1.0,1.0 +0,11.0,1,1.0,-5.86438378039,1,1.0,1.0 +0,11.0,2,1.0,-17.1288206275,1,1.0,1.0 +0,12.0,1,1.0,12.7867161518,1,1.0,1.0 +0,12.0,2,1.0,2.95762403565,1,1.0,1.0 +0,13.0,1,1.0,24.6398586104,1,1.0,1.0 +0,13.0,2,1.0,9.38858894936,1,1.0,1.0 +0,14.0,1,1.0,17.3021495389,1,1.0,1.0 +0,14.0,2,1.0,5.91733924842,1,1.0,1.0 +0,15.0,1,1.0,17.0408943809,1,1.0,1.0 +0,15.0,2,1.0,14.5556176459,1,1.0,1.0 +0,16.0,1,1.0,27.3642559384,1,1.0,1.0 +0,16.0,2,1.0,29.5993416795,1,1.0,1.0 +0,17.0,1,1.0,24.3840814232,1,1.0,1.0 +0,17.0,2,1.0,29.2576497182,1,1.0,1.0 +0,18.0,1,1.0,7.33927731132,1,1.0,1.0 +0,18.0,2,1.0,15.2337611307,1,1.0,1.0 +0,19.0,1,1.0,-4.08938696373,1,1.0,1.0 +0,19.0,2,1.0,14.0206783153,1,1.0,1.0 +0,20.0,1,1.0,-1.77321628967,1,1.0,1.0 +0,20.0,2,1.0,15.6002390866,1,1.0,1.0 +0,21.0,1,1.0,-6.27359053562,1,1.0,1.0 +0,21.0,2,1.0,3.88627075569,1,1.0,1.0 +0,22.0,1,1.0,-22.7655134787,1,1.0,1.0 +0,22.0,2,1.0,-11.4215056409,1,1.0,1.0 +0,23.0,1,1.0,-25.7056104768,1,1.0,1.0 +0,23.0,2,1.0,-17.9209355164,1,1.0,1.0 +0,24.0,1,1.0,-11.6612474938,1,1.0,1.0 +0,24.0,2,1.0,-10.2695756719,1,1.0,1.0 +0,25.0,1,1.0,-0.22142009701,1,1.0,1.0 +0,25.0,2,1.0,-9.61767410891,1,1.0,1.0 +0,26.0,1,1.0,-3.66554838218,1,1.0,1.0 +0,26.0,2,1.0,-15.8677430718,1,1.0,1.0 +0,27.0,1,1.0,1.91305284935,1,1.0,1.0 +0,27.0,2,1.0,-8.55921094715,1,1.0,1.0 +0,28.0,1,1.0,20.3151885034,1,1.0,1.0 +0,28.0,2,1.0,11.8686591679,1,1.0,1.0 +0,29.0,1,1.0,27.8104491319,1,1.0,1.0 +0,29.0,2,1.0,14.993948212,1,1.0,1.0 +0,30.0,1,1.0,18.660347492,1,1.0,1.0 +0,30.0,2,1.0,11.6169588243,1,1.0,1.0 +0,31.0,1,1.0,16.3824668201,1,1.0,1.0 +0,31.0,2,1.0,21.2592055265,1,1.0,1.0 +0,32.0,1,1.0,19.489027274,1,1.0,1.0 +0,32.0,2,1.0,32.0371427431,1,1.0,1.0 +0,33.0,1,1.0,16.2563832678,1,1.0,1.0 +0,33.0,2,1.0,28.0447427152,1,1.0,1.0 +0,34.0,1,1.0,-2.84565550161,1,1.0,1.0 +0,34.0,2,1.0,12.4521754921,1,1.0,1.0 +0,35.0,1,1.0,-12.0219502938,1,1.0,1.0 +0,35.0,2,1.0,5.91664329367,1,1.0,1.0 +0,36.0,1,1.0,-7.13133344444,1,1.0,1.0 +0,36.0,2,1.0,7.30434915409,1,1.0,1.0 +0,37.0,1,1.0,-8.24779135444,1,1.0,1.0 +0,37.0,2,1.0,-2.35918755366,1,1.0,1.0 +0,38.0,1,1.0,-17.0648296919,1,1.0,1.0 +0,38.0,2,1.0,-20.5649433615,1,1.0,1.0 +0,39.0,1,1.0,-18.4836171329,1,1.0,1.0 +0,39.0,2,1.0,-19.915781973,1,1.0,1.0 +0,40.0,1,1.0,-3.13142677102,1,1.0,1.0 +0,40.0,2,1.0,-9.83563424163,1,1.0,1.0 +0,41.0,1,1.0,8.45619324983,1,1.0,1.0 +0,41.0,2,1.0,-6.35920619172,1,1.0,1.0 +0,42.0,1,1.0,5.21702666459,1,1.0,1.0 +0,42.0,2,1.0,-10.2829613417,1,1.0,1.0 +0,43.0,1,1.0,9.96590431995,1,1.0,1.0 +0,43.0,2,1.0,-0.387623540407,1,1.0,1.0 +0,44.0,1,1.0,25.288652132,1,1.0,1.0 +0,44.0,2,1.0,17.2429037136,1,1.0,1.0 +0,45.0,1,1.0,29.607626708,1,1.0,1.0 +0,45.0,2,1.0,22.934510223,1,1.0,1.0 +0,46.0,1,1.0,19.7511626885,1,1.0,1.0 +0,46.0,2,1.0,16.5273732836,1,1.0,1.0 +0,47.0,1,1.0,10.717956508,1,1.0,1.0 +0,47.0,2,1.0,20.3119856686,1,1.0,1.0 +0,48.0,1,1.0,13.0540039288,1,1.0,1.0 +0,48.0,2,1.0,29.3637934131,1,1.0,1.0 +0,49.0,1,1.0,7.13799714798,1,1.0,1.0 +0,49.0,2,1.0,20.7290603832,1,1.0,1.0 +0,50.0,1,1.0,-11.7020960379,1,1.0,1.0 +0,50.0,2,1.0,3.17981790468,1,1.0,1.0 +0,51.0,1,1.0,-18.8985803404,1,1.0,1.0 +0,51.0,2,1.0,-2.8815868294,1,1.0,1.0 +0,52.0,1,1.0,-13.1837768495,1,1.0,1.0 +0,52.0,2,1.0,-1.84892844531,1,1.0,1.0 +0,53.0,1,1.0,-7.94156381959,1,1.0,1.0 +0,53.0,2,1.0,-9.7154258844,1,1.0,1.0 +0,54.0,1,1.0,-15.7643571732,1,1.0,1.0 +0,54.0,2,1.0,-22.3202644175,1,1.0,1.0 +0,55.0,1,1.0,-16.3416016068,1,1.0,1.0 +0,55.0,2,1.0,-19.1418833055,1,1.0,1.0 +0,56.0,1,1.0,5.58272223186,1,1.0,1.0 +0,56.0,2,1.0,-3.41930006658,1,1.0,1.0 +0,57.0,1,1.0,13.3994026565,1,1.0,1.0 +0,57.0,2,1.0,-0.239005550421,1,1.0,1.0 +0,58.0,1,1.0,13.9903843615,1,1.0,1.0 +0,58.0,2,1.0,-2.74129056789,1,1.0,1.0 +0,59.0,1,1.0,14.5040119687,1,1.0,1.0 +0,59.0,2,1.0,10.0511422096,1,1.0,1.0 +0,60.0,1,1.0,27.6958896216,1,1.0,1.0 +0,60.0,2,1.0,26.2818575244,1,1.0,1.0 +0,61.0,1,1.0,30.446654578,1,1.0,1.0 +0,61.0,2,1.0,28.820560352,1,1.0,1.0 +0,62.0,1,1.0,13.65553428,1,1.0,1.0 +0,62.0,2,1.0,17.4852455924,1,1.0,1.0 +0,63.0,1,1.0,4.05737186778,1,1.0,1.0 +0,63.0,2,1.0,18.3049360341,1,1.0,1.0 diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml index 4b076fbda3..c27d5a9260 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/romMeta.xml @@ -12,41 +12,76 @@ 1 + + + 9.850650578e+00 + + 1.248158468e+00 + 2.414567577e+00 + + + 4.693581564e+00 + 9.573561573e-01 + + + 1 - 1 + 2 1 - 1 + 2 + + + + + + + -1.085841499e-02 + 1.613550804e-01 + 7.653636687e-01 + 6.251511988e-01 + 1,0,1 + + + 8.219835952e-04 + 4.261816231e-01 + -2.570199447e-01 + -7.428152214e-01 + 4.935974461e-01 + 1,0,2 + + + + + + + + - 2.114254284e-05 - -1.134903740e+00 - -2.630983873e-01 - -9.932710697e-01 - -8.366523797e-01 - 8.840743465e-01 - 2.945535390e-02 - 2,0,3 + 7.701406117e-03 + -3.509449860e-01 + -9.996688337e-01 + 4.375341161e-01 + 1,0,1 - -1.872842056e-05 - -1.347367989e+00 - -4.082267741e-01 - -9.881227307e-01 - -9.381630843e-01 - 9.686163148e-01 - 2.694538532e-02 - 2,0,3 + -4.132470160e-03 + -7.084257030e-02 + -4.263429897e-01 + -5.699905321e-01 + 8.685697435e-01 + 1,0,2 - + diff --git a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/samples.csv b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/samples.csv index 2d71996930..eb66c742f5 100644 --- a/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/samples.csv +++ b/tests/framework/ROM/TimeSeries/MultiResolutionTSA/gold/SimpleDWT/samples.csv @@ -1,201 +1,257 @@ -RAVEN_sample_ID,pivot,macro,scaling,signal0,signal1,PointProbability,prefix,ProbabilityWeight -0,0.0,1,1.0,0,0,1.0,1,1.0 -0,1.0,1,1.0,0,0,1.0,1,1.0 -0,2.0,1,1.0,0,0,1.0,1,1.0 -0,3.0,1,1.0,0,0,1.0,1,1.0 -0,4.0,1,1.0,0,0,1.0,1,1.0 -0,5.0,1,1.0,0,0,1.0,1,1.0 -0,6.0,1,1.0,0,0,1.0,1,1.0 -0,7.0,1,1.0,0,0,1.0,1,1.0 -0,8.0,1,1.0,0,0,1.0,1,1.0 -0,9.0,1,1.0,0,0,1.0,1,1.0 -0,10.0,1,1.0,0,0,1.0,1,1.0 -0,11.0,1,1.0,0,0,1.0,1,1.0 -0,12.0,1,1.0,0,0,1.0,1,1.0 -0,13.0,1,1.0,0,0,1.0,1,1.0 -0,14.0,1,1.0,0,0,1.0,1,1.0 -0,15.0,1,1.0,0,0,1.0,1,1.0 -0,16.0,1,1.0,0,0,1.0,1,1.0 -0,17.0,1,1.0,0,0,1.0,1,1.0 -0,18.0,1,1.0,0,0,1.0,1,1.0 -0,19.0,1,1.0,0,0,1.0,1,1.0 -0,20.0,1,1.0,0,0,1.0,1,1.0 -0,21.0,1,1.0,0,0,1.0,1,1.0 -0,22.0,1,1.0,0,0,1.0,1,1.0 -0,23.0,1,1.0,0,0,1.0,1,1.0 -0,24.0,1,1.0,0,0,1.0,1,1.0 -0,25.0,1,1.0,0,0,1.0,1,1.0 -0,26.0,1,1.0,0,0,1.0,1,1.0 -0,27.0,1,1.0,0,0,1.0,1,1.0 -0,28.0,1,1.0,0,0,1.0,1,1.0 -0,29.0,1,1.0,0,0,1.0,1,1.0 -0,30.0,1,1.0,0,0,1.0,1,1.0 -0,31.0,1,1.0,0,0,1.0,1,1.0 -0,32.0,1,1.0,0,0,1.0,1,1.0 -0,33.0,1,1.0,0,0,1.0,1,1.0 -0,34.0,1,1.0,0,0,1.0,1,1.0 -0,35.0,1,1.0,0,0,1.0,1,1.0 -0,36.0,1,1.0,0,0,1.0,1,1.0 -0,37.0,1,1.0,0,0,1.0,1,1.0 -0,38.0,1,1.0,0,0,1.0,1,1.0 -0,39.0,1,1.0,0,0,1.0,1,1.0 -0,40.0,1,1.0,0,0,1.0,1,1.0 -0,41.0,1,1.0,0,0,1.0,1,1.0 -0,42.0,1,1.0,0,0,1.0,1,1.0 -0,43.0,1,1.0,0,0,1.0,1,1.0 -0,44.0,1,1.0,0,0,1.0,1,1.0 -0,45.0,1,1.0,0,0,1.0,1,1.0 -0,46.0,1,1.0,0,0,1.0,1,1.0 -0,47.0,1,1.0,0,0,1.0,1,1.0 -0,48.0,1,1.0,0,0,1.0,1,1.0 -0,49.0,1,1.0,0,0,1.0,1,1.0 -0,50.0,1,1.0,0,0,1.0,1,1.0 -0,51.0,1,1.0,0,0,1.0,1,1.0 -0,52.0,1,1.0,0,0,1.0,1,1.0 -0,53.0,1,1.0,0,0,1.0,1,1.0 -0,54.0,1,1.0,0,0,1.0,1,1.0 -0,55.0,1,1.0,0,0,1.0,1,1.0 -0,56.0,1,1.0,0,0,1.0,1,1.0 -0,57.0,1,1.0,0,0,1.0,1,1.0 -0,58.0,1,1.0,0,0,1.0,1,1.0 -0,59.0,1,1.0,0,0,1.0,1,1.0 -0,60.0,1,1.0,0,0,1.0,1,1.0 -0,61.0,1,1.0,0,0,1.0,1,1.0 -0,62.0,1,1.0,0,0,1.0,1,1.0 -0,63.0,1,1.0,0,0,1.0,1,1.0 -0,64.0,1,1.0,0,0,1.0,1,1.0 -0,65.0,1,1.0,0,0,1.0,1,1.0 -0,66.0,1,1.0,0,0,1.0,1,1.0 -0,67.0,1,1.0,0,0,1.0,1,1.0 -0,68.0,1,1.0,0,0,1.0,1,1.0 -0,69.0,1,1.0,0,0,1.0,1,1.0 -0,70.0,1,1.0,0,0,1.0,1,1.0 -0,71.0,1,1.0,0,0,1.0,1,1.0 -0,72.0,1,1.0,0,0,1.0,1,1.0 -0,73.0,1,1.0,0,0,1.0,1,1.0 -0,74.0,1,1.0,0,0,1.0,1,1.0 -0,75.0,1,1.0,0,0,1.0,1,1.0 -0,76.0,1,1.0,0,0,1.0,1,1.0 -0,77.0,1,1.0,0,0,1.0,1,1.0 -0,78.0,1,1.0,0,0,1.0,1,1.0 -0,79.0,1,1.0,0,0,1.0,1,1.0 -0,80.0,1,1.0,0,0,1.0,1,1.0 -0,81.0,1,1.0,0,0,1.0,1,1.0 -0,82.0,1,1.0,0,0,1.0,1,1.0 -0,83.0,1,1.0,0,0,1.0,1,1.0 -0,84.0,1,1.0,0,0,1.0,1,1.0 -0,85.0,1,1.0,0,0,1.0,1,1.0 -0,86.0,1,1.0,0,0,1.0,1,1.0 -0,87.0,1,1.0,0,0,1.0,1,1.0 -0,88.0,1,1.0,0,0,1.0,1,1.0 -0,89.0,1,1.0,0,0,1.0,1,1.0 -0,90.0,1,1.0,0,0,1.0,1,1.0 -0,91.0,1,1.0,0,0,1.0,1,1.0 -0,92.0,1,1.0,0,0,1.0,1,1.0 -0,93.0,1,1.0,0,0,1.0,1,1.0 -0,94.0,1,1.0,0,0,1.0,1,1.0 -0,95.0,1,1.0,0,0,1.0,1,1.0 -0,96.0,1,1.0,0,0,1.0,1,1.0 -0,97.0,1,1.0,0,0,1.0,1,1.0 -0,98.0,1,1.0,0,0,1.0,1,1.0 -0,99.0,1,1.0,0,0,1.0,1,1.0 -1,0.0,1,1.0,0,0,1.0,2,1.0 -1,1.0,1,1.0,0,0,1.0,2,1.0 -1,2.0,1,1.0,0,0,1.0,2,1.0 -1,3.0,1,1.0,0,0,1.0,2,1.0 -1,4.0,1,1.0,0,0,1.0,2,1.0 -1,5.0,1,1.0,0,0,1.0,2,1.0 -1,6.0,1,1.0,0,0,1.0,2,1.0 -1,7.0,1,1.0,0,0,1.0,2,1.0 -1,8.0,1,1.0,0,0,1.0,2,1.0 -1,9.0,1,1.0,0,0,1.0,2,1.0 -1,10.0,1,1.0,0,0,1.0,2,1.0 -1,11.0,1,1.0,0,0,1.0,2,1.0 -1,12.0,1,1.0,0,0,1.0,2,1.0 -1,13.0,1,1.0,0,0,1.0,2,1.0 -1,14.0,1,1.0,0,0,1.0,2,1.0 -1,15.0,1,1.0,0,0,1.0,2,1.0 -1,16.0,1,1.0,0,0,1.0,2,1.0 -1,17.0,1,1.0,0,0,1.0,2,1.0 -1,18.0,1,1.0,0,0,1.0,2,1.0 -1,19.0,1,1.0,0,0,1.0,2,1.0 -1,20.0,1,1.0,0,0,1.0,2,1.0 -1,21.0,1,1.0,0,0,1.0,2,1.0 -1,22.0,1,1.0,0,0,1.0,2,1.0 -1,23.0,1,1.0,0,0,1.0,2,1.0 -1,24.0,1,1.0,0,0,1.0,2,1.0 -1,25.0,1,1.0,0,0,1.0,2,1.0 -1,26.0,1,1.0,0,0,1.0,2,1.0 -1,27.0,1,1.0,0,0,1.0,2,1.0 -1,28.0,1,1.0,0,0,1.0,2,1.0 -1,29.0,1,1.0,0,0,1.0,2,1.0 -1,30.0,1,1.0,0,0,1.0,2,1.0 -1,31.0,1,1.0,0,0,1.0,2,1.0 -1,32.0,1,1.0,0,0,1.0,2,1.0 -1,33.0,1,1.0,0,0,1.0,2,1.0 -1,34.0,1,1.0,0,0,1.0,2,1.0 -1,35.0,1,1.0,0,0,1.0,2,1.0 -1,36.0,1,1.0,0,0,1.0,2,1.0 -1,37.0,1,1.0,0,0,1.0,2,1.0 -1,38.0,1,1.0,0,0,1.0,2,1.0 -1,39.0,1,1.0,0,0,1.0,2,1.0 -1,40.0,1,1.0,0,0,1.0,2,1.0 -1,41.0,1,1.0,0,0,1.0,2,1.0 -1,42.0,1,1.0,0,0,1.0,2,1.0 -1,43.0,1,1.0,0,0,1.0,2,1.0 -1,44.0,1,1.0,0,0,1.0,2,1.0 -1,45.0,1,1.0,0,0,1.0,2,1.0 -1,46.0,1,1.0,0,0,1.0,2,1.0 -1,47.0,1,1.0,0,0,1.0,2,1.0 -1,48.0,1,1.0,0,0,1.0,2,1.0 -1,49.0,1,1.0,0,0,1.0,2,1.0 -1,50.0,1,1.0,0,0,1.0,2,1.0 -1,51.0,1,1.0,0,0,1.0,2,1.0 -1,52.0,1,1.0,0,0,1.0,2,1.0 -1,53.0,1,1.0,0,0,1.0,2,1.0 -1,54.0,1,1.0,0,0,1.0,2,1.0 -1,55.0,1,1.0,0,0,1.0,2,1.0 -1,56.0,1,1.0,0,0,1.0,2,1.0 -1,57.0,1,1.0,0,0,1.0,2,1.0 -1,58.0,1,1.0,0,0,1.0,2,1.0 -1,59.0,1,1.0,0,0,1.0,2,1.0 -1,60.0,1,1.0,0,0,1.0,2,1.0 -1,61.0,1,1.0,0,0,1.0,2,1.0 -1,62.0,1,1.0,0,0,1.0,2,1.0 -1,63.0,1,1.0,0,0,1.0,2,1.0 -1,64.0,1,1.0,0,0,1.0,2,1.0 -1,65.0,1,1.0,0,0,1.0,2,1.0 -1,66.0,1,1.0,0,0,1.0,2,1.0 -1,67.0,1,1.0,0,0,1.0,2,1.0 -1,68.0,1,1.0,0,0,1.0,2,1.0 -1,69.0,1,1.0,0,0,1.0,2,1.0 -1,70.0,1,1.0,0,0,1.0,2,1.0 -1,71.0,1,1.0,0,0,1.0,2,1.0 -1,72.0,1,1.0,0,0,1.0,2,1.0 -1,73.0,1,1.0,0,0,1.0,2,1.0 -1,74.0,1,1.0,0,0,1.0,2,1.0 -1,75.0,1,1.0,0,0,1.0,2,1.0 -1,76.0,1,1.0,0,0,1.0,2,1.0 -1,77.0,1,1.0,0,0,1.0,2,1.0 -1,78.0,1,1.0,0,0,1.0,2,1.0 -1,79.0,1,1.0,0,0,1.0,2,1.0 -1,80.0,1,1.0,0,0,1.0,2,1.0 -1,81.0,1,1.0,0,0,1.0,2,1.0 -1,82.0,1,1.0,0,0,1.0,2,1.0 -1,83.0,1,1.0,0,0,1.0,2,1.0 -1,84.0,1,1.0,0,0,1.0,2,1.0 -1,85.0,1,1.0,0,0,1.0,2,1.0 -1,86.0,1,1.0,0,0,1.0,2,1.0 -1,87.0,1,1.0,0,0,1.0,2,1.0 -1,88.0,1,1.0,0,0,1.0,2,1.0 -1,89.0,1,1.0,0,0,1.0,2,1.0 -1,90.0,1,1.0,0,0,1.0,2,1.0 -1,91.0,1,1.0,0,0,1.0,2,1.0 -1,92.0,1,1.0,0,0,1.0,2,1.0 -1,93.0,1,1.0,0,0,1.0,2,1.0 -1,94.0,1,1.0,0,0,1.0,2,1.0 -1,95.0,1,1.0,0,0,1.0,2,1.0 -1,96.0,1,1.0,0,0,1.0,2,1.0 -1,97.0,1,1.0,0,0,1.0,2,1.0 -1,98.0,1,1.0,0,0,1.0,2,1.0 -1,99.0,1,1.0,0,0,1.0,2,1.0 +RAVEN_sample_ID,pivot,macro,scaling,signal0,signal1,prefix,ProbabilityWeight,PointProbability +0,0.0,1,1.0,3.29830109936,0.243306563645,1,1.0,1.0 +0,1.0,1,1.0,10.560897187,0.414022674174,1,1.0,1.0 +0,2.0,1,1.0,8.27992488344,1.36537231682,1,1.0,1.0 +0,3.0,1,1.0,5.59773325101,2.82092461306,1,1.0,1.0 +0,4.0,1,1.0,4.72954356537,0.886393679903,1,1.0,1.0 +0,5.0,1,1.0,3.18467363836,1.42462259305,1,1.0,1.0 +0,6.0,1,1.0,9.63439301315,-2.84070047391,1,1.0,1.0 +0,7.0,1,1.0,12.988275503,-0.255702140254,1,1.0,1.0 +0,8.0,1,1.0,18.916891372,-0.860728218267,1,1.0,1.0 +0,9.0,1,1.0,21.790754127,-1.14418603145,1,1.0,1.0 +0,10.0,1,1.0,20.475031441,-0.744459661482,1,1.0,1.0 +0,11.0,1,1.0,11.1952877614,0.364679225908,1,1.0,1.0 +0,12.0,1,1.0,3.92077583251,0.851111291185,1,1.0,1.0 +0,13.0,1,1.0,-4.48939960926,1.60899235783,1,1.0,1.0 +0,14.0,1,1.0,-8.21712186919,0.46681462383,1,1.0,1.0 +0,15.0,1,1.0,-8.10747692155,-0.0531873932581,1,1.0,1.0 +0,16.0,1,1.0,-2.40373150553,-0.270659515349,1,1.0,1.0 +0,17.0,1,1.0,3.71512428267,-4.50630935755,1,1.0,1.0 +0,18.0,1,1.0,13.8077198447,-5.14425297697,1,1.0,1.0 +0,19.0,1,1.0,23.6474389344,-2.41601796381,1,1.0,1.0 +0,20.0,1,1.0,30.1414836046,-1.04701351819,1,1.0,1.0 +0,21.0,1,1.0,32.9611362509,-3.72874268536,1,1.0,1.0 +0,22.0,1,1.0,32.3725818595,-3.12990627966,1,1.0,1.0 +0,23.0,1,1.0,24.8793592915,0.263567645784,1,1.0,1.0 +0,24.0,1,1.0,15.277768758,-1.42356742207,1,1.0,1.0 +0,25.0,1,1.0,5.50310254145,0.378782580392,1,1.0,1.0 +0,26.0,1,1.0,0.0646257854533,2.04536355185,1,1.0,1.0 +0,27.0,1,1.0,-8.99704402486,1.15797810152,1,1.0,1.0 +0,28.0,1,1.0,-3.00909719114,1.81500883707,1,1.0,1.0 +0,29.0,1,1.0,-4.84423866925,4.58565267035,1,1.0,1.0 +0,30.0,1,1.0,4.7801487891,3.20159584999,1,1.0,1.0 +0,31.0,1,1.0,13.9663237834,0.487199761896,1,1.0,1.0 +0,32.0,1,1.0,18.909868485,-2.78346251817,1,1.0,1.0 +0,33.0,1,1.0,22.0877445356,-1.20719351828,1,1.0,1.0 +0,34.0,1,1.0,21.4391868405,-0.502191593229,1,1.0,1.0 +0,35.0,1,1.0,17.1052575806,-2.94981606346,1,1.0,1.0 +0,36.0,1,1.0,9.65096502962,-4.12067218207,1,1.0,1.0 +0,37.0,1,1.0,1.16726326163,-2.12371755931,1,1.0,1.0 +0,38.0,1,1.0,0.844314304574,-2.82102455721,1,1.0,1.0 +0,39.0,1,1.0,0.327836378848,-0.862772526531,1,1.0,1.0 +0,40.0,1,1.0,3.1166511421,-0.607834755546,1,1.0,1.0 +0,41.0,1,1.0,9.83158596874,-1.86955027614,1,1.0,1.0 +0,42.0,1,1.0,18.5328982881,-2.30860733206,1,1.0,1.0 +0,43.0,1,1.0,27.366103843,-1.36885841427,1,1.0,1.0 +0,44.0,1,1.0,27.2486468453,1.22582888022,1,1.0,1.0 +0,45.0,1,1.0,26.0733248785,0.961281730784,1,1.0,1.0 +0,46.0,1,1.0,24.6585223239,2.33212372771,1,1.0,1.0 +0,47.0,1,1.0,14.4543821434,0.721933776286,1,1.0,1.0 +0,48.0,1,1.0,8.37774987667,0.394641017902,1,1.0,1.0 +0,49.0,1,1.0,-1.69982299357,2.13766740186,1,1.0,1.0 +0,50.0,1,1.0,-7.57434121714,-1.7992812602,1,1.0,1.0 +0,51.0,1,1.0,-8.58992045409,-4.26654256687,1,1.0,1.0 +0,52.0,1,1.0,-8.75163593827,-0.221341399644,1,1.0,1.0 +0,53.0,1,1.0,-2.45955817519,-3.3540530242,1,1.0,1.0 +0,54.0,1,1.0,3.8264357269,-2.91206181612,1,1.0,1.0 +0,55.0,1,1.0,15.885933761,1.14472816261,1,1.0,1.0 +0,56.0,1,1.0,19.9691909633,-0.222736087971,1,1.0,1.0 +0,57.0,1,1.0,26.4581141034,0.869779436915,1,1.0,1.0 +0,58.0,1,1.0,24.7002383442,0.943265594623,1,1.0,1.0 +0,59.0,1,1.0,21.8119701376,-0.522339185204,1,1.0,1.0 +0,60.0,1,1.0,12.3544132471,1.96972457207,1,1.0,1.0 +0,61.0,1,1.0,6.41023968607,-0.976471667753,1,1.0,1.0 +0,62.0,1,1.0,-0.813345035821,-3.22281764638,1,1.0,1.0 +0,63.0,1,1.0,-2.22277144272,-3.47955619805,1,1.0,1.0 +0,64.0,1,1.0,-2.8570002858,-1.67683355741,1,1.0,1.0 +0,65.0,1,1.0,5.11991842759,-0.870108982647,1,1.0,1.0 +0,66.0,1,1.0,9.46783236852,-0.0609112771122,1,1.0,1.0 +0,67.0,1,1.0,15.7984256361,2.24887252006,1,1.0,1.0 +0,68.0,1,1.0,20.4958444389,1.55428883206,1,1.0,1.0 +0,69.0,1,1.0,24.3735131061,1.39177812447,1,1.0,1.0 +0,70.0,1,1.0,16.0714356998,-0.721420033859,1,1.0,1.0 +0,71.0,1,1.0,11.1233210128,-1.06836603742,1,1.0,1.0 +0,72.0,1,1.0,4.35017542433,-1.04861575351,1,1.0,1.0 +0,73.0,1,1.0,-3.75367196854,0.647018043284,1,1.0,1.0 +0,74.0,1,1.0,-7.44859806141,-0.355604218049,1,1.0,1.0 +0,75.0,1,1.0,-5.75804678496,2.31798924565,1,1.0,1.0 +0,76.0,1,1.0,-2.42366316302,3.56686179064,1,1.0,1.0 +0,77.0,1,1.0,5.55129349234,1.7274530359,1,1.0,1.0 +0,78.0,1,1.0,12.3956878113,0.60804232923,1,1.0,1.0 +0,79.0,1,1.0,18.7092267746,2.91649089258,1,1.0,1.0 +0,80.0,1,1.0,26.7376099631,1.79912443912,1,1.0,1.0 +0,81.0,1,1.0,29.1657657321,-1.87115432773,1,1.0,1.0 +0,82.0,1,1.0,27.0067622297,-1.41748070007,1,1.0,1.0 +0,83.0,1,1.0,23.3878534895,-2.62763556631,1,1.0,1.0 +0,84.0,1,1.0,11.8453962329,-3.85741056517,1,1.0,1.0 +0,85.0,1,1.0,4.18454588618,-3.01627465951,1,1.0,1.0 +0,86.0,1,1.0,-2.83128954736,-1.44329748953,1,1.0,1.0 +0,87.0,1,1.0,-9.07698492583,-2.44592763255,1,1.0,1.0 +0,88.0,1,1.0,-8.34630158181,-0.825951245295,1,1.0,1.0 +0,89.0,1,1.0,-4.06527221242,0.885821968323,1,1.0,1.0 +0,90.0,1,1.0,5.1002122071,3.33422639211,1,1.0,1.0 +0,91.0,1,1.0,15.4307845983,-0.621879690208,1,1.0,1.0 +0,92.0,1,1.0,19.1550001571,-1.94164591424,1,1.0,1.0 +0,93.0,1,1.0,22.0044024806,-0.997947974471,1,1.0,1.0 +0,94.0,1,1.0,21.8885585526,-0.260044341626,1,1.0,1.0 +0,95.0,1,1.0,18.1233194717,-2.54326521844,1,1.0,1.0 +0,96.0,1,1.0,8.5747445822,-0.665479659108,1,1.0,1.0 +0,97.0,1,1.0,7.11304675781,-1.70436710939,1,1.0,1.0 +0,98.0,1,1.0,0.314355178828,0.13241631636,1,1.0,1.0 +0,99.0,1,1.0,-2.29938388997,2.76769552389,1,1.0,1.0 +0,100.0,1,1.0,-0.794045771935,0.281463244375,1,1.0,1.0 +0,101.0,1,1.0,5.92480287056,0.549844867425,1,1.0,1.0 +0,102.0,1,1.0,12.9742259935,1.05194608949,1,1.0,1.0 +0,103.0,1,1.0,19.5590413115,1.27035026696,1,1.0,1.0 +0,104.0,1,1.0,24.7893749811,-1.20418801875,1,1.0,1.0 +0,105.0,1,1.0,27.6419466087,-2.28469992766,1,1.0,1.0 +0,106.0,1,1.0,24.8544946579,1.1120454146,1,1.0,1.0 +0,107.0,1,1.0,21.6507791861,1.80715512952,1,1.0,1.0 +0,108.0,1,1.0,12.1330822491,3.2030325922,1,1.0,1.0 +0,109.0,1,1.0,1.64436238164,2.74947878038,1,1.0,1.0 +0,110.0,1,1.0,-7.48750756631,0.0435985768029,1,1.0,1.0 +0,111.0,1,1.0,-10.7917780476,1.2641841608,1,1.0,1.0 +0,112.0,1,1.0,-9.46772626263,0.842569008102,1,1.0,1.0 +0,113.0,1,1.0,-1.85790714685,0.0185102835097,1,1.0,1.0 +0,114.0,1,1.0,4.25079746968,0.0875785784299,1,1.0,1.0 +0,115.0,1,1.0,13.212611229,-1.97816127582,1,1.0,1.0 +0,116.0,1,1.0,21.6619467455,3.8069526052,1,1.0,1.0 +0,117.0,1,1.0,25.1789766791,-0.223117845376,1,1.0,1.0 +0,118.0,1,1.0,26.8258626611,0.796597487577,1,1.0,1.0 +0,119.0,1,1.0,16.9541922558,3.72411511781,1,1.0,1.0 +0,120.0,1,1.0,14.3900337266,-1.39833938515,1,1.0,1.0 +0,121.0,1,1.0,4.2921682017,-3.82333583571,1,1.0,1.0 +0,122.0,1,1.0,1.59929469683,-2.40949937851,1,1.0,1.0 +0,123.0,1,1.0,-3.41936937345,-2.20277828211,1,1.0,1.0 +0,124.0,1,1.0,1.00248389758,-4.93817721226,1,1.0,1.0 +0,125.0,1,1.0,3.05472791577,-1.64819604719,1,1.0,1.0 +0,126.0,1,1.0,13.0125589901,0.32358851296,1,1.0,1.0 +0,127.0,1,1.0,17.1819194426,0.100360141296,1,1.0,1.0 +0,128.0,1,1.0,20.0467604428,-0.0996435544418,1,1.0,1.0 +0,129.0,1,1.0,21.4851236027,3.8148835495,1,1.0,1.0 +0,130.0,1,1.0,17.8351745928,1.16963401395,1,1.0,1.0 +0,131.0,1,1.0,11.2397846678,-0.589539671012,1,1.0,1.0 +0,132.0,1,1.0,3.20074775937,0.366201881126,1,1.0,1.0 +0,133.0,1,1.0,-4.22440810563,0.387828489612,1,1.0,1.0 +0,134.0,1,1.0,-9.37370007645,-1.64391459483,1,1.0,1.0 +0,135.0,1,1.0,-9.91853290331,1.47169456173,1,1.0,1.0 +0,136.0,1,1.0,-6.47090604094,1.47923216538,1,1.0,1.0 +0,137.0,1,1.0,2.76516256296,0.752451479408,1,1.0,1.0 +0,138.0,1,1.0,13.2863372254,1.44606886011,1,1.0,1.0 +0,139.0,1,1.0,22.9423272149,2.32061656736,1,1.0,1.0 +0,140.0,1,1.0,30.6535344893,-2.14297742764,1,1.0,1.0 +0,141.0,1,1.0,32.6732999838,-2.3460112738,1,1.0,1.0 +0,142.0,1,1.0,28.9908987213,0.0902081474769,1,1.0,1.0 +0,143.0,1,1.0,22.1194918556,2.62818582747,1,1.0,1.0 +0,144.0,1,1.0,12.2047345623,-0.899853561247,1,1.0,1.0 +0,145.0,1,1.0,3.07692791723,0.0984919319803,1,1.0,1.0 +0,146.0,1,1.0,-3.98523570783,3.03050652888,1,1.0,1.0 +0,147.0,1,1.0,-5.4522782032,0.834114085759,1,1.0,1.0 +0,148.0,1,1.0,-4.07584439591,5.31738867242,1,1.0,1.0 +0,149.0,1,1.0,0.426897929709,1.1919406819,1,1.0,1.0 +0,150.0,1,1.0,5.58959471821,0.090683514928,1,1.0,1.0 +0,151.0,1,1.0,12.4127416701,-2.31072642585,1,1.0,1.0 +0,152.0,1,1.0,17.0999382222,1.79037132704,1,1.0,1.0 +0,153.0,1,1.0,20.6944378006,-0.101227793963,1,1.0,1.0 +0,154.0,1,1.0,15.9851917176,-3.38797089193,1,1.0,1.0 +0,155.0,1,1.0,15.9861902302,-0.347313571216,1,1.0,1.0 +0,156.0,1,1.0,7.57445266343,-0.807836671709,1,1.0,1.0 +0,157.0,1,1.0,0.677003218025,5.48424284668,1,1.0,1.0 +0,158.0,1,1.0,0.44273932292,3.84336294817,1,1.0,1.0 +0,159.0,1,1.0,-2.02509896275,3.78404685352,1,1.0,1.0 +0,160.0,1,1.0,2.01602293721,3.64918086444,1,1.0,1.0 +0,161.0,1,1.0,11.0000602921,2.95234016526,1,1.0,1.0 +0,162.0,1,1.0,12.7583959965,0.149132897738,1,1.0,1.0 +0,163.0,1,1.0,23.115247308,1.707864596,1,1.0,1.0 +0,164.0,1,1.0,26.946042991,4.18055888594,1,1.0,1.0 +0,165.0,1,1.0,27.7842816963,0.0774610830513,1,1.0,1.0 +0,166.0,1,1.0,22.2544905813,0.330637766412,1,1.0,1.0 +0,167.0,1,1.0,16.2846479275,-1.55188699532,1,1.0,1.0 +0,168.0,1,1.0,4.80647398714,-0.124478972891,1,1.0,1.0 +0,169.0,1,1.0,-0.934381859481,-1.60037292836,1,1.0,1.0 +0,170.0,1,1.0,-8.53244957525,2.51633720936,1,1.0,1.0 +0,171.0,1,1.0,-6.26395488032,2.7444009873,1,1.0,1.0 +0,172.0,1,1.0,-5.49363910821,5.10923860604,1,1.0,1.0 +0,173.0,1,1.0,2.06371361445,5.23376639161,1,1.0,1.0 +0,174.0,1,1.0,6.0214678715,1.98387410192,1,1.0,1.0 +0,175.0,1,1.0,16.9184239357,4.01561598974,1,1.0,1.0 +0,176.0,1,1.0,18.619798799,1.4877889031,1,1.0,1.0 +0,177.0,1,1.0,22.1555421079,-2.48385239455,1,1.0,1.0 +0,178.0,1,1.0,23.8228777263,-0.106080661589,1,1.0,1.0 +0,179.0,1,1.0,19.8170596831,-2.00080226222,1,1.0,1.0 +0,180.0,1,1.0,13.5378903669,-4.00984799953,1,1.0,1.0 +0,181.0,1,1.0,6.85787668881,-3.93822507425,1,1.0,1.0 +0,182.0,1,1.0,1.97691202052,-3.94206363512,1,1.0,1.0 +0,183.0,1,1.0,0.482821203921,0.233293749196,1,1.0,1.0 +0,184.0,1,1.0,0.199380558686,-0.706594494377,1,1.0,1.0 +0,185.0,1,1.0,3.95592767792,-1.47681322609,1,1.0,1.0 +0,186.0,1,1.0,10.8628171274,-0.829715038375,1,1.0,1.0 +0,187.0,1,1.0,15.2766289498,1.55227072522,1,1.0,1.0 +0,188.0,1,1.0,18.680094265,-0.161010415235,1,1.0,1.0 +0,189.0,1,1.0,20.1969673695,-0.480212855806,1,1.0,1.0 +0,190.0,1,1.0,14.9922370709,-0.139863467282,1,1.0,1.0 +0,191.0,1,1.0,6.70472466435,-1.90005492157,1,1.0,1.0 +0,192.0,1,1.0,0.536835578769,-2.27583609493,1,1.0,1.0 +0,193.0,1,1.0,-3.12549090962,2.27656334763,1,1.0,1.0 +0,194.0,1,1.0,-7.46715809394,0.482277690492,1,1.0,1.0 +0,195.0,1,1.0,-7.15189879764,-0.0919829897364,1,1.0,1.0 +0,196.0,1,1.0,-7.12298681219,0.487506551322,1,1.0,1.0 +0,197.0,1,1.0,2.83722545328,1.60638921667,1,1.0,1.0 +0,198.0,1,1.0,12.0735662036,1.08984098,1,1.0,1.0 +0,199.0,1,1.0,20.0345943863,3.3798477096,1,1.0,1.0 +0,200.0,1,1.0,26.6951182265,3.22504405491,1,1.0,1.0 +0,201.0,1,1.0,26.7733040656,2.01421100009,1,1.0,1.0 +0,202.0,1,1.0,27.1952082447,5.54727947323,1,1.0,1.0 +0,203.0,1,1.0,21.6970604763,4.1363071854,1,1.0,1.0 +0,204.0,1,1.0,15.2454626124,3.16204349749,1,1.0,1.0 +0,205.0,1,1.0,4.71098339196,3.25246969953,1,1.0,1.0 +0,206.0,1,1.0,1.96321127012,1.23978242586,1,1.0,1.0 +0,207.0,1,1.0,-4.20645531085,1.03597139608,1,1.0,1.0 +0,208.0,1,1.0,-3.2903014749,-0.141555978338,1,1.0,1.0 +0,209.0,1,1.0,-0.917059780741,0.418159499737,1,1.0,1.0 +0,210.0,1,1.0,7.00636518245,-0.157227323669,1,1.0,1.0 +0,211.0,1,1.0,12.3138757284,1.25433998317,1,1.0,1.0 +0,212.0,1,1.0,18.2486401567,0.805944479159,1,1.0,1.0 +0,213.0,1,1.0,22.328654354,0.379046013305,1,1.0,1.0 +0,214.0,1,1.0,20.1799436688,-2.33545797138,1,1.0,1.0 +0,215.0,1,1.0,13.8034137744,-1.71229180272,1,1.0,1.0 +0,216.0,1,1.0,7.71779652222,-1.22031725778,1,1.0,1.0 +0,217.0,1,1.0,-1.31422023178,-4.35737357475,1,1.0,1.0 +0,218.0,1,1.0,-1.6391837357,-6.01138335055,1,1.0,1.0 +0,219.0,1,1.0,-5.80615137776,-0.0990618502623,1,1.0,1.0 +0,220.0,1,1.0,-0.167789753296,-2.72525487831,1,1.0,1.0 +0,221.0,1,1.0,8.78829996861,-1.27910490522,1,1.0,1.0 +0,222.0,1,1.0,15.5620436766,-0.882475399139,1,1.0,1.0 +0,223.0,1,1.0,23.9590646948,-0.388392261177,1,1.0,1.0 +0,224.0,1,1.0,29.8261473565,-0.195380299606,1,1.0,1.0 +0,225.0,1,1.0,29.1708241978,0.528427784768,1,1.0,1.0 +0,226.0,1,1.0,24.704049765,-1.8548466189,1,1.0,1.0 +0,227.0,1,1.0,19.0004566664,-0.950697124636,1,1.0,1.0 +0,228.0,1,1.0,9.20055071445,2.00391691945,1,1.0,1.0 +0,229.0,1,1.0,0.517095219951,2.93263804271,1,1.0,1.0 +0,230.0,1,1.0,-4.92327772571,-1.16715588774,1,1.0,1.0 +0,231.0,1,1.0,-7.47995820053,-1.70446009193,1,1.0,1.0 +0,232.0,1,1.0,-6.46367245143,-0.261272089185,1,1.0,1.0 +0,233.0,1,1.0,-0.513042590819,-1.45934183803,1,1.0,1.0 +0,234.0,1,1.0,10.0209783924,-5.84845608935,1,1.0,1.0 +0,235.0,1,1.0,19.9592379106,-7.04309139762,1,1.0,1.0 +0,236.0,1,1.0,22.7837625531,-6.11305063149,1,1.0,1.0 +0,237.0,1,1.0,28.3607385298,-6.89127154874,1,1.0,1.0 +0,238.0,1,1.0,23.8650190112,-3.45361441871,1,1.0,1.0 +0,239.0,1,1.0,21.2261977119,-0.875178614383,1,1.0,1.0 +0,240.0,1,1.0,12.3757223996,1.44581154722,1,1.0,1.0 +0,241.0,1,1.0,7.03125831766,2.2459409353,1,1.0,1.0 +0,242.0,1,1.0,-0.141369969575,-0.46116046983,1,1.0,1.0 +0,243.0,1,1.0,-2.30469726492,-2.00925250414,1,1.0,1.0 +0,244.0,1,1.0,-0.0115390319019,-1.08806822373,1,1.0,1.0 +0,245.0,1,1.0,3.60259651357,-4.18138231955,1,1.0,1.0 +0,246.0,1,1.0,10.6265055597,-4.05004586436,1,1.0,1.0 +0,247.0,1,1.0,19.2041718624,-2.71299322524,1,1.0,1.0 +0,248.0,1,1.0,24.1460502596,-2.6674778856,1,1.0,1.0 +0,249.0,1,1.0,24.2714422048,-1.9854061973,1,1.0,1.0 +0,250.0,1,1.0,19.9935547996,-1.24164380078,1,1.0,1.0 +0,251.0,1,1.0,11.505141036,0.00645135560258,1,1.0,1.0 +0,252.0,1,1.0,1.628497636,0.480181657902,1,1.0,1.0 +0,253.0,1,1.0,-4.60529027141,1.81626437614,1,1.0,1.0 +0,254.0,1,1.0,-7.90117840264,1.9556244183,1,1.0,1.0 +0,255.0,1,1.0,-5.59052161368,0.322196392894,1,1.0,1.0 From e3b2889fa7f95385735816289d2c75eaf63ecae3 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Thu, 3 Oct 2024 09:45:09 -0600 Subject: [PATCH 19/23] user manual updates for MultiResolutionTSA --- doc/user_manual/generated/generateRomDoc.py | 42 +- doc/user_manual/generated/internalRom.tex | 5749 ++++++++++++----- .../SupervisedLearning/MultiResolutionTSA.py | 17 +- .../TSA/Transformers/FilterBankDWT.py | 2 + 4 files changed, 4205 insertions(+), 1605 deletions(-) diff --git a/doc/user_manual/generated/generateRomDoc.py b/doc/user_manual/generated/generateRomDoc.py index 0ccf2db01a..d8c9490cba 100644 --- a/doc/user_manual/generated/generateRomDoc.py +++ b/doc/user_manual/generated/generateRomDoc.py @@ -205,6 +205,41 @@ \end{lstlisting} """ +mra = r""" +\hspace{24pt} +Example: +\begin{lstlisting}[style=XML,morekeywords={name,subType,pivotLength,shift,target,threshold,period,width}] + + ... + + ... + + signal1, signal2, hour + scaling + hour + + db8 + 3 + + + signal0,signal1, pivot + scaling + macro + pivot + + +

1,1

+ 1,2 +
+
+
+ ... +
+ ... +
+\end{lstlisting} +""" + synthetic = r""" \hspace{24pt} Example: @@ -1263,6 +1298,7 @@ 'MSR': msr, 'NDinvDistWeight':invDist, 'SyntheticHistory': synthetic, + 'MultiResolutionTSA': mra, 'ARMA': armaExp, 'PolyExponential': poly, 'DMD': dmd, @@ -1389,7 +1425,8 @@ 'Collection', 'Segments', 'Clusters', - 'Interpolated'] + 'Interpolated', + 'Decomposition'] validDNNRom = ['KerasMLPClassifier', 'KerasMLPRegression', 'KerasConvNetClassifier', @@ -1403,6 +1440,7 @@ 'MSR', 'NDinvDistWeight', 'SyntheticHistory', + 'MultiResolutionTSA', 'ARMA', 'PolyExponential', 'DMD', @@ -1451,7 +1489,7 @@ internalRom += segmentTex internalRom += exampleTex except: - print('Can not generate latex file for ' + name) + print(f'Can not generate latex file for {name}') fName = os.path.abspath(os.path.join(os.path.dirname(__file__), 'internalRom.tex')) with open(fName, 'w') as f: diff --git a/doc/user_manual/generated/internalRom.tex b/doc/user_manual/generated/internalRom.tex index 4109bcd699..5a6bf51e8a 100644 --- a/doc/user_manual/generated/internalRom.tex +++ b/doc/user_manual/generated/internalRom.tex @@ -2535,6 +2535,86 @@ \subsubsection{SyntheticHistory} differencing order. \end{itemize} + \item \xmlNode{filterbankdwt}: + Filter Bank Discrete Wavelet Transform, a multi-resolution-capable TimeSeriesAnalysis + algorithm. Performs a discrete wavelet transform (DWT) on time-dependent data as a filter bank + to decompose the signal to multiple frequency levels. Given a wavelet family and the + original signal, the signal is projected onto modifications of the original "mother" + wavelet $\Psi$ to produce wavelet coefficients. The modifications $\psi_{a,b}$ happen + in two ways: \\ \begin{itemize} \item the wavelet is scaled by + factor $a$ to capture features at different time scales (e.g., if the wavelet is + "thinner" it better captures faster frequency features) \item the wavelet is shifted + in time by factor $b$ across the entire time domain of the signal for each scale $a$ + \end{itemize} After all projections, there is a 2-D array of coefficients regarding + the scale $a$ and shift $b$. The modified wavelets are given by: \\ + \begin{equation*} \psi_{a,b} = \frac{1}{\sqrt{a}} \Psi(\frac{t-b}{a}) + \end{equation*} The Filter Bank DWT works in a cascading sequence of low- and high- + pass filters for all requested decomposition levels to create the wavelet + coefficients. The low- and high-pass filters create a set of approximation and detail + coefficients, respectively, for each scale. Approximation coefficients correspond to lower + frequency/large wavelength features; detail cofficients, to higher frequency/smaller + wavelength features. Subsequent decompositions apply the filters to the previous + approximation coefficients. For N levels of decomposition, N sets of detail + coefficients and 1 set of approximation coefficients are produced. Currently, the + approximation coefficients are treated as a trend in the signal and subtracted from the + signal. Note: This TSA module requires pywavelets to be installed within your python + environment. + The \xmlNode{filterbankdwt} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{filterbankdwt} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{family}: \xmlDesc{string}, + The type of wavelet to use for the transformation. There are several + possible families to choose from, and most families contain more than + one variation. For more information regarding the wavelet families, + refer to the Pywavelets documentation located at: + https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) + \\ Possible values are: \begin{itemize} + \item \textbf{haar family}: haar \item \textbf{db family}: db1, db2, + db3, db4, db5, db6, db7, db8, db9, db10, db11, db12, db13, db14, + db15, db16, db17, db18, db19, db20, db21, db22, db23, db24, db25, + db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, db36, + db37, db38 \item \textbf{sym family}: sym2, sym3, sym4, sym5, sym6, + sym7, sym8, sym9, sym10, sym11, sym12, sym13, sym14, sym15, sym16, + sym17, sym18, sym19, sym20 \item \textbf{coif family}: coif1, coif2, + coif3, coif4, coif5, coif6, coif7, coif8, coif9, coif10, coif11, + coif12, coif13, coif14, coif15, coif16, coif17 \item \textbf{bior + family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, + bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, + bior6.8 \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, + rbio2.2, rbio2.4, rbio2.6, rbio2.8, rbio3.1, rbio3.3, rbio3.5, + rbio3.7, rbio3.9, rbio4.4, rbio5.5, rbio6.8 + \item \textbf{dmey family}: dmey \item \textbf{gaus family}: gaus1, + gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 \item \textbf{mexh + family}: mexh \item \textbf{morl family}: morl + \item \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 + \item \textbf{shan family}: shan \item \textbf{fbsp family}: fbsp + \item \textbf{cmor family}: cmor \end{itemize} + + \item \xmlNode{levels}: \xmlDesc{integer}, + the number of wavelet decomposition levels for requested for the signal. This is + equivalent to the number of sets of detail coefficients produced. Note + that there will always be one set of approximation cofficients + produced, which is treated as a trend in the signal. Note that there is a + maximum decomposition level depending on signal length and the chosen wavelet family: if + desired level is larger than the maximum decomposition level, the + latter will be used. Provided level must be nonzero. + \end{itemize} + \item \xmlNode{zerofilter}: masks values that are near zero. The masked values are replaced with NaN values. Caution should be used when using this algorithm because not all algorithms can handle NaN values! @@ -2725,39 +2805,10 @@ \subsubsection{SyntheticHistory} \end{lstlisting} -\subsubsection{ARMA} - The \xmlString{ARMA} ROM is based on an autoregressive moving average time series model with - Fourier signal processing, sometimes referred to as a FARMA. ARMA is a - type of time dependent model that characterizes the autocorrelation between time series data. The - mathematic description of ARMA is given as \begin{equation*} - x\_t = \sum_{i=1}^p\phi\_ix_{t-i}+\alpha\_t+\sum_{j=1}^q\theta\_j\alpha_{t-j}, - \end{equation*} where $x$ is a vector of dimension $n$, and $\phi\_i$ and - $\theta\_j$ are both $n$ by $n$ matrices. When $q=0$, the above is - autoregressive (AR); when $p=0$, the above is moving average (MA). When - training an ARMA, the input needs to be a synchronized HistorySet. For unsynchronized data, use - PostProcessor methods to synchronize the data before training an ARMA. - The ARMA model implemented allows an option to use Fourier series to detrend the time series - before fitting to ARMA model to train. The Fourier trend will be stored in - the trained ARMA model for data generation. The following equation - describes the detrending process. - \begin{equation*} \begin{aligned} x\_t &= y\_t - - \sum\_m\left\{a\_m\sin(2\pi f\_mt)+b\_m\cos(2\pi f\_mt)\right\} \\ &=y\_t - - \sum\_m\ c\_m\sin(2\pi f\_mt+\phi\_m) \end{aligned} - \end{equation*} where $1/f\_m$ is defined by the user parameter - \xmlNode{Fourier}. \nb $a\_m$ and $b\_m$ will be calculated then transformed to - $c\_m$ and $\phi$. The $c\_m$ will be stored as \xmlString{amplitude}, and $\phi$ will be stored as - \xmlString{phase}. By default, each target in the training will be - considered independent and have an unique ARMA for each target. - Correlated targets can be specified through the \xmlNode{correlate} node, at which point - the correlated targets will be trained together using a vector ARMA (or VARMA). Due to limitations - in the VARMA, in order to seed samples the VARMA must be trained with the - node \xmlNode{seed}, which acts independently from the global random seed - used by other RAVEN entities. Both the ARMA and VARMA make use of the - \texttt{statsmodels} python package. In order to use this Reduced Order - Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs to be - \xmlString{ARMA}. +\subsubsection{MultiResolutionTSA} + Class to specifically handle multi-resolution time series analysis training and evaluation. - The \xmlNode{ARMA} node recognizes the following parameters: + The \xmlNode{MultiResolutionTSA} node recognizes the following parameters: \begin{itemize} \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. @@ -2767,7 +2818,7 @@ \subsubsection{ARMA} specify the type of ROM that will be used \end{itemize} - The \xmlNode{ARMA} node recognizes the following subnodes: + The \xmlNode{MultiResolutionTSA} node recognizes the following subnodes: \begin{itemize} \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be @@ -2966,366 +3017,2117 @@ \subsubsection{ARMA} \end{itemize} \item \xmlNode{pivotParameter}: \xmlDesc{string}, - defines the pivot variable (e.g., time) that is non-decreasing in - the input HistorySet. + If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, + etc) used in the input HistorySet. \default{time} - \item \xmlNode{correlate}: \xmlDesc{comma-separated strings}, - indicates the listed variables should be - considered as influencing each other, and trained together instead of independently. This - node can only be listed once, so all - variables that are desired for correlation should be included. \nb The - correlated VARMA takes notably longer to train than the independent ARMAs for the same number - of targets. - \default{None} - - \item \xmlNode{seed}: \xmlDesc{integer}, - provides seed for VARMA and ARMA sampling. - Must be provided before training. If no seed is assigned, - then a random number will be used. - \default{None} - - \item \xmlNode{reseedCopies}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - if \xmlString{True} then whenever the ARMA is loaded from file, a - random reseeding will be performed to ensure different histories. \nb If - reproducible histories are desired for an ARMA loaded from file, - \xmlNode{reseedCopies} should be set to \xmlString{False}, and in the - \xmlNode{RunInfo} block \xmlNode{batchSize} needs to be 1 - and \xmlNode{internalParallel} should be - \xmlString{False} for RAVEN runs sampling the trained ARMA model. - If \xmlNode{InternalParallel} is \xmlString{True} and the ARMA has - \xmlNode{reseedCopies} as \xmlString{False}, an identical ARMA history - will always be provided regardless of how many samples are taken. - If \xmlNode{InternalParallel} is \xmlString{False} and \xmlNode{batchSize} - is more than 1, it is not possible to guarantee the order of RNG usage by - the separate processes, so it is not possible to guarantee reproducible - histories are generated. - \default{True} - - \item \xmlNode{P}: \xmlDesc{integer}, - defines the value of $p$. - \default{3} - - \item \xmlNode{Q}: \xmlDesc{integer}, - defines the value of $q$. - \default{3} - - \item \xmlNode{Fourier}: \xmlDesc{comma-separated integers}, - must be positive integers. This defines the - based period that will be used for Fourier detrending, i.e., this - field defines $1/f\_m$ in the above equation. - When this filed is not specified, the ARMA considers no Fourier detrend. - \default{None} - - \item \xmlNode{Peaks}: \xmlDesc{string}, - designed to estimate the peaks in signals that repeat with some frequency, - often in periodic data. - \default{None} - The \xmlNode{Peaks} node recognizes the following parameters: + \item \xmlNode{fourier}: + TimeSeriesAnalysis algorithm for determining the strength and phase of + specified Fourier periods within training signals. The Fourier signals take + the form $C\sin(\frac{2\pi}{k}+\phi)$, where $C$ is the calculated strength + or amplitude, $k$ is the user-specified period(s) to search for, and $\phi$ + is the calculated phase shift. The resulting characterization and synthetic + history generation is deterministic given a single training signal. + The \xmlNode{fourier} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{string, required}, - defines the name of one target (besides the pivot parameter) - expected to have periodic peaks. - \item \xmlAttr{threshold}: \xmlDesc{float, required}, - user-defined minimum required height of peaks (absolute value). - \item \xmlAttr{period}: \xmlDesc{float, required}, - user-defined expected period for target variable. + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} \end{itemize} - The \xmlNode{Peaks} node recognizes the following subnodes: + The \xmlNode{fourier} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{nbin}: \xmlDesc{integer}, - -- no description yet -- - \default{5} - - \item \xmlNode{window}: \xmlDesc{comma-separated floats}, - lists the window of time within each period in which a peak should be discovered. - The text of this node is the upper and lower boundary of this - window \emph{relative to} the start of the period, separated by a comma. - User can define the lower bound to be a negative - number if the window passes through one side of one period. For example, if the period is - 24 hours, the window can be -2,2 which is - equivalent to 22, 2. - The \xmlNode{window} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{width}: \xmlDesc{float, required}, - The user defined width of peaks in that window. The width is in the unit of the - signal as well. - \end{itemize} + \item \xmlNode{periods}: \xmlDesc{comma-separated floats}, + Specifies the periods (inverse of frequencies) that should be searched + for within the training signal. \end{itemize} - \item \xmlNode{preserveInputCDF}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - enables a final transform on sampled data - coercing it to have the same distribution as the original data. If \xmlString{True}, then - every sample generated by this ARMA after - training will have a distribution of values that conforms within - numerical accuracy to the original data. This is especially useful when variance is desired - not to stretch the most extreme events - (high or low signal values), but instead the sequence of events throughout this - history. For example, this transform can preserve the load duration curve for a load signal. - \default{False} - - \item \xmlNode{SpecificFourier}: \xmlDesc{string}, - provides a means to specify different Fourier - decomposition for different target variables. Values given in the subnodes of this node will - supercede the defaults set by the - \xmlNode{Fourier} and \xmlNode{FourierOrder} nodes. - \default{None} - The \xmlNode{SpecificFourier} node recognizes the following parameters: + \item \xmlNode{arma}: + characterizes the signal using Auto-Regressive and Moving Average coefficients to + stochastically fit the training signal. 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 ARMA algorithms are developed in RAVEN using the + \texttt{statsmodels} Python library. + The \xmlNode{arma} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variables}: \xmlDesc{comma-separated strings, required}, - lists the variables to whom the \xmlNode{SpecificFourier} parameters - will apply. + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{reduce\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + activates a lower memory usage ARMA training. This does tend to result + in a slightly slower training time, at the benefit of lower memory usage. For + example, in one 1000-length history test, low memory reduced memory usage by 2.3 + MiB, but increased training time by 0.4 seconds. No change in results has been + observed switching between modes. Note that the ARMA must be + retrained to change this property; it cannot be applied to serialized ARMAs. \default{False} + \item \xmlAttr{gaussianize}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + activates a transformation of the signal to a normal distribution before + training. This is done by fitting a CDF to the data and then transforming the + data to a normal distribution using the CDF. The CDF is saved and used during + sampling to back-transform the data to the original distribution. This is + recommended for non-normal data, but is not required. Note that the ARMA must be + retrained to change this property; it cannot be applied to serialized ARMAs. + Note: New models wishing to apply this transformation should use a + \xmlNode{gaussianize} node preceding the \xmlNode{arma} node instead of this + option. \default{False} + \item \xmlAttr{auto\_select}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + 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} \end{itemize} - The \xmlNode{SpecificFourier} node recognizes the following subnodes: + The \xmlNode{arma} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{periods}: \xmlDesc{comma-separated integers}, - lists the (fundamental) periodic - wavelength of the Fourier decomposition for these variables, - as in the \xmlNode{Fourier} general node. - \end{itemize} + \item \xmlNode{P}: \xmlDesc{comma-separated integers}, + 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. - \item \xmlNode{Multicycle}: \xmlDesc{string}, - indicates that each sample of the ARMA should yield - multiple sequential samples. For example, if an ARMA model is trained to produce a year's - worth of data, enabling - \xmlNode{Multicycle} causes it to produce several successive years of data. Multicycle - sampling is independent of ROM training, - and only changes how samples of the ARMA are created. - \nb The output of a multicycle ARMA must be stored in a \xmlNode{DataSet}, as the targets will - depend on both the \xmlNode{pivotParameter} - as well as the cycle, \xmlString{Cycle}. The cycle is a second - \xmlNode{Index} that all targets should depend on, with variable name \xmlString{Cycle}. - \default{None} + \item \xmlNode{Q}: \xmlDesc{comma-separated integers}, + 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. + \end{itemize} + + \item \xmlNode{varma}: + characterizes the vector-valued signal using Auto-Regressive and Moving Average + coefficients to stochastically fit the training signal. The VARMA 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. For signal $A\_t$ which is a $k \times 1$ vector, each $\phi\_i$ + and $\theta\_j$ are $k \times k$ matrices, and $\epsilon\_t$ is characterized by the $k + \times k$ covariance matrix $\Sigma$. The VARMA algorithms are developed in RAVEN using the + \texttt{statsmodels} Python library. + The \xmlNode{varma} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{varma} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{P}: \xmlDesc{integer}, + the number of terms in the AutoRegressive term to retain in the + regression; typically represented as $P$ in literature. + + \item \xmlNode{Q}: \xmlDesc{integer}, + the number of terms in the Moving Average term to retain in the + regression; typically represented as $Q$ in literature. + \end{itemize} + + \item \xmlNode{MarkovAR}: + characterizes the signal using autoregressive (AR) coefficients conditioned on the + state of a hidden Markov model (HMM) to stochastically fit the training signal. The + Markov-switching autoregressive model (MSAR) has the following form: \begin{equation*} + Y\_t = \mu_{S\_t} \sum_{i=1}^p \phi_{i,{S\_t}} \left(Y_{t-i} - \mu_{S_{t-i}}\right) + + \varepsilon_{t,{S\_t}}, \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, $\varepsilon$ is a random noise term with mean 0 and + variance $\sigma^2_{S\_t}$, and $S\_t$ is the HMM state at time $t$. The HMM state is + determined by the transition probabilities between states, which are conditioned on + the previous state. The transition probabilities are stored in a transition matrix $P$, + where entry $p_{ij}$ is the probability of transitioning from state $i$ to state $j$ + conditional on being in state $i$. For a MSAR model with HMM state dimensionality $r$, + the transition matrix $P$ is of size $r \times r$. Each of the mean, autoregressive, + and noise variance terms may be switching or non-switching parameters. + The \xmlNode{MarkovAR} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{switching\_ar}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + indicates whether the autoregressive coefficients are switching parameters. \default{True} + \item \xmlAttr{switching\_variance}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + indicates whether the noise variance is a switching parameter. \default{True} + \item \xmlAttr{switching\_trend}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + indicates whether the mean is a switching parameter. \default{True} + \end{itemize} + + The \xmlNode{MarkovAR} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{P}: \xmlDesc{integer}, + the number of terms in the AutoRegressive term to retain in the + regression; typically represented as $P$ in literature. + + \item \xmlNode{MarkovStates}: \xmlDesc{integer}, + the number of states in the hidden Markov model. + \end{itemize} + + \item \xmlNode{STL}: + Decomposes the signal into trend, seasonal, and residual components using the STL method of + Cleveland et al. (1990). + The \xmlNode{STL} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{STL} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{seasonal}: \xmlDesc{integer}, + the length of the seasonal smoother. + + \item \xmlNode{period}: \xmlDesc{integer}, + periodicity of the sequence. + + \item \xmlNode{trend}: \xmlDesc{integer}, + the length of the trend smoother. Must be an odd integer. + \end{itemize} + + \item \xmlNode{wavelet}: + Discrete Wavelet TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform + on time-dependent data. Note: This TSA module requires pywavelets to be installed within your + python environment. + The \xmlNode{wavelet} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{wavelet} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{family}: \xmlDesc{string}, + The type of wavelet to use for the transformation. There are several possible families + to choose from, and most families contain more than one variation. For more + information regarding the wavelet families, refer to the Pywavelets documentation + located at: https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet- + families) \\ Possible values are: \begin{itemize} \item \textbf{haar + family}: haar \item \textbf{db family}: db1, db2, db3, db4, db5, db6, db7, db8, db9, + db10, db11, db12, db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, + db23, db24, db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, + db36, db37, db38 \item \textbf{sym family}: sym2, sym3, sym4, sym5, sym6, sym7, + sym8, sym9, sym10, sym11, sym12, sym13, sym14, sym15, sym16, sym17, sym18, sym19, + sym20 \item \textbf{coif family}: coif1, coif2, coif3, coif4, coif5, coif6, coif7, + coif8, coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17 + \item \textbf{bior family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, + bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, bior6.8 + \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, rbio2.2, rbio2.4, rbio2.6, + rbio2.8, rbio3.1, rbio3.3, rbio3.5, rbio3.7, rbio3.9, rbio4.4, rbio5.5, rbio6.8 + \item \textbf{dmey family}: dmey \item \textbf{gaus family}: gaus1, gaus2, gaus3, + gaus4, gaus5, gaus6, gaus7, gaus8 \item \textbf{mexh family}: mexh \item + \textbf{morl family}: morl \item \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, + cgau5, cgau6, cgau7, cgau8 \item \textbf{shan family}: shan \item \textbf{fbsp + family}: fbsp \item \textbf{cmor family}: cmor \end{itemize} + \end{itemize} + + \item \xmlNode{PolynomialRegression}: + fits time-series data using a polynomial function of degree one or greater. + The \xmlNode{PolynomialRegression} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{PolynomialRegression} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{degree}: \xmlDesc{integer}, + Specifies the degree polynomial to fit the data with. + \end{itemize} + + \item \xmlNode{autoarma}: + 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. + The \xmlNode{autoarma} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{autoarma} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{P\_upper}: \xmlDesc{integer}, + 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. + + \item \xmlNode{Q\_upper}: \xmlDesc{integer}, + 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. + + \item \xmlNode{criterion}: \xmlDesc{[aic, aicc, bic]}, + 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`. + + \item \xmlNode{use\_approximation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + 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. + \end{itemize} + + \item \xmlNode{rwd}: + TimeSeriesAnalysis algorithm for sliding window snapshots to generate features + The \xmlNode{rwd} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{rwd} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{signatureWindowLength}: \xmlDesc{integer}, + the size of signature window, which represents as a snapshot for a certain time step; + typically represented as $w$ in literature, or $w\_sig$ in the code. + + \item \xmlNode{featureIndex}: \xmlDesc{integer}, + Index used for feature selection, which requires pre-analysis for now, will be addresses + via other non human work required method + + \item \xmlNode{sampleType}: \xmlDesc{integer}, + Indicating the type of sampling. + + \item \xmlNode{seed}: \xmlDesc{integer}, + Indicating random seed. + \end{itemize} + + \item \xmlNode{maxabsscaler}: + scales the data to the interval $[-1, 1]$. This is done by dividing by the largest + absolute value of the data. + The \xmlNode{maxabsscaler} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{minmaxscaler}: + scales the data to the interval $[0, 1]$. This is done by subtracting the + minimum value from each point and dividing by the range. + The \xmlNode{minmaxscaler} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{robustscaler}: + centers and scales the data by subtracting the median and dividing by the interquartile + range. + The \xmlNode{robustscaler} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{standardscaler}: + centers and scales the data by subtracting the mean and dividing by the standard + deviation. + The \xmlNode{standardscaler} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{preserveCDF}: + forces generated data provided to the inverse transformation function to + have the same CDF as the original data through quantile mapping. If this + transformer is used as part of a SyntheticHistory ROM, it should likely + be used as the first transformer in the chain. + The \xmlNode{preserveCDF} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{differencing}: + applies Nth order differencing to the data. + The \xmlNode{differencing} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{differencing} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{order}: \xmlDesc{integer}, + differencing order. + \end{itemize} + + \item \xmlNode{filterbankdwt}: + Filter Bank Discrete Wavelet Transform, a multi-resolution-capable TimeSeriesAnalysis + algorithm. Performs a discrete wavelet transform (DWT) on time-dependent data as a filter bank + to decompose the signal to multiple frequency levels. Given a wavelet family and the + original signal, the signal is projected onto modifications of the original "mother" + wavelet $\Psi$ to produce wavelet coefficients. The modifications $\psi_{a,b}$ happen + in two ways: \\ \begin{itemize} \item the wavelet is scaled by + factor $a$ to capture features at different time scales (e.g., if the wavelet is + "thinner" it better captures faster frequency features) \item the wavelet is shifted + in time by factor $b$ across the entire time domain of the signal for each scale $a$ + \end{itemize} After all projections, there is a 2-D array of coefficients regarding + the scale $a$ and shift $b$. The modified wavelets are given by: \\ + \begin{equation*} \psi_{a,b} = \frac{1}{\sqrt{a}} \Psi(\frac{t-b}{a}) + \end{equation*} The Filter Bank DWT works in a cascading sequence of low- and high- + pass filters for all requested decomposition levels to create the wavelet + coefficients. The low- and high-pass filters create a set of approximation and detail + coefficients, respectively, for each scale. Approximation coefficients correspond to lower + frequency/large wavelength features; detail cofficients, to higher frequency/smaller + wavelength features. Subsequent decompositions apply the filters to the previous + approximation coefficients. For N levels of decomposition, N sets of detail + coefficients and 1 set of approximation coefficients are produced. Currently, the + approximation coefficients are treated as a trend in the signal and subtracted from the + signal. Note: This TSA module requires pywavelets to be installed within your python + environment. + The \xmlNode{filterbankdwt} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{filterbankdwt} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{family}: \xmlDesc{string}, + The type of wavelet to use for the transformation. There are several + possible families to choose from, and most families contain more than + one variation. For more information regarding the wavelet families, + refer to the Pywavelets documentation located at: + https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) + \\ Possible values are: \begin{itemize} + \item \textbf{haar family}: haar \item \textbf{db family}: db1, db2, + db3, db4, db5, db6, db7, db8, db9, db10, db11, db12, db13, db14, + db15, db16, db17, db18, db19, db20, db21, db22, db23, db24, db25, + db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, db36, + db37, db38 \item \textbf{sym family}: sym2, sym3, sym4, sym5, sym6, + sym7, sym8, sym9, sym10, sym11, sym12, sym13, sym14, sym15, sym16, + sym17, sym18, sym19, sym20 \item \textbf{coif family}: coif1, coif2, + coif3, coif4, coif5, coif6, coif7, coif8, coif9, coif10, coif11, + coif12, coif13, coif14, coif15, coif16, coif17 \item \textbf{bior + family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, + bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, + bior6.8 \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, + rbio2.2, rbio2.4, rbio2.6, rbio2.8, rbio3.1, rbio3.3, rbio3.5, + rbio3.7, rbio3.9, rbio4.4, rbio5.5, rbio6.8 + \item \textbf{dmey family}: dmey \item \textbf{gaus family}: gaus1, + gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 \item \textbf{mexh + family}: mexh \item \textbf{morl family}: morl + \item \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 + \item \textbf{shan family}: shan \item \textbf{fbsp family}: fbsp + \item \textbf{cmor family}: cmor \end{itemize} + + \item \xmlNode{levels}: \xmlDesc{integer}, + the number of wavelet decomposition levels for requested for the signal. This is + equivalent to the number of sets of detail coefficients produced. Note + that there will always be one set of approximation cofficients + produced, which is treated as a trend in the signal. Note that there is a + maximum decomposition level depending on signal length and the chosen wavelet family: if + desired level is larger than the maximum decomposition level, the + latter will be used. Provided level must be nonzero. + \end{itemize} + + \item \xmlNode{zerofilter}: + masks values that are near zero. The masked values are replaced with NaN values. Caution + should be used when using this algorithm because not all algorithms can handle NaN values! + A warning will be issued if NaN values are detected in the input of an algorithm that does + not support them. + The \xmlNode{zerofilter} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{logtransformer}: + applies the natural logarithm to the data and inverts by applying the + exponential function. + The \xmlNode{logtransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{arcsinhtransformer}: + applies the inverse hyperbolic sine to the data and inverts by applying + the hyperbolic sine. + The \xmlNode{arcsinhtransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{tanhtransformer}: + applies the hyperbolic tangent to the data and inverts by applying the + inverse hyperbolic tangent. + The \xmlNode{tanhtransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{sigmoidtransformer}: + applies the sigmoid (expit) function to the data and inverts by applying + the logit function. + The \xmlNode{sigmoidtransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{outtruncation}: + limits the data to either positive or negative values by "reflecting" the + out-of-range values back into the desired range. + The \xmlNode{outtruncation} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, + -- no description yet -- + \end{itemize} + + \item \xmlNode{gaussianize}: + transforms the data into a normal distribution using quantile mapping. + The \xmlNode{gaussianize} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, + number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} + is greater than the number of data, then the number of data is used instead. \default{1000} + \end{itemize} + + \item \xmlNode{quantiletransformer}: + transforms the data to fit a given distribution by mapping the data to a uniform + distribution and then to the desired distribution. + The \xmlNode{quantiletransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, + number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} + is greater than the number of data, then the number of data is used instead. \default{1000} + \item \xmlAttr{outputDistribution}: \xmlDesc{[normal, uniform], optional}, + distribution to transform to. \default{normal} + \end{itemize} + \end{itemize} + +\hspace{24pt} +Example: +\begin{lstlisting}[style=XML,morekeywords={name,subType,pivotLength,shift,target,threshold,period,width}] + + ... + + ... + + signal1, signal2, hour + scaling + hour + + db8 + 3 + + + signal0,signal1, pivot + scaling + macro + pivot + + +

1,1

+ 1,2 +
+
+
+ ... +
+ ... +
+\end{lstlisting} + + +\subsubsection{ARMA} + The \xmlString{ARMA} ROM is based on an autoregressive moving average time series model with + Fourier signal processing, sometimes referred to as a FARMA. ARMA is a + type of time dependent model that characterizes the autocorrelation between time series data. The + mathematic description of ARMA is given as \begin{equation*} + x\_t = \sum_{i=1}^p\phi\_ix_{t-i}+\alpha\_t+\sum_{j=1}^q\theta\_j\alpha_{t-j}, + \end{equation*} where $x$ is a vector of dimension $n$, and $\phi\_i$ and + $\theta\_j$ are both $n$ by $n$ matrices. When $q=0$, the above is + autoregressive (AR); when $p=0$, the above is moving average (MA). When + training an ARMA, the input needs to be a synchronized HistorySet. For unsynchronized data, use + PostProcessor methods to synchronize the data before training an ARMA. + The ARMA model implemented allows an option to use Fourier series to detrend the time series + before fitting to ARMA model to train. The Fourier trend will be stored in + the trained ARMA model for data generation. The following equation + describes the detrending process. + \begin{equation*} \begin{aligned} x\_t &= y\_t - + \sum\_m\left\{a\_m\sin(2\pi f\_mt)+b\_m\cos(2\pi f\_mt)\right\} \\ &=y\_t - + \sum\_m\ c\_m\sin(2\pi f\_mt+\phi\_m) \end{aligned} + \end{equation*} where $1/f\_m$ is defined by the user parameter + \xmlNode{Fourier}. \nb $a\_m$ and $b\_m$ will be calculated then transformed to + $c\_m$ and $\phi$. The $c\_m$ will be stored as \xmlString{amplitude}, and $\phi$ will be stored as + \xmlString{phase}. By default, each target in the training will be + considered independent and have an unique ARMA for each target. + Correlated targets can be specified through the \xmlNode{correlate} node, at which point + the correlated targets will be trained together using a vector ARMA (or VARMA). Due to limitations + in the VARMA, in order to seed samples the VARMA must be trained with the + node \xmlNode{seed}, which acts independently from the global random seed + used by other RAVEN entities. Both the ARMA and VARMA make use of the + \texttt{statsmodels} python package. In order to use this Reduced Order + Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs to be + \xmlString{ARMA}. + + The \xmlNode{ARMA} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \item \xmlAttr{subType}: \xmlDesc{string, required}, + specify the type of ROM that will be used + \end{itemize} + + The \xmlNode{ARMA} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + specifies the names of the features of this ROM. \nb These parameters are going to be + requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) + + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + contains a comma separated list of the targets of this ROM. These parameters are the + Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are + going to be requested for the training of this object (see Section + \ref{subsec:stepRomTrainer}). + + \item \xmlNode{pivotParameter}: \xmlDesc{string}, + If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, + etc) used in the input HistorySet. + \default{time} + + \item \xmlNode{featureSelection}: + Apply feature selection algorithm + + The \xmlNode{featureSelection} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{RFE}: + The \xmlString{RFE} (Recursive Feature Elimination) is a feature selection algorithm. + Feature selection refers to techniques that select a subset of the most relevant features + for a model (ROM). Fewer features can allow ROMs to run more efficiently (less + space or time complexity) and be more effective. Indeed, some ROMs (machine + learning algorithms) can be misled by irrelevant input features, resulting in worse + predictive performance. RFE is a wrapper-type feature selection algorithm. This + means that a different ROM is given and used in the core of the method, is + wrapped by RFE, and used to help select features. \\RFE works by searching for a + subset of features by starting with all features in the training dataset and successfully + removing features until the desired number remains. This is achieved by + fitting the given ROM used in the core of the model, ranking features by importance, + discarding the least important features, and re-fitting the model. This process is + repeated until a specified number of features remains. When the full model + is created, a measure of variable importance is computed that ranks the predictors from + most important to least. At each stage of the search, the least important + predictors are iteratively eliminated prior to rebuilding the model. Features are + scored either using the ROM model (if the model provides a mean to compute feature + importances) or by using a statistical method. \\In RAVEN the + \xmlString{RFE} class refers to an augmentation of the basic algorithm, since it allows, + optionally, to perform the search on multiple groups of targets (separately) and + then combine the results of the search in a single set. In addition, when the RFE + search is concluded, the user can request to identify the set of features that + bring to a minimization of the score (i.e. maximimization of the accuracy). In + addition, using the ``applyClusteringFiltering'' option, the algorithm can, using an + hierarchal clustering algorithm, identify highly correlated features to speed up + the subsequential search. + The \xmlNode{RFE} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \end{itemize} + + The \xmlNode{RFE} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the search. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature (this is temporary till DataSet training is + implemented) + \default{feature} + + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set + to $1/2$ of the features in the training dataset. + \default{None} + + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + Maximum Number of features to select, the algorithm will automatically determine the + feature list to minimize a total score. + \default{None} + + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + If maxNumberFeatures is on, only output score should beconsidered? Or, in case of + particular models (e.g. DMDC), state variable space score should be considered as + well. + \default{False} + + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + Applying clustering correlation before RFE search? If true, an hierarchal clustering + is applied on the feature space aimed to remove features that are correlated + before the actual RFE search is performed. This approach can stabilize and + accelerate the process in case of large feature spaces (e.g > 500 features). + \default{False} + + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + In case of subgroupping, should a cross correleation analysis should be performed + cross sub-groups? If it is activated, a cross correleation analysis is used to + additionally filter the features selected for each sub-groupping search. + \default{False} + + \item \xmlNode{step}: \xmlDesc{float}, + If greater than or equal to 1, then step corresponds to the (integer) number + of features to remove at each iteration. If within (0.0, 1.0), then step + corresponds to the percentage (rounded down) of features to remove at each + iteration. + \default{1} + + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + Subgroup of output variables on which to perform the search. Multiple nodes of this + type can be inputted. The RFE search will be then performed in each ``subgroup'' + separately and then the the union of the different feature sets are used for the final + ROM. + \end{itemize} + + \item \xmlNode{VarianceThreshold}: + The \xmlString{VarianceThreshold} is a feature selector that removes all low-variance + features. This feature selection algorithm looks only at the features and not the + desired outputs. The variance threshold can be set by the user. + The \xmlNode{VarianceThreshold} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \end{itemize} + + The \xmlNode{VarianceThreshold} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the search. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature (this is temporary till DataSet training is + implemented) + \default{feature} + + \item \xmlNode{threshold}: \xmlDesc{float}, + Features with a training-set variance lower than this threshold will + be removed. The default is to keep all features with non-zero + variance, i.e. remove the features that have the same value in all + samples. + \default{0.0} + \end{itemize} + \end{itemize} + + \item \xmlNode{featureSpaceTransformation}: + Use dimensionality reduction technique to perform a trasformation of the training dataset + into an uncorrelated one. The dimensionality of the problem will not be reduced but + the data will be transformed in the transformed space. E.g if the number of features + are 5, the method projects such features into a new uncorrelated space (still 5-dimensional). + In case of time-dependent ROMs, all the samples are concatenated in a global 2D matrix + (n\_samples*n\_timesteps,n\_features) before applying the transformation and then reconstructed + back into the original shape (before fitting the model). + + The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + Transformation method to use. Eight options (5 Kernel PCAs) are available: + \begin{itemize} \item \textit{PCA}, Principal Component Analysis; + \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; + \item \textit{KernelPolyPCA}, Kernel (Poly) Principal component analysis; + \item \textit{KernelRbfPCA}, Kernel(Rbf) Principal component analysis; + \item \textit{KernelSigmoidPCA}, Kernel (Sigmoid) Principal component analysis; + \item \textit{KernelCosinePCA}, Kernel (Cosine) Principal component analysis; + \item \textit{ICA}, Independent component analysis; \end{itemize} + \default{PCA} + + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the transformation process. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature? + \default{Feature} + \end{itemize} + + \item \xmlNode{CV}: \xmlDesc{string}, + The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with + \xmlAttr{subType} ``CrossValidation``. + The \xmlNode{CV} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{class}: \xmlDesc{string, optional}, + should be set to \xmlString{Model} + \item \xmlAttr{type}: \xmlDesc{string, optional}, + should be set to \xmlString{PostProcessor} + \end{itemize} + + \item \xmlNode{alias}: \xmlDesc{string}, + specifies alias for any variable of interest in the input or output space. These + aliases can be used anywhere in the RAVEN input to refer to the variables. In the body + of this node the user specifies the name of the variable that the model is going to use + (during its execution). + The \xmlNode{alias} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{variable}: \xmlDesc{string, required}, + define the actual alias, usable throughout the RAVEN input + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + either ``input'' or ``output''. + \end{itemize} + + \item \xmlNode{pivotParameter}: \xmlDesc{string}, + defines the pivot variable (e.g., time) that is non-decreasing in + the input HistorySet. + \default{time} + + \item \xmlNode{correlate}: \xmlDesc{comma-separated strings}, + indicates the listed variables should be + considered as influencing each other, and trained together instead of independently. This + node can only be listed once, so all + variables that are desired for correlation should be included. \nb The + correlated VARMA takes notably longer to train than the independent ARMAs for the same number + of targets. + \default{None} + + \item \xmlNode{seed}: \xmlDesc{integer}, + provides seed for VARMA and ARMA sampling. + Must be provided before training. If no seed is assigned, + then a random number will be used. + \default{None} + + \item \xmlNode{reseedCopies}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + if \xmlString{True} then whenever the ARMA is loaded from file, a + random reseeding will be performed to ensure different histories. \nb If + reproducible histories are desired for an ARMA loaded from file, + \xmlNode{reseedCopies} should be set to \xmlString{False}, and in the + \xmlNode{RunInfo} block \xmlNode{batchSize} needs to be 1 + and \xmlNode{internalParallel} should be + \xmlString{False} for RAVEN runs sampling the trained ARMA model. + If \xmlNode{InternalParallel} is \xmlString{True} and the ARMA has + \xmlNode{reseedCopies} as \xmlString{False}, an identical ARMA history + will always be provided regardless of how many samples are taken. + If \xmlNode{InternalParallel} is \xmlString{False} and \xmlNode{batchSize} + is more than 1, it is not possible to guarantee the order of RNG usage by + the separate processes, so it is not possible to guarantee reproducible + histories are generated. + \default{True} + + \item \xmlNode{P}: \xmlDesc{integer}, + defines the value of $p$. + \default{3} + + \item \xmlNode{Q}: \xmlDesc{integer}, + defines the value of $q$. + \default{3} + + \item \xmlNode{Fourier}: \xmlDesc{comma-separated integers}, + must be positive integers. This defines the + based period that will be used for Fourier detrending, i.e., this + field defines $1/f\_m$ in the above equation. + When this filed is not specified, the ARMA considers no Fourier detrend. + \default{None} + + \item \xmlNode{Peaks}: \xmlDesc{string}, + designed to estimate the peaks in signals that repeat with some frequency, + often in periodic data. + \default{None} + The \xmlNode{Peaks} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{string, required}, + defines the name of one target (besides the pivot parameter) + expected to have periodic peaks. + \item \xmlAttr{threshold}: \xmlDesc{float, required}, + user-defined minimum required height of peaks (absolute value). + \item \xmlAttr{period}: \xmlDesc{float, required}, + user-defined expected period for target variable. + \end{itemize} + + The \xmlNode{Peaks} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{nbin}: \xmlDesc{integer}, + -- no description yet -- + \default{5} + + \item \xmlNode{window}: \xmlDesc{comma-separated floats}, + lists the window of time within each period in which a peak should be discovered. + The text of this node is the upper and lower boundary of this + window \emph{relative to} the start of the period, separated by a comma. + User can define the lower bound to be a negative + number if the window passes through one side of one period. For example, if the period is + 24 hours, the window can be -2,2 which is + equivalent to 22, 2. + The \xmlNode{window} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{width}: \xmlDesc{float, required}, + The user defined width of peaks in that window. The width is in the unit of the + signal as well. + \end{itemize} + \end{itemize} + + \item \xmlNode{preserveInputCDF}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + enables a final transform on sampled data + coercing it to have the same distribution as the original data. If \xmlString{True}, then + every sample generated by this ARMA after + training will have a distribution of values that conforms within + numerical accuracy to the original data. This is especially useful when variance is desired + not to stretch the most extreme events + (high or low signal values), but instead the sequence of events throughout this + history. For example, this transform can preserve the load duration curve for a load signal. + \default{False} + + \item \xmlNode{SpecificFourier}: \xmlDesc{string}, + provides a means to specify different Fourier + decomposition for different target variables. Values given in the subnodes of this node will + supercede the defaults set by the + \xmlNode{Fourier} and \xmlNode{FourierOrder} nodes. + \default{None} + The \xmlNode{SpecificFourier} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{variables}: \xmlDesc{comma-separated strings, required}, + lists the variables to whom the \xmlNode{SpecificFourier} parameters + will apply. + \end{itemize} + + The \xmlNode{SpecificFourier} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{periods}: \xmlDesc{comma-separated integers}, + lists the (fundamental) periodic + wavelength of the Fourier decomposition for these variables, + as in the \xmlNode{Fourier} general node. + \end{itemize} + + \item \xmlNode{Multicycle}: \xmlDesc{string}, + indicates that each sample of the ARMA should yield + multiple sequential samples. For example, if an ARMA model is trained to produce a year's + worth of data, enabling + \xmlNode{Multicycle} causes it to produce several successive years of data. Multicycle + sampling is independent of ROM training, + and only changes how samples of the ARMA are created. + \nb The output of a multicycle ARMA must be stored in a \xmlNode{DataSet}, as the targets will + depend on both the \xmlNode{pivotParameter} + as well as the cycle, \xmlString{Cycle}. The cycle is a second + \xmlNode{Index} that all targets should depend on, with variable name \xmlString{Cycle}. + \default{None} The \xmlNode{Multicycle} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{cycles}: \xmlDesc{integer}, - the number of cycles the ARMA should produce - each time it yields a sample. + \item \xmlNode{cycles}: \xmlDesc{integer}, + the number of cycles the ARMA should produce + each time it yields a sample. + + \item \xmlNode{growth}: \xmlDesc{float}, + if provided then the histories produced by + the ARMA will be increased by the growth factor for successive cycles. This node can be + added multiple times with different + settings for different targets. The + text of this node is the growth factor in percentage. Some examples are in + Table~\ref{tab:arma multicycle growth}, where \emph{Growth factor} is the value used in + the RAVEN input and \emph{Scaling + factor} is the value by which the history will be multiplied. + \begin{table}[h!] \centering + \begin{tabular}{r c l} Growth + factor & Scaling factor & Description \\ \hline + 50 & 1.5 & growing by 50\% each cycle \\ + -50 & 0.5 & shrinking by 50\% each cycle \\ + 150 & 2.5 & growing by 150\% each cycle \\ + \end{tabular} \caption{ARMA Growth + Factor Examples} \label{tab:arma + multicycle growth} \end{table} + \default{None} + The \xmlNode{growth} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{targets}: \xmlDesc{comma-separated strings, required}, + lists the targets in this ARMA that this growth factor should + apply to. + \item \xmlAttr{start\_index}: \xmlDesc{integer, optional}, + -- no description yet -- + \item \xmlAttr{end\_index}: \xmlDesc{integer, optional}, + -- no description yet -- + \item \xmlAttr{mode}: \xmlDesc{[exponential, linear], required}, + either \xmlString{linear} or \xmlString{exponential}, determines + the manner in which the growth factor is applied. If + \xmlString{linear}, then the scaling factor is $(1+y\cdot g/100)$; + if \xmlString{exponential}, then the scaling factor is $(1+g/100)^y$; + where $y$ is the cycle after the first and $g$ is the provided scaling factor. + \end{itemize} + \end{itemize} + + \item \xmlNode{nyquistScalar}: \xmlDesc{integer}, + -- no description yet -- + \default{1} + + \item \xmlNode{ZeroFilter}: \xmlDesc{string}, + turns on \emph{zero filtering} for the listed + targets. Zero filtering is a very specific algorithm, and should not be used without + understanding its application. When zero filtering is enabled, the ARMA will remove all the + values from the training data equal to zero + for the target, then train on the remaining data (including Fourier detrending + if applicable). If the target is set as correlated to another target, the second target will + be treated as two distinct series: one + containing times in which the original target is zero, and one in the remaining + times. The results from separated ARMAs are recombined after sampling. This can be a + methodology for treating histories with long + zero-value segments punctuated periodically by peaks. + \default{None} + The \xmlNode{ZeroFilter} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{tol}: \xmlDesc{float, optional}, + -- no description yet -- + \end{itemize} + + \item \xmlNode{outTruncation}: \xmlDesc{comma-separated strings}, + defines whether and how output time series + are limited in domain. This node has one attribute, \xmlAttr{domain}, whose value can be + \xmlString{positive} or \xmlString{negative}. The value of this node contains the list of + targets to whom this domain limitation + should be applied. In the event a negative value is discovered in a target whose + domain is strictly positive, the absolute value of the original negative value will be used + instead, and similarly for the negative + domain. + \default{None} + The \xmlNode{outTruncation} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, + -- no description yet -- + \end{itemize} + \end{itemize} + +In addition, \xmlNode{Segment} can be used to divided the ROM. In order to enable the segmentation, the +user need to specify following information for \xmlNode{Segment}: +\begin{itemize} + \item \xmlNode{Segment}, \xmlDesc{node, optional}, provides an alternative way to build the ROM. When + this mode is enabled, the subspace of the ROM (e.g. ``time'') will be divided into segments as + requested, then a distinct ROM will be trained on each of the segments. This is especially helpful if + during the subspace the ROM representation of the signal changes significantly. For example, if the signal + is different during summer and winter, then a signal can be divided and a distinct ROM trained on the + segments. By default, no segmentation occurs. + + To futher enable clustering of the segments, the \xmlNode{Segment} has the following attributes: + \begin{itemize} + \item \xmlAttr{grouping}, \xmlDesc{string, optional field} enables the use of ROM subspace clustering in + addition to segmenting if set to \xmlString{cluster}. If set to \xmlString{segment}, then performs + segmentation without clustering. If clustering, then an additional node needs to be included in the + \xmlNode{Segment} node, as described below. + \default{segment} + \end{itemize} + + This node takes the following subnodes: + \begin{itemize} + \item \xmlNode{subspace}, \xmlDesc{string, required field} designates the subspace to divide. This + should be the pivot parameter (often ``time'') for the ROM. This node also requires an attribute + to determine how the subspace is divided, as well as other attributes, described below: + \begin{itemize} + \item \xmlAttr{pivotLength}, \xmlDesc{float, optional field}, provides the value in the subspace + that each segment should attempt to represent, independently of how the data is stored. For + example, if the subspace has hourly resolution, is measured in seconds, and the desired + segmentation is daily, the \xmlAttr{pivotLength} would be 86400. + Either this option or \xmlAttr{divisions} must be provided. + \item \xmlAttr{divisions}, \xmlDesc{integer, optional field}, as an alternative to + \xmlAttr{pivotLength}, this attribute can be used to specify how many data points to include in + each subdivision, rather than use the pivot values. The algorithm will attempt to split the data + points as equally as possible. + Either this option or \xmlAttr{pivotLength} must be provided. + \item \xmlAttr{shift}, \xmlDesc{string, optional field}, governs the way in which the subspace is + treated in each segment. By default, the subspace retains its actual values for each segment; for + example, if each segment is 4 hours long, the first segment starts at time 0, the second at 4 + hours, the third at 8 hours, and so forth. Options to change this behavior are \xmlString{zero} + and \xmlString{first}. In the case of \xmlString{zero}, each segment restarts the pivot with the + subspace value as 0, shifting all other values similarly. In the example above, the first segment + would start at 0, the second at 0, and the third at 0, with each ending at 4 hours. Note that the + pivot values are restored when the ROM is evaluated. Using \xmlString{first}, each segment + subspace restarts at the value of the first segment. This is useful in the event subspace 0 is not + a desirable value. + \end{itemize} + \item \xmlNode{Classifier}, \xmlDesc{string, optional field} associates a \xmlNode{PostProcessor} + defined in the \xmlNode{Models} block to this segmentation. If clustering is enabled (see + \xmlAttr{grouping} above), then this associated Classifier will be used to cluster the segmented ROM + subspaces. The attributes \xmlAttr{class}=\xmlString{Models} and + \xmlAttr{type}=\xmlString{PostProcessor} must be set, and the text of this node is the \xmlAttr{name} + of the requested Classifier. Note this Classifier must be a valid Classifier; not all PostProcessors + are suitable. For example, see the DataMining PostProcessor subtype Clustering. + \item \xmlNode{clusterFeatures}, \xmlDesc{string, optional field}, if clustering then delineates + the fundamental ROM features that should be considered while clustering. The available features are + ROM-dependent, and an exception is raised if an unrecognized request is given. See individual ROMs + for options. \default All ROM-specific options. + \item \xmlNode{evalMode}, \xmlDesc{string, optional field}, one of \xmlString{truncated}, + \xmlString{full}, or \xmlString{clustered}, determines how the evaluations are + represented, as follows: + \begin{itemize} + \item \xmlString{full}, reproduce the full signal using representative cluster segments, + \item \xmlString{truncated}, reproduce a history containing exactly segment from each + cluster placed back-to-back, with the \xmlNode{pivotParameter} spanning the clustered + dimension. Note this will almost surely not be the same length as the original signal; + information about indexing can be found in the ROM's XML metadata. + \item \xmlString{clustered}, reproduce a N-dimensional object with the variable + \texttt{\_ROM\_cluster} as one of the indexes for the ROM's sampled variables. Note that + in order to use the option, the receiving \xmlNode{DataObject} should be of type + \xmlNode{DataSet} with one of the indices being \texttt{\_ROM\_cluster}. + \end{itemize} + \item \xmlNode{evaluationClusterChoice}, \xmlDesc{string, optional field}, one of \xmlString{first} or + \xmlString{random}, determines, if \xmlAttr{grouping}$=cluster$, which + strategy needs to be followed for the evaluation stage. If ``first'', the + first ROM (representative segmented ROM),in each cluster, is considered to + be representative of the full space in the cluster (i.e. the evaluation is always performed + interrogating the first ROM in each cluster); If ``random'', a random ROM, in each cluster, + is choosen when an evaluation is requested. + \nb if ``first'' is used, there is \emph{substantial} memory savings when compared to using + ``random''. + %If ``centroid'', a ROM ``trained" on the centroids + %information of each cluster is used for the evaluation (\nb ``centroid'' option is not + %available yet). + \default{first} + \end{itemize} +\end{itemize} + +\hspace{24pt} +General ARMA Example: +\begin{lstlisting}[style=XML, morekeywords={name,subType,pivotLength,shift,target,threshold,period,width}] + + ... + + ... + + Time + scaling + Speed1,Speed2 +

5

+ 4 + + Time + + True + 604800,86400 + 2, 4 + + -7200,10800 + 64800,75600 + +
+ ... +
+ ... +
+\end{lstlisting} + + +\subsubsection{PolyExponential} + The \xmlNode{PolyExponential} contains a single ROM type, aimed to construct a time-dependent + (or any other monotonic variable) surrogate model based on polynomial sum of exponential term. + This surrogate have the form: \begin{equation} SM(X,z) = \sum_{i=1}^{N} P_{i}(X) \times + \exp ( - Q_{i}(X) \times z ) \end{equation} where: \begin{itemize} \item + $\mathbf{z}$ is the independent monotonic variable (e.g. time) \item $\mathbf{X}$ is the + vector of the other independent (parametric) variables (Features) \item $\mathbf{P_{i}}(X)$ + is a polynomial of rank M function of the parametric space X \item $\mathbf{Q_{i}}(X)$ is a + polynomial of rank M function of the parametric space X \item $\mathbf{N}$ is the number of + requested exponential terms. \end{itemize} It is crucial to notice that this model is + quite suitable for FOMs whose drivers are characterized by an exponential-like behavior. In + addition, it is important to notice that the exponential terms' coefficients are computed running + a genetic-algorithm optimization problem, which is quite slow in case of increasing number of + ``numberExpTerms''. In order to use this Reduced Order Model, the \xmlNode{ROM} attribute + \xmlAttr{subType} needs to be set equal to \xmlString{PolyExponential}. \\ Once the ROM is + trained (\textbf{Step} \xmlNode{RomTrainer}), its coefficients can be exported into an XML file + via an \xmlNode{OutStream} of type \xmlAttr{Print}. The following variable/parameters can be + exported (i.e. \xmlNode{what} node in \xmlNode{OutStream} of type \xmlAttr{Print}): + \begin{itemize} \item \xmlNode{expTerms}, see XML input specifications above, inquired pre- + pending the keyword ``output|'' (e.g. output| expTerms) \item \xmlNode{coeffRegressor}, see + XML input specifications above \item \xmlNode{polyOrder}, see XML input specifications above + \item \xmlNode{features}, see XML input specifications above \item \xmlNode{timeScale}, XML + node containing the array of the training time steps values \item \xmlNode{coefficients}, + XML node containing the exponential terms' coefficients for each realization \end{itemize} + + The \xmlNode{PolyExponential} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \item \xmlAttr{subType}: \xmlDesc{string, required}, + specify the type of ROM that will be used + \end{itemize} + + The \xmlNode{PolyExponential} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + specifies the names of the features of this ROM. \nb These parameters are going to be + requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) + + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + contains a comma separated list of the targets of this ROM. These parameters are the + Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are + going to be requested for the training of this object (see Section + \ref{subsec:stepRomTrainer}). + + \item \xmlNode{pivotParameter}: \xmlDesc{string}, + If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, + etc) used in the input HistorySet. + \default{time} + + \item \xmlNode{featureSelection}: + Apply feature selection algorithm + + The \xmlNode{featureSelection} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{RFE}: + The \xmlString{RFE} (Recursive Feature Elimination) is a feature selection algorithm. + Feature selection refers to techniques that select a subset of the most relevant features + for a model (ROM). Fewer features can allow ROMs to run more efficiently (less + space or time complexity) and be more effective. Indeed, some ROMs (machine + learning algorithms) can be misled by irrelevant input features, resulting in worse + predictive performance. RFE is a wrapper-type feature selection algorithm. This + means that a different ROM is given and used in the core of the method, is + wrapped by RFE, and used to help select features. \\RFE works by searching for a + subset of features by starting with all features in the training dataset and successfully + removing features until the desired number remains. This is achieved by + fitting the given ROM used in the core of the model, ranking features by importance, + discarding the least important features, and re-fitting the model. This process is + repeated until a specified number of features remains. When the full model + is created, a measure of variable importance is computed that ranks the predictors from + most important to least. At each stage of the search, the least important + predictors are iteratively eliminated prior to rebuilding the model. Features are + scored either using the ROM model (if the model provides a mean to compute feature + importances) or by using a statistical method. \\In RAVEN the + \xmlString{RFE} class refers to an augmentation of the basic algorithm, since it allows, + optionally, to perform the search on multiple groups of targets (separately) and + then combine the results of the search in a single set. In addition, when the RFE + search is concluded, the user can request to identify the set of features that + bring to a minimization of the score (i.e. maximimization of the accuracy). In + addition, using the ``applyClusteringFiltering'' option, the algorithm can, using an + hierarchal clustering algorithm, identify highly correlated features to speed up + the subsequential search. + The \xmlNode{RFE} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \end{itemize} + + The \xmlNode{RFE} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the search. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature (this is temporary till DataSet training is + implemented) + \default{feature} + + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set + to $1/2$ of the features in the training dataset. + \default{None} + + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + Maximum Number of features to select, the algorithm will automatically determine the + feature list to minimize a total score. + \default{None} + + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + If maxNumberFeatures is on, only output score should beconsidered? Or, in case of + particular models (e.g. DMDC), state variable space score should be considered as + well. + \default{False} + + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + Applying clustering correlation before RFE search? If true, an hierarchal clustering + is applied on the feature space aimed to remove features that are correlated + before the actual RFE search is performed. This approach can stabilize and + accelerate the process in case of large feature spaces (e.g > 500 features). + \default{False} + + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + In case of subgroupping, should a cross correleation analysis should be performed + cross sub-groups? If it is activated, a cross correleation analysis is used to + additionally filter the features selected for each sub-groupping search. + \default{False} + + \item \xmlNode{step}: \xmlDesc{float}, + If greater than or equal to 1, then step corresponds to the (integer) number + of features to remove at each iteration. If within (0.0, 1.0), then step + corresponds to the percentage (rounded down) of features to remove at each + iteration. + \default{1} + + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + Subgroup of output variables on which to perform the search. Multiple nodes of this + type can be inputted. The RFE search will be then performed in each ``subgroup'' + separately and then the the union of the different feature sets are used for the final + ROM. + \end{itemize} + + \item \xmlNode{VarianceThreshold}: + The \xmlString{VarianceThreshold} is a feature selector that removes all low-variance + features. This feature selection algorithm looks only at the features and not the + desired outputs. The variance threshold can be set by the user. + The \xmlNode{VarianceThreshold} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \end{itemize} + + The \xmlNode{VarianceThreshold} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the search. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature (this is temporary till DataSet training is + implemented) + \default{feature} + + \item \xmlNode{threshold}: \xmlDesc{float}, + Features with a training-set variance lower than this threshold will + be removed. The default is to keep all features with non-zero + variance, i.e. remove the features that have the same value in all + samples. + \default{0.0} + \end{itemize} + \end{itemize} + + \item \xmlNode{featureSpaceTransformation}: + Use dimensionality reduction technique to perform a trasformation of the training dataset + into an uncorrelated one. The dimensionality of the problem will not be reduced but + the data will be transformed in the transformed space. E.g if the number of features + are 5, the method projects such features into a new uncorrelated space (still 5-dimensional). + In case of time-dependent ROMs, all the samples are concatenated in a global 2D matrix + (n\_samples*n\_timesteps,n\_features) before applying the transformation and then reconstructed + back into the original shape (before fitting the model). + + The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + Transformation method to use. Eight options (5 Kernel PCAs) are available: + \begin{itemize} \item \textit{PCA}, Principal Component Analysis; + \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; + \item \textit{KernelPolyPCA}, Kernel (Poly) Principal component analysis; + \item \textit{KernelRbfPCA}, Kernel(Rbf) Principal component analysis; + \item \textit{KernelSigmoidPCA}, Kernel (Sigmoid) Principal component analysis; + \item \textit{KernelCosinePCA}, Kernel (Cosine) Principal component analysis; + \item \textit{ICA}, Independent component analysis; \end{itemize} + \default{PCA} + + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the transformation process. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature? + \default{Feature} + \end{itemize} + + \item \xmlNode{CV}: \xmlDesc{string}, + The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with + \xmlAttr{subType} ``CrossValidation``. + The \xmlNode{CV} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{class}: \xmlDesc{string, optional}, + should be set to \xmlString{Model} + \item \xmlAttr{type}: \xmlDesc{string, optional}, + should be set to \xmlString{PostProcessor} + \end{itemize} + + \item \xmlNode{alias}: \xmlDesc{string}, + specifies alias for any variable of interest in the input or output space. These + aliases can be used anywhere in the RAVEN input to refer to the variables. In the body + of this node the user specifies the name of the variable that the model is going to use + (during its execution). + The \xmlNode{alias} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{variable}: \xmlDesc{string, required}, + define the actual alias, usable throughout the RAVEN input + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + either ``input'' or ``output''. + \end{itemize} + + \item \xmlNode{pivotParameter}: \xmlDesc{string}, + defines the pivot variable (e.g., time) that represents the + independent monotonic variable + \default{time} + + \item \xmlNode{numberExpTerms}: \xmlDesc{integer}, + the number of exponential terms to be used ($N$ above) + \default{3} + + \item \xmlNode{coeffRegressor}: \xmlDesc{[poly, spline, nearest]}, + defines which regressor to use for interpolating the + exponential coefficient. Available are ``spline'',``poly'' and ``nearest''. + \default{spline} + + \item \xmlNode{polyOrder}: \xmlDesc{integer}, + the polynomial order to be used for interpolating the exponential + coefficients. Only valid in case of \xmlNode{coeffRegressor} set to ``poly''. + \default{3} + + \item \xmlNode{tol}: \xmlDesc{float}, + relative tolerance of the optimization problem (differential evolution optimizer) + \default{0.001} + + \item \xmlNode{max\_iter}: \xmlDesc{integer}, + maximum number of iterations (generations) for the + optimization problem (differential evolution optimizer) + \default{5000} + \end{itemize} + +\hspace{24pt} +Example: +\begin{lstlisting}[style=XML,morekeywords={name,subType}] + + ... + + ... + + time,decay_heat, xe135_dens + enrichment,bu + time + 5 + 1000000 + 0.000001 + + ... + + ... + +\end{lstlisting} + +Example to export the coefficients of trained PolyExponential ROM: +\begin{lstlisting}[style=XML,morekeywords={name,subType}] + + ... + + ... + + xml + PolyExp + + + + xml + PolyExp + coefficients,timeScale + + ... + + ... + +\end{lstlisting} + + +\subsubsection{DMD} + The \xmlString{DynamicModeDecomposition} ROM aimed to construct a time-dependent (or any other + monotonic variable) surrogate model based on Dynamic Mode Decomposition This surrogate is + aimed to perform a ``dimensionality reduction regression'', where, given time series (or any + monotonic-dependent variable) of data, a set of modes each of which is associated with a fixed + oscillation frequency and decay/growth rate is computed in order to represent the data-set. + In order to use this Reduced Order Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs + to be set equal to \xmlString{DMD}. \\ Once the ROM is trained (\textbf{Step} + \xmlNode{RomTrainer}), its parameters/coefficients can be exported into an XML file via an + \xmlNode{OutStream} of type \xmlAttr{Print}. The following variable/parameters can be exported + (i.e. \xmlNode{what} node in \xmlNode{OutStream} of type \xmlAttr{Print}): \begin{itemize} + \item \xmlNode{svd\_rank}, see XML input specifications below \item \xmlNode{tlsq\_rank}, + see XML input specifications below \item \xmlNode{opt}, see XML input specifications below + \item \xmlNode{exact}, see XML input specifications below \item \xmlNode{forward\_backward}, + see XML input specifications below \item \xmlNode{tikhonov\_regularization}, see XML input + specifications below \item \xmlNode{features}, see XML input specifications below + \item \xmlNode{timeScale}, XML node containing the array of the training time steps values + \item \xmlNode{dmdTimeScale}, XML node containing the array of time scale in the DMD space (can be + used as mapping between the \xmlNode{timeScale} and \xmlNode{dmdTimeScale}) \item + \xmlNode{eigs}, XML node containing the eigenvalues (imaginary and real part) \item + \xmlNode{amplitudes}, XML node containing the amplitudes (imaginary and real part) \item + \xmlNode{modes}, XML node containing the dynamic modes (imaginary and real part) \end{itemize} + + The \xmlNode{DMD} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \item \xmlAttr{subType}: \xmlDesc{string, required}, + specify the type of ROM that will be used + \end{itemize} + + The \xmlNode{DMD} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + specifies the names of the features of this ROM. \nb These parameters are going to be + requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) + + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + contains a comma separated list of the targets of this ROM. These parameters are the + Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are + going to be requested for the training of this object (see Section + \ref{subsec:stepRomTrainer}). + + \item \xmlNode{pivotParameter}: \xmlDesc{string}, + If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, + etc) used in the input HistorySet. + \default{time} + + \item \xmlNode{featureSelection}: + Apply feature selection algorithm + + The \xmlNode{featureSelection} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{RFE}: + The \xmlString{RFE} (Recursive Feature Elimination) is a feature selection algorithm. + Feature selection refers to techniques that select a subset of the most relevant features + for a model (ROM). Fewer features can allow ROMs to run more efficiently (less + space or time complexity) and be more effective. Indeed, some ROMs (machine + learning algorithms) can be misled by irrelevant input features, resulting in worse + predictive performance. RFE is a wrapper-type feature selection algorithm. This + means that a different ROM is given and used in the core of the method, is + wrapped by RFE, and used to help select features. \\RFE works by searching for a + subset of features by starting with all features in the training dataset and successfully + removing features until the desired number remains. This is achieved by + fitting the given ROM used in the core of the model, ranking features by importance, + discarding the least important features, and re-fitting the model. This process is + repeated until a specified number of features remains. When the full model + is created, a measure of variable importance is computed that ranks the predictors from + most important to least. At each stage of the search, the least important + predictors are iteratively eliminated prior to rebuilding the model. Features are + scored either using the ROM model (if the model provides a mean to compute feature + importances) or by using a statistical method. \\In RAVEN the + \xmlString{RFE} class refers to an augmentation of the basic algorithm, since it allows, + optionally, to perform the search on multiple groups of targets (separately) and + then combine the results of the search in a single set. In addition, when the RFE + search is concluded, the user can request to identify the set of features that + bring to a minimization of the score (i.e. maximimization of the accuracy). In + addition, using the ``applyClusteringFiltering'' option, the algorithm can, using an + hierarchal clustering algorithm, identify highly correlated features to speed up + the subsequential search. + The \xmlNode{RFE} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \end{itemize} + + The \xmlNode{RFE} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the search. + \default{None} - \item \xmlNode{growth}: \xmlDesc{float}, - if provided then the histories produced by - the ARMA will be increased by the growth factor for successive cycles. This node can be - added multiple times with different - settings for different targets. The - text of this node is the growth factor in percentage. Some examples are in - Table~\ref{tab:arma multicycle growth}, where \emph{Growth factor} is the value used in - the RAVEN input and \emph{Scaling - factor} is the value by which the history will be multiplied. - \begin{table}[h!] \centering - \begin{tabular}{r c l} Growth - factor & Scaling factor & Description \\ \hline - 50 & 1.5 & growing by 50\% each cycle \\ - -50 & 0.5 & shrinking by 50\% each cycle \\ - 150 & 2.5 & growing by 150\% each cycle \\ - \end{tabular} \caption{ARMA Growth - Factor Examples} \label{tab:arma - multicycle growth} \end{table} + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature (this is temporary till DataSet training is + implemented) + \default{feature} + + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set + to $1/2$ of the features in the training dataset. \default{None} - The \xmlNode{growth} node recognizes the following parameters: + + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + Maximum Number of features to select, the algorithm will automatically determine the + feature list to minimize a total score. + \default{None} + + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + If maxNumberFeatures is on, only output score should beconsidered? Or, in case of + particular models (e.g. DMDC), state variable space score should be considered as + well. + \default{False} + + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + Applying clustering correlation before RFE search? If true, an hierarchal clustering + is applied on the feature space aimed to remove features that are correlated + before the actual RFE search is performed. This approach can stabilize and + accelerate the process in case of large feature spaces (e.g > 500 features). + \default{False} + + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + In case of subgroupping, should a cross correleation analysis should be performed + cross sub-groups? If it is activated, a cross correleation analysis is used to + additionally filter the features selected for each sub-groupping search. + \default{False} + + \item \xmlNode{step}: \xmlDesc{float}, + If greater than or equal to 1, then step corresponds to the (integer) number + of features to remove at each iteration. If within (0.0, 1.0), then step + corresponds to the percentage (rounded down) of features to remove at each + iteration. + \default{1} + + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + Subgroup of output variables on which to perform the search. Multiple nodes of this + type can be inputted. The RFE search will be then performed in each ``subgroup'' + separately and then the the union of the different feature sets are used for the final + ROM. + \end{itemize} + + \item \xmlNode{VarianceThreshold}: + The \xmlString{VarianceThreshold} is a feature selector that removes all low-variance + features. This feature selection algorithm looks only at the features and not the + desired outputs. The variance threshold can be set by the user. + The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{targets}: \xmlDesc{comma-separated strings, required}, - lists the targets in this ARMA that this growth factor should - apply to. - \item \xmlAttr{start\_index}: \xmlDesc{integer, optional}, - -- no description yet -- - \item \xmlAttr{end\_index}: \xmlDesc{integer, optional}, - -- no description yet -- - \item \xmlAttr{mode}: \xmlDesc{[exponential, linear], required}, - either \xmlString{linear} or \xmlString{exponential}, determines - the manner in which the growth factor is applied. If - \xmlString{linear}, then the scaling factor is $(1+y\cdot g/100)$; - if \xmlString{exponential}, then the scaling factor is $(1+g/100)^y$; - where $y$ is the cycle after the first and $g$ is the provided scaling factor. + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \end{itemize} + + The \xmlNode{VarianceThreshold} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the search. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature (this is temporary till DataSet training is + implemented) + \default{feature} + + \item \xmlNode{threshold}: \xmlDesc{float}, + Features with a training-set variance lower than this threshold will + be removed. The default is to keep all features with non-zero + variance, i.e. remove the features that have the same value in all + samples. + \default{0.0} + \end{itemize} + \end{itemize} + + \item \xmlNode{featureSpaceTransformation}: + Use dimensionality reduction technique to perform a trasformation of the training dataset + into an uncorrelated one. The dimensionality of the problem will not be reduced but + the data will be transformed in the transformed space. E.g if the number of features + are 5, the method projects such features into a new uncorrelated space (still 5-dimensional). + In case of time-dependent ROMs, all the samples are concatenated in a global 2D matrix + (n\_samples*n\_timesteps,n\_features) before applying the transformation and then reconstructed + back into the original shape (before fitting the model). + + The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + Transformation method to use. Eight options (5 Kernel PCAs) are available: + \begin{itemize} \item \textit{PCA}, Principal Component Analysis; + \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; + \item \textit{KernelPolyPCA}, Kernel (Poly) Principal component analysis; + \item \textit{KernelRbfPCA}, Kernel(Rbf) Principal component analysis; + \item \textit{KernelSigmoidPCA}, Kernel (Sigmoid) Principal component analysis; + \item \textit{KernelCosinePCA}, Kernel (Cosine) Principal component analysis; + \item \textit{ICA}, Independent component analysis; \end{itemize} + \default{PCA} + + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the transformation process. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature? + \default{Feature} + \end{itemize} + + \item \xmlNode{CV}: \xmlDesc{string}, + The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with + \xmlAttr{subType} ``CrossValidation``. + The \xmlNode{CV} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{class}: \xmlDesc{string, optional}, + should be set to \xmlString{Model} + \item \xmlAttr{type}: \xmlDesc{string, optional}, + should be set to \xmlString{PostProcessor} + \end{itemize} + + \item \xmlNode{alias}: \xmlDesc{string}, + specifies alias for any variable of interest in the input or output space. These + aliases can be used anywhere in the RAVEN input to refer to the variables. In the body + of this node the user specifies the name of the variable that the model is going to use + (during its execution). + The \xmlNode{alias} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{variable}: \xmlDesc{string, required}, + define the actual alias, usable throughout the RAVEN input + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + either ``input'' or ``output''. + \end{itemize} + + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + Whether this instance should be light or not. A light instance uses + less memory since it caches a smaller number of resources. + \default{False} + + \item \xmlNode{pivotParameter}: \xmlDesc{string}, + defines the pivot variable (e.g., time) that represents the + independent monotonic variable + \default{time} + + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + the type of method used for the dimensionality reduction.Available are: + \begin{itemize} \item \textit{svd}, single + value decomposition \item \textit{svd}, + randomized single value decomposition + \item \textit{correlation\_matrix}, correlation-based reduction. + \end{itemize} + \default{svd} + + \item \xmlNode{reductionRank}: \xmlDesc{integer}, + defines the truncation rank to be used for the reduction method. + Available options are: \begin{itemize} + \item \textit{-1}, no truncation is performed + \item \textit{0}, optimal rank is internally computed + \item \textit{$>1$}, this rank is going to be used for the truncation + \end{itemize} + \default{0} + + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + the type of method used for the interpolation of the parameter space.Available are: + \begin{itemize} \item \textit{RBF}, + Radial-basis functions \item \textit{GPR}, + Gaussian Process Regression \end{itemize} + \default{RBF} + + \item \xmlNode{approximationSettings}: + the settings available depending on the different type of method used for the interpolation of + the parameter space + + The \xmlNode{approximationSettings} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + RBF kernel. Available options are: + \begin{itemize} \item + \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) + \item \textit{cubic}, cubic kernel ($r**3$) + \item \textit{quintic}, quintic kernel ($r**5$) + \item \textit{linear}, linear kernel ($r$) + \item \textit{gaussian}, gaussian kernel ($exp(-(r/self.epsilon)**2)$) + \item \textit{inverse}, inverse kernel ($1.0/sqrt((r/self.epsilon)**2 + 1)$) + \item \textit{multiquadric}, multiquadric kernel ($sqrt((r/self.epsilon)**2 + 1)$) \end{itemize} + \default{multiquadric} + + \item \xmlNode{smooth}: \xmlDesc{float}, + RBF smooth factor. Values greater than zero increase the smoothness of the approximation. + 0 is for interpolation (default), the function will always go through the nodal points in + this case. + \default{0.0} + + \item \xmlNode{neighbors}: \xmlDesc{integer}, + RBF number of neighbors. If specified, the value of the interpolant at each + evaluation point will be computed using only the nearest data points. + If None (default), all the data points are used by default. + \default{None} + + \item \xmlNode{epsilon}: \xmlDesc{float}, + RBF Shape parameter that scales the input to the RBF. + If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + defaults to 1 and can be ignored. Otherwise, this must be specified. + \default{1.0} + + \item \xmlNode{degree}: \xmlDesc{integer}, + RBF Degree of the added polynomial. The default value is + the minimum degree for kernel or 0 if there is no minimum degree. + \default{None} + + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + GPR restart parameter. The number of restarts of the optimizer for finding the + kernel parameters which maximize the log-marginal likelihood. The first run of the + optimizer is performed from the kernels + initial parameters, the remaining ones (if any) from thetas + sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, + all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is + performed. + \default{0} + + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + GPR normalization. Whether or not to normalize the target values y by removing the mean + and scaling to unit-variance. This is + recommended for cases where zero-mean, unit-variance priors are used. + Note that, in this implementation, the normalisation is reversed before the GP predictions + are reported. + \default{True} \end{itemize} - \item \xmlNode{nyquistScalar}: \xmlDesc{integer}, - -- no description yet -- - \default{1} + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + defines the truncation rank to be used for the SVD. + Available options are: \begin{itemize} + \item \textit{-1}, no truncation is performed + \item \textit{0}, optimal rank is internally computed + \item \textit{$>1$}, this rank is going to be used for the truncation + \end{itemize} If $0.0 < svd\_rank < 1.0$, + this parameter represents the energy level.The value is used to compute the rank such + as computed rank is the number of the biggest singular values needed to reach the energy + identified by \xmlNode{svd\_rank}. + \default{0} - \item \xmlNode{ZeroFilter}: \xmlDesc{string}, - turns on \emph{zero filtering} for the listed - targets. Zero filtering is a very specific algorithm, and should not be used without - understanding its application. When zero filtering is enabled, the ARMA will remove all the - values from the training data equal to zero - for the target, then train on the remaining data (including Fourier detrending - if applicable). If the target is set as correlated to another target, the second target will - be treated as two distinct series: one - containing times in which the original target is zero, and one in the remaining - times. The results from separated ARMAs are recombined after sampling. This can be a - methodology for treating histories with long - zero-value segments punctuated periodically by peaks. + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + $int > 0$ that defines the truncation rank to be used for the total + least square problem. If not inputted, no truncation is applied \default{None} - The \xmlNode{ZeroFilter} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{tol}: \xmlDesc{float, optional}, - -- no description yet -- - \end{itemize} - \item \xmlNode{outTruncation}: \xmlDesc{comma-separated strings}, - defines whether and how output time series - are limited in domain. This node has one attribute, \xmlAttr{domain}, whose value can be - \xmlString{positive} or \xmlString{negative}. The value of this node contains the list of - targets to whom this domain limitation - should be applied. In the event a negative value is discovered in a target whose - domain is strictly positive, the absolute value of the original negative value will be used - instead, and similarly for the negative - domain. - \default{None} - The \xmlNode{outTruncation} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, - -- no description yet -- - \end{itemize} - \end{itemize} + \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + True if the exact modes need to be computed (eigenvalues and + eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). + \default{True} -In addition, \xmlNode{Segment} can be used to divided the ROM. In order to enable the segmentation, the -user need to specify following information for \xmlNode{Segment}: -\begin{itemize} - \item \xmlNode{Segment}, \xmlDesc{node, optional}, provides an alternative way to build the ROM. When - this mode is enabled, the subspace of the ROM (e.g. ``time'') will be divided into segments as - requested, then a distinct ROM will be trained on each of the segments. This is especially helpful if - during the subspace the ROM representation of the signal changes significantly. For example, if the signal - is different during summer and winter, then a signal can be divided and a distinct ROM trained on the - segments. By default, no segmentation occurs. + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + If True, the low-rank operator is computed like in fbDMD (reference: + https://arxiv.org/abs/1507.02264). Default is + False. + \default{False} - To futher enable clustering of the segments, the \xmlNode{Segment} has the following attributes: - \begin{itemize} - \item \xmlAttr{grouping}, \xmlDesc{string, optional field} enables the use of ROM subspace clustering in - addition to segmenting if set to \xmlString{cluster}. If set to \xmlString{segment}, then performs - segmentation without clustering. If clustering, then an additional node needs to be included in the - \xmlNode{Segment} node, as described below. - \default{segment} - \end{itemize} + \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float or integer}, + Tikhonov parameter for the regularization. If + `None`, no regularization is applied, if `float`, it is used as the + $`\lambda`$ tikhonov parameter. + \default{None} - This node takes the following subnodes: - \begin{itemize} - \item \xmlNode{subspace}, \xmlDesc{string, required field} designates the subspace to divide. This - should be the pivot parameter (often ``time'') for the ROM. This node also requires an attribute - to determine how the subspace is divided, as well as other attributes, described below: - \begin{itemize} - \item \xmlAttr{pivotLength}, \xmlDesc{float, optional field}, provides the value in the subspace - that each segment should attempt to represent, independently of how the data is stored. For - example, if the subspace has hourly resolution, is measured in seconds, and the desired - segmentation is daily, the \xmlAttr{pivotLength} would be 86400. - Either this option or \xmlAttr{divisions} must be provided. - \item \xmlAttr{divisions}, \xmlDesc{integer, optional field}, as an alternative to - \xmlAttr{pivotLength}, this attribute can be used to specify how many data points to include in - each subdivision, rather than use the pivot values. The algorithm will attempt to split the data - points as equally as possible. - Either this option or \xmlAttr{pivotLength} must be provided. - \item \xmlAttr{shift}, \xmlDesc{string, optional field}, governs the way in which the subspace is - treated in each segment. By default, the subspace retains its actual values for each segment; for - example, if each segment is 4 hours long, the first segment starts at time 0, the second at 4 - hours, the third at 8 hours, and so forth. Options to change this behavior are \xmlString{zero} - and \xmlString{first}. In the case of \xmlString{zero}, each segment restarts the pivot with the - subspace value as 0, shifting all other values similarly. In the example above, the first segment - would start at 0, the second at 0, and the third at 0, with each ending at 4 hours. Note that the - pivot values are restored when the ROM is evaluated. Using \xmlString{first}, each segment - subspace restarts at the value of the first segment. This is useful in the event subspace 0 is not - a desirable value. - \end{itemize} - \item \xmlNode{Classifier}, \xmlDesc{string, optional field} associates a \xmlNode{PostProcessor} - defined in the \xmlNode{Models} block to this segmentation. If clustering is enabled (see - \xmlAttr{grouping} above), then this associated Classifier will be used to cluster the segmented ROM - subspaces. The attributes \xmlAttr{class}=\xmlString{Models} and - \xmlAttr{type}=\xmlString{PostProcessor} must be set, and the text of this node is the \xmlAttr{name} - of the requested Classifier. Note this Classifier must be a valid Classifier; not all PostProcessors - are suitable. For example, see the DataMining PostProcessor subtype Clustering. - \item \xmlNode{clusterFeatures}, \xmlDesc{string, optional field}, if clustering then delineates - the fundamental ROM features that should be considered while clustering. The available features are - ROM-dependent, and an exception is raised if an unrecognized request is given. See individual ROMs - for options. \default All ROM-specific options. - \item \xmlNode{evalMode}, \xmlDesc{string, optional field}, one of \xmlString{truncated}, - \xmlString{full}, or \xmlString{clustered}, determines how the evaluations are - represented, as follows: - \begin{itemize} - \item \xmlString{full}, reproduce the full signal using representative cluster segments, - \item \xmlString{truncated}, reproduce a history containing exactly segment from each - cluster placed back-to-back, with the \xmlNode{pivotParameter} spanning the clustered - dimension. Note this will almost surely not be the same length as the original signal; - information about indexing can be found in the ROM's XML metadata. - \item \xmlString{clustered}, reproduce a N-dimensional object with the variable - \texttt{\_ROM\_cluster} as one of the indexes for the ROM's sampled variables. Note that - in order to use the option, the receiving \xmlNode{DataObject} should be of type - \xmlNode{DataSet} with one of the indices being \texttt{\_ROM\_cluster}. - \end{itemize} - \item \xmlNode{evaluationClusterChoice}, \xmlDesc{string, optional field}, one of \xmlString{first} or - \xmlString{random}, determines, if \xmlAttr{grouping}$=cluster$, which - strategy needs to be followed for the evaluation stage. If ``first'', the - first ROM (representative segmented ROM),in each cluster, is considered to - be representative of the full space in the cluster (i.e. the evaluation is always performed - interrogating the first ROM in each cluster); If ``random'', a random ROM, in each cluster, - is choosen when an evaluation is requested. - \nb if ``first'' is used, there is \emph{substantial} memory savings when compared to using - ``random''. - %If ``centroid'', a ROM ``trained" on the centroids - %information of each cluster is used for the evaluation (\nb ``centroid'' option is not - %available yet). - \default{first} - \end{itemize} -\end{itemize} + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + True if the amplitudes need to be computed minimizing the error + between the modes and all the time-steps or False, if only the 1st timestep only needs to be + considered + \default{False} + \end{itemize} \hspace{24pt} -General ARMA Example: -\begin{lstlisting}[style=XML, morekeywords={name,subType,pivotLength,shift,target,threshold,period,width}] +Example: +\textbf{Example:} +\begin{lstlisting}[style=XML,morekeywords={name,subType}] ... ... - - Time - scaling - Speed1,Speed2 -

5

- 4 - - Time - - True - 604800,86400 - 2, 4 - - -7200,10800 - 64800,75600 - -
+ + t,decay_heat,decay_heat_pu + enrichment,burnup + t + svd + 0 + 0 + 7 + ...
...
\end{lstlisting} +Example to export the coefficients of trained DMD ROM: +\begin{lstlisting}[style=XML,morekeywords={name,subType}] + + ... + + ... + + xml + DMD + + + + xml + DMD + eigs,amplitudes,modes + + ... + + ... + +\end{lstlisting} + -\subsubsection{PolyExponential} - The \xmlNode{PolyExponential} contains a single ROM type, aimed to construct a time-dependent - (or any other monotonic variable) surrogate model based on polynomial sum of exponential term. - This surrogate have the form: \begin{equation} SM(X,z) = \sum_{i=1}^{N} P_{i}(X) \times - \exp ( - Q_{i}(X) \times z ) \end{equation} where: \begin{itemize} \item - $\mathbf{z}$ is the independent monotonic variable (e.g. time) \item $\mathbf{X}$ is the - vector of the other independent (parametric) variables (Features) \item $\mathbf{P_{i}}(X)$ - is a polynomial of rank M function of the parametric space X \item $\mathbf{Q_{i}}(X)$ is a - polynomial of rank M function of the parametric space X \item $\mathbf{N}$ is the number of - requested exponential terms. \end{itemize} It is crucial to notice that this model is - quite suitable for FOMs whose drivers are characterized by an exponential-like behavior. In - addition, it is important to notice that the exponential terms' coefficients are computed running - a genetic-algorithm optimization problem, which is quite slow in case of increasing number of - ``numberExpTerms''. In order to use this Reduced Order Model, the \xmlNode{ROM} attribute - \xmlAttr{subType} needs to be set equal to \xmlString{PolyExponential}. \\ Once the ROM is - trained (\textbf{Step} \xmlNode{RomTrainer}), its coefficients can be exported into an XML file +\subsubsection{DMDC} + The \xmlString{DMDC} contains a single ROM type similar to DMD, aimed to construct a time- + dependent surrogate model based on Dynamic Mode Decomposition with Control (ref. + \cite{proctor2016dynamic}). In addition to perform a ``dimensionality reduction + regression'' like DMD, this surrogate will calculate the state-space representation + matrices A, B and C in a discrete time domain: \begin{itemize} \item + $x[k+1]=A*x[k]+B*u[k]$ \item $y[k+1]=C*x[k+1]$ \end{itemize} In order + to use this Reduced Order Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs to be + set equal to \xmlString{DMDC}. \\ Once the ROM is trained (\textbf{Step} + \xmlNode{RomTrainer}), its parameters/coefficients can be exported into an XML file via an \xmlNode{OutStream} of type \xmlAttr{Print}. The following variable/parameters can be - exported (i.e. \xmlNode{what} node in \xmlNode{OutStream} of type \xmlAttr{Print}): - \begin{itemize} \item \xmlNode{expTerms}, see XML input specifications above, inquired pre- - pending the keyword ``output|'' (e.g. output| expTerms) \item \xmlNode{coeffRegressor}, see - XML input specifications above \item \xmlNode{polyOrder}, see XML input specifications above - \item \xmlNode{features}, see XML input specifications above \item \xmlNode{timeScale}, XML - node containing the array of the training time steps values \item \xmlNode{coefficients}, - XML node containing the exponential terms' coefficients for each realization \end{itemize} + exported (i.e. \xmlNode{what} node in \xmlNode{OutStream} of type + \xmlAttr{Print}): \begin{itemize} \item \xmlNode{rankSVD}, see XML input + specifications below \item \xmlNode{actuators}, XML node containing the list of actuator + variables (u), see XML input specifications below \item + \xmlNode{stateVariables}, XML node containing the list of system state variables (x), + see XML input specifications below \item \xmlNode{initStateVariables}, XML node + containing the list of system state variables (x\_init) that are used for + initializing the model in ``evaluation'' mode, see XML input specifications below + \item \xmlNode{outputs}, XML node containing the list of system output variables (y) + \item \xmlNode{dmdTimeScale}, XML node containing the the array of time scale in the DMD space, + which is time axis in traning data (Time) \item \xmlNode{UNorm}, XML node containing the + norminal values of actuators, which are the initial actuator values in the + training data \item \xmlNode{XNorm}, XML node containing the norminal values of state + variables, which are the initial state values in the training data \item + \xmlNode{XLast}, XML node containing the last value of state variables, which are + the final state values in the training data (before nominal value subtraction) \item + \xmlNode{YNorm}, XML node containing the norminal values of output variables, + which are the initial output values in the training data \item \xmlNode{Atilde}, XML + node containing the A matrix in discrete time domain (imaginary part, matrix + shape, and real part) \item \xmlNode{Btilde}, XML node containing the B matrix in + discrete time domain (imaginary part, matrix shape, and real part) \item + \xmlNode{Ctilde}, XML node containing the C matrix in discrete time domain + (imaginary part, matrix shape, and real part) \end{itemize} - The \xmlNode{PolyExponential} node recognizes the following parameters: + The \xmlNode{DMDC} node recognizes the following parameters: \begin{itemize} \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. @@ -3335,7 +5137,7 @@ \subsubsection{PolyExponential} specify the type of ROM that will be used \end{itemize} - The \xmlNode{PolyExponential} node recognizes the following subnodes: + The \xmlNode{DMDC} node recognizes the following subnodes: \begin{itemize} \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be @@ -3533,57 +5335,245 @@ \subsubsection{PolyExponential} either ``input'' or ``output''. \end{itemize} + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + Whether this instance should be light or not. A light instance uses + less memory since it caches a smaller number of resources. + \default{False} + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{numberExpTerms}: \xmlDesc{integer}, - the number of exponential terms to be used ($N$ above) - \default{3} + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + the type of method used for the dimensionality reduction.Available are: + \begin{itemize} \item \textit{svd}, single + value decomposition \item \textit{svd}, + randomized single value decomposition + \item \textit{correlation\_matrix}, correlation-based reduction. + \end{itemize} + \default{svd} - \item \xmlNode{coeffRegressor}: \xmlDesc{[poly, spline, nearest]}, - defines which regressor to use for interpolating the - exponential coefficient. Available are ``spline'',``poly'' and ``nearest''. - \default{spline} + \item \xmlNode{reductionRank}: \xmlDesc{integer}, + defines the truncation rank to be used for the reduction method. + Available options are: \begin{itemize} + \item \textit{-1}, no truncation is performed + \item \textit{0}, optimal rank is internally computed + \item \textit{$>1$}, this rank is going to be used for the truncation + \end{itemize} + \default{0} - \item \xmlNode{polyOrder}: \xmlDesc{integer}, - the polynomial order to be used for interpolating the exponential - coefficients. Only valid in case of \xmlNode{coeffRegressor} set to ``poly''. - \default{3} + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + the type of method used for the interpolation of the parameter space.Available are: + \begin{itemize} \item \textit{RBF}, + Radial-basis functions \item \textit{GPR}, + Gaussian Process Regression \end{itemize} + \default{RBF} - \item \xmlNode{tol}: \xmlDesc{float}, - relative tolerance of the optimization problem (differential evolution optimizer) - \default{0.001} + \item \xmlNode{approximationSettings}: + the settings available depending on the different type of method used for the interpolation of + the parameter space - \item \xmlNode{max\_iter}: \xmlDesc{integer}, - maximum number of iterations (generations) for the - optimization problem (differential evolution optimizer) - \default{5000} + The \xmlNode{approximationSettings} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + RBF kernel. Available options are: + \begin{itemize} \item + \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) + \item \textit{cubic}, cubic kernel ($r**3$) + \item \textit{quintic}, quintic kernel ($r**5$) + \item \textit{linear}, linear kernel ($r$) + \item \textit{gaussian}, gaussian kernel ($exp(-(r/self.epsilon)**2)$) + \item \textit{inverse}, inverse kernel ($1.0/sqrt((r/self.epsilon)**2 + 1)$) + \item \textit{multiquadric}, multiquadric kernel ($sqrt((r/self.epsilon)**2 + 1)$) + \end{itemize} + \default{multiquadric} + + \item \xmlNode{smooth}: \xmlDesc{float}, + RBF smooth factor. Values greater than zero increase the smoothness of the approximation. + 0 is for interpolation (default), the function will always go through the nodal points in + this case. + \default{0.0} + + \item \xmlNode{neighbors}: \xmlDesc{integer}, + RBF number of neighbors. If specified, the value of the interpolant at each + evaluation point will be computed using only the nearest data points. + If None (default), all the data points are used by default. + \default{None} + + \item \xmlNode{epsilon}: \xmlDesc{float}, + RBF Shape parameter that scales the input to the RBF. + If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + defaults to 1 and can be ignored. Otherwise, this must be specified. + \default{1.0} + + \item \xmlNode{degree}: \xmlDesc{integer}, + RBF Degree of the added polynomial. The default value is + the minimum degree for kernel or 0 if there is no minimum degree. + \default{None} + + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + GPR restart parameter. The number of restarts of the optimizer for finding the + kernel parameters which maximize the log-marginal likelihood. The first run of the + optimizer is performed from the kernels + initial parameters, the remaining ones (if any) from thetas + sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, + all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is + performed. + \default{0} + + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + GPR normalization. Whether or not to normalize the target values y by removing the mean + and scaling to unit-variance. This is + recommended for cases where zero-mean, unit-variance priors are used. + Note that, in this implementation, the normalisation is reversed before the GP predictions + are reported. + \default{True} + \end{itemize} + + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + defines the truncation rank to be used for the SVD. + Available options are: \begin{itemize} + \item \textit{-1}, no truncation is performed + \item \textit{0}, optimal rank is internally computed + \item \textit{$>1$}, this rank is going to be used for the truncation + \end{itemize} If $0.0 < svd\_rank < 1.0$, + this parameter represents the energy level.The value is used to compute the rank such + as computed rank is the number of the biggest singular values needed to reach the energy + identified by \xmlNode{svd\_rank}. + \default{0} + + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + $int > 0$ that defines the truncation rank to be used for the total + least square problem. If not inputted, no truncation is applied + \default{None} + + \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + True if the exact modes need to be computed (eigenvalues and + eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). + \default{True} + + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + If True, the low-rank operator is computed like in fbDMD (reference: + https://arxiv.org/abs/1507.02264). Default is + False. + \default{False} + + \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float or integer}, + Tikhonov parameter for the regularization. If + `None`, no regularization is applied, if `float`, it is used as the + $`\lambda`$ tikhonov parameter. + \default{None} + + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + True if the amplitudes need to be computed minimizing the error + between the modes and all the time-steps or False, if only the 1st timestep only needs to be + considered + \default{False} + + \item \xmlNode{rankSVD}: \xmlDesc{integer}, + defines the truncation rank to be used for the SVD. + Available options are: \begin{itemize} + \item \textit{-1}, no truncation is performed + \item \textit{0}, optimal rank is internally computed + \item \textit{$>1$}, this rank is going to be used for the truncation + \end{itemize} + \default{None} + + \item \xmlNode{energyRankSVD}: \xmlDesc{float}, + energy level ($0.0 < float < 1.0$) used to compute the rank such + as computed rank is the number of the biggest singular values needed to reach the energy + identified by \xmlNode{energyRankSVD}. This + node has always priority over \xmlNode{rankSVD} + \default{None} + + \item \xmlNode{rankTLSQ}: \xmlDesc{integer}, + $int > 0$ that defines the truncation rank to be used for the total + least square problem. If not inputted, no truncation is applied + \default{None} + + \item \xmlNode{exactModes}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + True if the exact modes need to be computed (eigenvalues and + eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). + \default{True} + + \item \xmlNode{optimized}: \xmlDesc{float}, + True if the amplitudes need to be computed minimizing the error + between the modes and all the time-steps or False, if only the 1st timestep only needs to be + considered + \default{False} + + \item \xmlNode{actuators}: \xmlDesc{comma-separated strings}, + defines the actuators (i.e. system input parameters) + of this model. Each actuator variable (u1, u2, etc.) needs to + be listed here. + + \item \xmlNode{stateVariables}: \xmlDesc{comma-separated strings}, + defines the state variables (i.e. system variable vectors) + of this model. Each state variable (x1, x2, etc.) needs to be listed + here. The variables indicated in \xmlNode{stateVariables} must be + listed in the \xmlNode{Target} node too. + + \item \xmlNode{initStateVariables}: \xmlDesc{comma-separated strings}, + defines the state variables' ids that should be used as + initialization variable in the evaluation + stage (for the evaluation of the model). + These variables are used for the first time step to initiate + the rolling time-step prediction of the state variables, ``exited'' + by the \xmlNode{actuators} signal. The variables listed in + \xmlNode{initStateVariables} must be listed in the \xmlNode{Features} + node too. \nb The + \xmlNode{initStateVariables} MUST be named appending ``\_init'' to + the stateVariables listed in \xmlNode{stateVariables} XML node + \default{[]} + + \item \xmlNode{subtractNormUXY}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + True if the initial values need to be subtracted from the + actuators (u), state (x) and outputs (y) if any. False if the subtraction + is not needed. + \default{False} + + \item \xmlNode{singleValuesTruncationTol}: \xmlDesc{float}, + Truncation threshold to apply to singular values vector + \default{1e-09} \end{itemize} \hspace{24pt} -Example: +Example of DMDc ROM definition, with 1 actuator variable (u1), 3 state variables (x1, x2, x3), 2 output variables (y1, y2), and 2 scheduling parameters (mod, flow): \begin{lstlisting}[style=XML,morekeywords={name,subType}] - ... - - ... - - time,decay_heat, xe135_dens - enrichment,bu - time - 5 - 1000000 - 0.000001 - - ... - - ... - + ... + + ... + + + Time,x1,x2,x3,y1,y2 + + u1 + + x1,x2,x3 + + Time + + 1 + + True + + + u1,mod,flow,x1_init,x2_init,x3_init + + + x1_init,x2_init,x3_init + + + ... + + ... +
+ \end{lstlisting} -Example to export the coefficients of trained PolyExponential ROM: +Example to export the coefficients of trained DMDC ROM: \begin{lstlisting}[style=XML,morekeywords={name,subType}] ... @@ -3591,7 +5581,7 @@ \subsubsection{PolyExponential} ... xml - PolyExp + DMDc - Time,x1,x2,x3,y1,y2 - - u1 - - x1,x2,x3 - - Time - - 1 - - True - - - u1,mod,flow,x1_init,x2_init,x3_init - - - x1_init,x2_init,x3_init - + ... + + ... + + t,decay_heat,decay_heat_pu + enrichment,burnup + t + svd + 0 + 0 + False + True + 0 + 0.6 + auto + stable - ... - - ... - - + ... + + ... +
\end{lstlisting} -Example to export the coefficients of trained DMDC ROM: +Example to export the coefficients of trained DMD ROM: \begin{lstlisting}[style=XML,morekeywords={name,subType}] ... @@ -4517,7 +6480,7 @@ \subsubsection{DMDC} ... xml - DMDc + DMD - - - xml - DMD - eigs,amplitudes,modes - - ... - - ... - -\end{lstlisting} - -\subsubsection{VarProDMD} - The \xmlString{VarProDMD} ROM (Variable Projection for DMD) aimed to construct a time-dependent - (or any other monotonic variable) surrogate model based on Variable Projection for DMD - (https://epubs.siam.org/doi/abs/10.1137/M1124176). This surrogate is aimed to perform a - ``dimensionality reduction regression'', where, given time series (or any monotonic-dependent - variable) of data, a set of modes each of which is associated with a fixed oscillation - frequency and decay/growth rate is computed in order to represent the data-set. In order - to use this Reduced Order Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs to be set - equal to \xmlString{DMD}. \\ Once the ROM is trained (\textbf{Step} - \xmlNode{RomTrainer}), its parameters/coefficients can be exported into an XML file via an - \xmlNode{OutStream} of type \xmlAttr{Print}. The following variable/parameters can be exported - (i.e. \xmlNode{what} node in \xmlNode{OutStream} of type \xmlAttr{Print}): \begin{itemize} - \item \xmlNode{svd\_rank}, see XML input specifications below \item \xmlNode{exact}, see XML - input specifications below \item \xmlNode{compression}, see XML input specifications below - \item \xmlNode{sorted\_eigs}, see XML input specifications below \item \xmlNode{features}, - see XML input specifications below \item \xmlNode{timeScale}, XML node containing the array - of the training time steps values \item \xmlNode{dmdTimeScale}, XML node containing the - array of time scale in the DMD space (can be used as mapping between the - \xmlNode{timeScale} and \xmlNode{dmdTimeScale}) \item \xmlNode{eigs}, XML node containing - the eigenvalues (imaginary and real part) \item \xmlNode{amplitudes}, XML node containing - the amplitudes (imaginary and real part) \item \xmlNode{modes}, XML node containing the - dynamic modes (imaginary and real part) \end{itemize} +\subsubsection{Decomposition} + -- no description yet -- - The \xmlNode{VarProDMD} node recognizes the following parameters: + The \xmlNode{Decomposition} node recognizes the following parameters: \begin{itemize} \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. @@ -9370,7 +11128,7 @@ \subsubsection{VarProDMD} specify the type of ROM that will be used \end{itemize} - The \xmlNode{VarProDMD} node recognizes the following subnodes: + The \xmlNode{Decomposition} node recognizes the following subnodes: \begin{itemize} \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be @@ -9522,235 +11280,1022 @@ \subsubsection{VarProDMD} (n\_samples*n\_timesteps,n\_features) before applying the transformation and then reconstructed back into the original shape (before fitting the model). - The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, - Transformation method to use. Eight options (5 Kernel PCAs) are available: - \begin{itemize} \item \textit{PCA}, Principal Component Analysis; - \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; - \item \textit{KernelPolyPCA}, Kernel (Poly) Principal component analysis; - \item \textit{KernelRbfPCA}, Kernel(Rbf) Principal component analysis; - \item \textit{KernelSigmoidPCA}, Kernel (Sigmoid) Principal component analysis; - \item \textit{KernelCosinePCA}, Kernel (Cosine) Principal component analysis; - \item \textit{ICA}, Independent component analysis; \end{itemize} - \default{PCA} + The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + Transformation method to use. Eight options (5 Kernel PCAs) are available: + \begin{itemize} \item \textit{PCA}, Principal Component Analysis; + \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; + \item \textit{KernelPolyPCA}, Kernel (Poly) Principal component analysis; + \item \textit{KernelRbfPCA}, Kernel(Rbf) Principal component analysis; + \item \textit{KernelSigmoidPCA}, Kernel (Sigmoid) Principal component analysis; + \item \textit{KernelCosinePCA}, Kernel (Cosine) Principal component analysis; + \item \textit{ICA}, Independent component analysis; \end{itemize} + \default{PCA} + + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the transformation process. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature? + \default{Feature} + \end{itemize} + + \item \xmlNode{CV}: \xmlDesc{string}, + The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with + \xmlAttr{subType} ``CrossValidation``. + The \xmlNode{CV} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{class}: \xmlDesc{string, optional}, + should be set to \xmlString{Model} + \item \xmlAttr{type}: \xmlDesc{string, optional}, + should be set to \xmlString{PostProcessor} + \end{itemize} + + \item \xmlNode{alias}: \xmlDesc{string}, + specifies alias for any variable of interest in the input or output space. These + aliases can be used anywhere in the RAVEN input to refer to the variables. In the body + of this node the user specifies the name of the variable that the model is going to use + (during its execution). + The \xmlNode{alias} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{variable}: \xmlDesc{string, required}, + define the actual alias, usable throughout the RAVEN input + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + either ``input'' or ``output''. + \end{itemize} + + \item \xmlNode{Segment}: + provides an alternative way to build the ROM. When + this mode is enabled, the subspace of the ROM (e.g. ``time'') will be divided into segments as + requested, then a distinct ROM will be trained on each of the segments. This is especially + helpful if during the subspace the ROM + representation of the signal changes significantly. For example, if the signal + is different during summer and winter, then a signal can be divided and a distinct ROM trained + on the segments. By default, no segmentation + occurs. + The \xmlNode{Segment} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{grouping}: \xmlDesc{[decomposition], optional}, + enables the use of ROM subspace clustering in addition to segmenting if set to + \xmlString{cluster}. If set to \xmlString{segment}, then performs segmentation + without clustering. If clustering, then an additional node needs to be included in the + \xmlNode{Segment} node. \default{decomposition} + \end{itemize} + + The \xmlNode{Segment} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{macroParameter}: \xmlDesc{string}, + pivot parameter for macro steps (e.g. years) + + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + specifies the names of the features of this ROM. \nb These parameters are going to + be requested for the training of this object (see + Section~\ref{subsec:stepRomTrainer}) + + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + contains a comma separated list of the targets of this ROM. These parameters are + the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters + are going to be requested for the training of this object (see Section + \ref{subsec:stepRomTrainer}). + + \item \xmlNode{pivotParameter}: \xmlDesc{string}, + If a time-dependent ROM is requested, please specifies the pivot variable (e.g. + time, etc) used in the input HistorySet. + \default{time} + + \item \xmlNode{featureSelection}: + Apply feature selection algorithm + + The \xmlNode{featureSelection} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{RFE}: + The \xmlString{RFE} (Recursive Feature Elimination) is a feature selection algorithm. + Feature selection refers to techniques that select a subset of the most relevant + features for a model (ROM). Fewer features can allow ROMs to run more + efficiently (less space or time complexity) and be more effective. Indeed, + some ROMs (machine learning algorithms) can be misled by irrelevant input features, + resulting in worse predictive performance. RFE is a wrapper-type + feature selection algorithm. This means that a different ROM is given and used in the + core of the method, is wrapped by RFE, and used to help select + features. \\RFE works by searching for a subset of features by starting with + all features in the training dataset and successfully removing + features until the desired number remains. This is achieved by fitting the + given ROM used in the core of the model, ranking features by importance, + discarding the least important features, and re-fitting the model. This process is + repeated until a specified number of features remains. When the full + model is created, a measure of variable importance is computed that ranks the + predictors from most important to least. At each stage of the search, + the least important predictors are iteratively eliminated prior to rebuilding the + model. Features are scored either using the ROM model (if the model provides a + mean to compute feature importances) or by using a statistical method. + \\In RAVEN the \xmlString{RFE} class refers to an augmentation of the basic algorithm, + since it allows, optionally, to perform the search on multiple groups of + targets (separately) and then combine the results of the search in a single + set. In addition, when the RFE search is concluded, the user can request to identify + the set of features that bring to a minimization of the score (i.e. + maximimization of the accuracy). In addition, using the + ``applyClusteringFiltering'' option, the algorithm can, using an hierarchal clustering + algorithm, identify highly correlated features to speed up the subsequential + search. + The \xmlNode{RFE} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \end{itemize} + + The \xmlNode{RFE} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the search. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature (this is temporary till DataSet training + is implemented) + \default{feature} + + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be + set to $1/2$ of the features in the training dataset. + \default{None} + + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + Maximum Number of features to select, the algorithm will automatically determine + the feature list to minimize a total score. + \default{None} + + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + If maxNumberFeatures is on, only output score should beconsidered? Or, in case of + particular models (e.g. DMDC), state variable space score should be considered as + well. + \default{False} + + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + Applying clustering correlation before RFE search? If true, an hierarchal + clustering is applied on the feature space aimed to remove features that + are correlated before the actual RFE search is performed. This approach can + stabilize and accelerate the process in case of large feature spaces (e.g + > 500 features). + \default{False} + + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + In case of subgroupping, should a cross correleation analysis should be performed + cross sub-groups? If it is activated, a cross correleation analysis is + used to additionally filter the features selected for each sub-groupping + search. + \default{False} + + \item \xmlNode{step}: \xmlDesc{float}, + If greater than or equal to 1, then step corresponds to the (integer) number + of features to remove at each iteration. If within (0.0, 1.0), then step + corresponds to the percentage (rounded down) of features to remove at each + iteration. + \default{1} + + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + Subgroup of output variables on which to perform the search. Multiple nodes of + this type can be inputted. The RFE search will be then performed in each + ``subgroup'' separately and then the the union of the different feature sets are + used for the final ROM. + \end{itemize} + + \item \xmlNode{VarianceThreshold}: + The \xmlString{VarianceThreshold} is a feature selector that removes all low- + variance features. This feature selection algorithm looks only at the features and not + the desired outputs. The variance threshold can be set by the user. + The \xmlNode{VarianceThreshold} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{name}: \xmlDesc{string, required}, + User-defined name to designate this entity in the RAVEN input file. + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + Desired verbosity of messages coming from this entity + \end{itemize} + + The \xmlNode{VarianceThreshold} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the search. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature (this is temporary till DataSet training + is implemented) + \default{feature} + + \item \xmlNode{threshold}: \xmlDesc{float}, + Features with a training-set variance lower than this threshold + will be removed. The default is to keep all features with non-zero + variance, i.e. remove the features that have the same value in all + samples. + \default{0.0} + \end{itemize} + \end{itemize} + + \item \xmlNode{featureSpaceTransformation}: + Use dimensionality reduction technique to perform a trasformation of the training dataset + into an uncorrelated one. The dimensionality of the problem will not be reduced but + the data will be transformed in the transformed space. E.g if the number of features + are 5, the method projects such features into a new uncorrelated space (still + 5-dimensional). In case of time- + dependent ROMs, all the samples are concatenated in a global 2D matrix + (n\_samples*n\_timesteps,n\_features) before applying the transformation and then + reconstructed back into the original + shape (before fitting the model). + + The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + Transformation method to use. Eight options (5 Kernel PCAs) are available: + \begin{itemize} \item \textit{PCA}, Principal Component Analysis; + \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; + \item \textit{KernelPolyPCA}, Kernel (Poly) Principal component analysis; + \item \textit{KernelRbfPCA}, Kernel(Rbf) Principal component analysis; + \item \textit{KernelSigmoidPCA}, Kernel (Sigmoid) Principal component analysis; + \item \textit{KernelCosinePCA}, Kernel (Cosine) Principal component analysis; + \item \textit{ICA}, Independent component analysis; \end{itemize} + \default{PCA} + + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + List of IDs of features/variables to include in the transformation process. + \default{None} + + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + Which space to search? Target or Feature? + \default{Feature} + \end{itemize} + + \item \xmlNode{CV}: \xmlDesc{string}, + The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} + with \xmlAttr{subType} ``CrossValidation``. + The \xmlNode{CV} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{class}: \xmlDesc{string, optional}, + should be set to \xmlString{Model} + \item \xmlAttr{type}: \xmlDesc{string, optional}, + should be set to \xmlString{PostProcessor} + \end{itemize} + + \item \xmlNode{alias}: \xmlDesc{string}, + specifies alias for any variable of interest in the input or output space. These + aliases can be used anywhere in the RAVEN input to refer to the variables. In the + body of this node the user specifies the name of the variable that the model is going to + use (during its execution). + The \xmlNode{alias} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{variable}: \xmlDesc{string, required}, + define the actual alias, usable throughout the RAVEN input + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + either ``input'' or ``output''. + \end{itemize} + + \item \xmlNode{pivotParameter}: \xmlDesc{string}, + If a time-dependent ROM is requested, please specifies the pivot variable (e.g. + time, etc) used in the input HistorySet. + \default{time} + + \item \xmlNode{fourier}: + TimeSeriesAnalysis algorithm for determining the strength and phase of + specified Fourier periods within training signals. The Fourier signals take + the form $C\sin(\frac{2\pi}{k}+\phi)$, where $C$ is the calculated strength + or amplitude, $k$ is the user-specified period(s) to search for, and $\phi$ + is the calculated phase shift. The resulting characterization and synthetic + history generation is deterministic given a single training signal. + The \xmlNode{fourier} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{fourier} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{periods}: \xmlDesc{comma-separated floats}, + Specifies the periods (inverse of frequencies) that should be searched + for within the training signal. + \end{itemize} + + \item \xmlNode{arma}: + characterizes the signal using Auto-Regressive and Moving Average coefficients to + stochastically fit the training signal. 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 ARMA algorithms are developed in RAVEN using + the \texttt{statsmodels} Python library. + The \xmlNode{arma} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{reduce\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + activates a lower memory usage ARMA training. This does tend to result + in a slightly slower training time, at the benefit of lower memory usage. For + example, in one 1000-length history test, low memory reduced memory usage by 2.3 + MiB, but increased training time by 0.4 seconds. No change in results has been + observed switching between modes. Note that the ARMA must be + retrained to change this property; it cannot be applied to serialized ARMAs. \default{False} + \item \xmlAttr{gaussianize}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + activates a transformation of the signal to a normal distribution before + training. This is done by fitting a CDF to the data and then transforming the + data to a normal distribution using the CDF. The CDF is saved and used during + sampling to back-transform the data to the original distribution. This is + recommended for non-normal data, but is not required. Note that the ARMA must be + retrained to change this property; it cannot be applied to serialized ARMAs. + Note: New models wishing to apply this transformation should use a + \xmlNode{gaussianize} node preceding the \xmlNode{arma} node instead of this + option. \default{False} + \item \xmlAttr{auto\_select}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + 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} + \end{itemize} + + The \xmlNode{arma} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{P}: \xmlDesc{comma-separated integers}, + 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. + + \item \xmlNode{Q}: \xmlDesc{comma-separated integers}, + 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. + \end{itemize} + + \item \xmlNode{varma}: + characterizes the vector-valued signal using Auto-Regressive and Moving Average + coefficients to stochastically fit the training signal. The VARMA 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. For signal $A\_t$ which is a $k + \times 1$ vector, each $\phi\_i$ and $\theta\_j$ are $k \times k$ matrices, and + $\epsilon\_t$ is characterized by the $k \times k$ covariance matrix $\Sigma$. The + VARMA algorithms are developed in RAVEN using the \texttt{statsmodels} Python + library. + The \xmlNode{varma} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{varma} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{P}: \xmlDesc{integer}, + the number of terms in the AutoRegressive term to retain in the + regression; typically represented as $P$ in literature. + + \item \xmlNode{Q}: \xmlDesc{integer}, + the number of terms in the Moving Average term to retain in the + regression; typically represented as $Q$ in literature. + \end{itemize} + + \item \xmlNode{MarkovAR}: + characterizes the signal using autoregressive (AR) coefficients conditioned on the + state of a hidden Markov model (HMM) to stochastically fit the training signal. + The Markov-switching autoregressive model (MSAR) has the following form: + \begin{equation*} Y\_t = \mu_{S\_t} \sum_{i=1}^p \phi_{i,{S\_t}} \left(Y_{t-i} - + \mu_{S_{t-i}}\right) + \varepsilon_{t,{S\_t}}, \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, $\varepsilon$ is a random + noise term with mean 0 and variance $\sigma^2_{S\_t}$, and $S\_t$ is the HMM state + at time $t$. The HMM state is determined by the transition probabilities between + states, which are conditioned on the previous state. The transition probabilities + are stored in a transition matrix $P$, where entry $p_{ij}$ is the probability of + transitioning from state $i$ to state $j$ conditional on being in state $i$. For a + MSAR model with HMM state dimensionality $r$, the transition matrix $P$ is of size + $r \times r$. Each of the mean, autoregressive, and noise variance terms may be + switching or non-switching parameters. + The \xmlNode{MarkovAR} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{switching\_ar}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + indicates whether the autoregressive coefficients are switching parameters. \default{True} + \item \xmlAttr{switching\_variance}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + indicates whether the noise variance is a switching parameter. \default{True} + \item \xmlAttr{switching\_trend}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + indicates whether the mean is a switching parameter. \default{True} + \end{itemize} + + The \xmlNode{MarkovAR} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{P}: \xmlDesc{integer}, + the number of terms in the AutoRegressive term to retain in the + regression; typically represented as $P$ in literature. + + \item \xmlNode{MarkovStates}: \xmlDesc{integer}, + the number of states in the hidden Markov model. + \end{itemize} + + \item \xmlNode{STL}: + Decomposes the signal into trend, seasonal, and residual components using the STL method + of Cleveland et al. (1990). + The \xmlNode{STL} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + The \xmlNode{STL} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{seasonal}: \xmlDesc{integer}, + the length of the seasonal smoother. + + \item \xmlNode{period}: \xmlDesc{integer}, + periodicity of the sequence. + + \item \xmlNode{trend}: \xmlDesc{integer}, + the length of the trend smoother. Must be an odd integer. + \end{itemize} + + \item \xmlNode{wavelet}: + Discrete Wavelet TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform + on time-dependent data. Note: This TSA module requires pywavelets to be installed within + your python environment. + The \xmlNode{wavelet} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, - List of IDs of features/variables to include in the transformation process. - \default{None} + The \xmlNode{wavelet} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{family}: \xmlDesc{string}, + The type of wavelet to use for the transformation. There are several possible + families to choose from, and most families contain more than one variation. For + more information regarding the wavelet families, refer to the Pywavelets + documentation located at: + https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) + \\ Possible values are: \begin{itemize} \item \textbf{haar family}: haar + \item \textbf{db family}: db1, db2, db3, db4, db5, db6, db7, db8, db9, db10, db11, + db12, db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, db23, db24, + db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, db36, db37, + db38 \item \textbf{sym family}: sym2, sym3, sym4, sym5, sym6, sym7, sym8, sym9, + sym10, sym11, sym12, sym13, sym14, sym15, sym16, sym17, sym18, sym19, sym20 + \item \textbf{coif family}: coif1, coif2, coif3, coif4, coif5, coif6, coif7, coif8, + coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17 \item + \textbf{bior family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, + bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, + bior6.8 \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, rbio2.2, rbio2.4, + rbio2.6, rbio2.8, rbio3.1, rbio3.3, rbio3.5, rbio3.7, rbio3.9, rbio4.4, + rbio5.5, rbio6.8 \item \textbf{dmey family}: dmey \item + \textbf{gaus family}: gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 + \item \textbf{mexh family}: mexh \item \textbf{morl family}: morl \item + \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 + \item \textbf{shan family}: shan \item \textbf{fbsp family}: fbsp \item + \textbf{cmor family}: cmor \end{itemize} + \end{itemize} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, - Which space to search? Target or Feature? - \default{Feature} - \end{itemize} + \item \xmlNode{PolynomialRegression}: + fits time-series data using a polynomial function of degree one or greater. + The \xmlNode{PolynomialRegression} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, - The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with - \xmlAttr{subType} ``CrossValidation``. - The \xmlNode{CV} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, - should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, - should be set to \xmlString{PostProcessor} - \end{itemize} + The \xmlNode{PolynomialRegression} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{degree}: \xmlDesc{integer}, + Specifies the degree polynomial to fit the data with. + \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, - specifies alias for any variable of interest in the input or output space. These - aliases can be used anywhere in the RAVEN input to refer to the variables. In the body - of this node the user specifies the name of the variable that the model is going to use - (during its execution). - The \xmlNode{alias} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, - define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, - either ``input'' or ``output''. - \end{itemize} + \item \xmlNode{autoarma}: + 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. + The \xmlNode{autoarma} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - Whether this instance should be light or not. A light instance uses - less memory since it caches a smaller number of resources. - \default{False} + The \xmlNode{autoarma} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{P\_upper}: \xmlDesc{integer}, + 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. + + \item \xmlNode{Q\_upper}: \xmlDesc{integer}, + 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. + + \item \xmlNode{criterion}: \xmlDesc{[aic, aicc, bic]}, + 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`. + + \item \xmlNode{use\_approximation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + 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. + \end{itemize} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, - defines the pivot variable (e.g., time) that represents the - independent monotonic variable - \default{time} + \item \xmlNode{rwd}: + TimeSeriesAnalysis algorithm for sliding window snapshots to generate features + The \xmlNode{rwd} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, - the type of method used for the dimensionality reduction.Available are: - \begin{itemize} \item \textit{svd}, single - value decomposition \item \textit{svd}, - randomized single value decomposition - \item \textit{correlation\_matrix}, correlation-based reduction. - \end{itemize} - \default{svd} + The \xmlNode{rwd} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{signatureWindowLength}: \xmlDesc{integer}, + the size of signature window, which represents as a snapshot for a certain time step; + typically represented as $w$ in literature, or $w\_sig$ in the code. - \item \xmlNode{reductionRank}: \xmlDesc{integer}, - defines the truncation rank to be used for the reduction method. - Available options are: \begin{itemize} - \item \textit{-1}, no truncation is performed - \item \textit{0}, optimal rank is internally computed - \item \textit{$>1$}, this rank is going to be used for the truncation - \end{itemize} - \default{0} + \item \xmlNode{featureIndex}: \xmlDesc{integer}, + Index used for feature selection, which requires pre-analysis for now, will be + addresses via other non human work required method - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, - the type of method used for the interpolation of the parameter space.Available are: - \begin{itemize} \item \textit{RBF}, - Radial-basis functions \item \textit{GPR}, - Gaussian Process Regression \end{itemize} - \default{RBF} + \item \xmlNode{sampleType}: \xmlDesc{integer}, + Indicating the type of sampling. - \item \xmlNode{approximationSettings}: \xmlDesc{[RBF, GPR]}, - the settings available depending on the different type of method used for the interpolation of - the parameter space - \default{None} + \item \xmlNode{seed}: \xmlDesc{integer}, + Indicating random seed. + \end{itemize} - The \xmlNode{approximationSettings} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, - RBF kernel. Available options are: - \begin{itemize} \item - \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) - \item \textit{cubic}, cubic kernel ($r**3$) - \item \textit{quintic}, quintic kernel ($r**5$) - \item \textit{linear}, linear kernel ($r$) - \item \textit{gaussian}, gaussian kernel ($exp(-(r/self.epsilon)**2)$) - \item \textit{inverse}, inverse kernel ($1.0/sqrt((r/self.epsilon)**2 + 1)$) - \item \textit{multiquadric}, multiquadric kernel ($sqrt((r/self.epsilon)**2 + 1)$) + \item \xmlNode{maxabsscaler}: + scales the data to the interval $[-1, 1]$. This is done by dividing by the largest + absolute value of the data. + The \xmlNode{maxabsscaler} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} \end{itemize} - \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, - RBF smooth factor. Values greater than zero increase the smoothness of the approximation. - 0 is for interpolation (default), the function will always go through the nodal points in - this case. - \default{0.0} + \item \xmlNode{minmaxscaler}: + scales the data to the interval $[0, 1]$. This is done by subtracting the + minimum value from each point and dividing by the range. + The \xmlNode{minmaxscaler} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{neighbors}: \xmlDesc{integer}, - RBF number of neighbors. If specified, the value of the interpolant at each - evaluation point will be computed using only the nearest data points. - If None (default), all the data points are used by default. - \default{None} + \item \xmlNode{robustscaler}: + centers and scales the data by subtracting the median and dividing by the + interquartile range. + The \xmlNode{robustscaler} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{epsilon}: \xmlDesc{float}, - RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this - defaults to 1 and can be ignored. Otherwise, this must be specified. - \default{1.0} + \item \xmlNode{standardscaler}: + centers and scales the data by subtracting the mean and dividing by the standard + deviation. + The \xmlNode{standardscaler} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{degree}: \xmlDesc{integer}, - RBF Degree of the added polynomial. The default value is - the minimum degree for kernel or 0 if there is no minimum degree. - \default{None} + \item \xmlNode{preserveCDF}: + forces generated data provided to the inverse transformation function to + have the same CDF as the original data through quantile mapping. If this + transformer is used as part of a SyntheticHistory ROM, it should likely + be used as the first transformer in the chain. + The \xmlNode{preserveCDF} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{n\_restarts\_optimizer}: \xmlDesc{integer}, - GPR restart parameter. The number of restarts of the optimizer for finding the - kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernel’s - initial parameters, the remaining ones (if any) from thetas - sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, - all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is - performed. - \default{0} + \item \xmlNode{differencing}: + applies Nth order differencing to the data. + The \xmlNode{differencing} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - GPR normalization. Whether or not to normalize the target values y by removing the mean - and scaling to unit-variance. This is - recommended for cases where zero-mean, unit-variance priors are used. - Note that, in this implementation, the normalisation is reversed before the GP predictions - are reported. - \default{True} - \end{itemize} + The \xmlNode{differencing} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{order}: \xmlDesc{integer}, + differencing order. + \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, - defines the truncation rank to be used for the SVD. - Available options are: \begin{itemize} - \item \textit{-1}, no truncation is performed - \item \textit{0}, optimal rank is internally computed - \item \textit{$>1$}, this rank is going to be used for the truncation - \end{itemize} If $0.0 < svd\_rank < 1.0$, this - parameter represents the energy level.The value is used to compute the rank such - as computed rank is the number of the biggest singular values needed to reach the energy - identified by \xmlNode{svd\_rank}. - \default{0} + \item \xmlNode{filterbankdwt}: + Filter Bank Discrete Wavelet Transform, a multi-resolution-capable TimeSeriesAnalysis + algorithm. Performs a discrete wavelet transform (DWT) on time-dependent data as a filter + bank to decompose the signal to multiple frequency levels. Given a wavelet family + and the original signal, the signal is projected onto modifications of the + original "mother" wavelet $\Psi$ to produce wavelet coefficients. The modifications + $\psi_{a,b}$ happen in two ways: \\ \begin{itemize} \item the + wavelet is scaled by factor $a$ to capture features at different time scales (e.g., if the + wavelet is "thinner" it better captures faster frequency features) + \item the wavelet is shifted in time by factor $b$ across the entire time domain of the + signal for each scale $a$ \end{itemize} After all projections, + there is a 2-D array of coefficients regarding the scale $a$ and shift $b$. The modified + wavelets are given by: \\ \begin{equation*} \psi_{a,b} = + \frac{1}{\sqrt{a}} \Psi(\frac{t-b}{a}) \end{equation*} The Filter Bank DWT + works in a cascading sequence of low- and high-pass filters for all requested + decomposition levels to create the wavelet coefficients. The low- and high-pass + filters create a set of approximation and detail coefficients, respectively, for + each scale. Approximation coefficients correspond to lower frequency/large + wavelength features; detail cofficients, to higher frequency/smaller wavelength features. + Subsequent decompositions apply the filters to the previous approximation coefficients. + For N levels of decomposition, N sets of detail coefficients and 1 set of + approximation coefficients are produced. Currently, the approximation coefficients + are treated as a trend in the signal and subtracted from the signal. Note: This + TSA module requires pywavelets to be installed within your python environment. + The \xmlNode{filterbankdwt} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - True if the exact modes need to be computed (eigenvalues and - eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). - \default{False} + The \xmlNode{filterbankdwt} node recognizes the following subnodes: + \begin{itemize} + \item \xmlNode{family}: \xmlDesc{string}, + The type of wavelet to use for the transformation. There are + several possible families to choose from, and most families contain + more than one variation. For more information regarding the wavelet families, + refer to the Pywavelets documentation located at: + https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) + \\ Possible values are: \begin{itemize} + \item \textbf{haar family}: haar \item \textbf{db family}: db1, + db2, db3, db4, db5, db6, db7, db8, db9, db10, db11, db12, + db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, db23, + db24, db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, + db36, db37, db38 \item \textbf{sym family}: sym2, sym3, sym4, + sym5, sym6, sym7, sym8, sym9, sym10, sym11, sym12, sym13, + sym14, sym15, sym16, sym17, sym18, sym19, sym20 \item + \textbf{coif family}: coif1, coif2, coif3, coif4, coif5, coif6, coif7, coif8, + coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17 + \item \textbf{bior family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, + bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, + bior6.8 \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, + rbio2.2, rbio2.4, rbio2.6, rbio2.8, rbio3.1, rbio3.3, rbio3.5, + rbio3.7, rbio3.9, rbio4.4, rbio5.5, rbio6.8 + \item \textbf{dmey family}: dmey \item \textbf{gaus family}: + gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 \item + \textbf{mexh family}: mexh \item \textbf{morl family}: morl + \item \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 + \item \textbf{shan family}: shan \item \textbf{fbsp family}: + fbsp \item \textbf{cmor family}: cmor + \end{itemize} + + \item \xmlNode{levels}: \xmlDesc{integer}, + the number of wavelet decomposition levels for requested for the signal. This is + equivalent to the number of sets of detail coefficients produced. + Note that there will always be one set of approximation + cofficients produced, which is treated as a trend in the signal. Note that there is a + maximum decomposition level depending on signal length and the chosen wavelet family: + if desired level is larger than the maximum decomposition level, + the latter will be used. Provided level must be nonzero. + \end{itemize} - \item \xmlNode{compression}: \xmlDesc{float}, - If libary compression $c = 0$, all samples are used. If $0 < c < 1$, the best fitting - $\lfloor \left(1 - c\right)m\rfloor$ samples are selected - \default{False} + \item \xmlNode{zerofilter}: + masks values that are near zero. The masked values are replaced with NaN values. + Caution should be used when using this algorithm because not all algorithms can handle + NaN values! A warning will be issued if NaN values are detected in the input of an + algorithm that does not support them. + The \xmlNode{zerofilter} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, True, False, imag]}, - Sort eigenvalues (and modes/dynamics accordingly) method. Available options are: - \begin{itemize} \item \textit{True}, the - variance of the absolute values of the complex eigenvalues - $\left(\sqrt{\omega\_i \cdot \bar{\omega}\_i}\right)$, the variance absolute values - of the real parts $\left|\Re\{{\omega\_i}\}\right|$ and the variance of the absolute - values of the imaginary parts $\left|\Im\{{\omega\_i}\}\right|$ is computed. The - eigenvalues are then sorted according to the highest variance (from highest to lowest). - \item \textit{False}, no sorting is performed - \item \textit{real}, the eigenvalues are sorted w.r.t. the absolute values of the real - parts of the eigenvalues (from highest to lowest). - \item \textit{imag}, the eigenvalues are sorted w.r.t. the absolute values of the imaginary - parts of the eigenvalues (from highest to lowest). - \item \textit{abs}, the eigenvalues are sorted w.r.t. the magnitude of the eigenvalues - $\left(\sqrt{\omega\_i \cdot \bar{\omega}\_i}\right)$ (from highest to lowest) - \end{itemize} - \default{False} - \end{itemize} + \item \xmlNode{logtransformer}: + applies the natural logarithm to the data and inverts by applying the + exponential function. + The \xmlNode{logtransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} -\hspace{24pt} -Example: -\textbf{Example:} -\begin{lstlisting}[style=XML,morekeywords={name,subType}] - - ... - - ... - - t,decay_heat,decay_heat_pu - enrichment,burnup - t - svd - 0 - 0 - - ... - - ... - -\end{lstlisting} + \item \xmlNode{arcsinhtransformer}: + applies the inverse hyperbolic sine to the data and inverts by applying + the hyperbolic sine. + The \xmlNode{arcsinhtransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} -Example to export the coefficients of trained DMD ROM: -\begin{lstlisting}[style=XML,morekeywords={name,subType}] - - ... - - ... - - xml - DMD - - - - xml - DMD - eigs,amplitudes,modes - - ... - - ... - -\end{lstlisting} + \item \xmlNode{tanhtransformer}: + applies the hyperbolic tangent to the data and inverts by applying the + inverse hyperbolic tangent. + The \xmlNode{tanhtransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{sigmoidtransformer}: + applies the sigmoid (expit) function to the data and inverts by applying + the logit function. + The \xmlNode{sigmoidtransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \end{itemize} + + \item \xmlNode{outtruncation}: + limits the data to either positive or negative values by "reflecting" the + out-of-range values back into the desired range. + The \xmlNode{outtruncation} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, + -- no description yet -- + \end{itemize} + \item \xmlNode{gaussianize}: + transforms the data into a normal distribution using quantile mapping. + The \xmlNode{gaussianize} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, + number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} + is greater than the number of data, then the number of data is used instead. \default{1000} + \end{itemize} + \item \xmlNode{quantiletransformer}: + transforms the data to fit a given distribution by mapping the data to a uniform + distribution and then to the desired distribution. + The \xmlNode{quantiletransformer} node recognizes the following parameters: + \begin{itemize} + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + indicates the variables for which this algorithm will be used for characterization. + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + sets a seed for the underlying random number generator, if present. + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + designates this algorithm to be used on full signal instead of per + segment. NOTE: because this is intended to be used when some algorithms are + applied segment-wise and others are applied globally, this is meant to be an + advanced feature and it is important to be mindful of the segments lengths. + E.g., some Fourier periods may be longer than the intended segment length, in + which case the this 'global' parameter should be set to True for better + fitting. \default{False} + \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, + number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} + is greater than the number of data, then the number of data is used instead. \default{1000} + \item \xmlAttr{outputDistribution}: \xmlDesc{[normal, uniform], optional}, + distribution to transform to. \default{normal} + \end{itemize} + \end{itemize} + \end{itemize} diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index ce17824534..b81fee4262 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -37,7 +37,22 @@ class cls. specifying input of cls. """ spec = super().getInputSpecification() - spec.description = r"""Class to specifically handle multi-resolution time series analysis training and evaluation.""" + spec.description = r"""A ROM for characterizing and generating synthetic histories using multi-resolution time + series analysis. This ROM, like the SyntheticHistory ROM, makes use of the algorithms within the TimeSeriesAnalysis (TSA) + module here in RAVEN. The available algorithms are discussed in more detail below. They can be classified as + characterizing, transforming, or generating algorithms. Given three algorithms in order $A_1$, $A_2$, and $A_3$, the + algorithms are applied to given signals as $A_1 \rightarrow A_2 \rightarrow A_3$ during the training step if the + algorithms are capable of characterizing or transforming the signal. In the generating step, so long as an inverse + operation for each algorithm exists, the algorithms are applied in reverse: $A_3^{-1} \rightarrow A_2^{-1} \rightarrow A_1^{-1}$. + This is the same process that the SyntheticHistory ROM performs. Where this ROM differs is that it can handle + multi-resolution decompositions of a signal. That is, some algorithms are capable of characterizing and splitting + a signal at different timescales to better learn the signal dynamics at those timescales. See the `filterbankdwt` + below for an example of such an algorithm. The MultiResolutionTSA particularly handles the combination of learned + characteristics and signal generation from the different decomposition levels. This ROM also requires a SegmentROM + node of the "decomposition" type (an example is given below for the XML input structure). + // + In order to use this Reduced Order Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs to be + \xmlString{MultiResolutionTSA}. It must also have a SegmentROM node of \xmlAttr{subType} \xmlString{decomposition}""" spec = SyntheticHistory.addTSASpecs(spec) return spec diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index 20cbdfd8eb..491db923e3 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -65,6 +65,7 @@ def getInputSpecification(cls): signal to multiple frequency levels. Given a wavelet family and the original signal, the signal is projected onto modifications of the original "mother" wavelet $\Psi$ to produce wavelet coefficients. The modifications $\psi_{a,b}$ happen in two ways: + \\ \begin{itemize} \item the wavelet is scaled by factor $a$ to capture features at different time scales (e.g., if the wavelet is "thinner" it better captures faster frequency features) @@ -73,6 +74,7 @@ def getInputSpecification(cls): \end{itemize} After all projections, there is a 2-D array of coefficients regarding the scale $a$ and shift $b$. The modified wavelets are given by: + \\ \begin{equation*} \psi_{a,b} = \frac{1}{\sqrt{a}} \Psi(\frac{t-b}{a}) \end{equation*} From 3ee4c119e874fc654e76dc65ffbe49552f4a0e45 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Thu, 3 Oct 2024 10:14:34 -0600 Subject: [PATCH 20/23] fixing some specs descriptions --- doc/user_manual/generated/internalRom.tex | 1206 +---------------- .../SupervisedLearning/MultiResolutionTSA.py | 4 +- 2 files changed, 21 insertions(+), 1189 deletions(-) diff --git a/doc/user_manual/generated/internalRom.tex b/doc/user_manual/generated/internalRom.tex index 5a6bf51e8a..8e791787bf 100644 --- a/doc/user_manual/generated/internalRom.tex +++ b/doc/user_manual/generated/internalRom.tex @@ -2806,7 +2806,25 @@ \subsubsection{SyntheticHistory} \subsubsection{MultiResolutionTSA} - Class to specifically handle multi-resolution time series analysis training and evaluation. + A ROM for characterizing and generating synthetic histories using multi-resolution time + series analysis. This ROM, like the SyntheticHistory ROM, makes use of the algorithms within the + TimeSeriesAnalysis (TSA) module here in RAVEN. The available algorithms are discussed in + more detail below. They can be categorized as characterizing, transforming, or generating + algorithms. Given three algorithms in order $A\_1$, $A\_2$, and $A\_3$, the algorithms are + applied to given signals as $A\_1 \rightarrow A\_2 \rightarrow A\_3$ during the training step if the + algorithms are capable of characterizing or transforming the signal. In the generating step, so + long as an inverse operator for each algorithm exists, the algorithms are applied in + reverse: $A\_3^{-1} \rightarrow A\_2^{-1} \rightarrow A\_1^{-1}$. This is the same process that + the SyntheticHistory ROM performs. Where this ROM differs is that it can handle multi- + resolution decompositions of a signal. That is, some algorithms are capable of characterizing and + splitting a signal at different timescales to better learn the signal dynamics at those + timescales. See the `filterbankdwt` below for an example of such an algorithm. The + MultiResolutionTSA particularly handles the combination of learned characteristics and + signal generation from the different decomposition levels. This ROM also requires a SegmentROM + node of the "decomposition" type (an example is given below for the XML input structure). // + In order to use this Reduced Order Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs to + be \xmlString{MultiResolutionTSA}. It must also have a SegmentROM node of \xmlAttr{subType} + \xmlString{decomposition} The \xmlNode{MultiResolutionTSA} node recognizes the following parameters: \begin{itemize} @@ -11113,1189 +11131,3 @@ \subsubsection{DMDBase} \default{True} \end{itemize} \end{itemize} - - -\subsubsection{Decomposition} - -- no description yet -- - - The \xmlNode{Decomposition} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, - User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, - Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, - specify the type of ROM that will be used - \end{itemize} - - The \xmlNode{Decomposition} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, - specifies the names of the features of this ROM. \nb These parameters are going to be - requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, - contains a comma separated list of the targets of this ROM. These parameters are the - Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are - going to be requested for the training of this object (see Section - \ref{subsec:stepRomTrainer}). - - \item \xmlNode{pivotParameter}: \xmlDesc{string}, - If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, - etc) used in the input HistorySet. - \default{time} - - \item \xmlNode{featureSelection}: - Apply feature selection algorithm - - The \xmlNode{featureSelection} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{RFE}: - The \xmlString{RFE} (Recursive Feature Elimination) is a feature selection algorithm. - Feature selection refers to techniques that select a subset of the most relevant features - for a model (ROM). Fewer features can allow ROMs to run more efficiently (less - space or time complexity) and be more effective. Indeed, some ROMs (machine - learning algorithms) can be misled by irrelevant input features, resulting in worse - predictive performance. RFE is a wrapper-type feature selection algorithm. This - means that a different ROM is given and used in the core of the method, is - wrapped by RFE, and used to help select features. \\RFE works by searching for a - subset of features by starting with all features in the training dataset and successfully - removing features until the desired number remains. This is achieved by - fitting the given ROM used in the core of the model, ranking features by importance, - discarding the least important features, and re-fitting the model. This process is - repeated until a specified number of features remains. When the full model - is created, a measure of variable importance is computed that ranks the predictors from - most important to least. At each stage of the search, the least important - predictors are iteratively eliminated prior to rebuilding the model. Features are - scored either using the ROM model (if the model provides a mean to compute feature - importances) or by using a statistical method. \\In RAVEN the - \xmlString{RFE} class refers to an augmentation of the basic algorithm, since it allows, - optionally, to perform the search on multiple groups of targets (separately) and - then combine the results of the search in a single set. In addition, when the RFE - search is concluded, the user can request to identify the set of features that - bring to a minimization of the score (i.e. maximimization of the accuracy). In - addition, using the ``applyClusteringFiltering'' option, the algorithm can, using an - hierarchal clustering algorithm, identify highly correlated features to speed up - the subsequential search. - The \xmlNode{RFE} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, - User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, - Desired verbosity of messages coming from this entity - \end{itemize} - - The \xmlNode{RFE} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, - List of IDs of features/variables to include in the search. - \default{None} - - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, - Which space to search? Target or Feature (this is temporary till DataSet training is - implemented) - \default{feature} - - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, - Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set - to $1/2$ of the features in the training dataset. - \default{None} - - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, - Maximum Number of features to select, the algorithm will automatically determine the - feature list to minimize a total score. - \default{None} - - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - If maxNumberFeatures is on, only output score should beconsidered? Or, in case of - particular models (e.g. DMDC), state variable space score should be considered as - well. - \default{False} - - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - Applying clustering correlation before RFE search? If true, an hierarchal clustering - is applied on the feature space aimed to remove features that are correlated - before the actual RFE search is performed. This approach can stabilize and - accelerate the process in case of large feature spaces (e.g > 500 features). - \default{False} - - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - In case of subgroupping, should a cross correleation analysis should be performed - cross sub-groups? If it is activated, a cross correleation analysis is used to - additionally filter the features selected for each sub-groupping search. - \default{False} - - \item \xmlNode{step}: \xmlDesc{float}, - If greater than or equal to 1, then step corresponds to the (integer) number - of features to remove at each iteration. If within (0.0, 1.0), then step - corresponds to the percentage (rounded down) of features to remove at each - iteration. - \default{1} - - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, - Subgroup of output variables on which to perform the search. Multiple nodes of this - type can be inputted. The RFE search will be then performed in each ``subgroup'' - separately and then the the union of the different feature sets are used for the final - ROM. - \end{itemize} - - \item \xmlNode{VarianceThreshold}: - The \xmlString{VarianceThreshold} is a feature selector that removes all low-variance - features. This feature selection algorithm looks only at the features and not the - desired outputs. The variance threshold can be set by the user. - The \xmlNode{VarianceThreshold} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, - User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, - Desired verbosity of messages coming from this entity - \end{itemize} - - The \xmlNode{VarianceThreshold} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, - List of IDs of features/variables to include in the search. - \default{None} - - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, - Which space to search? Target or Feature (this is temporary till DataSet training is - implemented) - \default{feature} - - \item \xmlNode{threshold}: \xmlDesc{float}, - Features with a training-set variance lower than this threshold will - be removed. The default is to keep all features with non-zero - variance, i.e. remove the features that have the same value in all - samples. - \default{0.0} - \end{itemize} - \end{itemize} - - \item \xmlNode{featureSpaceTransformation}: - Use dimensionality reduction technique to perform a trasformation of the training dataset - into an uncorrelated one. The dimensionality of the problem will not be reduced but - the data will be transformed in the transformed space. E.g if the number of features - are 5, the method projects such features into a new uncorrelated space (still 5-dimensional). - In case of time-dependent ROMs, all the samples are concatenated in a global 2D matrix - (n\_samples*n\_timesteps,n\_features) before applying the transformation and then reconstructed - back into the original shape (before fitting the model). - - The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, - Transformation method to use. Eight options (5 Kernel PCAs) are available: - \begin{itemize} \item \textit{PCA}, Principal Component Analysis; - \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; - \item \textit{KernelPolyPCA}, Kernel (Poly) Principal component analysis; - \item \textit{KernelRbfPCA}, Kernel(Rbf) Principal component analysis; - \item \textit{KernelSigmoidPCA}, Kernel (Sigmoid) Principal component analysis; - \item \textit{KernelCosinePCA}, Kernel (Cosine) Principal component analysis; - \item \textit{ICA}, Independent component analysis; \end{itemize} - \default{PCA} - - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, - List of IDs of features/variables to include in the transformation process. - \default{None} - - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, - Which space to search? Target or Feature? - \default{Feature} - \end{itemize} - - \item \xmlNode{CV}: \xmlDesc{string}, - The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with - \xmlAttr{subType} ``CrossValidation``. - The \xmlNode{CV} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, - should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, - should be set to \xmlString{PostProcessor} - \end{itemize} - - \item \xmlNode{alias}: \xmlDesc{string}, - specifies alias for any variable of interest in the input or output space. These - aliases can be used anywhere in the RAVEN input to refer to the variables. In the body - of this node the user specifies the name of the variable that the model is going to use - (during its execution). - The \xmlNode{alias} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, - define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, - either ``input'' or ``output''. - \end{itemize} - - \item \xmlNode{Segment}: - provides an alternative way to build the ROM. When - this mode is enabled, the subspace of the ROM (e.g. ``time'') will be divided into segments as - requested, then a distinct ROM will be trained on each of the segments. This is especially - helpful if during the subspace the ROM - representation of the signal changes significantly. For example, if the signal - is different during summer and winter, then a signal can be divided and a distinct ROM trained - on the segments. By default, no segmentation - occurs. - The \xmlNode{Segment} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{grouping}: \xmlDesc{[decomposition], optional}, - enables the use of ROM subspace clustering in addition to segmenting if set to - \xmlString{cluster}. If set to \xmlString{segment}, then performs segmentation - without clustering. If clustering, then an additional node needs to be included in the - \xmlNode{Segment} node. \default{decomposition} - \end{itemize} - - The \xmlNode{Segment} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{macroParameter}: \xmlDesc{string}, - pivot parameter for macro steps (e.g. years) - - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, - specifies the names of the features of this ROM. \nb These parameters are going to - be requested for the training of this object (see - Section~\ref{subsec:stepRomTrainer}) - - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, - contains a comma separated list of the targets of this ROM. These parameters are - the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters - are going to be requested for the training of this object (see Section - \ref{subsec:stepRomTrainer}). - - \item \xmlNode{pivotParameter}: \xmlDesc{string}, - If a time-dependent ROM is requested, please specifies the pivot variable (e.g. - time, etc) used in the input HistorySet. - \default{time} - - \item \xmlNode{featureSelection}: - Apply feature selection algorithm - - The \xmlNode{featureSelection} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{RFE}: - The \xmlString{RFE} (Recursive Feature Elimination) is a feature selection algorithm. - Feature selection refers to techniques that select a subset of the most relevant - features for a model (ROM). Fewer features can allow ROMs to run more - efficiently (less space or time complexity) and be more effective. Indeed, - some ROMs (machine learning algorithms) can be misled by irrelevant input features, - resulting in worse predictive performance. RFE is a wrapper-type - feature selection algorithm. This means that a different ROM is given and used in the - core of the method, is wrapped by RFE, and used to help select - features. \\RFE works by searching for a subset of features by starting with - all features in the training dataset and successfully removing - features until the desired number remains. This is achieved by fitting the - given ROM used in the core of the model, ranking features by importance, - discarding the least important features, and re-fitting the model. This process is - repeated until a specified number of features remains. When the full - model is created, a measure of variable importance is computed that ranks the - predictors from most important to least. At each stage of the search, - the least important predictors are iteratively eliminated prior to rebuilding the - model. Features are scored either using the ROM model (if the model provides a - mean to compute feature importances) or by using a statistical method. - \\In RAVEN the \xmlString{RFE} class refers to an augmentation of the basic algorithm, - since it allows, optionally, to perform the search on multiple groups of - targets (separately) and then combine the results of the search in a single - set. In addition, when the RFE search is concluded, the user can request to identify - the set of features that bring to a minimization of the score (i.e. - maximimization of the accuracy). In addition, using the - ``applyClusteringFiltering'' option, the algorithm can, using an hierarchal clustering - algorithm, identify highly correlated features to speed up the subsequential - search. - The \xmlNode{RFE} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, - User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, - Desired verbosity of messages coming from this entity - \end{itemize} - - The \xmlNode{RFE} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, - List of IDs of features/variables to include in the search. - \default{None} - - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, - Which space to search? Target or Feature (this is temporary till DataSet training - is implemented) - \default{feature} - - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, - Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be - set to $1/2$ of the features in the training dataset. - \default{None} - - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, - Maximum Number of features to select, the algorithm will automatically determine - the feature list to minimize a total score. - \default{None} - - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - If maxNumberFeatures is on, only output score should beconsidered? Or, in case of - particular models (e.g. DMDC), state variable space score should be considered as - well. - \default{False} - - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - Applying clustering correlation before RFE search? If true, an hierarchal - clustering is applied on the feature space aimed to remove features that - are correlated before the actual RFE search is performed. This approach can - stabilize and accelerate the process in case of large feature spaces (e.g - > 500 features). - \default{False} - - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - In case of subgroupping, should a cross correleation analysis should be performed - cross sub-groups? If it is activated, a cross correleation analysis is - used to additionally filter the features selected for each sub-groupping - search. - \default{False} - - \item \xmlNode{step}: \xmlDesc{float}, - If greater than or equal to 1, then step corresponds to the (integer) number - of features to remove at each iteration. If within (0.0, 1.0), then step - corresponds to the percentage (rounded down) of features to remove at each - iteration. - \default{1} - - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, - Subgroup of output variables on which to perform the search. Multiple nodes of - this type can be inputted. The RFE search will be then performed in each - ``subgroup'' separately and then the the union of the different feature sets are - used for the final ROM. - \end{itemize} - - \item \xmlNode{VarianceThreshold}: - The \xmlString{VarianceThreshold} is a feature selector that removes all low- - variance features. This feature selection algorithm looks only at the features and not - the desired outputs. The variance threshold can be set by the user. - The \xmlNode{VarianceThreshold} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, - User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, - Desired verbosity of messages coming from this entity - \end{itemize} - - The \xmlNode{VarianceThreshold} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, - List of IDs of features/variables to include in the search. - \default{None} - - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, - Which space to search? Target or Feature (this is temporary till DataSet training - is implemented) - \default{feature} - - \item \xmlNode{threshold}: \xmlDesc{float}, - Features with a training-set variance lower than this threshold - will be removed. The default is to keep all features with non-zero - variance, i.e. remove the features that have the same value in all - samples. - \default{0.0} - \end{itemize} - \end{itemize} - - \item \xmlNode{featureSpaceTransformation}: - Use dimensionality reduction technique to perform a trasformation of the training dataset - into an uncorrelated one. The dimensionality of the problem will not be reduced but - the data will be transformed in the transformed space. E.g if the number of features - are 5, the method projects such features into a new uncorrelated space (still - 5-dimensional). In case of time- - dependent ROMs, all the samples are concatenated in a global 2D matrix - (n\_samples*n\_timesteps,n\_features) before applying the transformation and then - reconstructed back into the original - shape (before fitting the model). - - The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, - Transformation method to use. Eight options (5 Kernel PCAs) are available: - \begin{itemize} \item \textit{PCA}, Principal Component Analysis; - \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; - \item \textit{KernelPolyPCA}, Kernel (Poly) Principal component analysis; - \item \textit{KernelRbfPCA}, Kernel(Rbf) Principal component analysis; - \item \textit{KernelSigmoidPCA}, Kernel (Sigmoid) Principal component analysis; - \item \textit{KernelCosinePCA}, Kernel (Cosine) Principal component analysis; - \item \textit{ICA}, Independent component analysis; \end{itemize} - \default{PCA} - - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, - List of IDs of features/variables to include in the transformation process. - \default{None} - - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, - Which space to search? Target or Feature? - \default{Feature} - \end{itemize} - - \item \xmlNode{CV}: \xmlDesc{string}, - The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} - with \xmlAttr{subType} ``CrossValidation``. - The \xmlNode{CV} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, - should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, - should be set to \xmlString{PostProcessor} - \end{itemize} - - \item \xmlNode{alias}: \xmlDesc{string}, - specifies alias for any variable of interest in the input or output space. These - aliases can be used anywhere in the RAVEN input to refer to the variables. In the - body of this node the user specifies the name of the variable that the model is going to - use (during its execution). - The \xmlNode{alias} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, - define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, - either ``input'' or ``output''. - \end{itemize} - - \item \xmlNode{pivotParameter}: \xmlDesc{string}, - If a time-dependent ROM is requested, please specifies the pivot variable (e.g. - time, etc) used in the input HistorySet. - \default{time} - - \item \xmlNode{fourier}: - TimeSeriesAnalysis algorithm for determining the strength and phase of - specified Fourier periods within training signals. The Fourier signals take - the form $C\sin(\frac{2\pi}{k}+\phi)$, where $C$ is the calculated strength - or amplitude, $k$ is the user-specified period(s) to search for, and $\phi$ - is the calculated phase shift. The resulting characterization and synthetic - history generation is deterministic given a single training signal. - The \xmlNode{fourier} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{fourier} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{periods}: \xmlDesc{comma-separated floats}, - Specifies the periods (inverse of frequencies) that should be searched - for within the training signal. - \end{itemize} - - \item \xmlNode{arma}: - characterizes the signal using Auto-Regressive and Moving Average coefficients to - stochastically fit the training signal. 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 ARMA algorithms are developed in RAVEN using - the \texttt{statsmodels} Python library. - The \xmlNode{arma} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \item \xmlAttr{reduce\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - activates a lower memory usage ARMA training. This does tend to result - in a slightly slower training time, at the benefit of lower memory usage. For - example, in one 1000-length history test, low memory reduced memory usage by 2.3 - MiB, but increased training time by 0.4 seconds. No change in results has been - observed switching between modes. Note that the ARMA must be - retrained to change this property; it cannot be applied to serialized ARMAs. \default{False} - \item \xmlAttr{gaussianize}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - activates a transformation of the signal to a normal distribution before - training. This is done by fitting a CDF to the data and then transforming the - data to a normal distribution using the CDF. The CDF is saved and used during - sampling to back-transform the data to the original distribution. This is - recommended for non-normal data, but is not required. Note that the ARMA must be - retrained to change this property; it cannot be applied to serialized ARMAs. - Note: New models wishing to apply this transformation should use a - \xmlNode{gaussianize} node preceding the \xmlNode{arma} node instead of this - option. \default{False} - \item \xmlAttr{auto\_select}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - 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} - \end{itemize} - - The \xmlNode{arma} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{P}: \xmlDesc{comma-separated integers}, - 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. - - \item \xmlNode{Q}: \xmlDesc{comma-separated integers}, - 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. - \end{itemize} - - \item \xmlNode{varma}: - characterizes the vector-valued signal using Auto-Regressive and Moving Average - coefficients to stochastically fit the training signal. The VARMA 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. For signal $A\_t$ which is a $k - \times 1$ vector, each $\phi\_i$ and $\theta\_j$ are $k \times k$ matrices, and - $\epsilon\_t$ is characterized by the $k \times k$ covariance matrix $\Sigma$. The - VARMA algorithms are developed in RAVEN using the \texttt{statsmodels} Python - library. - The \xmlNode{varma} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{varma} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{P}: \xmlDesc{integer}, - the number of terms in the AutoRegressive term to retain in the - regression; typically represented as $P$ in literature. - - \item \xmlNode{Q}: \xmlDesc{integer}, - the number of terms in the Moving Average term to retain in the - regression; typically represented as $Q$ in literature. - \end{itemize} - - \item \xmlNode{MarkovAR}: - characterizes the signal using autoregressive (AR) coefficients conditioned on the - state of a hidden Markov model (HMM) to stochastically fit the training signal. - The Markov-switching autoregressive model (MSAR) has the following form: - \begin{equation*} Y\_t = \mu_{S\_t} \sum_{i=1}^p \phi_{i,{S\_t}} \left(Y_{t-i} - - \mu_{S_{t-i}}\right) + \varepsilon_{t,{S\_t}}, \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, $\varepsilon$ is a random - noise term with mean 0 and variance $\sigma^2_{S\_t}$, and $S\_t$ is the HMM state - at time $t$. The HMM state is determined by the transition probabilities between - states, which are conditioned on the previous state. The transition probabilities - are stored in a transition matrix $P$, where entry $p_{ij}$ is the probability of - transitioning from state $i$ to state $j$ conditional on being in state $i$. For a - MSAR model with HMM state dimensionality $r$, the transition matrix $P$ is of size - $r \times r$. Each of the mean, autoregressive, and noise variance terms may be - switching or non-switching parameters. - The \xmlNode{MarkovAR} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \item \xmlAttr{switching\_ar}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - indicates whether the autoregressive coefficients are switching parameters. \default{True} - \item \xmlAttr{switching\_variance}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - indicates whether the noise variance is a switching parameter. \default{True} - \item \xmlAttr{switching\_trend}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - indicates whether the mean is a switching parameter. \default{True} - \end{itemize} - - The \xmlNode{MarkovAR} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{P}: \xmlDesc{integer}, - the number of terms in the AutoRegressive term to retain in the - regression; typically represented as $P$ in literature. - - \item \xmlNode{MarkovStates}: \xmlDesc{integer}, - the number of states in the hidden Markov model. - \end{itemize} - - \item \xmlNode{STL}: - Decomposes the signal into trend, seasonal, and residual components using the STL method - of Cleveland et al. (1990). - The \xmlNode{STL} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{STL} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{seasonal}: \xmlDesc{integer}, - the length of the seasonal smoother. - - \item \xmlNode{period}: \xmlDesc{integer}, - periodicity of the sequence. - - \item \xmlNode{trend}: \xmlDesc{integer}, - the length of the trend smoother. Must be an odd integer. - \end{itemize} - - \item \xmlNode{wavelet}: - Discrete Wavelet TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform - on time-dependent data. Note: This TSA module requires pywavelets to be installed within - your python environment. - The \xmlNode{wavelet} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{wavelet} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{family}: \xmlDesc{string}, - The type of wavelet to use for the transformation. There are several possible - families to choose from, and most families contain more than one variation. For - more information regarding the wavelet families, refer to the Pywavelets - documentation located at: - https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) - \\ Possible values are: \begin{itemize} \item \textbf{haar family}: haar - \item \textbf{db family}: db1, db2, db3, db4, db5, db6, db7, db8, db9, db10, db11, - db12, db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, db23, db24, - db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, db36, db37, - db38 \item \textbf{sym family}: sym2, sym3, sym4, sym5, sym6, sym7, sym8, sym9, - sym10, sym11, sym12, sym13, sym14, sym15, sym16, sym17, sym18, sym19, sym20 - \item \textbf{coif family}: coif1, coif2, coif3, coif4, coif5, coif6, coif7, coif8, - coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17 \item - \textbf{bior family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, - bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, - bior6.8 \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, rbio2.2, rbio2.4, - rbio2.6, rbio2.8, rbio3.1, rbio3.3, rbio3.5, rbio3.7, rbio3.9, rbio4.4, - rbio5.5, rbio6.8 \item \textbf{dmey family}: dmey \item - \textbf{gaus family}: gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 - \item \textbf{mexh family}: mexh \item \textbf{morl family}: morl \item - \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 - \item \textbf{shan family}: shan \item \textbf{fbsp family}: fbsp \item - \textbf{cmor family}: cmor \end{itemize} - \end{itemize} - - \item \xmlNode{PolynomialRegression}: - fits time-series data using a polynomial function of degree one or greater. - The \xmlNode{PolynomialRegression} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{PolynomialRegression} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{degree}: \xmlDesc{integer}, - Specifies the degree polynomial to fit the data with. - \end{itemize} - - \item \xmlNode{autoarma}: - 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. - The \xmlNode{autoarma} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{autoarma} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{P\_upper}: \xmlDesc{integer}, - 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. - - \item \xmlNode{Q\_upper}: \xmlDesc{integer}, - 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. - - \item \xmlNode{criterion}: \xmlDesc{[aic, aicc, bic]}, - 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`. - - \item \xmlNode{use\_approximation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, - 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. - \end{itemize} - - \item \xmlNode{rwd}: - TimeSeriesAnalysis algorithm for sliding window snapshots to generate features - The \xmlNode{rwd} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{rwd} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{signatureWindowLength}: \xmlDesc{integer}, - the size of signature window, which represents as a snapshot for a certain time step; - typically represented as $w$ in literature, or $w\_sig$ in the code. - - \item \xmlNode{featureIndex}: \xmlDesc{integer}, - Index used for feature selection, which requires pre-analysis for now, will be - addresses via other non human work required method - - \item \xmlNode{sampleType}: \xmlDesc{integer}, - Indicating the type of sampling. - - \item \xmlNode{seed}: \xmlDesc{integer}, - Indicating random seed. - \end{itemize} - - \item \xmlNode{maxabsscaler}: - scales the data to the interval $[-1, 1]$. This is done by dividing by the largest - absolute value of the data. - The \xmlNode{maxabsscaler} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{minmaxscaler}: - scales the data to the interval $[0, 1]$. This is done by subtracting the - minimum value from each point and dividing by the range. - The \xmlNode{minmaxscaler} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{robustscaler}: - centers and scales the data by subtracting the median and dividing by the - interquartile range. - The \xmlNode{robustscaler} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{standardscaler}: - centers and scales the data by subtracting the mean and dividing by the standard - deviation. - The \xmlNode{standardscaler} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{preserveCDF}: - forces generated data provided to the inverse transformation function to - have the same CDF as the original data through quantile mapping. If this - transformer is used as part of a SyntheticHistory ROM, it should likely - be used as the first transformer in the chain. - The \xmlNode{preserveCDF} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{differencing}: - applies Nth order differencing to the data. - The \xmlNode{differencing} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{differencing} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{order}: \xmlDesc{integer}, - differencing order. - \end{itemize} - - \item \xmlNode{filterbankdwt}: - Filter Bank Discrete Wavelet Transform, a multi-resolution-capable TimeSeriesAnalysis - algorithm. Performs a discrete wavelet transform (DWT) on time-dependent data as a filter - bank to decompose the signal to multiple frequency levels. Given a wavelet family - and the original signal, the signal is projected onto modifications of the - original "mother" wavelet $\Psi$ to produce wavelet coefficients. The modifications - $\psi_{a,b}$ happen in two ways: \\ \begin{itemize} \item the - wavelet is scaled by factor $a$ to capture features at different time scales (e.g., if the - wavelet is "thinner" it better captures faster frequency features) - \item the wavelet is shifted in time by factor $b$ across the entire time domain of the - signal for each scale $a$ \end{itemize} After all projections, - there is a 2-D array of coefficients regarding the scale $a$ and shift $b$. The modified - wavelets are given by: \\ \begin{equation*} \psi_{a,b} = - \frac{1}{\sqrt{a}} \Psi(\frac{t-b}{a}) \end{equation*} The Filter Bank DWT - works in a cascading sequence of low- and high-pass filters for all requested - decomposition levels to create the wavelet coefficients. The low- and high-pass - filters create a set of approximation and detail coefficients, respectively, for - each scale. Approximation coefficients correspond to lower frequency/large - wavelength features; detail cofficients, to higher frequency/smaller wavelength features. - Subsequent decompositions apply the filters to the previous approximation coefficients. - For N levels of decomposition, N sets of detail coefficients and 1 set of - approximation coefficients are produced. Currently, the approximation coefficients - are treated as a trend in the signal and subtracted from the signal. Note: This - TSA module requires pywavelets to be installed within your python environment. - The \xmlNode{filterbankdwt} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - The \xmlNode{filterbankdwt} node recognizes the following subnodes: - \begin{itemize} - \item \xmlNode{family}: \xmlDesc{string}, - The type of wavelet to use for the transformation. There are - several possible families to choose from, and most families contain - more than one variation. For more information regarding the wavelet families, - refer to the Pywavelets documentation located at: - https://pywavelets.readthedocs.io/en/latest/ref/wavelets.html (wavelet-families) - \\ Possible values are: \begin{itemize} - \item \textbf{haar family}: haar \item \textbf{db family}: db1, - db2, db3, db4, db5, db6, db7, db8, db9, db10, db11, db12, - db13, db14, db15, db16, db17, db18, db19, db20, db21, db22, db23, - db24, db25, db26, db27, db28, db29, db30, db31, db32, db33, db34, db35, - db36, db37, db38 \item \textbf{sym family}: sym2, sym3, sym4, - sym5, sym6, sym7, sym8, sym9, sym10, sym11, sym12, sym13, - sym14, sym15, sym16, sym17, sym18, sym19, sym20 \item - \textbf{coif family}: coif1, coif2, coif3, coif4, coif5, coif6, coif7, coif8, - coif9, coif10, coif11, coif12, coif13, coif14, coif15, coif16, coif17 - \item \textbf{bior family}: bior1.1, bior1.3, bior1.5, bior2.2, bior2.4, bior2.6, - bior2.8, bior3.1, bior3.3, bior3.5, bior3.7, bior3.9, bior4.4, bior5.5, - bior6.8 \item \textbf{rbio family}: rbio1.1, rbio1.3, rbio1.5, - rbio2.2, rbio2.4, rbio2.6, rbio2.8, rbio3.1, rbio3.3, rbio3.5, - rbio3.7, rbio3.9, rbio4.4, rbio5.5, rbio6.8 - \item \textbf{dmey family}: dmey \item \textbf{gaus family}: - gaus1, gaus2, gaus3, gaus4, gaus5, gaus6, gaus7, gaus8 \item - \textbf{mexh family}: mexh \item \textbf{morl family}: morl - \item \textbf{cgau family}: cgau1, cgau2, cgau3, cgau4, cgau5, cgau6, cgau7, cgau8 - \item \textbf{shan family}: shan \item \textbf{fbsp family}: - fbsp \item \textbf{cmor family}: cmor - \end{itemize} - - \item \xmlNode{levels}: \xmlDesc{integer}, - the number of wavelet decomposition levels for requested for the signal. This is - equivalent to the number of sets of detail coefficients produced. - Note that there will always be one set of approximation - cofficients produced, which is treated as a trend in the signal. Note that there is a - maximum decomposition level depending on signal length and the chosen wavelet family: - if desired level is larger than the maximum decomposition level, - the latter will be used. Provided level must be nonzero. - \end{itemize} - - \item \xmlNode{zerofilter}: - masks values that are near zero. The masked values are replaced with NaN values. - Caution should be used when using this algorithm because not all algorithms can handle - NaN values! A warning will be issued if NaN values are detected in the input of an - algorithm that does not support them. - The \xmlNode{zerofilter} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{logtransformer}: - applies the natural logarithm to the data and inverts by applying the - exponential function. - The \xmlNode{logtransformer} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{arcsinhtransformer}: - applies the inverse hyperbolic sine to the data and inverts by applying - the hyperbolic sine. - The \xmlNode{arcsinhtransformer} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{tanhtransformer}: - applies the hyperbolic tangent to the data and inverts by applying the - inverse hyperbolic tangent. - The \xmlNode{tanhtransformer} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{sigmoidtransformer}: - applies the sigmoid (expit) function to the data and inverts by applying - the logit function. - The \xmlNode{sigmoidtransformer} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \end{itemize} - - \item \xmlNode{outtruncation}: - limits the data to either positive or negative values by "reflecting" the - out-of-range values back into the desired range. - The \xmlNode{outtruncation} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, - -- no description yet -- - \end{itemize} - - \item \xmlNode{gaussianize}: - transforms the data into a normal distribution using quantile mapping. - The \xmlNode{gaussianize} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, - number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} - is greater than the number of data, then the number of data is used instead. \default{1000} - \end{itemize} - - \item \xmlNode{quantiletransformer}: - transforms the data to fit a given distribution by mapping the data to a uniform - distribution and then to the desired distribution. - The \xmlNode{quantiletransformer} node recognizes the following parameters: - \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, - indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, - sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, - designates this algorithm to be used on full signal instead of per - segment. NOTE: because this is intended to be used when some algorithms are - applied segment-wise and others are applied globally, this is meant to be an - advanced feature and it is important to be mindful of the segments lengths. - E.g., some Fourier periods may be longer than the intended segment length, in - which case the this 'global' parameter should be set to True for better - fitting. \default{False} - \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, - number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} - is greater than the number of data, then the number of data is used instead. \default{1000} - \item \xmlAttr{outputDistribution}: \xmlDesc{[normal, uniform], optional}, - distribution to transform to. \default{normal} - \end{itemize} - \end{itemize} - \end{itemize} diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index b81fee4262..c769508ad7 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -39,11 +39,11 @@ class cls. spec = super().getInputSpecification() spec.description = r"""A ROM for characterizing and generating synthetic histories using multi-resolution time series analysis. This ROM, like the SyntheticHistory ROM, makes use of the algorithms within the TimeSeriesAnalysis (TSA) - module here in RAVEN. The available algorithms are discussed in more detail below. They can be classified as + module here in RAVEN. The available algorithms are discussed in more detail below. They can be categorized as characterizing, transforming, or generating algorithms. Given three algorithms in order $A_1$, $A_2$, and $A_3$, the algorithms are applied to given signals as $A_1 \rightarrow A_2 \rightarrow A_3$ during the training step if the algorithms are capable of characterizing or transforming the signal. In the generating step, so long as an inverse - operation for each algorithm exists, the algorithms are applied in reverse: $A_3^{-1} \rightarrow A_2^{-1} \rightarrow A_1^{-1}$. + operator for each algorithm exists, the algorithms are applied in reverse: $A_3^{-1} \rightarrow A_2^{-1} \rightarrow A_1^{-1}$. This is the same process that the SyntheticHistory ROM performs. Where this ROM differs is that it can handle multi-resolution decompositions of a signal. That is, some algorithms are capable of characterizing and splitting a signal at different timescales to better learn the signal dynamics at those timescales. See the `filterbankdwt` From e1a1504d517db1f2e4a4128b0c203c3295e4c4a1 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Sat, 5 Oct 2024 11:25:26 -0600 Subject: [PATCH 21/23] fixing a doc script error --- doc/user_manual/Makefile | 1 + doc/user_manual/make_win.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/doc/user_manual/Makefile b/doc/user_manual/Makefile index e88c296a30..3ea407ab72 100644 --- a/doc/user_manual/Makefile +++ b/doc/user_manual/Makefile @@ -15,6 +15,7 @@ raven_user_manual.pdf: $(MANUAL_FILES) ../version.tex conda_command.txt pip_comm bibtex $(SRCFILE) pdflatex $(LATEX_FLAGS) $(SRCFILE).tex pdflatex $(LATEX_FLAGS) $(SRCFILE).tex + echo 'File generated' draft: $(MANUAL_FILES) ../version.tex conda_command.txt pip_commands.txt pdflatex $(LATEX_FLAGS) "\def\DRAFT{1}\input{$(SRCFILE).tex}" diff --git a/doc/user_manual/make_win.sh b/doc/user_manual/make_win.sh index 9fac4a08fd..7b83eb5d69 100644 --- a/doc/user_manual/make_win.sh +++ b/doc/user_manual/make_win.sh @@ -31,6 +31,7 @@ gen_files () { bibtex $file pdflatex -interaction=nonstopmode $file.tex pdflatex -interaction=nonstopmode $file.tex + echo 'File generated' done } From e0d5713de61c382467b09d162ba4fd3de211d4d5 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Mon, 14 Oct 2024 15:05:46 -0600 Subject: [PATCH 22/23] removing echo statements, fixing UTF8 encoding erros in internalROM tex --- doc/user_manual/Makefile | 1 - doc/user_manual/generated/internalRom.tex | 2782 ++++++++--------- doc/user_manual/make_win.sh | 1 - .../SupervisedLearning/MultiResolutionTSA.py | 4 +- .../TSA/Transformers/FilterBankDWT.py | 4 +- 5 files changed, 1395 insertions(+), 1397 deletions(-) diff --git a/doc/user_manual/Makefile b/doc/user_manual/Makefile index 3ea407ab72..e88c296a30 100644 --- a/doc/user_manual/Makefile +++ b/doc/user_manual/Makefile @@ -15,7 +15,6 @@ raven_user_manual.pdf: $(MANUAL_FILES) ../version.tex conda_command.txt pip_comm bibtex $(SRCFILE) pdflatex $(LATEX_FLAGS) $(SRCFILE).tex pdflatex $(LATEX_FLAGS) $(SRCFILE).tex - echo 'File generated' draft: $(MANUAL_FILES) ../version.tex conda_command.txt pip_commands.txt pdflatex $(LATEX_FLAGS) "\def\DRAFT{1}\input{$(SRCFILE).tex}" diff --git a/doc/user_manual/generated/internalRom.tex b/doc/user_manual/generated/internalRom.tex index 8e791787bf..89b1637131 100644 --- a/doc/user_manual/generated/internalRom.tex +++ b/doc/user_manual/generated/internalRom.tex @@ -17,27 +17,27 @@ \subsubsection{NDspline} The \xmlNode{NDspline} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{NDspline} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -76,60 +76,60 @@ \subsubsection{NDspline} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -142,24 +142,24 @@ \subsubsection{NDspline} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -179,7 +179,7 @@ \subsubsection{NDspline} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -190,36 +190,36 @@ \subsubsection{NDspline} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} \end{itemize} @@ -258,27 +258,27 @@ \subsubsection{pickledROM} The \xmlNode{pickledROM} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{pickledROM} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -317,60 +317,60 @@ \subsubsection{pickledROM} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -383,24 +383,24 @@ \subsubsection{pickledROM} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -420,7 +420,7 @@ \subsubsection{pickledROM} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -431,46 +431,46 @@ \subsubsection{pickledROM} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{seed}: \xmlDesc{integer}, + \item \xmlNode{seed}: \xmlDesc{integer}, provides seed for VARMA and ARMA sampling. Must be provided before training. If no seed is assigned, then a random number will be used. \default{None} - \item \xmlNode{Multicycle}: \xmlDesc{string}, + \item \xmlNode{Multicycle}: \xmlDesc{string}, indicates that each sample of the ARMA should yield multiple sequential samples. For example, if an ARMA model is trained to produce a year's worth of data, enabling @@ -485,11 +485,11 @@ \subsubsection{pickledROM} The \xmlNode{Multicycle} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{cycles}: \xmlDesc{integer}, + \item \xmlNode{cycles}: \xmlDesc{integer}, the number of cycles the ARMA should produce each time it yields a sample. - \item \xmlNode{growth}: \xmlDesc{float}, + \item \xmlNode{growth}: \xmlDesc{float}, if provided then the histories produced by the ARMA will be increased by the growth factor for successive cycles. This node can be added multiple times with different @@ -510,14 +510,14 @@ \subsubsection{pickledROM} \default{None} The \xmlNode{growth} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{targets}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{targets}: \xmlDesc{comma-separated strings, required}, lists the targets in this ARMA that this growth factor should apply to. - \item \xmlAttr{start\_index}: \xmlDesc{integer, optional}, + \item \xmlAttr{start\_index}: \xmlDesc{integer, optional}, -- no description yet -- - \item \xmlAttr{end\_index}: \xmlDesc{integer, optional}, + \item \xmlAttr{end\_index}: \xmlDesc{integer, optional}, -- no description yet -- - \item \xmlAttr{mode}: \xmlDesc{[exponential, linear], required}, + \item \xmlAttr{mode}: \xmlDesc{[exponential, linear], required}, either \xmlString{linear} or \xmlString{exponential}, determines the manner in which the growth factor is applied. If \xmlString{linear}, then the scaling factor is $(1+y\cdot g/100)$; @@ -526,13 +526,13 @@ \subsubsection{pickledROM} \end{itemize} \end{itemize} - \item \xmlNode{clusterEvalMode}: \xmlDesc{[clustered, truncated, full]}, + \item \xmlNode{clusterEvalMode}: \xmlDesc{[clustered, truncated, full]}, changes the structure of the samples for Clustered Segmented ROMs. These are identical to the options for \xmlNode{evalMode} node under \xmlNode{Segmented} \default{None} - \item \xmlNode{maxCycles}: \xmlDesc{integer}, + \item \xmlNode{maxCycles}: \xmlDesc{integer}, maximum number of cycles to run (default no limit) \default{None} \end{itemize} @@ -604,27 +604,27 @@ \subsubsection{GaussPolynomialRom} The \xmlNode{GaussPolynomialRom} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{GaussPolynomialRom} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -663,60 +663,60 @@ \subsubsection{GaussPolynomialRom} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -729,24 +729,24 @@ \subsubsection{GaussPolynomialRom} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -766,7 +766,7 @@ \subsubsection{GaussPolynomialRom} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -777,29 +777,29 @@ \subsubsection{GaussPolynomialRom} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{IndexSet}: \xmlDesc{[TensorProduct, TotalDegree, HyperbolicCross, Custom]}, + \item \xmlNode{IndexSet}: \xmlDesc{[TensorProduct, TotalDegree, HyperbolicCross, Custom]}, specifies the rules by which to construct multidimensional polynomials. The options are \xmlString{TensorProduct}, \xmlString{TotalDegree},\\ \xmlString{HyperbolicCross}, and \xmlString{Custom}. @@ -808,19 +808,19 @@ \subsubsection{GaussPolynomialRom} for low-regularity input spaces. If \xmlString{Custom} is chosen, the \xmlNode{IndexPoints} is required. - \item \xmlNode{PolynomialOrder}: \xmlDesc{integer}, + \item \xmlNode{PolynomialOrder}: \xmlDesc{integer}, indicates the maximum polynomial order in any one dimension to use in the polynomial chaos expansion. \nb If non-equal importance weights are supplied in the optional \xmlNode{Interpolation} node, the actual polynomial order in dimensions with high importance might exceed this value; however, this value is still used to limit the relative overall order. - \item \xmlNode{SparseGrid}: \xmlDesc{[smolyak, tensor]}, + \item \xmlNode{SparseGrid}: \xmlDesc{[smolyak, tensor]}, allows specification of the multidimensional quadrature construction strategy. Options are \xmlString{smolyak} and \xmlString{tensor}. \default{smolyak} - \item \xmlNode{IndexPoints}: \xmlDesc{comma-separated list of comma separated integer tuples}, + \item \xmlNode{IndexPoints}: \xmlDesc{comma-separated list of comma separated integer tuples}, used to specify the index set points in a \xmlString{Custom} index set. The tuples are entered as comma-separated values between parenthesis, with each tuple separated by a comma. Any amount of whitespace is acceptable. For example, @@ -829,14 +829,14 @@ \subsubsection{GaussPolynomialRom} guarantee accurate convergence.} \default{None} - \item \xmlNode{Interpolation}: \xmlDesc{string}, + \item \xmlNode{Interpolation}: \xmlDesc{string}, offers the option to specify quadrature, polynomials, and importance weights for the given variable name. The ROM accepts any number of \xmlNode{Interpolation} nodes up to the dimensionality of the input space. \default{None} The \xmlNode{Interpolation} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{quad}: \xmlDesc{string, optional}, + \item \xmlAttr{quad}: \xmlDesc{string, optional}, specifies the quadrature type to use for collocation in this dimension. The default options depend on the uncertainty distribution of the input dimension, as shown in Table \ref{tab:gpcCompatible}. Additionally, Clenshaw @@ -849,13 +849,13 @@ \subsubsection{GaussPolynomialRom} than the four listed, but are viable choices. Choosing polynomial type Legendre for any non-uniform distribution will enable this formulation automatically. - \item \xmlAttr{poly}: \xmlDesc{string, optional}, + \item \xmlAttr{poly}: \xmlDesc{string, optional}, specifies the interpolating polynomial family to use for the polynomial expansion in this dimension. The default options depend on the quadrature type chosen, as shown in Table \ref{tab:gpcCompatible}. Currently, no polynomials are available outside the default. \default{see Table \ref{tab:gpcCompatible}.} - \item \xmlAttr{weight}: \xmlDesc{float, optional}, + \item \xmlAttr{weight}: \xmlDesc{float, optional}, delineates the importance weighting of this dimension. A larger importance weight will result in increased resolution for this dimension at the cost of resolution in lower- weighted dimensions. The algorithm normalizes weights at run-time. \default{1} @@ -929,27 +929,27 @@ \subsubsection{HDMRRom} The \xmlNode{HDMRRom} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{HDMRRom} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -988,60 +988,60 @@ \subsubsection{HDMRRom} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -1054,24 +1054,24 @@ \subsubsection{HDMRRom} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -1091,7 +1091,7 @@ \subsubsection{HDMRRom} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -1102,29 +1102,29 @@ \subsubsection{HDMRRom} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{IndexSet}: \xmlDesc{[TensorProduct, TotalDegree, HyperbolicCross, Custom]}, + \item \xmlNode{IndexSet}: \xmlDesc{[TensorProduct, TotalDegree, HyperbolicCross, Custom]}, specifies the rules by which to construct multidimensional polynomials. The options are \xmlString{TensorProduct}, \xmlString{TotalDegree},\\ \xmlString{HyperbolicCross}, and \xmlString{Custom}. @@ -1133,19 +1133,19 @@ \subsubsection{HDMRRom} for low-regularity input spaces. If \xmlString{Custom} is chosen, the \xmlNode{IndexPoints} is required. - \item \xmlNode{PolynomialOrder}: \xmlDesc{integer}, + \item \xmlNode{PolynomialOrder}: \xmlDesc{integer}, indicates the maximum polynomial order in any one dimension to use in the polynomial chaos expansion. \nb If non-equal importance weights are supplied in the optional \xmlNode{Interpolation} node, the actual polynomial order in dimensions with high importance might exceed this value; however, this value is still used to limit the relative overall order. - \item \xmlNode{SparseGrid}: \xmlDesc{[smolyak, tensor]}, + \item \xmlNode{SparseGrid}: \xmlDesc{[smolyak, tensor]}, allows specification of the multidimensional quadrature construction strategy. Options are \xmlString{smolyak} and \xmlString{tensor}. \default{smolyak} - \item \xmlNode{IndexPoints}: \xmlDesc{comma-separated list of comma separated integer tuples}, + \item \xmlNode{IndexPoints}: \xmlDesc{comma-separated list of comma separated integer tuples}, used to specify the index set points in a \xmlString{Custom} index set. The tuples are entered as comma-separated values between parenthesis, with each tuple separated by a comma. Any amount of whitespace is acceptable. For example, @@ -1154,14 +1154,14 @@ \subsubsection{HDMRRom} guarantee accurate convergence.} \default{None} - \item \xmlNode{Interpolation}: \xmlDesc{string}, + \item \xmlNode{Interpolation}: \xmlDesc{string}, offers the option to specify quadrature, polynomials, and importance weights for the given variable name. The ROM accepts any number of \xmlNode{Interpolation} nodes up to the dimensionality of the input space. \default{None} The \xmlNode{Interpolation} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{quad}: \xmlDesc{string, optional}, + \item \xmlAttr{quad}: \xmlDesc{string, optional}, specifies the quadrature type to use for collocation in this dimension. The default options depend on the uncertainty distribution of the input dimension, as shown in Table \ref{tab:gpcCompatible}. Additionally, Clenshaw @@ -1174,19 +1174,19 @@ \subsubsection{HDMRRom} than the four listed, but are viable choices. Choosing polynomial type Legendre for any non-uniform distribution will enable this formulation automatically. - \item \xmlAttr{poly}: \xmlDesc{string, optional}, + \item \xmlAttr{poly}: \xmlDesc{string, optional}, specifies the interpolating polynomial family to use for the polynomial expansion in this dimension. The default options depend on the quadrature type chosen, as shown in Table \ref{tab:gpcCompatible}. Currently, no polynomials are available outside the default. \default{see Table \ref{tab:gpcCompatible}.} - \item \xmlAttr{weight}: \xmlDesc{float, optional}, + \item \xmlAttr{weight}: \xmlDesc{float, optional}, delineates the importance weighting of this dimension. A larger importance weight will result in increased resolution for this dimension at the cost of resolution in lower- weighted dimensions. The algorithm normalizes weights at run-time. \default{1} \end{itemize} - \item \xmlNode{SobolOrder}: \xmlDesc{integer}, + \item \xmlNode{SobolOrder}: \xmlDesc{integer}, indicates the maximum cardinality of the input space used in the subset functionals. For example, order 1 includes only functionals of each independent dimension separately, while order 2 considers pair-wise interactions. @@ -1241,27 +1241,27 @@ \subsubsection{MSR} The \xmlNode{MSR} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{MSR} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -1300,60 +1300,60 @@ \subsubsection{MSR} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -1366,24 +1366,24 @@ \subsubsection{MSR} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -1403,7 +1403,7 @@ \subsubsection{MSR} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -1414,40 +1414,40 @@ \subsubsection{MSR} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{persistence}: \xmlDesc{string}, + \item \xmlNode{persistence}: \xmlDesc{string}, specifies how to define the hierarchical simplification by assigning a value to each local minimum and maximum according to the one of the strategy options below: @@ -1461,19 +1461,19 @@ \subsubsection{MSR} extremum. \end{itemize} \default{difference} - \item \xmlNode{gradient}: \xmlDesc{string}, + \item \xmlNode{gradient}: \xmlDesc{string}, specifies the method used for estimating the gradient, available options are: \begin{itemize} \item \texttt{steepest} \end{itemize} \default{steepest} - \item \xmlNode{simplification}: \xmlDesc{float}, + \item \xmlNode{simplification}: \xmlDesc{float}, specifies the amount of noise reduction to apply before returning labels. \default{0} - \item \xmlNode{graph}: \xmlDesc{string}, + \item \xmlNode{graph}: \xmlDesc{string}, specifies the type of neighborhood graph used in the algorithm, available options are: \begin{itemize} \item \texttt{beta @@ -1482,13 +1482,13 @@ \subsubsection{MSR} \end{itemize} \default{beta skeleton} - \item \xmlNode{beta}: \xmlDesc{float}, + \item \xmlNode{beta}: \xmlDesc{float}, in range: $(0, 2])$. It is only used when the \xmlNode{graph} is set to \texttt{beta skeleton} or \texttt{relaxed beta skeleton}. \default{1.0} - \item \xmlNode{knn}: \xmlDesc{integer}, + \item \xmlNode{knn}: \xmlDesc{integer}, is the number of neighbors when using the \texttt{approximate knn} for the \xmlNode{graph} sub-node and used to speed up the computation of other graphs by using the @@ -1496,12 +1496,12 @@ \subsubsection{MSR} connected graph. \default{-1} - \item \xmlNode{weighted}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{weighted}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, a flag that specifies whether the regression models should be probability weighted. \default{False} - \item \xmlNode{partitionPredictor}: \xmlDesc{string}, + \item \xmlNode{partitionPredictor}: \xmlDesc{string}, a flag that specifies how the predictions for query point categorization should be performed. Available options are: @@ -1509,13 +1509,13 @@ \subsubsection{MSR} \item \texttt{svm} \end{itemize} \default{kde} - \item \xmlNode{smooth}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{smooth}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, if this node is present, the ROM will blend the estimates of all of the local linear models weighted by the probability the query point is categorized as belonging to that partition of the input space. \default{False} - \item \xmlNode{kernel}: \xmlDesc{string}, + \item \xmlNode{kernel}: \xmlDesc{string}, this option is only used when the \xmlNode{partitionPredictor} is set to \texttt{kde} and specifies the type of kernel to use in the kernel density estimation. @@ -1530,7 +1530,7 @@ \subsubsection{MSR} \item \texttt{exponential} \end{itemize} \default{gaussian} - \item \xmlNode{bandwidth}: \xmlDesc{float or string}, + \item \xmlNode{bandwidth}: \xmlDesc{float or string}, this option is only used when the \xmlNode{partitionPredictor} is set to \texttt{kde} and specifies the scale of the fall-off. A higher bandwidth @@ -1583,27 +1583,27 @@ \subsubsection{NDinvDistWeight} The \xmlNode{NDinvDistWeight} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{NDinvDistWeight} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -1642,60 +1642,60 @@ \subsubsection{NDinvDistWeight} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -1708,24 +1708,24 @@ \subsubsection{NDinvDistWeight} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -1745,7 +1745,7 @@ \subsubsection{NDinvDistWeight} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -1756,40 +1756,40 @@ \subsubsection{NDinvDistWeight} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{p}: \xmlDesc{integer}, + \item \xmlNode{p}: \xmlDesc{integer}, must be greater than zero and represents the ``power parameter''. For the choice of value for \xmlNode{p},it is necessary to consider the degree of smoothing desired in the interpolation/extrapolation, the density and @@ -1832,27 +1832,27 @@ \subsubsection{SyntheticHistory} The \xmlNode{SyntheticHistory} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{SyntheticHistory} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -1891,60 +1891,60 @@ \subsubsection{SyntheticHistory} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -1957,24 +1957,24 @@ \subsubsection{SyntheticHistory} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -1994,7 +1994,7 @@ \subsubsection{SyntheticHistory} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -2005,40 +2005,40 @@ \subsubsection{SyntheticHistory} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -2052,11 +2052,11 @@ \subsubsection{SyntheticHistory} history generation is deterministic given a single training signal. The \xmlNode{fourier} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2068,7 +2068,7 @@ \subsubsection{SyntheticHistory} The \xmlNode{fourier} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{periods}: \xmlDesc{comma-separated floats}, + \item \xmlNode{periods}: \xmlDesc{comma-separated floats}, Specifies the periods (inverse of frequencies) that should be searched for within the training signal. \end{itemize} @@ -2085,11 +2085,11 @@ \subsubsection{SyntheticHistory} \texttt{statsmodels} Python library. The \xmlNode{arma} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2097,14 +2097,14 @@ \subsubsection{SyntheticHistory} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{reduce\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{reduce\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, activates a lower memory usage ARMA training. This does tend to result in a slightly slower training time, at the benefit of lower memory usage. For example, in one 1000-length history test, low memory reduced memory usage by 2.3 MiB, but increased training time by 0.4 seconds. No change in results has been observed switching between modes. Note that the ARMA must be retrained to change this property; it cannot be applied to serialized ARMAs. \default{False} - \item \xmlAttr{gaussianize}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{gaussianize}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, activates a transformation of the signal to a normal distribution before training. This is done by fitting a CDF to the data and then transforming the data to a normal distribution using the CDF. The CDF is saved and used during @@ -2114,7 +2114,7 @@ \subsubsection{SyntheticHistory} Note: New models wishing to apply this transformation should use a \xmlNode{gaussianize} node preceding the \xmlNode{arma} node instead of this option. \default{False} - \item \xmlAttr{auto\_select}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{auto\_select}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, 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 @@ -2123,14 +2123,14 @@ \subsubsection{SyntheticHistory} The \xmlNode{arma} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{P}: \xmlDesc{comma-separated integers}, + \item \xmlNode{P}: \xmlDesc{comma-separated integers}, 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. - \item \xmlNode{Q}: \xmlDesc{comma-separated integers}, + \item \xmlNode{Q}: \xmlDesc{comma-separated integers}, 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 @@ -2152,11 +2152,11 @@ \subsubsection{SyntheticHistory} \texttt{statsmodels} Python library. The \xmlNode{varma} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2168,11 +2168,11 @@ \subsubsection{SyntheticHistory} The \xmlNode{varma} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{P}: \xmlDesc{integer}, + \item \xmlNode{P}: \xmlDesc{integer}, the number of terms in the AutoRegressive term to retain in the regression; typically represented as $P$ in literature. - \item \xmlNode{Q}: \xmlDesc{integer}, + \item \xmlNode{Q}: \xmlDesc{integer}, the number of terms in the Moving Average term to retain in the regression; typically represented as $Q$ in literature. \end{itemize} @@ -2194,11 +2194,11 @@ \subsubsection{SyntheticHistory} and noise variance terms may be switching or non-switching parameters. The \xmlNode{MarkovAR} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2206,21 +2206,21 @@ \subsubsection{SyntheticHistory} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{switching\_ar}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{switching\_ar}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, indicates whether the autoregressive coefficients are switching parameters. \default{True} - \item \xmlAttr{switching\_variance}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{switching\_variance}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, indicates whether the noise variance is a switching parameter. \default{True} - \item \xmlAttr{switching\_trend}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{switching\_trend}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, indicates whether the mean is a switching parameter. \default{True} \end{itemize} The \xmlNode{MarkovAR} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{P}: \xmlDesc{integer}, + \item \xmlNode{P}: \xmlDesc{integer}, the number of terms in the AutoRegressive term to retain in the regression; typically represented as $P$ in literature. - \item \xmlNode{MarkovStates}: \xmlDesc{integer}, + \item \xmlNode{MarkovStates}: \xmlDesc{integer}, the number of states in the hidden Markov model. \end{itemize} @@ -2229,11 +2229,11 @@ \subsubsection{SyntheticHistory} Cleveland et al. (1990). The \xmlNode{STL} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2245,13 +2245,13 @@ \subsubsection{SyntheticHistory} The \xmlNode{STL} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{seasonal}: \xmlDesc{integer}, + \item \xmlNode{seasonal}: \xmlDesc{integer}, the length of the seasonal smoother. - \item \xmlNode{period}: \xmlDesc{integer}, + \item \xmlNode{period}: \xmlDesc{integer}, periodicity of the sequence. - \item \xmlNode{trend}: \xmlDesc{integer}, + \item \xmlNode{trend}: \xmlDesc{integer}, the length of the trend smoother. Must be an odd integer. \end{itemize} @@ -2261,11 +2261,11 @@ \subsubsection{SyntheticHistory} python environment. The \xmlNode{wavelet} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2277,7 +2277,7 @@ \subsubsection{SyntheticHistory} The \xmlNode{wavelet} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{family}: \xmlDesc{string}, + \item \xmlNode{family}: \xmlDesc{string}, The type of wavelet to use for the transformation. There are several possible families to choose from, and most families contain more than one variation. For more information regarding the wavelet families, refer to the Pywavelets documentation @@ -2305,11 +2305,11 @@ \subsubsection{SyntheticHistory} fits time-series data using a polynomial function of degree one or greater. The \xmlNode{PolynomialRegression} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2321,7 +2321,7 @@ \subsubsection{SyntheticHistory} The \xmlNode{PolynomialRegression} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, Specifies the degree polynomial to fit the data with. \end{itemize} @@ -2339,11 +2339,11 @@ \subsubsection{SyntheticHistory} \texttt{statsforecast} Python library. The \xmlNode{autoarma} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2355,23 +2355,23 @@ \subsubsection{SyntheticHistory} The \xmlNode{autoarma} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{P\_upper}: \xmlDesc{integer}, + \item \xmlNode{P\_upper}: \xmlDesc{integer}, 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. - \item \xmlNode{Q\_upper}: \xmlDesc{integer}, + \item \xmlNode{Q\_upper}: \xmlDesc{integer}, 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. - \item \xmlNode{criterion}: \xmlDesc{[aic, aicc, bic]}, + \item \xmlNode{criterion}: \xmlDesc{[aic, aicc, bic]}, 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`. - \item \xmlNode{use\_approximation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{use\_approximation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, 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 @@ -2383,11 +2383,11 @@ \subsubsection{SyntheticHistory} TimeSeriesAnalysis algorithm for sliding window snapshots to generate features The \xmlNode{rwd} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2399,18 +2399,18 @@ \subsubsection{SyntheticHistory} The \xmlNode{rwd} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{signatureWindowLength}: \xmlDesc{integer}, + \item \xmlNode{signatureWindowLength}: \xmlDesc{integer}, the size of signature window, which represents as a snapshot for a certain time step; typically represented as $w$ in literature, or $w\_sig$ in the code. - \item \xmlNode{featureIndex}: \xmlDesc{integer}, + \item \xmlNode{featureIndex}: \xmlDesc{integer}, Index used for feature selection, which requires pre-analysis for now, will be addresses via other non human work required method - \item \xmlNode{sampleType}: \xmlDesc{integer}, + \item \xmlNode{sampleType}: \xmlDesc{integer}, Indicating the type of sampling. - \item \xmlNode{seed}: \xmlDesc{integer}, + \item \xmlNode{seed}: \xmlDesc{integer}, Indicating random seed. \end{itemize} @@ -2419,11 +2419,11 @@ \subsubsection{SyntheticHistory} absolute value of the data. The \xmlNode{maxabsscaler} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2438,11 +2438,11 @@ \subsubsection{SyntheticHistory} minimum value from each point and dividing by the range. The \xmlNode{minmaxscaler} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2457,11 +2457,11 @@ \subsubsection{SyntheticHistory} range. The \xmlNode{robustscaler} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2476,11 +2476,11 @@ \subsubsection{SyntheticHistory} deviation. The \xmlNode{standardscaler} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2497,11 +2497,11 @@ \subsubsection{SyntheticHistory} be used as the first transformer in the chain. The \xmlNode{preserveCDF} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2515,11 +2515,11 @@ \subsubsection{SyntheticHistory} applies Nth order differencing to the data. The \xmlNode{differencing} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2531,7 +2531,7 @@ \subsubsection{SyntheticHistory} The \xmlNode{differencing} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{order}: \xmlDesc{integer}, + \item \xmlNode{order}: \xmlDesc{integer}, differencing order. \end{itemize} @@ -2539,11 +2539,11 @@ \subsubsection{SyntheticHistory} Filter Bank Discrete Wavelet Transform, a multi-resolution-capable TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform (DWT) on time-dependent data as a filter bank to decompose the signal to multiple frequency levels. Given a wavelet family and the - original signal, the signal is projected onto modifications of the original "mother" + original signal, the signal is projected onto modifications of the original mother wavelet $\Psi$ to produce wavelet coefficients. The modifications $\psi_{a,b}$ happen in two ways: \\ \begin{itemize} \item the wavelet is scaled by factor $a$ to capture features at different time scales (e.g., if the wavelet is - "thinner" it better captures faster frequency features) \item the wavelet is shifted + thinner it better captures faster frequency features) \item the wavelet is shifted in time by factor $b$ across the entire time domain of the signal for each scale $a$ \end{itemize} After all projections, there is a 2-D array of coefficients regarding the scale $a$ and shift $b$. The modified wavelets are given by: \\ @@ -2561,11 +2561,11 @@ \subsubsection{SyntheticHistory} environment. The \xmlNode{filterbankdwt} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2577,7 +2577,7 @@ \subsubsection{SyntheticHistory} The \xmlNode{filterbankdwt} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{family}: \xmlDesc{string}, + \item \xmlNode{family}: \xmlDesc{string}, The type of wavelet to use for the transformation. There are several possible families to choose from, and most families contain more than one variation. For more information regarding the wavelet families, @@ -2605,7 +2605,7 @@ \subsubsection{SyntheticHistory} \item \textbf{shan family}: shan \item \textbf{fbsp family}: fbsp \item \textbf{cmor family}: cmor \end{itemize} - \item \xmlNode{levels}: \xmlDesc{integer}, + \item \xmlNode{levels}: \xmlDesc{integer}, the number of wavelet decomposition levels for requested for the signal. This is equivalent to the number of sets of detail coefficients produced. Note that there will always be one set of approximation cofficients @@ -2622,11 +2622,11 @@ \subsubsection{SyntheticHistory} not support them. The \xmlNode{zerofilter} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2641,11 +2641,11 @@ \subsubsection{SyntheticHistory} exponential function. The \xmlNode{logtransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2660,11 +2660,11 @@ \subsubsection{SyntheticHistory} the hyperbolic sine. The \xmlNode{arcsinhtransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2679,11 +2679,11 @@ \subsubsection{SyntheticHistory} inverse hyperbolic tangent. The \xmlNode{tanhtransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2698,11 +2698,11 @@ \subsubsection{SyntheticHistory} the logit function. The \xmlNode{sigmoidtransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2717,11 +2717,11 @@ \subsubsection{SyntheticHistory} out-of-range values back into the desired range. The \xmlNode{outtruncation} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2729,7 +2729,7 @@ \subsubsection{SyntheticHistory} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, + \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, -- no description yet -- \end{itemize} @@ -2737,11 +2737,11 @@ \subsubsection{SyntheticHistory} transforms the data into a normal distribution using quantile mapping. The \xmlNode{gaussianize} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2749,7 +2749,7 @@ \subsubsection{SyntheticHistory} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, + \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} is greater than the number of data, then the number of data is used instead. \default{1000} \end{itemize} @@ -2759,11 +2759,11 @@ \subsubsection{SyntheticHistory} distribution and then to the desired distribution. The \xmlNode{quantiletransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -2771,10 +2771,10 @@ \subsubsection{SyntheticHistory} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, + \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} is greater than the number of data, then the number of data is used instead. \default{1000} - \item \xmlAttr{outputDistribution}: \xmlDesc{[normal, uniform], optional}, + \item \xmlAttr{outputDistribution}: \xmlDesc{[normal, uniform], optional}, distribution to transform to. \default{normal} \end{itemize} \end{itemize} @@ -2818,37 +2818,37 @@ \subsubsection{MultiResolutionTSA} the SyntheticHistory ROM performs. Where this ROM differs is that it can handle multi- resolution decompositions of a signal. That is, some algorithms are capable of characterizing and splitting a signal at different timescales to better learn the signal dynamics at those - timescales. See the `filterbankdwt` below for an example of such an algorithm. The + timescales. See the $\texttt{filterbankdwt}$ below for an example of such an algorithm. The MultiResolutionTSA particularly handles the combination of learned characteristics and signal generation from the different decomposition levels. This ROM also requires a SegmentROM - node of the "decomposition" type (an example is given below for the XML input structure). // + node of the decomposition type (an example is given below for the XML input structure). // In order to use this Reduced Order Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs to be \xmlString{MultiResolutionTSA}. It must also have a SegmentROM node of \xmlAttr{subType} \xmlString{decomposition} The \xmlNode{MultiResolutionTSA} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{MultiResolutionTSA} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -2887,60 +2887,60 @@ \subsubsection{MultiResolutionTSA} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -2953,24 +2953,24 @@ \subsubsection{MultiResolutionTSA} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -2990,7 +2990,7 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -3001,40 +3001,40 @@ \subsubsection{MultiResolutionTSA} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -3048,11 +3048,11 @@ \subsubsection{MultiResolutionTSA} history generation is deterministic given a single training signal. The \xmlNode{fourier} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3064,7 +3064,7 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{fourier} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{periods}: \xmlDesc{comma-separated floats}, + \item \xmlNode{periods}: \xmlDesc{comma-separated floats}, Specifies the periods (inverse of frequencies) that should be searched for within the training signal. \end{itemize} @@ -3081,11 +3081,11 @@ \subsubsection{MultiResolutionTSA} \texttt{statsmodels} Python library. The \xmlNode{arma} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3093,14 +3093,14 @@ \subsubsection{MultiResolutionTSA} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{reduce\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{reduce\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, activates a lower memory usage ARMA training. This does tend to result in a slightly slower training time, at the benefit of lower memory usage. For example, in one 1000-length history test, low memory reduced memory usage by 2.3 MiB, but increased training time by 0.4 seconds. No change in results has been observed switching between modes. Note that the ARMA must be retrained to change this property; it cannot be applied to serialized ARMAs. \default{False} - \item \xmlAttr{gaussianize}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{gaussianize}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, activates a transformation of the signal to a normal distribution before training. This is done by fitting a CDF to the data and then transforming the data to a normal distribution using the CDF. The CDF is saved and used during @@ -3110,7 +3110,7 @@ \subsubsection{MultiResolutionTSA} Note: New models wishing to apply this transformation should use a \xmlNode{gaussianize} node preceding the \xmlNode{arma} node instead of this option. \default{False} - \item \xmlAttr{auto\_select}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{auto\_select}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, 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 @@ -3119,14 +3119,14 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{arma} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{P}: \xmlDesc{comma-separated integers}, + \item \xmlNode{P}: \xmlDesc{comma-separated integers}, 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. - \item \xmlNode{Q}: \xmlDesc{comma-separated integers}, + \item \xmlNode{Q}: \xmlDesc{comma-separated integers}, 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 @@ -3148,11 +3148,11 @@ \subsubsection{MultiResolutionTSA} \texttt{statsmodels} Python library. The \xmlNode{varma} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3164,11 +3164,11 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{varma} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{P}: \xmlDesc{integer}, + \item \xmlNode{P}: \xmlDesc{integer}, the number of terms in the AutoRegressive term to retain in the regression; typically represented as $P$ in literature. - \item \xmlNode{Q}: \xmlDesc{integer}, + \item \xmlNode{Q}: \xmlDesc{integer}, the number of terms in the Moving Average term to retain in the regression; typically represented as $Q$ in literature. \end{itemize} @@ -3190,11 +3190,11 @@ \subsubsection{MultiResolutionTSA} and noise variance terms may be switching or non-switching parameters. The \xmlNode{MarkovAR} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3202,21 +3202,21 @@ \subsubsection{MultiResolutionTSA} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{switching\_ar}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{switching\_ar}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, indicates whether the autoregressive coefficients are switching parameters. \default{True} - \item \xmlAttr{switching\_variance}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{switching\_variance}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, indicates whether the noise variance is a switching parameter. \default{True} - \item \xmlAttr{switching\_trend}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{switching\_trend}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, indicates whether the mean is a switching parameter. \default{True} \end{itemize} The \xmlNode{MarkovAR} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{P}: \xmlDesc{integer}, + \item \xmlNode{P}: \xmlDesc{integer}, the number of terms in the AutoRegressive term to retain in the regression; typically represented as $P$ in literature. - \item \xmlNode{MarkovStates}: \xmlDesc{integer}, + \item \xmlNode{MarkovStates}: \xmlDesc{integer}, the number of states in the hidden Markov model. \end{itemize} @@ -3225,11 +3225,11 @@ \subsubsection{MultiResolutionTSA} Cleveland et al. (1990). The \xmlNode{STL} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3241,13 +3241,13 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{STL} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{seasonal}: \xmlDesc{integer}, + \item \xmlNode{seasonal}: \xmlDesc{integer}, the length of the seasonal smoother. - \item \xmlNode{period}: \xmlDesc{integer}, + \item \xmlNode{period}: \xmlDesc{integer}, periodicity of the sequence. - \item \xmlNode{trend}: \xmlDesc{integer}, + \item \xmlNode{trend}: \xmlDesc{integer}, the length of the trend smoother. Must be an odd integer. \end{itemize} @@ -3257,11 +3257,11 @@ \subsubsection{MultiResolutionTSA} python environment. The \xmlNode{wavelet} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3273,7 +3273,7 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{wavelet} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{family}: \xmlDesc{string}, + \item \xmlNode{family}: \xmlDesc{string}, The type of wavelet to use for the transformation. There are several possible families to choose from, and most families contain more than one variation. For more information regarding the wavelet families, refer to the Pywavelets documentation @@ -3301,11 +3301,11 @@ \subsubsection{MultiResolutionTSA} fits time-series data using a polynomial function of degree one or greater. The \xmlNode{PolynomialRegression} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3317,7 +3317,7 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{PolynomialRegression} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, Specifies the degree polynomial to fit the data with. \end{itemize} @@ -3335,11 +3335,11 @@ \subsubsection{MultiResolutionTSA} \texttt{statsforecast} Python library. The \xmlNode{autoarma} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3351,23 +3351,23 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{autoarma} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{P\_upper}: \xmlDesc{integer}, + \item \xmlNode{P\_upper}: \xmlDesc{integer}, 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. - \item \xmlNode{Q\_upper}: \xmlDesc{integer}, + \item \xmlNode{Q\_upper}: \xmlDesc{integer}, 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. - \item \xmlNode{criterion}: \xmlDesc{[aic, aicc, bic]}, + \item \xmlNode{criterion}: \xmlDesc{[aic, aicc, bic]}, 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`. - \item \xmlNode{use\_approximation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{use\_approximation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, 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 @@ -3379,11 +3379,11 @@ \subsubsection{MultiResolutionTSA} TimeSeriesAnalysis algorithm for sliding window snapshots to generate features The \xmlNode{rwd} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3395,18 +3395,18 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{rwd} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{signatureWindowLength}: \xmlDesc{integer}, + \item \xmlNode{signatureWindowLength}: \xmlDesc{integer}, the size of signature window, which represents as a snapshot for a certain time step; typically represented as $w$ in literature, or $w\_sig$ in the code. - \item \xmlNode{featureIndex}: \xmlDesc{integer}, + \item \xmlNode{featureIndex}: \xmlDesc{integer}, Index used for feature selection, which requires pre-analysis for now, will be addresses via other non human work required method - \item \xmlNode{sampleType}: \xmlDesc{integer}, + \item \xmlNode{sampleType}: \xmlDesc{integer}, Indicating the type of sampling. - \item \xmlNode{seed}: \xmlDesc{integer}, + \item \xmlNode{seed}: \xmlDesc{integer}, Indicating random seed. \end{itemize} @@ -3415,11 +3415,11 @@ \subsubsection{MultiResolutionTSA} absolute value of the data. The \xmlNode{maxabsscaler} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3434,11 +3434,11 @@ \subsubsection{MultiResolutionTSA} minimum value from each point and dividing by the range. The \xmlNode{minmaxscaler} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3453,11 +3453,11 @@ \subsubsection{MultiResolutionTSA} range. The \xmlNode{robustscaler} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3472,11 +3472,11 @@ \subsubsection{MultiResolutionTSA} deviation. The \xmlNode{standardscaler} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3493,11 +3493,11 @@ \subsubsection{MultiResolutionTSA} be used as the first transformer in the chain. The \xmlNode{preserveCDF} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3511,11 +3511,11 @@ \subsubsection{MultiResolutionTSA} applies Nth order differencing to the data. The \xmlNode{differencing} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3527,7 +3527,7 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{differencing} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{order}: \xmlDesc{integer}, + \item \xmlNode{order}: \xmlDesc{integer}, differencing order. \end{itemize} @@ -3535,11 +3535,11 @@ \subsubsection{MultiResolutionTSA} Filter Bank Discrete Wavelet Transform, a multi-resolution-capable TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform (DWT) on time-dependent data as a filter bank to decompose the signal to multiple frequency levels. Given a wavelet family and the - original signal, the signal is projected onto modifications of the original "mother" + original signal, the signal is projected onto modifications of the original mother wavelet $\Psi$ to produce wavelet coefficients. The modifications $\psi_{a,b}$ happen in two ways: \\ \begin{itemize} \item the wavelet is scaled by factor $a$ to capture features at different time scales (e.g., if the wavelet is - "thinner" it better captures faster frequency features) \item the wavelet is shifted + thinner it better captures faster frequency features) \item the wavelet is shifted in time by factor $b$ across the entire time domain of the signal for each scale $a$ \end{itemize} After all projections, there is a 2-D array of coefficients regarding the scale $a$ and shift $b$. The modified wavelets are given by: \\ @@ -3557,11 +3557,11 @@ \subsubsection{MultiResolutionTSA} environment. The \xmlNode{filterbankdwt} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3573,7 +3573,7 @@ \subsubsection{MultiResolutionTSA} The \xmlNode{filterbankdwt} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{family}: \xmlDesc{string}, + \item \xmlNode{family}: \xmlDesc{string}, The type of wavelet to use for the transformation. There are several possible families to choose from, and most families contain more than one variation. For more information regarding the wavelet families, @@ -3601,7 +3601,7 @@ \subsubsection{MultiResolutionTSA} \item \textbf{shan family}: shan \item \textbf{fbsp family}: fbsp \item \textbf{cmor family}: cmor \end{itemize} - \item \xmlNode{levels}: \xmlDesc{integer}, + \item \xmlNode{levels}: \xmlDesc{integer}, the number of wavelet decomposition levels for requested for the signal. This is equivalent to the number of sets of detail coefficients produced. Note that there will always be one set of approximation cofficients @@ -3618,11 +3618,11 @@ \subsubsection{MultiResolutionTSA} not support them. The \xmlNode{zerofilter} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3637,11 +3637,11 @@ \subsubsection{MultiResolutionTSA} exponential function. The \xmlNode{logtransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3656,11 +3656,11 @@ \subsubsection{MultiResolutionTSA} the hyperbolic sine. The \xmlNode{arcsinhtransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3675,11 +3675,11 @@ \subsubsection{MultiResolutionTSA} inverse hyperbolic tangent. The \xmlNode{tanhtransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3694,11 +3694,11 @@ \subsubsection{MultiResolutionTSA} the logit function. The \xmlNode{sigmoidtransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3713,11 +3713,11 @@ \subsubsection{MultiResolutionTSA} out-of-range values back into the desired range. The \xmlNode{outtruncation} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3725,7 +3725,7 @@ \subsubsection{MultiResolutionTSA} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, + \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, -- no description yet -- \end{itemize} @@ -3733,11 +3733,11 @@ \subsubsection{MultiResolutionTSA} transforms the data into a normal distribution using quantile mapping. The \xmlNode{gaussianize} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3745,7 +3745,7 @@ \subsubsection{MultiResolutionTSA} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, + \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} is greater than the number of data, then the number of data is used instead. \default{1000} \end{itemize} @@ -3755,11 +3755,11 @@ \subsubsection{MultiResolutionTSA} distribution and then to the desired distribution. The \xmlNode{quantiletransformer} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{target}: \xmlDesc{comma-separated strings, required}, indicates the variables for which this algorithm will be used for characterization. - \item \xmlAttr{seed}: \xmlDesc{integer, optional}, + \item \xmlAttr{seed}: \xmlDesc{integer, optional}, sets a seed for the underlying random number generator, if present. - \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, + \item \xmlAttr{global}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0], optional}, designates this algorithm to be used on full signal instead of per segment. NOTE: because this is intended to be used when some algorithms are applied segment-wise and others are applied globally, this is meant to be an @@ -3767,10 +3767,10 @@ \subsubsection{MultiResolutionTSA} E.g., some Fourier periods may be longer than the intended segment length, in which case the this 'global' parameter should be set to True for better fitting. \default{False} - \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, + \item \xmlAttr{nQuantiles}: \xmlDesc{integer, optional}, number of quantiles to use in the transformation. If \xmlAttr{nQuantiles} is greater than the number of data, then the number of data is used instead. \default{1000} - \item \xmlAttr{outputDistribution}: \xmlDesc{[normal, uniform], optional}, + \item \xmlAttr{outputDistribution}: \xmlDesc{[normal, uniform], optional}, distribution to transform to. \default{normal} \end{itemize} \end{itemize} @@ -3843,27 +3843,27 @@ \subsubsection{ARMA} The \xmlNode{ARMA} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{ARMA} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -3902,60 +3902,60 @@ \subsubsection{ARMA} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -3968,24 +3968,24 @@ \subsubsection{ARMA} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -4005,7 +4005,7 @@ \subsubsection{ARMA} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -4016,45 +4016,45 @@ \subsubsection{ARMA} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that is non-decreasing in the input HistorySet. \default{time} - \item \xmlNode{correlate}: \xmlDesc{comma-separated strings}, + \item \xmlNode{correlate}: \xmlDesc{comma-separated strings}, indicates the listed variables should be considered as influencing each other, and trained together instead of independently. This node can only be listed once, so all @@ -4063,13 +4063,13 @@ \subsubsection{ARMA} of targets. \default{None} - \item \xmlNode{seed}: \xmlDesc{integer}, + \item \xmlNode{seed}: \xmlDesc{integer}, provides seed for VARMA and ARMA sampling. Must be provided before training. If no seed is assigned, then a random number will be used. \default{None} - \item \xmlNode{reseedCopies}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{reseedCopies}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, if \xmlString{True} then whenever the ARMA is loaded from file, a random reseeding will be performed to ensure different histories. \nb If reproducible histories are desired for an ARMA loaded from file, @@ -4086,43 +4086,43 @@ \subsubsection{ARMA} histories are generated. \default{True} - \item \xmlNode{P}: \xmlDesc{integer}, + \item \xmlNode{P}: \xmlDesc{integer}, defines the value of $p$. \default{3} - \item \xmlNode{Q}: \xmlDesc{integer}, + \item \xmlNode{Q}: \xmlDesc{integer}, defines the value of $q$. \default{3} - \item \xmlNode{Fourier}: \xmlDesc{comma-separated integers}, + \item \xmlNode{Fourier}: \xmlDesc{comma-separated integers}, must be positive integers. This defines the based period that will be used for Fourier detrending, i.e., this field defines $1/f\_m$ in the above equation. When this filed is not specified, the ARMA considers no Fourier detrend. \default{None} - \item \xmlNode{Peaks}: \xmlDesc{string}, + \item \xmlNode{Peaks}: \xmlDesc{string}, designed to estimate the peaks in signals that repeat with some frequency, often in periodic data. \default{None} The \xmlNode{Peaks} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{target}: \xmlDesc{string, required}, + \item \xmlAttr{target}: \xmlDesc{string, required}, defines the name of one target (besides the pivot parameter) expected to have periodic peaks. - \item \xmlAttr{threshold}: \xmlDesc{float, required}, + \item \xmlAttr{threshold}: \xmlDesc{float, required}, user-defined minimum required height of peaks (absolute value). - \item \xmlAttr{period}: \xmlDesc{float, required}, + \item \xmlAttr{period}: \xmlDesc{float, required}, user-defined expected period for target variable. \end{itemize} The \xmlNode{Peaks} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{nbin}: \xmlDesc{integer}, + \item \xmlNode{nbin}: \xmlDesc{integer}, -- no description yet -- \default{5} - \item \xmlNode{window}: \xmlDesc{comma-separated floats}, + \item \xmlNode{window}: \xmlDesc{comma-separated floats}, lists the window of time within each period in which a peak should be discovered. The text of this node is the upper and lower boundary of this window \emph{relative to} the start of the period, separated by a comma. @@ -4132,13 +4132,13 @@ \subsubsection{ARMA} equivalent to 22, 2. The \xmlNode{window} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{width}: \xmlDesc{float, required}, + \item \xmlAttr{width}: \xmlDesc{float, required}, The user defined width of peaks in that window. The width is in the unit of the signal as well. \end{itemize} \end{itemize} - \item \xmlNode{preserveInputCDF}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{preserveInputCDF}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, enables a final transform on sampled data coercing it to have the same distribution as the original data. If \xmlString{True}, then every sample generated by this ARMA after @@ -4149,7 +4149,7 @@ \subsubsection{ARMA} history. For example, this transform can preserve the load duration curve for a load signal. \default{False} - \item \xmlNode{SpecificFourier}: \xmlDesc{string}, + \item \xmlNode{SpecificFourier}: \xmlDesc{string}, provides a means to specify different Fourier decomposition for different target variables. Values given in the subnodes of this node will supercede the defaults set by the @@ -4157,20 +4157,20 @@ \subsubsection{ARMA} \default{None} The \xmlNode{SpecificFourier} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variables}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{variables}: \xmlDesc{comma-separated strings, required}, lists the variables to whom the \xmlNode{SpecificFourier} parameters will apply. \end{itemize} The \xmlNode{SpecificFourier} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{periods}: \xmlDesc{comma-separated integers}, + \item \xmlNode{periods}: \xmlDesc{comma-separated integers}, lists the (fundamental) periodic wavelength of the Fourier decomposition for these variables, as in the \xmlNode{Fourier} general node. \end{itemize} - \item \xmlNode{Multicycle}: \xmlDesc{string}, + \item \xmlNode{Multicycle}: \xmlDesc{string}, indicates that each sample of the ARMA should yield multiple sequential samples. For example, if an ARMA model is trained to produce a year's worth of data, enabling @@ -4185,11 +4185,11 @@ \subsubsection{ARMA} The \xmlNode{Multicycle} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{cycles}: \xmlDesc{integer}, + \item \xmlNode{cycles}: \xmlDesc{integer}, the number of cycles the ARMA should produce each time it yields a sample. - \item \xmlNode{growth}: \xmlDesc{float}, + \item \xmlNode{growth}: \xmlDesc{float}, if provided then the histories produced by the ARMA will be increased by the growth factor for successive cycles. This node can be added multiple times with different @@ -4210,14 +4210,14 @@ \subsubsection{ARMA} \default{None} The \xmlNode{growth} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{targets}: \xmlDesc{comma-separated strings, required}, + \item \xmlAttr{targets}: \xmlDesc{comma-separated strings, required}, lists the targets in this ARMA that this growth factor should apply to. - \item \xmlAttr{start\_index}: \xmlDesc{integer, optional}, + \item \xmlAttr{start\_index}: \xmlDesc{integer, optional}, -- no description yet -- - \item \xmlAttr{end\_index}: \xmlDesc{integer, optional}, + \item \xmlAttr{end\_index}: \xmlDesc{integer, optional}, -- no description yet -- - \item \xmlAttr{mode}: \xmlDesc{[exponential, linear], required}, + \item \xmlAttr{mode}: \xmlDesc{[exponential, linear], required}, either \xmlString{linear} or \xmlString{exponential}, determines the manner in which the growth factor is applied. If \xmlString{linear}, then the scaling factor is $(1+y\cdot g/100)$; @@ -4226,11 +4226,11 @@ \subsubsection{ARMA} \end{itemize} \end{itemize} - \item \xmlNode{nyquistScalar}: \xmlDesc{integer}, + \item \xmlNode{nyquistScalar}: \xmlDesc{integer}, -- no description yet -- \default{1} - \item \xmlNode{ZeroFilter}: \xmlDesc{string}, + \item \xmlNode{ZeroFilter}: \xmlDesc{string}, turns on \emph{zero filtering} for the listed targets. Zero filtering is a very specific algorithm, and should not be used without understanding its application. When zero filtering is enabled, the ARMA will remove all the @@ -4245,11 +4245,11 @@ \subsubsection{ARMA} \default{None} The \xmlNode{ZeroFilter} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{tol}: \xmlDesc{float, optional}, + \item \xmlAttr{tol}: \xmlDesc{float, optional}, -- no description yet -- \end{itemize} - \item \xmlNode{outTruncation}: \xmlDesc{comma-separated strings}, + \item \xmlNode{outTruncation}: \xmlDesc{comma-separated strings}, defines whether and how output time series are limited in domain. This node has one attribute, \xmlAttr{domain}, whose value can be \xmlString{positive} or \xmlString{negative}. The value of this node contains the list of @@ -4261,7 +4261,7 @@ \subsubsection{ARMA} \default{None} The \xmlNode{outTruncation} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, + \item \xmlAttr{domain}: \xmlDesc{[positive, negative], required}, -- no description yet -- \end{itemize} \end{itemize} @@ -4411,27 +4411,27 @@ \subsubsection{PolyExponential} The \xmlNode{PolyExponential} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{PolyExponential} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -4470,60 +4470,60 @@ \subsubsection{PolyExponential} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -4536,24 +4536,24 @@ \subsubsection{PolyExponential} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -4573,7 +4573,7 @@ \subsubsection{PolyExponential} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -4584,63 +4584,63 @@ \subsubsection{PolyExponential} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{numberExpTerms}: \xmlDesc{integer}, + \item \xmlNode{numberExpTerms}: \xmlDesc{integer}, the number of exponential terms to be used ($N$ above) \default{3} - \item \xmlNode{coeffRegressor}: \xmlDesc{[poly, spline, nearest]}, + \item \xmlNode{coeffRegressor}: \xmlDesc{[poly, spline, nearest]}, defines which regressor to use for interpolating the exponential coefficient. Available are ``spline'',``poly'' and ``nearest''. \default{spline} - \item \xmlNode{polyOrder}: \xmlDesc{integer}, + \item \xmlNode{polyOrder}: \xmlDesc{integer}, the polynomial order to be used for interpolating the exponential coefficients. Only valid in case of \xmlNode{coeffRegressor} set to ``poly''. \default{3} - \item \xmlNode{tol}: \xmlDesc{float}, + \item \xmlNode{tol}: \xmlDesc{float}, relative tolerance of the optimization problem (differential evolution optimizer) \default{0.001} - \item \xmlNode{max\_iter}: \xmlDesc{integer}, + \item \xmlNode{max\_iter}: \xmlDesc{integer}, maximum number of iterations (generations) for the optimization problem (differential evolution optimizer) \default{5000} @@ -4718,27 +4718,27 @@ \subsubsection{DMD} The \xmlNode{DMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{DMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -4777,60 +4777,60 @@ \subsubsection{DMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -4843,24 +4843,24 @@ \subsubsection{DMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -4880,7 +4880,7 @@ \subsubsection{DMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -4891,50 +4891,50 @@ \subsubsection{DMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -4943,7 +4943,7 @@ \subsubsection{DMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -4952,7 +4952,7 @@ \subsubsection{DMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -4965,7 +4965,7 @@ \subsubsection{DMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -4978,40 +4978,40 @@ \subsubsection{DMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -5020,7 +5020,7 @@ \subsubsection{DMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -5032,29 +5032,29 @@ \subsubsection{DMD} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{None} - \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the exact modes need to be computed (eigenvalues and eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). \default{True} - \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True, the low-rank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). Default is False. \default{False} - \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float or integer}, + \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float or integer}, Tikhonov parameter for the regularization. If `None`, no regularization is applied, if `float`, it is used as the $`\lambda`$ tikhonov parameter. \default{None} - \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered @@ -5147,27 +5147,27 @@ \subsubsection{DMDC} The \xmlNode{DMDC} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{DMDC} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -5206,60 +5206,60 @@ \subsubsection{DMDC} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -5272,24 +5272,24 @@ \subsubsection{DMDC} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -5309,7 +5309,7 @@ \subsubsection{DMDC} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -5320,50 +5320,50 @@ \subsubsection{DMDC} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -5372,7 +5372,7 @@ \subsubsection{DMDC} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -5381,7 +5381,7 @@ \subsubsection{DMDC} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -5394,7 +5394,7 @@ \subsubsection{DMDC} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -5407,40 +5407,40 @@ \subsubsection{DMDC} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -5449,7 +5449,7 @@ \subsubsection{DMDC} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -5461,35 +5461,35 @@ \subsubsection{DMDC} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{None} - \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the exact modes need to be computed (eigenvalues and eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). \default{True} - \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True, the low-rank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). Default is False. \default{False} - \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float or integer}, + \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float or integer}, Tikhonov parameter for the regularization. If `None`, no regularization is applied, if `float`, it is used as the $`\lambda`$ tikhonov parameter. \default{None} - \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{rankSVD}: \xmlDesc{integer}, + \item \xmlNode{rankSVD}: \xmlDesc{integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -5498,41 +5498,41 @@ \subsubsection{DMDC} \end{itemize} \default{None} - \item \xmlNode{energyRankSVD}: \xmlDesc{float}, + \item \xmlNode{energyRankSVD}: \xmlDesc{float}, energy level ($0.0 < float < 1.0$) used to compute the rank such as computed rank is the number of the biggest singular values needed to reach the energy identified by \xmlNode{energyRankSVD}. This node has always priority over \xmlNode{rankSVD} \default{None} - \item \xmlNode{rankTLSQ}: \xmlDesc{integer}, + \item \xmlNode{rankTLSQ}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{None} - \item \xmlNode{exactModes}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{exactModes}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the exact modes need to be computed (eigenvalues and eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). \default{True} - \item \xmlNode{optimized}: \xmlDesc{float}, + \item \xmlNode{optimized}: \xmlDesc{float}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{actuators}: \xmlDesc{comma-separated strings}, + \item \xmlNode{actuators}: \xmlDesc{comma-separated strings}, defines the actuators (i.e. system input parameters) of this model. Each actuator variable (u1, u2, etc.) needs to be listed here. - \item \xmlNode{stateVariables}: \xmlDesc{comma-separated strings}, + \item \xmlNode{stateVariables}: \xmlDesc{comma-separated strings}, defines the state variables (i.e. system variable vectors) of this model. Each state variable (x1, x2, etc.) needs to be listed here. The variables indicated in \xmlNode{stateVariables} must be listed in the \xmlNode{Target} node too. - \item \xmlNode{initStateVariables}: \xmlDesc{comma-separated strings}, + \item \xmlNode{initStateVariables}: \xmlDesc{comma-separated strings}, defines the state variables' ids that should be used as initialization variable in the evaluation stage (for the evaluation of the model). @@ -5545,13 +5545,13 @@ \subsubsection{DMDC} the stateVariables listed in \xmlNode{stateVariables} XML node \default{[]} - \item \xmlNode{subtractNormUXY}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{subtractNormUXY}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the initial values need to be subtracted from the actuators (u), state (x) and outputs (y) if any. False if the subtraction is not needed. \default{False} - \item \xmlNode{singleValuesTruncationTol}: \xmlDesc{float}, + \item \xmlNode{singleValuesTruncationTol}: \xmlDesc{float}, Truncation threshold to apply to singular values vector \default{1e-09} \end{itemize} @@ -5646,27 +5646,27 @@ \subsubsection{HODMD} The \xmlNode{HODMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{HODMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -5705,60 +5705,60 @@ \subsubsection{HODMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -5771,24 +5771,24 @@ \subsubsection{HODMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -5808,7 +5808,7 @@ \subsubsection{HODMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -5819,50 +5819,50 @@ \subsubsection{HODMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -5871,7 +5871,7 @@ \subsubsection{HODMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -5880,7 +5880,7 @@ \subsubsection{HODMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -5893,7 +5893,7 @@ \subsubsection{HODMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -5906,40 +5906,40 @@ \subsubsection{HODMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -5948,7 +5948,7 @@ \subsubsection{HODMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -5960,29 +5960,29 @@ \subsubsection{HODMD} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{None} - \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the exact modes need to be computed (eigenvalues and eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). \default{True} - \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True, the low-rank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). Default is False. \default{False} - \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, + \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before computing its - eigendecomposition. None means no rescaling, auto means automatic rescaling using singular + eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values. \default{None} - \item \xmlNode{svd\_rank\_extra}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank\_extra}: \xmlDesc{float or integer}, the rank for the initial reduction of the input data, performed before the rearrangement of the input data to the (pseudo) Hankel matrix format Available options are: \begin{itemize} @@ -5995,22 +5995,22 @@ \subsubsection{HODMD} identified by \xmlNode{svd\_rank\_extra}. \default{0} - \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{d}: \xmlDesc{integer}, + \item \xmlNode{d}: \xmlDesc{integer}, The new order for spatial dimension of the input snapshots. \default{1} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, + \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted\_eigs=``abs'', by real part (and then by imaginary part to break ties) if sorted\_eigs=``real''. \default{False} - \item \xmlNode{reconstruction\_method}: \xmlDesc{[first, mean]}, + \item \xmlNode{reconstruction\_method}: \xmlDesc{[first, mean]}, Method used to reconstruct the snapshots of the dynamical system from the multiple versions available due to how HankelDMD is conceived. If ``first'' (default) the first version available is selected @@ -6100,27 +6100,27 @@ \subsubsection{BOPDMD} The \xmlNode{BOPDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{BOPDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -6159,60 +6159,60 @@ \subsubsection{BOPDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -6225,24 +6225,24 @@ \subsubsection{BOPDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -6262,7 +6262,7 @@ \subsubsection{BOPDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -6273,50 +6273,50 @@ \subsubsection{BOPDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -6325,7 +6325,7 @@ \subsubsection{BOPDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -6334,7 +6334,7 @@ \subsubsection{BOPDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -6347,7 +6347,7 @@ \subsubsection{BOPDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -6360,40 +6360,40 @@ \subsubsection{BOPDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -6402,7 +6402,7 @@ \subsubsection{BOPDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -6414,24 +6414,24 @@ \subsubsection{BOPDMD} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{compute\_A}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{compute\_A}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Flag that determines whether or not to compute the full Koopman operator A. Default is False, do not compute the full operator. Note that the full operator is potentially prohibitively expensive to compute. \default{False} - \item \xmlNode{use\_proj}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{use\_proj}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Flag that determines the type of computation to perform. If True, fit input data projected onto the first svd\_rank POD modes or columns of proj\_basis if provided. If False, fit the full input data. Default is True, fit projected data. \default{True} - \item \xmlNode{num\_trials}: \xmlDesc{integer}, + \item \xmlNode{num\_trials}: \xmlDesc{integer}, Number of BOP-DMD trials to perform. If num\_trials is a positive integer, num\_trials BOP-DMD trials are performed. Otherwise, standard optimized dmd is performed \default{0} - \item \xmlNode{trial\_size}: \xmlDesc{float or integer}, + \item \xmlNode{trial\_size}: \xmlDesc{float or integer}, Size of the randomly selected subset of observations to use for each trial of bagged optimized dmd (BOP-DMD). Available options are: \begin{itemize} \item \textit{$>1$}, @@ -6441,7 +6441,7 @@ \subsubsection{BOPDMD} number of data points observed. \end{itemize} \default{0.6} - \item \xmlNode{eig\_sort}: \xmlDesc{[real, abs, imag, auto]}, + \item \xmlNode{eig\_sort}: \xmlDesc{[real, abs, imag, auto]}, Method used to sort eigenvalues (and modes accordingly) when performing BOP-DMD. Available options are: \begin{itemize} \item \textit{real}, eigenvalues will be sorted by real part and then by imaginary part to @@ -6452,7 +6452,7 @@ \subsubsection{BOPDMD} eigenvalue variance. \end{itemize} \default{auto} - \item \xmlNode{eig\_constraints}: \xmlDesc{[stable, imag, conjugate\_pairs, None]}, + \item \xmlNode{eig\_constraints}: \xmlDesc{[stable, imag, conjugate\_pairs, None]}, Set containing desired DMD operator eigenvalue constraints.. Available options are: \begin{itemize} \item \textit{stable}, constrains eigenvalues to the left half of the complex plane. @@ -6544,27 +6544,27 @@ \subsubsection{CDMD} The \xmlNode{CDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{CDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -6603,60 +6603,60 @@ \subsubsection{CDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -6669,24 +6669,24 @@ \subsubsection{CDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -6706,7 +6706,7 @@ \subsubsection{CDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -6717,50 +6717,50 @@ \subsubsection{CDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -6769,7 +6769,7 @@ \subsubsection{CDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -6778,7 +6778,7 @@ \subsubsection{CDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -6791,7 +6791,7 @@ \subsubsection{CDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -6804,40 +6804,40 @@ \subsubsection{CDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -6846,7 +6846,7 @@ \subsubsection{CDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -6859,12 +6859,12 @@ \subsubsection{CDMD} node has always priority over \xmlNode{rankSVD} \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{None} - \item \xmlNode{compression\_matrix}: \xmlDesc{[linear, sparse, uniform, sample]}, + \item \xmlNode{compression\_matrix}: \xmlDesc{[linear, sparse, uniform, sample]}, The matrix method that pre-multiplies the snapshots matrix in order to compress it. Available are: \begin{itemize} \item \textit{linear}, linearized matrix @@ -6874,36 +6874,36 @@ \subsubsection{CDMD} \end{itemize} \default{uniform} - \item \xmlNode{opt}: \xmlDesc{float}, + \item \xmlNode{opt}: \xmlDesc{float}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True, the low-rank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). Default is False. \default{False} - \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, + \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before computing its - eigendecomposition. None means no rescaling, auto means automatic rescaling using singular + eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values. \default{None} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, + \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted\_eigs=``abs'', by real part (and then by imaginary part to break ties) if sorted\_eigs=``real''. \default{False} - \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float}, + \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float}, Tikhonov parameter for the regularization. If `None`, no regularization is applied, if `float`, it is used as the $`\lambda`$ tikhonov parameter. \default{None} - \item \xmlNode{seed}: \xmlDesc{integer}, + \item \xmlNode{seed}: \xmlDesc{integer}, Seed of the random number generator \default{None} \end{itemize} @@ -6983,27 +6983,27 @@ \subsubsection{EDMD} The \xmlNode{EDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{EDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -7042,60 +7042,60 @@ \subsubsection{EDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -7108,24 +7108,24 @@ \subsubsection{EDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -7145,7 +7145,7 @@ \subsubsection{EDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -7156,50 +7156,50 @@ \subsubsection{EDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -7208,7 +7208,7 @@ \subsubsection{EDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -7217,7 +7217,7 @@ \subsubsection{EDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -7230,7 +7230,7 @@ \subsubsection{EDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -7243,40 +7243,40 @@ \subsubsection{EDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -7285,7 +7285,7 @@ \subsubsection{EDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -7296,12 +7296,12 @@ \subsubsection{EDMD} identified by \xmlNode{svd\_rank}. \default{-1} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{0} - \item \xmlNode{kernel\_metric}: \xmlDesc{[additive\_chi2, chi2, linear, poly, rbf, laplacian, sigmoid, cosine]}, + \item \xmlNode{kernel\_metric}: \xmlDesc{[additive\_chi2, chi2, linear, poly, rbf, laplacian, sigmoid, cosine]}, The kernel function to apply (for more details, see ``sklearn.metrics.pairwise\_kernels''). Available are: \begin{itemize} \item \textit{additive\_chi2}, additive\_chi2 kernel @@ -7314,7 +7314,7 @@ \subsubsection{EDMD} \textit{cosine}, cosine kernel \end{itemize} \default{linear} - \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered @@ -7397,27 +7397,27 @@ \subsubsection{FbDMD} The \xmlNode{FbDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{FbDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -7456,60 +7456,60 @@ \subsubsection{FbDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -7522,24 +7522,24 @@ \subsubsection{FbDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -7559,7 +7559,7 @@ \subsubsection{FbDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -7570,50 +7570,50 @@ \subsubsection{FbDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -7622,7 +7622,7 @@ \subsubsection{FbDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -7631,7 +7631,7 @@ \subsubsection{FbDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -7644,7 +7644,7 @@ \subsubsection{FbDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -7657,40 +7657,40 @@ \subsubsection{FbDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -7699,7 +7699,7 @@ \subsubsection{FbDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -7711,29 +7711,29 @@ \subsubsection{FbDMD} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{0} - \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the exact modes need to be computed (eigenvalues and eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). \default{False} - \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, + \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before computing its - eigendecomposition. None means no rescaling, auto means automatic rescaling using singular + eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values. \default{None} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, + \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted\_eigs=``abs'', by real part (and then by imaginary part to break ties) if sorted\_eigs=``real''. \default{False} @@ -7818,27 +7818,27 @@ \subsubsection{HankelDMD} The \xmlNode{HankelDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{HankelDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -7877,60 +7877,60 @@ \subsubsection{HankelDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -7943,24 +7943,24 @@ \subsubsection{HankelDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -7980,7 +7980,7 @@ \subsubsection{HankelDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -7991,50 +7991,50 @@ \subsubsection{HankelDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -8043,7 +8043,7 @@ \subsubsection{HankelDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -8052,7 +8052,7 @@ \subsubsection{HankelDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -8065,7 +8065,7 @@ \subsubsection{HankelDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -8078,40 +8078,40 @@ \subsubsection{HankelDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -8120,7 +8120,7 @@ \subsubsection{HankelDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -8132,43 +8132,43 @@ \subsubsection{HankelDMD} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{0} - \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the exact modes need to be computed (eigenvalues and eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). \default{False} - \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, + \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before computing its - eigendecomposition. None means no rescaling, auto means automatic rescaling using singular + eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values. \default{None} - \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True, the low-rank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). \default{False} - \item \xmlNode{d}: \xmlDesc{integer}, + \item \xmlNode{d}: \xmlDesc{integer}, The new order for spatial dimension of the input snapshots. \default{1} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, + \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted\_eigs=``abs'', by real part (and then by imaginary part to break ties) if sorted\_eigs=``real''. \default{False} - \item \xmlNode{reconstruction\_method}: \xmlDesc{[first, mean]}, + \item \xmlNode{reconstruction\_method}: \xmlDesc{[first, mean]}, Method used to reconstruct the snapshots of the dynamical system from the multiple versions available due to how HankelDMD is conceived. If ``first'' (default) the first version available is selected @@ -8256,27 +8256,27 @@ \subsubsection{HAVOK} The \xmlNode{HAVOK} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{HAVOK} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -8315,60 +8315,60 @@ \subsubsection{HAVOK} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -8381,24 +8381,24 @@ \subsubsection{HAVOK} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -8418,7 +8418,7 @@ \subsubsection{HAVOK} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -8429,50 +8429,50 @@ \subsubsection{HAVOK} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -8481,7 +8481,7 @@ \subsubsection{HAVOK} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -8490,7 +8490,7 @@ \subsubsection{HAVOK} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -8503,7 +8503,7 @@ \subsubsection{HAVOK} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -8516,40 +8516,40 @@ \subsubsection{HAVOK} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -8558,7 +8558,7 @@ \subsubsection{HAVOK} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -8570,28 +8570,28 @@ \subsubsection{HAVOK} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{delays}: \xmlDesc{integer}, + \item \xmlNode{delays}: \xmlDesc{integer}, The number of consecutive time-shifted copies of the data to use when building Hankel matrices. Note that if examining an n-dimensional data set, this means that the resulting Hankel matrix will contain $n * delays$ rows \default{10} - \item \xmlNode{lag}: \xmlDesc{integer}, + \item \xmlNode{lag}: \xmlDesc{integer}, The number of time steps between each time-shifted copy of data in the Hankel matrix. This means that each row of the Hankel matrix will be separated by a time-step of $dt * lag$. \default{1} - \item \xmlNode{num\_chaos}: \xmlDesc{integer}, + \item \xmlNode{num\_chaos}: \xmlDesc{integer}, The number of forcing terms to use in the HAVOK model. \default{1} - \item \xmlNode{structured}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{structured}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether to perform standard HAVOK or structured HAVOK (sHAVOK). If True, sHAVOK is performed, otherwise HAVOK is performed. \default{False} - \item \xmlNode{lstsq}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{lstsq}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Method used for computing the HAVOK operator. If True, least-squares is used, otherwise the pseudo- inverse is used. \default{True} @@ -8675,27 +8675,27 @@ \subsubsection{PiDMD} The \xmlNode{PiDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{PiDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -8734,60 +8734,60 @@ \subsubsection{PiDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -8800,24 +8800,24 @@ \subsubsection{PiDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -8837,7 +8837,7 @@ \subsubsection{PiDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -8848,50 +8848,50 @@ \subsubsection{PiDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -8900,7 +8900,7 @@ \subsubsection{PiDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -8909,7 +8909,7 @@ \subsubsection{PiDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -8922,7 +8922,7 @@ \subsubsection{PiDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -8935,40 +8935,40 @@ \subsubsection{PiDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -8977,7 +8977,7 @@ \subsubsection{PiDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -8989,18 +8989,18 @@ \subsubsection{PiDMD} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{None} - \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{opt}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{manifold}: \xmlDesc{[unitary, uppertriangular, lowertriangular, diagonal, symmetric, skewsymmetric, toeplitz, hankel, circulant, circulant\_unitary, circulant\_symmetric, circulant\_skewsymmetric, symmetric\_tridiagonal, BC, BCTB, BCCB, BCCBunitary, BCCBsymmetric, BCCBskewsymmetric]}, + \item \xmlNode{manifold}: \xmlDesc{[unitary, uppertriangular, lowertriangular, diagonal, symmetric, skewsymmetric, toeplitz, hankel, circulant, circulant\_unitary, circulant\_symmetric, circulant\_skewsymmetric, symmetric\_tridiagonal, BC, BCTB, BCCB, BCCBunitary, BCCBsymmetric, BCCBskewsymmetric]}, the matrix manifold to restrict the full operator A to. Available options are: \begin{itemize} \item \textit{unitary}, \item \textit{uppertriangular}, \item @@ -9022,11 +9022,11 @@ \subsubsection{PiDMD} \end{itemize} \default{None} - \item \xmlNode{compute\_A}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{compute\_A}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Flag that determines whether or not to compute the full Koopman operator A \default{False} - \item \xmlNode{manifold\_opt}: \xmlDesc{comma-separated strings}, + \item \xmlNode{manifold\_opt}: \xmlDesc{comma-separated strings}, Option used to specify certain manifolds: \begin{itemize} \item If manifold $==$ \textit{diagonal}, \textit{manifold\_opt} may be used to specify the width of the diagonal of @@ -9127,27 +9127,27 @@ \subsubsection{RDMD} The \xmlNode{RDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{RDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -9186,60 +9186,60 @@ \subsubsection{RDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -9252,24 +9252,24 @@ \subsubsection{RDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -9289,7 +9289,7 @@ \subsubsection{RDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -9300,50 +9300,50 @@ \subsubsection{RDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -9352,7 +9352,7 @@ \subsubsection{RDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -9361,7 +9361,7 @@ \subsubsection{RDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -9374,7 +9374,7 @@ \subsubsection{RDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -9387,40 +9387,40 @@ \subsubsection{RDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -9429,7 +9429,7 @@ \subsubsection{RDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -9442,50 +9442,50 @@ \subsubsection{RDMD} node has always priority over \xmlNode{rankSVD} \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{None} - \item \xmlNode{opt}: \xmlDesc{float}, + \item \xmlNode{opt}: \xmlDesc{float}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True, the low-rank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). Default is False. \default{False} - \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, + \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before computing its - eigendecomposition. None means no rescaling, auto means automatic rescaling using singular + eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values. \default{None} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, + \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted\_eigs=``abs'', by real part (and then by imaginary part to break ties) if sorted\_eigs=``real''. \default{False} - \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float}, + \item \xmlNode{tikhonov\_regularization}: \xmlDesc{float}, Tikhonov parameter for the regularization. If ``None'', no regularization is applied, if ``float'', it is used as the ``$\lambda''$ tikhonov parameter. \default{None} - \item \xmlNode{seed}: \xmlDesc{integer}, + \item \xmlNode{seed}: \xmlDesc{integer}, Seed used to initialize the random generator when computing random test matrices. \default{None} - \item \xmlNode{oversampling}: \xmlDesc{integer}, + \item \xmlNode{oversampling}: \xmlDesc{integer}, Number of additional samples (beyond the target rank) to use when computing the random test matrix. Note that values in the range $[5, 10]$ tend to be sufficient. \default{10} - \item \xmlNode{power\_iters}: \xmlDesc{integer}, + \item \xmlNode{power\_iters}: \xmlDesc{integer}, Number of power iterations to perform when executing the Randomized QB Decomposition. Note that as many as 1 to 2 power iterations often lead to considerable improvements. \default{2} @@ -9578,27 +9578,27 @@ \subsubsection{SpDMD} The \xmlNode{SpDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{SpDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -9637,60 +9637,60 @@ \subsubsection{SpDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -9703,24 +9703,24 @@ \subsubsection{SpDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -9740,7 +9740,7 @@ \subsubsection{SpDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -9751,50 +9751,50 @@ \subsubsection{SpDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -9803,7 +9803,7 @@ \subsubsection{SpDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -9812,7 +9812,7 @@ \subsubsection{SpDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -9825,7 +9825,7 @@ \subsubsection{SpDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -9838,40 +9838,40 @@ \subsubsection{SpDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -9880,7 +9880,7 @@ \subsubsection{SpDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -9893,74 +9893,74 @@ \subsubsection{SpDMD} node has always priority over \xmlNode{rankSVD} \default{0} - \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, + \item \xmlNode{tlsq\_rank}: \xmlDesc{integer}, $int > 0$ that defines the truncation rank to be used for the total least square problem. If not inputted, no truncation is applied \default{None} - \item \xmlNode{opt}: \xmlDesc{float}, + \item \xmlNode{opt}: \xmlDesc{float}, True if the amplitudes need to be computed minimizing the error between the modes and all the time-steps or False, if only the 1st timestep only needs to be considered \default{False} - \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{forward\_backward}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True, the low-rank operator is computed like in fbDMD (reference: https://arxiv.org/abs/1507.02264). Default is False. \default{False} - \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, + \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before computing its - eigendecomposition. None means no rescaling, auto means automatic rescaling using singular + eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values. \default{None} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, + \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted\_eigs=``abs'', by real part (and then by imaginary part to break ties) if sorted\_eigs=``real''. \default{False} - \item \xmlNode{abs\_tolerance}: \xmlDesc{float}, + \item \xmlNode{abs\_tolerance}: \xmlDesc{float}, Controls the convergence of ADMM. Absolute tolerance from iteration $k$ and $k-1$. \default{1e-06} - \item \xmlNode{rel\_tolerance}: \xmlDesc{float}, + \item \xmlNode{rel\_tolerance}: \xmlDesc{float}, Controls the convergence of ADMM. Relative tolerance from iteration $k$ and $k-1$. \default{0.0001} - \item \xmlNode{max\_iterations}: \xmlDesc{integer}, + \item \xmlNode{max\_iterations}: \xmlDesc{integer}, The maximum number of iterations performed by ADMM, after that the algorithm is stopped. \default{10000} - \item \xmlNode{rho}: \xmlDesc{float}, + \item \xmlNode{rho}: \xmlDesc{float}, Controls the convergence of ADMM. For a reference on the optimal value for rho see 10.1109/TAC.2014.2354892 or 10.3182/20120914-2-US-4030.00038. \default{1} - \item \xmlNode{gamma}: \xmlDesc{float}, - Controls the level of promotion assigned to sparse solution. Increasing gamma will + \item \xmlNode{gamma}: \xmlDesc{float}, + Controls the level of “promotion” assigned to sparse solution. Increasing gamma will result in an higher number of zero-amplitudes. \default{10} - \item \xmlNode{verbose}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{verbose}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If False, the information provided by SpDMD (like the number of iterations performed by ADMM) are not shown. \default{False} - \item \xmlNode{enforce\_zero}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{enforce\_zero}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True the DMD amplitudes which should be set to zero according to the solution of ADMM are manually set to 0 (since we solve a sparse linear system to find the optimal vector of DMD amplitudes very small terms may survive in some cases). \default{True} - \item \xmlNode{release\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{release\_memory}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If True the intermediate matrices computed by the algorithm are deleted after the termination of a call to train. \default{True} - \item \xmlNode{zero\_absolute\_tolerance}: \xmlDesc{float}, + \item \xmlNode{zero\_absolute\_tolerance}: \xmlDesc{float}, Zero absolute tolerance. \default{1e-12} \end{itemize} @@ -10037,27 +10037,27 @@ \subsubsection{SubspaceDMD} The \xmlNode{SubspaceDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{SubspaceDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -10096,60 +10096,60 @@ \subsubsection{SubspaceDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -10162,24 +10162,24 @@ \subsubsection{SubspaceDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -10199,7 +10199,7 @@ \subsubsection{SubspaceDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -10210,50 +10210,50 @@ \subsubsection{SubspaceDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -10262,7 +10262,7 @@ \subsubsection{SubspaceDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -10271,7 +10271,7 @@ \subsubsection{SubspaceDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -10284,7 +10284,7 @@ \subsubsection{SubspaceDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -10297,40 +10297,40 @@ \subsubsection{SubspaceDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -10339,20 +10339,20 @@ \subsubsection{SubspaceDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{integer}, defines the truncation rank to be used for the SVD. the rank for the truncation; if -1 all the columns of $U\_q$ are used, if svd\_rank is an integer grater than zero it is used as the number of columns retained from U\_q. $svd\_rank=0$ or float values are not supported \default{-1} - \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, + \item \xmlNode{rescale\_mode}: \xmlDesc{[auto, None]}, Scale Atilde as shown in 10.1016/j.jneumeth.2015.10.010 (section 2.4) before - computing its eigendecomposition. None means no rescaling, auto means automatic + computing its eigendecomposition. None means no rescaling, ‘auto’ means automatic rescaling using singular values. \default{None} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, + \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, False]}, Sort eigenvalues (and modes/dynamics accordingly) by magnitude if sorted\_eigs=``abs'', by real part (and then by imaginary part to break ties) if sorted\_eigs=``real''. \default{False} @@ -10433,27 +10433,27 @@ \subsubsection{VarProDMD} The \xmlNode{VarProDMD} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{VarProDMD} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -10492,60 +10492,60 @@ \subsubsection{VarProDMD} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -10558,24 +10558,24 @@ \subsubsection{VarProDMD} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -10595,7 +10595,7 @@ \subsubsection{VarProDMD} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -10606,50 +10606,50 @@ \subsubsection{VarProDMD} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -10658,7 +10658,7 @@ \subsubsection{VarProDMD} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -10667,7 +10667,7 @@ \subsubsection{VarProDMD} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -10680,7 +10680,7 @@ \subsubsection{VarProDMD} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -10693,40 +10693,40 @@ \subsubsection{VarProDMD} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. @@ -10735,7 +10735,7 @@ \subsubsection{VarProDMD} \default{True} \end{itemize} - \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, + \item \xmlNode{svd\_rank}: \xmlDesc{float or integer}, defines the truncation rank to be used for the SVD. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -10747,17 +10747,17 @@ \subsubsection{VarProDMD} identified by \xmlNode{svd\_rank}. \default{0} - \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{exact}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, True if the exact modes need to be computed (eigenvalues and eigenvectors), otherwise the projected ones (using the left-singular matrix after SVD). \default{False} - \item \xmlNode{compression}: \xmlDesc{float}, + \item \xmlNode{compression}: \xmlDesc{float}, If libary compression $c = 0$, all samples are used. If $0 < c < 1$, the best fitting $\lfloor \left(1 - c\right)m\rfloor$ samples are selected \default{False} - \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, True, False, imag]}, + \item \xmlNode{sorted\_eigs}: \xmlDesc{[real, abs, True, False, imag]}, Sort eigenvalues (and modes/dynamics accordingly) method. Available options are: \begin{itemize} \item \textit{True}, the variance of the absolute values of the complex eigenvalues @@ -10829,27 +10829,27 @@ \subsubsection{DMDBase} The \xmlNode{DMDBase} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity - \item \xmlAttr{subType}: \xmlDesc{string, required}, + \item \xmlAttr{subType}: \xmlDesc{string, required}, specify the type of ROM that will be used \end{itemize} The \xmlNode{DMDBase} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Features}: \xmlDesc{comma-separated strings}, specifies the names of the features of this ROM. \nb These parameters are going to be requested for the training of this object (see Section~\ref{subsec:stepRomTrainer}) - \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, + \item \xmlNode{Target}: \xmlDesc{comma-separated strings}, contains a comma separated list of the targets of this ROM. These parameters are the Figures of Merit (FOMs) this ROM is supposed to predict. \nb These parameters are going to be requested for the training of this object (see Section \ref{subsec:stepRomTrainer}). - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, If a time-dependent ROM is requested, please specifies the pivot variable (e.g. time, etc) used in the input HistorySet. \default{time} @@ -10888,60 +10888,60 @@ \subsubsection{DMDBase} the subsequential search. The \xmlNode{RFE} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{RFE} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, + \item \xmlNode{nFeaturesToSelect}: \xmlDesc{integer}, Exact Number of features to select. If not inputted, ``nFeaturesToSelect'' will be set to $1/2$ of the features in the training dataset. \default{None} - \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, + \item \xmlNode{maxNumberFeatures}: \xmlDesc{integer}, Maximum Number of features to select, the algorithm will automatically determine the feature list to minimize a total score. \default{None} - \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{onlyOutputScore}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, If maxNumberFeatures is on, only output score should beconsidered? Or, in case of particular models (e.g. DMDC), state variable space score should be considered as well. \default{False} - \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyClusteringFiltering}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Applying clustering correlation before RFE search? If true, an hierarchal clustering is applied on the feature space aimed to remove features that are correlated before the actual RFE search is performed. This approach can stabilize and accelerate the process in case of large feature spaces (e.g > 500 features). \default{False} - \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{applyCrossCorrelation}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, In case of subgroupping, should a cross correleation analysis should be performed cross sub-groups? If it is activated, a cross correleation analysis is used to additionally filter the features selected for each sub-groupping search. \default{False} - \item \xmlNode{step}: \xmlDesc{float}, + \item \xmlNode{step}: \xmlDesc{float}, If greater than or equal to 1, then step corresponds to the (integer) number of features to remove at each iteration. If within (0.0, 1.0), then step corresponds to the percentage (rounded down) of features to remove at each iteration. \default{1} - \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, + \item \xmlNode{subGroup}: \xmlDesc{comma-separated strings, integers, and floats}, Subgroup of output variables on which to perform the search. Multiple nodes of this type can be inputted. The RFE search will be then performed in each ``subgroup'' separately and then the the union of the different feature sets are used for the final @@ -10954,24 +10954,24 @@ \subsubsection{DMDBase} desired outputs. The variance threshold can be set by the user. The \xmlNode{VarianceThreshold} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{name}: \xmlDesc{string, required}, + \item \xmlAttr{name}: \xmlDesc{string, required}, User-defined name to designate this entity in the RAVEN input file. - \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, + \item \xmlAttr{verbosity}: \xmlDesc{[silent, quiet, all, debug], optional}, Desired verbosity of messages coming from this entity \end{itemize} The \xmlNode{VarianceThreshold} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the search. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature (this is temporary till DataSet training is implemented) \default{feature} - \item \xmlNode{threshold}: \xmlDesc{float}, + \item \xmlNode{threshold}: \xmlDesc{float}, Features with a training-set variance lower than this threshold will be removed. The default is to keep all features with non-zero variance, i.e. remove the features that have the same value in all @@ -10991,7 +10991,7 @@ \subsubsection{DMDBase} The \xmlNode{featureSpaceTransformation} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, + \item \xmlNode{transformationMethod}: \xmlDesc{[PCA, KernelLinearPCA, KernelPolyPCA, KernelRbfPCA, KernelSigmoidPCA, KernelCosinePCA, ICA]}, Transformation method to use. Eight options (5 Kernel PCAs) are available: \begin{itemize} \item \textit{PCA}, Principal Component Analysis; \item \textit{KernelLinearPCA}, Kernel (Linear) Principal component analysis; @@ -11002,50 +11002,50 @@ \subsubsection{DMDBase} \item \textit{ICA}, Independent component analysis; \end{itemize} \default{PCA} - \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, + \item \xmlNode{parametersToInclude}: \xmlDesc{comma-separated strings}, List of IDs of features/variables to include in the transformation process. \default{None} - \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, + \item \xmlNode{whichSpace}: \xmlDesc{[Feature, feature, Target, target]}, Which space to search? Target or Feature? \default{Feature} \end{itemize} - \item \xmlNode{CV}: \xmlDesc{string}, + \item \xmlNode{CV}: \xmlDesc{string}, The text portion of this node needs to contain the name of the \xmlNode{PostProcessor} with \xmlAttr{subType} ``CrossValidation``. The \xmlNode{CV} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{class}: \xmlDesc{string, optional}, + \item \xmlAttr{class}: \xmlDesc{string, optional}, should be set to \xmlString{Model} - \item \xmlAttr{type}: \xmlDesc{string, optional}, + \item \xmlAttr{type}: \xmlDesc{string, optional}, should be set to \xmlString{PostProcessor} \end{itemize} - \item \xmlNode{alias}: \xmlDesc{string}, + \item \xmlNode{alias}: \xmlDesc{string}, specifies alias for any variable of interest in the input or output space. These aliases can be used anywhere in the RAVEN input to refer to the variables. In the body of this node the user specifies the name of the variable that the model is going to use (during its execution). The \xmlNode{alias} node recognizes the following parameters: \begin{itemize} - \item \xmlAttr{variable}: \xmlDesc{string, required}, + \item \xmlAttr{variable}: \xmlDesc{string, required}, define the actual alias, usable throughout the RAVEN input - \item \xmlAttr{type}: \xmlDesc{[input, output], required}, + \item \xmlAttr{type}: \xmlDesc{[input, output], required}, either ``input'' or ``output''. \end{itemize} - \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{light}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, Whether this instance should be light or not. A light instance uses less memory since it caches a smaller number of resources. \default{False} - \item \xmlNode{pivotParameter}: \xmlDesc{string}, + \item \xmlNode{pivotParameter}: \xmlDesc{string}, defines the pivot variable (e.g., time) that represents the independent monotonic variable \default{time} - \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, + \item \xmlNode{reductionMethod}: \xmlDesc{[svd, correlation\_matrix, randomized\_svd]}, the type of method used for the dimensionality reduction.Available are: \begin{itemize} \item \textit{svd}, single value decomposition \item \textit{svd}, @@ -11054,7 +11054,7 @@ \subsubsection{DMDBase} \end{itemize} \default{svd} - \item \xmlNode{reductionRank}: \xmlDesc{integer}, + \item \xmlNode{reductionRank}: \xmlDesc{integer}, defines the truncation rank to be used for the reduction method. Available options are: \begin{itemize} \item \textit{-1}, no truncation is performed @@ -11063,7 +11063,7 @@ \subsubsection{DMDBase} \end{itemize} \default{0} - \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, + \item \xmlNode{approximationMethod}: \xmlDesc{[RBF, GPR]}, the type of method used for the interpolation of the parameter space.Available are: \begin{itemize} \item \textit{RBF}, Radial-basis functions \item \textit{GPR}, @@ -11076,7 +11076,7 @@ \subsubsection{DMDBase} The \xmlNode{approximationSettings} node recognizes the following subnodes: \begin{itemize} - \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, + \item \xmlNode{kernel}: \xmlDesc{[cubic, quintic, linear, gaussian, inverse, multiquadric, thin\_plate\_spline]}, RBF kernel. Available options are: \begin{itemize} \item \textit{thin\_plate\_spline}, thin-plate spline ($r**2 * log(r)$) @@ -11089,40 +11089,40 @@ \subsubsection{DMDBase} \end{itemize} \default{multiquadric} - \item \xmlNode{smooth}: \xmlDesc{float}, + \item \xmlNode{smooth}: \xmlDesc{float}, RBF smooth factor. Values greater than zero increase the smoothness of the approximation. 0 is for interpolation (default), the function will always go through the nodal points in this case. \default{0.0} - \item \xmlNode{neighbors}: \xmlDesc{integer}, + \item \xmlNode{neighbors}: \xmlDesc{integer}, RBF number of neighbors. If specified, the value of the interpolant at each evaluation point will be computed using only the nearest data points. If None (default), all the data points are used by default. \default{None} - \item \xmlNode{epsilon}: \xmlDesc{float}, + \item \xmlNode{epsilon}: \xmlDesc{float}, RBF Shape parameter that scales the input to the RBF. - If kernel is ``linear'', thin\_plate\_spline'', ``cubic'', or ``quintic'', this + If kernel is ``linear'', ‘thin\_plate\_spline'', ``cubic'', or ``quintic'', this defaults to 1 and can be ignored. Otherwise, this must be specified. \default{1.0} - \item \xmlNode{degree}: \xmlDesc{integer}, + \item \xmlNode{degree}: \xmlDesc{integer}, RBF Degree of the added polynomial. The default value is the minimum degree for kernel or 0 if there is no minimum degree. \default{None} - \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, + \item \xmlNode{optimization\_restart}: \xmlDesc{integer}, GPR restart parameter. The number of restarts of the optimizer for finding the kernel parameters which maximize the log-marginal likelihood. The first run of the - optimizer is performed from the kernels + optimizer is performed from the kernel’s initial parameters, the remaining ones (if any) from thetas sampled log-uniform randomly from the space of allowed theta-values. If greater than 0, all bounds must be finite. Note that $n\_restarts\_optimizer == 0$ implies that one run is performed. \default{0} - \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, + \item \xmlNode{normalize\_y}: \xmlDesc{[True, Yes, 1, False, No, 0, t, y, 1, f, n, 0]}, GPR normalization. Whether or not to normalize the target values y by removing the mean and scaling to unit-variance. This is recommended for cases where zero-mean, unit-variance priors are used. diff --git a/doc/user_manual/make_win.sh b/doc/user_manual/make_win.sh index 7b83eb5d69..9fac4a08fd 100644 --- a/doc/user_manual/make_win.sh +++ b/doc/user_manual/make_win.sh @@ -31,7 +31,6 @@ gen_files () { bibtex $file pdflatex -interaction=nonstopmode $file.tex pdflatex -interaction=nonstopmode $file.tex - echo 'File generated' done } diff --git a/ravenframework/SupervisedLearning/MultiResolutionTSA.py b/ravenframework/SupervisedLearning/MultiResolutionTSA.py index c769508ad7..ceac48f0a3 100644 --- a/ravenframework/SupervisedLearning/MultiResolutionTSA.py +++ b/ravenframework/SupervisedLearning/MultiResolutionTSA.py @@ -46,10 +46,10 @@ class cls. operator for each algorithm exists, the algorithms are applied in reverse: $A_3^{-1} \rightarrow A_2^{-1} \rightarrow A_1^{-1}$. This is the same process that the SyntheticHistory ROM performs. Where this ROM differs is that it can handle multi-resolution decompositions of a signal. That is, some algorithms are capable of characterizing and splitting - a signal at different timescales to better learn the signal dynamics at those timescales. See the `filterbankdwt` + a signal at different timescales to better learn the signal dynamics at those timescales. See the $\texttt{filterbankdwt}$ below for an example of such an algorithm. The MultiResolutionTSA particularly handles the combination of learned characteristics and signal generation from the different decomposition levels. This ROM also requires a SegmentROM - node of the "decomposition" type (an example is given below for the XML input structure). + node of the decomposition type (an example is given below for the XML input structure). // In order to use this Reduced Order Model, the \xmlNode{ROM} attribute \xmlAttr{subType} needs to be \xmlString{MultiResolutionTSA}. It must also have a SegmentROM node of \xmlAttr{subType} \xmlString{decomposition}""" diff --git a/ravenframework/TSA/Transformers/FilterBankDWT.py b/ravenframework/TSA/Transformers/FilterBankDWT.py index 491db923e3..fdfe7fb563 100644 --- a/ravenframework/TSA/Transformers/FilterBankDWT.py +++ b/ravenframework/TSA/Transformers/FilterBankDWT.py @@ -63,12 +63,12 @@ def getInputSpecification(cls): specs.description = r"""Filter Bank Discrete Wavelet Transform, a multi-resolution-capable TimeSeriesAnalysis algorithm. Performs a discrete wavelet transform (DWT) on time-dependent data as a filter bank to decompose the signal to multiple frequency levels. Given a wavelet family and the original signal, the signal is projected - onto modifications of the original "mother" wavelet $\Psi$ to produce wavelet coefficients. The modifications + onto modifications of the original mother wavelet $\Psi$ to produce wavelet coefficients. The modifications $\psi_{a,b}$ happen in two ways: \\ \begin{itemize} \item the wavelet is scaled by factor $a$ to capture features at different time scales (e.g., if the wavelet - is "thinner" it better captures faster frequency features) + is thinner it better captures faster frequency features) \item the wavelet is shifted in time by factor $b$ across the entire time domain of the signal for each scale $a$ \end{itemize} From 773c0b6d7c78819c2f8e3c1b0eaa3f1b9970c685 Mon Sep 17 00:00:00 2001 From: "Gabriel J. Soto" Date: Mon, 14 Oct 2024 15:06:50 -0600 Subject: [PATCH 23/23] adding UTF8 encoding to user manual generating scripts --- doc/user_manual/generated/generateOptimizerDoc.py | 2 +- doc/user_manual/generated/generateRomDoc.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/user_manual/generated/generateOptimizerDoc.py b/doc/user_manual/generated/generateOptimizerDoc.py index 946522370c..5b6edea1c8 100644 --- a/doc/user_manual/generated/generateOptimizerDoc.py +++ b/doc/user_manual/generated/generateOptimizerDoc.py @@ -276,7 +276,7 @@ def insertSolnExport(tex, obj): msg+= exampleFactory[name] fName = os.path.abspath(os.path.join(os.path.dirname(__file__), 'optimizer.tex')) -with open(fName, 'w') as f: +with open(fName, 'w', encoding='utf-8') as f: f.writelines(msg) print(f'\nSuccessfully wrote "{fName}"') diff --git a/doc/user_manual/generated/generateRomDoc.py b/doc/user_manual/generated/generateRomDoc.py index d8c9490cba..af80a74356 100644 --- a/doc/user_manual/generated/generateRomDoc.py +++ b/doc/user_manual/generated/generateRomDoc.py @@ -1492,11 +1492,11 @@ print(f'Can not generate latex file for {name}') fName = os.path.abspath(os.path.join(os.path.dirname(__file__), 'internalRom.tex')) -with open(fName, 'w') as f: +with open(fName, 'w', encoding='utf-8') as f: f.writelines(internalRom) print(f'\nSuccessfully wrote "{fName}"') fName = os.path.abspath(os.path.join(os.path.dirname(__file__), 'sklRom.tex')) -with open(fName, 'w') as f: +with open(fName, 'w', encoding='utf-8') as f: f.writelines(sklROM) print(f'\nSuccessfully wrote "{fName}"')