diff --git a/ebcpy/__init__.py b/ebcpy/__init__.py index ee001230..33ff9be6 100644 --- a/ebcpy/__init__.py +++ b/ebcpy/__init__.py @@ -3,9 +3,7 @@ """ # Pull the useful classes to the top Level from .data_types import TimeSeriesData, TimeSeries -from .simulationapi.dymola_api import DymolaAPI -from .simulationapi.fmu import FMU_API -from .optimization import Optimizer - +from .simulationapi.fmu import FMU_API, FMUDiscrete +from .simulationapi.dymola import DymolaAPI __version__ = '0.3.2' diff --git a/ebcpy/data_types.py b/ebcpy/data_types.py index 0fd5ea9a..63aad0e8 100644 --- a/ebcpy/data_types.py +++ b/ebcpy/data_types.py @@ -317,12 +317,11 @@ def _load_df_from_file(self, file): f"Currently only " f"{' ,'.join([str(idx) for idx in numeric_indexes + datetime_indexes])} " f"are supported." - f"Automatic conversion to pd.DateTimeIndex failed" + f"Automatic conversion to pd.DateTimeIndex failed" f"see error above." ) from err return df - def get_variable_names(self) -> List[str]: """ Return an alphabetically sorted list of all variables @@ -357,8 +356,8 @@ def get_tags(self, variable: str = None) -> List[str]: def get_columns_by_tag(self, tag: str, - variables: list =None, - return_type: str='pandas', + variables: list = None, + return_type: str = 'pandas', drop_level: bool = False): """ Returning all columns with defined tag in the form of ndarray. diff --git a/ebcpy/simulationapi/__init__.py b/ebcpy/simulationapi/__init__.py index 03f482d6..90cc6f0d 100644 --- a/ebcpy/simulationapi/__init__.py +++ b/ebcpy/simulationapi/__init__.py @@ -4,17 +4,20 @@ Parameters can easily be updated, and the initialization-process is much more user-friendly than the provided APIs by Dymola or fmpy. """ + import logging -import pathlib -import warnings import os import itertools -from typing import Dict, Union, TypeVar, Any, List -from abc import abstractmethod +import pathlib +import warnings +from typing import Union, Dict, Any, List +from abc import ABC, abstractmethod import multiprocessing as mp from pydantic import BaseModel, Field, validator import numpy as np from ebcpy.utils import setup_logger +from ebcpy.simulationapi.config import SimulationSetupClass, ExperimentConfigurationClass +from ebcpy.simulationapi.config import SimulationSetup, ExperimentConfiguration from ebcpy.utils.reproduction import save_reproduction_archive @@ -40,7 +43,7 @@ class Variable(BaseModel): min: Any = Field( default=None, title='min', - description='Minimal value (lower bound) of the variables value. ' + description='Minimal value (lower bound) of the variables value' 'Only for ints and floats variables.' ) @@ -78,93 +81,276 @@ def check_value(cls, value, values, field): return np.inf if _type != bool else True -class SimulationSetup(BaseModel): +class Model(ABC): """ - pydantic BaseModel child to define relevant - parameters to setup the simulation. + Base-class for simulation apis. Every simulation-api class + must inherit from this class. It defines the basic model structure. + + :param str model_name: + Name of the model being simulated. """ - start_time: float = Field( - default=0, - description="The start time of the simulation", - title="start_time" - ) - stop_time: float = Field( - default=1, - description="The stop / end time of the simulation", - title="stop_time" - ) - output_interval: float = Field( - default=1, - description="The step size of the simulation and " - "thus also output interval of results.", - title="output_interval" - ) - fixedstepsize: float = Field( - title="fixedstepsize", - default=0.0, - description="Fixed step size for Euler" - ) - solver: str = Field( - title="solver", - default="", # Is added in the validator - description="The solver to be used for numerical integration." - ) - _default_solver: str = None - _allowed_solvers: list = [] - @validator("solver", always=True, allow_reuse=True) - def check_valid_solver(cls, solver): + _sim_setup_class: SimulationSetupClass = SimulationSetup + _exp_config_class: ExperimentConfigurationClass = ExperimentConfiguration + + def __init__(self, model_name: str): + # initialize sim setup with class default + self._sim_setup = self._sim_setup_class() + # update sim setup if given in config; if not update config + if self.config.sim_setup is not None: + self.set_sim_setup(self.config.sim_setup) + else: + self._update_config({'sim_setup': self._sim_setup}) + # current directory + if not hasattr(self, 'cd'): # in case of FMU, cd is set already by now + if self.config.cd is not None: + self.cd = self.config.cd + else: + self.cd = pathlib.Path(__file__).parent.joinpath("results") + # Setup the logger + self.logger = setup_logger(cd=self.cd, name=self.__class__.__name__) + self.logger.info(f'{"-" * 25}Initializing class {self.__class__.__name__}{"-" * 25}') + # initialize model variables + self.inputs: Dict[str, Variable] = {} # Inputs of model + self.outputs: Dict[str, Variable] = {} # Outputs of model + self.parameters: Dict[str, Variable] = {} # Parameter of model + self.states: Dict[str, Variable] = {} # States of model + # results + self.result_names = [] # initialize list of tracked variables + self.model_name = model_name + + def _update_config(self, config_update: dict): + """ + Updates config attribute. + To be called in methods that modify an element within the config. + This assures that config is up-to-date and triggers pydantic check. + Not to be called by user as updating the config after initialization is not intended + (because updates are not forwarded) + + :param config_update: + Dictionary containing updates to the experiment configuration + """ + new_config = self.config.dict() + new_config.update(config_update) + self.config = self._exp_config_class(**new_config) + + def set_cd(self, cd): + """Base function for changing the current working directory""" + self.cd = cd + + @property + def cd(self) -> str: + """Get the current working directory""" + return self._cd + + @cd.setter + def cd(self, cd: str): + """Set the current working directory and update the configuration accordingly""" + # update config and thereby trigger pydantic validator + self._update_config({'cd': cd}) + # create dir and set attribute + os.makedirs(cd, exist_ok=True) + self._cd = cd + + @classmethod + def get_simulation_setup_fields(cls): + """Return all fields in the chosen SimulationSetup class.""" + return list(cls._sim_setup_class.__fields__.keys()) + + @classmethod + def get_experiment_config_fields(cls): + """Return all fields in the chosen ExperimentConfig class.""" + return list(cls._exp_config_class.__fields__.keys()) + + @property + def sim_setup(self) -> SimulationSetupClass: + """Return current sim_setup""" + return self._sim_setup + + @sim_setup.deleter + def sim_setup(self): + """In case user deletes the object, reset it to the default one.""" + self._sim_setup = self._sim_setup_class() + + def set_sim_setup(self, sim_setup): """ - Check if the solver is in the list of valid solvers + Updates only those entries that are given as arguments """ - if not solver: - return cls.__private_attributes__['_default_solver'].default - allowed_solvers = cls.__private_attributes__['_allowed_solvers'].default - if solver not in allowed_solvers: - raise ValueError(f"Given solver '{solver}' is not supported! " - f"Supported are '{allowed_solvers}'") - return solver + new_setup = self._sim_setup.dict() + new_setup.update(sim_setup) + self._sim_setup = self._sim_setup_class(**new_setup) + + # update config (redundant in case the sim_setup dict comes from config, + # but relevant if set afterwards) + self._update_config({'sim_setup': new_setup}) - class Config: - """Overwrite default pydantic Config""" - extra = 'forbid' - underscore_attrs_are_private = True + @property + def model_name(self) -> str: + """Name of the model being simulated""" + return self._model_name + + @model_name.setter + def model_name(self, model_name): + """Set new model_name and trigger further functions to load parameters etc.""" + self._model_name = model_name + # Empty all variables again. + # # todo: self.worker_idx and self.use_mp are not connected with Model class + if self.use_mp: + if self.worker_idx: + return + self._update_model_variables() + def _update_model_variables(self): + """ Function to empty all variables and update them again""" + self.outputs = {} + self.parameters = {} + self.states = {} + self.inputs = {} + self._update_model() + # Set all outputs to result_names: + self._set_result_names() -SimulationSetupClass = TypeVar("SimulationSetupClass", bound=SimulationSetup) + def _set_result_names(self): + """ + By default, keys of the output variables are passed to result_names list. + Method may be overwritten by child. + """ + self.result_names = list(self.outputs.keys()) + + @abstractmethod + def _update_model(self): + """ Reimplement this to change variables etc. based on the new model. """ + raise NotImplementedError(f'{self.__class__.__name__}._update_model ' + f'function is not defined') + + @property + def result_names(self) -> List[str]: + """ + The variable names which to store in results. + + Returns: + list: List of string where the string is the + name of the variable to store in the result. + """ + return self._result_names + + @result_names.setter + def result_names(self, result_names): + """ + Set the result names. If the name is not supported, + an error is logged. + """ + self.check_unsupported_variables(variables=result_names, + type_of_var="variables") + self._result_names = result_names + + @property + def variables(self): + """All variables of the simulation model""" + return list(itertools.chain(self.parameters.keys(), + self.outputs.keys(), + self.inputs.keys(), + self.states.keys())) + + def check_unsupported_variables(self, variables: List[str], type_of_var: str): + """ + Checks if variables are in the model as a specified type. + + :param list variables: + List of variables to check + :param str type_of_var: + Variable type to search for + :return: + bool: Returns True if unsupported variables occur + """ + # Log warnings if variables are not supported + if type_of_var == "parameters": + ref = self.parameters.keys() + elif type_of_var == "outputs": + ref = self.outputs.keys() + elif type_of_var == "inputs": + ref = self.inputs.keys() + elif type_of_var == "states": + ref = self.states.keys() + else: + ref = self.variables + + diff = set(variables).difference(ref) + if diff: + if type_of_var not in ["parameters", "outputs", "inputs", "states"]: + type_of_var = "variables" # to specify warning + self.logger.warning( + "Variables '%s' are no '%s' in model '%s'. " + "Will most probably trigger an error when simulating " + "or being ignored.", # in case of input table + ', '.join(diff), type_of_var, self.model_name + ) + return True + return False + + @ abstractmethod + def close(self): + """ close model carrier (i.e. fmu, dymola) """ + raise NotImplementedError(f'{self.__class__.__name__}.close ' + f'function is not defined') + + def save_for_reproduction(self, + title: str, + path: pathlib.Path = None, + files: list = None, + **kwargs): + """ + Save the settings of the SimulationAPI in order to + reproduce the settings of the used simulation. + Should be extended by child-classes to allow custom + saving. + :param str title: + Title of the study + :param pathlib.Path path: + Where to store the .zip file. If not given, self.cd is used. + :param list files: + List of files to save along the standard ones. + Examples would be plots, tables etc. + :param dict kwargs: + All keyword arguments except files and path of the function + save_reproduction_archive + """ + if path is None: + path = self.cd + return save_reproduction_archive( + title=title, + path=path, + files=files, + **kwargs + ) -class SimulationAPI: - """Base-class for simulation apis. Every simulation-api class - must inherit from this class. It defines the structure of each class. +class ContinuousSimulation(Model): + """ + Base class for continuous simulation. . + It includes methods for multi-processing. - :param str,os.path.normpath cd: - Working directory path :param str model_name: - Name of the model being simulated. - :keyword int n_cpu: + Name of the model being simulated + :param int n_cpu: Number of cores to be used by simulation. If None is given, single core will be used. Maximum number equals the cpu count of the device. **Warning**: Logging is not yet fully working on multiple processes. Output will be written to the stream handler, but not to the created .log files. - """ - _sim_setup_class: SimulationSetupClass = SimulationSetup + _items_to_drop = [ 'pool', ] - def __init__(self, cd, model_name, **kwargs): + def __init__(self, model_name: str, n_cpu: int = 1): # Private helper attrs for multiprocessing self._n_sim_counter = 0 self._n_sim_total = 0 self._progress_int = 0 - # Setup the logger - self.logger = setup_logger(cd=cd, name=self.__class__.__name__) - self.logger.info(f'{"-" * 25}Initializing class {self.__class__.__name__}{"-" * 25}') # Check multiprocessing - self.n_cpu = kwargs.get("n_cpu", 1) + self.n_cpu = n_cpu if self.n_cpu > mp.cpu_count(): raise ValueError(f"Given n_cpu '{self.n_cpu}' is greater " "than the available number of " @@ -176,15 +362,8 @@ def __init__(self, cd, model_name, **kwargs): else: self.pool = None self.use_mp = False - # Setup the model - self._sim_setup = self._sim_setup_class() - self.cd = cd - self.inputs: Dict[str, Variable] = {} # Inputs of model - self.outputs: Dict[str, Variable] = {} # Outputs of model - self.parameters: Dict[str, Variable] = {} # Parameter of model - self.states: Dict[str, Variable] = {} # States of model - self.result_names = [] - self.model_name = model_name + + super().__init__(model_name=model_name) # MP-Functions @property @@ -352,167 +531,67 @@ def _log_simulation_process(self, _): def _single_simulation(self, kwargs): """ Same arguments and function as simulate(). - Used to differ between single- and multi-processing simulation""" + Used to differ between single- and multi-processing simulation + """ raise NotImplementedError(f'{self.__class__.__name__}._single_simulation ' f'function is not defined') - @property - def sim_setup(self) -> SimulationSetupClass: - """Return current sim_setup""" - return self._sim_setup - - @sim_setup.deleter - def sim_setup(self): - """In case user deletes the object, reset it to the default one.""" - self._sim_setup = self._sim_setup_class() - - def set_sim_setup(self, sim_setup): - """ - Replaced in v0.1.7 by property function - """ - new_setup = self._sim_setup.dict() - new_setup.update(sim_setup) - self._sim_setup = self._sim_setup_class(**new_setup) - - @property - def model_name(self) -> str: - """Name of the model being simulated""" - return self._model_name - - @model_name.setter - def model_name(self, model_name): - """ - Set new model_name and trigger further functions - to load parameters etc. - """ - self._model_name = model_name - # Empty all variables again. - if self.worker_idx: - return - self._update_model_variables() - - def _update_model_variables(self): - """ - Function to empty all variables and update them again - """ - self.outputs = {} - self.parameters = {} - self.states = {} - self.inputs = {} - self._update_model() - # Set all outputs to result_names: - self.result_names = list(self.outputs.keys()) - @abstractmethod def _update_model(self): - """ - Reimplement this to change variables etc. - based on the new model. - """ + """ Reimplement this to change variables etc. based on the new model. """ raise NotImplementedError(f'{self.__class__.__name__}._update_model ' f'function is not defined') - def set_cd(self, cd): - """Base function for changing the current working directory.""" - self.cd = cd - @property - def cd(self) -> str: - """Get the current working directory""" - return self._cd +class DiscreteSimulation(Model): + """ + Base class for discrete simulations. + Defines abstract methods that must be implemented in sub-classes - @cd.setter - def cd(self, cd: str): - """Set the current working directory""" - os.makedirs(cd, exist_ok=True) - self._cd = cd + :param model_name: + """ + def __init__(self, model_name): + # attributes for discrete simulation + self.current_time = None + self.finished = None # attribute indicates that stop time is reached + self.step_count = None # counting simulation steps + self.sim_res_df = None # attribute that stores simulation result + super().__init__(model_name=model_name) - @property - def result_names(self) -> List[str]: - """ - The variables names which to store in results. + @abstractmethod + def _update_model(self): + """ Reimplement this to change variables etc. based on the new model. """ + raise NotImplementedError(f'{self.__class__.__name__}._update_model ' + f'function is not defined') - Returns: - list: List of string where the string is the - name of the variable to store in the result. - """ - return self._result_names + @abstractmethod + def close(self): + raise NotImplementedError(f'{self.__class__.__name__}.close ' + f'function is not defined') - @result_names.setter - def result_names(self, result_names): + @abstractmethod + def step_only(self): """ - Set the result names. If the name is not supported, - an error is logged. + Reimplement this, to perform a single simulation step. + In the method call the attributes step_count, current_time, and finished should be updated. """ - self.check_unsupported_variables(variables=result_names, - type_of_var="variables") - self._result_names = result_names + raise NotImplementedError(f'{self.__class__.__name__}.step_only ' + f'function is not defined') - @property - def variables(self): + @abstractmethod + def do_step(self): """ - All variables of the simulation model + Reimplement this, as a wrapper for step only. + It extends the step functionality by considering inputs + and writing the results to the sim_res_df attribute. """ - return list(itertools.chain(self.parameters.keys(), - self.outputs.keys(), - self.inputs.keys(), - self.states.keys())) - - def check_unsupported_variables(self, variables: List[str], type_of_var: str): - """Log warnings if variables are not supported.""" - if type_of_var == "parameters": - ref = self.parameters.keys() - elif type_of_var == "outputs": - ref = self.outputs.keys() - elif type_of_var == "inputs": - ref = self.inputs.keys() - elif type_of_var == "inputs": - ref = self.states.keys() - else: - ref = self.variables - - diff = set(variables).difference(ref) - if diff: - self.logger.warning( - "Variables '%s' not found in model '%s'. " - "Will most probably trigger an error when simulating.", - ', '.join(diff), self.model_name - ) - return True - return False - - @classmethod - def get_simulation_setup_fields(cls): - """Return all fields in the chosen SimulationSetup class.""" - return list(cls._sim_setup_class.__fields__.keys()) + raise NotImplementedError(f'{self.__class__.__name__}.do_step ' + f'function is not defined') - def save_for_reproduction(self, - title: str, - path: pathlib.Path = None, - files: list = None, - **kwargs): + @abstractmethod + def get_results(self): """ - Save the settings of the SimulationAPI in order to - reproduce the settings of the used simulation. - - Should be extended by child-classes to allow custom - saving. - - :param str title: - Title of the study - :param pathlib.Path path: - Where to store the .zip file. If not given, self.cd is used. - :param list files: - List of files to save along the standard ones. - Examples would be plots, tables etc. - :param dict kwargs: - All keyword arguments except files and path of the function - save_reproduction_archive + Reimplement this, to return the sim_res_df attribute. """ - if path is None: - path = self.cd - return save_reproduction_archive( - title=title, - path=path, - files=files - ) + raise NotImplementedError(f'{self.__class__.__name__}.get_results ' + f'function is not defined') diff --git a/ebcpy/simulationapi/config.py b/ebcpy/simulationapi/config.py new file mode 100644 index 00000000..4e089c1c --- /dev/null +++ b/ebcpy/simulationapi/config.py @@ -0,0 +1,183 @@ +""" +Module contains pydantic-based models to define experiment configuration and simulation setup +in both dymola and fmu api. +""" + +from typing import Union, Optional +from typing import TypeVar, List +from pydantic import BaseModel, Field, validator +from pydantic import FilePath, DirectoryPath +import numpy as np +import pandas as pd +from ebcpy import TimeSeriesData + + +# ############## Simulation Setup ########################### +class SimulationSetup(BaseModel): + """ + pydantic BaseModel child to define relevant + parameters to setup the simulation. + """ + start_time: float = Field( + default=0, + description="The start time of the simulation", + title="start_time" + ) + stop_time: float = Field( + default=1, + description="The stop / end time of the simulation", + title="stop_time" + ) + output_interval: float = Field( + default=1, + description="The step size of the simulation and " + "thus also output interval of results.", + title="output_interval" + ) + solver: str = Field( + title="solver", + default="", # Is added in the validator + description="The solver to be used for numerical integration." + ) + _default_solver: str = None + _allowed_solvers: list = [] + + @validator("solver", always=True, allow_reuse=True) + def check_valid_solver(cls, solver): + """ + Check if the solver is in the list of valid solvers + """ + if not solver: + return cls.__private_attributes__['_default_solver'].default + allowed_solvers = cls.__private_attributes__['_allowed_solvers'].default + if solver not in allowed_solvers: + raise ValueError(f"Given solver '{solver}' is not supported! " + f"Supported are '{allowed_solvers}'") + return solver + + class Config: + """Overwrite default pydantic Config""" + extra = 'forbid' + underscore_attrs_are_private = True + + +class SimulationSetupDymola(SimulationSetup): + """ + Add's custom setup parameters for simulating in Dymola + to the basic `SimulationSetup` + """ + tolerance: float = Field( + title="tolerance", + default=0.0001, + description="Tolerance of integration" + ) + + fixedstepsize: float = Field( + title="fixedstepsize", + default=0.0, + description="Fixed step size for Euler" + ) + + _default_solver = "Dassl" + _allowed_solvers = ["Dassl", "Euler", "Cerk23", "Cerk34", "Cerk45", + "Esdirk23a", "Esdirk34a", "Esdirk45a", "Cvode", + "Rkfix2", "Rkfix3", "Rkfix4", "Lsodar", + "Radau", "Dopri45", "Dopri853", "Sdirk34hw"] + + +class SimulationSetupFMU_Continuous(SimulationSetup): + """ + Add's custom setup parameters for continuous FMU simulation + to the basic `SimulationSetup` + """ + tolerance: float = Field( + title="tolerance", + default=0.0001, + description="Total tolerance of integration" + ) + + fixedstepsize: float = Field( + title="fixedstepsize", + default=0.0, + description="Fixed step size for Euler" + ) + + timeout: float = Field( + title="timeout", + default=np.inf, + description="Timeout after which the simulation stops." + ) + + _default_solver = "CVode" + _allowed_solvers = ["CVode", "Euler"] + + +class SimulationSetupFMU_Discrete(SimulationSetup): + """ + Add's custom setup parameters for stepwise/discrete FMU simulation + to the basic `SimulationSetup` + """ + + comm_step_size: float = Field( + title="communication step size", + default=1, + description="step size in which the do_step() function is called" + ) + + tolerance: float = Field( + title="tolerance", + default=None, # to select fmpy's default + description="Absolute tolerance of integration" + ) + _default_solver = "CVode" + _allowed_solvers = ["CVode", "Euler"] + + +# ############## Experiment Configuration ########################### +class ExperimentConfiguration(BaseModel): + """ + pydantic BaseModel child to define a full simulation configuration + """ + cd: Optional[DirectoryPath] # Dirpath of the fmu or the current working directory of dymola + sim_setup: Optional[SimulationSetup] + + class Config: + """Overwrite default pydantic Config""" + extra = 'forbid' + arbitrary_types_allowed = True # to validate pandas dataframe and tsd + + +class ExperimentConfigFMU_Continuous(ExperimentConfiguration): + """ + Add's custom parameters for continuous FMU simulation + to the basic `ExperimentConfiguration` + """ + sim_setup: Optional[SimulationSetupFMU_Continuous] + file_path: FilePath + + +class ExperimentConfigFMU_Discrete(ExperimentConfiguration): + """ + Add's custom parameters for discrete FMU simulation + to the basic `ExperimentConfiguration` + """ + file_path: FilePath + sim_setup: Optional[SimulationSetupFMU_Discrete] + input_data: Optional[ + Union[FilePath, pd.DataFrame, TimeSeriesData]] + + +class ExperimentConfigDymola(ExperimentConfiguration): + """ + Add's custom parameters for simulating Dymola models + to the basic `ExperimentConfiguration` + """ + packages: Optional[List[FilePath]] # List with path's to the packages needed to simulate model + model_name: str # Name of the model to be simulated + sim_setup: Optional[SimulationSetupDymola] + + +SimulationSetupClass = TypeVar("SimulationSetupClass", + bound=SimulationSetup) +ExperimentConfigurationClass = TypeVar("ExperimentConfigurationClass", + bound=ExperimentConfiguration) diff --git a/ebcpy/simulationapi/dymola_api.py b/ebcpy/simulationapi/dymola.py similarity index 91% rename from ebcpy/simulationapi/dymola_api.py rename to ebcpy/simulationapi/dymola.py index f621909b..28ef1c74 100644 --- a/ebcpy/simulationapi/dymola_api.py +++ b/ebcpy/simulationapi/dymola.py @@ -3,49 +3,29 @@ import sys import os -import shutil import pathlib -import warnings import atexit +import shutil +import warnings import json -from typing import Union, List -from pydantic import Field +from typing import Union, List, Optional import pandas as pd from ebcpy import TimeSeriesData from ebcpy.modelica import manipulate_ds -from ebcpy.simulationapi import SimulationSetup, SimulationAPI, \ - SimulationSetupClass, Variable +from ebcpy.simulationapi import Variable from ebcpy.utils.conversion import convert_tsd_to_modelica_txt +from ebcpy.simulationapi.config import ExperimentConfigDymola, SimulationSetupDymola +from ebcpy.simulationapi.config import ExperimentConfigurationClass, SimulationSetupClass +from ebcpy.simulationapi import ContinuousSimulation +from ebcpy.simulationapi import Model -class DymolaSimulationSetup(SimulationSetup): - """ - Adds ``tolerance`` to the list of possible - setup fields. - """ - tolerance: float = Field( - title="tolerance", - default=0.0001, - description="Tolerance of integration" - ) - - _default_solver = "Dassl" - _allowed_solvers = ["Dassl", "Euler", "Cerk23", "Cerk34", "Cerk45", - "Esdirk23a", "Esdirk34a", "Esdirk45a", "Cvode", - "Rkfix2", "Rkfix3", "Rkfix4", "Lsodar", - "Radau", "Dopri45", "Dopri853", "Sdirk34hw"] - - -class DymolaAPI(SimulationAPI): +class DymolaAPI(ContinuousSimulation): """ API to a Dymola instance. - :param str,os.path.normpath cd: - Dirpath for the current working directory of dymola - :param str model_name: - Name of the model to be simulated - :param list packages: - List with path's to the packages needed to simulate the model + :param dict config: + Dict with configuration :keyword Boolean show_window: True to show the Dymola window. Default is False :keyword Boolean modify_structural_parameters: @@ -102,17 +82,18 @@ class DymolaAPI(SimulationAPI): >>> from ebcpy import DymolaAPI >>> # Specify the model name >>> model_name = "Modelica.Thermal.FluidHeatFlow.Examples.PumpAndValve" - >>> dym_api = DymolaAPI(cd=os.getcwd(), - >>> model_name=model_name, - >>> packages=[], + >>> dym_api = DymolaAPI(config={'cd': os.getcwd(), + >>> 'model_name': model_name}, >>> show_window=True) - >>> dym_api.sim_setup = {"start_time": 100, - >>> "stop_time": 200} + >>> dym_api.set_sim_setup({"start_time": 100, + >>> "stop_time": 200}) >>> dym_api.simulate() >>> dym_api.close() """ - _sim_setup_class: SimulationSetupClass = DymolaSimulationSetup + + _exp_config_class: ExperimentConfigurationClass = ExperimentConfigDymola + _sim_setup_class: SimulationSetupClass = SimulationSetupDymola _items_to_drop = ["pool", "dymola", "_dummy_dymola_instance"] dymola = None # Default simulation setup @@ -128,9 +109,14 @@ class DymolaAPI(SimulationAPI): "dymola_version" ] - def __init__(self, cd, model_name, packages=None, **kwargs): + def __init__(self, config: Optional[dict] = None, n_cpu: int = 1, **kwargs): """Instantiate class objects.""" + config = self._check_config(config, **kwargs) # generate config out of outdated arguments + self.config = self._exp_config_class.parse_obj(config) + packages = self.config.packages + self.dymola = None # Avoid key-error in get-state. Instance attribute needs to be there. + # Update kwargs with regard to what kwargs are supported. self.extract_variables = kwargs.pop("extract_variables", True) self.fully_initialized = False @@ -160,9 +146,8 @@ def __init__(self, cd, model_name, packages=None, **kwargs): if self.mos_script_post is not None: self.mos_script_post = self._make_modelica_normpath(self.mos_script_post) - super().__init__(cd=cd, - model_name=model_name, - n_cpu=kwargs.pop("n_cpu", 1)) + super().__init__(model_name=self.config.model_name, + n_cpu=n_cpu) # First import the dymola-interface dymola_path = kwargs.pop("dymola_path", None) @@ -293,8 +278,9 @@ def simulate(self, Example: Changing a record in a model: - >>> sim_api.simulate( - >>> parameters={"parameterPipe": "AixLib.DataBase.Pipes.PE_X.DIN_16893_SDR11_d160()"}, + >>> dym_api.simulate( + >>> parameters={"parameterPipe": + >>> "AixLib.DataBase.Pipes.PE_X.DIN_16893_SDR11_d160()"}, >>> structural_parameters=["parameterPipe"]) """ @@ -475,8 +461,9 @@ def _single_simulation(self, kwargs): # Internally convert output Interval to number of intervals # (Required by function simulateMultiResultsModel - number_of_intervals = (self.sim_setup.stop_time - self.sim_setup.start_time) / \ - self.sim_setup.output_interval + number_of_intervals = \ + (self.sim_setup.stop_time - self.sim_setup.start_time) / \ + self.sim_setup.output_interval if int(number_of_intervals) != number_of_intervals: raise ValueError( "Given output_interval and time interval did not yield " @@ -644,9 +631,12 @@ def import_initial(self, filepath): else: raise Exception("Could not load dsfinal into Dymola.") - @SimulationAPI.cd.setter + @Model.cd.setter def cd(self, cd): """Set the working directory to the given path""" + # update config and thereby trigger pydantic validator + self._update_config({'cd': cd}) + # set attribute self._cd = cd if self.dymola is None: # Not yet started return @@ -786,8 +776,8 @@ def _open_dymola_interface(self): return DymolaInterface(showwindow=self.show_window, dymolapath=self.dymola_exe_path) except ImportError as error: - raise ImportError("Given dymola-interface could not be " - "loaded:\n %s" % self.dymola_interface_path) from error + raise ImportError(f"Given dymola-interface could not be " + f"loaded:\n {self.dymola_interface_path}") from error except DymolaConnectionException as error: raise ConnectionError(error) from error @@ -796,20 +786,19 @@ def to_dict(self): Store the most relevant information of this class into a dictionary. This may be used for future configuration. - :return: dict config: + :return: dict dym_config: Dictionary with keys to re-init this class. """ - # Convert Path to str to enable json-dumping - config = {"cd": str(self.cd), - "packages": [str(pack) for pack in self.packages], - "model_name": self.model_name, - "type": "DymolaAPI", - } + dym_config = {"cd": self.cd, + "packages": self.packages, + "model_name": self.model_name, + "type": "DymolaAPI", + } # Update kwargs - config.update({kwarg: self.__dict__.get(kwarg, None) + dym_config.update({kwarg: self.__dict__.get(kwarg, None) for kwarg in self._supported_kwargs}) - return config + return dym_config def get_packages(self): """ @@ -836,19 +825,19 @@ def save_for_reproduction( path: pathlib.Path = None, files: list = None, save_total_model: bool = True, - export_fmu: bool = True + export_fmu: bool = True, + **kwargs + ): """ Additionally to the basic reproduction, add info for Dymola packages. - Content which is saved: - DymolaAPI configuration - Information on Dymola: Version, flags - All loaded packages - Total model, if save_total_model = True - FMU, if export_fmu = True - :param bool save_total_model: True to save the total model :param bool export_fmu: @@ -891,7 +880,8 @@ def save_for_reproduction( continue files.extend(repo_info.pop("difference_files")) - pack_path = str(pack_path) + "; " + "; ".join([f"{key}: {value}" for key, value in repo_info.items()]) + pack_path = str(pack_path) + "; " \ + + "; ".join([f"{key}: {value}" for key, value in repo_info.items()]) break package_infos.append(str(pack_path)) files.append(ReproductionFile( @@ -929,7 +919,8 @@ def save_for_reproduction( return super().save_for_reproduction( title=title, path=path, - files=files + files=files, + **kwargs ) def _save_to_fmu(self, fail_on_error): @@ -1111,14 +1102,14 @@ def _check_dymola_instances(self): except psutil.AccessDenied: continue if counter >= self._critical_number_instances: - warnings.warn("There are currently %s Dymola-Instances " - "running on your machine!" % counter) + warnings.warn("There are currently {counter} Dymola-Instances " + "running on your machine!") @staticmethod def _alter_model_name(parameters, model_name, structural_params): """ Creates a modifier for all structural parameters, - based on the modelname and the initalNames and values. + based on the modelname and the initialNames and values. :param dict parameters: Parameters of the simulation @@ -1147,7 +1138,6 @@ def _alter_model_name(parameters, model_name, structural_params): def _check_restart(self): """Restart Dymola every n_restart iterations in order to free memory""" - if self.sim_counter == self.n_restart: self.logger.info("Closing and restarting Dymola to free memory") self.close() @@ -1155,3 +1145,34 @@ def _check_restart(self): self.sim_counter = 1 else: self.sim_counter += 1 + + def _check_config(self, cfg, **kwargs): + """ + Checks if instead of a config dict, the user is using the outdated arguments + 'model_name' and 'cd' or 'packages' for initialization of the dymola api. + To provide backwards-compatibility the required config is constructed + out of these arguments (at least if arguments are provided with key). + """ + if not cfg: + cd_depr = kwargs.pop('cd', None) + model_name_depr = kwargs.pop('model_name', None) + packages_depr = kwargs.pop('packages', None) + if model_name_depr is not None and cd_depr is not None: + warnings.warn(f"Arguments 'model_name', 'cd' and 'packages' will be depreciated " + f"in future versions. " + f"Please use a configuration instead and consider " + f"the available fields: " + f"{self.get_experiment_config_fields()}", FutureWarning) + if packages_depr is not None: + return {'model_name': model_name_depr, + 'cd': cd_depr, + 'packages': packages_depr + } + return {'model_name': model_name_depr, + 'cd': cd_depr + } + raise TypeError(f"No configuration given for instantiation. " + f"Please use the 'config' argument and " + f"consider the available fields: " + f"{self.get_experiment_config_fields()}") + return cfg diff --git a/ebcpy/simulationapi/fmu.py b/ebcpy/simulationapi/fmu.py index 15ce0e8b..1e1c2d72 100644 --- a/ebcpy/simulationapi/fmu.py +++ b/ebcpy/simulationapi/fmu.py @@ -1,120 +1,253 @@ """Module for classes using a fmu to -simulate models.""" +simulate models. It contains FMU base functionalities, +and an api for continuous and for discrete fmu simulation.""" import os import logging import pathlib -import atexit import shutil -from typing import List, Union - +import atexit +import warnings +from typing import Dict, List, Union, Optional import fmpy from fmpy.model_description import read_model_description -from pydantic import Field -import pandas as pd +from pydantic import FilePath import numpy as np - -from ebcpy import simulationapi, TimeSeriesData -from ebcpy.simulationapi import SimulationSetup, SimulationSetupClass, Variable +import pandas as pd +from ebcpy import TimeSeriesData +from ebcpy.simulationapi import ContinuousSimulation, DiscreteSimulation +from ebcpy.simulationapi import Variable +from ebcpy.simulationapi.config import ExperimentConfigFMU_Continuous, SimulationSetupFMU_Continuous +from ebcpy.simulationapi.config import ExperimentConfigFMU_Discrete, SimulationSetupFMU_Discrete +from ebcpy.simulationapi.config import ExperimentConfigurationClass, SimulationSetupClass +from ebcpy.utils.interpolation import interp_df from ebcpy.utils.reproduction import CopyFile -# pylint: disable=broad-except - -class FMU_Setup(SimulationSetup): +class FMU: """ - Add's custom setup parameters for simulating FMU's - to the basic `SimulationSetup` + Base class for simulation using the fmpy library and + a functional mockup interface as a model input. + This class has to be inherited besides the Model base class. + + :param str file_path: + File path to the fmu file. + :param str cd: + Working directory in which the fmu files are extracted. + :param log_fmu: + Whether to print fmu messages or not. """ - timeout: float = Field( - title="timeout", - default=np.inf, - description="Timeout after which the simulation stops." - ) + _fmu_instance = None + _unzip_dir: Optional[str] = None - _default_solver = "CVode" - _allowed_solvers = ["CVode", "Euler"] + def __init__(self, file_path: str, cd: str, log_fmu: bool = True): + self._unzip_dir = None + self._fmu_instance = None + path = file_path + if isinstance(file_path, pathlib.Path): + path = str(file_path) + if not path.lower().endswith(".fmu"): + raise ValueError(f"{file_path} is not a valid fmu file!") + self.path = path + if cd is not None: + self.cd = cd + else: + self.cd = os.path.dirname(path) + self.log_fmu = log_fmu + self._var_refs: Optional[dict] = None # Dict of variables and their references + self._model_description = None + self._fmi_type = None + self._single_unzip_dir: Optional[str] = None + # initialize logger + self.logger = None + # initialize model variables + self.inputs: Dict[str, Variable] = {} # Inputs of model + self.outputs: Dict[str, Variable] = {} # Outputs of model + self.parameters: Dict[str, Variable] = {} # Parameter of model + self.states: Dict[str, Variable] = {} # States of model + # Placeholders for variables that are required by subclass + # todo: self.n_cpu, self.use_mp and self.pool are not connected with FMU class + self.n_cpu = None + self.use_mp = None + self.pool = None + def _custom_logger(self, component, instanceName, status, category, message): + """ Print the FMU's log messages to the command line (works for both FMI 1.0 and 2.0) """ + # pylint: disable=unused-argument, invalid-name + label = ['OK', 'WARNING', 'DISCARD', 'ERROR', 'FATAL', 'PENDING'][status] + _level_map = {'OK': logging.INFO, + 'WARNING': logging.WARNING, + 'DISCARD': logging.WARNING, + 'ERROR': logging.ERROR, + 'FATAL': logging.FATAL, + 'PENDING': logging.FATAL} + if self.log_fmu: + self.logger.log(level=_level_map[label], msg=message.decode("utf-8")) -class FMU_API(simulationapi.SimulationAPI): - """ - Class for simulation using the fmpy library and - a functional mockup interface as a model input. + def find_vars(self, start_str: str): + """ + Returns all variables starting with start_str + . + :param str start_str: + All variables starting with start_str are considered + :return: + List: List of variables that fulfill the search criteria + """ - :keyword bool log_fmu: - Whether to print fmu messages or not. + key = list(self._var_refs.keys()) + key_list = [] + for _, k in enumerate(key): + if k.startswith(start_str): + key_list.append(k) + return key_list - Example: + def set_variables(self, var_dict: dict): + """ + Sets multiple variables. + :param dict var_dict: + Dictionary with variable name in key and variable value in value + """ - >>> import matplotlib.pyplot as plt - >>> from ebcpy import FMU_API - >>> # Select any valid fmu. Replace the line below if - >>> # you don't have this file on your device. - >>> model_name = "Path to your fmu" - >>> fmu_api = FMU_API(model_name) - >>> fmu_api.sim_setup = {"stop_time": 3600} - >>> result_df = fmu_api.simulate() - >>> fmu_api.close() - >>> # Select an exemplary column - >>> col = result_df.columns[0] - >>> plt.plot(result_df[col], label=col) - >>> _ = plt.legend() - >>> _ = plt.show() + for key, value in var_dict.items(): + var = self._var_refs[key] + var_ref = [var.valueReference] - .. versionadded:: 0.1.7 - """ - _items_to_drop = ["pool", "_fmu_instance", "_unzip_dir"] - _fmu_instance = None - _unzip_dir: str = None - _sim_setup_class: SimulationSetupClass = FMU_Setup - _type_map = { - float: np.double, - bool: np.bool_, - int: np.int_ - } + if var.type == 'Real': + self._fmu_instance.setReal(var_ref, [float(value)]) + elif var.type in ['Integer', 'Enumeration']: + self._fmu_instance.setInteger(var_ref, [int(value)]) + elif var.type == 'Boolean': + self._fmu_instance.setBoolean(var_ref, [value == 1.0 or value or value == "True"]) + else: + raise Exception(f"Unsupported type: {var.type}") - def __init__(self, cd, model_name, **kwargs): - """Instantiate class parameters""" - # Init instance attributes - self._model_description = None - self._fmi_type = None - self._unzip_dir = None - self._fmu_instance = None - self.log_fmu = kwargs.get("log_fmu", True) - self._single_unzip_dir: str = None - - if isinstance(model_name, pathlib.Path): - model_name = str(model_name) - if not model_name.lower().endswith(".fmu"): - raise ValueError(f"{model_name} is not a valid fmu file!") - if cd is None: - cd = os.path.dirname(model_name) - super().__init__(cd, model_name, **kwargs) - # Register exit option - atexit.register(self.close) + def read_variables(self, vrs_list: list): + """ + Reads multiple variable values + :param list vrs_list: + List of variables to be read from FMU + :return: + Dict: Dictionary with requested variables and their values + """ + + # initialize dict for results of simulation step + res = {} + + for name in vrs_list: + var = self._var_refs[name] + var_ref = [var.valueReference] + + if var.type == 'Real': + res[name] = self._fmu_instance.getReal(var_ref)[0] + elif var.type in ['Integer', 'Enumeration']: + res[name] = self._fmu_instance.getInteger(var_ref)[0] + elif var.type == 'Boolean': + value = self._fmu_instance.getBoolean(var_ref)[0] + res[name] = value != 0 + else: + raise Exception(f"Unsupported type: {var.type}") + + return res def _update_model(self): # Setup the fmu instance self.setup_fmu_instance() - def close(self): + def setup_fmu_instance(self): """ - Closes the fmu. - - :return: bool - True on success + Manually set up and extract the data to + avoid this step in the simulate function. """ - # Close MP of super class - super().close() - # Close if single process - if not self.use_mp: - if not self._fmu_instance: - return # Already closed - self._single_close(fmu_instance=self._fmu_instance, - unzip_dir=self._unzip_dir) - self._unzip_dir = None - self._fmu_instance = None + self.logger.info("Extracting fmu and reading fmu model description") + self._single_unzip_dir = os.path.join(self.cd, + os.path.basename(self.path)[:-4] + "_extracted") + os.makedirs(self._single_unzip_dir, exist_ok=True) + self._single_unzip_dir = fmpy.extract(self.path, + unzipdir=self._single_unzip_dir) + self._model_description = read_model_description(self._single_unzip_dir, + validate=True) + + if self._model_description.coSimulation is None: + self._fmi_type = 'ModelExchange' + else: + self._fmi_type = 'CoSimulation' + + # Create dict of variable names with variable references from model description + self._var_refs = {} + for variable in self._model_description.modelVariables: + self._var_refs[variable.name] = variable + + _types = { + "Enumeration": int, + "Integer": int, + "Real": float, + "Boolean": bool, + "String": str + } + # Extract inputs, outputs & tuner (lists from parent classes will be appended) + for var in self._model_description.modelVariables: + if var.start is not None: + var.start = _types[var.type](var.start) + + _var_ebcpy = Variable( + min=var.min, + max=var.max, + value=var.start, + type=_types[var.type] + ) + if var.causality == 'input': + self.inputs[var.name] = _var_ebcpy + elif var.causality == 'output': + self.outputs[var.name] = _var_ebcpy + elif var.causality in ('parameter', 'calculatedParameter'): + self.parameters[var.name] = _var_ebcpy + elif var.causality == 'local': + self.states[var.name] = _var_ebcpy + else: + self.logger.error(f"Could not map causality {var.causality}" + f" to any variable type.") + print() + + if self.use_mp: + self.logger.info(f"Extracting fmu {self.n_cpu} times for " + f"multiprocessing on {self.n_cpu} processes") + self.pool.map( + self._setup_single_fmu_instance, + [True for _ in range(self.n_cpu)] + ) + self.logger.info("Instantiated fmu's on all processes.") + else: + self._setup_single_fmu_instance(use_mp=False) + + def _setup_single_fmu_instance(self, use_mp): + if use_mp: + wrk_idx = self.worker_idx + if self._fmu_instance is not None: + return True + unzip_dir = self._single_unzip_dir + f"_worker_{wrk_idx}" + fmpy.extract(self.path, + unzipdir=unzip_dir) + else: + wrk_idx = 0 + unzip_dir = self._single_unzip_dir + + self.logger.info("Instantiating fmu for worker %s", wrk_idx) + fmu_instance = fmpy.instantiate_fmu( + unzipdir=unzip_dir, + model_description=self._model_description, + fmi_type=self._fmi_type, + visible=False, + debug_logging=False, + logger=self._custom_logger, + fmi_call_logger=None) + if use_mp: + FMU._fmu_instance = fmu_instance + FMU._unzip_dir = unzip_dir + else: + self._fmu_instance = fmu_instance + self._unzip_dir = unzip_dir + return True def _single_close(self, **kwargs): fmu_instance = kwargs["fmu_instance"] @@ -137,18 +270,59 @@ def _single_close(self, **kwargs): self.logger.error("Could not delete unzipped fmu " "in location %s. Delete it yourself.", unzip_dir) - def _close_multiprocessing(self, _): - """Small helper function""" - idx_worker = self.worker_idx - if self._fmu_instance is None: - return # Already closed - self.logger.error(f"Closing fmu for worker {idx_worker}") - self._single_close(fmu_instance=self._fmu_instance, - unzip_dir=self._unzip_dir) - self._unzip_dir = None - self._fmu_instance = None - FMU_API._unzip_dir = None - FMU_API._fmu_instance = None + +class FMU_API(FMU, ContinuousSimulation): + """ + Class for continuous simulation using the fmpy library and + a functional mockup interface as a model input. + + :param dict config: + Dictionary with experiment configuration + :param int n_cpu: + Number of cores to be used by simulation. + If None is given, single core will be used. + Maximum number equals the cpu count of the device. + :param bool log_fmu: + Whether to print fmu messages or not. + + Example: + >>> import matplotlib.pyplot as plt + >>> from ebcpy import FMU_API + >>> # Select any valid fmu. Replace the line below if + >>> # you don't have this file on your device. + >>> path = "Path to your fmu" + >>> fmu_api = FMU_API({'file_path': path}) + >>> fmu_api.set_sim_setup({"stop_time": 3600}) + >>> result_df = fmu_api.simulate() + >>> fmu_api.close() + >>> # Select an exemplary column + >>> col = result_df.columns[0] + >>> plt.plot(result_df[col], label=col) + >>> _ = plt.legend() + >>> _ = plt.show() + """ + + _sim_setup_class: SimulationSetupClass = SimulationSetupFMU_Continuous + _exp_config_class: ExperimentConfigurationClass = ExperimentConfigFMU_Continuous + _items_to_drop = ["pool", "_fmu_instance", "_unzip_dir"] + _type_map = { + float: np.double, + bool: np.bool_, + int: np.int_ + } + + def __init__(self, + config: Optional[dict] = None, + n_cpu: int = 1, + log_fmu: bool = True, + **kwargs): + config = self._check_config(config, **kwargs) # generate config out of outdated arguments + self.config = self._exp_config_class.parse_obj(config) + + FMU.__init__(self, file_path=self.config.file_path, cd=self.config.cd, log_fmu=log_fmu) + ContinuousSimulation.__init__(self, model_name=self.config.file_path, n_cpu=n_cpu) + # Register exit option + atexit.register(self.close) def simulate(self, parameters: Union[dict, List[dict]] = None, @@ -269,112 +443,426 @@ def _single_simulation(self, kwargs): tsd = TimeSeriesData(df, default_tag="sim") return tsd - def setup_fmu_instance(self): + def close(self): """ - Manually set up and extract the data to - avoid this step in the simulate function. + Closes the fmu. + + :return: bool + True on success """ - self.logger.info("Extracting fmu and reading fmu model description") - # First load model description and extract variables - self._single_unzip_dir = os.path.join(self.cd, - os.path.basename(self.model_name)[:-4] + "_extracted") - os.makedirs(self._single_unzip_dir, exist_ok=True) - self._single_unzip_dir = fmpy.extract(self.model_name, - unzipdir=self._single_unzip_dir) - self._model_description = read_model_description(self._single_unzip_dir, - validate=True) + # Close MP of super class + ContinuousSimulation.close(self) + # Close if single process + if not self.use_mp: + if not self._fmu_instance: + return # Already closed + self.logger.info(f"Closing fmu {self._model_description.modelName} ") + self._single_close(fmu_instance=self._fmu_instance, + unzip_dir=self._unzip_dir) + self._unzip_dir = None + self._fmu_instance = None - if self._model_description.coSimulation is None: - self._fmi_type = 'ModelExchange' - else: - self._fmi_type = 'CoSimulation' + def _close_multiprocessing(self, _): + """Small helper function""" + idx_worker = self.worker_idx + if self._fmu_instance is None: + return # Already closed + self.logger.info(f"Closing fmu {self._model_description.modelName} for worker {idx_worker}") + self._single_close(fmu_instance=self._fmu_instance, + unzip_dir=self._unzip_dir) + self._unzip_dir = None + self._fmu_instance = None + FMU_API._unzip_dir = None + FMU_API._fmu_instance = None - self.logger.info("Reading model variables") + def save_for_reproduction(self, + title: str, + path: pathlib.Path = None, + files: list = None, + **kwargs): + """ + Additionally to the basic reproduction, add info + for FMU files. + """ + if files is None: + files = [] + files.append(CopyFile( + filename="FMU/" + pathlib.Path(self.model_name).name, + sourcepath=pathlib.Path(self.model_name), + remove=False + )) + return super().save_for_reproduction( + title=title, + path=path, + files=files, + **kwargs + ) - _types = { - "Enumeration": int, - "Integer": int, - "Real": float, - "Boolean": bool, - "String": str - } - # Extract inputs, outputs & tuner (lists from parent classes will be appended) - for var in self._model_description.modelVariables: - if var.start is not None: - var.start = _types[var.type](var.start) + def _check_config(self, cfg, **kwargs): + """ + Checks if instead of a config dict, the user is using the + outdated arguments 'cd' and 'model_name' for initialization of the fmu api. + To provide backwards-compatibility the required config + is constructed out of these arguments (at least if arguments are provided with key). + """ + if not cfg: + cd_depr = kwargs.pop('cd', None) + model_name_depr = kwargs.pop('model_name', None) + if model_name_depr is not None: + warnings.warn(f"Arguments 'model_name' and 'cd' will be depreciated " + f"in future versions. " + f"Please use a configuration instead " + f"and consider the available fields: " + f"{self.get_experiment_config_fields()}", FutureWarning) + if cd_depr is not None: + return {'file_path': model_name_depr, + 'cd': cd_depr + } + return {'file_path': model_name_depr + } + raise TypeError(f"No configuration given for instantiation. " + f"Please use the 'config' argument and " + f"consider the available fields: " + f"{self.get_experiment_config_fields()}") + return cfg + + +class FMUDiscrete(FMU, DiscreteSimulation): + """ + Class for discrete/stepwise simulation using the fmpy library and + a functional mockup interface as a model input. - _var_ebcpy = Variable( - min=var.min, - max=var.max, - value=var.start, - type=_types[var.type] - ) - if var.causality == 'input': - self.inputs[var.name] = _var_ebcpy - elif var.causality == 'output': - self.outputs[var.name] = _var_ebcpy - elif var.causality == 'parameter' or var.causality == 'calculatedParameter': - self.parameters[var.name] = _var_ebcpy - elif var.causality == 'local': - self.states[var.name] = _var_ebcpy - else: - self.logger.error(f"Could not map causality {var.causality}" - f" to any variable type.") + :param dict config: + Dictionary with experiment configuration + :param bool log_fmu: + Whether to print fmu messages or not. - if self.use_mp: - self.logger.info("Extracting fmu %s times for " - "multiprocessing on %s processes", - self.n_cpu, self.n_cpu) - self.pool.map( - self._setup_single_fmu_instance, - [True for _ in range(self.n_cpu)] - ) - self.logger.info("Instantiated fmu's on all processes.") + Example: + + >>> import matplotlib.pyplot as plt + >>> from ebcpy import FMUDiscrete + >>> # Select any valid fmu. Replace the line below if + >>> # you don't have this file on your device. + >>> path = "Path to your fmu" + >>> fmu_api = FMUDiscrete({'file_path': path}) + >>> fmu_api.set_sim_setup({"stop_time": 3600}) + >>> # initialize FMU for discrete simulation + >>> fmu_api.initialize_discrete_sim() + >>> # simulation loop (typically there is interaction to other FMUs or python code) + >>> # for straight simulation use api for continuous fmu simulation + >>> while not fmu_api.finished: + >>> fmu_api.do_step() + >>> result_df = fmu_api.get_results() + >>> fmu_api.close() + >>> # Select an exemplary column + >>> col = result_df.columns[0] + >>> plt.plot(result_df[col], label=col) + >>> _ = plt.legend() + >>> _ = plt.show() +""" + + _sim_setup_class: SimulationSetupClass = SimulationSetupFMU_Discrete + _exp_config_class: ExperimentConfigurationClass = ExperimentConfigFMU_Discrete + objs = [] # to use the close_all method + + def __init__(self, config: dict, log_fmu: bool = True): + FMUDiscrete.objs.append(self) + self.config = self._exp_config_class.parse_obj(config) + + FMU.__init__(self, file_path=self.config.file_path, cd=self.config.cd, log_fmu=log_fmu) + self.use_mp = False # no mp for stepwise FMU simulation + # in case of fmu: file path, in case of dym: model_name are passed + DiscreteSimulation.__init__(self, model_name=self.config.file_path) + + # define input data (can be adjusted during simulation using the setter) + # calling the setter to distinguish depending on type and filtering + self._input_data_on_grid = False # if false the input data does not + # cover the required grid. Need to hold last value or interpolate + self.input_table = self.config.input_data + # if false, last value of input table is hold, otherwise interpolated + self.interp_input_table = False + + def get_results(self, tsd_format: bool = False): + """ + returns the simulation results either as pd.DataFrame or as TimeSeriesData + :param bool tsd_format: + Whether to return as TimeSeriesData or pd.Dataframe + :return: + Results as TimeSeriesData or pd.Dataframe + """ + + if not tsd_format: + results = self.sim_res_df else: - self._setup_single_fmu_instance(use_mp=False) + results = TimeSeriesData(self.sim_res_df, default_tag="sim") + results.rename_axis(['Variables', 'Tags'], axis='columns') + results.index.names = ['Time'] + return results + + @classmethod + def close_all(cls): + """close multiple FMUs at once. Useful for co-simulation.""" + for obj in cls.objs: + obj.close() + + @property + def input_table(self): + """input data that holds for longer parts of the simulation""" + return self._input_table + + @input_table.setter + def input_table(self, inp: Union[FilePath, pd.DataFrame, TimeSeriesData]): + """setter allows the input data to change during discrete simulation""" + # update config to trigger pydantic checks + self._update_config({'input_data': inp}) + if inp is not None: + input_table_raw = None + if isinstance(inp, (str, pathlib.Path)): + if not str(inp).endswith('csv'): + raise TypeError( + f"input data {inp} is not a .csv file. " + f"Instead of passing a file " + f"consider passing a pd.Dataframe or TimeSeriesData object") + input_table_raw = pd.read_csv(inp, index_col='time') + else: # pd frame or tsd object; wrong type already caught by pydantic + if isinstance(inp, TimeSeriesData): + input_table_raw = inp.to_df(force_single_index=True) + elif isinstance(inp, pd.DataFrame): + input_table_raw = inp + + # check unsupported vars: + self.check_unsupported_variables(input_table_raw.columns.to_list(), "inputs") + # only consider columns in input table that refer to inputs of the FMU + input_matches = list(set(self.inputs.keys()).intersection(set(input_table_raw.columns))) + self._input_table = input_table_raw[input_matches] + + # check if the input data satisfies the whole time grid. + self._check_input_data_grid() + else: + print('No long-term input data set! ' + 'Setter method can still be used to set input data to "input_table" attribute') + self._input_table = None - def _setup_single_fmu_instance(self, use_mp): - if use_mp: - wrk_idx = self.worker_idx - if self._fmu_instance is not None: - return True - unzip_dir = self._single_unzip_dir + f"_worker_{wrk_idx}" - fmpy.extract(self.model_name, - unzipdir=unzip_dir) + def read_variables(self, vrs_list: list): + """ + Extends the read_variables() function of the FMU class by + adding the current time to the results read from the fmu. + + Reads multiple variable values + + :param list vrs_list: + List of variables to be read from FMU + :return: + Dict: Dictionary with requested variables and their values + the current time + """ + + res = super().read_variables(vrs_list) + + # add current time + res['SimTime'] = self.current_time + + return res + + def initialize_discrete_sim(self, + parameters: dict = None, + init_values: dict = None + ): + """ + Initialisation of FMU. To be called before stepwise simulation. + Parameters and initial values can be set. + + :param dict parameters: + Name (key) and value (value) of parameter to be set + :param init_values: + Name (key) and value (value) of initial value to be set + + """ + + # THE FOLLOWING STEPS OF FMU INITIALISATION ALREADY COVERED BY INSTANTIATING FMU API: + # - Read model description + # - extract .fmu file + # - Create FMU2 Slave + # - instantiate fmu + + # check if input valid + if parameters is not None: + self.check_unsupported_variables(list(parameters.keys()), "parameters") + if init_values is not None: + self.check_unsupported_variables(list(init_values.keys()), "variables") + + # Reset FMU instance + self._fmu_instance.reset() + + # Set up experiment + self._fmu_instance.setupExperiment(startTime=self.sim_setup.start_time, + stopTime=self.sim_setup.stop_time, + tolerance=self.sim_setup.tolerance) + + # initialize current time and communication step size for stepwise FMU simulation + self.current_time = self.sim_setup.start_time + + # Set parameters and initial values + if init_values is None: + init_values = {} + if parameters is None: + parameters = {} + # merge initial values and parameters in one dict as they are treated similarly + start_values = init_values.copy() + start_values.update(parameters) + + # write parameters and initial values to FMU + self.set_variables(var_dict=start_values) + + # Finalise initialisation + self._fmu_instance.enterInitializationMode() + self._fmu_instance.exitInitializationMode() + + # Initialize dataframe to store results + res = self.read_variables(vrs_list=self.result_names) + + self.sim_res_df = pd.DataFrame(res, + index=[res['SimTime']], + columns=self.result_names + ) + + self.logger.info(f"FMU '{self._model_description.modelName}' " + f"initialized for discrete simulation") + + # initialize status indicator + self.finished = False + + # reset step count + self.step_count = 0 + + def step_only(self): + """ + Perform simulation step, return True if stop time reached. + """ + # check if stop time is reached + if self.current_time < self.sim_setup.stop_time: + if self.step_count == 0: + self.logger.info(f"Starting simulation of FMU " + f"'{self._model_description.modelName}'") + # do simulation step + self._fmu_instance.doStep( + currentCommunicationPoint=self.current_time, + communicationStepSize=self.sim_setup.comm_step_size) + # step count + self.step_count += 1 + # update current time and determine status + self.current_time += self.sim_setup.comm_step_size + self.finished = False else: - wrk_idx = 0 - unzip_dir = self._single_unzip_dir + self.finished = True + self.logger.info(f"Simulation of FMU '{self._model_description.modelName}' finished") + return self.finished + + def do_step(self, input_step: dict = None, close_when_finished: bool = False): + """ + Wrapper function for step_only. + Write values from input_step and attribute input_table to fmu, + performs simulation step, + read from fmu right after simulation step (variables in result_names attribute considered). + + :param dict input_step: + Input variable name (key) and value (value) to be set to fmu before step + :param bool close_when_finished: + Whether to close fmu when stop time is reached + :return: + Dict: Results after the simulation step + """ + # check for unsupported input + if input_step is not None: + self.check_unsupported_variables(list(input_step.keys()), 'inputs') + # collect inputs + # get input from input table (overwrite with specific input for single step) + single_input = {} + if self.input_table is not None: + # extract value from input time table + if self._input_data_on_grid: + # In the case that all indices within the required grid (req_grid) are present + # values can be directly accessed. + # There is no need to find the last available index or interpolation. + single_input = self.input_table.loc[self.current_time].to_dict() + else: + single_input = interp_df(t_act=self.current_time, + df=self.input_table, + interpolate=self.interp_input_table) + + if input_step is not None: + # overwrite with input for step + single_input.update(input_step) + + # write inputs to fmu + if single_input: + self.set_variables(var_dict=single_input) + + # perform simulation step + self.step_only() + + # read results + res = self.read_variables(vrs_list=self.result_names) + if not self.finished: + # append + if self.current_time % self.sim_setup.output_interval == 0: + self.sim_res_df = pd.concat( # because frame.append will be depreciated + [self.sim_res_df, + pd.DataFrame.from_records([res], + index=[res['SimTime']], + columns=self.sim_res_df.columns)]) - self.logger.info("Instantiating fmu for worker %s", wrk_idx) - fmu_instance = fmpy.instantiate_fmu( - unzipdir=unzip_dir, - model_description=self._model_description, - fmi_type=self._fmi_type, - visible=False, - debug_logging=False, - logger=self._custom_logger, - fmi_call_logger=None) - if use_mp: - FMU_API._fmu_instance = fmu_instance - FMU_API._unzip_dir = unzip_dir else: - self._fmu_instance = fmu_instance - self._unzip_dir = unzip_dir - return True + if close_when_finished: + self.close() + return res - def _custom_logger(self, component, instanceName, status, category, message): - """ Print the FMU's log messages to the command line (works for both FMI 1.0 and 2.0) """ - # pylint: disable=unused-argument, invalid-name - label = ['OK', 'WARNING', 'DISCARD', 'ERROR', 'FATAL', 'PENDING'][status] - _level_map = {'OK': logging.INFO, - 'WARNING': logging.WARNING, - 'DISCARD': logging.WARNING, - 'ERROR': logging.ERROR, - 'FATAL': logging.FATAL, - 'PENDING': logging.FATAL} - if self.log_fmu: - self.logger.log(level=_level_map[label], msg=message.decode("utf-8")) + def _set_result_names(self): + """ + Adds input names to list result_names in addition to outputs. + In discrete simulation the inputs are typically relevant. + """ + self.result_names = list(self.outputs.keys()) + list(self.inputs.keys()) + + def close(self): + """ Closes the fmu.""" + # No MP for discrete simulation + if not self._fmu_instance: + return # Already closed + self.logger.info(f"Closing fmu {self._model_description.modelName} ") + self._single_close(fmu_instance=self._fmu_instance, + unzip_dir=self._unzip_dir) + self._unzip_dir = None + self._fmu_instance = None + + def _check_input_data_grid(self): + """ + Checks whether the input data in the input_table attribute + covers the time grid specified by the sim_setup attribute. + """ + if hasattr(self, "_input_table") : + if self.input_table is not None: + # time grid defined by sim_setup + sim_setup_idx = list(np.arange(self.sim_setup.start_time, + self.sim_setup.stop_time + self.sim_setup.comm_step_size, + self.sim_setup.comm_step_size)) + if set(sim_setup_idx).issubset(set(self.input_table.index.tolist())): + self._input_data_on_grid = True + else: + self._input_data_on_grid = False + + def set_sim_setup(self, sim_setup): + """ + Extends the set_sim_setup method of the Model class by triggering the check, + whether the input data satisfies the time grid. + + Updates only those entries that are given as arguments. + """ + + super().set_sim_setup(sim_setup) + self._check_input_data_grid() + # todo: make class method out of it to consider multiple discrete fmu apis; + # todo: consider attribute interp_input data and input_data_on_grid def save_for_reproduction(self, title: str, path: pathlib.Path = None, @@ -394,5 +882,6 @@ def save_for_reproduction(self, return super().save_for_reproduction( title=title, path=path, - files=files + files=files, + **kwargs ) diff --git a/ebcpy/utils/conversion.py b/ebcpy/utils/conversion.py index 0ad65116..4cb3e367 100644 --- a/ebcpy/utils/conversion.py +++ b/ebcpy/utils/conversion.py @@ -5,7 +5,6 @@ import pathlib import scipy.io as spio import numpy as np -import pandas as pd from ebcpy.data_types import numeric_indexes, datetime_indexes diff --git a/ebcpy/utils/interpolation.py b/ebcpy/utils/interpolation.py new file mode 100644 index 00000000..bd5d9621 --- /dev/null +++ b/ebcpy/utils/interpolation.py @@ -0,0 +1,56 @@ +""" utility function(s) for interpolation and table lookup """ +import warnings +import pandas as pd +import numpy as np + + +def interp_df(t_act: float, df: pd.DataFrame, interpolate: bool = False) -> dict: + """ + Returns the values of the dataframe (row) at a given index. + If the index is not present in the dataframe, either the next lower index + is chosen or values are interpolated linearly. If the last or first index value is exceeded the + value is hold. In both cases a warning is printed. + + :param float t_act: + Time index of interest + :param pd.dataFrame df: + "Table" (pd.Dataframe) in which to lookup + :param bool interpolate: + Whether to interpolate (True) or chose the last available index (False) + :return: + Dict: Dictionary of column name (key) and value (value) at the selected index + """ + + # initialize dict that represents row in dataframe with interpolated or hold values + row = {} + + # catch values that are out of bound + if t_act < df.index[0]: + row.update(df.iloc[0].to_dict()) + warnings.warn( + f"Time {t_act} s is below the first entry of the dataframe {df.index[0]} s, " + f"which is hold. Please check input data!") + elif t_act >= df.index[-1]: + row.update(df.iloc[-1].to_dict()) + # a time matching the last index value causes + # problems with interpolation but should not raise a warning + if t_act > df.index[-1]: + warnings.warn( + f"Time {t_act} s is above the last entry of the dataframe {df.index[-1]} s, " + f"which is hold. Please check input data!") + # either hold value of last index or interpolate + else: + # look for next lower index + idx_l = df.index.get_indexer([t_act], method='pad')[0] # get_loc() depreciated + + # return values at lower index + if not interpolate: + row = df.iloc[idx_l].to_dict() + + # return interpolated values + else: + idx_r = idx_l + 1 + for column in df.columns: + row.update({column: np.interp(t_act, [df.index[idx_l], df.index[idx_r]], + df[column].iloc[idx_l:idx_r + 1])}) + return row diff --git a/examples/data/PI_1_bus.fmu b/examples/data/PI_1_bus.fmu new file mode 100644 index 00000000..383cb466 Binary files /dev/null and b/examples/data/PI_1_bus.fmu differ diff --git a/examples/data/ThermalZone_bus.fmu b/examples/data/ThermalZone_bus.fmu new file mode 100644 index 00000000..02cb4cda Binary files /dev/null and b/examples/data/ThermalZone_bus.fmu differ diff --git a/examples/data/ThermalZone_input.csv b/examples/data/ThermalZone_input.csv new file mode 100644 index 00000000..f5960438 --- /dev/null +++ b/examples/data/ThermalZone_input.csv @@ -0,0 +1,4322 @@ +time,bus.disturbance[1],bus.setPoint +0.0,278.15,290.15 +20.0,278.1500158654878,290.15 +40.0,278.1500634619177,290.15 +60.0,278.150142789189,290.15 +80.0,278.1502538471338,290.15 +100.0,278.1503966355173,290.15 +120.0,278.1505711540374,290.15 +140.0,278.15077740232493,290.15 +160.0,278.15101537994354,290.15 +180.0,278.15128508638986,290.15 +200.0,278.15158652109335,290.15 +220.0,278.1519196834164,290.15 +240.0,278.1522845726541,290.15 +260.0,278.1526811880347,290.15 +280.0,278.15310952871914,290.15 +300.0,278.15356959380136,290.15 +320.0,278.15406138230804,290.15 +340.0,278.15458489319894,290.15 +360.0,278.15514012536664,290.15 +380.0,278.1557270776365,290.15 +400.0,278.15634574876697,290.15 +420.0,278.15699613744926,290.15 +440.0,278.1576782423076,290.15 +460.0,278.15839206189906,290.15 +480.0,278.1591375947135,290.15 +500.0,278.159914839174,290.15 +520.0,278.1607237936363,290.15 +540.0,278.16156445638916,290.15 +560.0,278.16243682565414,290.15 +580.0,278.163340899586,290.15 +600.0,278.1642766762721,290.15 +620.0,278.165244153733,290.15 +640.0,278.1662433299221,290.15 +660.0,278.1672742027257,290.15 +680.0,278.16833676996316,290.15 +700.0,278.1694310293866,290.15 +720.0,278.17055697868136,290.15 +740.0,278.17171461546553,290.15 +760.0,278.1729039372903,290.15 +780.0,278.1741249416397,290.15 +800.0,278.17537762593093,290.15 +820.0,278.176661987514,290.15 +840.0,278.177978023672,290.15 +860.0,278.1793257316209,290.15 +880.0,278.18070510850987,290.15 +900.0,278.1821161514209,290.15 +920.0,278.1835588573692,290.15 +940.0,278.1850332233027,290.15 +960.0,278.1865392461026,290.15 +980.0,278.1880769225831,290.15 +1000.0,278.1896462494914,290.15 +1020.0,278.1912472235077,290.15 +1040.0,278.1928798412453,290.15 +1060.0,278.1945440992506,290.15 +1080.0,278.19623999400307,290.15 +1100.0,278.19796752191513,290.15 +1120.0,278.1997266793324,290.15 +1140.0,278.20151746253356,290.15 +1160.0,278.2033398677304,290.15 +1180.0,278.20519389106784,290.15 +1200.0,278.2070795286238,290.15 +1220.0,278.20899677640944,290.15 +1240.0,278.2109456303691,290.15 +1260.0,278.21292608638004,290.15 +1280.0,278.2149381402529,290.15 +1300.0,278.21698178773136,290.15 +1320.0,278.2190570244923,290.15 +1340.0,278.2211638461457,290.15 +1360.0,278.2233022482349,290.15 +1380.0,278.2254722262363,290.15 +1400.0,278.2276737755595,290.15 +1420.0,278.22990689154733,290.15 +1440.0,278.2321715694759,290.15 +1460.0,278.23446780455447,290.15 +1480.0,278.2367955919256,290.15 +1500.0,278.2391549266652,290.15 +1520.0,278.2415458037822,290.15 +1540.0,278.243968218219,290.15 +1560.0,278.24642216485114,290.15 +1580.0,278.2489076384877,290.15 +1600.0,278.25142463387084,290.15 +1620.0,278.25397314567607,290.15 +1640.0,278.25655316851237,290.15 +1660.0,278.25916469692186,290.15 +1680.0,278.26180772538015,290.15 +1700.0,278.2644822482962,290.15 +1720.0,278.26718826001235,290.15 +1740.0,278.26992575480426,290.15 +1760.0,278.27269472688107,290.15 +1780.0,278.2754951703853,290.15 +1800.0,278.2783270793928,290.15 +1820.0,278.2811904479131,290.15 +1840.0,278.284085269889,290.15 +1860.0,278.2870115391967,290.15 +1880.0,278.28996924964616,290.15 +1900.0,278.2929583949804,290.15 +1920.0,278.2959789688764,290.15 +1940.0,278.29903096494434,290.15 +1960.0,278.30211437672807,290.15 +1980.0,278.30522919770493,290.15 +2000.0,278.3083754212858,290.15 +2020.0,278.3115530408152,290.15 +2040.0,278.31476204957124,290.15 +2060.0,278.3180024407655,290.15 +2080.0,278.3212742075433,290.15 +2100.0,278.32457734298356,290.15 +2120.0,278.32791184009886,290.15 +2140.0,278.33127769183534,290.15 +2160.0,278.3346748910729,290.15 +2180.0,278.33810343062515,290.15 +2200.0,278.34156330323935,290.15 +2220.0,278.3450545015965,290.15 +2240.0,278.3485770183113,290.15 +2260.0,278.3521308459322,290.15 +2280.0,278.3557159769415,290.15 +2300.0,278.35933240375516,290.15 +2320.0,278.3629801187231,290.15 +2340.0,278.3666591141288,290.15 +2360.0,278.37036938218984,290.15 +2380.0,278.3741109150575,290.15 +2400.0,278.37788370481684,290.15 +2420.0,278.3816877434871,290.15 +2440.0,278.38552302302105,290.15 +2460.0,278.3893895353056,290.15 +2480.0,278.3932872721616,290.15 +2500.0,278.3972162253437,290.15 +2520.0,278.40117638654067,290.15 +2540.0,278.4051677473751,290.15 +2560.0,278.4091902994038,290.15 +2580.0,278.4132440341173,290.15 +2600.0,278.4173289429405,290.15 +2620.0,278.42144501723214,290.15 +2640.0,278.425592248285,290.15 +2660.0,278.42977062732615,290.15 +2680.0,278.4339801455166,290.15 +2700.0,278.43822079395153,290.15 +2720.0,278.44249256366027,290.15 +2740.0,278.44679544560637,290.15 +2760.0,278.45112943068756,290.15 +2780.0,278.4554945097356,290.15 +2800.0,278.4598906735167,290.15 +2820.0,278.46431791273125,290.15 +2840.0,278.4687762180138,290.15 +2860.0,278.47326557993324,290.15 +2880.0,278.4777859889929,290.15 +2900.0,278.4823374356302,290.15 +2920.0,278.4869199102171,290.15 +2940.0,278.4915334030598,290.15 +2960.0,278.4961779043989,290.15 +2980.0,278.5008534044095,290.15 +3000.0,278.505559893201,290.15 +3020.0,278.5102973608173,290.15 +3040.0,278.5150657972368,290.15 +3060.0,278.51986519237227,290.15 +3080.0,278.5246955360712,290.15 +3100.0,278.52955681811545,290.15 +3120.0,278.53444902822145,290.15 +3140.0,278.5393721560402,290.15 +3160.0,278.54432619115744,290.15 +3180.0,278.5493111230933,290.15 +3200.0,278.55432694130263,290.15 +3220.0,278.55937363517506,290.15 +3240.0,278.5644511940348,290.15 +3260.0,278.56955960714083,290.15 +3280.0,278.57469886368676,290.15 +3300.0,278.57986895280106,290.15 +3320.0,278.5850698635469,290.15 +3340.0,278.59030158492226,290.15 +3360.0,278.59556410586003,290.15 +3380.0,278.60085741522784,290.15 +3400.0,278.60618150182825,290.15 +3420.0,278.61153635439865,290.15 +3440.0,278.61692196161147,290.15 +3460.0,278.62233831207396,290.15 +3480.0,278.6277853943284,290.15 +3500.0,278.63326319685194,290.15 +3520.0,278.638771708057,290.15 +3540.0,278.6443109162908,290.15 +3560.0,278.6498808098358,290.15 +3580.0,278.6554813769093,290.15 +3600.0,278.66111260566396,290.15 +3620.0,278.6667744841875,290.15 +3640.0,278.67246700050276,290.15 +3660.0,278.67819014256776,290.15 +3680.0,278.6839438982759,290.15 +3700.0,278.6897282554556,290.15 +3720.0,278.69554320187063,290.15 +3740.0,278.7013887252201,290.15 +3760.0,278.7072648131384,290.15 +3780.0,278.7131714531953,290.15 +3800.0,278.71910863289577,290.15 +3820.0,278.72507633968047,290.15 +3840.0,278.7310745609252,290.15 +3860.0,278.7371032839414,290.15 +3880.0,278.74316249597587,290.15 +3900.0,278.74925218421106,290.15 +3920.0,278.7553723357647,290.15 +3940.0,278.7615229376904,290.15 +3960.0,278.7677039769771,290.15 +3980.0,278.7739154405494,290.15 +4000.0,278.7801573152676,290.15 +4020.0,278.7864295879278,290.15 +4040.0,278.7927322452614,290.15 +4060.0,278.7990652739359,290.15 +4080.0,278.80542866055447,290.15 +4100.0,278.8118223916559,290.15 +4120.0,278.81824645371495,290.15 +4140.0,278.8247008331422,290.15 +4160.0,278.831185516284,290.15 +4180.0,278.83770048942273,290.15 +4200.0,278.8442457387766,290.15 +4220.0,278.85082125049973,290.15 +4240.0,278.85742701068244,290.15 +4260.0,278.86406300535083,290.15 +4280.0,278.87072922046707,290.15 +4300.0,278.87742564192956,290.15 +4320.0,278.8841522555727,290.15 +4340.0,278.89090904716693,290.15 +4360.0,278.897696002419,290.15 +4380.0,278.9045131069718,290.15 +4400.0,278.9113603464045,290.15 +4420.0,278.91823770623233,290.15 +4440.0,278.925145171907,290.15 +4460.0,278.93208272881645,290.15 +4480.0,278.93905036228506,290.15 +4500.0,278.9460480575734,290.15 +4520.0,278.9530757998786,290.15 +4540.0,278.96013357433424,290.15 +4560.0,278.9672213660102,290.15 +4580.0,278.9743391599131,290.15 +4600.0,278.9814869409859,290.15 +4620.0,278.9886646941082,290.15 +4640.0,278.99587240409625,290.15 +4660.0,279.00311005570273,290.15 +4680.0,279.0103776336173,290.15 +4700.0,279.017675122466,290.15 +4720.0,279.02500250681186,290.15 +4740.0,279.0323597711544,290.15 +4760.0,279.0397468999302,290.15 +4780.0,279.04716387751245,290.15 +4800.0,279.05461068821137,290.15 +4820.0,279.0620873162739,290.15 +4840.0,279.06959374588405,290.15 +4860.0,279.0771299611627,290.15 +4880.0,279.0846959461678,290.15 +4900.0,279.09229168489424,290.15 +4920.0,279.099917161274,290.15 +4940.0,279.1075723591762,290.15 +4960.0,279.115257262407,290.15 +4980.0,279.1229718547098,290.15 +5000.0,279.13071611976517,290.15 +5020.0,279.13849004119083,290.15 +5040.0,279.14629360254196,290.15 +5060.0,279.1541267873108,290.15 +5080.0,279.16198957892715,290.15 +5100.0,279.169881960758,290.15 +5120.0,279.17780391610785,290.15 +5140.0,279.1857554282186,290.15 +5160.0,279.1937364802696,290.15 +5180.0,279.20174705537784,290.15 +5200.0,279.20978713659764,290.15 +5220.0,279.2178567069211,290.15 +5240.0,279.2259557492779,290.15 +5260.0,279.23408424653525,290.15 +5280.0,279.24224218149817,290.15 +5300.0,279.2504295369094,290.15 +5320.0,279.2586462954494,290.15 +5340.0,279.26689243973647,290.15 +5360.0,279.27516795232674,290.15 +5380.0,279.28347281571416,290.15 +5400.0,279.29180701233065,290.15 +5420.0,279.3001705245461,290.15 +5440.0,279.30856333466835,290.15 +5460.0,279.3169854249432,290.15 +5480.0,279.3254367775546,290.15 +5500.0,279.3339173746246,290.15 +5520.0,279.3424271982134,290.15 +5540.0,279.3509662303192,290.15 +5560.0,279.3595344528786,290.15 +5580.0,279.3681318477665,290.15 +5600.0,279.3767583967959,290.15 +5620.0,279.3854140817181,290.15 +5640.0,279.3940988842231,290.15 +5660.0,279.402812785939,290.15 +5680.0,279.4115557684323,290.15 +5700.0,279.42032781320825,290.15 +5720.0,279.42912890171044,290.15 +5740.0,279.4379590153211,290.15 +5760.0,279.44681813536096,290.15 +5780.0,279.4557062430895,290.15 +5800.0,279.46462331970474,290.15 +5820.0,279.47356934634365,290.15 +5840.0,279.4825443040817,290.15 +5860.0,279.4915481739334,290.15 +5880.0,279.5005809368518,290.15 +5900.0,279.5096425737292,290.15 +5920.0,279.51873306539653,290.15 +5940.0,279.52785239262374,290.15 +5960.0,279.53700053611993,290.15 +5980.0,279.54617747653305,290.15 +6000.0,279.5553831944502,290.15 +6020.0,279.5646176703977,290.15 +6040.0,279.57388088484095,290.15 +6060.0,279.58317281818444,290.15 +6080.0,279.59249345077217,290.15 +6100.0,279.6018427628872,290.15 +6120.0,279.61122073475207,290.15 +6140.0,279.6206273465286,290.15 +6160.0,279.630062578318,290.15 +6180.0,279.6395264101612,290.15 +6200.0,279.64901882203816,290.15 +6220.0,279.65853979386884,290.15 +6240.0,279.66808930551247,290.15 +6260.0,279.67766733676814,290.15 +6280.0,279.6872738673744,290.15 +6300.0,279.69690887700966,290.15 +6320.0,279.70657234529205,290.15 +6340.0,279.7162642517794,290.15 +6360.0,279.7259845759696,290.15 +6380.0,279.7357332973002,290.15 +6400.0,279.7455103951488,290.15 +6420.0,279.75531584883294,290.15 +6440.0,279.76514963761014,290.15 +6460.0,279.7750117406781,290.15 +6480.0,279.78490213717447,290.15 +6500.0,279.79482080617714,290.15 +6520.0,279.8047677267042,290.15 +6540.0,279.8147428777139,290.15 +6560.0,279.8247462381049,290.15 +6580.0,279.8347777867161,290.15 +6600.0,279.84483750232664,290.15 +6620.0,279.8549253636564,290.15 +6640.0,279.8650413493654,290.15 +6660.0,279.87518543805436,290.15 +6680.0,279.8853576082645,290.15 +6700.0,279.89555783847754,290.15 +6720.0,279.90578610711606,290.15 +6740.0,279.91604239254315,290.15 +6760.0,279.92632667306265,290.15 +6780.0,279.9366389269192,290.15 +6800.0,279.94697913229834,290.15 +6820.0,279.9573472673263,290.15 +6840.0,279.9677433100705,290.15 +6860.0,279.9781672385391,290.15 +6880.0,279.98861903068126,290.15 +6900.0,279.99909866438736,290.15 +6920.0,280.0096061174888,290.15 +6940.0,280.02014136775813,290.15 +6960.0,280.03070439290906,290.15 +6980.0,280.0412951705966,290.15 +7000.0,280.05191367841707,290.15 +7020.0,280.06255989390803,290.15 +7040.0,280.0732337945485,290.15 +7060.0,280.08393535775906,290.15 +7080.0,280.0946645609015,290.15 +7100.0,280.1054213812793,290.15 +7120.0,280.11620579613754,290.15 +7140.0,280.12701778266285,290.15 +7160.0,280.1378573179836,290.15 +7180.0,280.14872437916983,290.15 +7200.0,280.1596189432334,290.15 +7220.0,280.17054098712794,290.15 +7240.0,280.18149048774904,290.15 +7260.0,280.19246742193405,290.15 +7280.0,280.2034717664624,290.15 +7300.0,280.2145034980556,290.15 +7320.0,280.2255625933771,290.15 +7340.0,280.23664902903244,290.15 +7360.0,280.2477627815695,290.15 +7380.0,280.2589038274782,290.15 +7400.0,280.27007214319076,290.15 +7420.0,280.28126770508186,290.15 +7440.0,280.29249048946826,290.15 +7460.0,280.3037404726095,290.15 +7480.0,280.3150176307072,290.15 +7500.0,280.32632193990577,290.15 +7520.0,280.3376533762921,290.15 +7540.0,280.34901191589563,290.15 +7560.0,280.3603975346886,290.15 +7580.0,280.3718102085858,290.15 +7600.0,280.38324991344496,290.15 +7620.0,280.3947166250665,290.15 +7640.0,280.4062103191938,290.15 +7660.0,280.4177309715131,290.15 +7680.0,280.42927855765356,290.15 +7700.0,280.44085305318754,290.15 +7720.0,280.45245443363035,290.15 +7740.0,280.46408267444036,290.15 +7760.0,280.4757377510193,290.15 +7780.0,280.487419638712,290.15 +7800.0,280.4991283128067,290.15 +7820.0,280.51086374853475,290.15 +7840.0,280.5226259210711,290.15 +7860.0,280.5344148055341,290.15 +7880.0,280.5462303769855,290.15 +7900.0,280.55807261043066,290.15 +7920.0,280.5699414808186,290.15 +7940.0,280.5818369630419,290.15 +7960.0,280.5937590319369,290.15 +7980.0,280.6057076622836,290.15 +8000.0,280.6176828288059,290.15 +8020.0,280.62968450617166,290.15 +8040.0,280.64171266899245,290.15 +8060.0,280.65376729182395,290.15 +8080.0,280.6658483491658,290.15 +8100.0,280.6779558154618,290.15 +8120.0,280.6900896650998,290.15 +8140.0,280.70224987241187,290.15 +8160.0,280.71443641167434,290.15 +8180.0,280.72664925710785,290.15 +8200.0,280.7388883828773,290.15 +8220.0,280.75115376309213,290.15 +8240.0,280.76344537180614,290.15 +8260.0,280.7757631830177,290.15 +8280.0,280.7881071706697,290.15 +8300.0,280.80047730864976,290.15 +8320.0,280.81287357079003,290.15 +8340.0,280.8252959308675,290.15 +8360.0,280.837744362604,290.15 +8380.0,280.850218839666,290.15 +8400.0,280.8627193356651,290.15 +8420.0,280.8752458241578,290.15 +8440.0,280.8877982786455,290.15 +8460.0,280.9003766725748,290.15 +8480.0,280.9129809793374,290.15 +8500.0,280.9256111722702,290.15 +8520.0,280.9382672246552,290.15 +8540.0,280.9509491097199,290.15 +8560.0,280.96365680063707,290.15 +8580.0,280.9763902705248,290.15 +8600.0,280.9891494924468,290.15 +8620.0,281.0019344394122,290.15 +8640.0,281.01474508437576,290.15 +8660.0,281.02758140023786,290.15 +8680.0,281.0404433598446,290.15 +8700.0,281.05333093598773,290.15 +8720.0,281.066244101405,290.15 +8740.0,281.07918282877984,290.15 +8760.0,281.0921470907417,290.15 +8780.0,281.10513685986604,290.15 +8800.0,281.11815210867434,290.15 +8820.0,281.13119280963406,290.15 +8840.0,281.14425893515903,290.15 +8860.0,281.15735045760914,290.15 +8880.0,281.17046734929056,290.15 +8900.0,281.183609582456,290.15 +8920.0,281.19677712930417,290.15 +8940.0,281.2099699619806,290.15 +8960.0,281.22318805257726,290.15 +8980.0,281.2364313731325,290.15 +9000.0,281.24969989563147,290.15 +9020.0,281.2629935920059,290.15 +9040.0,281.2763124341344,290.15 +9060.0,281.28965639384234,290.15 +9080.0,281.3030254429018,290.15 +9100.0,281.31641955303206,290.15 +9120.0,281.3298386958991,290.15 +9140.0,281.34328284311624,290.15 +9160.0,281.3567519662437,290.15 +9180.0,281.3702460367888,290.15 +9200.0,281.38376502620633,290.15 +9220.0,281.3973089058982,290.15 +9240.0,281.4108776472138,290.15 +9260.0,281.42447122144966,290.15 +9280.0,281.4380895998501,290.15 +9300.0,281.45173275360673,290.15 +9320.0,281.4654006538589,290.15 +9340.0,281.4790932716936,290.15 +9360.0,281.4928105781454,290.15 +9380.0,281.5065525441968,290.15 +9400.0,281.520319140778,290.15 +9420.0,281.5341103387672,290.15 +9440.0,281.5479261089905,290.15 +9460.0,281.5617664222221,290.15 +9480.0,281.5756312491842,290.15 +9500.0,281.5895205605471,290.15 +9520.0,281.60343432692946,290.15 +9540.0,281.6173725188981,290.15 +9560.0,281.63133510696815,290.15 +9580.0,281.6453220616032,290.15 +9600.0,281.6593333532153,290.15 +9620.0,281.67336895216494,290.15 +9640.0,281.68742882876126,290.15 +9660.0,281.70151295326207,290.15 +9680.0,281.7156212958737,290.15 +9700.0,281.7297538267515,290.15 +9720.0,281.7439105159995,290.15 +9740.0,281.7580913336707,290.15 +9760.0,281.77229624976695,290.15 +9780.0,281.7865252342392,290.15 +9800.0,281.8007782569876,290.15 +9820.0,281.8150552878612,290.15 +9840.0,281.8293562966584,290.15 +9860.0,281.84368125312693,290.15 +9880.0,281.85803012696374,290.15 +9900.0,281.8724028878153,290.15 +9920.0,281.8867995052775,290.15 +9940.0,281.9012199488957,290.15 +9960.0,281.91566418816495,290.15 +9980.0,281.9301321925299,290.15 +10000.0,281.944623931385,290.15 +10020.0,281.9591393740745,290.15 +10040.0,281.97367848989234,290.15 +10060.0,281.98824124808255,290.15 +10080.0,282.00282761783905,290.15 +10100.0,282.0174375683059,290.15 +10120.0,282.0320710685773,290.15 +10140.0,282.0467280876975,290.15 +10160.0,282.06140859466103,290.15 +10180.0,282.07611255841283,290.15 +10200.0,282.0908399478481,290.15 +10220.0,282.10559073181264,290.15 +10240.0,282.12036487910257,290.15 +10260.0,282.1351623584647,290.15 +10280.0,282.1499831385965,290.15 +10300.0,282.1648271881461,290.15 +10320.0,282.17969447571244,290.15 +10340.0,282.1945849698452,290.15 +10360.0,282.2094986390452,290.15 +10380.0,282.22443545176395,290.15 +10400.0,282.2393953764042,290.15 +10420.0,282.25437838131984,290.15 +10440.0,282.26938443481566,290.15 +10460.0,282.284413505148,290.15 +10480.0,282.29946556052437,290.15 +10500.0,282.31454056910366,290.15 +10520.0,282.3296384989962,290.15 +10540.0,282.3447593182639,290.15 +10560.0,282.3599029949202,290.15 +10580.0,282.37506949693017,290.15 +10600.0,282.39025879221066,290.15 +10620.0,282.40547084863016,290.15 +10640.0,282.4207056340092,290.15 +10660.0,282.4359631161201,290.15 +10680.0,282.4512432626872,290.15 +10700.0,282.466546041387,290.15 +10720.0,282.48187141984795,290.15 +10740.0,282.4972193656507,290.15 +10760.0,282.5125898463283,290.15 +10780.0,282.5279828293661,290.15 +10800.0,282.5433982822018,290.15 +10820.0,282.5588361722255,290.15 +10840.0,282.5742964667799,290.15 +10860.0,282.58977913316045,290.15 +10880.0,282.60528413861505,290.15 +10900.0,282.62081145034443,290.15 +10920.0,282.6363610355022,290.15 +10940.0,282.6519328611948,290.15 +10960.0,282.66752689448145,290.15 +10980.0,282.6831431023748,290.15 +11000.0,282.69878145184015,290.15 +11020.0,282.7144419097963,290.15 +11040.0,282.730124443115,290.15 +11060.0,282.7458290186216,290.15 +11080.0,282.76155560309456,290.15 +11100.0,282.7773041632659,290.15 +11120.0,282.7930746658212,290.15 +11140.0,282.80886707739955,290.15 +11160.0,282.8246813645937,290.15 +11180.0,282.8405174939501,290.15 +11200.0,282.85637543196896,290.15 +11220.0,282.8722551451046,290.15 +11240.0,282.88815659976495,290.15 +11260.0,282.9040797623122,290.15 +11280.0,282.9200245990625,290.15 +11300.0,282.93599107628614,290.15 +11320.0,282.9519791602076,290.15 +11340.0,282.96798881700585,290.15 +11360.0,282.98402001281397,290.15 +11380.0,283.0000727137197,290.15 +11400.0,283.01614688576507,290.15 +11420.0,283.0322424949469,290.15 +11440.0,283.04835950721645,290.15 +11460.0,283.06449788847993,290.15 +11480.0,283.08065760459823,290.15 +11500.0,283.09683862138706,290.15 +11520.0,283.1130409046171,290.15 +11540.0,283.1292644200141,290.15 +11560.0,283.14550913325894,290.15 +11580.0,283.1617750099875,290.15 +11600.0,283.1780620157909,290.15 +11620.0,283.1943701162158,290.15 +11640.0,283.21069927676393,290.15 +11660.0,283.22704946289264,290.15 +11680.0,283.24342064001485,290.15 +11700.0,283.25981277349894,290.15 +11720.0,283.276225828669,290.15 +11740.0,283.29265977080496,290.15 +11760.0,283.30911456514235,290.15 +11780.0,283.3255901768729,290.15 +11800.0,283.3420865711439,290.15 +11820.0,283.35860371305915,290.15 +11840.0,283.37514156767816,290.15 +11860.0,283.3917001000168,290.15 +11880.0,283.4082792750472,290.15 +11900.0,283.4248790576978,290.15 +11920.0,283.4414994128535,290.15 +11940.0,283.4581403053555,290.15 +11960.0,283.4748017000018,290.15 +11980.0,283.49148356154683,290.15 +12000.0,283.5081858547019,290.15 +12020.0,283.5249085441349,290.15 +12040.0,283.54165159447075,290.15 +12060.0,283.5584149702912,290.15 +12080.0,283.57519863613504,290.15 +12100.0,283.59200255649813,290.15 +12120.0,283.6088266958335,290.15 +12140.0,283.6256710185514,290.15 +12160.0,283.64253548901934,290.15 +12180.0,283.65942007156224,290.15 +12200.0,283.6763247304625,290.15 +12220.0,283.6932494299601,290.15 +12240.0,283.7101941342524,290.15 +12260.0,283.72715880749473,290.15 +12280.0,283.74414341380003,290.15 +12300.0,283.7611479172391,290.15 +12320.0,283.77817228184057,290.15 +12340.0,283.7952164715912,290.15 +12360.0,283.8122804504357,290.15 +12380.0,283.82936418227695,290.15 +12400.0,283.84646763097606,290.15 +12420.0,283.86359076035245,290.15 +12440.0,283.8807335341839,290.15 +12460.0,283.8978959162065,290.15 +12480.0,283.9150778701151,290.15 +12500.0,283.932279359563,290.15 +12520.0,283.9495003481621,290.15 +12540.0,283.96674079948326,290.15 +12560.0,283.984000677056,290.15 +12580.0,284.0012799443688,290.15 +12600.0,284.0185785648692,290.15 +12620.0,284.0358965019636,290.15 +12640.0,284.0532337190178,290.15 +12660.0,284.07059017935654,290.15 +12680.0,284.0879658462641,290.15 +12700.0,284.10536068298404,290.15 +12720.0,284.1227746527193,290.15 +12740.0,284.1402077186323,290.15 +12760.0,284.1576598438453,290.15 +12780.0,284.1751309914401,290.15 +12800.0,284.1926211244582,290.15 +12820.0,284.210130205901,290.15 +12840.0,284.22765819872984,290.15 +12860.0,284.24520506586606,290.15 +12880.0,284.262770770191,290.15 +12900.0,284.28035527454625,290.15 +12920.0,284.2979585417335,290.15 +12940.0,284.3155805345149,290.15 +12960.0,284.33322121561287,290.15 +12980.0,284.3508805477104,290.15 +13000.0,284.36855849345085,290.15 +13020.0,284.38625501543845,290.15 +13040.0,284.40397007623795,290.15 +13060.0,284.42170363837494,290.15 +13080.0,284.43945566433587,290.15 +13100.0,284.45722611656817,290.15 +13120.0,284.4750149574802,290.15 +13140.0,284.49282214944145,290.15 +13160.0,284.5106476547827,290.15 +13180.0,284.5284914357959,290.15 +13200.0,284.5463534547343,290.15 +13220.0,284.5642336738126,290.15 +13240.0,284.58213205520707,290.15 +13260.0,284.6000485610554,290.15 +13280.0,284.6179831534572,290.15 +13300.0,284.63593579447354,290.15 +13320.0,284.6539064461275,290.15 +13340.0,284.67189507040393,290.15 +13360.0,284.68990162924973,290.15 +13380.0,284.70792608457396,290.15 +13400.0,284.7259683982476,290.15 +13420.0,284.744028532104,290.15 +13440.0,284.7621064479388,290.15 +13460.0,284.78020210751,290.15 +13480.0,284.79831547253804,290.15 +13500.0,284.81644650470594,290.15 +13520.0,284.8345951656594,290.15 +13540.0,284.8527614170067,290.15 +13560.0,284.87094522031913,290.15 +13580.0,284.8891465371305,290.15 +13600.0,284.9073653289379,290.15 +13620.0,284.9256015572013,290.15 +13640.0,284.94385518334377,290.15 +13660.0,284.96212616875164,290.15 +13680.0,284.9804144747746,290.15 +13700.0,284.99872006272545,290.15 +13720.0,285.0170428938806,290.15 +13740.0,285.0353829294801,290.15 +13760.0,285.0537401307273,290.15 +13780.0,285.0721144587895,290.15 +13800.0,285.0905058747976,290.15 +13820.0,285.10891433984654,290.15 +13840.0,285.127339814995,290.15 +13860.0,285.1457822612658,290.15 +13880.0,285.1642416396458,290.15 +13900.0,285.18271791108606,290.15 +13920.0,285.2012110365019,290.15 +13940.0,285.21972097677303,290.15 +13960.0,285.23824769274347,290.15 +13980.0,285.25679114522194,290.15 +14000.0,285.2753512949816,290.15 +14020.0,285.2939281027603,290.15 +14040.0,285.3125215292607,290.15 +14060.0,285.3311315351504,290.15 +14080.0,285.34975808106174,290.15 +14100.0,285.36840112759216,290.15 +14120.0,285.3870606353042,290.15 +14140.0,285.40573656472554,290.15 +14160.0,285.42442887634917,290.15 +14180.0,285.4431375306334,290.15 +14200.0,285.461862488002,290.15 +14220.0,285.48060370884417,290.15 +14240.0,285.4993611535148,290.15 +14260.0,285.51813478233447,290.15 +14280.0,285.5369245555894,290.15 +14300.0,285.5557304335318,290.15 +14320.0,285.57455237637964,290.15 +14340.0,285.5933903443171,290.15 +14360.0,285.6122442974943,290.15 +14380.0,285.63111419602774,290.15 +14400.0,285.65,290.15 +14420.0,285.66890166946,290.15 +14440.0,285.68781916442333,290.15 +14460.0,285.7067524448719,290.15 +14480.0,285.7257014707542,290.15 +14500.0,285.7446662019855,290.15 +14520.0,285.76364659844796,290.15 +14540.0,285.7826426199904,290.15 +14560.0,285.8016542264287,290.15 +14580.0,285.82068137754567,290.15 +14600.0,285.83972403309133,290.15 +14620.0,285.85878215278296,290.15 +14640.0,285.87785569630495,290.15 +14660.0,285.89694462330914,290.15 +14680.0,285.91604889341494,290.15 +14700.0,285.9351684662092,290.15 +14720.0,285.9543033012463,290.15 +14740.0,285.9734533580485,290.15 +14760.0,285.99261859610584,290.15 +14780.0,286.01179897487617,290.15 +14800.0,286.03099445378535,290.15 +14820.0,286.05020499222735,290.15 +14840.0,286.0694305495641,290.15 +14860.0,286.088671085126,290.15 +14880.0,286.1079265582116,290.15 +14900.0,286.1271969280879,290.15 +14920.0,286.14648215399046,290.15 +14940.0,286.1657821951233,290.15 +14960.0,286.1850970106591,290.15 +14980.0,286.20442655973943,290.15 +15000.0,286.2237708014745,290.15 +15020.0,286.24312969494355,290.15 +15040.0,286.2625031991948,290.15 +15060.0,286.2818912732456,290.15 +15080.0,286.30129387608247,290.15 +15100.0,286.3207109666612,290.15 +15120.0,286.34014250390675,290.15 +15140.0,286.3595884467139,290.15 +15160.0,286.3790487539465,290.15 +15180.0,286.3985233844385,290.15 +15200.0,286.418012296993,290.15 +15220.0,286.4375154503835,290.15 +15240.0,286.45703280335283,290.15 +15260.0,286.47656431461417,290.15 +15280.0,286.4961099428504,290.15 +15300.0,286.51566964671497,290.15 +15320.0,286.5352433848311,290.15 +15340.0,286.5548311157927,290.15 +15360.0,286.5744327981638,290.15 +15380.0,286.5940483904791,290.15 +15400.0,286.6136778512438,290.15 +15420.0,286.6333211389337,290.15 +15440.0,286.65297821199556,290.15 +15460.0,286.6726490288467,290.15 +15480.0,286.69233354787553,290.15 +15500.0,286.7120317274415,290.15 +15520.0,286.7317435258752,290.15 +15540.0,286.7514689014781,290.15 +15560.0,286.77120781252336,290.15 +15580.0,286.7909602172552,290.15 +15600.0,286.8107260738895,290.15 +15620.0,286.8305053406135,290.15 +15640.0,286.85029797558633,290.15 +15660.0,286.87010393693856,290.15 +15680.0,286.8899231827727,290.15 +15700.0,286.90975567116317,290.15 +15720.0,286.92960136015637,290.15 +15740.0,286.94946020777076,290.15 +15760.0,286.96933217199694,290.15 +15780.0,286.9892172107978,290.15 +15800.0,287.0091152821086,290.15 +15820.0,287.0290263438369,290.15 +15840.0,287.04895035386295,290.15 +15860.0,287.06888727003957,290.15 +15880.0,287.0888370501921,290.15 +15900.0,287.10879965211893,290.15 +15920.0,287.1287750335911,290.15 +15940.0,287.1487631523529,290.15 +15960.0,287.1687639661213,290.15 +15980.0,287.1887774325867,290.15 +16000.0,287.20880350941263,290.15 +16020.0,287.22884215423596,290.15 +16040.0,287.248893324667,290.15 +16060.0,287.2689569782895,290.15 +16080.0,287.28903307266086,290.15 +16100.0,287.3091215653121,290.15 +16120.0,287.3292224137482,290.15 +16140.0,287.34933557544764,290.15 +16160.0,287.36946100786326,290.15 +16180.0,287.3895986684216,290.15 +16200.0,287.40974851452364,290.15 +16220.0,287.4299105035443,290.15 +16240.0,287.450084592833,290.15 +16260.0,287.4702707397135,290.15 +16280.0,287.490468901484,290.15 +16300.0,287.51067903541747,290.15 +16320.0,287.5309010987613,290.15 +16340.0,287.5511350487378,290.15 +16360.0,287.57138084254416,290.15 +16380.0,287.59163843735246,290.15 +16400.0,287.6119077903097,290.15 +16420.0,287.63218885853826,290.15 +16440.0,287.6524815991355,290.15 +16460.0,287.6727859691743,290.15 +16480.0,287.6931019257027,290.15 +16500.0,287.71342942574444,290.15 +16520.0,287.73376842629875,290.15 +16540.0,287.7541188843405,290.15 +16560.0,287.7744807568205,290.15 +16580.0,287.79485400066505,290.15 +16600.0,287.8152385727768,290.15 +16620.0,287.83563443003425,290.15 +16640.0,287.85604152929193,290.15 +16660.0,287.8764598273808,290.15 +16680.0,287.896889281108,290.15 +16700.0,287.917329847257,290.15 +16720.0,287.937781482588,290.15 +16740.0,287.9582441438376,290.15 +16760.0,287.97871778771906,290.15 +16780.0,287.99920237092255,290.15 +16800.0,288.01969785011494,290.15 +16820.0,288.04020418194017,290.15 +16840.0,288.0607213230192,290.15 +16860.0,288.08124922995006,290.15 +16880.0,288.1017878593081,290.15 +16900.0,288.12233716764587,290.15 +16920.0,288.1428971114934,290.15 +16940.0,288.1634676473583,290.15 +16960.0,288.1840487317256,290.15 +16980.0,288.20464032105815,290.15 +17000.0,288.2252423717966,290.15 +17020.0,288.24585484035924,290.15 +17040.0,288.2664776831426,290.15 +17060.0,288.28711085652117,290.15 +17080.0,288.30775431684754,290.15 +17100.0,288.32840802045257,290.15 +17120.0,288.3490719236454,290.15 +17140.0,288.3697459827137,290.15 +17160.0,288.3904301539236,290.15 +17180.0,288.4111243935198,290.15 +17200.0,288.43182865772576,290.15 +17220.0,288.45254290274374,290.15 +17240.0,288.4732670847548,290.15 +17260.0,288.4940011599191,290.15 +17280.0,288.51474508437576,290.15 +17300.0,288.53549881424317,290.15 +17320.0,288.5562623056189,290.15 +17340.0,288.5770355145798,290.15 +17360.0,288.59781839718244,290.15 +17380.0,288.6186109094626,290.15 +17400.0,288.6394130074359,290.15 +17420.0,288.66022464709755,290.15 +17440.0,288.68104578442274,290.15 +17460.0,288.7018763753664,290.15 +17480.0,288.72271637586357,290.15 +17500.0,288.7435657418293,290.15 +17520.0,288.7644244291589,290.15 +17540.0,288.78529239372796,290.15 +17560.0,288.8061695913924,290.15 +17580.0,288.82705597798866,290.15 +17600.0,288.8479515093336,290.15 +17620.0,288.868856141225,290.15 +17640.0,288.88976982944115,290.15 +17660.0,288.91069252974125,290.15 +17680.0,288.9316241978655,290.15 +17700.0,288.9525647895351,290.15 +17720.0,288.9735142604523,290.15 +17740.0,288.99447256630066,290.15 +17760.0,289.015439662745,290.15 +17780.0,289.03641550543153,290.15 +17800.0,289.0574000499881,290.15 +17820.0,289.0783932520239,290.15 +17840.0,289.09939506713,290.15 +17860.0,289.12040545087916,290.15 +17880.0,289.1414243588261,290.15 +17900.0,289.1624517465075,290.15 +17920.0,289.1834875694419,290.15 +17940.0,289.20453178313034,290.15 +17960.0,289.2255843430558,290.15 +17980.0,289.2466452046838,290.15 +18000.0,289.26771432346214,290.15 +18020.0,289.28879165482135,290.15 +18040.0,289.3098771541744,290.15 +18060.0,289.33097077691707,290.15 +18080.0,289.35207247842794,290.15 +18100.0,289.37318221406855,290.15 +18120.0,289.3942999391833,290.15 +18140.0,289.4154256091,290.15 +18160.0,289.4365591791292,290.15 +18180.0,289.4577006045651,290.15 +18200.0,289.47884984068514,290.15 +18220.0,289.5000068427502,290.15 +18240.0,289.52117156600497,290.15 +18260.0,289.54234396567745,290.15 +18280.0,289.56352399697965,290.15 +18300.0,289.5847116151074,290.15 +18320.0,289.6059067752403,290.15 +18340.0,289.6271094325424,290.15 +18360.0,289.6483195421614,290.15 +18380.0,289.6695370592296,290.15 +18400.0,289.6907619388634,290.15 +18420.0,289.71199413616375,290.15 +18440.0,289.7332336062162,290.15 +18460.0,289.75448030409063,290.15 +18480.0,289.775734184842,290.15 +18500.0,289.79699520350977,290.15 +18520.0,289.81826331511843,290.15 +18540.0,289.83953847467745,290.15 +18560.0,289.8608206371814,290.15 +18580.0,289.88210975761007,290.15 +18600.0,289.90340579092845,290.15 +18620.0,289.9247086920869,290.15 +18640.0,289.9460184160214,290.15 +18660.0,289.96733491765326,290.15 +18680.0,289.98865815188975,290.15 +18700.0,290.0099880736236,290.15 +18720.0,290.0313246377336,290.15 +18740.0,290.05266779908436,290.15 +18760.0,290.07401751252667,290.15 +18780.0,290.0953737328973,290.15 +18800.0,290.11673641501943,290.15 +18820.0,290.1381055137024,290.15 +18840.0,290.159480983742,290.15 +18860.0,290.18086277992074,290.15 +18880.0,290.2022508570075,290.15 +18900.0,290.2236451697581,290.15 +18920.0,290.24504567291484,290.15 +18940.0,290.2664523212073,290.15 +18960.0,290.2878650693518,290.15 +18980.0,290.30928387205194,290.15 +19000.0,290.3307086839983,290.15 +19020.0,290.35213945986897,290.15 +19040.0,290.37357615432927,290.15 +19060.0,290.39501872203203,290.15 +19080.0,290.41646711761774,290.15 +19100.0,290.4379212957145,290.15 +19120.0,290.4593812109381,290.15 +19140.0,290.48084681789237,290.15 +19160.0,290.5023180711689,290.15 +19180.0,290.5237949253475,290.15 +19200.0,290.545277334996,290.15 +19220.0,290.56676525467066,290.15 +19240.0,290.5882586389159,290.15 +19260.0,290.6097574422646,290.15 +19280.0,290.63126161923833,290.15 +19300.0,290.6527711243471,290.15 +19320.0,290.67428591208983,290.15 +19340.0,290.69580593695406,290.15 +19360.0,290.71733115341647,290.15 +19380.0,290.7388615159426,290.15 +19400.0,290.76039697898716,290.15 +19420.0,290.78193749699403,290.15 +19440.0,290.80348302439654,290.15 +19460.0,290.8250335156172,290.15 +19480.0,290.8465889250682,290.15 +19500.0,290.86814920715125,290.15 +19520.0,290.8897143162577,290.15 +19540.0,290.9112842067689,290.15 +19560.0,290.93285883305583,290.15 +19580.0,290.9544381494796,290.15 +19600.0,290.9760221103913,290.15 +19620.0,290.9976106701323,290.15 +19640.0,291.0192037830342,290.15 +19660.0,291.0408014034189,290.15 +19680.0,291.062403485599,290.15 +19700.0,291.0840099838773,290.15 +19720.0,291.10562085254753,290.15 +19740.0,291.1272360458941,290.15 +19760.0,291.1488555181923,290.15 +19780.0,291.17047922370824,290.15 +19800.0,291.1921071166992,290.15 +19820.0,291.2137391514136,290.15 +19840.0,291.23537528209107,290.15 +19860.0,291.2570154629625,290.15 +19880.0,291.2786596482504,290.15 +19900.0,291.30030779216867,290.15 +19920.0,291.32195984892275,290.15 +19940.0,291.34361577271005,290.15 +19960.0,291.3652755177196,290.15 +19980.0,291.3869390381324,290.15 +20000.0,291.4086062881215,290.15 +20020.0,291.43027722185207,290.15 +20040.0,291.4519517934814,290.15 +20060.0,291.4736299571591,290.15 +20080.0,291.4953116670273,290.15 +20100.0,291.5169968772205,290.15 +20120.0,291.53868554186585,290.15 +20140.0,291.5603776150832,290.15 +20160.0,291.5820730509852,290.15 +20180.0,291.60377180367726,290.15 +20200.0,291.62547382725796,290.15 +20220.0,291.6471790758188,290.15 +20240.0,291.66888750344464,290.15 +20260.0,291.6905990642135,290.15 +20280.0,291.7123137121966,290.15 +20300.0,291.734031401459,290.15 +20320.0,291.7557520860591,290.15 +20340.0,291.7774757200489,290.15 +20360.0,291.7992022574744,290.15 +20380.0,291.82093165237524,290.15 +20400.0,291.8426638587851,290.15 +20420.0,291.8643988307317,290.15 +20440.0,291.88613652223694,290.15 +20460.0,291.9078768873169,290.15 +20480.0,291.9296198799821,290.15 +20500.0,291.9513654542374,290.15 +20520.0,291.9731135640823,290.15 +20540.0,291.99486416351084,290.15 +20560.0,292.01661720651185,290.15 +20580.0,292.03837264706897,290.15 +20600.0,292.06013043916084,290.15 +20620.0,292.08189053676097,290.15 +20640.0,292.1036528938381,290.15 +20660.0,292.12541746435625,290.15 +20680.0,292.14718420227456,290.15 +20700.0,292.1689530615478,290.15 +20720.0,292.19072399612617,290.15 +20740.0,292.21249695995544,290.15 +20760.0,292.23427190697714,290.15 +20780.0,292.25604879112853,290.15 +20800.0,292.27782756634286,290.15 +20820.0,292.29960818654934,290.15 +20840.0,292.32139060567323,290.15 +20860.0,292.34317477763614,290.15 +20880.0,292.36496065635583,290.15 +20900.0,292.38674819574646,290.15 +20920.0,292.4085373497187,290.15 +20940.0,292.4303280721798,290.15 +20960.0,292.4521203170338,290.15 +20980.0,292.4739140381813,290.15 +21000.0,292.4957091895199,290.15 +21020.0,292.51750572494433,290.15 +21040.0,292.53930359834607,290.15 +21060.0,292.561102763614,290.15 +21080.0,292.5829031746341,290.15 +21100.0,292.60470478529,290.15 +21120.0,292.6265075494625,290.15 +21140.0,292.64831142103003,290.15 +21160.0,292.67011635386876,290.15 +21180.0,292.6919223018526,290.15 +21200.0,292.7137292188533,290.15 +21220.0,292.7355370587405,290.15 +21240.0,292.75734577538185,290.15 +21260.0,292.7791553226434,290.15 +21280.0,292.80096565438913,290.15 +21300.0,292.82277672448157,290.15 +21320.0,292.84458848678156,290.15 +21340.0,292.8664008951486,290.15 +21360.0,292.8882139034407,290.15 +21380.0,292.9100274655147,290.15 +21400.0,292.9318415352262,290.15 +21420.0,292.9536560664298,290.15 +21440.0,292.975471012979,290.15 +21460.0,292.99728632872655,290.15 +21480.0,293.01910196752436,290.15 +21500.0,293.04091788322364,290.15 +21520.0,293.0627340296751,290.15 +21540.0,293.08455036072877,290.15 +21560.0,293.10636683023455,290.15 +21580.0,293.1281833920419,290.15 +21600.0,293.15,290.15 +21620.0,293.1718166079581,290.15 +21640.0,293.1936331697654,290.15 +21660.0,293.2154496392712,290.15 +21680.0,293.23726597032487,290.15 +21700.0,293.2590821167763,290.15 +21720.0,293.2808980324756,290.15 +21740.0,293.3027136712734,290.15 +21760.0,293.3245289870209,290.15 +21780.0,293.34634393357015,290.15 +21800.0,293.3681584647737,290.15 +21820.0,293.38997253448525,290.15 +21840.0,293.41178609655924,290.15 +21860.0,293.43359910485134,290.15 +21880.0,293.4554115132184,290.15 +21900.0,293.4772232755184,290.15 +21920.0,293.4990343456108,290.15 +21940.0,293.52084467735654,290.15 +21960.0,293.54265422461805,290.15 +21980.0,293.5644629412595,290.15 +22000.0,293.58627078114665,290.15 +22020.0,293.6080776981473,290.15 +22040.0,293.6298836461312,290.15 +22060.0,293.6516885789699,290.15 +22080.0,293.6734924505375,290.15 +22100.0,293.69529521471,290.15 +22120.0,293.71709682536584,290.15 +22140.0,293.738897236386,290.15 +22160.0,293.7606964016539,290.15 +22180.0,293.7824942750556,290.15 +22200.0,293.80429081048004,290.15 +22220.0,293.82608596181865,290.15 +22240.0,293.84787968296615,290.15 +22260.0,293.86967192782015,290.15 +22280.0,293.89146265028126,290.15 +22300.0,293.9132518042535,290.15 +22320.0,293.9350393436441,290.15 +22340.0,293.9568252223638,290.15 +22360.0,293.9786093943267,290.15 +22380.0,294.0003918134506,290.15 +22400.0,294.0221724336571,290.15 +22420.0,294.0439512088714,290.15 +22440.0,294.0657280930228,290.15 +22460.0,294.0875030400445,290.15 +22480.0,294.1092760038738,290.15 +22500.0,294.13104693845213,290.15 +22520.0,294.1528157977254,290.15 +22540.0,294.1745825356437,290.15 +22560.0,294.19634710616185,290.15 +22580.0,294.218109463239,290.15 +22600.0,294.2398695608391,290.15 +22620.0,294.261627352931,290.15 +22640.0,294.2833827934881,290.15 +22660.0,294.3051358364891,290.15 +22680.0,294.32688643591763,290.15 +22700.0,294.34863454576254,290.15 +22720.0,294.37038012001784,290.15 +22740.0,294.39212311268307,290.15 +22760.0,294.413863477763,290.15 +22780.0,294.43560116926824,290.15 +22800.0,294.45733614121485,290.15 +22820.0,294.4790683476247,290.15 +22840.0,294.50079774252555,290.15 +22860.0,294.522524279951,290.15 +22880.0,294.54424791394086,290.15 +22900.0,294.5659685985409,290.15 +22920.0,294.58768628780336,290.15 +22940.0,294.6094009357865,290.15 +22960.0,294.6311124965553,290.15 +22980.0,294.6528209241811,290.15 +23000.0,294.674526172742,290.15 +23020.0,294.6962281963227,290.15 +23040.0,294.7179269490148,290.15 +23060.0,294.73962238491674,290.15 +23080.0,294.7613144581341,290.15 +23100.0,294.78300312277946,290.15 +23120.0,294.80468833297266,290.15 +23140.0,294.82637004284084,290.15 +23160.0,294.84804820651857,290.15 +23180.0,294.8697227781479,290.15 +23200.0,294.89139371187844,290.15 +23220.0,294.91306096186753,290.15 +23240.0,294.93472448228033,290.15 +23260.0,294.9563842272899,290.15 +23280.0,294.9780401510772,290.15 +23300.0,294.9996922078313,290.15 +23320.0,295.02134035174953,290.15 +23340.0,295.0429845370374,290.15 +23360.0,295.0646247179089,290.15 +23380.0,295.08626084858633,290.15 +23400.0,295.10789288330074,290.15 +23420.0,295.1295207762917,290.15 +23440.0,295.15114448180765,290.15 +23460.0,295.17276395410585,290.15 +23480.0,295.19437914745237,290.15 +23500.0,295.21599001612265,290.15 +23520.0,295.23759651440093,290.15 +23540.0,295.25919859658103,290.15 +23560.0,295.28079621696577,290.15 +23580.0,295.30238932986765,290.15 +23600.0,295.32397788960867,290.15 +23620.0,295.34556185052037,290.15 +23640.0,295.3671411669441,290.15 +23660.0,295.38871579323103,290.15 +23680.0,295.41028568374225,290.15 +23700.0,295.4318507928487,290.15 +23720.0,295.45341107493175,290.15 +23740.0,295.4749664843828,290.15 +23760.0,295.49651697560347,290.15 +23780.0,295.5180625030059,290.15 +23800.0,295.5396030210128,290.15 +23820.0,295.5611384840574,290.15 +23840.0,295.5826688465835,290.15 +23860.0,295.6041940630459,290.15 +23880.0,295.6257140879101,290.15 +23900.0,295.64722887565284,290.15 +23920.0,295.6687383807616,290.15 +23940.0,295.69024255773536,290.15 +23960.0,295.7117413610841,290.15 +23980.0,295.7332347453293,290.15 +24000.0,295.75472266500395,290.15 +24020.0,295.77620507465247,290.15 +24040.0,295.7976819288311,290.15 +24060.0,295.8191531821076,290.15 +24080.0,295.84061878906186,290.15 +24100.0,295.86207870428547,290.15 +24120.0,295.8835328823822,290.15 +24140.0,295.9049812779679,290.15 +24160.0,295.9264238456707,290.15 +24180.0,295.947860540131,290.15 +24200.0,295.96929131600166,290.15 +24220.0,295.990716127948,290.15 +24240.0,296.01213493064813,290.15 +24260.0,296.0335476787927,290.15 +24280.0,296.0549543270851,290.15 +24300.0,296.0763548302419,290.15 +24320.0,296.0977491429924,290.15 +24340.0,296.1191372200792,290.15 +24360.0,296.14051901625794,290.15 +24380.0,296.16189448629757,290.15 +24400.0,296.1832635849805,290.15 +24420.0,296.20462626710264,290.15 +24440.0,296.2259824874733,290.15 +24460.0,296.2473322009156,290.15 +24480.0,296.2686753622664,290.15 +24500.0,296.29001192637634,290.15 +24520.0,296.3113418481102,290.15 +24540.0,296.3326650823467,290.15 +24560.0,296.35398158397857,290.15 +24580.0,296.3752913079131,290.15 +24600.0,296.3965942090715,290.15 +24620.0,296.4178902423899,290.15 +24640.0,296.43917936281855,290.15 +24660.0,296.4604615253225,290.15 +24680.0,296.4817366848815,290.15 +24700.0,296.5030047964902,290.15 +24720.0,296.52426581515795,290.15 +24740.0,296.54551969590926,290.15 +24760.0,296.5667663937838,290.15 +24780.0,296.5880058638362,290.15 +24800.0,296.6092380611366,290.15 +24820.0,296.63046294077037,290.15 +24840.0,296.65168045783855,290.15 +24860.0,296.67289056745756,290.15 +24880.0,296.6940932247596,290.15 +24900.0,296.7152883848926,290.15 +24920.0,296.7364760030203,290.15 +24940.0,296.7576560343225,290.15 +24960.0,296.778828433995,290.15 +24980.0,296.79999315724973,290.15 +25000.0,296.8211501593148,290.15 +25020.0,296.84229939543485,290.15 +25040.0,296.8634408208708,290.15 +25060.0,296.88457439089996,290.15 +25080.0,296.9057000608166,290.15 +25100.0,296.9268177859314,290.15 +25120.0,296.947927521572,290.15 +25140.0,296.9690292230829,290.15 +25160.0,296.99012284582557,290.15 +25180.0,297.0112083451786,290.15 +25200.0,297.0322856765378,290.15 +25220.0,297.0533547953162,290.15 +25240.0,297.07441565694415,290.15 +25260.0,297.0954682168696,290.15 +25280.0,297.11651243055803,290.15 +25300.0,297.13754825349247,290.15 +25320.0,297.15857564117385,290.15 +25340.0,297.1795945491208,290.15 +25360.0,297.20060493286996,290.15 +25380.0,297.22160674797607,290.15 +25400.0,297.2425999500119,290.15 +25420.0,297.2635844945684,290.15 +25440.0,297.28456033725496,290.15 +25460.0,297.3055274336993,290.15 +25480.0,297.32648573954765,290.15 +25500.0,297.3474352104649,290.15 +25520.0,297.36837580213444,290.15 +25540.0,297.3893074702587,290.15 +25560.0,297.4102301705588,290.15 +25580.0,297.43114385877493,290.15 +25600.0,297.4520484906663,290.15 +25620.0,297.4729440220113,290.15 +25640.0,297.49383040860755,290.15 +25660.0,297.514707606272,290.15 +25680.0,297.53557557084105,290.15 +25700.0,297.55643425817067,290.15 +25720.0,297.5772836241364,290.15 +25740.0,297.59812362463356,290.15 +25760.0,297.6189542155772,290.15 +25780.0,297.6397753529024,290.15 +25800.0,297.66058699256405,290.15 +25820.0,297.6813890905374,290.15 +25840.0,297.7021816028175,290.15 +25860.0,297.72296448542016,290.15 +25880.0,297.7437376943811,290.15 +25900.0,297.7645011857568,290.15 +25920.0,297.7852549156242,290.15 +25940.0,297.80599884008086,290.15 +25960.0,297.82673291524515,290.15 +25980.0,297.8474570972562,290.15 +26000.0,297.8681713422742,290.15 +26020.0,297.88887560648016,290.15 +26040.0,297.90956984607635,290.15 +26060.0,297.93025401728625,290.15 +26080.0,297.95092807635456,290.15 +26100.0,297.9715919795474,290.15 +26120.0,297.9922456831524,290.15 +26140.0,298.0128891434788,290.15 +26160.0,298.03352231685733,290.15 +26180.0,298.0541451596407,290.15 +26200.0,298.0747576282034,290.15 +26220.0,298.0953596789418,290.15 +26240.0,298.11595126827433,290.15 +26260.0,298.13653235264167,290.15 +26280.0,298.15710288850653,290.15 +26300.0,298.1776628323541,290.15 +26320.0,298.19821214069185,290.15 +26340.0,298.2187507700499,290.15 +26360.0,298.23927867698075,290.15 +26380.0,298.2597958180598,290.15 +26400.0,298.280302149885,290.15 +26420.0,298.3007976290774,290.15 +26440.0,298.3212822122809,290.15 +26460.0,298.34175585616237,290.15 +26480.0,298.362218517412,290.15 +26500.0,298.38267015274295,290.15 +26520.0,298.403110718892,290.15 +26540.0,298.42354017261914,290.15 +26560.0,298.443958470708,290.15 +26580.0,298.4643655699657,290.15 +26600.0,298.48476142722313,290.15 +26620.0,298.5051459993349,290.15 +26640.0,298.5255192431795,290.15 +26660.0,298.5458811156594,290.15 +26680.0,298.5662315737012,290.15 +26700.0,298.5865705742555,290.15 +26720.0,298.60689807429725,290.15 +26740.0,298.62721403082566,290.15 +26760.0,298.64751840086444,290.15 +26780.0,298.6678111414617,290.15 +26800.0,298.68809220969024,290.15 +26820.0,298.7083615626475,290.15 +26840.0,298.7286191574558,290.15 +26860.0,298.74886495126214,290.15 +26880.0,298.76909890123864,290.15 +26900.0,298.7893209645825,290.15 +26920.0,298.80953109851595,290.15 +26940.0,298.82972926028646,290.15 +26960.0,298.849915407167,290.15 +26980.0,298.87008949645565,290.15 +27000.0,298.8902514854763,290.15 +27020.0,298.9104013315783,290.15 +27040.0,298.9305389921367,290.15 +27060.0,298.95066442455226,290.15 +27080.0,298.97077758625176,290.15 +27100.0,298.99087843468783,290.15 +27120.0,299.0109669273391,290.15 +27140.0,299.03104302171045,290.15 +27160.0,299.05110667533296,290.15 +27180.0,299.071157845764,290.15 +27200.0,299.0911964905873,290.15 +27220.0,299.1112225674133,290.15 +27240.0,299.1312360338787,290.15 +27260.0,299.15123684764706,290.15 +27280.0,299.17122496640883,290.15 +27300.0,299.191200347881,290.15 +27320.0,299.21116294980783,290.15 +27340.0,299.2311127299604,290.15 +27360.0,299.251049646137,290.15 +27380.0,299.27097365616305,290.15 +27400.0,299.29088471789134,290.15 +27420.0,299.3107827892021,290.15 +27440.0,299.330667828003,290.15 +27460.0,299.3505397922292,290.15 +27480.0,299.3703986398436,290.15 +27500.0,299.3902443288368,290.15 +27520.0,299.41007681722726,290.15 +27540.0,299.4298960630614,290.15 +27560.0,299.4497020244136,290.15 +27580.0,299.46949465938644,290.15 +27600.0,299.48927392611046,290.15 +27620.0,299.50903978274476,290.15 +27640.0,299.5287921874766,290.15 +27660.0,299.54853109852183,290.15 +27680.0,299.5682564741248,290.15 +27700.0,299.5879682725584,290.15 +27720.0,299.6076664521244,290.15 +27740.0,299.62735097115325,290.15 +27760.0,299.6470217880044,290.15 +27780.0,299.66667886106626,290.15 +27800.0,299.6863221487562,290.15 +27820.0,299.70595160952087,290.15 +27840.0,299.72556720183616,290.15 +27860.0,299.74516888420726,290.15 +27880.0,299.76475661516884,290.15 +27900.0,299.784330353285,290.15 +27920.0,299.8038900571495,290.15 +27940.0,299.8234356853858,290.15 +27960.0,299.8429671966471,290.15 +27980.0,299.86248454961645,290.15 +28000.0,299.8819877030069,290.15 +28020.0,299.9014766155615,290.15 +28040.0,299.92095124605345,290.15 +28060.0,299.9404115532861,290.15 +28080.0,299.95985749609315,290.15 +28100.0,299.9792890333388,290.15 +28120.0,299.9987061239175,290.15 +28140.0,300.01810872675435,290.15 +28160.0,300.0374968008052,290.15 +28180.0,300.0568703050564,290.15 +28200.0,300.0762291985255,290.15 +28220.0,300.0955734402605,290.15 +28240.0,300.1149029893408,290.15 +28260.0,300.13421780487664,290.15 +28280.0,300.1535178460095,290.15 +28300.0,300.172803071912,290.15 +28320.0,300.19207344178835,290.15 +28340.0,300.21132891487395,290.15 +28360.0,300.23056945043584,290.15 +28380.0,300.2497950077726,290.15 +28400.0,300.2690055462146,290.15 +28420.0,300.2882010251238,290.15 +28440.0,300.3073814038941,290.15 +28460.0,300.32654664195144,290.15 +28480.0,300.34569669875367,290.15 +28500.0,300.3648315337908,290.15 +28520.0,300.383951106585,290.15 +28540.0,300.4030553766908,290.15 +28560.0,300.422144303695,290.15 +28580.0,300.44121784721705,290.15 +28600.0,300.4602759669086,290.15 +28620.0,300.4793186224543,290.15 +28640.0,300.49834577357126,290.15 +28660.0,300.51735738000957,290.15 +28680.0,300.536353401552,290.15 +28700.0,300.55533379801443,290.15 +28720.0,300.57429852924577,290.15 +28740.0,300.5932475551281,290.15 +28760.0,300.6121808355766,290.15 +28780.0,300.63109833053994,290.15 +28800.0,300.65,290.15 +28820.0,300.6688858039722,293.15 +28840.0,300.6877557025056,293.15 +28860.0,300.7066096556829,293.15 +28880.0,300.7254476236203,293.15 +28900.0,300.7442695664682,293.15 +28920.0,300.76307544441056,293.15 +28940.0,300.7818652176655,293.15 +28960.0,300.8006388464851,293.15 +28980.0,300.8193962911558,293.15 +29000.0,300.83813751199796,293.15 +29020.0,300.85686246936655,293.15 +29040.0,300.8755711236508,293.15 +29060.0,300.8942634352744,293.15 +29080.0,300.9129393646958,293.15 +29100.0,300.9315988724078,293.15 +29120.0,300.9502419189382,293.15 +29140.0,300.96886846484955,293.15 +29160.0,300.98747847073923,293.15 +29180.0,301.0060718972397,293.15 +29200.0,301.02464870501836,293.15 +29220.0,301.043208854778,293.15 +29240.0,301.0617523072565,293.15 +29260.0,301.0802790232269,293.15 +29280.0,301.09878896349807,293.15 +29300.0,301.1172820889139,293.15 +29320.0,301.13575836035415,293.15 +29340.0,301.15421773873413,293.15 +29360.0,301.17266018500493,293.15 +29380.0,301.1910856601534,293.15 +29400.0,301.20949412520235,293.15 +29420.0,301.22788554121047,293.15 +29440.0,301.24625986927265,293.15 +29460.0,301.2646170705199,293.15 +29480.0,301.28295710611934,293.15 +29500.0,301.3012799372745,293.15 +29520.0,301.31958552522536,293.15 +29540.0,301.3378738312483,293.15 +29560.0,301.3561448166562,293.15 +29580.0,301.3743984427987,293.15 +29600.0,301.39263467106207,293.15 +29620.0,301.41085346286945,293.15 +29640.0,301.4290547796808,293.15 +29660.0,301.44723858299324,293.15 +29680.0,301.4654048343406,293.15 +29700.0,301.483553495294,293.15 +29720.0,301.5016845274619,293.15 +29740.0,301.51979789249,293.15 +29760.0,301.5378935520612,293.15 +29780.0,301.555971467896,293.15 +29800.0,301.5740316017524,293.15 +29820.0,301.592073915426,293.15 +29840.0,301.61009837075017,293.15 +29860.0,301.628104929596,293.15 +29880.0,301.64609355387245,293.15 +29900.0,301.6640642055264,293.15 +29920.0,301.68201684654275,293.15 +29940.0,301.69995143894454,293.15 +29960.0,301.7178679447929,293.15 +29980.0,301.73576632618733,293.15 +30000.0,301.75364654526567,293.15 +30020.0,301.77150856420405,293.15 +30040.0,301.78935234521725,293.15 +30060.0,301.8071778505585,293.15 +30080.0,301.82498504251976,293.15 +30100.0,301.8427738834318,293.15 +30120.0,301.8605443356641,293.15 +30140.0,301.878296361625,293.15 +30160.0,301.896029923762,293.15 +30180.0,301.9137449845615,293.15 +30200.0,301.9314415065491,293.15 +30220.0,301.94911945228955,293.15 +30240.0,301.9667787843871,293.15 +30260.0,301.9844194654851,293.15 +30280.0,302.00204145826643,293.15 +30300.0,302.0196447254537,293.15 +30320.0,302.03722922980893,293.15 +30340.0,302.0547949341339,293.15 +30360.0,302.0723418012701,293.15 +30380.0,302.08986979409895,293.15 +30400.0,302.10737887554177,293.15 +30420.0,302.12486900855987,293.15 +30440.0,302.14234015615466,293.15 +30460.0,302.15979228136763,293.15 +30480.0,302.1772253472807,293.15 +30500.0,302.1946393170159,293.15 +30520.0,302.21203415373583,293.15 +30540.0,302.2294098206434,293.15 +30560.0,302.2467662809822,293.15 +30580.0,302.2641034980363,293.15 +30600.0,302.28142143513077,293.15 +30620.0,302.2987200556312,293.15 +30640.0,302.315999322944,293.15 +30660.0,302.3332592005167,293.15 +30680.0,302.3504996518379,293.15 +30700.0,302.36772064043697,293.15 +30720.0,302.38492212988484,293.15 +30740.0,302.40210408379346,293.15 +30760.0,302.41926646581607,293.15 +30780.0,302.4364092396475,293.15 +30800.0,302.4535323690239,293.15 +30820.0,302.470635817723,293.15 +30840.0,302.48771954956425,293.15 +30860.0,302.5047835284088,293.15 +30880.0,302.5218277181594,293.15 +30900.0,302.53885208276085,293.15 +30920.0,302.5558565861999,293.15 +30940.0,302.5728411925052,293.15 +30960.0,302.5898058657475,293.15 +30980.0,302.6067505700399,293.15 +31000.0,302.62367526953744,293.15 +31020.0,302.6405799284377,293.15 +31040.0,302.6574645109806,293.15 +31060.0,302.6743289814486,293.15 +31080.0,302.69117330416645,293.15 +31100.0,302.7079974435018,293.15 +31120.0,302.7248013638649,293.15 +31140.0,302.74158502970874,293.15 +31160.0,302.7583484055292,293.15 +31180.0,302.77509145586504,293.15 +31200.0,302.7918141452981,293.15 +31220.0,302.8085164384531,293.15 +31240.0,302.82519829999814,293.15 +31260.0,302.8418596946444,293.15 +31280.0,302.85850058714647,293.15 +31300.0,302.87512094230215,293.15 +31320.0,302.89172072495273,293.15 +31340.0,302.90829989998315,293.15 +31360.0,302.9248584323218,293.15 +31380.0,302.9413962869408,293.15 +31400.0,302.95791342885605,293.15 +31420.0,302.9744098231271,293.15 +31440.0,302.9908854348576,293.15 +31460.0,303.007340229195,293.15 +31480.0,303.02377417133096,293.15 +31500.0,303.040187226501,293.15 +31520.0,303.0565793599851,293.15 +31540.0,303.0729505371073,293.15 +31560.0,303.089300723236,293.15 +31580.0,303.10562988378416,293.15 +31600.0,303.12193798420907,293.15 +31620.0,303.1382249900125,293.15 +31640.0,303.154490866741,293.15 +31660.0,303.17073557998583,293.15 +31680.0,303.18695909538286,293.15 +31700.0,303.2031613786129,293.15 +31720.0,303.2193423954017,293.15 +31740.0,303.23550211152,293.15 +31760.0,303.2516404927835,293.15 +31780.0,303.26775750505305,293.15 +31800.0,303.2838531142349,293.15 +31820.0,303.29992728628025,293.15 +31840.0,303.315979987186,293.15 +31860.0,303.3320111829941,293.15 +31880.0,303.3480208397923,293.15 +31900.0,303.3640089237138,293.15 +31920.0,303.37997540093744,293.15 +31940.0,303.39592023768773,293.15 +31960.0,303.411843400235,293.15 +31980.0,303.42774485489537,293.15 +32000.0,303.443624568031,293.15 +32020.0,303.4594825060499,293.15 +32040.0,303.47531863540627,293.15 +32060.0,303.4911329226004,293.15 +32080.0,303.50692533417873,293.15 +32100.0,303.522695836734,293.15 +32120.0,303.5384443969054,293.15 +32140.0,303.5541709813784,293.15 +32160.0,303.56987555688494,293.15 +32180.0,303.5855580902037,293.15 +32200.0,303.6012185481598,293.15 +32220.0,303.61685689762515,293.15 +32240.0,303.6324731055185,293.15 +32260.0,303.6480671388052,293.15 +32280.0,303.66363896449775,293.15 +32300.0,303.6791885496555,293.15 +32320.0,303.6947158613849,293.15 +32340.0,303.7102208668395,293.15 +32360.0,303.72570353322004,293.15 +32380.0,303.74116382777447,293.15 +32400.0,303.75660171779816,293.15 +32420.0,303.77201717063383,293.15 +32440.0,303.78741015367166,293.15 +32460.0,303.80278063434923,293.15 +32480.0,303.818128580152,293.15 +32500.0,303.83345395861295,293.15 +32520.0,303.8487567373127,293.15 +32540.0,303.86403688387986,293.15 +32560.0,303.87929436599075,293.15 +32580.0,303.8945291513698,293.15 +32600.0,303.9097412077893,293.15 +32620.0,303.9249305030698,293.15 +32640.0,303.94009700507974,293.15 +32660.0,303.95524068173603,293.15 +32680.0,303.97036150100377,293.15 +32700.0,303.9854594308963,293.15 +32720.0,304.0005344394756,293.15 +32740.0,304.01558649485196,293.15 +32760.0,304.0306155651843,293.15 +32780.0,304.0456216186801,293.15 +32800.0,304.06060462359574,293.15 +32820.0,304.075564548236,293.15 +32840.0,304.09050136095476,293.15 +32860.0,304.10541503015475,293.15 +32880.0,304.1203055242875,293.15 +32900.0,304.13517281185386,293.15 +32920.0,304.15001686140346,293.15 +32940.0,304.16483764153526,293.15 +32960.0,304.1796351208974,293.15 +32980.0,304.1944092681873,293.15 +33000.0,304.20916005215184,293.15 +33020.0,304.2238874415871,293.15 +33040.0,304.2385914053389,293.15 +33060.0,304.25327191230247,293.15 +33080.0,304.2679289314226,293.15 +33100.0,304.28256243169403,293.15 +33120.0,304.2971723821609,293.15 +33140.0,304.3117587519174,293.15 +33160.0,304.3263215101076,293.15 +33180.0,304.3408606259255,293.15 +33200.0,304.35537606861493,293.15 +33220.0,304.36986780747003,293.15 +33240.0,304.384335811835,293.15 +33260.0,304.39878005110427,293.15 +33280.0,304.41320049472245,293.15 +33300.0,304.4275971121846,293.15 +33320.0,304.4419698730362,293.15 +33340.0,304.456318746873,293.15 +33360.0,304.4706437033416,293.15 +33380.0,304.48494471213877,293.15 +33400.0,304.49922174301236,293.15 +33420.0,304.51347476576075,293.15 +33440.0,304.527703750233,293.15 +33460.0,304.5419086663293,293.15 +33480.0,304.55608948400044,293.15 +33500.0,304.57024617324845,293.15 +33520.0,304.58437870412627,293.15 +33540.0,304.5984870467379,293.15 +33560.0,304.6125711712387,293.15 +33580.0,304.626631047835,293.15 +33600.0,304.64066664678467,293.15 +33620.0,304.65467793839673,293.15 +33640.0,304.6686648930318,293.15 +33660.0,304.68262748110186,293.15 +33680.0,304.6965656730705,293.15 +33700.0,304.71047943945285,293.15 +33720.0,304.72436875081576,293.15 +33740.0,304.73823357777786,293.15 +33760.0,304.75207389100945,293.15 +33780.0,304.76588966123273,293.15 +33800.0,304.77968085922197,293.15 +33820.0,304.7934474558032,293.15 +33840.0,304.80718942185456,293.15 +33860.0,304.82090672830634,293.15 +33880.0,304.83459934614103,293.15 +33900.0,304.8482672463932,293.15 +33920.0,304.86191040014984,293.15 +33940.0,304.8755287785503,293.15 +33960.0,304.88912235278616,293.15 +33980.0,304.9026910941017,293.15 +34000.0,304.9162349737936,293.15 +34020.0,304.92975396321117,293.15 +34040.0,304.9432480337563,293.15 +34060.0,304.9567171568837,293.15 +34080.0,304.9701613041008,293.15 +34100.0,304.9835804469679,293.15 +34120.0,304.9969745570981,293.15 +34140.0,305.0103436061576,293.15 +34160.0,305.02368756586554,293.15 +34180.0,305.03700640799406,293.15 +34200.0,305.0503001043685,293.15 +34220.0,305.06356862686744,293.15 +34240.0,305.0768119474227,293.15 +34260.0,305.09003003801934,293.15 +34280.0,305.1032228706958,293.15 +34300.0,305.116390417544,293.15 +34320.0,305.1295326507094,293.15 +34340.0,305.1426495423908,293.15 +34360.0,305.1557410648409,293.15 +34380.0,305.1688071903659,293.15 +34400.0,305.1818478913256,293.15 +34420.0,305.1948631401339,293.15 +34440.0,305.20785290925824,293.15 +34460.0,305.2208171712201,293.15 +34480.0,305.23375589859495,293.15 +34500.0,305.2466690640122,293.15 +34520.0,305.2595566401554,293.15 +34540.0,305.2724185997621,293.15 +34560.0,305.2852549156242,293.15 +34580.0,305.29806556058776,293.15 +34600.0,305.31085050755314,293.15 +34620.0,305.32360972947515,293.15 +34640.0,305.3363431993629,293.15 +34660.0,305.34905089028007,293.15 +34680.0,305.36173277534476,293.15 +34700.0,305.3743888277298,293.15 +34720.0,305.38701902066254,293.15 +34740.0,305.39962332742516,293.15 +34760.0,305.41220172135445,293.15 +34780.0,305.42475417584217,293.15 +34800.0,305.4372806643349,293.15 +34820.0,305.44978116033394,293.15 +34840.0,305.46225563739597,293.15 +34860.0,305.47470406913243,293.15 +34880.0,305.4871264292099,293.15 +34900.0,305.4995226913502,293.15 +34920.0,305.51189282933024,293.15 +34940.0,305.52423681698224,293.15 +34960.0,305.5365546281938,293.15 +34980.0,305.5488462369078,293.15 +35000.0,305.56111161712266,293.15 +35020.0,305.5733507428921,293.15 +35040.0,305.5855635883256,293.15 +35060.0,305.5977501275881,293.15 +35080.0,305.6099103349002,293.15 +35100.0,305.62204418453814,293.15 +35120.0,305.63415165083416,293.15 +35140.0,305.646232708176,293.15 +35160.0,305.6582873310075,293.15 +35180.0,305.6703154938283,293.15 +35200.0,305.68231717119403,293.15 +35220.0,305.6942923377164,293.15 +35240.0,305.70624096806307,293.15 +35260.0,305.71816303695806,293.15 +35280.0,305.73005851918134,293.15 +35300.0,305.7419273895693,293.15 +35320.0,305.7537696230145,293.15 +35340.0,305.76558519446587,293.15 +35360.0,305.77737407892886,293.15 +35380.0,305.7891362514652,293.15 +35400.0,305.80087168719325,293.15 +35420.0,305.8125803612879,293.15 +35440.0,305.82426224898063,293.15 +35460.0,305.8359173255596,293.15 +35480.0,305.8475455663696,293.15 +35500.0,305.8591469468124,293.15 +35520.0,305.8707214423464,293.15 +35540.0,305.88226902848686,293.15 +35560.0,305.89378968080615,293.15 +35580.0,305.90528337493345,293.15 +35600.0,305.916750086555,293.15 +35620.0,305.9281897914141,293.15 +35640.0,305.93960246531134,293.15 +35660.0,305.9509880841043,293.15 +35680.0,305.96234662370784,293.15 +35700.0,305.9736780600942,293.15 +35720.0,305.98498236929277,293.15 +35740.0,305.99625952739046,293.15 +35760.0,306.00750951053163,293.15 +35780.0,306.0187322949181,293.15 +35800.0,306.0299278568092,293.15 +35820.0,306.04109617252175,293.15 +35840.0,306.05223721843043,293.15 +35860.0,306.0633509709675,293.15 +35880.0,306.07443740662285,293.15 +35900.0,306.08549650194436,293.15 +35920.0,306.0965282335375,293.15 +35940.0,306.1075325780659,293.15 +35960.0,306.1185095122509,293.15 +35980.0,306.129459012872,293.15 +36000.0,306.14038105676656,293.15 +36020.0,306.1512756208301,293.15 +36040.0,306.16214268201634,293.15 +36060.0,306.1729822173371,293.15 +36080.0,306.1837942038624,293.15 +36100.0,306.19457861872064,293.15 +36120.0,306.20533543909846,293.15 +36140.0,306.2160646422409,293.15 +36160.0,306.22676620545144,293.15 +36180.0,306.2374401060919,293.15 +36200.0,306.2480863215829,293.15 +36220.0,306.25870482940337,293.15 +36240.0,306.2692956070909,293.15 +36260.0,306.2798586322418,293.15 +36280.0,306.2903938825112,293.15 +36300.0,306.3009013356126,293.15 +36320.0,306.3113809693187,293.15 +36340.0,306.3218327614609,293.15 +36360.0,306.33225668992947,293.15 +36380.0,306.3426527326736,293.15 +36400.0,306.3530208677016,293.15 +36420.0,306.36336107308074,293.15 +36440.0,306.3736733269373,293.15 +36460.0,306.3839576074568,293.15 +36480.0,306.3942138928839,293.15 +36500.0,306.4044421615224,293.15 +36520.0,306.41464239173547,293.15 +36540.0,306.4248145619456,293.15 +36560.0,306.43495865063454,293.15 +36580.0,306.4450746363436,293.15 +36600.0,306.4551624976733,293.15 +36620.0,306.4652222132839,293.15 +36640.0,306.47525376189503,293.15 +36660.0,306.48525712228604,293.15 +36680.0,306.49523227329576,293.15 +36700.0,306.5051791938228,293.15 +36720.0,306.5150978628255,293.15 +36740.0,306.52498825932184,293.15 +36760.0,306.5348503623898,293.15 +36780.0,306.544684151167,293.15 +36800.0,306.55448960485114,293.15 +36820.0,306.56426670269974,293.15 +36840.0,306.57401542403034,293.15 +36860.0,306.58373574822053,293.15 +36880.0,306.5934276547079,293.15 +36900.0,306.6030911229903,293.15 +36920.0,306.61272613262554,293.15 +36940.0,306.6223326632318,293.15 +36960.0,306.6319106944875,293.15 +36980.0,306.6414602061311,293.15 +37000.0,306.6509811779618,293.15 +37020.0,306.6604735898388,293.15 +37040.0,306.66993742168194,293.15 +37060.0,306.6793726534714,293.15 +37080.0,306.6887792652479,293.15 +37100.0,306.69815723711275,293.15 +37120.0,306.7075065492278,293.15 +37140.0,306.7168271818155,293.15 +37160.0,306.726119115159,293.15 +37180.0,306.7353823296022,293.15 +37200.0,306.74461680554975,293.15 +37220.0,306.7538225234669,293.15 +37240.0,306.76299946388,293.15 +37260.0,306.7721476073762,293.15 +37280.0,306.7812669346034,293.15 +37300.0,306.79035742627076,293.15 +37320.0,306.79941906314815,293.15 +37340.0,306.8084518260666,293.15 +37360.0,306.8174556959182,293.15 +37380.0,306.8264306536563,293.15 +37400.0,306.8353766802952,293.15 +37420.0,306.8442937569105,293.15 +37440.0,306.853181864639,293.15 +37460.0,306.86204098467886,293.15 +37480.0,306.87087109828946,293.15 +37500.0,306.8796721867917,293.15 +37520.0,306.88844423156763,293.15 +37540.0,306.897187214061,293.15 +37560.0,306.9059011157768,293.15 +37580.0,306.91458591828183,293.15 +37600.0,306.9232416032041,293.15 +37620.0,306.93186815223345,293.15 +37640.0,306.94046554712133,293.15 +37660.0,306.94903376968074,293.15 +37680.0,306.95757280178657,293.15 +37700.0,306.96608262537535,293.15 +37720.0,306.97456322244534,293.15 +37740.0,306.98301457505676,293.15 +37760.0,306.9914366653316,293.15 +37780.0,306.99982947545385,293.15 +37800.0,307.0081929876693,293.15 +37820.0,307.0165271842858,293.15 +37840.0,307.0248320476732,293.15 +37860.0,307.0331075602635,293.15 +37880.0,307.04135370455054,293.15 +37900.0,307.04957046309056,293.15 +37920.0,307.0577578185018,293.15 +37940.0,307.0659157534647,293.15 +37960.0,307.07404425072207,293.15 +37980.0,307.08214329307884,293.15 +38000.0,307.0902128634023,293.15 +38020.0,307.0982529446221,293.15 +38040.0,307.10626351973036,293.15 +38060.0,307.11424457178134,293.15 +38080.0,307.1221960838921,293.15 +38100.0,307.13011803924195,293.15 +38120.0,307.1380104210728,293.15 +38140.0,307.14587321268914,293.15 +38160.0,307.153706397458,293.15 +38180.0,307.1615099588091,293.15 +38200.0,307.1692838802348,293.15 +38220.0,307.17702814529014,293.15 +38240.0,307.18474273759296,293.15 +38260.0,307.1924276408238,293.15 +38280.0,307.20008283872596,293.15 +38300.0,307.2077083151057,293.15 +38320.0,307.21530405383214,293.15 +38340.0,307.22287003883724,293.15 +38360.0,307.2304062541159,293.15 +38380.0,307.23791268372605,293.15 +38400.0,307.2453893117886,293.15 +38420.0,307.2528361224875,293.15 +38440.0,307.26025310006975,293.15 +38460.0,307.26764022884555,293.15 +38480.0,307.2749974931881,293.15 +38500.0,307.28232487753394,293.15 +38520.0,307.2896223663827,293.15 +38540.0,307.2968899442972,293.15 +38560.0,307.3041275959037,293.15 +38580.0,307.31133530589176,293.15 +38600.0,307.31851305901404,293.15 +38620.0,307.32566084008687,293.15 +38640.0,307.33277863398973,293.15 +38660.0,307.3398664256657,293.15 +38680.0,307.34692420012135,293.15 +38700.0,307.35395194242653,293.15 +38720.0,307.3609496377149,293.15 +38740.0,307.3679172711835,293.15 +38760.0,307.37485482809296,293.15 +38780.0,307.3817622937676,293.15 +38800.0,307.3886396535955,293.15 +38820.0,307.39548689302814,293.15 +38840.0,307.40230399758093,293.15 +38860.0,307.409090952833,293.15 +38880.0,307.41584774442725,293.15 +38900.0,307.4225743580704,293.15 +38920.0,307.4292707795329,293.15 +38940.0,307.4359369946491,293.15 +38960.0,307.4425729893175,293.15 +38980.0,307.4491787495002,293.15 +39000.0,307.4557542612234,293.15 +39020.0,307.4622995105772,293.15 +39040.0,307.46881448371596,293.15 +39060.0,307.4752991668578,293.15 +39080.0,307.481753546285,293.15 +39100.0,307.4881776083441,293.15 +39120.0,307.4945713394455,293.15 +39140.0,307.50093472606403,293.15 +39160.0,307.50726775473856,293.15 +39180.0,307.51357041207217,293.15 +39200.0,307.51984268473234,293.15 +39220.0,307.52608455945057,293.15 +39240.0,307.53229602302287,293.15 +39260.0,307.53847706230954,293.15 +39280.0,307.54462766423524,293.15 +39300.0,307.5507478157889,293.15 +39320.0,307.5568375040241,293.15 +39340.0,307.56289671605856,293.15 +39360.0,307.56892543907475,293.15 +39380.0,307.5749236603195,293.15 +39400.0,307.5808913671042,293.15 +39420.0,307.58682854680467,293.15 +39440.0,307.59273518686155,293.15 +39460.0,307.59861127477984,293.15 +39480.0,307.6044567981293,293.15 +39500.0,307.6102717445444,293.15 +39520.0,307.61605610172404,293.15 +39540.0,307.6218098574322,293.15 +39560.0,307.6275329994972,293.15 +39580.0,307.63322551581246,293.15 +39600.0,307.638887394336,293.15 +39620.0,307.6445186230907,293.15 +39640.0,307.65011919016416,293.15 +39660.0,307.65568908370915,293.15 +39680.0,307.66122829194296,293.15 +39700.0,307.666736803148,293.15 +39720.0,307.67221460567157,293.15 +39740.0,307.677661687926,293.15 +39760.0,307.6830780383885,293.15 +39780.0,307.6884636456013,293.15 +39800.0,307.6938184981717,293.15 +39820.0,307.6991425847721,293.15 +39840.0,307.7044358941399,293.15 +39860.0,307.7096984150777,293.15 +39880.0,307.71493013645306,293.15 +39900.0,307.7201310471989,293.15 +39920.0,307.7253011363132,293.15 +39940.0,307.7304403928591,293.15 +39960.0,307.73554880596515,293.15 +39980.0,307.7406263648249,293.15 +40000.0,307.7456730586973,293.15 +40020.0,307.7506888769067,293.15 +40040.0,307.7556738088425,293.15 +40060.0,307.76062784395975,293.15 +40080.0,307.7655509717785,293.15 +40100.0,307.7704431818845,293.15 +40120.0,307.77530446392876,293.15 +40140.0,307.7801348076277,293.15 +40160.0,307.78493420276317,293.15 +40180.0,307.7897026391827,293.15 +40200.0,307.79444010679896,293.15 +40220.0,307.79914659559046,293.15 +40240.0,307.80382209560105,293.15 +40260.0,307.80846659694015,293.15 +40280.0,307.81308008978283,293.15 +40300.0,307.81766256436975,293.15 +40320.0,307.8222140110071,293.15 +40340.0,307.8267344200667,293.15 +40360.0,307.8312237819862,293.15 +40380.0,307.8356820872687,293.15 +40400.0,307.84010932648323,293.15 +40420.0,307.84450549026434,293.15 +40440.0,307.8488705693124,293.15 +40460.0,307.8532045543936,293.15 +40480.0,307.8575074363397,293.15 +40500.0,307.8617792060484,293.15 +40520.0,307.86601985448334,293.15 +40540.0,307.8702293726738,293.15 +40560.0,307.87440775171495,293.15 +40580.0,307.8785549827678,293.15 +40600.0,307.88267105705944,293.15 +40620.0,307.8867559658826,293.15 +40640.0,307.89080970059615,293.15 +40660.0,307.89483225262484,293.15 +40680.0,307.8988236134593,293.15 +40700.0,307.90278377465626,293.15 +40720.0,307.90671272783834,293.15 +40740.0,307.91061046469434,293.15 +40760.0,307.9144769769789,293.15 +40780.0,307.9183122565129,293.15 +40800.0,307.9221162951831,293.15 +40820.0,307.92588908494247,293.15 +40840.0,307.9296306178101,293.15 +40860.0,307.93334088587113,293.15 +40880.0,307.93701988127685,293.15 +40900.0,307.9406675962448,293.15 +40920.0,307.94428402305846,293.15 +40940.0,307.94786915406775,293.15 +40960.0,307.95142298168867,293.15 +40980.0,307.95494549840345,293.15 +41000.0,307.9584366967606,293.15 +41020.0,307.9618965693748,293.15 +41040.0,307.96532510892706,293.15 +41060.0,307.9687223081646,293.15 +41080.0,307.9720881599011,293.15 +41100.0,307.9754226570164,293.15 +41120.0,307.97872579245666,293.15 +41140.0,307.98199755923446,293.15 +41160.0,307.9852379504287,293.15 +41180.0,307.9884469591847,293.15 +41200.0,307.99162457871415,293.15 +41220.0,307.994770802295,293.15 +41240.0,307.9978856232719,293.15 +41260.0,308.0009690350556,293.15 +41280.0,308.00402103112356,293.15 +41300.0,308.00704160501954,293.15 +41320.0,308.0100307503538,293.15 +41340.0,308.01298846080323,293.15 +41360.0,308.015914730111,293.15 +41380.0,308.01880955208685,293.15 +41400.0,308.02167292060716,293.15 +41420.0,308.02450482961467,293.15 +41440.0,308.0273052731189,293.15 +41460.0,308.0300742451957,293.15 +41480.0,308.0328117399876,293.15 +41500.0,308.03551775170376,293.15 +41520.0,308.0381922746198,293.15 +41540.0,308.0408353030781,293.15 +41560.0,308.0434468314876,293.15 +41580.0,308.0460268543239,293.15 +41600.0,308.0485753661291,293.15 +41620.0,308.05109236151225,293.15 +41640.0,308.0535778351488,293.15 +41660.0,308.056031781781,293.15 +41680.0,308.0584541962178,293.15 +41700.0,308.06084507333475,293.15 +41720.0,308.06320440807434,293.15 +41740.0,308.0655321954455,293.15 +41760.0,308.06782843052406,293.15 +41780.0,308.0700931084526,293.15 +41800.0,308.0723262244405,293.15 +41820.0,308.07452777376363,293.15 +41840.0,308.07669775176504,293.15 +41860.0,308.07883615385424,293.15 +41880.0,308.08094297550764,293.15 +41900.0,308.0830182122686,293.15 +41920.0,308.08506185974704,293.15 +41940.0,308.0870739136199,293.15 +41960.0,308.08905436963084,293.15 +41980.0,308.0910032235905,293.15 +42000.0,308.09292047137615,293.15 +42020.0,308.0948061089321,293.15 +42040.0,308.09666013226956,293.15 +42060.0,308.0984825374664,293.15 +42080.0,308.10027332066755,293.15 +42100.0,308.1020324780848,293.15 +42120.0,308.1037600059969,293.15 +42140.0,308.10545590074935,293.15 +42160.0,308.10712015875464,293.15 +42180.0,308.1087527764923,293.15 +42200.0,308.1103537505086,293.15 +42220.0,308.11192307741686,293.15 +42240.0,308.11346075389736,293.15 +42260.0,308.11496677669726,293.15 +42280.0,308.1164411426308,293.15 +42300.0,308.117883848579,293.15 +42320.0,308.1192948914901,293.15 +42340.0,308.12067426837905,293.15 +42360.0,308.12202197632797,293.15 +42380.0,308.12333801248593,293.15 +42400.0,308.124622374069,293.15 +42420.0,308.12587505836024,293.15 +42440.0,308.12709606270965,293.15 +42460.0,308.1282853845344,293.15 +42480.0,308.1294430213186,293.15 +42500.0,308.13056897061335,293.15 +42520.0,308.1316632300368,293.15 +42540.0,308.13272579727425,293.15 +42560.0,308.13375667007784,293.15 +42580.0,308.13475584626696,293.15 +42600.0,308.13572332372786,293.15 +42620.0,308.13665910041397,293.15 +42640.0,308.1375631743458,293.15 +42660.0,308.1384355436108,293.15 +42680.0,308.13927620636366,293.15 +42700.0,308.14008516082595,293.15 +42720.0,308.14086240528644,293.15 +42740.0,308.1416079381009,293.15 +42760.0,308.14232175769234,293.15 +42780.0,308.1430038625507,293.15 +42800.0,308.143654251233,293.15 +42820.0,308.1442729223634,293.15 +42840.0,308.1448598746333,293.15 +42860.0,308.145415106801,293.15 +42880.0,308.1459386176919,293.15 +42900.0,308.1464304061986,293.15 +42920.0,308.1468904712808,293.15 +42940.0,308.14731881196525,293.15 +42960.0,308.1477154273459,293.15 +42980.0,308.14808031658356,293.15 +43000.0,308.1484134789066,293.15 +43020.0,308.1487149136101,293.15 +43040.0,308.1489846200564,293.15 +43060.0,308.149222597675,293.15 +43080.0,308.1494288459626,293.15 +43100.0,308.14960336448263,293.15 +43120.0,308.14974615286616,293.15 +43140.0,308.149857210811,293.15 +43160.0,308.1499365380823,293.15 +43180.0,308.1499841345122,293.15 +43200.0,308.15,293.15 +43220.0,308.1499841345122,293.15 +43240.0,308.1499365380823,293.15 +43260.0,308.149857210811,293.15 +43280.0,308.14974615286616,293.15 +43300.0,308.14960336448263,293.15 +43320.0,308.1494288459626,293.15 +43340.0,308.149222597675,293.15 +43360.0,308.1489846200564,293.15 +43380.0,308.1487149136101,293.15 +43400.0,308.1484134789066,293.15 +43420.0,308.14808031658356,293.15 +43440.0,308.1477154273459,293.15 +43460.0,308.14731881196525,293.15 +43480.0,308.1468904712808,293.15 +43500.0,308.1464304061986,293.15 +43520.0,308.1459386176919,293.15 +43540.0,308.145415106801,293.15 +43560.0,308.1448598746333,293.15 +43580.0,308.1442729223634,293.15 +43600.0,308.143654251233,293.15 +43620.0,308.1430038625507,293.15 +43640.0,308.14232175769234,293.15 +43660.0,308.1416079381009,293.15 +43680.0,308.14086240528644,293.15 +43700.0,308.14008516082595,293.15 +43720.0,308.13927620636366,293.15 +43740.0,308.1384355436108,293.15 +43760.0,308.1375631743458,293.15 +43780.0,308.13665910041397,293.15 +43800.0,308.13572332372786,293.15 +43820.0,308.13475584626696,293.15 +43840.0,308.13375667007784,293.15 +43860.0,308.13272579727425,293.15 +43880.0,308.1316632300368,293.15 +43900.0,308.13056897061335,293.15 +43920.0,308.1294430213186,293.15 +43940.0,308.1282853845344,293.15 +43960.0,308.12709606270965,293.15 +43980.0,308.12587505836024,293.15 +44000.0,308.124622374069,293.15 +44020.0,308.12333801248593,293.15 +44040.0,308.12202197632797,293.15 +44060.0,308.12067426837905,293.15 +44080.0,308.1192948914901,293.15 +44100.0,308.117883848579,293.15 +44120.0,308.1164411426308,293.15 +44140.0,308.11496677669726,293.15 +44160.0,308.11346075389736,293.15 +44180.0,308.11192307741686,293.15 +44200.0,308.1103537505086,293.15 +44220.0,308.1087527764923,293.15 +44240.0,308.10712015875464,293.15 +44260.0,308.10545590074935,293.15 +44280.0,308.1037600059969,293.15 +44300.0,308.1020324780848,293.15 +44320.0,308.10027332066755,293.15 +44340.0,308.0984825374664,293.15 +44360.0,308.09666013226956,293.15 +44380.0,308.0948061089321,293.15 +44400.0,308.09292047137615,293.15 +44420.0,308.0910032235905,293.15 +44440.0,308.08905436963084,293.15 +44460.0,308.0870739136199,293.15 +44480.0,308.08506185974704,293.15 +44500.0,308.0830182122686,293.15 +44520.0,308.08094297550764,293.15 +44540.0,308.07883615385424,293.15 +44560.0,308.07669775176504,293.15 +44580.0,308.07452777376363,293.15 +44600.0,308.0723262244405,293.15 +44620.0,308.0700931084526,293.15 +44640.0,308.06782843052406,293.15 +44660.0,308.0655321954455,293.15 +44680.0,308.06320440807434,293.15 +44700.0,308.06084507333475,293.15 +44720.0,308.0584541962178,293.15 +44740.0,308.056031781781,293.15 +44760.0,308.0535778351488,293.15 +44780.0,308.05109236151225,293.15 +44800.0,308.0485753661291,293.15 +44820.0,308.0460268543239,293.15 +44840.0,308.0434468314876,293.15 +44860.0,308.0408353030781,293.15 +44880.0,308.0381922746198,293.15 +44900.0,308.03551775170376,293.15 +44920.0,308.0328117399876,293.15 +44940.0,308.0300742451957,293.15 +44960.0,308.0273052731189,293.15 +44980.0,308.02450482961467,293.15 +45000.0,308.02167292060716,293.15 +45020.0,308.01880955208685,293.15 +45040.0,308.015914730111,293.15 +45060.0,308.01298846080323,293.15 +45080.0,308.0100307503538,293.15 +45100.0,308.00704160501954,293.15 +45120.0,308.00402103112356,293.15 +45140.0,308.0009690350556,293.15 +45160.0,307.9978856232719,293.15 +45180.0,307.994770802295,293.15 +45200.0,307.99162457871415,293.15 +45220.0,307.9884469591847,293.15 +45240.0,307.9852379504287,293.15 +45260.0,307.98199755923446,293.15 +45280.0,307.97872579245666,293.15 +45300.0,307.9754226570164,293.15 +45320.0,307.9720881599011,293.15 +45340.0,307.9687223081646,293.15 +45360.0,307.96532510892706,293.15 +45380.0,307.9618965693748,293.15 +45400.0,307.9584366967606,293.15 +45420.0,307.95494549840345,293.15 +45440.0,307.95142298168867,293.15 +45460.0,307.94786915406775,293.15 +45480.0,307.94428402305846,293.15 +45500.0,307.9406675962448,293.15 +45520.0,307.93701988127685,293.15 +45540.0,307.93334088587113,293.15 +45560.0,307.9296306178101,293.15 +45580.0,307.92588908494247,293.15 +45600.0,307.9221162951831,293.15 +45620.0,307.9183122565129,293.15 +45640.0,307.9144769769789,293.15 +45660.0,307.91061046469434,293.15 +45680.0,307.90671272783834,293.15 +45700.0,307.90278377465626,293.15 +45720.0,307.8988236134593,293.15 +45740.0,307.89483225262484,293.15 +45760.0,307.89080970059615,293.15 +45780.0,307.8867559658826,293.15 +45800.0,307.88267105705944,293.15 +45820.0,307.8785549827678,293.15 +45840.0,307.87440775171495,293.15 +45860.0,307.8702293726738,293.15 +45880.0,307.86601985448334,293.15 +45900.0,307.8617792060484,293.15 +45920.0,307.8575074363397,293.15 +45940.0,307.8532045543936,293.15 +45960.0,307.8488705693124,293.15 +45980.0,307.84450549026434,293.15 +46000.0,307.84010932648323,293.15 +46020.0,307.8356820872687,293.15 +46040.0,307.8312237819862,293.15 +46060.0,307.8267344200667,293.15 +46080.0,307.8222140110071,293.15 +46100.0,307.81766256436975,293.15 +46120.0,307.81308008978283,293.15 +46140.0,307.80846659694015,293.15 +46160.0,307.80382209560105,293.15 +46180.0,307.79914659559046,293.15 +46200.0,307.79444010679896,293.15 +46220.0,307.7897026391827,293.15 +46240.0,307.78493420276317,293.15 +46260.0,307.7801348076277,293.15 +46280.0,307.77530446392876,293.15 +46300.0,307.7704431818845,293.15 +46320.0,307.7655509717785,293.15 +46340.0,307.76062784395975,293.15 +46360.0,307.7556738088425,293.15 +46380.0,307.7506888769067,293.15 +46400.0,307.7456730586973,293.15 +46420.0,307.7406263648249,293.15 +46440.0,307.73554880596515,293.15 +46460.0,307.7304403928591,293.15 +46480.0,307.7253011363132,293.15 +46500.0,307.7201310471989,293.15 +46520.0,307.71493013645306,293.15 +46540.0,307.7096984150777,293.15 +46560.0,307.7044358941399,293.15 +46580.0,307.6991425847721,293.15 +46600.0,307.6938184981717,293.15 +46620.0,307.6884636456013,293.15 +46640.0,307.6830780383885,293.15 +46660.0,307.677661687926,293.15 +46680.0,307.67221460567157,293.15 +46700.0,307.666736803148,293.15 +46720.0,307.66122829194296,293.15 +46740.0,307.65568908370915,293.15 +46760.0,307.65011919016416,293.15 +46780.0,307.6445186230907,293.15 +46800.0,307.638887394336,293.15 +46820.0,307.63322551581246,293.15 +46840.0,307.6275329994972,293.15 +46860.0,307.6218098574322,293.15 +46880.0,307.61605610172404,293.15 +46900.0,307.6102717445444,293.15 +46920.0,307.6044567981293,293.15 +46940.0,307.59861127477984,293.15 +46960.0,307.59273518686155,293.15 +46980.0,307.58682854680467,293.15 +47000.0,307.5808913671042,293.15 +47020.0,307.5749236603195,293.15 +47040.0,307.56892543907475,293.15 +47060.0,307.56289671605856,293.15 +47080.0,307.5568375040241,293.15 +47100.0,307.5507478157889,293.15 +47120.0,307.54462766423524,293.15 +47140.0,307.53847706230954,293.15 +47160.0,307.53229602302287,293.15 +47180.0,307.52608455945057,293.15 +47200.0,307.51984268473234,293.15 +47220.0,307.51357041207217,293.15 +47240.0,307.50726775473856,293.15 +47260.0,307.50093472606403,293.15 +47280.0,307.4945713394455,293.15 +47300.0,307.4881776083441,293.15 +47320.0,307.481753546285,293.15 +47340.0,307.4752991668578,293.15 +47360.0,307.46881448371596,293.15 +47380.0,307.4622995105772,293.15 +47400.0,307.4557542612234,293.15 +47420.0,307.4491787495002,293.15 +47440.0,307.4425729893175,293.15 +47460.0,307.4359369946491,293.15 +47480.0,307.4292707795329,293.15 +47500.0,307.4225743580704,293.15 +47520.0,307.41584774442725,293.15 +47540.0,307.409090952833,293.15 +47560.0,307.40230399758093,293.15 +47580.0,307.39548689302814,293.15 +47600.0,307.3886396535955,293.15 +47620.0,307.3817622937676,293.15 +47640.0,307.37485482809296,293.15 +47660.0,307.3679172711835,293.15 +47680.0,307.3609496377149,293.15 +47700.0,307.35395194242653,293.15 +47720.0,307.34692420012135,293.15 +47740.0,307.3398664256657,293.15 +47760.0,307.33277863398973,293.15 +47780.0,307.32566084008687,293.15 +47800.0,307.31851305901404,293.15 +47820.0,307.31133530589176,293.15 +47840.0,307.3041275959037,293.15 +47860.0,307.2968899442972,293.15 +47880.0,307.2896223663827,293.15 +47900.0,307.28232487753394,293.15 +47920.0,307.2749974931881,293.15 +47940.0,307.26764022884555,293.15 +47960.0,307.26025310006975,293.15 +47980.0,307.2528361224875,293.15 +48000.0,307.2453893117886,293.15 +48020.0,307.23791268372605,293.15 +48040.0,307.2304062541159,293.15 +48060.0,307.22287003883724,293.15 +48080.0,307.21530405383214,293.15 +48100.0,307.2077083151057,293.15 +48120.0,307.20008283872596,293.15 +48140.0,307.1924276408238,293.15 +48160.0,307.18474273759296,293.15 +48180.0,307.17702814529014,293.15 +48200.0,307.1692838802348,293.15 +48220.0,307.1615099588091,293.15 +48240.0,307.153706397458,293.15 +48260.0,307.14587321268914,293.15 +48280.0,307.1380104210728,293.15 +48300.0,307.13011803924195,293.15 +48320.0,307.1221960838921,293.15 +48340.0,307.11424457178134,293.15 +48360.0,307.10626351973036,293.15 +48380.0,307.0982529446221,293.15 +48400.0,307.0902128634023,293.15 +48420.0,307.08214329307884,293.15 +48440.0,307.07404425072207,293.15 +48460.0,307.0659157534647,293.15 +48480.0,307.0577578185018,293.15 +48500.0,307.04957046309056,293.15 +48520.0,307.04135370455054,293.15 +48540.0,307.0331075602635,293.15 +48560.0,307.0248320476732,293.15 +48580.0,307.0165271842858,293.15 +48600.0,307.0081929876693,293.15 +48620.0,306.99982947545385,293.15 +48640.0,306.9914366653316,293.15 +48660.0,306.98301457505676,293.15 +48680.0,306.97456322244534,293.15 +48700.0,306.96608262537535,293.15 +48720.0,306.95757280178657,293.15 +48740.0,306.94903376968074,293.15 +48760.0,306.94046554712133,293.15 +48780.0,306.93186815223345,293.15 +48800.0,306.9232416032041,293.15 +48820.0,306.91458591828183,293.15 +48840.0,306.9059011157768,293.15 +48860.0,306.897187214061,293.15 +48880.0,306.88844423156763,293.15 +48900.0,306.8796721867917,293.15 +48920.0,306.8708710982895,293.15 +48940.0,306.86204098467886,293.15 +48960.0,306.853181864639,293.15 +48980.0,306.8442937569105,293.15 +49000.0,306.8353766802952,293.15 +49020.0,306.8264306536563,293.15 +49040.0,306.8174556959182,293.15 +49060.0,306.8084518260666,293.15 +49080.0,306.79941906314815,293.15 +49100.0,306.79035742627076,293.15 +49120.0,306.7812669346034,293.15 +49140.0,306.7721476073762,293.15 +49160.0,306.76299946388,293.15 +49180.0,306.7538225234669,293.15 +49200.0,306.74461680554975,293.15 +49220.0,306.73538232960226,293.15 +49240.0,306.726119115159,293.15 +49260.0,306.7168271818155,293.15 +49280.0,306.7075065492278,293.15 +49300.0,306.69815723711275,293.15 +49320.0,306.6887792652479,293.15 +49340.0,306.6793726534714,293.15 +49360.0,306.66993742168194,293.15 +49380.0,306.6604735898388,293.15 +49400.0,306.6509811779618,293.15 +49420.0,306.6414602061311,293.15 +49440.0,306.6319106944875,293.15 +49460.0,306.6223326632318,293.15 +49480.0,306.61272613262554,293.15 +49500.0,306.6030911229903,293.15 +49520.0,306.5934276547079,293.15 +49540.0,306.58373574822053,293.15 +49560.0,306.57401542403034,293.15 +49580.0,306.56426670269974,293.15 +49600.0,306.55448960485114,293.15 +49620.0,306.544684151167,293.15 +49640.0,306.5348503623898,293.15 +49660.0,306.52498825932184,293.15 +49680.0,306.5150978628255,293.15 +49700.0,306.5051791938228,293.15 +49720.0,306.49523227329576,293.15 +49740.0,306.48525712228604,293.15 +49760.0,306.47525376189503,293.15 +49780.0,306.4652222132839,293.15 +49800.0,306.4551624976733,293.15 +49820.0,306.4450746363436,293.15 +49840.0,306.4349586506346,293.15 +49860.0,306.4248145619456,293.15 +49880.0,306.41464239173547,293.15 +49900.0,306.4044421615224,293.15 +49920.0,306.3942138928839,293.15 +49940.0,306.3839576074568,293.15 +49960.0,306.3736733269373,293.15 +49980.0,306.36336107308074,293.15 +50000.0,306.3530208677016,293.15 +50020.0,306.3426527326736,293.15 +50040.0,306.33225668992947,293.15 +50060.0,306.3218327614609,293.15 +50080.0,306.3113809693187,293.15 +50100.0,306.3009013356126,293.15 +50120.0,306.2903938825112,293.15 +50140.0,306.2798586322418,293.15 +50160.0,306.2692956070909,293.15 +50180.0,306.25870482940337,293.15 +50200.0,306.2480863215829,293.15 +50220.0,306.2374401060919,293.15 +50240.0,306.22676620545144,293.15 +50260.0,306.2160646422409,293.15 +50280.0,306.20533543909846,293.15 +50300.0,306.19457861872064,293.15 +50320.0,306.1837942038624,293.15 +50340.0,306.1729822173371,293.15 +50360.0,306.16214268201634,293.15 +50380.0,306.1512756208301,293.15 +50400.0,306.14038105676656,293.15 +50420.0,306.129459012872,293.15 +50440.0,306.11850951225097,293.15 +50460.0,306.1075325780659,293.15 +50480.0,306.0965282335375,293.15 +50500.0,306.08549650194436,293.15 +50520.0,306.07443740662285,293.15 +50540.0,306.0633509709675,293.15 +50560.0,306.05223721843043,293.15 +50580.0,306.04109617252175,293.15 +50600.0,306.0299278568092,293.15 +50620.0,306.0187322949181,293.15 +50640.0,306.0075095105317,293.15 +50660.0,305.99625952739046,293.15 +50680.0,305.98498236929277,293.15 +50700.0,305.9736780600942,293.15 +50720.0,305.96234662370784,293.15 +50740.0,305.9509880841043,293.15 +50760.0,305.93960246531134,293.15 +50780.0,305.9281897914141,293.15 +50800.0,305.916750086555,293.15 +50820.0,305.90528337493345,293.15 +50840.0,305.89378968080615,293.15 +50860.0,305.88226902848686,293.15 +50880.0,305.8707214423464,293.15 +50900.0,305.8591469468124,293.15 +50920.0,305.8475455663696,293.15 +50940.0,305.8359173255596,293.15 +50960.0,305.82426224898063,293.15 +50980.0,305.8125803612879,293.15 +51000.0,305.80087168719325,293.15 +51020.0,305.7891362514652,293.15 +51040.0,305.77737407892886,293.15 +51060.0,305.76558519446587,293.15 +51080.0,305.7537696230145,293.15 +51100.0,305.7419273895693,293.15 +51120.0,305.73005851918134,293.15 +51140.0,305.71816303695806,293.15 +51160.0,305.70624096806307,293.15 +51180.0,305.6942923377164,293.15 +51200.0,305.68231717119403,293.15 +51220.0,305.6703154938283,293.15 +51240.0,305.6582873310075,293.15 +51260.0,305.646232708176,293.15 +51280.0,305.63415165083416,293.15 +51300.0,305.62204418453814,293.15 +51320.0,305.6099103349002,293.15 +51340.0,305.5977501275881,293.15 +51360.0,305.5855635883256,293.15 +51380.0,305.5733507428921,293.15 +51400.0,305.5611116171226,293.15 +51420.0,305.5488462369078,293.15 +51440.0,305.5365546281938,293.15 +51460.0,305.52423681698224,293.15 +51480.0,305.51189282933024,293.15 +51500.0,305.4995226913502,293.15 +51520.0,305.4871264292099,293.15 +51540.0,305.47470406913243,293.15 +51560.0,305.46225563739597,293.15 +51580.0,305.44978116033394,293.15 +51600.0,305.4372806643349,293.15 +51620.0,305.42475417584217,293.15 +51640.0,305.41220172135445,293.15 +51660.0,305.39962332742516,293.15 +51680.0,305.38701902066254,293.15 +51700.0,305.3743888277298,293.15 +51720.0,305.36173277534476,293.15 +51740.0,305.34905089028007,293.15 +51760.0,305.3363431993629,293.15 +51780.0,305.32360972947515,293.15 +51800.0,305.31085050755314,293.15 +51820.0,305.29806556058776,293.15 +51840.0,305.2852549156242,293.15 +51860.0,305.2724185997621,293.15 +51880.0,305.2595566401554,293.15 +51900.0,305.2466690640122,293.15 +51920.0,305.23375589859495,293.15 +51940.0,305.2208171712201,293.15 +51960.0,305.20785290925824,293.15 +51980.0,305.1948631401339,293.15 +52000.0,305.1818478913256,293.15 +52020.0,305.1688071903659,293.15 +52040.0,305.1557410648409,293.15 +52060.0,305.1426495423908,293.15 +52080.0,305.1295326507094,293.15 +52100.0,305.116390417544,293.15 +52120.0,305.1032228706958,293.15 +52140.0,305.09003003801934,293.15 +52160.0,305.0768119474227,293.15 +52180.0,305.06356862686744,293.15 +52200.0,305.0503001043685,293.15 +52220.0,305.03700640799406,293.15 +52240.0,305.02368756586554,293.15 +52260.0,305.0103436061576,293.15 +52280.0,304.99697455709816,293.15 +52300.0,304.9835804469679,293.15 +52320.0,304.9701613041008,293.15 +52340.0,304.9567171568837,293.15 +52360.0,304.9432480337563,293.15 +52380.0,304.92975396321117,293.15 +52400.0,304.9162349737936,293.15 +52420.0,304.9026910941017,293.15 +52440.0,304.8891223527862,293.15 +52460.0,304.8755287785503,293.15 +52480.0,304.8619104001499,293.15 +52500.0,304.8482672463932,293.15 +52520.0,304.83459934614103,293.15 +52540.0,304.82090672830634,293.15 +52560.0,304.80718942185456,293.15 +52580.0,304.7934474558032,293.15 +52600.0,304.77968085922197,293.15 +52620.0,304.7658896612328,293.15 +52640.0,304.75207389100945,293.15 +52660.0,304.73823357777786,293.15 +52680.0,304.72436875081576,293.15 +52700.0,304.71047943945285,293.15 +52720.0,304.6965656730705,293.15 +52740.0,304.68262748110186,293.15 +52760.0,304.6686648930318,293.15 +52780.0,304.65467793839673,293.15 +52800.0,304.64066664678467,293.15 +52820.0,304.626631047835,293.15 +52840.0,304.6125711712387,293.15 +52860.0,304.5984870467379,293.15 +52880.0,304.58437870412627,293.15 +52900.0,304.57024617324845,293.15 +52920.0,304.55608948400044,293.15 +52940.0,304.5419086663293,293.15 +52960.0,304.527703750233,293.15 +52980.0,304.51347476576075,293.15 +53000.0,304.49922174301236,293.15 +53020.0,304.48494471213877,293.15 +53040.0,304.4706437033416,293.15 +53060.0,304.456318746873,293.15 +53080.0,304.4419698730362,293.15 +53100.0,304.4275971121846,293.15 +53120.0,304.41320049472245,293.15 +53140.0,304.39878005110427,293.15 +53160.0,304.384335811835,293.15 +53180.0,304.36986780747003,293.15 +53200.0,304.35537606861493,293.15 +53220.0,304.3408606259255,293.15 +53240.0,304.3263215101076,293.15 +53260.0,304.3117587519174,293.15 +53280.0,304.2971723821609,293.15 +53300.0,304.28256243169403,293.15 +53320.0,304.26792893142266,293.15 +53340.0,304.25327191230247,293.15 +53360.0,304.2385914053389,293.15 +53380.0,304.2238874415871,293.15 +53400.0,304.20916005215184,293.15 +53420.0,304.1944092681873,293.15 +53440.0,304.1796351208974,293.15 +53460.0,304.16483764153526,293.15 +53480.0,304.15001686140346,293.15 +53500.0,304.13517281185386,293.15 +53520.0,304.1203055242875,293.15 +53540.0,304.10541503015475,293.15 +53560.0,304.09050136095476,293.15 +53580.0,304.075564548236,293.15 +53600.0,304.06060462359574,293.15 +53620.0,304.0456216186801,293.15 +53640.0,304.0306155651843,293.15 +53660.0,304.01558649485196,293.15 +53680.0,304.0005344394756,293.15 +53700.0,303.9854594308963,293.15 +53720.0,303.97036150100377,293.15 +53740.0,303.95524068173603,293.15 +53760.0,303.94009700507974,293.15 +53780.0,303.9249305030698,293.15 +53800.0,303.9097412077893,293.15 +53820.0,303.8945291513698,293.15 +53840.0,303.87929436599075,293.15 +53860.0,303.86403688387986,293.15 +53880.0,303.8487567373127,293.15 +53900.0,303.83345395861295,293.15 +53920.0,303.818128580152,293.15 +53940.0,303.80278063434923,293.15 +53960.0,303.78741015367166,293.15 +53980.0,303.77201717063383,293.15 +54000.0,303.7566017177982,293.15 +54020.0,303.74116382777447,293.15 +54040.0,303.72570353322004,293.15 +54060.0,303.7102208668395,293.15 +54080.0,303.6947158613849,293.15 +54100.0,303.6791885496555,293.15 +54120.0,303.66363896449775,293.15 +54140.0,303.6480671388052,293.15 +54160.0,303.6324731055185,293.15 +54180.0,303.61685689762515,293.15 +54200.0,303.6012185481598,293.15 +54220.0,303.5855580902037,293.15 +54240.0,303.56987555688494,293.15 +54260.0,303.5541709813784,293.15 +54280.0,303.5384443969054,293.15 +54300.0,303.52269583673404,293.15 +54320.0,303.50692533417873,293.15 +54340.0,303.4911329226004,293.15 +54360.0,303.47531863540627,293.15 +54380.0,303.45948250604994,293.15 +54400.0,303.443624568031,293.15 +54420.0,303.42774485489537,293.15 +54440.0,303.411843400235,293.15 +54460.0,303.39592023768773,293.15 +54480.0,303.37997540093744,293.15 +54500.0,303.3640089237138,293.15 +54520.0,303.34802083979235,293.15 +54540.0,303.3320111829941,293.15 +54560.0,303.315979987186,293.15 +54580.0,303.29992728628025,293.15 +54600.0,303.2838531142349,293.15 +54620.0,303.26775750505305,293.15 +54640.0,303.2516404927835,293.15 +54660.0,303.23550211152,293.15 +54680.0,303.2193423954017,293.15 +54700.0,303.2031613786129,293.15 +54720.0,303.18695909538286,293.15 +54740.0,303.17073557998583,293.15 +54760.0,303.154490866741,293.15 +54780.0,303.1382249900125,293.15 +54800.0,303.12193798420907,293.15 +54820.0,303.10562988378416,293.15 +54840.0,303.089300723236,293.15 +54860.0,303.07295053710726,293.15 +54880.0,303.0565793599851,293.15 +54900.0,303.040187226501,293.15 +54920.0,303.02377417133096,293.15 +54940.0,303.007340229195,293.15 +54960.0,302.9908854348576,293.15 +54980.0,302.9744098231271,293.15 +55000.0,302.95791342885605,293.15 +55020.0,302.9413962869408,293.15 +55040.0,302.9248584323218,293.15 +55060.0,302.90829989998315,293.15 +55080.0,302.89172072495273,293.15 +55100.0,302.87512094230215,293.15 +55120.0,302.85850058714647,293.15 +55140.0,302.8418596946444,293.15 +55160.0,302.82519829999814,293.15 +55180.0,302.8085164384531,293.15 +55200.0,302.7918141452981,293.15 +55220.0,302.77509145586504,293.15 +55240.0,302.7583484055292,293.15 +55260.0,302.74158502970874,293.15 +55280.0,302.7248013638649,293.15 +55300.0,302.7079974435018,293.15 +55320.0,302.69117330416645,293.15 +55340.0,302.6743289814486,293.15 +55360.0,302.6574645109806,293.15 +55380.0,302.6405799284377,293.15 +55400.0,302.62367526953744,293.15 +55420.0,302.6067505700399,293.15 +55440.0,302.5898058657475,293.15 +55460.0,302.5728411925052,293.15 +55480.0,302.5558565861999,293.15 +55500.0,302.53885208276085,293.15 +55520.0,302.5218277181594,293.15 +55540.0,302.5047835284088,293.15 +55560.0,302.48771954956425,293.15 +55580.0,302.470635817723,293.15 +55600.0,302.4535323690239,293.15 +55620.0,302.4364092396475,293.15 +55640.0,302.41926646581607,293.15 +55660.0,302.40210408379346,293.15 +55680.0,302.38492212988484,293.15 +55700.0,302.36772064043697,293.15 +55720.0,302.3504996518379,293.15 +55740.0,302.3332592005167,293.15 +55760.0,302.315999322944,293.15 +55780.0,302.2987200556312,293.15 +55800.0,302.28142143513077,293.15 +55820.0,302.2641034980364,293.15 +55840.0,302.2467662809822,293.15 +55860.0,302.2294098206434,293.15 +55880.0,302.21203415373583,293.15 +55900.0,302.1946393170159,293.15 +55920.0,302.1772253472807,293.15 +55940.0,302.15979228136763,293.15 +55960.0,302.14234015615466,293.15 +55980.0,302.12486900855987,293.15 +56000.0,302.10737887554177,293.15 +56020.0,302.08986979409895,293.15 +56040.0,302.0723418012701,293.15 +56060.0,302.0547949341339,293.15 +56080.0,302.03722922980893,293.15 +56100.0,302.0196447254537,293.15 +56120.0,302.00204145826643,293.15 +56140.0,301.9844194654851,293.15 +56160.0,301.9667787843871,293.15 +56180.0,301.94911945228955,293.15 +56200.0,301.9314415065491,293.15 +56220.0,301.9137449845615,293.15 +56240.0,301.896029923762,293.15 +56260.0,301.878296361625,293.15 +56280.0,301.8605443356641,293.15 +56300.0,301.8427738834318,293.15 +56320.0,301.82498504251976,293.15 +56340.0,301.8071778505585,293.15 +56360.0,301.78935234521725,293.15 +56380.0,301.77150856420405,293.15 +56400.0,301.75364654526567,293.15 +56420.0,301.73576632618733,293.15 +56440.0,301.7178679447929,293.15 +56460.0,301.69995143894454,293.15 +56480.0,301.68201684654275,293.15 +56500.0,301.6640642055264,293.15 +56520.0,301.64609355387245,293.15 +56540.0,301.628104929596,293.15 +56560.0,301.61009837075017,293.15 +56580.0,301.592073915426,293.15 +56600.0,301.5740316017524,293.15 +56620.0,301.555971467896,293.15 +56640.0,301.5378935520612,293.15 +56660.0,301.51979789249,293.15 +56680.0,301.5016845274619,293.15 +56700.0,301.483553495294,293.15 +56720.0,301.4654048343406,293.15 +56740.0,301.4472385829932,293.15 +56760.0,301.4290547796808,293.15 +56780.0,301.41085346286945,293.15 +56800.0,301.39263467106207,293.15 +56820.0,301.3743984427987,293.15 +56840.0,301.3561448166562,293.15 +56860.0,301.3378738312483,293.15 +56880.0,301.31958552522536,293.15 +56900.0,301.30127993727456,293.15 +56920.0,301.28295710611934,293.15 +56940.0,301.2646170705199,293.15 +56960.0,301.2462598692727,293.15 +56980.0,301.22788554121047,293.15 +57000.0,301.20949412520235,293.15 +57020.0,301.1910856601534,293.15 +57040.0,301.17266018500493,293.15 +57060.0,301.15421773873413,293.15 +57080.0,301.13575836035415,293.15 +57100.0,301.1172820889139,293.15 +57120.0,301.09878896349807,293.15 +57140.0,301.080279023227,293.15 +57160.0,301.0617523072565,293.15 +57180.0,301.043208854778,293.15 +57200.0,301.02464870501836,293.15 +57220.0,301.0060718972397,293.15 +57240.0,300.98747847073923,293.15 +57260.0,300.96886846484955,293.15 +57280.0,300.9502419189382,293.15 +57300.0,300.9315988724078,293.15 +57320.0,300.9129393646958,293.15 +57340.0,300.8942634352744,293.15 +57360.0,300.8755711236508,293.15 +57380.0,300.85686246936655,293.15 +57400.0,300.83813751199796,293.15 +57420.0,300.8193962911558,293.15 +57440.0,300.8006388464851,293.15 +57460.0,300.7818652176655,293.15 +57480.0,300.76307544441056,293.15 +57500.0,300.7442695664682,293.15 +57520.0,300.7254476236203,293.15 +57540.0,300.7066096556829,293.15 +57560.0,300.6877557025056,293.15 +57580.0,300.6688858039722,293.15 +57600.0,300.65,293.15 +57620.0,300.63109833053994,293.15 +57640.0,300.6121808355766,293.15 +57660.0,300.59324755512813,293.15 +57680.0,300.57429852924577,293.15 +57700.0,300.55533379801443,293.15 +57720.0,300.536353401552,293.15 +57740.0,300.51735738000957,293.15 +57760.0,300.4983457735713,293.15 +57780.0,300.4793186224543,293.15 +57800.0,300.4602759669086,293.15 +57820.0,300.441217847217,293.15 +57840.0,300.42214430369506,293.15 +57860.0,300.4030553766908,293.15 +57880.0,300.383951106585,293.15 +57900.0,300.3648315337908,293.15 +57920.0,300.34569669875367,293.15 +57940.0,300.32654664195144,293.15 +57960.0,300.3073814038941,293.15 +57980.0,300.2882010251238,293.15 +58000.0,300.2690055462146,293.15 +58020.0,300.24979500777266,293.15 +58040.0,300.23056945043584,293.15 +58060.0,300.21132891487395,293.15 +58080.0,300.19207344178835,293.15 +58100.0,300.172803071912,293.15 +58120.0,300.1535178460095,293.15 +58140.0,300.13421780487664,293.15 +58160.0,300.1149029893408,293.15 +58180.0,300.0955734402606,293.15 +58200.0,300.0762291985255,293.15 +58220.0,300.05687030505646,293.15 +58240.0,300.0374968008052,293.15 +58260.0,300.01810872675435,293.15 +58280.0,299.99870612391743,293.15 +58300.0,299.9792890333388,293.15 +58320.0,299.9598574960932,293.15 +58340.0,299.9404115532861,293.15 +58360.0,299.92095124605345,293.15 +58380.0,299.9014766155615,293.15 +58400.0,299.8819877030069,293.15 +58420.0,299.86248454961645,293.15 +58440.0,299.8429671966471,293.15 +58460.0,299.82343568538585,293.15 +58480.0,299.80389005714954,293.15 +58500.0,299.784330353285,293.15 +58520.0,299.76475661516884,293.15 +58540.0,299.74516888420726,293.15 +58560.0,299.72556720183616,293.15 +58580.0,299.70595160952087,293.15 +58600.0,299.6863221487562,293.15 +58620.0,299.6666788610662,293.15 +58640.0,299.64702178800445,293.15 +58660.0,299.6273509711533,293.15 +58680.0,299.6076664521244,293.15 +58700.0,299.5879682725584,293.15 +58720.0,299.5682564741248,293.15 +58740.0,299.54853109852183,293.15 +58760.0,299.5287921874766,293.15 +58780.0,299.50903978274476,293.15 +58800.0,299.48927392611046,293.15 +58820.0,299.46949465938644,293.15 +58840.0,299.4497020244136,293.15 +58860.0,299.4298960630614,293.15 +58880.0,299.41007681722726,293.15 +58900.0,299.3902443288368,293.15 +58920.0,299.3703986398436,293.15 +58940.0,299.3505397922292,293.15 +58960.0,299.330667828003,293.15 +58980.0,299.31078278920216,293.15 +59000.0,299.29088471789134,293.15 +59020.0,299.27097365616305,293.15 +59040.0,299.251049646137,293.15 +59060.0,299.23111272996044,293.15 +59080.0,299.21116294980783,293.15 +59100.0,299.191200347881,293.15 +59120.0,299.17122496640883,293.15 +59140.0,299.15123684764706,293.15 +59160.0,299.1312360338787,293.15 +59180.0,299.1112225674133,293.15 +59200.0,299.0911964905873,293.15 +59220.0,299.071157845764,293.15 +59240.0,299.05110667533296,293.15 +59260.0,299.03104302171045,293.15 +59280.0,299.0109669273391,293.15 +59300.0,298.99087843468783,293.15 +59320.0,298.97077758625176,293.15 +59340.0,298.9506644245523,293.15 +59360.0,298.9305389921367,293.15 +59380.0,298.9104013315783,293.15 +59400.0,298.8902514854763,293.15 +59420.0,298.87008949645565,293.15 +59440.0,298.849915407167,293.15 +59460.0,298.82972926028646,293.15 +59480.0,298.80953109851595,293.15 +59500.0,298.7893209645825,293.15 +59520.0,298.76909890123864,293.15 +59540.0,298.74886495126214,293.15 +59560.0,298.7286191574558,293.15 +59580.0,298.70836156264755,293.15 +59600.0,298.68809220969024,293.15 +59620.0,298.6678111414617,293.15 +59640.0,298.64751840086444,293.15 +59660.0,298.62721403082566,293.15 +59680.0,298.60689807429725,293.15 +59700.0,298.5865705742555,293.15 +59720.0,298.5662315737012,293.15 +59740.0,298.5458811156594,293.15 +59760.0,298.5255192431795,293.15 +59780.0,298.5051459993349,293.15 +59800.0,298.48476142722313,293.15 +59820.0,298.4643655699657,293.15 +59840.0,298.443958470708,293.15 +59860.0,298.42354017261914,293.15 +59880.0,298.403110718892,293.15 +59900.0,298.38267015274295,293.15 +59920.0,298.3622185174119,293.15 +59940.0,298.34175585616237,293.15 +59960.0,298.3212822122809,293.15 +59980.0,298.3007976290774,293.15 +60000.0,298.280302149885,293.15 +60020.0,298.2597958180598,293.15 +60040.0,298.23927867698075,293.15 +60060.0,298.2187507700499,293.15 +60080.0,298.19821214069185,293.15 +60100.0,298.1776628323541,293.15 +60120.0,298.15710288850653,293.15 +60140.0,298.13653235264167,293.15 +60160.0,298.11595126827433,293.15 +60180.0,298.0953596789418,293.15 +60200.0,298.0747576282034,293.15 +60220.0,298.0541451596407,293.15 +60240.0,298.03352231685733,293.15 +60260.0,298.0128891434788,293.15 +60280.0,297.9922456831524,293.15 +60300.0,297.9715919795474,293.15 +60320.0,297.95092807635456,293.15 +60340.0,297.93025401728625,293.15 +60360.0,297.90956984607635,293.15 +60380.0,297.88887560648016,293.15 +60400.0,297.8681713422742,293.15 +60420.0,297.8474570972562,293.15 +60440.0,297.82673291524515,293.15 +60460.0,297.80599884008086,293.15 +60480.0,297.7852549156242,293.15 +60500.0,297.7645011857568,293.15 +60520.0,297.7437376943811,293.15 +60540.0,297.72296448542016,293.15 +60560.0,297.7021816028175,293.15 +60580.0,297.6813890905374,293.15 +60600.0,297.6605869925641,293.15 +60620.0,297.6397753529024,293.15 +60640.0,297.6189542155772,293.15 +60660.0,297.59812362463356,293.15 +60680.0,297.5772836241364,293.15 +60700.0,297.55643425817067,293.15 +60720.0,297.53557557084105,293.15 +60740.0,297.514707606272,293.15 +60760.0,297.49383040860755,293.15 +60780.0,297.4729440220113,293.15 +60800.0,297.45204849066636,293.15 +60820.0,297.43114385877493,293.15 +60840.0,297.4102301705588,293.15 +60860.0,297.3893074702587,293.15 +60880.0,297.36837580213444,293.15 +60900.0,297.3474352104649,293.15 +60920.0,297.32648573954765,293.15 +60940.0,297.3055274336993,293.15 +60960.0,297.28456033725496,293.15 +60980.0,297.2635844945684,293.15 +61000.0,297.2425999500119,293.15 +61020.0,297.22160674797607,293.15 +61040.0,297.20060493286996,293.15 +61060.0,297.1795945491208,293.15 +61080.0,297.15857564117385,293.15 +61100.0,297.13754825349247,293.15 +61120.0,297.11651243055803,293.15 +61140.0,297.0954682168696,293.15 +61160.0,297.07441565694415,293.15 +61180.0,297.0533547953162,293.15 +61200.0,297.0322856765378,290.15 +61220.0,297.0112083451786,290.15 +61240.0,296.99012284582557,290.15 +61260.0,296.9690292230829,290.15 +61280.0,296.947927521572,290.15 +61300.0,296.9268177859314,290.15 +61320.0,296.90570006081657,290.15 +61340.0,296.8845743909,290.15 +61360.0,296.8634408208708,290.15 +61380.0,296.84229939543485,290.15 +61400.0,296.82115015931487,290.15 +61420.0,296.79999315724973,290.15 +61440.0,296.778828433995,290.15 +61460.0,296.7576560343225,290.15 +61480.0,296.7364760030203,290.15 +61500.0,296.7152883848926,290.15 +61520.0,296.6940932247596,290.15 +61540.0,296.67289056745756,290.15 +61560.0,296.65168045783855,290.15 +61580.0,296.6304629407704,290.15 +61600.0,296.6092380611366,290.15 +61620.0,296.5880058638362,290.15 +61640.0,296.5667663937838,290.15 +61660.0,296.54551969590926,290.15 +61680.0,296.52426581515795,290.15 +61700.0,296.5030047964902,290.15 +61720.0,296.4817366848815,290.15 +61740.0,296.4604615253225,290.15 +61760.0,296.43917936281855,290.15 +61780.0,296.4178902423899,290.15 +61800.0,296.3965942090715,290.15 +61820.0,296.3752913079131,290.15 +61840.0,296.35398158397857,290.15 +61860.0,296.3326650823467,290.15 +61880.0,296.3113418481102,290.15 +61900.0,296.29001192637634,290.15 +61920.0,296.2686753622664,290.15 +61940.0,296.2473322009156,290.15 +61960.0,296.2259824874733,290.15 +61980.0,296.20462626710264,290.15 +62000.0,296.1832635849806,290.15 +62020.0,296.16189448629757,290.15 +62040.0,296.14051901625794,290.15 +62060.0,296.1191372200792,290.15 +62080.0,296.0977491429924,290.15 +62100.0,296.0763548302419,290.15 +62120.0,296.0549543270851,290.15 +62140.0,296.0335476787927,290.15 +62160.0,296.01213493064813,290.15 +62180.0,295.9907161279481,290.15 +62200.0,295.96929131600166,290.15 +62220.0,295.947860540131,290.15 +62240.0,295.9264238456707,290.15 +62260.0,295.9049812779679,290.15 +62280.0,295.8835328823822,290.15 +62300.0,295.86207870428547,290.15 +62320.0,295.84061878906186,290.15 +62340.0,295.8191531821076,290.15 +62360.0,295.7976819288311,290.15 +62380.0,295.77620507465247,290.15 +62400.0,295.75472266500395,290.15 +62420.0,295.7332347453293,290.15 +62440.0,295.7117413610841,290.15 +62460.0,295.69024255773536,290.15 +62480.0,295.6687383807616,290.15 +62500.0,295.64722887565284,290.15 +62520.0,295.6257140879101,290.15 +62540.0,295.6041940630459,290.15 +62560.0,295.5826688465835,290.15 +62580.0,295.5611384840574,290.15 +62600.0,295.5396030210128,290.15 +62620.0,295.5180625030059,290.15 +62640.0,295.49651697560347,290.15 +62660.0,295.4749664843828,290.15 +62680.0,295.45341107493175,290.15 +62700.0,295.4318507928487,290.15 +62720.0,295.41028568374225,290.15 +62740.0,295.3887157932311,290.15 +62760.0,295.3671411669441,290.15 +62780.0,295.34556185052037,290.15 +62800.0,295.32397788960867,290.15 +62820.0,295.30238932986765,290.15 +62840.0,295.28079621696577,290.15 +62860.0,295.25919859658103,290.15 +62880.0,295.237596514401,290.15 +62900.0,295.21599001612265,290.15 +62920.0,295.19437914745237,290.15 +62940.0,295.17276395410585,290.15 +62960.0,295.15114448180765,290.15 +62980.0,295.1295207762917,290.15 +63000.0,295.10789288330074,290.15 +63020.0,295.08626084858633,290.15 +63040.0,295.0646247179089,290.15 +63060.0,295.04298453703746,290.15 +63080.0,295.02134035174953,290.15 +63100.0,294.9996922078313,290.15 +63120.0,294.9780401510772,290.15 +63140.0,294.9563842272899,290.15 +63160.0,294.9347244822804,290.15 +63180.0,294.91306096186753,290.15 +63200.0,294.89139371187844,290.15 +63220.0,294.8697227781479,290.15 +63240.0,294.84804820651857,290.15 +63260.0,294.82637004284084,290.15 +63280.0,294.80468833297266,290.15 +63300.0,294.78300312277946,290.15 +63320.0,294.7613144581341,290.15 +63340.0,294.73962238491674,290.15 +63360.0,294.7179269490148,290.15 +63380.0,294.6962281963227,290.15 +63400.0,294.674526172742,290.15 +63420.0,294.6528209241811,290.15 +63440.0,294.6311124965553,290.15 +63460.0,294.60940093578654,290.15 +63480.0,294.5876862878033,290.15 +63500.0,294.56596859854096,290.15 +63520.0,294.54424791394086,290.15 +63540.0,294.522524279951,290.15 +63560.0,294.50079774252555,290.15 +63580.0,294.4790683476247,290.15 +63600.0,294.45733614121485,290.15 +63620.0,294.43560116926824,290.15 +63640.0,294.413863477763,290.15 +63660.0,294.392123112683,290.15 +63680.0,294.37038012001784,290.15 +63700.0,294.34863454576254,290.15 +63720.0,294.32688643591763,290.15 +63740.0,294.3051358364891,290.15 +63760.0,294.2833827934881,290.15 +63780.0,294.261627352931,290.15 +63800.0,294.2398695608391,290.15 +63820.0,294.218109463239,290.15 +63840.0,294.19634710616185,290.15 +63860.0,294.17458253564376,290.15 +63880.0,294.1528157977254,290.15 +63900.0,294.13104693845213,290.15 +63920.0,294.1092760038738,290.15 +63940.0,294.0875030400445,290.15 +63960.0,294.0657280930228,290.15 +63980.0,294.0439512088715,290.15 +64000.0,294.02217243365715,290.15 +64020.0,294.0003918134506,290.15 +64040.0,293.9786093943267,290.15 +64060.0,293.9568252223638,290.15 +64080.0,293.9350393436441,290.15 +64100.0,293.9132518042535,290.15 +64120.0,293.89146265028126,290.15 +64140.0,293.86967192782015,290.15 +64160.0,293.8478796829662,290.15 +64180.0,293.82608596181865,290.15 +64200.0,293.80429081048004,290.15 +64220.0,293.7824942750556,290.15 +64240.0,293.76069640165395,290.15 +64260.0,293.73889723638604,290.15 +64280.0,293.71709682536584,290.15 +64300.0,293.69529521471,290.15 +64320.0,293.6734924505375,290.15 +64340.0,293.6516885789699,290.15 +64360.0,293.6298836461312,290.15 +64380.0,293.6080776981473,290.15 +64400.0,293.58627078114665,290.15 +64420.0,293.5644629412595,290.15 +64440.0,293.5426542246181,290.15 +64460.0,293.5208446773566,290.15 +64480.0,293.4990343456108,290.15 +64500.0,293.4772232755184,290.15 +64520.0,293.4554115132184,290.15 +64540.0,293.43359910485134,290.15 +64560.0,293.41178609655924,290.15 +64580.0,293.38997253448525,290.15 +64600.0,293.3681584647737,290.15 +64620.0,293.34634393357015,290.15 +64640.0,293.3245289870209,290.15 +64660.0,293.3027136712734,290.15 +64680.0,293.2808980324756,290.15 +64700.0,293.2590821167763,290.15 +64720.0,293.23726597032487,290.15 +64740.0,293.2154496392712,290.15 +64760.0,293.1936331697654,290.15 +64780.0,293.1718166079581,290.15 +64800.0,293.15,290.15 +64820.0,293.1281833920419,290.15 +64840.0,293.10636683023455,290.15 +64860.0,293.08455036072877,290.15 +64880.0,293.0627340296751,290.15 +64900.0,293.04091788322364,290.15 +64920.0,293.01910196752436,290.15 +64940.0,292.9972863287266,290.15 +64960.0,292.975471012979,290.15 +64980.0,292.9536560664298,290.15 +65000.0,292.9318415352262,290.15 +65020.0,292.9100274655147,290.15 +65040.0,292.8882139034407,290.15 +65060.0,292.8664008951486,290.15 +65080.0,292.84458848678156,290.15 +65100.0,292.82277672448157,290.15 +65120.0,292.80096565438913,290.15 +65140.0,292.7791553226434,290.15 +65160.0,292.7573457753819,290.15 +65180.0,292.7355370587405,290.15 +65200.0,292.7137292188533,290.15 +65220.0,292.6919223018526,290.15 +65240.0,292.67011635386876,290.15 +65260.0,292.64831142103003,290.15 +65280.0,292.6265075494625,290.15 +65300.0,292.60470478529,290.15 +65320.0,292.5829031746341,290.15 +65340.0,292.561102763614,290.15 +65360.0,292.539303598346,290.15 +65380.0,292.51750572494433,290.15 +65400.0,292.4957091895199,290.15 +65420.0,292.4739140381813,290.15 +65440.0,292.4521203170338,290.15 +65460.0,292.4303280721798,290.15 +65480.0,292.4085373497187,290.15 +65500.0,292.38674819574646,290.15 +65520.0,292.36496065635583,290.15 +65540.0,292.34317477763614,290.15 +65560.0,292.32139060567323,290.15 +65580.0,292.29960818654934,290.15 +65600.0,292.27782756634286,290.15 +65620.0,292.25604879112853,290.15 +65640.0,292.23427190697714,290.15 +65660.0,292.21249695995544,290.15 +65680.0,292.19072399612617,290.15 +65700.0,292.1689530615478,290.15 +65720.0,292.14718420227456,290.15 +65740.0,292.12541746435625,290.15 +65760.0,292.1036528938381,290.15 +65780.0,292.08189053676097,290.15 +65800.0,292.06013043916084,290.15 +65820.0,292.03837264706897,290.15 +65840.0,292.01661720651185,290.15 +65860.0,291.99486416351084,290.15 +65880.0,291.9731135640823,290.15 +65900.0,291.9513654542374,290.15 +65920.0,291.9296198799821,290.15 +65940.0,291.90787688731695,290.15 +65960.0,291.88613652223694,290.15 +65980.0,291.8643988307317,290.15 +66000.0,291.8426638587851,290.15 +66020.0,291.82093165237524,290.15 +66040.0,291.7992022574744,290.15 +66060.0,291.7774757200489,290.15 +66080.0,291.7557520860591,290.15 +66100.0,291.73403140145905,290.15 +66120.0,291.71231371219665,290.15 +66140.0,291.6905990642135,290.15 +66160.0,291.66888750344464,290.15 +66180.0,291.6471790758188,290.15 +66200.0,291.62547382725796,290.15 +66220.0,291.60377180367726,290.15 +66240.0,291.5820730509852,290.15 +66260.0,291.5603776150832,290.15 +66280.0,291.53868554186585,290.15 +66300.0,291.5169968772205,290.15 +66320.0,291.4953116670273,290.15 +66340.0,291.4736299571591,290.15 +66360.0,291.4519517934814,290.15 +66380.0,291.43027722185207,290.15 +66400.0,291.4086062881215,290.15 +66420.0,291.3869390381324,290.15 +66440.0,291.3652755177196,290.15 +66460.0,291.34361577271005,290.15 +66480.0,291.32195984892275,290.15 +66500.0,291.30030779216867,290.15 +66520.0,291.2786596482504,290.15 +66540.0,291.25701546296256,290.15 +66560.0,291.23537528209107,290.15 +66580.0,291.2137391514136,290.15 +66600.0,291.1921071166992,290.15 +66620.0,291.17047922370824,290.15 +66640.0,291.1488555181923,290.15 +66660.0,291.1272360458941,290.15 +66680.0,291.1056208525476,290.15 +66700.0,291.0840099838773,290.15 +66720.0,291.062403485599,290.15 +66740.0,291.0408014034189,290.15 +66760.0,291.0192037830342,290.15 +66780.0,290.9976106701323,290.15 +66800.0,290.9760221103913,290.15 +66820.0,290.9544381494796,290.15 +66840.0,290.93285883305583,290.15 +66860.0,290.9112842067689,290.15 +66880.0,290.8897143162577,290.15 +66900.0,290.86814920715125,290.15 +66920.0,290.8465889250682,290.15 +66940.0,290.8250335156172,290.15 +66960.0,290.80348302439654,290.15 +66980.0,290.78193749699403,290.15 +67000.0,290.76039697898716,290.15 +67020.0,290.7388615159426,290.15 +67040.0,290.71733115341647,290.15 +67060.0,290.69580593695406,290.15 +67080.0,290.67428591208983,290.15 +67100.0,290.6527711243471,290.15 +67120.0,290.63126161923833,290.15 +67140.0,290.6097574422646,290.15 +67160.0,290.5882586389159,290.15 +67180.0,290.56676525467066,290.15 +67200.0,290.545277334996,290.15 +67220.0,290.5237949253475,290.15 +67240.0,290.5023180711689,290.15 +67260.0,290.48084681789237,290.15 +67280.0,290.45938121093815,290.15 +67300.0,290.4379212957145,290.15 +67320.0,290.41646711761774,290.15 +67340.0,290.39501872203203,290.15 +67360.0,290.37357615432927,290.15 +67380.0,290.35213945986897,290.15 +67400.0,290.3307086839983,290.15 +67420.0,290.30928387205194,290.15 +67440.0,290.2878650693518,290.15 +67460.0,290.2664523212073,290.15 +67480.0,290.24504567291484,290.15 +67500.0,290.2236451697581,290.15 +67520.0,290.2022508570075,290.15 +67540.0,290.18086277992074,290.15 +67560.0,290.159480983742,290.15 +67580.0,290.1381055137024,290.15 +67600.0,290.11673641501943,290.15 +67620.0,290.0953737328973,290.15 +67640.0,290.07401751252667,290.15 +67660.0,290.05266779908436,290.15 +67680.0,290.0313246377336,290.15 +67700.0,290.0099880736236,290.15 +67720.0,289.98865815188975,290.15 +67740.0,289.96733491765326,290.15 +67760.0,289.9460184160214,290.15 +67780.0,289.9247086920869,290.15 +67800.0,289.90340579092845,290.15 +67820.0,289.88210975761007,290.15 +67840.0,289.8608206371814,290.15 +67860.0,289.83953847467745,290.15 +67880.0,289.81826331511843,290.15 +67900.0,289.79699520350977,290.15 +67920.0,289.775734184842,290.15 +67940.0,289.7544803040907,290.15 +67960.0,289.7332336062162,290.15 +67980.0,289.71199413616375,290.15 +68000.0,289.6907619388634,290.15 +68020.0,289.6695370592296,290.15 +68040.0,289.6483195421614,290.15 +68060.0,289.6271094325424,290.15 +68080.0,289.6059067752404,290.15 +68100.0,289.5847116151074,290.15 +68120.0,289.56352399697965,290.15 +68140.0,289.54234396567745,290.15 +68160.0,289.52117156600497,290.15 +68180.0,289.5000068427502,290.15 +68200.0,289.47884984068514,290.15 +68220.0,289.4577006045651,290.15 +68240.0,289.4365591791292,290.15 +68260.0,289.4154256091,290.15 +68280.0,289.3942999391834,290.15 +68300.0,289.37318221406855,290.15 +68320.0,289.35207247842794,290.15 +68340.0,289.33097077691707,290.15 +68360.0,289.3098771541744,290.15 +68380.0,289.28879165482135,290.15 +68400.0,289.2677143234622,290.15 +68420.0,289.24664520468383,290.15 +68440.0,289.2255843430558,290.15 +68460.0,289.2045317831304,290.15 +68480.0,289.1834875694419,290.15 +68500.0,289.1624517465075,290.15 +68520.0,289.1414243588261,290.15 +68540.0,289.12040545087916,290.15 +68560.0,289.09939506713,290.15 +68580.0,289.0783932520239,290.15 +68600.0,289.0574000499881,290.15 +68620.0,289.03641550543153,290.15 +68640.0,289.015439662745,290.15 +68660.0,288.99447256630066,290.15 +68680.0,288.9735142604523,290.15 +68700.0,288.9525647895351,290.15 +68720.0,288.9316241978655,290.15 +68740.0,288.91069252974125,290.15 +68760.0,288.88976982944115,290.15 +68780.0,288.868856141225,290.15 +68800.0,288.8479515093336,290.15 +68820.0,288.82705597798866,290.15 +68840.0,288.8061695913924,290.15 +68860.0,288.78529239372796,290.15 +68880.0,288.7644244291589,290.15 +68900.0,288.7435657418293,290.15 +68920.0,288.72271637586357,290.15 +68940.0,288.7018763753664,290.15 +68960.0,288.68104578442274,290.15 +68980.0,288.6602246470976,290.15 +69000.0,288.63941300743585,290.15 +69020.0,288.6186109094626,290.15 +69040.0,288.59781839718244,290.15 +69060.0,288.5770355145798,290.15 +69080.0,288.5562623056189,290.15 +69100.0,288.53549881424317,290.15 +69120.0,288.51474508437576,290.15 +69140.0,288.4940011599191,290.15 +69160.0,288.4732670847548,290.15 +69180.0,288.45254290274374,290.15 +69200.0,288.43182865772576,290.15 +69220.0,288.4111243935198,290.15 +69240.0,288.3904301539236,290.15 +69260.0,288.3697459827137,290.15 +69280.0,288.3490719236454,290.15 +69300.0,288.32840802045257,290.15 +69320.0,288.30775431684754,290.15 +69340.0,288.2871108565212,290.15 +69360.0,288.2664776831426,290.15 +69380.0,288.24585484035924,290.15 +69400.0,288.2252423717966,290.15 +69420.0,288.20464032105815,290.15 +69440.0,288.1840487317256,290.15 +69460.0,288.1634676473583,290.15 +69480.0,288.1428971114934,290.15 +69500.0,288.12233716764587,290.15 +69520.0,288.1017878593081,290.15 +69540.0,288.08124922995006,290.15 +69560.0,288.0607213230192,290.15 +69580.0,288.0402041819402,290.15 +69600.0,288.01969785011494,290.15 +69620.0,287.99920237092255,290.15 +69640.0,287.97871778771906,290.15 +69660.0,287.9582441438376,290.15 +69680.0,287.93778148258804,290.15 +69700.0,287.917329847257,290.15 +69720.0,287.896889281108,290.15 +69740.0,287.8764598273808,290.15 +69760.0,287.85604152929193,290.15 +69780.0,287.83563443003425,290.15 +69800.0,287.8152385727768,290.15 +69820.0,287.79485400066505,290.15 +69840.0,287.7744807568205,290.15 +69860.0,287.7541188843405,290.15 +69880.0,287.73376842629875,290.15 +69900.0,287.71342942574444,290.15 +69920.0,287.6931019257027,290.15 +69940.0,287.6727859691743,290.15 +69960.0,287.6524815991355,290.15 +69980.0,287.63218885853826,290.15 +70000.0,287.6119077903097,290.15 +70020.0,287.59163843735246,290.15 +70040.0,287.57138084254416,290.15 +70060.0,287.5511350487378,290.15 +70080.0,287.5309010987613,290.15 +70100.0,287.51067903541747,290.15 +70120.0,287.490468901484,290.15 +70140.0,287.4702707397135,290.15 +70160.0,287.450084592833,290.15 +70180.0,287.4299105035443,290.15 +70200.0,287.40974851452364,290.15 +70220.0,287.3895986684216,290.15 +70240.0,287.36946100786326,290.15 +70260.0,287.34933557544764,290.15 +70280.0,287.3292224137482,290.15 +70300.0,287.3091215653121,290.15 +70320.0,287.28903307266086,290.15 +70340.0,287.2689569782895,290.15 +70360.0,287.248893324667,290.15 +70380.0,287.22884215423596,290.15 +70400.0,287.20880350941263,290.15 +70420.0,287.1887774325867,290.15 +70440.0,287.1687639661213,290.15 +70460.0,287.1487631523529,290.15 +70480.0,287.1287750335911,290.15 +70500.0,287.10879965211893,290.15 +70520.0,287.0888370501921,290.15 +70540.0,287.06888727003957,290.15 +70560.0,287.048950353863,290.15 +70580.0,287.0290263438369,290.15 +70600.0,287.0091152821086,290.15 +70620.0,286.9892172107978,290.15 +70640.0,286.96933217199694,290.15 +70660.0,286.94946020777076,290.15 +70680.0,286.92960136015637,290.15 +70700.0,286.90975567116317,290.15 +70720.0,286.8899231827727,290.15 +70740.0,286.87010393693856,290.15 +70760.0,286.85029797558633,290.15 +70780.0,286.8305053406135,290.15 +70800.0,286.8107260738895,290.15 +70820.0,286.7909602172552,290.15 +70840.0,286.77120781252336,290.15 +70860.0,286.7514689014781,290.15 +70880.0,286.7317435258752,290.15 +70900.0,286.71203172744157,290.15 +70920.0,286.69233354787553,290.15 +70940.0,286.6726490288467,290.15 +70960.0,286.65297821199556,290.15 +70980.0,286.63332113893375,290.15 +71000.0,286.6136778512438,290.15 +71020.0,286.5940483904791,290.15 +71040.0,286.5744327981638,290.15 +71060.0,286.5548311157927,290.15 +71080.0,286.5352433848311,290.15 +71100.0,286.51566964671497,290.15 +71120.0,286.49610994285047,290.15 +71140.0,286.4765643146141,290.15 +71160.0,286.45703280335283,290.15 +71180.0,286.4375154503835,290.15 +71200.0,286.418012296993,290.15 +71220.0,286.3985233844385,290.15 +71240.0,286.3790487539465,290.15 +71260.0,286.3595884467139,290.15 +71280.0,286.3401425039068,290.15 +71300.0,286.3207109666612,290.15 +71320.0,286.3012938760825,290.15 +71340.0,286.2818912732456,290.15 +71360.0,286.2625031991948,290.15 +71380.0,286.24312969494355,290.15 +71400.0,286.2237708014745,290.15 +71420.0,286.20442655973943,290.15 +71440.0,286.18509701065915,290.15 +71460.0,286.1657821951233,290.15 +71480.0,286.14648215399046,290.15 +71500.0,286.127196928088,290.15 +71520.0,286.1079265582116,290.15 +71540.0,286.088671085126,290.15 +71560.0,286.0694305495641,290.15 +71580.0,286.05020499222735,290.15 +71600.0,286.03099445378535,290.15 +71620.0,286.01179897487617,290.15 +71640.0,285.99261859610584,290.15 +71660.0,285.9734533580485,290.15 +71680.0,285.9543033012463,290.15 +71700.0,285.9351684662092,290.15 +71720.0,285.91604889341494,290.15 +71740.0,285.89694462330914,290.15 +71760.0,285.8778556963049,290.15 +71780.0,285.85878215278296,290.15 +71800.0,285.83972403309133,290.15 +71820.0,285.82068137754567,290.15 +71840.0,285.8016542264287,290.15 +71860.0,285.7826426199904,290.15 +71880.0,285.76364659844796,290.15 +71900.0,285.7446662019855,290.15 +71920.0,285.7257014707542,290.15 +71940.0,285.7067524448718,290.15 +71960.0,285.68781916442333,290.15 +71980.0,285.66890166946,290.15 +72000.0,285.65,290.15 +72020.0,285.63111419602774,290.15 +72040.0,285.6122442974943,290.15 +72060.0,285.5933903443171,290.15 +72080.0,285.57455237637964,290.15 +72100.0,285.5557304335318,290.15 +72120.0,285.5369245555894,290.15 +72140.0,285.51813478233447,290.15 +72160.0,285.4993611535148,290.15 +72180.0,285.48060370884417,290.15 +72200.0,285.461862488002,290.15 +72220.0,285.4431375306334,290.15 +72240.0,285.42442887634917,290.15 +72260.0,285.40573656472554,290.15 +72280.0,285.3870606353042,290.15 +72300.0,285.36840112759216,290.15 +72320.0,285.34975808106174,290.15 +72340.0,285.3311315351504,290.15 +72360.0,285.3125215292607,290.15 +72380.0,285.2939281027603,290.15 +72400.0,285.2753512949816,290.15 +72420.0,285.25679114522194,290.15 +72440.0,285.23824769274347,290.15 +72460.0,285.21972097677303,290.15 +72480.0,285.2012110365019,290.15 +72500.0,285.18271791108606,290.15 +72520.0,285.1642416396458,290.15 +72540.0,285.1457822612658,290.15 +72560.0,285.127339814995,290.15 +72580.0,285.10891433984654,290.15 +72600.0,285.0905058747976,290.15 +72620.0,285.0721144587895,290.15 +72640.0,285.0537401307273,290.15 +72660.0,285.0353829294801,290.15 +72680.0,285.0170428938806,290.15 +72700.0,284.9987200627254,290.15 +72720.0,284.9804144747746,290.15 +72740.0,284.9621261687517,290.15 +72760.0,284.94385518334377,290.15 +72780.0,284.9256015572013,290.15 +72800.0,284.9073653289379,290.15 +72820.0,284.8891465371305,290.15 +72840.0,284.87094522031913,290.15 +72860.0,284.8527614170068,290.15 +72880.0,284.8345951656594,290.15 +72900.0,284.81644650470594,290.15 +72920.0,284.79831547253804,290.15 +72940.0,284.78020210751,290.15 +72960.0,284.7621064479388,290.15 +72980.0,284.744028532104,290.15 +73000.0,284.7259683982476,290.15 +73020.0,284.70792608457396,290.15 +73040.0,284.6899016292498,290.15 +73060.0,284.67189507040393,290.15 +73080.0,284.6539064461275,290.15 +73100.0,284.63593579447354,290.15 +73120.0,284.6179831534572,290.15 +73140.0,284.6000485610554,290.15 +73160.0,284.58213205520707,290.15 +73180.0,284.5642336738126,290.15 +73200.0,284.5463534547343,290.15 +73220.0,284.5284914357959,290.15 +73240.0,284.51064765478276,290.15 +73260.0,284.49282214944145,290.15 +73280.0,284.4750149574802,290.15 +73300.0,284.45722611656817,290.15 +73320.0,284.43945566433587,290.15 +73340.0,284.42170363837494,290.15 +73360.0,284.40397007623795,290.15 +73380.0,284.38625501543845,290.15 +73400.0,284.36855849345085,290.15 +73420.0,284.3508805477104,290.15 +73440.0,284.33322121561287,290.15 +73460.0,284.3155805345149,290.15 +73480.0,284.2979585417335,290.15 +73500.0,284.28035527454625,290.15 +73520.0,284.262770770191,290.15 +73540.0,284.24520506586606,290.15 +73560.0,284.22765819872984,290.15 +73580.0,284.210130205901,290.15 +73600.0,284.1926211244582,290.15 +73620.0,284.1751309914401,290.15 +73640.0,284.1576598438453,290.15 +73660.0,284.1402077186323,290.15 +73680.0,284.1227746527193,290.15 +73700.0,284.10536068298404,290.15 +73720.0,284.0879658462641,290.15 +73740.0,284.07059017935654,290.15 +73760.0,284.0532337190178,290.15 +73780.0,284.03589650196363,290.15 +73800.0,284.0185785648692,290.15 +73820.0,284.0012799443688,290.15 +73840.0,283.984000677056,290.15 +73860.0,283.96674079948326,290.15 +73880.0,283.9495003481621,290.15 +73900.0,283.932279359563,290.15 +73920.0,283.9150778701151,290.15 +73940.0,283.8978959162065,290.15 +73960.0,283.8807335341839,290.15 +73980.0,283.86359076035245,290.15 +74000.0,283.84646763097606,290.15 +74020.0,283.82936418227695,290.15 +74040.0,283.8122804504357,290.15 +74060.0,283.7952164715912,290.15 +74080.0,283.77817228184057,290.15 +74100.0,283.7611479172391,290.15 +74120.0,283.74414341380003,290.15 +74140.0,283.72715880749473,290.15 +74160.0,283.71019413425245,290.15 +74180.0,283.6932494299601,290.15 +74200.0,283.6763247304625,290.15 +74220.0,283.65942007156224,290.15 +74240.0,283.64253548901934,290.15 +74260.0,283.62567101855143,290.15 +74280.0,283.6088266958335,290.15 +74300.0,283.59200255649813,290.15 +74320.0,283.57519863613504,290.15 +74340.0,283.5584149702912,290.15 +74360.0,283.54165159447075,290.15 +74380.0,283.5249085441349,290.15 +74400.0,283.5081858547019,290.15 +74420.0,283.49148356154683,290.15 +74440.0,283.4748017000018,290.15 +74460.0,283.4581403053555,290.15 +74480.0,283.4414994128535,290.15 +74500.0,283.4248790576978,290.15 +74520.0,283.4082792750472,290.15 +74540.0,283.3917001000168,290.15 +74560.0,283.37514156767816,290.15 +74580.0,283.35860371305915,290.15 +74600.0,283.3420865711439,290.15 +74620.0,283.3255901768729,290.15 +74640.0,283.30911456514235,290.15 +74660.0,283.29265977080496,290.15 +74680.0,283.27622582866906,290.15 +74700.0,283.25981277349894,290.15 +74720.0,283.24342064001485,290.15 +74740.0,283.22704946289264,290.15 +74760.0,283.21069927676393,290.15 +74780.0,283.1943701162158,290.15 +74800.0,283.17806201579094,290.15 +74820.0,283.1617750099875,290.15 +74840.0,283.14550913325894,290.15 +74860.0,283.1292644200141,290.15 +74880.0,283.1130409046171,290.15 +74900.0,283.09683862138706,290.15 +74920.0,283.08065760459823,290.15 +74940.0,283.06449788847993,290.15 +74960.0,283.0483595072165,290.15 +74980.0,283.0322424949469,290.15 +75000.0,283.01614688576507,290.15 +75020.0,283.0000727137197,290.15 +75040.0,282.98402001281397,290.15 +75060.0,282.96798881700585,290.15 +75080.0,282.95197916020766,290.15 +75100.0,282.93599107628614,290.15 +75120.0,282.9200245990625,290.15 +75140.0,282.9040797623122,290.15 +75160.0,282.88815659976495,290.15 +75180.0,282.8722551451046,290.15 +75200.0,282.85637543196896,290.15 +75220.0,282.84051749395,290.15 +75240.0,282.8246813645937,290.15 +75260.0,282.80886707739955,290.15 +75280.0,282.7930746658212,290.15 +75300.0,282.7773041632659,290.15 +75320.0,282.76155560309456,290.15 +75340.0,282.7458290186216,290.15 +75360.0,282.730124443115,290.15 +75380.0,282.7144419097963,290.15 +75400.0,282.69878145184015,290.15 +75420.0,282.6831431023748,290.15 +75440.0,282.66752689448145,290.15 +75460.0,282.6519328611948,290.15 +75480.0,282.6363610355022,290.15 +75500.0,282.62081145034443,290.15 +75520.0,282.60528413861505,290.15 +75540.0,282.58977913316045,290.15 +75560.0,282.5742964667799,290.15 +75580.0,282.5588361722255,290.15 +75600.0,282.5433982822018,290.15 +75620.0,282.5279828293661,290.15 +75640.0,282.5125898463283,290.15 +75660.0,282.4972193656507,290.15 +75680.0,282.48187141984795,290.15 +75700.0,282.466546041387,290.15 +75720.0,282.4512432626872,290.15 +75740.0,282.43596311612015,290.15 +75760.0,282.4207056340092,290.15 +75780.0,282.40547084863016,290.15 +75800.0,282.39025879221066,290.15 +75820.0,282.37506949693017,290.15 +75840.0,282.3599029949202,290.15 +75860.0,282.3447593182639,290.15 +75880.0,282.3296384989962,290.15 +75900.0,282.31454056910366,290.15 +75920.0,282.29946556052437,290.15 +75940.0,282.284413505148,290.15 +75960.0,282.26938443481566,290.15 +75980.0,282.25437838131984,290.15 +76000.0,282.2393953764042,290.15 +76020.0,282.22443545176395,290.15 +76040.0,282.2094986390452,290.15 +76060.0,282.1945849698452,290.15 +76080.0,282.17969447571244,290.15 +76100.0,282.1648271881461,290.15 +76120.0,282.1499831385965,290.15 +76140.0,282.1351623584647,290.15 +76160.0,282.12036487910257,290.15 +76180.0,282.10559073181264,290.15 +76200.0,282.0908399478481,290.15 +76220.0,282.07611255841283,290.15 +76240.0,282.06140859466103,290.15 +76260.0,282.0467280876975,290.15 +76280.0,282.03207106857735,290.15 +76300.0,282.017437568306,290.15 +76320.0,282.00282761783905,290.15 +76340.0,281.98824124808255,290.15 +76360.0,281.97367848989234,290.15 +76380.0,281.9591393740745,290.15 +76400.0,281.944623931385,290.15 +76420.0,281.9301321925299,290.15 +76440.0,281.91566418816495,290.15 +76460.0,281.9012199488957,290.15 +76480.0,281.8867995052775,290.15 +76500.0,281.8724028878153,290.15 +76520.0,281.85803012696374,290.15 +76540.0,281.84368125312693,290.15 +76560.0,281.8293562966584,290.15 +76580.0,281.8150552878612,290.15 +76600.0,281.8007782569876,290.15 +76620.0,281.78652523423926,290.15 +76640.0,281.77229624976695,290.15 +76660.0,281.7580913336707,290.15 +76680.0,281.7439105159995,290.15 +76700.0,281.7297538267515,290.15 +76720.0,281.7156212958737,290.15 +76740.0,281.70151295326207,290.15 +76760.0,281.68742882876126,290.15 +76780.0,281.67336895216494,290.15 +76800.0,281.6593333532153,290.15 +76820.0,281.6453220616032,290.15 +76840.0,281.63133510696815,290.15 +76860.0,281.6173725188981,290.15 +76880.0,281.60343432692946,290.15 +76900.0,281.5895205605471,290.15 +76920.0,281.5756312491842,290.15 +76940.0,281.5617664222221,290.15 +76960.0,281.5479261089905,290.15 +76980.0,281.5341103387672,290.15 +77000.0,281.520319140778,290.15 +77020.0,281.5065525441968,290.15 +77040.0,281.4928105781454,290.15 +77060.0,281.4790932716936,290.15 +77080.0,281.4654006538589,290.15 +77100.0,281.45173275360673,290.15 +77120.0,281.4380895998501,290.15 +77140.0,281.42447122144966,290.15 +77160.0,281.4108776472138,290.15 +77180.0,281.3973089058982,290.15 +77200.0,281.38376502620633,290.15 +77220.0,281.3702460367888,290.15 +77240.0,281.3567519662437,290.15 +77260.0,281.34328284311624,290.15 +77280.0,281.3298386958991,290.15 +77300.0,281.31641955303206,290.15 +77320.0,281.30302544290186,290.15 +77340.0,281.28965639384234,290.15 +77360.0,281.2763124341344,290.15 +77380.0,281.2629935920059,290.15 +77400.0,281.24969989563147,290.15 +77420.0,281.2364313731325,290.15 +77440.0,281.22318805257726,290.15 +77460.0,281.2099699619806,290.15 +77480.0,281.19677712930417,290.15 +77500.0,281.183609582456,290.15 +77520.0,281.17046734929056,290.15 +77540.0,281.15735045760914,290.15 +77560.0,281.14425893515903,290.15 +77580.0,281.13119280963406,290.15 +77600.0,281.11815210867434,290.15 +77620.0,281.1051368598661,290.15 +77640.0,281.0921470907417,290.15 +77660.0,281.07918282877984,290.15 +77680.0,281.066244101405,290.15 +77700.0,281.05333093598773,290.15 +77720.0,281.0404433598446,290.15 +77740.0,281.02758140023786,290.15 +77760.0,281.01474508437576,290.15 +77780.0,281.0019344394122,290.15 +77800.0,280.9891494924468,290.15 +77820.0,280.9763902705248,290.15 +77840.0,280.96365680063707,290.15 +77860.0,280.9509491097199,290.15 +77880.0,280.9382672246552,290.15 +77900.0,280.9256111722702,290.15 +77920.0,280.91298097933736,290.15 +77940.0,280.9003766725748,290.15 +77960.0,280.8877982786455,290.15 +77980.0,280.8752458241578,290.15 +78000.0,280.8627193356651,290.15 +78020.0,280.850218839666,290.15 +78040.0,280.837744362604,290.15 +78060.0,280.8252959308675,290.15 +78080.0,280.81287357079003,290.15 +78100.0,280.80047730864976,290.15 +78120.0,280.7881071706697,290.15 +78140.0,280.7757631830177,290.15 +78160.0,280.76344537180614,290.15 +78180.0,280.75115376309213,290.15 +78200.0,280.73888838287735,290.15 +78220.0,280.72664925710785,290.15 +78240.0,280.71443641167434,290.15 +78260.0,280.70224987241187,290.15 +78280.0,280.6900896650998,290.15 +78300.0,280.6779558154618,290.15 +78320.0,280.6658483491658,290.15 +78340.0,280.65376729182395,290.15 +78360.0,280.64171266899245,290.15 +78380.0,280.62968450617166,290.15 +78400.0,280.6176828288059,290.15 +78420.0,280.6057076622836,290.15 +78440.0,280.5937590319369,290.15 +78460.0,280.5818369630419,290.15 +78480.0,280.5699414808186,290.15 +78500.0,280.5580726104307,290.15 +78520.0,280.5462303769855,290.15 +78540.0,280.5344148055341,290.15 +78560.0,280.5226259210711,290.15 +78580.0,280.51086374853475,290.15 +78600.0,280.4991283128067,290.15 +78620.0,280.487419638712,290.15 +78640.0,280.4757377510193,290.15 +78660.0,280.46408267444036,290.15 +78680.0,280.45245443363035,290.15 +78700.0,280.44085305318754,290.15 +78720.0,280.42927855765356,290.15 +78740.0,280.4177309715131,290.15 +78760.0,280.4062103191938,290.15 +78780.0,280.39471662506656,290.15 +78800.0,280.38324991344496,290.15 +78820.0,280.3718102085858,290.15 +78840.0,280.3603975346886,290.15 +78860.0,280.34901191589563,290.15 +78880.0,280.3376533762921,290.15 +78900.0,280.32632193990577,290.15 +78920.0,280.3150176307072,290.15 +78940.0,280.3037404726095,290.15 +78960.0,280.2924904894683,290.15 +78980.0,280.28126770508186,290.15 +79000.0,280.27007214319076,290.15 +79020.0,280.2589038274782,290.15 +79040.0,280.2477627815695,290.15 +79060.0,280.23664902903244,290.15 +79080.0,280.2255625933771,290.15 +79100.0,280.2145034980556,290.15 +79120.0,280.2034717664624,290.15 +79140.0,280.19246742193405,290.15 +79160.0,280.18149048774904,290.15 +79180.0,280.17054098712794,290.15 +79200.0,280.1596189432334,290.15 +79220.0,280.14872437916983,290.15 +79240.0,280.1378573179836,290.15 +79260.0,280.12701778266285,290.15 +79280.0,280.11620579613754,290.15 +79300.0,280.1054213812793,290.15 +79320.0,280.0946645609015,290.15 +79340.0,280.08393535775906,290.15 +79360.0,280.07323379454857,290.15 +79380.0,280.06255989390803,290.15 +79400.0,280.05191367841707,290.15 +79420.0,280.0412951705966,290.15 +79440.0,280.03070439290906,290.15 +79460.0,280.02014136775813,290.15 +79480.0,280.00960611748883,290.15 +79500.0,279.99909866438736,290.15 +79520.0,279.98861903068126,290.15 +79540.0,279.9781672385391,290.15 +79560.0,279.9677433100705,290.15 +79580.0,279.9573472673263,290.15 +79600.0,279.94697913229834,290.15 +79620.0,279.9366389269192,290.15 +79640.0,279.92632667306265,290.15 +79660.0,279.91604239254315,290.15 +79680.0,279.90578610711606,290.15 +79700.0,279.89555783847754,290.15 +79720.0,279.8853576082645,290.15 +79740.0,279.87518543805436,290.15 +79760.0,279.8650413493654,290.15 +79780.0,279.8549253636564,290.15 +79800.0,279.84483750232664,290.15 +79820.0,279.8347777867161,290.15 +79840.0,279.8247462381049,290.15 +79860.0,279.8147428777139,290.15 +79880.0,279.8047677267042,290.15 +79900.0,279.79482080617714,290.15 +79920.0,279.78490213717447,290.15 +79940.0,279.7750117406781,290.15 +79960.0,279.76514963761014,290.15 +79980.0,279.75531584883294,290.15 +80000.0,279.7455103951488,290.15 +80020.0,279.7357332973002,290.15 +80040.0,279.7259845759696,290.15 +80060.0,279.7162642517794,290.15 +80080.0,279.70657234529205,290.15 +80100.0,279.69690887700966,290.15 +80120.0,279.6872738673744,290.15 +80140.0,279.67766733676814,290.15 +80160.0,279.66808930551247,290.15 +80180.0,279.65853979386884,290.15 +80200.0,279.64901882203816,290.15 +80220.0,279.6395264101612,290.15 +80240.0,279.6300625783181,290.15 +80260.0,279.6206273465286,290.15 +80280.0,279.61122073475207,290.15 +80300.0,279.6018427628872,290.15 +80320.0,279.59249345077217,290.15 +80340.0,279.58317281818444,290.15 +80360.0,279.57388088484095,290.15 +80380.0,279.56461767039775,290.15 +80400.0,279.5553831944502,290.15 +80420.0,279.54617747653305,290.15 +80440.0,279.53700053611993,290.15 +80460.0,279.52785239262374,290.15 +80480.0,279.51873306539653,290.15 +80500.0,279.5096425737292,290.15 +80520.0,279.5005809368518,290.15 +80540.0,279.4915481739334,290.15 +80560.0,279.4825443040817,290.15 +80580.0,279.47356934634365,290.15 +80600.0,279.46462331970474,290.15 +80620.0,279.4557062430895,290.15 +80640.0,279.44681813536096,290.15 +80660.0,279.4379590153211,290.15 +80680.0,279.42912890171044,290.15 +80700.0,279.42032781320825,290.15 +80720.0,279.4115557684323,290.15 +80740.0,279.402812785939,290.15 +80760.0,279.3940988842231,290.15 +80780.0,279.3854140817181,290.15 +80800.0,279.3767583967959,290.15 +80820.0,279.3681318477665,290.15 +80840.0,279.3595344528786,290.15 +80860.0,279.3509662303192,290.15 +80880.0,279.3424271982134,290.15 +80900.0,279.3339173746246,290.15 +80920.0,279.3254367775546,290.15 +80940.0,279.3169854249432,290.15 +80960.0,279.30856333466835,290.15 +80980.0,279.3001705245461,290.15 +81000.0,279.29180701233065,290.15 +81020.0,279.28347281571416,290.15 +81040.0,279.27516795232674,290.15 +81060.0,279.26689243973647,290.15 +81080.0,279.2586462954494,290.15 +81100.0,279.2504295369094,290.15 +81120.0,279.24224218149817,290.15 +81140.0,279.23408424653525,290.15 +81160.0,279.2259557492779,290.15 +81180.0,279.2178567069211,290.15 +81200.0,279.20978713659764,290.15 +81220.0,279.20174705537784,290.15 +81240.0,279.1937364802696,290.15 +81260.0,279.1857554282186,290.15 +81280.0,279.17780391610785,290.15 +81300.0,279.169881960758,290.15 +81320.0,279.16198957892715,290.15 +81340.0,279.1541267873108,290.15 +81360.0,279.14629360254196,290.15 +81380.0,279.13849004119083,290.15 +81400.0,279.13071611976517,290.15 +81420.0,279.1229718547098,290.15 +81440.0,279.115257262407,290.15 +81460.0,279.1075723591762,290.15 +81480.0,279.099917161274,290.15 +81500.0,279.09229168489424,290.15 +81520.0,279.0846959461678,290.15 +81540.0,279.0771299611627,290.15 +81560.0,279.06959374588405,290.15 +81580.0,279.0620873162739,290.15 +81600.0,279.05461068821137,290.15 +81620.0,279.04716387751245,290.15 +81640.0,279.0397468999302,290.15 +81660.0,279.0323597711544,290.15 +81680.0,279.02500250681186,290.15 +81700.0,279.017675122466,290.15 +81720.0,279.0103776336173,290.15 +81740.0,279.00311005570273,290.15 +81760.0,278.99587240409625,290.15 +81780.0,278.9886646941082,290.15 +81800.0,278.9814869409859,290.15 +81820.0,278.9743391599131,290.15 +81840.0,278.9672213660102,290.15 +81860.0,278.96013357433424,290.15 +81880.0,278.9530757998786,290.15 +81900.0,278.9460480575734,290.15 +81920.0,278.93905036228506,290.15 +81940.0,278.93208272881645,290.15 +81960.0,278.925145171907,290.15 +81980.0,278.91823770623233,290.15 +82000.0,278.9113603464045,290.15 +82020.0,278.9045131069718,290.15 +82040.0,278.897696002419,290.15 +82060.0,278.89090904716693,290.15 +82080.0,278.8841522555727,290.15 +82100.0,278.87742564192956,290.15 +82120.0,278.87072922046707,290.15 +82140.0,278.86406300535083,290.15 +82160.0,278.85742701068244,290.15 +82180.0,278.85082125049973,290.15 +82200.0,278.8442457387766,290.15 +82220.0,278.83770048942273,290.15 +82240.0,278.831185516284,290.15 +82260.0,278.8247008331422,290.15 +82280.0,278.81824645371495,290.15 +82300.0,278.8118223916559,290.15 +82320.0,278.80542866055447,290.15 +82340.0,278.7990652739359,290.15 +82360.0,278.7927322452614,290.15 +82380.0,278.7864295879278,290.15 +82400.0,278.7801573152677,290.15 +82420.0,278.7739154405494,290.15 +82440.0,278.7677039769771,290.15 +82460.0,278.7615229376904,290.15 +82480.0,278.7553723357647,290.15 +82500.0,278.74925218421106,290.15 +82520.0,278.74316249597587,290.15 +82540.0,278.7371032839414,290.15 +82560.0,278.7310745609252,290.15 +82580.0,278.72507633968047,290.15 +82600.0,278.71910863289577,290.15 +82620.0,278.7131714531953,290.15 +82640.0,278.7072648131384,290.15 +82660.0,278.7013887252201,290.15 +82680.0,278.69554320187063,290.15 +82700.0,278.6897282554556,290.15 +82720.0,278.6839438982759,290.15 +82740.0,278.67819014256776,290.15 +82760.0,278.67246700050276,290.15 +82780.0,278.6667744841875,290.15 +82800.0,278.66111260566396,290.15 +82820.0,278.6554813769093,290.15 +82840.0,278.6498808098358,290.15 +82860.0,278.6443109162908,290.15 +82880.0,278.638771708057,290.15 +82900.0,278.63326319685194,290.15 +82920.0,278.6277853943284,290.15 +82940.0,278.62233831207396,290.15 +82960.0,278.61692196161147,290.15 +82980.0,278.61153635439865,290.15 +83000.0,278.60618150182825,290.15 +83020.0,278.60085741522784,290.15 +83040.0,278.59556410586003,290.15 +83060.0,278.59030158492226,290.15 +83080.0,278.5850698635469,290.15 +83100.0,278.57986895280106,290.15 +83120.0,278.57469886368676,290.15 +83140.0,278.56955960714083,290.15 +83160.0,278.5644511940348,290.15 +83180.0,278.55937363517506,290.15 +83200.0,278.55432694130263,290.15 +83220.0,278.5493111230933,290.15 +83240.0,278.54432619115744,290.15 +83260.0,278.5393721560402,290.15 +83280.0,278.53444902822145,290.15 +83300.0,278.52955681811545,290.15 +83320.0,278.5246955360712,290.15 +83340.0,278.51986519237227,290.15 +83360.0,278.5150657972368,290.15 +83380.0,278.5102973608173,290.15 +83400.0,278.505559893201,290.15 +83420.0,278.5008534044095,290.15 +83440.0,278.4961779043989,290.15 +83460.0,278.4915334030598,290.15 +83480.0,278.4869199102171,290.15 +83500.0,278.4823374356302,290.15 +83520.0,278.4777859889929,290.15 +83540.0,278.47326557993324,290.15 +83560.0,278.4687762180138,290.15 +83580.0,278.46431791273125,290.15 +83600.0,278.4598906735167,290.15 +83620.0,278.4554945097356,290.15 +83640.0,278.45112943068756,290.15 +83660.0,278.4467954456064,290.15 +83680.0,278.44249256366027,290.15 +83700.0,278.43822079395153,290.15 +83720.0,278.4339801455166,290.15 +83740.0,278.42977062732615,290.15 +83760.0,278.425592248285,290.15 +83780.0,278.42144501723214,290.15 +83800.0,278.4173289429405,290.15 +83820.0,278.4132440341173,290.15 +83840.0,278.4091902994038,290.15 +83860.0,278.4051677473751,290.15 +83880.0,278.40117638654067,290.15 +83900.0,278.3972162253437,290.15 +83920.0,278.3932872721616,290.15 +83940.0,278.3893895353056,290.15 +83960.0,278.38552302302105,290.15 +83980.0,278.3816877434871,290.15 +84000.0,278.37788370481684,290.15 +84020.0,278.3741109150575,290.15 +84040.0,278.37036938218984,290.15 +84060.0,278.3666591141288,290.15 +84080.0,278.3629801187231,290.15 +84100.0,278.35933240375516,290.15 +84120.0,278.3557159769415,290.15 +84140.0,278.3521308459322,290.15 +84160.0,278.3485770183113,290.15 +84180.0,278.3450545015965,290.15 +84200.0,278.34156330323935,290.15 +84220.0,278.33810343062515,290.15 +84240.0,278.3346748910729,290.15 +84260.0,278.33127769183534,290.15 +84280.0,278.32791184009886,290.15 +84300.0,278.32457734298356,290.15 +84320.0,278.3212742075433,290.15 +84340.0,278.3180024407655,290.15 +84360.0,278.31476204957124,290.15 +84380.0,278.3115530408152,290.15 +84400.0,278.3083754212858,290.15 +84420.0,278.30522919770493,290.15 +84440.0,278.30211437672807,290.15 +84460.0,278.2990309649444,290.15 +84480.0,278.2959789688764,290.15 +84500.0,278.2929583949804,290.15 +84520.0,278.28996924964616,290.15 +84540.0,278.2870115391967,290.15 +84560.0,278.284085269889,290.15 +84580.0,278.2811904479131,290.15 +84600.0,278.2783270793928,290.15 +84620.0,278.2754951703853,290.15 +84640.0,278.27269472688107,290.15 +84660.0,278.26992575480426,290.15 +84680.0,278.26718826001235,290.15 +84700.0,278.2644822482962,290.15 +84720.0,278.26180772538015,290.15 +84740.0,278.25916469692186,290.15 +84760.0,278.25655316851237,290.15 +84780.0,278.25397314567607,290.15 +84800.0,278.25142463387084,290.15 +84820.0,278.2489076384877,290.15 +84840.0,278.24642216485114,290.15 +84860.0,278.243968218219,290.15 +84880.0,278.2415458037822,290.15 +84900.0,278.2391549266652,290.15 +84920.0,278.2367955919256,290.15 +84940.0,278.23446780455447,290.15 +84960.0,278.2321715694759,290.15 +84980.0,278.22990689154733,290.15 +85000.0,278.2276737755595,290.15 +85020.0,278.2254722262363,290.15 +85040.0,278.2233022482349,290.15 +85060.0,278.2211638461457,290.15 +85080.0,278.2190570244923,290.15 +85100.0,278.21698178773136,290.15 +85120.0,278.2149381402529,290.15 +85140.0,278.21292608638004,290.15 +85160.0,278.2109456303691,290.15 +85180.0,278.2089967764095,290.15 +85200.0,278.2070795286238,290.15 +85220.0,278.20519389106784,290.15 +85240.0,278.2033398677304,290.15 +85260.0,278.20151746253356,290.15 +85280.0,278.1997266793324,290.15 +85300.0,278.19796752191513,290.15 +85320.0,278.19623999400307,290.15 +85340.0,278.1945440992506,290.15 +85360.0,278.1928798412453,290.15 +85380.0,278.1912472235077,290.15 +85400.0,278.1896462494914,290.15 +85420.0,278.1880769225831,290.15 +85440.0,278.1865392461026,290.15 +85460.0,278.1850332233027,290.15 +85480.0,278.1835588573692,290.15 +85500.0,278.1821161514209,290.15 +85520.0,278.18070510850987,290.15 +85540.0,278.1793257316209,290.15 +85560.0,278.177978023672,290.15 +85580.0,278.176661987514,290.15 +85600.0,278.17537762593093,290.15 +85620.0,278.1741249416397,290.15 +85640.0,278.1729039372903,290.15 +85660.0,278.17171461546553,290.15 +85680.0,278.17055697868136,290.15 +85700.0,278.1694310293866,290.15 +85720.0,278.16833676996316,290.15 +85740.0,278.1672742027257,290.15 +85760.0,278.1662433299221,290.15 +85780.0,278.165244153733,290.15 +85800.0,278.1642766762721,290.15 +85820.0,278.163340899586,290.15 +85840.0,278.16243682565414,290.15 +85860.0,278.16156445638916,290.15 +85880.0,278.1607237936363,290.15 +85900.0,278.159914839174,290.15 +85920.0,278.1591375947135,290.15 +85940.0,278.15839206189906,290.15 +85960.0,278.1576782423076,290.15 +85980.0,278.15699613744926,290.15 +86000.0,278.15634574876697,290.15 +86020.0,278.1557270776365,290.15 +86040.0,278.15514012536664,290.15 +86060.0,278.15458489319894,290.15 +86080.0,278.15406138230804,290.15 +86100.0,278.15356959380136,290.15 +86120.0,278.15310952871914,290.15 +86140.0,278.1526811880347,290.15 +86160.0,278.1522845726541,290.15 +86180.0,278.1519196834164,290.15 +86200.0,278.15158652109335,290.15 +86220.0,278.15128508638986,290.15 +86240.0,278.15101537994354,290.15 +86260.0,278.15077740232493,290.15 +86280.0,278.1505711540374,290.15 +86300.0,278.1503966355173,290.15 +86320.0,278.1502538471338,290.15 +86340.0,278.150142789189,290.15 +86360.0,278.1500634619177,290.15 +86380.0,278.1500158654878,290.15 +86400.0,278.15,290.15 diff --git a/examples/e1_time_series_data_example.py b/examples/e1_time_series_data_example.py index b203d664..58f95e0d 100644 --- a/examples/e1_time_series_data_example.py +++ b/examples/e1_time_series_data_example.py @@ -77,4 +77,6 @@ def main(with_plot=True): if __name__ == '__main__': from ebcpy.utils import reproduction main() - reproduction.save_reproduction_archive(title="log-testing") + reproduction.save_reproduction_archive(title="log-testing", log_message='insert custom message here') + + diff --git a/examples/e2_fmu_example.py b/examples/e2a_fmu_continuous_example.py similarity index 94% rename from examples/e2_fmu_example.py rename to examples/e2a_fmu_continuous_example.py index 38f04872..f4d42b30 100644 --- a/examples/e2_fmu_example.py +++ b/examples/e2a_fmu_continuous_example.py @@ -48,8 +48,13 @@ def main( # ######################### Simulation API Instantiation ########################## # %% Setup the FMU-API: model_name = pathlib.Path(__file__).parent.joinpath("data", "HeatPumpSystemWithInput.fmu") - fmu_api = FMU_API(model_name=model_name, - cd=cd, + + # Organize settings in configuration dict + config_dict = { + 'file_path': model_name, + 'cd': cd, + } + fmu_api = FMU_API(config_dict, n_cpu=n_cpu, log_fmu=log_fmu) print("Number of variables:", len(fmu_api.variables)) @@ -88,7 +93,8 @@ def main( print("Inputs names are:", fmu_api.inputs) # We only have TDryBul (outdoor air temperature) as an input. # Start with the setup of a time-index that matches our simulation setup - # Feel free to play around with the settings to see what happens if your time_index is malformed. + # Feel free to play around with the settings + # to see what happens if your time_index is malformed. time_index = np.arange( fmu_api.sim_setup.start_time, fmu_api.sim_setup.stop_time, @@ -144,10 +150,9 @@ def main( if with_plot: plt.show() # Save the data for later reproduction - file = fmu_api.save_for_reproduction(title="FMUTest") + file = fmu_api.save_for_reproduction(title="FMUTest", log_message="example log message") print("ZIP-File to reproduce all this:", file) - if __name__ == '__main__': main( n_cpu=5, diff --git a/examples/e2b_fmu_discrete_example.py b/examples/e2b_fmu_discrete_example.py new file mode 100644 index 00000000..e5a308b6 --- /dev/null +++ b/examples/e2b_fmu_discrete_example.py @@ -0,0 +1,470 @@ +""" +Goals of this part of the examples: + +1. Access basic FMU handler utilities +2. Learn how to perform discrete (stepwise) FMU simulation +3. Understand use cases for discrete FMU simulation +4. Set up Experiment using configuration +5. Learn simulating an FMU interacting with python code +6. Learn simulating two (or more) FMUs interacting together +7. Learn different ways to apply inputs (long-term vs. step-specific) +8. Learn how to access the results +""" + +# Start by importing all relevant packages +import pathlib +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +import math +# Imports from ebcpy +from ebcpy import FMUDiscrete + + +# python PID controller +class PID: + """ + PID controller + :param kp: + Gain + :param ti: + Integral Time Constant + :param td: + Derivative Time Constant + :param lim_low: + Lower Limit + :param lim_high: + Upper Limit + :param reverse_act: + For True, the output decreases with an increasing control difference + :param fixed_dt: + Fixed sampling rate + """ + + def __init__(self, kp=1.0, ti=100.0, td=0.0, lim_low=0.0, lim_high=100.0, + reverse_act=False, fixed_dt=1.0): + + self.x_act = 0 # measurement + self.x_set = 0 # set point + self.e = 0 # control difference + self.e_last = 0 # control difference of previous time step + self.y = 0 # controller output + self.i = 0 # integrator value + + self.Kp = kp + self.Ti = ti + self.Td = td + self.lim_low = lim_low # low control limit + self.lim_high = lim_high # high control limit + self.reverse_act = reverse_act # control action + self.dt = fixed_dt + + # -------- PID algorithm ----------------- + def run(self, x_act, x_set): + """ + Control method, returns control action based on actual value and set point + :param x_act: + Measurement + :param x_set: + Set point + :return: + Control action + + """ + self.x_act = x_act + self.x_set = x_set + + # control difference depending on control direction + if self.reverse_act: + self.e = -(self.x_set - self.x_act) + else: + self.e = (self.x_set - self.x_act) + + # Integral + if self.Ti > 0: + self.i = 1 / self.Ti * self.e * self.dt + self.i + else: + self.i = 0 + + # differential + if self.dt > 0 and self.Td: + de = self.Td * (self.e - self.e_last) / self.dt + else: + de = 0 + + # PID output + self.y = self.Kp * (self.e + self.i + de) + + # Limiter + if self.y < self.lim_low: + self.y = self.lim_low + self.i = self.y / self.Kp - self.e + elif self.y > self.lim_high: + self.y = self.lim_high + self.i = self.y / self.Kp - self.e + + self.e_last = self.e + return self.y + + +# plotting format settings +def plotting_fmt(): + """ + Adjusts the plotting format + """ + # format settings + import matplotlib + # plot settings + matplotlib.rcParams['mathtext.fontset'] = 'custom' + matplotlib.rcParams['mathtext.rm'] = 'Bitstream Vera Sans' + matplotlib.rcParams['mathtext.it'] = 'Bitstream Vera Sans:italic' + matplotlib.rcParams['mathtext.bf'] = 'Bitstream Vera Sans:bold' + + matplotlib.rcParams['mathtext.fontset'] = 'stix' + matplotlib.rcParams['font.family'] = 'STIXGeneral' + matplotlib.rcParams['font.size'] = 9 + matplotlib.rcParams['lines.linewidth'] = 0.75 + + +def main( + n_days: int = 1, + log_fmu: bool = True, + with_plot: bool = True +): + """ + Arguments of this example: + :param float n_days: + Duration of the simulation in days + :param bool log_fmu: + Whether to get the FMU log output + :param bool with_plot: + Show the plot at the end of the script. Default is True. + """ + + # ########## FMU File and Working Directory ########################## + # A thermal zone FMU model is used in this example. + + # define working directory (for log file and temporary fmu file extraction) + cd = pathlib.Path(__file__).parent.joinpath("results") + + # define fmu file path + file_path = pathlib.Path(__file__).parent.joinpath("data", "ThermalZone_bus.fmu") + + # ######### Basic FMU Handler Utilities ########################### + # The FMUDiscrete class includes basic FMU handler utilities + # previously found in aku's fmu handler skript (E.ON ERC EBC intern) + + # Instantiate simulation api with config; fmu file path and working directory are compulsory + config_dict = {'cd': cd, + 'file_path': file_path} + + tz_fmu = FMUDiscrete(config_dict) + + # define relevant vars_of_interest + # often relevant quantities can be found in a signal bus in the dymola model + # using a signal bus instance at top level in dymola improves accessability and readability + # in this case the relevant signal bus instance is named "bus". + vars_of_interest = tz_fmu.find_vars(start_str='bus') + print('Variables of interest: ', vars_of_interest) + print('Inputs: ', tz_fmu.inputs) + print('Outputs: ', tz_fmu.outputs) + + # The investigated thermal zone model uses the signal bus as control interface. + # It contains the in- and outputs. + # bus.processVar: zone temperature measurement + # bus.controlOutput: relative heating power + # bus.disturbance[1]: ambient air temperature + + # ############## Stepwise FMU Simulation ##################################### + + # To simulate the fmu, a simulation setup configuration is required + step_size = 3600 + setup_dict = { + "start_time": 0, + "stop_time": 86400, # 1 day + # Simulation steps of 10 min after which variables can be read or set + "comm_step_size": step_size + } + tz_fmu.set_sim_setup(setup_dict) + + # Initialize fmu and set parameters and initial values + t_start = 20+273.15 # parameter + t_start_amb = -6+273.15 # initial value + tz_fmu.initialize_discrete_sim(parameters={'T_start': t_start}, + init_values={'bus.disturbance[1]': t_start_amb}) + + # Initialize list for results + # by reading the values of the relevant vars_of_interest from the fmu + result_list = [tz_fmu.read_variables(vars_of_interest)] + + # simulation loop: Simulation the fmu stepwise for 12 hours and read results every step + while tz_fmu.current_time < 12 * 3600: + # perform simulation step + tz_fmu.step_only() + # read results and append to list + res = tz_fmu.read_variables(vars_of_interest) + result_list.append(res) + print('Temperature: {}°C'.format(round(res['bus.processVar']-273.15))) + + # After 12 hours, the temperature reaches 18°C. + # To turn on the heating the according variable is set + tz_fmu.set_variables({'bus.controlOutput': 0.1}) + + # The simulation is continued until the stop time is reached + while not tz_fmu.finished: + tz_fmu.step_only() + result_list.append(tz_fmu.read_variables(vars_of_interest)) + + # close fmu + tz_fmu.close() + + # convert list of dicts to pandas datraframe + sim_res_frame = pd.DataFrame(result_list) + sim_res_frame.index = sim_res_frame['SimTime'] + + # ########### Plotting ########################################## + + # Plotting the room temperature reveals + # that turning on the heating could increase the temperature again + plotting_fmt() # apply plotting format settings + x_values = sim_res_frame['SimTime'] + fig, axes = plt.subplots(nrows=3, ncols=1) + axes[0].set_title('Thermal zone with ideal heating') + axes[0].plot(x_values, sim_res_frame['bus.processVar']-273.15, color='b') + axes[0].hlines(18, x_values.iloc[0], x_values.iloc[-1], ls='--', color='r') + axes[0].set_ylabel('T Zone / °C') + axes[1].step(x_values, sim_res_frame['bus.controlOutput'], color='b') + axes[1].set_ylabel('Rel. Power / -') + axes[2].plot(x_values, sim_res_frame['bus.disturbance[1]']-273.15, color='b') + axes[2].set_ylabel('T Ambient / °C') + + for i in range(2): + axes[i].set_xticklabels([]) + for ax in axes: + ax.grid(True, 'both') + plt.tight_layout() + if with_plot: + plt.show() + + # ######### Use Case of Discrete FMU Simulation #################### + + # The previous investigation is a very simple control task: + # Because the room temperature gets too low, the heating is activated manually + + # Discrete (stepwise) FMU simulation is common for control tasks or co-simulation + # (a simulated model requires feedback as input based on its own output). + + # !!! For co-simulation with more than 2 FMUs consider using AgentLib (E.ON ERC EBC intern) !!! + + # In the following, a control task with a PI heating controller + # is demonstrated in two scenarios: + # A: System FMU and Python controller + # B: System FMU and controller FMU + + # # ################# Simulation Setup and Experiment Configuration ########################### + start: float = 0 # start time in seconds + stop: float = 86400 * n_days # end time in seconds + output_step: float = 60 * 10 # resolution of simulation results in seconds + comm_step: float = 60 / 3 # step size of FMU communication in seconds + # In this interval, values are set to or read from the fmu + + # find out supported experiment configuration options + print(f"Supported experiment configuration: {FMUDiscrete.get_experiment_config_fields()}") + # find out supported simulation setup options + print(f"Supported simulation setup: {FMUDiscrete.get_simulation_setup_fields()}") + + # collect simulation setup + setup_dict = { + "start_time": start, + "stop_time": stop, + "output_interval": output_step, + "comm_step_size": comm_step + } + + # create experiment configuration for system FMU as dict + config_dict = { + 'file_path': file_path, + 'cd': cd, + 'sim_setup': setup_dict, + } + + # ################ Instantiate Simulation API for System FMU ########################## + system = FMUDiscrete(config_dict, log_fmu=log_fmu) + # A warning shows that no long-term input data has been set yet. It will be set later. + + # The model inputs are added to 'result_names' by default in addition to the outputs + # in case of discrete FMU simulation + print("Variables to store when simulating:", system.result_names) + + # ################ Create Input Data for the Simulation ############################### + # Without having passed long-term input data with the configuration, + # a message appears in the console during instantiation + # Input data is created in the following and applied using the setter + + # The input_table attribute considers input data that holds for a relevant simulation period + # (here for the whole simulation) + + # In this example the desired zone temperature and the ambient temperature are known in advance + # and will be set to the input_table attribute + + time_index = np.arange(start, stop + comm_step, comm_step) + # The ambient air temperature (bus.disturbance[1]) is modeled as cosine function + dist = 293.15 - np.cos(time_index/86400*2*np.pi) * 15 + # The desired zone temperature (bus.setPoint) considers a night setback: + setpoint = np.ones(len(time_index)) * 290.15 + for idx in range(len(time_index)): + sec_of_day = time_index[idx] - math.floor(time_index[idx]/86400) * 86400 + if 3600 * 8 < sec_of_day < 3600 * 17: + setpoint[idx] = 293.15 + # Store input data as pandas DataFrame + input_df = pd.DataFrame({'bus.disturbance[1]': dist, 'bus.setPoint': setpoint}, + index=time_index) + # create csv file to access input data later on + # for re-import column naming 'time' is crucial + input_df.to_csv('data/ThermalZone_input.csv', index=True, index_label='time') + + # Set the input data to the input_table property + system.input_table = input_df + + # ############# Initialize System FMU for Discrete Simulation ####################### + # define initial values and parameters + t_start = 15 + 273.15 # parameter + t_start_amb = 5 + 273.15 # initial value + + # initialize system FMU + system.initialize_discrete_sim(parameters={'T_start': t_start}, + init_values={'bus.disturbance[1]': t_start_amb}) + print('Initial results data frame "sim_res_df": ') + print(system.sim_res_df) + + # ############## A: Simulate System FMU Interacting with python controller ################# + # Instantiate python PID controller + # Note that the controllers sampling time matches the FMUs communication step size + ctr = PID(kp=0.01, ti=300, lim_high=1, reverse_act=False, fixed_dt=comm_step) + + # Initialize a running variable for the results of each simulation step + res_step = system.sim_res_df.iloc[-1].to_dict() + + print('Study A: System FMU with Python Controller') + + # ############ Do Step Function with Extended Functionality ########################### + # In discrete simulation a simulation step typically goes hand in hand wih + # setting values to the fmu and reading from the fmu. + # This is all covered by the do_step() function. + # It also considers inputs from the input_table attribute. + # The results are stored in the sim_res_df attribute + # and cover the variables within the result_names attribute + + while not system.finished: + # Call controller + # (for advanced control strategies that require previous results, + # use the attribute sim_res_df and adjust output_interval) + ctr_action = ctr.run( + res_step['bus.processVar'], input_df.loc[system.current_time]['bus.setPoint']) + # Apply control action to system and perform simulation step + res_step = system.do_step(input_step={'bus.controlOutput': ctr_action}) + + # ################# Read Simulation Results ################################################### + # simulation results stored in the attribute 'sim_res_df' + # can be returned calling 'get_results()' + results_a = system.get_results() + + # ####################### Instantiate and Initialize system and controller FMU ################ + # re-initializing the system fmu resets the results (the same instance as before is used) + system.initialize_discrete_sim(parameters={'T_start': t_start})#, + #init_values={'bus.disturbance[1]': t_start_amb}) + + # A controller FMU is used alternatively to the python controller + # This time the input data is set in the configuration using the generated .csv-file + config_ctr_dict = { + # compared to the system FMU only the fmu file_path differs + 'file_path': pathlib.Path(__file__).parent.joinpath("data", "PI_1_bus.fmu"), + 'cd': cd, + 'sim_setup': setup_dict, + 'input_data': pathlib.Path(__file__).parent.joinpath("data", "ThermalZone_input.csv") + # input data can be passed as .csv file, pd.DataFrame oder TimeSeriesData object + + } + + controller = FMUDiscrete(config_ctr_dict, log_fmu=log_fmu) + controller.initialize_discrete_sim() + + # ############# B: Simulate System FMU Interacting with a Controller FMU ################## + + res_step = system.sim_res_df.iloc[-1].to_dict() + print('Study B: System FMU with Controller FMU') + while not system.finished: + # Call controller and extract control output + # (for advanced control strategies that require previous results, + # use the attribute sim_res_df and adjust output_interval) + ctr_action = controller.do_step( + input_step={'bus.processVar': res_step['bus.processVar']})['bus.controlOutput'] + # write controller output to system FMU as well as pre-known inputs and perform step + res_step = system.do_step(input_step={'bus.controlOutput': ctr_action}) + + # read simulation results + results_b = system.get_results() + + # ################### Close FMUs ########################################## + # instead of closing each FMU, all FMUs can be closed at once + # # system.close() + # # controller.close() + FMUDiscrete.close_all() + + # ###################### Plot Results ######################################### + cases = [results_a, results_b] + # time index with output interval step + time_index_out = np.arange(0, stop + comm_step, output_step) + fig, axes_mat = plt.subplots(nrows=3, ncols=2) + for i in range(len(cases)): + axes = axes_mat[:, i] + axes[0].plot(time_index_out, cases[i]['bus.processVar'] - 273.15, label='mea', color='b') + axes[0].plot(time_index, setpoint - 273.15, label='set', color='r') + axes[0].set_ylim(15, 22) + axes[1].plot(time_index_out, cases[i]['bus.controlOutput'], + label='control output', color='b') + axes[1].set_ylim(-0.05, 0.2) + axes[2].plot(time_index_out, cases[i]['bus.disturbance[1]'] - 273.15, + label='dist', color='b') + axes[2].set_ylim(0, 40) + + # x label + axes[2].set_xlabel('Time / s') + # title and y label + if i == 0: + axes[0].set_title('System FMU - Python controller') + axes[0].set_ylabel('T Zone / °C') + axes[1].set_ylabel('Rel. Power / -') + axes[2].set_ylabel('T Amb / °C') + if i == 1: + axes[0].set_title('System FMU - Controller FMU') + axes[0].legend(loc='upper right') + # grid + for ax in axes: + ax.grid(True, 'both') + if i > 0: + # ignore y labels for all but the first + ax.set_yticklabels([]) + for k in range(2): + axes[k].set_xticklabels([]) + + plt.tight_layout() + if with_plot: + plt.show() + + # ###################### Understanding the results ########################################## + + # Only a heating device is implemented in the Thermal zone. + # Therefore, the output of the relative heating power is limited to 0. + # Consequently, the controller is unable to cool down the thermal zone. + # This explains most of the control deviation. + + # In case you experience oscillating signals, check if the sampling time + # (communication step size) is appropriate for the controller settings (also within the controller fmu). + +if __name__ == '__main__': + main( + log_fmu=True, + with_plot=True, + n_days=1 + ) diff --git a/examples/e3_dymola_example.py b/examples/e3_dymola_example.py index a7082da0..92fae459 100644 --- a/examples/e3_dymola_example.py +++ b/examples/e3_dymola_example.py @@ -40,14 +40,18 @@ def main( # ######################### Simulation API Instantiation ########################## # %% Setup the Dymola-API: + # organize settings in configuration dict + config_dict = { + 'model_name': 'AixLib.Systems.HeatPumpSystems.Examples.HeatPumpSystem', + 'cd': cd, + 'packages': [aixlib_mo] + } dym_api = DymolaAPI( - model_name="AixLib.Systems.HeatPumpSystems.Examples.HeatPumpSystem", - cd=cd, + config_dict, n_cpu=n_cpu, - packages=[aixlib_mo], show_window=True, n_restart=-1, - equidistant_output=False, + equidistant_output=False # Only necessary if you need a specific dymola version #dymola_path=None, #dymola_version=None @@ -86,12 +90,12 @@ def main( # 3. Set tableName = "myCustomInput" (or any other nice string) table_name = "myCustomInput" # 4. Enter the fileName where you want to store your input. This can be any filepath. + # For this tutorial to work, set # 5. Last, add a parameter in the model to ensure the simulation works without tuning any parameter. # Sadly, this is a requirement. Models with parameters do not require this feature. As this model has # no parameters, it's required. Go into the text-section and add: # 'parameter Real n=1;'. - # For this tutorial to work, set # fileName=Modelica.Utilities.Files.loadResource("modelica://AixLib/Resources/my_custom_input.txt") file_name = pathlib.Path(aixlib_mo).parent.joinpath("Resources", "my_custom_input.txt") # This input generate is re-used from the fmu_example.py file. @@ -143,6 +147,11 @@ def main( ) print(result_sp_2) + # ######################### Closing ########################## + # Close Dymola. If you forget to do so, + # we call this function at the exit of your script. + dym_api.close() + # ######################### Simulation analysis ########################## # Now let's load the TimeSeriesData tsd_1 = TimeSeriesData(result_sp) @@ -164,10 +173,12 @@ def main( plt.title("Input of CombiTimeTable 'timTab'") if with_plot: plt.show() + # Save the data for later reproduction file = dym_api.save_for_reproduction( title="MyDymolaStudy", - files=[result_sp, result_sp_2] + files=[result_sp, result_sp_2], + log_message="example log message" ) print("ZIP-File to reproduce all this:", file) @@ -175,6 +186,6 @@ def main( if __name__ == '__main__': # TODO-User: Change the AixLib path! main( - aixlib_mo=r"D:\04_git\AixLib\AixLib\package.mo", + aixlib_mo=r"D:\02_workshop\AixLib\AixLib\package.mo", n_cpu=5 ) diff --git a/pylintrc b/pylintrc index 0547cae5..e9c332e6 100644 --- a/pylintrc +++ b/pylintrc @@ -3,7 +3,7 @@ # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code -extension-pkg-whitelist= +extension-pkg-whitelist=pydantic # Add files or directories to the blacklist. They should be base names, not # paths. diff --git a/somefile.json b/somefile.json new file mode 100644 index 00000000..4045d426 --- /dev/null +++ b/somefile.json @@ -0,0 +1,3122 @@ +[ + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;31munrecognized-option\u001b[0m", + "message": "\u001b[1;31mUnrecognized option found: no-space-check\u001b[0m", + "message-id": "E0015" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'print-statement' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'parameter-unpacking' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'unpacking-in-except' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'old-raise-syntax' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'backtick' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'import-star-module-level' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'apply-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'basestring-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'buffer-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'cmp-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'coerce-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'execfile-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'file-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'long-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'raw_input-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'reduce-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'standarderror-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'unicode-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'xrange-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'coerce-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'delslice-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'getslice-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'setslice-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'no-absolute-import' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'old-division' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'dict-iter-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'dict-view-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'next-method-called' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'metaclass-assignment' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'indexing-exception' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'raising-string' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'reload-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'oct-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'hex-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'nonzero-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'cmp-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'input-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'round-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'intern-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'unichr-builtin' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'map-builtin-not-iterating' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'zip-builtin-not-iterating' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'range-builtin-not-iterating' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'filter-builtin-not-iterating' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'using-cmp-argument' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'div-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'idiv-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'rdiv-method' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'exception-message-attribute' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'invalid-str-codec' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'sys-max-int' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'bad-python3-import' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'deprecated-string-function' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'deprecated-str-translate-call' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'deprecated-itertools-function' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'deprecated-types-field' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'next-method-defined' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'dict-items-not-iterating' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'dict-keys-not-iterating' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[1;3;35museless-option-value\u001b[0m", + "message": "\u001b[1;3;35mUseless option value for '--disable', 'dict-values-not-iterating' was removed from pylint, see https://github.com/PyCQA/pylint/pull/4942.\u001b[0m", + "message-id": "R0022" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[35munknown-option-value\u001b[0m", + "message": "\u001b[35mUnknown option value for '--disable', expected a valid pylint message and got 'long-suffix'\u001b[0m", + "message-id": "W0012" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[35munknown-option-value\u001b[0m", + "message": "\u001b[35mUnknown option value for '--disable', expected a valid pylint message and got 'old-ne-operator'\u001b[0m", + "message-id": "W0012" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[35munknown-option-value\u001b[0m", + "message": "\u001b[35mUnknown option value for '--disable', expected a valid pylint message and got 'old-octal-literal'\u001b[0m", + "message-id": "W0012" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[35munknown-option-value\u001b[0m", + "message": "\u001b[35mUnknown option value for '--disable', expected a valid pylint message and got 'non-ascii-bytes-literal'\u001b[0m", + "message-id": "W0012" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[35munknown-option-value\u001b[0m", + "message": "\u001b[35mUnknown option value for '--disable', expected a valid pylint message and got 'locally-enabled'\u001b[0m", + "message-id": "W0012" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "C:\\Users\\kbees\\Desktop\\EBC_Uebergabe\\ebcpy\\ebcpy\\pylintrc", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "pylintrc", + "symbol": "\u001b[35munknown-option-value\u001b[0m", + "message": "\u001b[35mUnknown option value for '--disable', expected a valid pylint message and got 'eq-without-hash'\u001b[0m", + "message-id": "W0012" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.data_types", + "obj": "", + "line": 320, + "column": 70, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\data_types.py", + "symbol": "\u001b[1mtrailing-whitespace\u001b[0m", + "message": "\u001b[1mTrailing whitespace\u001b[0m", + "message-id": "C0303" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.data_types", + "obj": "", + "line": 14, + "column": 0, + "endLine": 14, + "endColumn": 46, + "path": "ebcpy\\data_types.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas.core.internals'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.data_types", + "obj": "", + "line": 15, + "column": 0, + "endLine": 15, + "endColumn": 19, + "path": "ebcpy\\data_types.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.data_types", + "obj": "", + "line": 16, + "column": 0, + "endLine": 16, + "endColumn": 18, + "path": "ebcpy\\data_types.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.data_types", + "obj": "TimeSeriesData._load_df_from_file", + "line": 285, + "column": 17, + "endLine": 285, + "endColumn": 32, + "path": "ebcpy\\data_types.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.data_types", + "obj": "TimeSeriesData._load_df_from_file", + "line": 261, + "column": 4, + "endLine": 261, + "endColumn": 26, + "path": "ebcpy\\data_types.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (13/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.data_types", + "obj": "TimeSeriesData.low_pass_filter", + "line": 445, + "column": 4, + "endLine": 445, + "endColumn": 23, + "path": "ebcpy\\data_types.py", + "symbol": "\u001b[1;3;35mtoo-many-arguments\u001b[0m", + "message": "\u001b[1;3;35mToo many arguments (6/5)\u001b[0m", + "message-id": "R0913" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.data_types", + "obj": "TimeSeries", + "line": 534, + "column": 0, + "endLine": 534, + "endColumn": 16, + "path": "ebcpy\\data_types.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (0/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.optimization", + "obj": "", + "line": 125, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (115/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.optimization", + "obj": "", + "line": 126, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (143/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.optimization", + "obj": "", + "line": 339, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (109/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.optimization", + "obj": "", + "line": 9, + "column": 0, + "endLine": 9, + "endColumn": 18, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._scipy_minimize", + "line": 184, + "column": 4, + "endLine": 184, + "endColumn": 23, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;3;35minconsistent-return-statements\u001b[0m", + "message": "\u001b[1;3;35mEither all return statements in a function should return an expression, or none of them should.\u001b[0m", + "message-id": "R1710" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._scipy_minimize", + "line": 184, + "column": 38, + "endLine": 184, + "endColumn": 43, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[35munused-argument\u001b[0m", + "message": "\u001b[35mUnused argument 'n_cpu'\u001b[0m", + "message-id": "W0613" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._dlib_minimize", + "line": 225, + "column": 4, + "endLine": 225, + "endColumn": 22, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (17/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._dlib_minimize", + "line": 225, + "column": 4, + "endLine": 225, + "endColumn": 22, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;3;35minconsistent-return-statements\u001b[0m", + "message": "\u001b[1;3;35mEither all return statements in a function should return an expression, or none of them should.\u001b[0m", + "message-id": "R1710" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._dlib_minimize", + "line": 225, + "column": 29, + "endLine": 225, + "endColumn": 35, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[35munused-argument\u001b[0m", + "message": "\u001b[35mUnused argument 'method'\u001b[0m", + "message-id": "W0613" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._dlib_minimize", + "line": 225, + "column": 42, + "endLine": 225, + "endColumn": 47, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[35munused-argument\u001b[0m", + "message": "\u001b[35mUnused argument 'n_cpu'\u001b[0m", + "message-id": "W0613" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._scipy_differential_evolution", + "line": 274, + "column": 4, + "endLine": 274, + "endColumn": 37, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;3;35minconsistent-return-statements\u001b[0m", + "message": "\u001b[1;3;35mEither all return statements in a function should return an expression, or none of them should.\u001b[0m", + "message-id": "R1710" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._scipy_differential_evolution", + "line": 274, + "column": 63, + "endLine": 274, + "endColumn": 68, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[35munused-argument\u001b[0m", + "message": "\u001b[35mUnused argument 'n_cpu'\u001b[0m", + "message-id": "W0613" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._pymoo", + "line": 320, + "column": 4, + "endLine": 320, + "endColumn": 14, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (31/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._pymoo.EBCPYProblem._evaluate", + "line": 356, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[35munused-argument\u001b[0m", + "message": "\u001b[35mUnused argument 'kwargs'\u001b[0m", + "message-id": "W0613" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._pymoo.EBCPYProblem", + "line": 343, + "column": 8, + "endLine": 343, + "endColumn": 26, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (0/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._pymoo", + "line": 378, + "column": 16, + "endLine": 378, + "endColumn": 64, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pymoo.algorithms.soo.nonconvex.ga'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.optimization", + "obj": "Optimizer._pymoo", + "line": 320, + "column": 4, + "endLine": 320, + "endColumn": 14, + "path": "ebcpy\\optimization.py", + "symbol": "\u001b[1;3;35minconsistent-return-statements\u001b[0m", + "message": "\u001b[1;3;35mEither all return statements in a function should return an expression, or none of them should.\u001b[0m", + "message-id": "R1710" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "", + "line": 26, + "column": 0, + "endLine": 26, + "endColumn": 24, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'scipy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "", + "line": 27, + "column": 0, + "endLine": 27, + "endColumn": 35, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'sklearn'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "", + "line": 28, + "column": 0, + "endLine": 28, + "endColumn": 48, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas.tseries.frequencies'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "", + "line": 29, + "column": 0, + "endLine": 29, + "endColumn": 18, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "", + "line": 30, + "column": 0, + "endLine": 30, + "endColumn": 19, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "", + "line": 31, + "column": 0, + "endLine": 31, + "endColumn": 24, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'scipy.stats'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "clean_and_space_equally_time_series", + "line": 220, + "column": 0, + "endLine": 220, + "endColumn": 39, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (16/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "clean_and_space_equally_time_series", + "line": 220, + "column": 0, + "endLine": 220, + "endColumn": 39, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (13/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.preprocessing", + "obj": "create_on_off_signal", + "line": 436, + "column": 0, + "endLine": 436, + "endColumn": 24, + "path": "ebcpy\\preprocessing.py", + "symbol": "\u001b[1;3;35mtoo-many-arguments\u001b[0m", + "message": "\u001b[1;3;35mToo many arguments (6/5)\u001b[0m", + "message-id": "R0913" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.modelica.manipulate_ds", + "obj": "", + "line": 5, + "column": 0, + "endLine": 5, + "endColumn": 19, + "path": "ebcpy\\modelica\\manipulate_ds.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.modelica.manipulate_ds", + "obj": "convert_ds_file_to_dataframe", + "line": 44, + "column": 9, + "endLine": 44, + "endColumn": 28, + "path": "ebcpy\\modelica\\manipulate_ds.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.modelica.manipulate_ds", + "obj": "eliminate_parameters_from_ds_file", + "line": 107, + "column": 24, + "endLine": 107, + "endColumn": 53, + "path": "ebcpy\\modelica\\manipulate_ds.py", + "symbol": "\u001b[1mconsider-using-f-string\u001b[0m", + "message": "\u001b[1mFormatting a regular string which could be a f-string\u001b[0m", + "message-id": "C0209" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.modelica.manipulate_ds", + "obj": "eliminate_parameters_from_ds_file", + "line": 123, + "column": 24, + "endLine": 123, + "endColumn": 49, + "path": "ebcpy\\modelica\\manipulate_ds.py", + "symbol": "\u001b[1mconsider-using-f-string\u001b[0m", + "message": "\u001b[1mFormatting a regular string which could be a f-string\u001b[0m", + "message-id": "C0209" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.modelica.manipulate_ds", + "obj": "eliminate_parameters_from_ds_file", + "line": 125, + "column": 27, + "endLine": 125, + "endColumn": 54, + "path": "ebcpy\\modelica\\manipulate_ds.py", + "symbol": "\u001b[1mconsider-using-f-string\u001b[0m", + "message": "\u001b[1mFormatting a regular string which could be a f-string\u001b[0m", + "message-id": "C0209" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.modelica.manipulate_ds", + "obj": "eliminate_parameters_from_ds_file", + "line": 134, + "column": 9, + "endLine": 134, + "endColumn": 28, + "path": "ebcpy\\modelica\\manipulate_ds.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.modelica.manipulate_ds", + "obj": "eliminate_parameters_from_ds_file", + "line": 140, + "column": 9, + "endLine": 140, + "endColumn": 29, + "path": "ebcpy\\modelica\\manipulate_ds.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "", + "line": 22, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (106/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "", + "line": 55, + "column": 0, + "endLine": 55, + "endColumn": 28, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'scipy.io'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "", + "line": 56, + "column": 0, + "endLine": 56, + "endColumn": 54, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'scipy.io.matlab.mio_utils'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "", + "line": 57, + "column": 0, + "endLine": 57, + "endColumn": 19, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "", + "line": 58, + "column": 0, + "endLine": 58, + "endColumn": 18, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "loadsim", + "line": 65, + "column": 0, + "endLine": 65, + "endColumn": 11, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (16/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "loadsim", + "line": 123, + "column": 17, + "endLine": 125, + "endColumn": 58, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1mconsider-using-f-string\u001b[0m", + "message": "\u001b[1mFormatting a regular string which could be a f-string\u001b[0m", + "message-id": "C0209" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "loadsim", + "line": 154, + "column": 20, + "endLine": 154, + "endColumn": 26, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1;3;35muse-dict-literal\u001b[0m", + "message": "\u001b[1;3;35mConsider using {} instead of dict()\u001b[0m", + "message-id": "R1735" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "loadsim", + "line": 157, + "column": 28, + "endLine": 157, + "endColumn": 37, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1mconsider-using-f-string\u001b[0m", + "message": "\u001b[1mFormatting a regular string which could be a f-string\u001b[0m", + "message-id": "C0209" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "loadsim", + "line": 158, + "column": 28, + "endLine": 158, + "endColumn": 37, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1mconsider-using-f-string\u001b[0m", + "message": "\u001b[1mFormatting a regular string which could be a f-string\u001b[0m", + "message-id": "C0209" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.modelica.simres", + "obj": "mat_to_pandas", + "line": 254, + "column": 0, + "endLine": 254, + "endColumn": 17, + "path": "ebcpy\\modelica\\simres.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (13/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.modelica", + "obj": "get_expressions", + "line": 9, + "column": 0, + "endLine": 9, + "endColumn": 19, + "path": "ebcpy\\modelica\\__init__.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (20/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.modelica", + "obj": "get_expressions", + "line": 56, + "column": 15, + "endLine": 56, + "endColumn": 44, + "path": "ebcpy\\modelica\\__init__.py", + "symbol": "\u001b[1mconsider-using-f-string\u001b[0m", + "message": "\u001b[1mFormatting a regular string which could be a f-string\u001b[0m", + "message-id": "C0209" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.modelica", + "obj": "get_expressions", + "line": 60, + "column": 9, + "endLine": 60, + "endColumn": 34, + "path": "ebcpy\\modelica\\__init__.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.modelica", + "obj": "get_expressions", + "line": 9, + "column": 0, + "endLine": 9, + "endColumn": 19, + "path": "ebcpy\\modelica\\__init__.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (13/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "", + "line": 175, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (102/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "", + "line": 8, + "column": 0, + "endLine": 8, + "endColumn": 48, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pydantic'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "", + "line": 9, + "column": 0, + "endLine": 9, + "endColumn": 44, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pydantic'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "", + "line": 10, + "column": 0, + "endLine": 10, + "endColumn": 18, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "", + "line": 11, + "column": 0, + "endLine": 11, + "endColumn": 19, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "SimulationSetup.check_valid_solver", + "line": 46, + "column": 4, + "endLine": 46, + "endColumn": 26, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;31mno-self-argument\u001b[0m", + "message": "\u001b[1;31mMethod 'check_valid_solver' should have \"self\" as first argument\u001b[0m", + "message-id": "E0213" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "SimulationSetup.Config", + "line": 58, + "column": 4, + "endLine": 58, + "endColumn": 16, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (0/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "SimulationSetup", + "line": 16, + "column": 0, + "endLine": 16, + "endColumn": 21, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (1/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "SimulationSetupDymola", + "line": 64, + "column": 0, + "endLine": 64, + "endColumn": 27, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (1/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "SimulationSetupFMU_Continuous", + "line": 88, + "column": 0, + "endLine": 88, + "endColumn": 35, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1minvalid-name\u001b[0m", + "message": "\u001b[1mClass name \"SimulationSetupFMU_Continuous\" doesn't conform to PascalCase naming style\u001b[0m", + "message-id": "C0103" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "SimulationSetupFMU_Continuous", + "line": 88, + "column": 0, + "endLine": 88, + "endColumn": 35, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (1/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "SimulationSetupFMU_Discrete", + "line": 115, + "column": 0, + "endLine": 115, + "endColumn": 33, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1minvalid-name\u001b[0m", + "message": "\u001b[1mClass name \"SimulationSetupFMU_Discrete\" doesn't conform to PascalCase naming style\u001b[0m", + "message-id": "C0103" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "SimulationSetupFMU_Discrete", + "line": 115, + "column": 0, + "endLine": 115, + "endColumn": 33, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (1/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "ExperimentConfiguration.Config", + "line": 144, + "column": 4, + "endLine": 144, + "endColumn": 16, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (0/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "ExperimentConfiguration", + "line": 137, + "column": 0, + "endLine": 137, + "endColumn": 29, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (0/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "ExperimentConfigFMU_Continuous", + "line": 150, + "column": 0, + "endLine": 150, + "endColumn": 36, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1minvalid-name\u001b[0m", + "message": "\u001b[1mClass name \"ExperimentConfigFMU_Continuous\" doesn't conform to PascalCase naming style\u001b[0m", + "message-id": "C0103" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "ExperimentConfigFMU_Continuous", + "line": 150, + "column": 0, + "endLine": 150, + "endColumn": 36, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (0/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "ExperimentConfigFMU_Discrete", + "line": 159, + "column": 0, + "endLine": 159, + "endColumn": 34, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1minvalid-name\u001b[0m", + "message": "\u001b[1mClass name \"ExperimentConfigFMU_Discrete\" doesn't conform to PascalCase naming style\u001b[0m", + "message-id": "C0103" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "ExperimentConfigFMU_Discrete", + "line": 159, + "column": 0, + "endLine": 159, + "endColumn": 34, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (0/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.config", + "obj": "ExperimentConfigDymola", + "line": 170, + "column": 0, + "endLine": 170, + "endColumn": 28, + "path": "ebcpy\\simulationapi\\config.py", + "symbol": "\u001b[1;3;35mtoo-few-public-methods\u001b[0m", + "message": "\u001b[1;3;35mToo few public methods (0/2)\u001b[0m", + "message-id": "R0903" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "", + "line": 792, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (111/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "", + "line": 883, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (118/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1mtoo-many-lines\u001b[0m", + "message": "\u001b[1mToo many lines in module (1146/1000)\u001b[0m", + "message-id": "C0302" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "", + "line": 792, + "column": 35, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[35mfixme\u001b[0m", + "message": "\u001b[35mtodo: review: similar name and function to new introduced experiment config\u001b[0m", + "message-id": "W0511" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "", + "line": 12, + "column": 0, + "endLine": 12, + "endColumn": 19, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI", + "line": 23, + "column": 0, + "endLine": 23, + "endColumn": 15, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-instance-attributes\u001b[0m", + "message": "\u001b[1;3;35mToo many instance attributes (22/7)\u001b[0m", + "message-id": "R0902" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI.__init__", + "line": 113, + "column": 4, + "endLine": 113, + "endColumn": 16, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (26/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI.__init__", + "line": 113, + "column": 4, + "endLine": 113, + "endColumn": 16, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-statements\u001b[0m", + "message": "\u001b[1;3;35mToo many statements (77/50)\u001b[0m", + "message-id": "R0915" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._single_simulation", + "line": 306, + "column": 4, + "endLine": 306, + "endColumn": 26, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (41/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._single_simulation", + "line": 499, + "column": 19, + "endLine": 499, + "endColumn": 28, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[35mbroad-except\u001b[0m", + "message": "\u001b[35mCatching too general exception Exception\u001b[0m", + "message-id": "W0703" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._single_simulation", + "line": 496, + "column": 21, + "endLine": 496, + "endColumn": 42, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._single_simulation", + "line": 306, + "column": 4, + "endLine": 306, + "endColumn": 26, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-return-statements\u001b[0m", + "message": "\u001b[1;3;35mToo many return statements (7/6)\u001b[0m", + "message-id": "R0911" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._single_simulation", + "line": 306, + "column": 4, + "endLine": 306, + "endColumn": 26, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (32/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._single_simulation", + "line": 306, + "column": 4, + "endLine": 306, + "endColumn": 26, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-statements\u001b[0m", + "message": "\u001b[1;3;35mToo many statements (115/50)\u001b[0m", + "message-id": "R0915" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._single_simulation", + "line": 320, + "column": 12, + "endLine": 320, + "endColumn": 22, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[35munused-variable\u001b[0m", + "message": "\u001b[35mUnused variable 'idx_worker'\u001b[0m", + "message-id": "W0612" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI.set_compiler", + "line": 567, + "column": 4, + "endLine": 567, + "endColumn": 20, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-arguments\u001b[0m", + "message": "\u001b[1;3;35mToo many arguments (6/5)\u001b[0m", + "message-id": "R0913" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._open_dymola_interface", + "line": 774, + "column": 12, + "endLine": 774, + "endColumn": 63, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1mimport-outside-toplevel\u001b[0m", + "message": "\u001b[1mImport outside toplevel (dymola.dymola_interface.DymolaInterface)\u001b[0m", + "message-id": "C0415" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._open_dymola_interface", + "line": 775, + "column": 12, + "endLine": 775, + "endColumn": 73, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1mimport-outside-toplevel\u001b[0m", + "message": "\u001b[1mImport outside toplevel (dymola.dymola_exception.DymolaConnectionException)\u001b[0m", + "message-id": "C0415" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI.save_for_reproduction", + "line": 822, + "column": 4, + "endLine": 822, + "endColumn": 29, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-arguments\u001b[0m", + "message": "\u001b[1;3;35mToo many arguments (6/5)\u001b[0m", + "message-id": "R0913" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI.save_for_reproduction", + "line": 822, + "column": 4, + "endLine": 822, + "endColumn": 29, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (21/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI.save_for_reproduction", + "line": 847, + "column": 8, + "endLine": 847, + "endColumn": 92, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1mimport-outside-toplevel\u001b[0m", + "message": "\u001b[1mImport outside toplevel (ebcpy.utils.reproduction.ReproductionFile, ebcpy.utils.reproduction.CopyFile, ebcpy.utils.reproduction.get_git_information)\u001b[0m", + "message-id": "C0415" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI.save_for_reproduction", + "line": 902, + "column": 28, + "endLine": 902, + "endColumn": 52, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._save_to_fmu", + "line": 937, + "column": 18, + "endLine": 937, + "endColumn": 44, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1mconsider-using-f-string\u001b[0m", + "message": "\u001b[1mFormatting a regular string which could be a f-string\u001b[0m", + "message-id": "C0209" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._save_to_fmu", + "line": 925, + "column": 4, + "endLine": 925, + "endColumn": 20, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[1;3;35minconsistent-return-statements\u001b[0m", + "message": "\u001b[1;3;35mEither all return statements in a function should return an expression, or none of them should.\u001b[0m", + "message-id": "R1710" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.dymola", + "obj": "DymolaAPI._single_simulation", + "line": 337, + "column": 12, + "endLine": 337, + "endColumn": 28, + "path": "ebcpy\\simulationapi\\dymola.py", + "symbol": "\u001b[35mattribute-defined-outside-init\u001b[0m", + "message": "\u001b[35mAttribute '_model_name' defined outside __init__\u001b[0m", + "message-id": "W0201" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 59, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (115/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 773, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (150/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 59, + "column": 9, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[35mfixme\u001b[0m", + "message": "\u001b[35mTODO: Review: Discuss how to deal best with usage of variables in FMU class that are defined in sub-class\u001b[0m", + "message-id": "W0511" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 221, + "column": 40, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[35mfixme\u001b[0m", + "message": "\u001b[35mtodo\u001b[0m", + "message-id": "W0511" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 310, + "column": 5, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[35mfixme\u001b[0m", + "message": "\u001b[35mTODO: Review: n_cpu and log_fmu in config?\u001b[0m", + "message-id": "W0511" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 602, + "column": 5, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[35mfixme\u001b[0m", + "message": "\u001b[35mTODO: Review: Does it make sense to distinguish between parameter and init value?\u001b[0m", + "message-id": "W0511" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 719, + "column": 13, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[35mfixme\u001b[0m", + "message": "\u001b[35mTODO: Review: not efficient to evaluate every step\u001b[0m", + "message-id": "W0511" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 773, + "column": 38, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[35mfixme\u001b[0m", + "message": "\u001b[35mtodo: make class method out of it to consider the frequent case of multiple discrete fmu apis in the same study\u001b[0m", + "message-id": "W0511" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 11, + "column": 0, + "endLine": 11, + "endColumn": 11, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'fmpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 12, + "column": 0, + "endLine": 12, + "endColumn": 57, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'fmpy.model_description'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 13, + "column": 0, + "endLine": 13, + "endColumn": 29, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pydantic'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 14, + "column": 0, + "endLine": 14, + "endColumn": 18, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "", + "line": 15, + "column": 0, + "endLine": 15, + "endColumn": 19, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU", + "line": 25, + "column": 0, + "endLine": 25, + "endColumn": 9, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;3;35mtoo-many-instance-attributes\u001b[0m", + "message": "\u001b[1;3;35mToo many instance attributes (17/7)\u001b[0m", + "message-id": "R0902" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU._custom_logger", + "line": 69, + "column": 4, + "endLine": 69, + "endColumn": 22, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;3;35mtoo-many-arguments\u001b[0m", + "message": "\u001b[1;3;35mToo many arguments (6/5)\u001b[0m", + "message-id": "R0913" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU.find_vars", + "line": 94, + "column": 8, + "endLine": 96, + "endColumn": 39, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1mconsider-using-enumerate\u001b[0m", + "message": "\u001b[1mConsider using enumerate instead of iterating with range and len\u001b[0m", + "message-id": "C0200" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU.read_variables", + "line": 145, + "column": 25, + "endLine": 145, + "endColumn": 42, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31mno-member\u001b[0m", + "message": "\u001b[1;31mInstance of 'FMU' has no 'current_time' member\u001b[0m", + "message-id": "E1101" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU.setup_fmu_instance", + "line": 196, + "column": 16, + "endLine": 196, + "endColumn": 27, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31munsupported-assignment-operation\u001b[0m", + "message": "\u001b[1;31m'self.inputs' does not support item assignment\u001b[0m", + "message-id": "E1137" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU.setup_fmu_instance", + "line": 198, + "column": 16, + "endLine": 198, + "endColumn": 28, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31munsupported-assignment-operation\u001b[0m", + "message": "\u001b[1;31m'self.outputs' does not support item assignment\u001b[0m", + "message-id": "E1137" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU.setup_fmu_instance", + "line": 199, + "column": 17, + "endLine": 199, + "endColumn": 87, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;3;35mconsider-using-in\u001b[0m", + "message": "\u001b[1;3;35mConsider merging these comparisons with 'in' by using 'var.causality in ('parameter', 'calculatedParameter')'. Use a set instead if elements are hashable.\u001b[0m", + "message-id": "R1714" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU.setup_fmu_instance", + "line": 200, + "column": 16, + "endLine": 200, + "endColumn": 31, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31munsupported-assignment-operation\u001b[0m", + "message": "\u001b[1;31m'self.parameters' does not support item assignment\u001b[0m", + "message-id": "E1137" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU.setup_fmu_instance", + "line": 202, + "column": 16, + "endLine": 202, + "endColumn": 27, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31munsupported-assignment-operation\u001b[0m", + "message": "\u001b[1;31m'self.states' does not support item assignment\u001b[0m", + "message-id": "E1137" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU._setup_single_fmu_instance", + "line": 221, + "column": 22, + "endLine": 221, + "endColumn": 37, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;31mno-member\u001b[0m", + "message": "\u001b[1;31mInstance of 'FMU' has no 'worker_idx' member\u001b[0m", + "message-id": "E1101" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU._single_close", + "line": 253, + "column": 15, + "endLine": 253, + "endColumn": 24, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[35mbroad-except\u001b[0m", + "message": "\u001b[35mCatching too general exception Exception\u001b[0m", + "message-id": "W0703" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU_API", + "line": 270, + "column": 0, + "endLine": 270, + "endColumn": 13, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1minvalid-name\u001b[0m", + "message": "\u001b[1mClass name \"FMU_API\" doesn't conform to PascalCase naming style\u001b[0m", + "message-id": "C0103" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU_API._single_simulation", + "line": 335, + "column": 4, + "endLine": 335, + "endColumn": 26, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (16/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU_API._single_simulation", + "line": 404, + "column": 15, + "endLine": 404, + "endColumn": 24, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[35mbroad-except\u001b[0m", + "message": "\u001b[35mCatching too general exception Exception\u001b[0m", + "message-id": "W0703" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU_API._single_simulation", + "line": 335, + "column": 4, + "endLine": 335, + "endColumn": 26, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (13/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU_Discrete", + "line": 493, + "column": 0, + "endLine": 493, + "endColumn": 18, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1minvalid-name\u001b[0m", + "message": "\u001b[1mClass name \"FMU_Discrete\" doesn't conform to PascalCase naming style\u001b[0m", + "message-id": "C0103" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi.fmu", + "obj": "FMU_Discrete", + "line": 493, + "column": 0, + "endLine": 493, + "endColumn": 18, + "path": "ebcpy\\simulationapi\\fmu.py", + "symbol": "\u001b[1;3;35mtoo-many-instance-attributes\u001b[0m", + "message": "\u001b[1;3;35mToo many instance attributes (12/7)\u001b[0m", + "message-id": "R0902" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi.__init__", + "obj": "", + "line": 197, + "column": 9, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[35mfixme\u001b[0m", + "message": "\u001b[35mTODO: Review: review this condition, what is it for?\u001b[0m", + "message-id": "W0511" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "", + "line": 16, + "column": 0, + "endLine": 16, + "endColumn": 48, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pydantic'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "", + "line": 17, + "column": 0, + "endLine": 17, + "endColumn": 18, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "Variable.check_value_type", + "line": 51, + "column": 4, + "endLine": 51, + "endColumn": 24, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;31mno-self-argument\u001b[0m", + "message": "\u001b[1;31mMethod 'check_value_type' should have \"self\" as first argument\u001b[0m", + "message-id": "E0213" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "Variable.check_value", + "line": 63, + "column": 4, + "endLine": 63, + "endColumn": 19, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;31mno-self-argument\u001b[0m", + "message": "\u001b[1;31mMethod 'check_value' should have \"self\" as first argument\u001b[0m", + "message-id": "E0213" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "Model", + "line": 84, + "column": 0, + "endLine": 84, + "endColumn": 11, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;3;35mtoo-many-instance-attributes\u001b[0m", + "message": "\u001b[1;3;35mToo many instance attributes (13/7)\u001b[0m", + "message-id": "R0902" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "Model.model_name", + "line": 199, + "column": 11, + "endLine": 199, + "endColumn": 22, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;31mno-member\u001b[0m", + "message": "\u001b[1;31mInstance of 'Model' has no 'use_mp' member\u001b[0m", + "message-id": "E1101" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "Model.model_name", + "line": 200, + "column": 15, + "endLine": 200, + "endColumn": 30, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;31mno-member\u001b[0m", + "message": "\u001b[1;31mInstance of 'Model' has no 'worker_idx' member\u001b[0m", + "message-id": "E1101" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "Model._update_config", + "line": 133, + "column": 21, + "endLine": 133, + "endColumn": 32, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;31maccess-member-before-definition\u001b[0m", + "message": "\u001b[1;31mAccess to member 'config' before its definition line 135\u001b[0m", + "message-id": "E0203" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "ContinuousSimulation.worker_idx", + "line": 373, + "column": 14, + "endLine": 373, + "endColumn": 44, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[35mprotected-access\u001b[0m", + "message": "\u001b[35mAccess to a protected member _identity of a client class\u001b[0m", + "message-id": "W0212" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.simulationapi", + "obj": "ContinuousSimulation.simulate", + "line": 412, + "column": 4, + "endLine": 412, + "endColumn": 16, + "path": "ebcpy\\simulationapi\\__init__.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (14/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.utils.conversion", + "obj": "", + "line": 6, + "column": 0, + "endLine": 6, + "endColumn": 23, + "path": "ebcpy\\utils\\conversion.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'scipy.io'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.utils.conversion", + "obj": "", + "line": 7, + "column": 0, + "endLine": 7, + "endColumn": 18, + "path": "ebcpy\\utils\\conversion.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.utils.interpolation", + "obj": "", + "line": 3, + "column": 0, + "endLine": 3, + "endColumn": 19, + "path": "ebcpy\\utils\\interpolation.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pandas'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.utils.interpolation", + "obj": "", + "line": 4, + "column": 0, + "endLine": 4, + "endColumn": 18, + "path": "ebcpy\\utils\\interpolation.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "", + "line": 259, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1mline-too-long\u001b[0m", + "message": "\u001b[1mLine too long (126/100)\u001b[0m", + "message-id": "C0301" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "save_reproduction_archive", + "line": 54, + "column": 0, + "endLine": 54, + "endColumn": 29, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1;3;35mtoo-many-arguments\u001b[0m", + "message": "\u001b[1;3;35mToo many arguments (6/5)\u001b[0m", + "message-id": "R0913" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "save_reproduction_archive", + "line": 54, + "column": 0, + "endLine": 54, + "endColumn": 29, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1;3;35mtoo-many-locals\u001b[0m", + "message": "\u001b[1;3;35mToo many local variables (17/15)\u001b[0m", + "message-id": "R0914" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "save_reproduction_archive", + "line": 90, + "column": 28, + "endLine": 90, + "endColumn": 60, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1;31mno-member\u001b[0m", + "message": "\u001b[1;31mInstance of 'module' has no '__file__' member\u001b[0m", + "message-id": "E1101" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "save_reproduction_archive", + "line": 103, + "column": 16, + "endLine": 103, + "endColumn": 40, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "save_reproduction_archive", + "line": 125, + "column": 9, + "endLine": 125, + "endColumn": 60, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[35munspecified-encoding\u001b[0m", + "message": "\u001b[35mUsing open without explicitly specifying an encoding\u001b[0m", + "message-id": "W1514" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "save_reproduction_archive", + "line": 125, + "column": 64, + "endLine": 125, + "endColumn": 65, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1minvalid-name\u001b[0m", + "message": "\u001b[1mVariable name \"f\" doesn't conform to snake_case naming style\u001b[0m", + "message-id": "C0103" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "save_reproduction_archive", + "line": 161, + "column": 12, + "endLine": 161, + "endColumn": 16, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1;3;35mredefined-argument-from-local\u001b[0m", + "message": "\u001b[1;3;35mRedefining argument with the local name 'file'\u001b[0m", + "message-id": "R1704" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "save_reproduction_archive", + "line": 54, + "column": 0, + "endLine": 54, + "endColumn": 29, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1;3;35mtoo-many-branches\u001b[0m", + "message": "\u001b[1;3;35mToo many branches (16/12)\u001b[0m", + "message-id": "R0912" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "get_git_information", + "line": 203, + "column": 8, + "endLine": 203, + "endColumn": 72, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1mimport-outside-toplevel\u001b[0m", + "message": "\u001b[1mImport outside toplevel (git.Repo, git.InvalidGitRepositoryError, git.RemoteReference)\u001b[0m", + "message-id": "C0415" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "get_git_information", + "line": 205, + "column": 8, + "endLine": 208, + "endColumn": 9, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[35mraise-missing-from\u001b[0m", + "message": "\u001b[35mConsider explicitly re-raising using 'raise ImportError('Could not save data for reproduction, install GitPython using `pip install GitPython`: ' + str(err)) from err'\u001b[0m", + "message-id": "W0707" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "get_git_information", + "line": 181, + "column": 0, + "endLine": 181, + "endColumn": 23, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1;3;35minconsistent-return-statements\u001b[0m", + "message": "\u001b[1;3;35mEither all return statements in a function should return an expression, or none of them should.\u001b[0m", + "message-id": "R1710" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "_get_python_package_information", + "line": 295, + "column": 8, + "endLine": 295, + "endColumn": 72, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1mimport-outside-toplevel\u001b[0m", + "message": "\u001b[1mImport outside toplevel (pip._internal.utils.misc.get_installed_distributions)\u001b[0m", + "message-id": "C0415" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "_get_python_package_information", + "line": 297, + "column": 8, + "endLine": 297, + "endColumn": 51, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1mimport-outside-toplevel\u001b[0m", + "message": "\u001b[1mImport outside toplevel (pip.get_installed_distributions)\u001b[0m", + "message-id": "C0415" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "_get_python_package_information", + "line": 313, + "column": 16, + "endLine": 313, + "endColumn": 52, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'pypisearch.search'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1mconvention\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "_get_python_package_information", + "line": 313, + "column": 16, + "endLine": 313, + "endColumn": 52, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[1mimport-outside-toplevel\u001b[0m", + "message": "\u001b[1mImport outside toplevel (pypisearch.search.Search)\u001b[0m", + "message-id": "C0415" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "_get_python_package_information", + "line": 316, + "column": 20, + "endLine": 321, + "endColumn": 21, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[35mraising-format-tuple\u001b[0m", + "message": "\u001b[35mException arguments suggest string formatting might be intended\u001b[0m", + "message-id": "W0715" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "_get_python_reproduction", + "line": 342, + "column": 8, + "endLine": 342, + "endColumn": 36, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[35mf-string-without-interpolation\u001b[0m", + "message": "\u001b[35mUsing an f-string that does not have any interpolated variables\u001b[0m", + "message-id": "W1309" + }, + { + "type": "\u001b[35mwarning\u001b[0m", + "module": "ebcpy.utils.reproduction", + "obj": "_get_python_reproduction", + "line": 343, + "column": 8, + "endLine": 343, + "endColumn": 42, + "path": "ebcpy\\utils\\reproduction.py", + "symbol": "\u001b[35mf-string-without-interpolation\u001b[0m", + "message": "\u001b[35mUsing an f-string that does not have any interpolated variables\u001b[0m", + "message-id": "W1309" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.utils.statistics_analyzer", + "obj": "", + "line": 4, + "column": 0, + "endLine": 4, + "endColumn": 18, + "path": "ebcpy\\utils\\statistics_analyzer.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'numpy'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;31merror\u001b[0m", + "module": "ebcpy.utils.statistics_analyzer", + "obj": "", + "line": 5, + "column": 0, + "endLine": 5, + "endColumn": 35, + "path": "ebcpy\\utils\\statistics_analyzer.py", + "symbol": "\u001b[1;31mimport-error\u001b[0m", + "message": "\u001b[1;31mUnable to import 'sklearn.metrics'\u001b[0m", + "message-id": "E0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.__init__", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\utils\\__init__.py", + "symbol": "\u001b[1;3;35mduplicate-code\u001b[0m", + "message": "\u001b[1;3;35mSimilar lines in 2 files\n==ebcpy.simulationapi.dymola:[915:926]\n==ebcpy.simulationapi.fmu:[483:492]\n ))\n return super().save_for_reproduction(\n title=title,\n path=path,\n files=files,\n **kwargs\n )\n\n\u001b[0m", + "message-id": "R0801" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.__init__", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\utils\\__init__.py", + "symbol": "\u001b[1;3;35mcyclic-import\u001b[0m", + "message": "\u001b[1;3;35mCyclic import (ebcpy -> ebcpy.simulationapi.dymola)\u001b[0m", + "message-id": "R0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.__init__", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\utils\\__init__.py", + "symbol": "\u001b[1;3;35mcyclic-import\u001b[0m", + "message": "\u001b[1;3;35mCyclic import (ebcpy.data_types -> ebcpy.preprocessing)\u001b[0m", + "message-id": "R0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.__init__", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\utils\\__init__.py", + "symbol": "\u001b[1;3;35mcyclic-import\u001b[0m", + "message": "\u001b[1;3;35mCyclic import (ebcpy -> ebcpy.simulationapi.dymola -> ebcpy.simulationapi.config)\u001b[0m", + "message-id": "R0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.__init__", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\utils\\__init__.py", + "symbol": "\u001b[1;3;35mcyclic-import\u001b[0m", + "message": "\u001b[1;3;35mCyclic import (ebcpy -> ebcpy.simulationapi.fmu -> ebcpy.simulationapi -> ebcpy.simulationapi.config)\u001b[0m", + "message-id": "R0401" + }, + { + "type": "\u001b[1;3;35mrefactor\u001b[0m", + "module": "ebcpy.utils.__init__", + "obj": "", + "line": 1, + "column": 0, + "endLine": null, + "endColumn": null, + "path": "ebcpy\\utils\\__init__.py", + "symbol": "\u001b[1;3;35mcyclic-import\u001b[0m", + "message": "\u001b[1;3;35mCyclic import (ebcpy -> ebcpy.simulationapi.dymola -> ebcpy.simulationapi -> ebcpy.simulationapi.config)\u001b[0m", + "message-id": "R0401" + } +] diff --git a/tests/data/ThermalZone_input.csv b/tests/data/ThermalZone_input.csv new file mode 100644 index 00000000..c69a3a96 --- /dev/null +++ b/tests/data/ThermalZone_input.csv @@ -0,0 +1,4322 @@ +time,bus.disturbance[1],bus.setPoint +0.0,278.15,290.15 +20.0,278.1500158654878,290.15 +40.0,278.1500634619177,290.15 +60.0,278.150142789189,290.15 +80.0,278.1502538471338,290.15 +100.0,278.1503966355173,290.15 +120.0,278.1505711540374,290.15 +140.0,278.15077740232493,290.15 +160.0,278.15101537994354,290.15 +180.0,278.15128508638986,290.15 +200.0,278.15158652109335,290.15 +220.0,278.1519196834164,290.15 +240.0,278.1522845726541,290.15 +260.0,278.1526811880347,290.15 +280.0,278.15310952871914,290.15 +300.0,278.15356959380136,290.15 +320.0,278.15406138230804,290.15 +340.0,278.15458489319894,290.15 +360.0,278.15514012536664,290.15 +380.0,278.1557270776365,290.15 +400.0,278.15634574876697,290.15 +420.0,278.15699613744926,290.15 +440.0,278.1576782423076,290.15 +460.0,278.15839206189906,290.15 +480.0,278.1591375947135,290.15 +500.0,278.159914839174,290.15 +520.0,278.1607237936363,290.15 +540.0,278.16156445638916,290.15 +560.0,278.16243682565414,290.15 +580.0,278.163340899586,290.15 +600.0,278.1642766762721,290.15 +620.0,278.165244153733,290.15 +640.0,278.1662433299221,290.15 +660.0,278.1672742027257,290.15 +680.0,278.16833676996316,290.15 +700.0,278.1694310293866,290.15 +720.0,278.17055697868136,290.15 +740.0,278.17171461546553,290.15 +760.0,278.1729039372903,290.15 +780.0,278.1741249416397,290.15 +800.0,278.17537762593093,290.15 +820.0,278.176661987514,290.15 +840.0,278.177978023672,290.15 +860.0,278.1793257316209,290.15 +880.0,278.18070510850987,290.15 +900.0,278.1821161514209,290.15 +920.0,278.1835588573692,290.15 +940.0,278.1850332233027,290.15 +960.0,278.1865392461026,290.15 +980.0,278.1880769225831,290.15 +1000.0,278.1896462494914,290.15 +1020.0,278.1912472235077,290.15 +1040.0,278.1928798412453,290.15 +1060.0,278.1945440992506,290.15 +1080.0,278.19623999400307,290.15 +1100.0,278.19796752191513,290.15 +1120.0,278.1997266793324,290.15 +1140.0,278.20151746253356,290.15 +1160.0,278.2033398677304,290.15 +1180.0,278.20519389106784,290.15 +1200.0,278.2070795286238,290.15 +1220.0,278.20899677640944,290.15 +1240.0,278.2109456303691,290.15 +1260.0,278.21292608638004,290.15 +1280.0,278.2149381402529,290.15 +1300.0,278.21698178773136,290.15 +1320.0,278.2190570244923,290.15 +1340.0,278.2211638461457,290.15 +1360.0,278.2233022482349,290.15 +1380.0,278.2254722262363,290.15 +1400.0,278.2276737755595,290.15 +1420.0,278.22990689154733,290.15 +1440.0,278.2321715694759,290.15 +1460.0,278.23446780455447,290.15 +1480.0,278.2367955919256,290.15 +1500.0,278.2391549266652,290.15 +1520.0,278.2415458037822,290.15 +1540.0,278.243968218219,290.15 +1560.0,278.24642216485114,290.15 +1580.0,278.2489076384877,290.15 +1600.0,278.25142463387084,290.15 +1620.0,278.25397314567607,290.15 +1640.0,278.25655316851237,290.15 +1660.0,278.25916469692186,290.15 +1680.0,278.26180772538015,290.15 +1700.0,278.2644822482962,290.15 +1720.0,278.26718826001235,290.15 +1740.0,278.26992575480426,290.15 +1760.0,278.27269472688107,290.15 +1780.0,278.2754951703853,290.15 +1800.0,278.2783270793928,290.15 +1820.0,278.2811904479131,290.15 +1840.0,278.284085269889,290.15 +1860.0,278.2870115391967,290.15 +1880.0,278.28996924964616,290.15 +1900.0,278.2929583949804,290.15 +1920.0,278.2959789688764,290.15 +1940.0,278.29903096494434,290.15 +1960.0,278.30211437672807,290.15 +1980.0,278.30522919770493,290.15 +2000.0,278.3083754212858,290.15 +2020.0,278.3115530408152,290.15 +2040.0,278.31476204957124,290.15 +2060.0,278.3180024407655,290.15 +2080.0,278.3212742075433,290.15 +2100.0,278.32457734298356,290.15 +2120.0,278.32791184009886,290.15 +2140.0,278.33127769183534,290.15 +2160.0,278.3346748910729,290.15 +2180.0,278.33810343062515,290.15 +2200.0,278.34156330323935,290.15 +2220.0,278.3450545015965,290.15 +2240.0,278.3485770183113,290.15 +2260.0,278.3521308459322,290.15 +2280.0,278.3557159769415,290.15 +2300.0,278.35933240375516,290.15 +2320.0,278.3629801187231,290.15 +2340.0,278.3666591141288,290.15 +2360.0,278.37036938218984,290.15 +2380.0,278.3741109150575,290.15 +2400.0,278.37788370481684,290.15 +2420.0,278.3816877434871,290.15 +2440.0,278.38552302302105,290.15 +2460.0,278.3893895353056,290.15 +2480.0,278.3932872721616,290.15 +2500.0,278.3972162253437,290.15 +2520.0,278.40117638654067,290.15 +2540.0,278.4051677473751,290.15 +2560.0,278.4091902994038,290.15 +2580.0,278.4132440341173,290.15 +2600.0,278.4173289429405,290.15 +2620.0,278.42144501723214,290.15 +2640.0,278.425592248285,290.15 +2660.0,278.42977062732615,290.15 +2680.0,278.4339801455166,290.15 +2700.0,278.43822079395153,290.15 +2720.0,278.44249256366027,290.15 +2740.0,278.44679544560637,290.15 +2760.0,278.45112943068756,290.15 +2780.0,278.4554945097356,290.15 +2800.0,278.4598906735167,290.15 +2820.0,278.46431791273125,290.15 +2840.0,278.4687762180138,290.15 +2860.0,278.47326557993324,290.15 +2880.0,278.4777859889929,290.15 +2900.0,278.4823374356302,290.15 +2920.0,278.4869199102171,290.15 +2940.0,278.4915334030598,290.15 +2960.0,278.4961779043989,290.15 +2980.0,278.5008534044095,290.15 +3000.0,278.505559893201,290.15 +3020.0,278.5102973608173,290.15 +3040.0,278.5150657972368,290.15 +3060.0,278.51986519237227,290.15 +3080.0,278.5246955360712,290.15 +3100.0,278.52955681811545,290.15 +3120.0,278.53444902822145,290.15 +3140.0,278.5393721560402,290.15 +3160.0,278.54432619115744,290.15 +3180.0,278.5493111230933,290.15 +3200.0,278.55432694130263,290.15 +3220.0,278.55937363517506,290.15 +3240.0,278.5644511940348,290.15 +3260.0,278.56955960714083,290.15 +3280.0,278.57469886368676,290.15 +3300.0,278.57986895280106,290.15 +3320.0,278.5850698635469,290.15 +3340.0,278.59030158492226,290.15 +3360.0,278.59556410586003,290.15 +3380.0,278.60085741522784,290.15 +3400.0,278.60618150182825,290.15 +3420.0,278.61153635439865,290.15 +3440.0,278.61692196161147,290.15 +3460.0,278.62233831207396,290.15 +3480.0,278.6277853943284,290.15 +3500.0,278.63326319685194,290.15 +3520.0,278.638771708057,290.15 +3540.0,278.6443109162908,290.15 +3560.0,278.6498808098358,290.15 +3580.0,278.6554813769093,290.15 +3600.0,278.66111260566396,290.15 +3620.0,278.6667744841875,290.15 +3640.0,278.67246700050276,290.15 +3660.0,278.67819014256776,290.15 +3680.0,278.6839438982759,290.15 +3700.0,278.6897282554556,290.15 +3720.0,278.69554320187063,290.15 +3740.0,278.7013887252201,290.15 +3760.0,278.7072648131384,290.15 +3780.0,278.7131714531953,290.15 +3800.0,278.71910863289577,290.15 +3820.0,278.72507633968047,290.15 +3840.0,278.7310745609252,290.15 +3860.0,278.7371032839414,290.15 +3880.0,278.74316249597587,290.15 +3900.0,278.74925218421106,290.15 +3920.0,278.7553723357647,290.15 +3940.0,278.7615229376904,290.15 +3960.0,278.7677039769771,290.15 +3980.0,278.7739154405494,290.15 +4000.0,278.7801573152676,290.15 +4020.0,278.7864295879278,290.15 +4040.0,278.7927322452614,290.15 +4060.0,278.7990652739359,290.15 +4080.0,278.80542866055447,290.15 +4100.0,278.8118223916559,290.15 +4120.0,278.81824645371495,290.15 +4140.0,278.8247008331422,290.15 +4160.0,278.831185516284,290.15 +4180.0,278.83770048942273,290.15 +4200.0,278.8442457387766,290.15 +4220.0,278.85082125049973,290.15 +4240.0,278.85742701068244,290.15 +4260.0,278.86406300535083,290.15 +4280.0,278.87072922046707,290.15 +4300.0,278.87742564192956,290.15 +4320.0,278.8841522555727,290.15 +4340.0,278.89090904716693,290.15 +4360.0,278.897696002419,290.15 +4380.0,278.9045131069718,290.15 +4400.0,278.9113603464045,290.15 +4420.0,278.91823770623233,290.15 +4440.0,278.925145171907,290.15 +4460.0,278.93208272881645,290.15 +4480.0,278.93905036228506,290.15 +4500.0,278.9460480575734,290.15 +4520.0,278.9530757998786,290.15 +4540.0,278.96013357433424,290.15 +4560.0,278.9672213660102,290.15 +4580.0,278.9743391599131,290.15 +4600.0,278.9814869409859,290.15 +4620.0,278.9886646941082,290.15 +4640.0,278.99587240409625,290.15 +4660.0,279.00311005570273,290.15 +4680.0,279.0103776336173,290.15 +4700.0,279.017675122466,290.15 +4720.0,279.02500250681186,290.15 +4740.0,279.0323597711544,290.15 +4760.0,279.0397468999302,290.15 +4780.0,279.04716387751245,290.15 +4800.0,279.05461068821137,290.15 +4820.0,279.0620873162739,290.15 +4840.0,279.06959374588405,290.15 +4860.0,279.0771299611627,290.15 +4880.0,279.0846959461678,290.15 +4900.0,279.09229168489424,290.15 +4920.0,279.099917161274,290.15 +4940.0,279.1075723591762,290.15 +4960.0,279.115257262407,290.15 +4980.0,279.1229718547098,290.15 +5000.0,279.13071611976517,290.15 +5020.0,279.13849004119083,290.15 +5040.0,279.14629360254196,290.15 +5060.0,279.1541267873108,290.15 +5080.0,279.16198957892715,290.15 +5100.0,279.169881960758,290.15 +5120.0,279.17780391610785,290.15 +5140.0,279.1857554282186,290.15 +5160.0,279.1937364802696,290.15 +5180.0,279.20174705537784,290.15 +5200.0,279.20978713659764,290.15 +5220.0,279.2178567069211,290.15 +5240.0,279.2259557492779,290.15 +5260.0,279.23408424653525,290.15 +5280.0,279.24224218149817,290.15 +5300.0,279.2504295369094,290.15 +5320.0,279.2586462954494,290.15 +5340.0,279.26689243973647,290.15 +5360.0,279.27516795232674,290.15 +5380.0,279.28347281571416,290.15 +5400.0,279.29180701233065,290.15 +5420.0,279.3001705245461,290.15 +5440.0,279.30856333466835,290.15 +5460.0,279.3169854249432,290.15 +5480.0,279.3254367775546,290.15 +5500.0,279.3339173746246,290.15 +5520.0,279.3424271982134,290.15 +5540.0,279.3509662303192,290.15 +5560.0,279.3595344528786,290.15 +5580.0,279.3681318477665,290.15 +5600.0,279.3767583967959,290.15 +5620.0,279.3854140817181,290.15 +5640.0,279.3940988842231,290.15 +5660.0,279.402812785939,290.15 +5680.0,279.4115557684323,290.15 +5700.0,279.42032781320825,290.15 +5720.0,279.42912890171044,290.15 +5740.0,279.4379590153211,290.15 +5760.0,279.44681813536096,290.15 +5780.0,279.4557062430895,290.15 +5800.0,279.46462331970474,290.15 +5820.0,279.47356934634365,290.15 +5840.0,279.4825443040817,290.15 +5860.0,279.4915481739334,290.15 +5880.0,279.5005809368518,290.15 +5900.0,279.5096425737292,290.15 +5920.0,279.51873306539653,290.15 +5940.0,279.52785239262374,290.15 +5960.0,279.53700053611993,290.15 +5980.0,279.54617747653305,290.15 +6000.0,279.5553831944502,290.15 +6020.0,279.5646176703977,290.15 +6040.0,279.57388088484095,290.15 +6060.0,279.58317281818444,290.15 +6080.0,279.59249345077217,290.15 +6100.0,279.6018427628872,290.15 +6120.0,279.61122073475207,290.15 +6140.0,279.6206273465286,290.15 +6160.0,279.630062578318,290.15 +6180.0,279.6395264101612,290.15 +6200.0,279.64901882203816,290.15 +6220.0,279.65853979386884,290.15 +6240.0,279.66808930551247,290.15 +6260.0,279.67766733676814,290.15 +6280.0,279.6872738673744,290.15 +6300.0,279.69690887700966,290.15 +6320.0,279.70657234529205,290.15 +6340.0,279.7162642517794,290.15 +6360.0,279.7259845759696,290.15 +6380.0,279.7357332973002,290.15 +6400.0,279.7455103951488,290.15 +6420.0,279.75531584883294,290.15 +6440.0,279.76514963761014,290.15 +6460.0,279.7750117406781,290.15 +6480.0,279.78490213717447,290.15 +6500.0,279.79482080617714,290.15 +6520.0,279.8047677267042,290.15 +6540.0,279.8147428777139,290.15 +6560.0,279.8247462381049,290.15 +6580.0,279.8347777867161,290.15 +6600.0,279.84483750232664,290.15 +6620.0,279.8549253636564,290.15 +6640.0,279.8650413493654,290.15 +6660.0,279.87518543805436,290.15 +6680.0,279.8853576082645,290.15 +6700.0,279.89555783847754,290.15 +6720.0,279.90578610711606,290.15 +6740.0,279.91604239254315,290.15 +6760.0,279.92632667306265,290.15 +6780.0,279.9366389269192,290.15 +6800.0,279.94697913229834,290.15 +6820.0,279.9573472673263,290.15 +6840.0,279.9677433100705,290.15 +6860.0,279.9781672385391,290.15 +6880.0,279.98861903068126,290.15 +6900.0,279.99909866438736,290.15 +6920.0,280.0096061174888,290.15 +6940.0,280.02014136775813,290.15 +6960.0,280.03070439290906,290.15 +6980.0,280.0412951705966,290.15 +7000.0,280.05191367841707,290.15 +7020.0,280.06255989390803,290.15 +7040.0,280.0732337945485,290.15 +7060.0,280.08393535775906,290.15 +7080.0,280.0946645609015,290.15 +7100.0,280.1054213812793,290.15 +7120.0,280.11620579613754,290.15 +7140.0,280.12701778266285,290.15 +7160.0,280.1378573179836,290.15 +7180.0,280.14872437916983,290.15 +7200.0,280.1596189432334,290.15 +7220.0,280.17054098712794,290.15 +7240.0,280.18149048774904,290.15 +7260.0,280.19246742193405,290.15 +7280.0,280.2034717664624,290.15 +7300.0,280.2145034980556,290.15 +7320.0,280.2255625933771,290.15 +7340.0,280.23664902903244,290.15 +7360.0,280.2477627815695,290.15 +7380.0,280.2589038274782,290.15 +7400.0,280.27007214319076,290.15 +7420.0,280.28126770508186,290.15 +7440.0,280.29249048946826,290.15 +7460.0,280.3037404726095,290.15 +7480.0,280.3150176307072,290.15 +7500.0,280.32632193990577,290.15 +7520.0,280.3376533762921,290.15 +7540.0,280.34901191589563,290.15 +7560.0,280.3603975346886,290.15 +7580.0,280.3718102085858,290.15 +7600.0,280.38324991344496,290.15 +7620.0,280.3947166250665,290.15 +7640.0,280.4062103191938,290.15 +7660.0,280.4177309715131,290.15 +7680.0,280.42927855765356,290.15 +7700.0,280.44085305318754,290.15 +7720.0,280.45245443363035,290.15 +7740.0,280.46408267444036,290.15 +7760.0,280.4757377510193,290.15 +7780.0,280.487419638712,290.15 +7800.0,280.4991283128067,290.15 +7820.0,280.51086374853475,290.15 +7840.0,280.5226259210711,290.15 +7860.0,280.5344148055341,290.15 +7880.0,280.5462303769855,290.15 +7900.0,280.55807261043066,290.15 +7920.0,280.5699414808186,290.15 +7940.0,280.5818369630419,290.15 +7960.0,280.5937590319369,290.15 +7980.0,280.6057076622836,290.15 +8000.0,280.6176828288059,290.15 +8020.0,280.62968450617166,290.15 +8040.0,280.64171266899245,290.15 +8060.0,280.65376729182395,290.15 +8080.0,280.6658483491658,290.15 +8100.0,280.6779558154618,290.15 +8120.0,280.6900896650998,290.15 +8140.0,280.70224987241187,290.15 +8160.0,280.71443641167434,290.15 +8180.0,280.72664925710785,290.15 +8200.0,280.7388883828773,290.15 +8220.0,280.75115376309213,290.15 +8240.0,280.76344537180614,290.15 +8260.0,280.7757631830177,290.15 +8280.0,280.7881071706697,290.15 +8300.0,280.80047730864976,290.15 +8320.0,280.81287357079003,290.15 +8340.0,280.8252959308675,290.15 +8360.0,280.837744362604,290.15 +8380.0,280.850218839666,290.15 +8400.0,280.8627193356651,290.15 +8420.0,280.8752458241578,290.15 +8440.0,280.8877982786455,290.15 +8460.0,280.9003766725748,290.15 +8480.0,280.9129809793374,290.15 +8500.0,280.9256111722702,290.15 +8520.0,280.9382672246552,290.15 +8540.0,280.9509491097199,290.15 +8560.0,280.96365680063707,290.15 +8580.0,280.9763902705248,290.15 +8600.0,280.9891494924468,290.15 +8620.0,281.0019344394122,290.15 +8640.0,281.01474508437576,290.15 +8660.0,281.02758140023786,290.15 +8680.0,281.0404433598446,290.15 +8700.0,281.05333093598773,290.15 +8720.0,281.066244101405,290.15 +8740.0,281.07918282877984,290.15 +8760.0,281.0921470907417,290.15 +8780.0,281.10513685986604,290.15 +8800.0,281.11815210867434,290.15 +8820.0,281.13119280963406,290.15 +8840.0,281.14425893515903,290.15 +8860.0,281.15735045760914,290.15 +8880.0,281.17046734929056,290.15 +8900.0,281.183609582456,290.15 +8920.0,281.19677712930417,290.15 +8940.0,281.2099699619806,290.15 +8960.0,281.22318805257726,290.15 +8980.0,281.2364313731325,290.15 +9000.0,281.24969989563147,290.15 +9020.0,281.2629935920059,290.15 +9040.0,281.2763124341344,290.15 +9060.0,281.28965639384234,290.15 +9080.0,281.3030254429018,290.15 +9100.0,281.31641955303206,290.15 +9120.0,281.3298386958991,290.15 +9140.0,281.34328284311624,290.15 +9160.0,281.3567519662437,290.15 +9180.0,281.3702460367888,290.15 +9200.0,281.38376502620633,290.15 +9220.0,281.3973089058982,290.15 +9240.0,281.4108776472138,290.15 +9260.0,281.42447122144966,290.15 +9280.0,281.4380895998501,290.15 +9300.0,281.45173275360673,290.15 +9320.0,281.4654006538589,290.15 +9340.0,281.4790932716936,290.15 +9360.0,281.4928105781454,290.15 +9380.0,281.5065525441968,290.15 +9400.0,281.520319140778,290.15 +9420.0,281.53411033876716,290.15 +9440.0,281.5479261089905,290.15 +9460.0,281.5617664222221,290.15 +9480.0,281.5756312491842,290.15 +9500.0,281.5895205605471,290.15 +9520.0,281.60343432692946,290.15 +9540.0,281.6173725188981,290.15 +9560.0,281.63133510696815,290.15 +9580.0,281.6453220616032,290.15 +9600.0,281.6593333532153,290.15 +9620.0,281.67336895216494,290.15 +9640.0,281.68742882876126,290.15 +9660.0,281.70151295326207,290.15 +9680.0,281.7156212958737,290.15 +9700.0,281.7297538267515,290.15 +9720.0,281.7439105159995,290.15 +9740.0,281.7580913336707,290.15 +9760.0,281.77229624976695,290.15 +9780.0,281.7865252342392,290.15 +9800.0,281.8007782569876,290.15 +9820.0,281.8150552878612,290.15 +9840.0,281.8293562966584,290.15 +9860.0,281.84368125312693,290.15 +9880.0,281.85803012696374,290.15 +9900.0,281.8724028878153,290.15 +9920.0,281.8867995052775,290.15 +9940.0,281.9012199488957,290.15 +9960.0,281.91566418816495,290.15 +9980.0,281.9301321925299,290.15 +10000.0,281.944623931385,290.15 +10020.0,281.9591393740745,290.15 +10040.0,281.97367848989234,290.15 +10060.0,281.98824124808255,290.15 +10080.0,282.00282761783905,290.15 +10100.0,282.0174375683059,290.15 +10120.0,282.0320710685773,290.15 +10140.0,282.0467280876975,290.15 +10160.0,282.06140859466103,290.15 +10180.0,282.07611255841283,290.15 +10200.0,282.0908399478481,290.15 +10220.0,282.10559073181264,290.15 +10240.0,282.12036487910257,290.15 +10260.0,282.1351623584647,290.15 +10280.0,282.1499831385965,290.15 +10300.0,282.1648271881461,290.15 +10320.0,282.17969447571244,290.15 +10340.0,282.1945849698452,290.15 +10360.0,282.2094986390452,290.15 +10380.0,282.22443545176395,290.15 +10400.0,282.2393953764042,290.15 +10420.0,282.25437838131984,290.15 +10440.0,282.26938443481566,290.15 +10460.0,282.284413505148,290.15 +10480.0,282.29946556052437,290.15 +10500.0,282.31454056910366,290.15 +10520.0,282.3296384989962,290.15 +10540.0,282.3447593182639,290.15 +10560.0,282.3599029949202,290.15 +10580.0,282.37506949693017,290.15 +10600.0,282.39025879221066,290.15 +10620.0,282.40547084863016,290.15 +10640.0,282.4207056340092,290.15 +10660.0,282.4359631161201,290.15 +10680.0,282.4512432626872,290.15 +10700.0,282.466546041387,290.15 +10720.0,282.48187141984795,290.15 +10740.0,282.4972193656507,290.15 +10760.0,282.5125898463283,290.15 +10780.0,282.5279828293661,290.15 +10800.0,282.5433982822018,290.15 +10820.0,282.5588361722255,290.15 +10840.0,282.5742964667799,290.15 +10860.0,282.58977913316045,290.15 +10880.0,282.60528413861505,290.15 +10900.0,282.62081145034443,290.15 +10920.0,282.6363610355022,290.15 +10940.0,282.6519328611948,290.15 +10960.0,282.66752689448145,290.15 +10980.0,282.6831431023748,290.15 +11000.0,282.69878145184015,290.15 +11020.0,282.7144419097963,290.15 +11040.0,282.730124443115,290.15 +11060.0,282.7458290186216,290.15 +11080.0,282.76155560309456,290.15 +11100.0,282.7773041632659,290.15 +11120.0,282.7930746658212,290.15 +11140.0,282.80886707739955,290.15 +11160.0,282.8246813645937,290.15 +11180.0,282.8405174939501,290.15 +11200.0,282.85637543196896,290.15 +11220.0,282.8722551451046,290.15 +11240.0,282.88815659976495,290.15 +11260.0,282.9040797623122,290.15 +11280.0,282.9200245990625,290.15 +11300.0,282.93599107628614,290.15 +11320.0,282.9519791602076,290.15 +11340.0,282.96798881700585,290.15 +11360.0,282.98402001281397,290.15 +11380.0,283.0000727137197,290.15 +11400.0,283.01614688576507,290.15 +11420.0,283.0322424949469,290.15 +11440.0,283.04835950721645,290.15 +11460.0,283.06449788847993,290.15 +11480.0,283.08065760459823,290.15 +11500.0,283.09683862138706,290.15 +11520.0,283.1130409046171,290.15 +11540.0,283.1292644200141,290.15 +11560.0,283.14550913325894,290.15 +11580.0,283.1617750099875,290.15 +11600.0,283.1780620157909,290.15 +11620.0,283.1943701162158,290.15 +11640.0,283.21069927676393,290.15 +11660.0,283.22704946289264,290.15 +11680.0,283.24342064001485,290.15 +11700.0,283.25981277349894,290.15 +11720.0,283.276225828669,290.15 +11740.0,283.29265977080496,290.15 +11760.0,283.30911456514235,290.15 +11780.0,283.3255901768729,290.15 +11800.0,283.3420865711439,290.15 +11820.0,283.35860371305915,290.15 +11840.0,283.37514156767816,290.15 +11860.0,283.3917001000168,290.15 +11880.0,283.4082792750472,290.15 +11900.0,283.4248790576978,290.15 +11920.0,283.4414994128535,290.15 +11940.0,283.4581403053555,290.15 +11960.0,283.4748017000018,290.15 +11980.0,283.49148356154683,290.15 +12000.0,283.5081858547019,290.15 +12020.0,283.5249085441349,290.15 +12040.0,283.54165159447075,290.15 +12060.0,283.5584149702912,290.15 +12080.0,283.57519863613504,290.15 +12100.0,283.59200255649813,290.15 +12120.0,283.6088266958335,290.15 +12140.0,283.6256710185514,290.15 +12160.0,283.64253548901934,290.15 +12180.0,283.65942007156224,290.15 +12200.0,283.6763247304625,290.15 +12220.0,283.6932494299601,290.15 +12240.0,283.7101941342524,290.15 +12260.0,283.72715880749473,290.15 +12280.0,283.74414341380003,290.15 +12300.0,283.7611479172391,290.15 +12320.0,283.77817228184057,290.15 +12340.0,283.7952164715912,290.15 +12360.0,283.8122804504357,290.15 +12380.0,283.82936418227695,290.15 +12400.0,283.84646763097606,290.15 +12420.0,283.86359076035245,290.15 +12440.0,283.8807335341839,290.15 +12460.0,283.8978959162065,290.15 +12480.0,283.9150778701151,290.15 +12500.0,283.932279359563,290.15 +12520.0,283.9495003481621,290.15 +12540.0,283.96674079948326,290.15 +12560.0,283.984000677056,290.15 +12580.0,284.0012799443688,290.15 +12600.0,284.0185785648692,290.15 +12620.0,284.0358965019636,290.15 +12640.0,284.0532337190178,290.15 +12660.0,284.07059017935654,290.15 +12680.0,284.0879658462641,290.15 +12700.0,284.10536068298404,290.15 +12720.0,284.1227746527193,290.15 +12740.0,284.1402077186323,290.15 +12760.0,284.1576598438453,290.15 +12780.0,284.1751309914401,290.15 +12800.0,284.1926211244582,290.15 +12820.0,284.210130205901,290.15 +12840.0,284.22765819872984,290.15 +12860.0,284.24520506586606,290.15 +12880.0,284.262770770191,290.15 +12900.0,284.28035527454625,290.15 +12920.0,284.2979585417335,290.15 +12940.0,284.3155805345149,290.15 +12960.0,284.33322121561287,290.15 +12980.0,284.3508805477104,290.15 +13000.0,284.36855849345085,290.15 +13020.0,284.38625501543845,290.15 +13040.0,284.40397007623795,290.15 +13060.0,284.42170363837494,290.15 +13080.0,284.43945566433587,290.15 +13100.0,284.45722611656817,290.15 +13120.0,284.4750149574802,290.15 +13140.0,284.49282214944145,290.15 +13160.0,284.5106476547827,290.15 +13180.0,284.5284914357959,290.15 +13200.0,284.5463534547343,290.15 +13220.0,284.5642336738126,290.15 +13240.0,284.58213205520707,290.15 +13260.0,284.6000485610554,290.15 +13280.0,284.6179831534572,290.15 +13300.0,284.63593579447354,290.15 +13320.0,284.6539064461275,290.15 +13340.0,284.67189507040393,290.15 +13360.0,284.68990162924973,290.15 +13380.0,284.70792608457396,290.15 +13400.0,284.7259683982476,290.15 +13420.0,284.744028532104,290.15 +13440.0,284.7621064479388,290.15 +13460.0,284.78020210751,290.15 +13480.0,284.79831547253804,290.15 +13500.0,284.81644650470594,290.15 +13520.0,284.8345951656594,290.15 +13540.0,284.8527614170067,290.15 +13560.0,284.87094522031913,290.15 +13580.0,284.8891465371305,290.15 +13600.0,284.9073653289379,290.15 +13620.0,284.9256015572013,290.15 +13640.0,284.94385518334377,290.15 +13660.0,284.96212616875164,290.15 +13680.0,284.9804144747746,290.15 +13700.0,284.99872006272545,290.15 +13720.0,285.0170428938806,290.15 +13740.0,285.0353829294801,290.15 +13760.0,285.0537401307273,290.15 +13780.0,285.0721144587895,290.15 +13800.0,285.0905058747976,290.15 +13820.0,285.10891433984654,290.15 +13840.0,285.127339814995,290.15 +13860.0,285.1457822612658,290.15 +13880.0,285.1642416396458,290.15 +13900.0,285.18271791108606,290.15 +13920.0,285.2012110365019,290.15 +13940.0,285.21972097677303,290.15 +13960.0,285.23824769274347,290.15 +13980.0,285.25679114522194,290.15 +14000.0,285.2753512949816,290.15 +14020.0,285.2939281027603,290.15 +14040.0,285.3125215292607,290.15 +14060.0,285.3311315351504,290.15 +14080.0,285.34975808106174,290.15 +14100.0,285.36840112759216,290.15 +14120.0,285.3870606353042,290.15 +14140.0,285.40573656472554,290.15 +14160.0,285.42442887634917,290.15 +14180.0,285.4431375306334,290.15 +14200.0,285.461862488002,290.15 +14220.0,285.48060370884417,290.15 +14240.0,285.4993611535148,290.15 +14260.0,285.51813478233447,290.15 +14280.0,285.5369245555894,290.15 +14300.0,285.5557304335318,290.15 +14320.0,285.57455237637964,290.15 +14340.0,285.5933903443171,290.15 +14360.0,285.6122442974943,290.15 +14380.0,285.63111419602774,290.15 +14400.0,285.65,290.15 +14420.0,285.66890166946,290.15 +14440.0,285.68781916442333,290.15 +14460.0,285.7067524448718,290.15 +14480.0,285.7257014707542,290.15 +14500.0,285.7446662019855,290.15 +14520.0,285.76364659844796,290.15 +14540.0,285.7826426199904,290.15 +14560.0,285.8016542264287,290.15 +14580.0,285.82068137754567,290.15 +14600.0,285.83972403309133,290.15 +14620.0,285.85878215278296,290.15 +14640.0,285.87785569630495,290.15 +14660.0,285.89694462330914,290.15 +14680.0,285.91604889341494,290.15 +14700.0,285.9351684662092,290.15 +14720.0,285.9543033012463,290.15 +14740.0,285.9734533580485,290.15 +14760.0,285.99261859610584,290.15 +14780.0,286.01179897487617,290.15 +14800.0,286.03099445378535,290.15 +14820.0,286.05020499222735,290.15 +14840.0,286.0694305495641,290.15 +14860.0,286.088671085126,290.15 +14880.0,286.1079265582116,290.15 +14900.0,286.1271969280879,290.15 +14920.0,286.14648215399046,290.15 +14940.0,286.1657821951233,290.15 +14960.0,286.1850970106591,290.15 +14980.0,286.20442655973943,290.15 +15000.0,286.2237708014745,290.15 +15020.0,286.24312969494355,290.15 +15040.0,286.2625031991948,290.15 +15060.0,286.2818912732456,290.15 +15080.0,286.30129387608247,290.15 +15100.0,286.3207109666612,290.15 +15120.0,286.34014250390675,290.15 +15140.0,286.3595884467139,290.15 +15160.0,286.3790487539465,290.15 +15180.0,286.3985233844385,290.15 +15200.0,286.418012296993,290.15 +15220.0,286.4375154503835,290.15 +15240.0,286.45703280335283,290.15 +15260.0,286.47656431461417,290.15 +15280.0,286.4961099428504,290.15 +15300.0,286.51566964671497,290.15 +15320.0,286.5352433848311,290.15 +15340.0,286.5548311157927,290.15 +15360.0,286.5744327981638,290.15 +15380.0,286.5940483904791,290.15 +15400.0,286.6136778512438,290.15 +15420.0,286.6333211389337,290.15 +15440.0,286.65297821199556,290.15 +15460.0,286.6726490288467,290.15 +15480.0,286.69233354787553,290.15 +15500.0,286.7120317274415,290.15 +15520.0,286.7317435258752,290.15 +15540.0,286.7514689014781,290.15 +15560.0,286.77120781252336,290.15 +15580.0,286.7909602172552,290.15 +15600.0,286.8107260738895,290.15 +15620.0,286.8305053406135,290.15 +15640.0,286.85029797558633,290.15 +15660.0,286.87010393693856,290.15 +15680.0,286.8899231827727,290.15 +15700.0,286.90975567116317,290.15 +15720.0,286.92960136015637,290.15 +15740.0,286.94946020777076,290.15 +15760.0,286.96933217199694,290.15 +15780.0,286.9892172107978,290.15 +15800.0,287.0091152821086,290.15 +15820.0,287.0290263438369,290.15 +15840.0,287.04895035386295,290.15 +15860.0,287.06888727003957,290.15 +15880.0,287.0888370501921,290.15 +15900.0,287.10879965211893,290.15 +15920.0,287.1287750335911,290.15 +15940.0,287.1487631523529,290.15 +15960.0,287.1687639661213,290.15 +15980.0,287.1887774325867,290.15 +16000.0,287.20880350941263,290.15 +16020.0,287.22884215423596,290.15 +16040.0,287.248893324667,290.15 +16060.0,287.2689569782895,290.15 +16080.0,287.28903307266086,290.15 +16100.0,287.3091215653121,290.15 +16120.0,287.3292224137482,290.15 +16140.0,287.34933557544764,290.15 +16160.0,287.36946100786326,290.15 +16180.0,287.3895986684216,290.15 +16200.0,287.40974851452364,290.15 +16220.0,287.4299105035443,290.15 +16240.0,287.450084592833,290.15 +16260.0,287.4702707397135,290.15 +16280.0,287.490468901484,290.15 +16300.0,287.51067903541747,290.15 +16320.0,287.5309010987613,290.15 +16340.0,287.5511350487378,290.15 +16360.0,287.57138084254416,290.15 +16380.0,287.59163843735246,290.15 +16400.0,287.6119077903097,290.15 +16420.0,287.63218885853826,290.15 +16440.0,287.6524815991355,290.15 +16460.0,287.6727859691743,290.15 +16480.0,287.6931019257027,290.15 +16500.0,287.71342942574444,290.15 +16520.0,287.73376842629875,290.15 +16540.0,287.7541188843405,290.15 +16560.0,287.7744807568205,290.15 +16580.0,287.79485400066505,290.15 +16600.0,287.8152385727768,290.15 +16620.0,287.83563443003425,290.15 +16640.0,287.85604152929193,290.15 +16660.0,287.8764598273808,290.15 +16680.0,287.896889281108,290.15 +16700.0,287.917329847257,290.15 +16720.0,287.937781482588,290.15 +16740.0,287.9582441438376,290.15 +16760.0,287.97871778771906,290.15 +16780.0,287.99920237092255,290.15 +16800.0,288.01969785011494,290.15 +16820.0,288.04020418194017,290.15 +16840.0,288.0607213230192,290.15 +16860.0,288.08124922995006,290.15 +16880.0,288.1017878593081,290.15 +16900.0,288.12233716764587,290.15 +16920.0,288.1428971114934,290.15 +16940.0,288.1634676473583,290.15 +16960.0,288.1840487317256,290.15 +16980.0,288.20464032105815,290.15 +17000.0,288.2252423717966,290.15 +17020.0,288.24585484035924,290.15 +17040.0,288.2664776831426,290.15 +17060.0,288.28711085652117,290.15 +17080.0,288.30775431684754,290.15 +17100.0,288.32840802045257,290.15 +17120.0,288.3490719236454,290.15 +17140.0,288.3697459827137,290.15 +17160.0,288.3904301539236,290.15 +17180.0,288.4111243935198,290.15 +17200.0,288.43182865772576,290.15 +17220.0,288.45254290274374,290.15 +17240.0,288.4732670847548,290.15 +17260.0,288.4940011599191,290.15 +17280.0,288.51474508437576,290.15 +17300.0,288.53549881424317,290.15 +17320.0,288.5562623056189,290.15 +17340.0,288.5770355145798,290.15 +17360.0,288.59781839718244,290.15 +17380.0,288.6186109094626,290.15 +17400.0,288.6394130074359,290.15 +17420.0,288.66022464709755,290.15 +17440.0,288.68104578442274,290.15 +17460.0,288.7018763753664,290.15 +17480.0,288.72271637586357,290.15 +17500.0,288.7435657418293,290.15 +17520.0,288.7644244291589,290.15 +17540.0,288.78529239372796,290.15 +17560.0,288.8061695913924,290.15 +17580.0,288.82705597798866,290.15 +17600.0,288.8479515093336,290.15 +17620.0,288.868856141225,290.15 +17640.0,288.88976982944115,290.15 +17660.0,288.91069252974125,290.15 +17680.0,288.9316241978655,290.15 +17700.0,288.9525647895351,290.15 +17720.0,288.9735142604523,290.15 +17740.0,288.99447256630066,290.15 +17760.0,289.015439662745,290.15 +17780.0,289.03641550543153,290.15 +17800.0,289.0574000499881,290.15 +17820.0,289.0783932520239,290.15 +17840.0,289.09939506713,290.15 +17860.0,289.12040545087916,290.15 +17880.0,289.1414243588261,290.15 +17900.0,289.1624517465075,290.15 +17920.0,289.1834875694419,290.15 +17940.0,289.20453178313034,290.15 +17960.0,289.2255843430558,290.15 +17980.0,289.2466452046838,290.15 +18000.0,289.26771432346214,290.15 +18020.0,289.28879165482135,290.15 +18040.0,289.3098771541744,290.15 +18060.0,289.33097077691707,290.15 +18080.0,289.35207247842794,290.15 +18100.0,289.37318221406855,290.15 +18120.0,289.3942999391833,290.15 +18140.0,289.4154256091,290.15 +18160.0,289.4365591791292,290.15 +18180.0,289.4577006045651,290.15 +18200.0,289.47884984068514,290.15 +18220.0,289.5000068427502,290.15 +18240.0,289.52117156600497,290.15 +18260.0,289.54234396567745,290.15 +18280.0,289.56352399697965,290.15 +18300.0,289.5847116151074,290.15 +18320.0,289.6059067752403,290.15 +18340.0,289.6271094325424,290.15 +18360.0,289.6483195421614,290.15 +18380.0,289.6695370592296,290.15 +18400.0,289.6907619388634,290.15 +18420.0,289.71199413616375,290.15 +18440.0,289.7332336062162,290.15 +18460.0,289.75448030409063,290.15 +18480.0,289.775734184842,290.15 +18500.0,289.79699520350977,290.15 +18520.0,289.81826331511843,290.15 +18540.0,289.83953847467745,290.15 +18560.0,289.8608206371814,290.15 +18580.0,289.88210975761007,290.15 +18600.0,289.90340579092845,290.15 +18620.0,289.9247086920869,290.15 +18640.0,289.9460184160214,290.15 +18660.0,289.96733491765326,290.15 +18680.0,289.98865815188975,290.15 +18700.0,290.0099880736236,290.15 +18720.0,290.0313246377336,290.15 +18740.0,290.05266779908436,290.15 +18760.0,290.07401751252667,290.15 +18780.0,290.0953737328973,290.15 +18800.0,290.11673641501943,290.15 +18820.0,290.1381055137024,290.15 +18840.0,290.159480983742,290.15 +18860.0,290.18086277992074,290.15 +18880.0,290.2022508570075,290.15 +18900.0,290.2236451697581,290.15 +18920.0,290.24504567291484,290.15 +18940.0,290.2664523212073,290.15 +18960.0,290.2878650693518,290.15 +18980.0,290.30928387205194,290.15 +19000.0,290.3307086839983,290.15 +19020.0,290.35213945986897,290.15 +19040.0,290.37357615432927,290.15 +19060.0,290.39501872203203,290.15 +19080.0,290.41646711761774,290.15 +19100.0,290.4379212957145,290.15 +19120.0,290.4593812109381,290.15 +19140.0,290.48084681789237,290.15 +19160.0,290.5023180711689,290.15 +19180.0,290.5237949253475,290.15 +19200.0,290.545277334996,290.15 +19220.0,290.56676525467066,290.15 +19240.0,290.5882586389159,290.15 +19260.0,290.6097574422646,290.15 +19280.0,290.63126161923833,290.15 +19300.0,290.6527711243471,290.15 +19320.0,290.67428591208983,290.15 +19340.0,290.69580593695406,290.15 +19360.0,290.71733115341647,290.15 +19380.0,290.7388615159426,290.15 +19400.0,290.76039697898716,290.15 +19420.0,290.78193749699403,290.15 +19440.0,290.80348302439654,290.15 +19460.0,290.8250335156172,290.15 +19480.0,290.8465889250682,290.15 +19500.0,290.86814920715125,290.15 +19520.0,290.8897143162577,290.15 +19540.0,290.9112842067689,290.15 +19560.0,290.93285883305583,290.15 +19580.0,290.9544381494796,290.15 +19600.0,290.9760221103913,290.15 +19620.0,290.9976106701323,290.15 +19640.0,291.0192037830342,290.15 +19660.0,291.0408014034189,290.15 +19680.0,291.062403485599,290.15 +19700.0,291.0840099838773,290.15 +19720.0,291.10562085254753,290.15 +19740.0,291.1272360458941,290.15 +19760.0,291.1488555181923,290.15 +19780.0,291.17047922370824,290.15 +19800.0,291.1921071166992,290.15 +19820.0,291.2137391514136,290.15 +19840.0,291.23537528209107,290.15 +19860.0,291.2570154629625,290.15 +19880.0,291.2786596482504,290.15 +19900.0,291.30030779216867,290.15 +19920.0,291.32195984892275,290.15 +19940.0,291.34361577271005,290.15 +19960.0,291.3652755177196,290.15 +19980.0,291.3869390381324,290.15 +20000.0,291.4086062881215,290.15 +20020.0,291.43027722185207,290.15 +20040.0,291.4519517934814,290.15 +20060.0,291.4736299571591,290.15 +20080.0,291.4953116670273,290.15 +20100.0,291.5169968772205,290.15 +20120.0,291.53868554186585,290.15 +20140.0,291.5603776150832,290.15 +20160.0,291.5820730509852,290.15 +20180.0,291.60377180367726,290.15 +20200.0,291.62547382725796,290.15 +20220.0,291.6471790758188,290.15 +20240.0,291.66888750344464,290.15 +20260.0,291.6905990642135,290.15 +20280.0,291.7123137121966,290.15 +20300.0,291.734031401459,290.15 +20320.0,291.7557520860591,290.15 +20340.0,291.7774757200489,290.15 +20360.0,291.7992022574744,290.15 +20380.0,291.82093165237524,290.15 +20400.0,291.8426638587851,290.15 +20420.0,291.8643988307317,290.15 +20440.0,291.88613652223694,290.15 +20460.0,291.9078768873169,290.15 +20480.0,291.9296198799821,290.15 +20500.0,291.9513654542374,290.15 +20520.0,291.9731135640823,290.15 +20540.0,291.99486416351084,290.15 +20560.0,292.01661720651185,290.15 +20580.0,292.03837264706897,290.15 +20600.0,292.06013043916084,290.15 +20620.0,292.08189053676097,290.15 +20640.0,292.1036528938381,290.15 +20660.0,292.12541746435625,290.15 +20680.0,292.14718420227456,290.15 +20700.0,292.1689530615478,290.15 +20720.0,292.19072399612617,290.15 +20740.0,292.21249695995544,290.15 +20760.0,292.23427190697714,290.15 +20780.0,292.25604879112853,290.15 +20800.0,292.27782756634286,290.15 +20820.0,292.29960818654934,290.15 +20840.0,292.32139060567323,290.15 +20860.0,292.34317477763614,290.15 +20880.0,292.36496065635583,290.15 +20900.0,292.38674819574646,290.15 +20920.0,292.4085373497187,290.15 +20940.0,292.4303280721798,290.15 +20960.0,292.4521203170338,290.15 +20980.0,292.4739140381813,290.15 +21000.0,292.4957091895199,290.15 +21020.0,292.51750572494433,290.15 +21040.0,292.53930359834607,290.15 +21060.0,292.561102763614,290.15 +21080.0,292.5829031746341,290.15 +21100.0,292.60470478529,290.15 +21120.0,292.6265075494625,290.15 +21140.0,292.64831142103003,290.15 +21160.0,292.67011635386876,290.15 +21180.0,292.6919223018526,290.15 +21200.0,292.7137292188533,290.15 +21220.0,292.7355370587405,290.15 +21240.0,292.75734577538185,290.15 +21260.0,292.7791553226434,290.15 +21280.0,292.80096565438913,290.15 +21300.0,292.82277672448157,290.15 +21320.0,292.84458848678156,290.15 +21340.0,292.8664008951486,290.15 +21360.0,292.8882139034407,290.15 +21380.0,292.9100274655147,290.15 +21400.0,292.9318415352262,290.15 +21420.0,292.9536560664298,290.15 +21440.0,292.975471012979,290.15 +21460.0,292.99728632872655,290.15 +21480.0,293.01910196752436,290.15 +21500.0,293.04091788322364,290.15 +21520.0,293.0627340296751,290.15 +21540.0,293.08455036072877,290.15 +21560.0,293.10636683023455,290.15 +21580.0,293.1281833920419,290.15 +21600.0,293.15,290.15 +21620.0,293.1718166079581,290.15 +21640.0,293.1936331697654,290.15 +21660.0,293.2154496392712,290.15 +21680.0,293.23726597032487,290.15 +21700.0,293.2590821167763,290.15 +21720.0,293.2808980324756,290.15 +21740.0,293.3027136712734,290.15 +21760.0,293.3245289870209,290.15 +21780.0,293.34634393357015,290.15 +21800.0,293.3681584647737,290.15 +21820.0,293.38997253448525,290.15 +21840.0,293.41178609655924,290.15 +21860.0,293.43359910485134,290.15 +21880.0,293.4554115132184,290.15 +21900.0,293.4772232755184,290.15 +21920.0,293.4990343456108,290.15 +21940.0,293.52084467735654,290.15 +21960.0,293.54265422461805,290.15 +21980.0,293.5644629412595,290.15 +22000.0,293.58627078114665,290.15 +22020.0,293.6080776981473,290.15 +22040.0,293.6298836461312,290.15 +22060.0,293.6516885789699,290.15 +22080.0,293.6734924505375,290.15 +22100.0,293.69529521471,290.15 +22120.0,293.71709682536584,290.15 +22140.0,293.738897236386,290.15 +22160.0,293.7606964016539,290.15 +22180.0,293.7824942750556,290.15 +22200.0,293.80429081048004,290.15 +22220.0,293.82608596181865,290.15 +22240.0,293.84787968296615,290.15 +22260.0,293.86967192782015,290.15 +22280.0,293.89146265028126,290.15 +22300.0,293.9132518042535,290.15 +22320.0,293.9350393436441,290.15 +22340.0,293.9568252223638,290.15 +22360.0,293.9786093943267,290.15 +22380.0,294.0003918134506,290.15 +22400.0,294.0221724336571,290.15 +22420.0,294.0439512088714,290.15 +22440.0,294.0657280930228,290.15 +22460.0,294.0875030400445,290.15 +22480.0,294.1092760038738,290.15 +22500.0,294.13104693845213,290.15 +22520.0,294.1528157977254,290.15 +22540.0,294.1745825356437,290.15 +22560.0,294.19634710616185,290.15 +22580.0,294.218109463239,290.15 +22600.0,294.2398695608391,290.15 +22620.0,294.261627352931,290.15 +22640.0,294.2833827934881,290.15 +22660.0,294.3051358364891,290.15 +22680.0,294.32688643591763,290.15 +22700.0,294.34863454576254,290.15 +22720.0,294.37038012001784,290.15 +22740.0,294.39212311268307,290.15 +22760.0,294.413863477763,290.15 +22780.0,294.43560116926824,290.15 +22800.0,294.45733614121485,290.15 +22820.0,294.4790683476247,290.15 +22840.0,294.50079774252555,290.15 +22860.0,294.522524279951,290.15 +22880.0,294.54424791394086,290.15 +22900.0,294.5659685985409,290.15 +22920.0,294.58768628780336,290.15 +22940.0,294.6094009357865,290.15 +22960.0,294.6311124965553,290.15 +22980.0,294.6528209241811,290.15 +23000.0,294.674526172742,290.15 +23020.0,294.6962281963227,290.15 +23040.0,294.7179269490148,290.15 +23060.0,294.73962238491674,290.15 +23080.0,294.7613144581341,290.15 +23100.0,294.78300312277946,290.15 +23120.0,294.80468833297266,290.15 +23140.0,294.82637004284084,290.15 +23160.0,294.84804820651857,290.15 +23180.0,294.8697227781479,290.15 +23200.0,294.89139371187844,290.15 +23220.0,294.91306096186753,290.15 +23240.0,294.93472448228033,290.15 +23260.0,294.9563842272899,290.15 +23280.0,294.9780401510772,290.15 +23300.0,294.9996922078313,290.15 +23320.0,295.02134035174953,290.15 +23340.0,295.0429845370374,290.15 +23360.0,295.0646247179089,290.15 +23380.0,295.08626084858633,290.15 +23400.0,295.10789288330074,290.15 +23420.0,295.1295207762917,290.15 +23440.0,295.15114448180765,290.15 +23460.0,295.17276395410585,290.15 +23480.0,295.19437914745237,290.15 +23500.0,295.21599001612265,290.15 +23520.0,295.23759651440093,290.15 +23540.0,295.25919859658103,290.15 +23560.0,295.28079621696577,290.15 +23580.0,295.30238932986765,290.15 +23600.0,295.32397788960867,290.15 +23620.0,295.34556185052037,290.15 +23640.0,295.3671411669441,290.15 +23660.0,295.38871579323103,290.15 +23680.0,295.41028568374225,290.15 +23700.0,295.4318507928487,290.15 +23720.0,295.45341107493175,290.15 +23740.0,295.4749664843828,290.15 +23760.0,295.49651697560347,290.15 +23780.0,295.5180625030059,290.15 +23800.0,295.5396030210128,290.15 +23820.0,295.5611384840574,290.15 +23840.0,295.5826688465835,290.15 +23860.0,295.6041940630459,290.15 +23880.0,295.6257140879101,290.15 +23900.0,295.64722887565284,290.15 +23920.0,295.6687383807616,290.15 +23940.0,295.69024255773536,290.15 +23960.0,295.7117413610841,290.15 +23980.0,295.7332347453293,290.15 +24000.0,295.75472266500395,290.15 +24020.0,295.77620507465247,290.15 +24040.0,295.7976819288311,290.15 +24060.0,295.8191531821076,290.15 +24080.0,295.84061878906186,290.15 +24100.0,295.86207870428547,290.15 +24120.0,295.8835328823822,290.15 +24140.0,295.9049812779679,290.15 +24160.0,295.9264238456707,290.15 +24180.0,295.947860540131,290.15 +24200.0,295.96929131600166,290.15 +24220.0,295.990716127948,290.15 +24240.0,296.01213493064813,290.15 +24260.0,296.0335476787927,290.15 +24280.0,296.0549543270851,290.15 +24300.0,296.0763548302419,290.15 +24320.0,296.0977491429924,290.15 +24340.0,296.1191372200792,290.15 +24360.0,296.14051901625794,290.15 +24380.0,296.16189448629757,290.15 +24400.0,296.1832635849805,290.15 +24420.0,296.20462626710264,290.15 +24440.0,296.2259824874733,290.15 +24460.0,296.2473322009156,290.15 +24480.0,296.2686753622664,290.15 +24500.0,296.29001192637634,290.15 +24520.0,296.3113418481102,290.15 +24540.0,296.3326650823467,290.15 +24560.0,296.35398158397857,290.15 +24580.0,296.3752913079131,290.15 +24600.0,296.3965942090715,290.15 +24620.0,296.4178902423899,290.15 +24640.0,296.43917936281855,290.15 +24660.0,296.4604615253225,290.15 +24680.0,296.4817366848815,290.15 +24700.0,296.5030047964902,290.15 +24720.0,296.52426581515795,290.15 +24740.0,296.54551969590926,290.15 +24760.0,296.5667663937838,290.15 +24780.0,296.5880058638362,290.15 +24800.0,296.6092380611366,290.15 +24820.0,296.63046294077037,290.15 +24840.0,296.65168045783855,290.15 +24860.0,296.67289056745756,290.15 +24880.0,296.6940932247596,290.15 +24900.0,296.7152883848926,290.15 +24920.0,296.7364760030203,290.15 +24940.0,296.7576560343225,290.15 +24960.0,296.778828433995,290.15 +24980.0,296.79999315724973,290.15 +25000.0,296.8211501593148,290.15 +25020.0,296.84229939543485,290.15 +25040.0,296.8634408208708,290.15 +25060.0,296.88457439089996,290.15 +25080.0,296.9057000608166,290.15 +25100.0,296.9268177859314,290.15 +25120.0,296.947927521572,290.15 +25140.0,296.9690292230829,290.15 +25160.0,296.99012284582557,290.15 +25180.0,297.0112083451786,290.15 +25200.0,297.0322856765378,290.15 +25220.0,297.0533547953162,290.15 +25240.0,297.07441565694415,290.15 +25260.0,297.0954682168696,290.15 +25280.0,297.11651243055803,290.15 +25300.0,297.13754825349247,290.15 +25320.0,297.15857564117385,290.15 +25340.0,297.1795945491208,290.15 +25360.0,297.20060493286996,290.15 +25380.0,297.22160674797607,290.15 +25400.0,297.2425999500119,290.15 +25420.0,297.2635844945684,290.15 +25440.0,297.28456033725496,290.15 +25460.0,297.3055274336993,290.15 +25480.0,297.32648573954765,290.15 +25500.0,297.3474352104649,290.15 +25520.0,297.36837580213444,290.15 +25540.0,297.3893074702587,290.15 +25560.0,297.4102301705588,290.15 +25580.0,297.43114385877493,290.15 +25600.0,297.4520484906663,290.15 +25620.0,297.4729440220113,290.15 +25640.0,297.49383040860755,290.15 +25660.0,297.514707606272,290.15 +25680.0,297.53557557084105,290.15 +25700.0,297.55643425817067,290.15 +25720.0,297.5772836241364,290.15 +25740.0,297.59812362463356,290.15 +25760.0,297.6189542155772,290.15 +25780.0,297.6397753529024,290.15 +25800.0,297.66058699256405,290.15 +25820.0,297.6813890905374,290.15 +25840.0,297.7021816028175,290.15 +25860.0,297.72296448542016,290.15 +25880.0,297.7437376943811,290.15 +25900.0,297.7645011857568,290.15 +25920.0,297.7852549156242,290.15 +25940.0,297.80599884008086,290.15 +25960.0,297.82673291524515,290.15 +25980.0,297.8474570972562,290.15 +26000.0,297.8681713422742,290.15 +26020.0,297.88887560648016,290.15 +26040.0,297.90956984607635,290.15 +26060.0,297.93025401728625,290.15 +26080.0,297.95092807635456,290.15 +26100.0,297.9715919795474,290.15 +26120.0,297.9922456831524,290.15 +26140.0,298.0128891434788,290.15 +26160.0,298.03352231685733,290.15 +26180.0,298.0541451596407,290.15 +26200.0,298.0747576282034,290.15 +26220.0,298.0953596789418,290.15 +26240.0,298.11595126827433,290.15 +26260.0,298.13653235264167,290.15 +26280.0,298.15710288850653,290.15 +26300.0,298.1776628323541,290.15 +26320.0,298.19821214069185,290.15 +26340.0,298.2187507700499,290.15 +26360.0,298.23927867698075,290.15 +26380.0,298.2597958180598,290.15 +26400.0,298.280302149885,290.15 +26420.0,298.3007976290774,290.15 +26440.0,298.3212822122809,290.15 +26460.0,298.34175585616237,290.15 +26480.0,298.362218517412,290.15 +26500.0,298.38267015274295,290.15 +26520.0,298.403110718892,290.15 +26540.0,298.42354017261914,290.15 +26560.0,298.443958470708,290.15 +26580.0,298.4643655699657,290.15 +26600.0,298.48476142722313,290.15 +26620.0,298.5051459993349,290.15 +26640.0,298.5255192431795,290.15 +26660.0,298.5458811156594,290.15 +26680.0,298.5662315737012,290.15 +26700.0,298.5865705742555,290.15 +26720.0,298.60689807429725,290.15 +26740.0,298.62721403082566,290.15 +26760.0,298.64751840086444,290.15 +26780.0,298.6678111414617,290.15 +26800.0,298.68809220969024,290.15 +26820.0,298.7083615626475,290.15 +26840.0,298.7286191574558,290.15 +26860.0,298.74886495126214,290.15 +26880.0,298.76909890123864,290.15 +26900.0,298.7893209645825,290.15 +26920.0,298.80953109851595,290.15 +26940.0,298.82972926028646,290.15 +26960.0,298.849915407167,290.15 +26980.0,298.87008949645565,290.15 +27000.0,298.8902514854763,290.15 +27020.0,298.9104013315783,290.15 +27040.0,298.9305389921367,290.15 +27060.0,298.95066442455226,290.15 +27080.0,298.97077758625176,290.15 +27100.0,298.99087843468783,290.15 +27120.0,299.0109669273391,290.15 +27140.0,299.03104302171045,290.15 +27160.0,299.05110667533296,290.15 +27180.0,299.071157845764,290.15 +27200.0,299.0911964905873,290.15 +27220.0,299.1112225674133,290.15 +27240.0,299.1312360338787,290.15 +27260.0,299.15123684764706,290.15 +27280.0,299.17122496640883,290.15 +27300.0,299.191200347881,290.15 +27320.0,299.21116294980783,290.15 +27340.0,299.2311127299604,290.15 +27360.0,299.251049646137,290.15 +27380.0,299.27097365616305,290.15 +27400.0,299.29088471789134,290.15 +27420.0,299.3107827892021,290.15 +27440.0,299.330667828003,290.15 +27460.0,299.3505397922292,290.15 +27480.0,299.3703986398436,290.15 +27500.0,299.3902443288368,290.15 +27520.0,299.41007681722726,290.15 +27540.0,299.4298960630614,290.15 +27560.0,299.4497020244136,290.15 +27580.0,299.46949465938644,290.15 +27600.0,299.48927392611046,290.15 +27620.0,299.50903978274476,290.15 +27640.0,299.5287921874766,290.15 +27660.0,299.54853109852183,290.15 +27680.0,299.5682564741248,290.15 +27700.0,299.5879682725584,290.15 +27720.0,299.6076664521244,290.15 +27740.0,299.62735097115325,290.15 +27760.0,299.6470217880044,290.15 +27780.0,299.66667886106626,290.15 +27800.0,299.6863221487562,290.15 +27820.0,299.70595160952087,290.15 +27840.0,299.72556720183616,290.15 +27860.0,299.74516888420726,290.15 +27880.0,299.76475661516884,290.15 +27900.0,299.784330353285,290.15 +27920.0,299.8038900571495,290.15 +27940.0,299.8234356853858,290.15 +27960.0,299.8429671966471,290.15 +27980.0,299.86248454961645,290.15 +28000.0,299.8819877030069,290.15 +28020.0,299.9014766155615,290.15 +28040.0,299.92095124605345,290.15 +28060.0,299.9404115532861,290.15 +28080.0,299.95985749609315,290.15 +28100.0,299.9792890333388,290.15 +28120.0,299.9987061239175,290.15 +28140.0,300.01810872675435,290.15 +28160.0,300.0374968008052,290.15 +28180.0,300.0568703050564,290.15 +28200.0,300.0762291985255,290.15 +28220.0,300.0955734402605,290.15 +28240.0,300.1149029893408,290.15 +28260.0,300.13421780487664,290.15 +28280.0,300.1535178460095,290.15 +28300.0,300.172803071912,290.15 +28320.0,300.19207344178835,290.15 +28340.0,300.21132891487395,290.15 +28360.0,300.23056945043584,290.15 +28380.0,300.2497950077726,290.15 +28400.0,300.2690055462146,290.15 +28420.0,300.2882010251238,290.15 +28440.0,300.3073814038941,290.15 +28460.0,300.32654664195144,290.15 +28480.0,300.34569669875367,290.15 +28500.0,300.3648315337908,290.15 +28520.0,300.383951106585,290.15 +28540.0,300.4030553766908,290.15 +28560.0,300.422144303695,290.15 +28580.0,300.44121784721705,290.15 +28600.0,300.4602759669086,290.15 +28620.0,300.4793186224543,290.15 +28640.0,300.49834577357126,290.15 +28660.0,300.51735738000957,290.15 +28680.0,300.536353401552,290.15 +28700.0,300.55533379801443,290.15 +28720.0,300.57429852924577,290.15 +28740.0,300.5932475551281,290.15 +28760.0,300.6121808355766,290.15 +28780.0,300.63109833053994,290.15 +28800.0,300.65,290.15 +28820.0,300.6688858039722,293.15 +28840.0,300.6877557025056,293.15 +28860.0,300.7066096556829,293.15 +28880.0,300.7254476236203,293.15 +28900.0,300.7442695664682,293.15 +28920.0,300.76307544441056,293.15 +28940.0,300.7818652176655,293.15 +28960.0,300.8006388464851,293.15 +28980.0,300.8193962911558,293.15 +29000.0,300.83813751199796,293.15 +29020.0,300.85686246936655,293.15 +29040.0,300.8755711236508,293.15 +29060.0,300.8942634352744,293.15 +29080.0,300.9129393646958,293.15 +29100.0,300.9315988724078,293.15 +29120.0,300.9502419189382,293.15 +29140.0,300.96886846484955,293.15 +29160.0,300.98747847073923,293.15 +29180.0,301.0060718972397,293.15 +29200.0,301.02464870501836,293.15 +29220.0,301.043208854778,293.15 +29240.0,301.0617523072565,293.15 +29260.0,301.0802790232269,293.15 +29280.0,301.09878896349807,293.15 +29300.0,301.1172820889139,293.15 +29320.0,301.13575836035415,293.15 +29340.0,301.15421773873413,293.15 +29360.0,301.17266018500493,293.15 +29380.0,301.1910856601534,293.15 +29400.0,301.20949412520235,293.15 +29420.0,301.22788554121047,293.15 +29440.0,301.24625986927265,293.15 +29460.0,301.2646170705199,293.15 +29480.0,301.28295710611934,293.15 +29500.0,301.3012799372745,293.15 +29520.0,301.31958552522536,293.15 +29540.0,301.3378738312483,293.15 +29560.0,301.3561448166562,293.15 +29580.0,301.3743984427987,293.15 +29600.0,301.39263467106207,293.15 +29620.0,301.41085346286945,293.15 +29640.0,301.4290547796808,293.15 +29660.0,301.44723858299324,293.15 +29680.0,301.4654048343406,293.15 +29700.0,301.483553495294,293.15 +29720.0,301.5016845274619,293.15 +29740.0,301.51979789249,293.15 +29760.0,301.5378935520612,293.15 +29780.0,301.555971467896,293.15 +29800.0,301.5740316017524,293.15 +29820.0,301.592073915426,293.15 +29840.0,301.61009837075017,293.15 +29860.0,301.628104929596,293.15 +29880.0,301.64609355387245,293.15 +29900.0,301.6640642055264,293.15 +29920.0,301.68201684654275,293.15 +29940.0,301.69995143894454,293.15 +29960.0,301.7178679447929,293.15 +29980.0,301.73576632618733,293.15 +30000.0,301.75364654526567,293.15 +30020.0,301.77150856420405,293.15 +30040.0,301.78935234521725,293.15 +30060.0,301.8071778505585,293.15 +30080.0,301.82498504251976,293.15 +30100.0,301.8427738834318,293.15 +30120.0,301.8605443356641,293.15 +30140.0,301.878296361625,293.15 +30160.0,301.896029923762,293.15 +30180.0,301.9137449845615,293.15 +30200.0,301.9314415065491,293.15 +30220.0,301.94911945228955,293.15 +30240.0,301.9667787843871,293.15 +30260.0,301.9844194654851,293.15 +30280.0,302.00204145826643,293.15 +30300.0,302.0196447254537,293.15 +30320.0,302.03722922980893,293.15 +30340.0,302.0547949341339,293.15 +30360.0,302.0723418012701,293.15 +30380.0,302.08986979409895,293.15 +30400.0,302.10737887554177,293.15 +30420.0,302.12486900855987,293.15 +30440.0,302.14234015615466,293.15 +30460.0,302.15979228136763,293.15 +30480.0,302.1772253472807,293.15 +30500.0,302.1946393170159,293.15 +30520.0,302.21203415373583,293.15 +30540.0,302.2294098206434,293.15 +30560.0,302.2467662809822,293.15 +30580.0,302.2641034980363,293.15 +30600.0,302.28142143513077,293.15 +30620.0,302.2987200556312,293.15 +30640.0,302.315999322944,293.15 +30660.0,302.3332592005167,293.15 +30680.0,302.3504996518379,293.15 +30700.0,302.36772064043697,293.15 +30720.0,302.38492212988484,293.15 +30740.0,302.40210408379346,293.15 +30760.0,302.41926646581607,293.15 +30780.0,302.4364092396475,293.15 +30800.0,302.4535323690239,293.15 +30820.0,302.470635817723,293.15 +30840.0,302.48771954956425,293.15 +30860.0,302.5047835284088,293.15 +30880.0,302.5218277181594,293.15 +30900.0,302.53885208276085,293.15 +30920.0,302.5558565861999,293.15 +30940.0,302.5728411925052,293.15 +30960.0,302.5898058657475,293.15 +30980.0,302.6067505700399,293.15 +31000.0,302.62367526953744,293.15 +31020.0,302.6405799284377,293.15 +31040.0,302.6574645109806,293.15 +31060.0,302.6743289814486,293.15 +31080.0,302.69117330416645,293.15 +31100.0,302.7079974435018,293.15 +31120.0,302.7248013638649,293.15 +31140.0,302.74158502970874,293.15 +31160.0,302.7583484055292,293.15 +31180.0,302.77509145586504,293.15 +31200.0,302.7918141452981,293.15 +31220.0,302.8085164384531,293.15 +31240.0,302.82519829999814,293.15 +31260.0,302.8418596946444,293.15 +31280.0,302.85850058714647,293.15 +31300.0,302.87512094230215,293.15 +31320.0,302.89172072495273,293.15 +31340.0,302.90829989998315,293.15 +31360.0,302.9248584323218,293.15 +31380.0,302.9413962869408,293.15 +31400.0,302.95791342885605,293.15 +31420.0,302.9744098231271,293.15 +31440.0,302.9908854348576,293.15 +31460.0,303.007340229195,293.15 +31480.0,303.02377417133096,293.15 +31500.0,303.040187226501,293.15 +31520.0,303.0565793599851,293.15 +31540.0,303.0729505371073,293.15 +31560.0,303.089300723236,293.15 +31580.0,303.10562988378416,293.15 +31600.0,303.12193798420907,293.15 +31620.0,303.1382249900125,293.15 +31640.0,303.154490866741,293.15 +31660.0,303.17073557998583,293.15 +31680.0,303.18695909538286,293.15 +31700.0,303.2031613786129,293.15 +31720.0,303.2193423954017,293.15 +31740.0,303.23550211152,293.15 +31760.0,303.2516404927835,293.15 +31780.0,303.26775750505305,293.15 +31800.0,303.2838531142349,293.15 +31820.0,303.29992728628025,293.15 +31840.0,303.315979987186,293.15 +31860.0,303.3320111829941,293.15 +31880.0,303.3480208397923,293.15 +31900.0,303.3640089237138,293.15 +31920.0,303.37997540093744,293.15 +31940.0,303.39592023768773,293.15 +31960.0,303.411843400235,293.15 +31980.0,303.42774485489537,293.15 +32000.0,303.443624568031,293.15 +32020.0,303.4594825060499,293.15 +32040.0,303.47531863540627,293.15 +32060.0,303.4911329226004,293.15 +32080.0,303.50692533417873,293.15 +32100.0,303.522695836734,293.15 +32120.0,303.5384443969054,293.15 +32140.0,303.5541709813784,293.15 +32160.0,303.56987555688494,293.15 +32180.0,303.5855580902037,293.15 +32200.0,303.6012185481598,293.15 +32220.0,303.61685689762515,293.15 +32240.0,303.6324731055185,293.15 +32260.0,303.6480671388052,293.15 +32280.0,303.66363896449775,293.15 +32300.0,303.6791885496555,293.15 +32320.0,303.6947158613849,293.15 +32340.0,303.7102208668395,293.15 +32360.0,303.72570353322004,293.15 +32380.0,303.74116382777447,293.15 +32400.0,303.75660171779816,293.15 +32420.0,303.77201717063383,293.15 +32440.0,303.78741015367166,293.15 +32460.0,303.80278063434923,293.15 +32480.0,303.818128580152,293.15 +32500.0,303.83345395861295,293.15 +32520.0,303.8487567373127,293.15 +32540.0,303.86403688387986,293.15 +32560.0,303.87929436599075,293.15 +32580.0,303.8945291513698,293.15 +32600.0,303.9097412077893,293.15 +32620.0,303.9249305030698,293.15 +32640.0,303.94009700507974,293.15 +32660.0,303.95524068173603,293.15 +32680.0,303.97036150100377,293.15 +32700.0,303.9854594308963,293.15 +32720.0,304.0005344394756,293.15 +32740.0,304.01558649485196,293.15 +32760.0,304.0306155651843,293.15 +32780.0,304.0456216186801,293.15 +32800.0,304.06060462359574,293.15 +32820.0,304.075564548236,293.15 +32840.0,304.09050136095476,293.15 +32860.0,304.10541503015475,293.15 +32880.0,304.1203055242875,293.15 +32900.0,304.13517281185386,293.15 +32920.0,304.15001686140346,293.15 +32940.0,304.16483764153526,293.15 +32960.0,304.1796351208974,293.15 +32980.0,304.1944092681873,293.15 +33000.0,304.20916005215184,293.15 +33020.0,304.2238874415871,293.15 +33040.0,304.2385914053389,293.15 +33060.0,304.25327191230247,293.15 +33080.0,304.2679289314226,293.15 +33100.0,304.28256243169403,293.15 +33120.0,304.2971723821609,293.15 +33140.0,304.3117587519174,293.15 +33160.0,304.3263215101076,293.15 +33180.0,304.3408606259255,293.15 +33200.0,304.35537606861493,293.15 +33220.0,304.36986780747003,293.15 +33240.0,304.384335811835,293.15 +33260.0,304.39878005110427,293.15 +33280.0,304.41320049472245,293.15 +33300.0,304.4275971121846,293.15 +33320.0,304.4419698730362,293.15 +33340.0,304.456318746873,293.15 +33360.0,304.4706437033416,293.15 +33380.0,304.48494471213877,293.15 +33400.0,304.49922174301236,293.15 +33420.0,304.51347476576075,293.15 +33440.0,304.527703750233,293.15 +33460.0,304.5419086663293,293.15 +33480.0,304.55608948400044,293.15 +33500.0,304.57024617324845,293.15 +33520.0,304.58437870412627,293.15 +33540.0,304.5984870467379,293.15 +33560.0,304.6125711712387,293.15 +33580.0,304.626631047835,293.15 +33600.0,304.64066664678467,293.15 +33620.0,304.65467793839673,293.15 +33640.0,304.6686648930318,293.15 +33660.0,304.68262748110186,293.15 +33680.0,304.6965656730705,293.15 +33700.0,304.71047943945285,293.15 +33720.0,304.72436875081576,293.15 +33740.0,304.73823357777786,293.15 +33760.0,304.75207389100945,293.15 +33780.0,304.76588966123273,293.15 +33800.0,304.77968085922197,293.15 +33820.0,304.7934474558032,293.15 +33840.0,304.80718942185456,293.15 +33860.0,304.82090672830634,293.15 +33880.0,304.83459934614103,293.15 +33900.0,304.8482672463932,293.15 +33920.0,304.86191040014984,293.15 +33940.0,304.8755287785503,293.15 +33960.0,304.88912235278616,293.15 +33980.0,304.9026910941017,293.15 +34000.0,304.9162349737936,293.15 +34020.0,304.92975396321117,293.15 +34040.0,304.9432480337563,293.15 +34060.0,304.9567171568837,293.15 +34080.0,304.9701613041008,293.15 +34100.0,304.9835804469679,293.15 +34120.0,304.9969745570981,293.15 +34140.0,305.0103436061576,293.15 +34160.0,305.02368756586554,293.15 +34180.0,305.03700640799406,293.15 +34200.0,305.0503001043685,293.15 +34220.0,305.06356862686744,293.15 +34240.0,305.0768119474227,293.15 +34260.0,305.09003003801934,293.15 +34280.0,305.1032228706958,293.15 +34300.0,305.116390417544,293.15 +34320.0,305.1295326507094,293.15 +34340.0,305.1426495423908,293.15 +34360.0,305.1557410648409,293.15 +34380.0,305.1688071903659,293.15 +34400.0,305.1818478913256,293.15 +34420.0,305.1948631401339,293.15 +34440.0,305.20785290925824,293.15 +34460.0,305.2208171712201,293.15 +34480.0,305.23375589859495,293.15 +34500.0,305.2466690640122,293.15 +34520.0,305.2595566401554,293.15 +34540.0,305.2724185997621,293.15 +34560.0,305.2852549156242,293.15 +34580.0,305.29806556058776,293.15 +34600.0,305.31085050755314,293.15 +34620.0,305.32360972947515,293.15 +34640.0,305.3363431993629,293.15 +34660.0,305.34905089028007,293.15 +34680.0,305.36173277534476,293.15 +34700.0,305.3743888277298,293.15 +34720.0,305.38701902066254,293.15 +34740.0,305.39962332742516,293.15 +34760.0,305.41220172135445,293.15 +34780.0,305.42475417584217,293.15 +34800.0,305.4372806643349,293.15 +34820.0,305.44978116033394,293.15 +34840.0,305.46225563739597,293.15 +34860.0,305.47470406913243,293.15 +34880.0,305.4871264292099,293.15 +34900.0,305.4995226913502,293.15 +34920.0,305.51189282933024,293.15 +34940.0,305.52423681698224,293.15 +34960.0,305.5365546281938,293.15 +34980.0,305.5488462369078,293.15 +35000.0,305.56111161712266,293.15 +35020.0,305.5733507428921,293.15 +35040.0,305.5855635883256,293.15 +35060.0,305.5977501275881,293.15 +35080.0,305.6099103349002,293.15 +35100.0,305.62204418453814,293.15 +35120.0,305.63415165083416,293.15 +35140.0,305.646232708176,293.15 +35160.0,305.6582873310075,293.15 +35180.0,305.6703154938283,293.15 +35200.0,305.68231717119403,293.15 +35220.0,305.6942923377164,293.15 +35240.0,305.70624096806307,293.15 +35260.0,305.71816303695806,293.15 +35280.0,305.73005851918134,293.15 +35300.0,305.7419273895693,293.15 +35320.0,305.7537696230145,293.15 +35340.0,305.76558519446587,293.15 +35360.0,305.77737407892886,293.15 +35380.0,305.7891362514652,293.15 +35400.0,305.80087168719325,293.15 +35420.0,305.8125803612879,293.15 +35440.0,305.82426224898063,293.15 +35460.0,305.8359173255596,293.15 +35480.0,305.8475455663696,293.15 +35500.0,305.8591469468124,293.15 +35520.0,305.8707214423464,293.15 +35540.0,305.88226902848686,293.15 +35560.0,305.89378968080615,293.15 +35580.0,305.90528337493345,293.15 +35600.0,305.916750086555,293.15 +35620.0,305.9281897914141,293.15 +35640.0,305.93960246531134,293.15 +35660.0,305.9509880841043,293.15 +35680.0,305.96234662370784,293.15 +35700.0,305.9736780600942,293.15 +35720.0,305.98498236929277,293.15 +35740.0,305.99625952739046,293.15 +35760.0,306.00750951053163,293.15 +35780.0,306.0187322949181,293.15 +35800.0,306.0299278568092,293.15 +35820.0,306.04109617252175,293.15 +35840.0,306.05223721843043,293.15 +35860.0,306.0633509709675,293.15 +35880.0,306.07443740662285,293.15 +35900.0,306.08549650194436,293.15 +35920.0,306.0965282335375,293.15 +35940.0,306.1075325780659,293.15 +35960.0,306.1185095122509,293.15 +35980.0,306.129459012872,293.15 +36000.0,306.14038105676656,293.15 +36020.0,306.1512756208301,293.15 +36040.0,306.16214268201634,293.15 +36060.0,306.1729822173371,293.15 +36080.0,306.1837942038624,293.15 +36100.0,306.19457861872064,293.15 +36120.0,306.20533543909846,293.15 +36140.0,306.2160646422409,293.15 +36160.0,306.22676620545144,293.15 +36180.0,306.2374401060919,293.15 +36200.0,306.2480863215829,293.15 +36220.0,306.25870482940337,293.15 +36240.0,306.2692956070909,293.15 +36260.0,306.2798586322418,293.15 +36280.0,306.2903938825112,293.15 +36300.0,306.3009013356126,293.15 +36320.0,306.3113809693187,293.15 +36340.0,306.3218327614609,293.15 +36360.0,306.33225668992947,293.15 +36380.0,306.3426527326736,293.15 +36400.0,306.3530208677016,293.15 +36420.0,306.36336107308074,293.15 +36440.0,306.3736733269373,293.15 +36460.0,306.3839576074568,293.15 +36480.0,306.3942138928839,293.15 +36500.0,306.4044421615224,293.15 +36520.0,306.41464239173547,293.15 +36540.0,306.4248145619456,293.15 +36560.0,306.43495865063454,293.15 +36580.0,306.4450746363436,293.15 +36600.0,306.4551624976733,293.15 +36620.0,306.4652222132839,293.15 +36640.0,306.47525376189503,293.15 +36660.0,306.48525712228604,293.15 +36680.0,306.49523227329576,293.15 +36700.0,306.5051791938228,293.15 +36720.0,306.5150978628255,293.15 +36740.0,306.52498825932184,293.15 +36760.0,306.5348503623898,293.15 +36780.0,306.544684151167,293.15 +36800.0,306.55448960485114,293.15 +36820.0,306.56426670269974,293.15 +36840.0,306.57401542403034,293.15 +36860.0,306.58373574822053,293.15 +36880.0,306.5934276547079,293.15 +36900.0,306.6030911229903,293.15 +36920.0,306.61272613262554,293.15 +36940.0,306.6223326632318,293.15 +36960.0,306.6319106944875,293.15 +36980.0,306.6414602061311,293.15 +37000.0,306.6509811779618,293.15 +37020.0,306.6604735898388,293.15 +37040.0,306.66993742168194,293.15 +37060.0,306.6793726534714,293.15 +37080.0,306.6887792652479,293.15 +37100.0,306.69815723711275,293.15 +37120.0,306.7075065492278,293.15 +37140.0,306.7168271818155,293.15 +37160.0,306.726119115159,293.15 +37180.0,306.7353823296022,293.15 +37200.0,306.74461680554975,293.15 +37220.0,306.7538225234669,293.15 +37240.0,306.76299946388,293.15 +37260.0,306.7721476073762,293.15 +37280.0,306.7812669346034,293.15 +37300.0,306.79035742627076,293.15 +37320.0,306.79941906314815,293.15 +37340.0,306.8084518260666,293.15 +37360.0,306.8174556959182,293.15 +37380.0,306.8264306536563,293.15 +37400.0,306.8353766802952,293.15 +37420.0,306.8442937569105,293.15 +37440.0,306.853181864639,293.15 +37460.0,306.86204098467886,293.15 +37480.0,306.87087109828946,293.15 +37500.0,306.8796721867917,293.15 +37520.0,306.88844423156763,293.15 +37540.0,306.897187214061,293.15 +37560.0,306.9059011157768,293.15 +37580.0,306.91458591828183,293.15 +37600.0,306.9232416032041,293.15 +37620.0,306.93186815223345,293.15 +37640.0,306.94046554712133,293.15 +37660.0,306.94903376968074,293.15 +37680.0,306.95757280178657,293.15 +37700.0,306.96608262537535,293.15 +37720.0,306.97456322244534,293.15 +37740.0,306.98301457505676,293.15 +37760.0,306.9914366653316,293.15 +37780.0,306.99982947545385,293.15 +37800.0,307.0081929876693,293.15 +37820.0,307.0165271842858,293.15 +37840.0,307.0248320476732,293.15 +37860.0,307.0331075602635,293.15 +37880.0,307.04135370455054,293.15 +37900.0,307.04957046309056,293.15 +37920.0,307.0577578185018,293.15 +37940.0,307.0659157534647,293.15 +37960.0,307.07404425072207,293.15 +37980.0,307.08214329307884,293.15 +38000.0,307.0902128634023,293.15 +38020.0,307.0982529446221,293.15 +38040.0,307.10626351973036,293.15 +38060.0,307.11424457178134,293.15 +38080.0,307.1221960838921,293.15 +38100.0,307.13011803924195,293.15 +38120.0,307.1380104210728,293.15 +38140.0,307.14587321268914,293.15 +38160.0,307.153706397458,293.15 +38180.0,307.1615099588091,293.15 +38200.0,307.1692838802348,293.15 +38220.0,307.17702814529014,293.15 +38240.0,307.18474273759296,293.15 +38260.0,307.1924276408238,293.15 +38280.0,307.20008283872596,293.15 +38300.0,307.2077083151057,293.15 +38320.0,307.21530405383214,293.15 +38340.0,307.22287003883724,293.15 +38360.0,307.2304062541159,293.15 +38380.0,307.23791268372605,293.15 +38400.0,307.2453893117886,293.15 +38420.0,307.2528361224875,293.15 +38440.0,307.26025310006975,293.15 +38460.0,307.26764022884555,293.15 +38480.0,307.2749974931881,293.15 +38500.0,307.28232487753394,293.15 +38520.0,307.2896223663827,293.15 +38540.0,307.2968899442972,293.15 +38560.0,307.3041275959037,293.15 +38580.0,307.31133530589176,293.15 +38600.0,307.31851305901404,293.15 +38620.0,307.32566084008687,293.15 +38640.0,307.33277863398973,293.15 +38660.0,307.3398664256657,293.15 +38680.0,307.34692420012135,293.15 +38700.0,307.35395194242653,293.15 +38720.0,307.3609496377149,293.15 +38740.0,307.3679172711835,293.15 +38760.0,307.37485482809296,293.15 +38780.0,307.3817622937676,293.15 +38800.0,307.3886396535955,293.15 +38820.0,307.39548689302814,293.15 +38840.0,307.40230399758093,293.15 +38860.0,307.409090952833,293.15 +38880.0,307.41584774442725,293.15 +38900.0,307.4225743580704,293.15 +38920.0,307.4292707795329,293.15 +38940.0,307.4359369946491,293.15 +38960.0,307.4425729893175,293.15 +38980.0,307.4491787495002,293.15 +39000.0,307.4557542612234,293.15 +39020.0,307.4622995105772,293.15 +39040.0,307.46881448371596,293.15 +39060.0,307.4752991668578,293.15 +39080.0,307.481753546285,293.15 +39100.0,307.4881776083441,293.15 +39120.0,307.4945713394455,293.15 +39140.0,307.50093472606403,293.15 +39160.0,307.50726775473856,293.15 +39180.0,307.51357041207217,293.15 +39200.0,307.51984268473234,293.15 +39220.0,307.52608455945057,293.15 +39240.0,307.53229602302287,293.15 +39260.0,307.53847706230954,293.15 +39280.0,307.54462766423524,293.15 +39300.0,307.5507478157889,293.15 +39320.0,307.5568375040241,293.15 +39340.0,307.56289671605856,293.15 +39360.0,307.56892543907475,293.15 +39380.0,307.5749236603195,293.15 +39400.0,307.5808913671042,293.15 +39420.0,307.58682854680467,293.15 +39440.0,307.59273518686155,293.15 +39460.0,307.59861127477984,293.15 +39480.0,307.6044567981293,293.15 +39500.0,307.6102717445444,293.15 +39520.0,307.61605610172404,293.15 +39540.0,307.6218098574322,293.15 +39560.0,307.6275329994972,293.15 +39580.0,307.63322551581246,293.15 +39600.0,307.638887394336,293.15 +39620.0,307.6445186230907,293.15 +39640.0,307.65011919016416,293.15 +39660.0,307.65568908370915,293.15 +39680.0,307.66122829194296,293.15 +39700.0,307.666736803148,293.15 +39720.0,307.67221460567157,293.15 +39740.0,307.677661687926,293.15 +39760.0,307.6830780383885,293.15 +39780.0,307.6884636456013,293.15 +39800.0,307.6938184981717,293.15 +39820.0,307.6991425847721,293.15 +39840.0,307.7044358941399,293.15 +39860.0,307.7096984150777,293.15 +39880.0,307.71493013645306,293.15 +39900.0,307.7201310471989,293.15 +39920.0,307.7253011363132,293.15 +39940.0,307.7304403928591,293.15 +39960.0,307.73554880596515,293.15 +39980.0,307.7406263648249,293.15 +40000.0,307.7456730586973,293.15 +40020.0,307.7506888769067,293.15 +40040.0,307.7556738088425,293.15 +40060.0,307.76062784395975,293.15 +40080.0,307.7655509717785,293.15 +40100.0,307.7704431818845,293.15 +40120.0,307.77530446392876,293.15 +40140.0,307.7801348076277,293.15 +40160.0,307.78493420276317,293.15 +40180.0,307.7897026391827,293.15 +40200.0,307.79444010679896,293.15 +40220.0,307.79914659559046,293.15 +40240.0,307.80382209560105,293.15 +40260.0,307.80846659694015,293.15 +40280.0,307.81308008978283,293.15 +40300.0,307.81766256436975,293.15 +40320.0,307.8222140110071,293.15 +40340.0,307.8267344200667,293.15 +40360.0,307.8312237819862,293.15 +40380.0,307.8356820872687,293.15 +40400.0,307.84010932648323,293.15 +40420.0,307.84450549026434,293.15 +40440.0,307.8488705693124,293.15 +40460.0,307.8532045543936,293.15 +40480.0,307.8575074363397,293.15 +40500.0,307.8617792060484,293.15 +40520.0,307.86601985448334,293.15 +40540.0,307.8702293726738,293.15 +40560.0,307.87440775171495,293.15 +40580.0,307.8785549827678,293.15 +40600.0,307.88267105705944,293.15 +40620.0,307.8867559658826,293.15 +40640.0,307.89080970059615,293.15 +40660.0,307.89483225262484,293.15 +40680.0,307.8988236134593,293.15 +40700.0,307.90278377465626,293.15 +40720.0,307.90671272783834,293.15 +40740.0,307.91061046469434,293.15 +40760.0,307.9144769769789,293.15 +40780.0,307.9183122565129,293.15 +40800.0,307.9221162951831,293.15 +40820.0,307.92588908494247,293.15 +40840.0,307.9296306178101,293.15 +40860.0,307.93334088587113,293.15 +40880.0,307.93701988127685,293.15 +40900.0,307.9406675962448,293.15 +40920.0,307.94428402305846,293.15 +40940.0,307.94786915406775,293.15 +40960.0,307.95142298168867,293.15 +40980.0,307.95494549840345,293.15 +41000.0,307.9584366967606,293.15 +41020.0,307.9618965693748,293.15 +41040.0,307.96532510892706,293.15 +41060.0,307.9687223081646,293.15 +41080.0,307.9720881599011,293.15 +41100.0,307.9754226570164,293.15 +41120.0,307.97872579245666,293.15 +41140.0,307.98199755923446,293.15 +41160.0,307.9852379504287,293.15 +41180.0,307.9884469591847,293.15 +41200.0,307.99162457871415,293.15 +41220.0,307.994770802295,293.15 +41240.0,307.9978856232719,293.15 +41260.0,308.0009690350556,293.15 +41280.0,308.00402103112356,293.15 +41300.0,308.00704160501954,293.15 +41320.0,308.0100307503538,293.15 +41340.0,308.01298846080323,293.15 +41360.0,308.015914730111,293.15 +41380.0,308.01880955208685,293.15 +41400.0,308.02167292060716,293.15 +41420.0,308.02450482961467,293.15 +41440.0,308.0273052731189,293.15 +41460.0,308.0300742451957,293.15 +41480.0,308.0328117399876,293.15 +41500.0,308.03551775170376,293.15 +41520.0,308.0381922746198,293.15 +41540.0,308.0408353030781,293.15 +41560.0,308.0434468314876,293.15 +41580.0,308.0460268543239,293.15 +41600.0,308.0485753661291,293.15 +41620.0,308.05109236151225,293.15 +41640.0,308.0535778351488,293.15 +41660.0,308.056031781781,293.15 +41680.0,308.0584541962178,293.15 +41700.0,308.06084507333475,293.15 +41720.0,308.06320440807434,293.15 +41740.0,308.0655321954455,293.15 +41760.0,308.06782843052406,293.15 +41780.0,308.0700931084526,293.15 +41800.0,308.0723262244405,293.15 +41820.0,308.07452777376363,293.15 +41840.0,308.07669775176504,293.15 +41860.0,308.07883615385424,293.15 +41880.0,308.08094297550764,293.15 +41900.0,308.0830182122686,293.15 +41920.0,308.08506185974704,293.15 +41940.0,308.0870739136199,293.15 +41960.0,308.08905436963084,293.15 +41980.0,308.0910032235905,293.15 +42000.0,308.09292047137615,293.15 +42020.0,308.0948061089321,293.15 +42040.0,308.09666013226956,293.15 +42060.0,308.0984825374664,293.15 +42080.0,308.10027332066755,293.15 +42100.0,308.1020324780848,293.15 +42120.0,308.1037600059969,293.15 +42140.0,308.10545590074935,293.15 +42160.0,308.10712015875464,293.15 +42180.0,308.1087527764923,293.15 +42200.0,308.1103537505086,293.15 +42220.0,308.11192307741686,293.15 +42240.0,308.11346075389736,293.15 +42260.0,308.11496677669726,293.15 +42280.0,308.1164411426308,293.15 +42300.0,308.117883848579,293.15 +42320.0,308.1192948914901,293.15 +42340.0,308.12067426837905,293.15 +42360.0,308.12202197632797,293.15 +42380.0,308.12333801248593,293.15 +42400.0,308.124622374069,293.15 +42420.0,308.12587505836024,293.15 +42440.0,308.12709606270965,293.15 +42460.0,308.1282853845344,293.15 +42480.0,308.1294430213186,293.15 +42500.0,308.13056897061335,293.15 +42520.0,308.1316632300368,293.15 +42540.0,308.13272579727425,293.15 +42560.0,308.13375667007784,293.15 +42580.0,308.13475584626696,293.15 +42600.0,308.13572332372786,293.15 +42620.0,308.13665910041397,293.15 +42640.0,308.1375631743458,293.15 +42660.0,308.1384355436108,293.15 +42680.0,308.13927620636366,293.15 +42700.0,308.14008516082595,293.15 +42720.0,308.14086240528644,293.15 +42740.0,308.1416079381009,293.15 +42760.0,308.14232175769234,293.15 +42780.0,308.1430038625507,293.15 +42800.0,308.143654251233,293.15 +42820.0,308.1442729223634,293.15 +42840.0,308.1448598746333,293.15 +42860.0,308.145415106801,293.15 +42880.0,308.1459386176919,293.15 +42900.0,308.1464304061986,293.15 +42920.0,308.1468904712808,293.15 +42940.0,308.14731881196525,293.15 +42960.0,308.1477154273459,293.15 +42980.0,308.14808031658356,293.15 +43000.0,308.1484134789066,293.15 +43020.0,308.1487149136101,293.15 +43040.0,308.1489846200564,293.15 +43060.0,308.149222597675,293.15 +43080.0,308.1494288459626,293.15 +43100.0,308.14960336448263,293.15 +43120.0,308.14974615286616,293.15 +43140.0,308.149857210811,293.15 +43160.0,308.1499365380823,293.15 +43180.0,308.1499841345122,293.15 +43200.0,308.15,293.15 +43220.0,308.1499841345122,293.15 +43240.0,308.1499365380823,293.15 +43260.0,308.149857210811,293.15 +43280.0,308.14974615286616,293.15 +43300.0,308.14960336448263,293.15 +43320.0,308.1494288459626,293.15 +43340.0,308.149222597675,293.15 +43360.0,308.1489846200564,293.15 +43380.0,308.1487149136101,293.15 +43400.0,308.1484134789066,293.15 +43420.0,308.14808031658356,293.15 +43440.0,308.1477154273459,293.15 +43460.0,308.14731881196525,293.15 +43480.0,308.1468904712808,293.15 +43500.0,308.1464304061986,293.15 +43520.0,308.1459386176919,293.15 +43540.0,308.145415106801,293.15 +43560.0,308.1448598746333,293.15 +43580.0,308.1442729223634,293.15 +43600.0,308.143654251233,293.15 +43620.0,308.1430038625507,293.15 +43640.0,308.14232175769234,293.15 +43660.0,308.1416079381009,293.15 +43680.0,308.14086240528644,293.15 +43700.0,308.14008516082595,293.15 +43720.0,308.13927620636366,293.15 +43740.0,308.1384355436108,293.15 +43760.0,308.1375631743458,293.15 +43780.0,308.13665910041397,293.15 +43800.0,308.13572332372786,293.15 +43820.0,308.13475584626696,293.15 +43840.0,308.13375667007784,293.15 +43860.0,308.13272579727425,293.15 +43880.0,308.1316632300368,293.15 +43900.0,308.13056897061335,293.15 +43920.0,308.1294430213186,293.15 +43940.0,308.1282853845344,293.15 +43960.0,308.12709606270965,293.15 +43980.0,308.12587505836024,293.15 +44000.0,308.124622374069,293.15 +44020.0,308.12333801248593,293.15 +44040.0,308.12202197632797,293.15 +44060.0,308.12067426837905,293.15 +44080.0,308.1192948914901,293.15 +44100.0,308.117883848579,293.15 +44120.0,308.1164411426308,293.15 +44140.0,308.11496677669726,293.15 +44160.0,308.11346075389736,293.15 +44180.0,308.11192307741686,293.15 +44200.0,308.1103537505086,293.15 +44220.0,308.1087527764923,293.15 +44240.0,308.10712015875464,293.15 +44260.0,308.10545590074935,293.15 +44280.0,308.1037600059969,293.15 +44300.0,308.1020324780848,293.15 +44320.0,308.10027332066755,293.15 +44340.0,308.0984825374664,293.15 +44360.0,308.09666013226956,293.15 +44380.0,308.0948061089321,293.15 +44400.0,308.09292047137615,293.15 +44420.0,308.0910032235905,293.15 +44440.0,308.08905436963084,293.15 +44460.0,308.0870739136199,293.15 +44480.0,308.08506185974704,293.15 +44500.0,308.0830182122686,293.15 +44520.0,308.08094297550764,293.15 +44540.0,308.07883615385424,293.15 +44560.0,308.07669775176504,293.15 +44580.0,308.07452777376363,293.15 +44600.0,308.0723262244405,293.15 +44620.0,308.0700931084526,293.15 +44640.0,308.06782843052406,293.15 +44660.0,308.0655321954455,293.15 +44680.0,308.06320440807434,293.15 +44700.0,308.06084507333475,293.15 +44720.0,308.0584541962178,293.15 +44740.0,308.056031781781,293.15 +44760.0,308.0535778351488,293.15 +44780.0,308.05109236151225,293.15 +44800.0,308.0485753661291,293.15 +44820.0,308.0460268543239,293.15 +44840.0,308.0434468314876,293.15 +44860.0,308.0408353030781,293.15 +44880.0,308.0381922746198,293.15 +44900.0,308.03551775170376,293.15 +44920.0,308.0328117399876,293.15 +44940.0,308.0300742451957,293.15 +44960.0,308.0273052731189,293.15 +44980.0,308.02450482961467,293.15 +45000.0,308.02167292060716,293.15 +45020.0,308.01880955208685,293.15 +45040.0,308.015914730111,293.15 +45060.0,308.01298846080323,293.15 +45080.0,308.0100307503538,293.15 +45100.0,308.00704160501954,293.15 +45120.0,308.00402103112356,293.15 +45140.0,308.0009690350556,293.15 +45160.0,307.9978856232719,293.15 +45180.0,307.994770802295,293.15 +45200.0,307.99162457871415,293.15 +45220.0,307.9884469591847,293.15 +45240.0,307.9852379504287,293.15 +45260.0,307.98199755923446,293.15 +45280.0,307.97872579245666,293.15 +45300.0,307.9754226570164,293.15 +45320.0,307.9720881599011,293.15 +45340.0,307.9687223081646,293.15 +45360.0,307.96532510892706,293.15 +45380.0,307.9618965693748,293.15 +45400.0,307.9584366967606,293.15 +45420.0,307.95494549840345,293.15 +45440.0,307.95142298168867,293.15 +45460.0,307.94786915406775,293.15 +45480.0,307.94428402305846,293.15 +45500.0,307.9406675962448,293.15 +45520.0,307.93701988127685,293.15 +45540.0,307.93334088587113,293.15 +45560.0,307.9296306178101,293.15 +45580.0,307.92588908494247,293.15 +45600.0,307.9221162951831,293.15 +45620.0,307.9183122565129,293.15 +45640.0,307.9144769769789,293.15 +45660.0,307.91061046469434,293.15 +45680.0,307.90671272783834,293.15 +45700.0,307.90278377465626,293.15 +45720.0,307.8988236134593,293.15 +45740.0,307.89483225262484,293.15 +45760.0,307.89080970059615,293.15 +45780.0,307.8867559658826,293.15 +45800.0,307.88267105705944,293.15 +45820.0,307.8785549827678,293.15 +45840.0,307.87440775171495,293.15 +45860.0,307.8702293726738,293.15 +45880.0,307.86601985448334,293.15 +45900.0,307.8617792060484,293.15 +45920.0,307.8575074363397,293.15 +45940.0,307.8532045543936,293.15 +45960.0,307.8488705693124,293.15 +45980.0,307.84450549026434,293.15 +46000.0,307.84010932648323,293.15 +46020.0,307.8356820872687,293.15 +46040.0,307.8312237819862,293.15 +46060.0,307.8267344200667,293.15 +46080.0,307.8222140110071,293.15 +46100.0,307.81766256436975,293.15 +46120.0,307.81308008978283,293.15 +46140.0,307.80846659694015,293.15 +46160.0,307.80382209560105,293.15 +46180.0,307.79914659559046,293.15 +46200.0,307.79444010679896,293.15 +46220.0,307.7897026391827,293.15 +46240.0,307.78493420276317,293.15 +46260.0,307.7801348076277,293.15 +46280.0,307.77530446392876,293.15 +46300.0,307.7704431818845,293.15 +46320.0,307.7655509717785,293.15 +46340.0,307.76062784395975,293.15 +46360.0,307.7556738088425,293.15 +46380.0,307.7506888769067,293.15 +46400.0,307.7456730586973,293.15 +46420.0,307.7406263648249,293.15 +46440.0,307.73554880596515,293.15 +46460.0,307.7304403928591,293.15 +46480.0,307.7253011363132,293.15 +46500.0,307.7201310471989,293.15 +46520.0,307.71493013645306,293.15 +46540.0,307.7096984150777,293.15 +46560.0,307.7044358941399,293.15 +46580.0,307.6991425847721,293.15 +46600.0,307.6938184981717,293.15 +46620.0,307.6884636456013,293.15 +46640.0,307.6830780383885,293.15 +46660.0,307.677661687926,293.15 +46680.0,307.67221460567157,293.15 +46700.0,307.666736803148,293.15 +46720.0,307.66122829194296,293.15 +46740.0,307.65568908370915,293.15 +46760.0,307.65011919016416,293.15 +46780.0,307.6445186230907,293.15 +46800.0,307.638887394336,293.15 +46820.0,307.63322551581246,293.15 +46840.0,307.6275329994972,293.15 +46860.0,307.6218098574322,293.15 +46880.0,307.61605610172404,293.15 +46900.0,307.6102717445444,293.15 +46920.0,307.6044567981293,293.15 +46940.0,307.59861127477984,293.15 +46960.0,307.59273518686155,293.15 +46980.0,307.58682854680467,293.15 +47000.0,307.5808913671042,293.15 +47020.0,307.5749236603195,293.15 +47040.0,307.56892543907475,293.15 +47060.0,307.56289671605856,293.15 +47080.0,307.5568375040241,293.15 +47100.0,307.5507478157889,293.15 +47120.0,307.54462766423524,293.15 +47140.0,307.53847706230954,293.15 +47160.0,307.53229602302287,293.15 +47180.0,307.52608455945057,293.15 +47200.0,307.51984268473234,293.15 +47220.0,307.51357041207217,293.15 +47240.0,307.50726775473856,293.15 +47260.0,307.50093472606403,293.15 +47280.0,307.4945713394455,293.15 +47300.0,307.4881776083441,293.15 +47320.0,307.481753546285,293.15 +47340.0,307.4752991668578,293.15 +47360.0,307.46881448371596,293.15 +47380.0,307.4622995105772,293.15 +47400.0,307.4557542612234,293.15 +47420.0,307.4491787495002,293.15 +47440.0,307.4425729893175,293.15 +47460.0,307.4359369946491,293.15 +47480.0,307.4292707795329,293.15 +47500.0,307.4225743580704,293.15 +47520.0,307.41584774442725,293.15 +47540.0,307.409090952833,293.15 +47560.0,307.40230399758093,293.15 +47580.0,307.39548689302814,293.15 +47600.0,307.3886396535955,293.15 +47620.0,307.3817622937676,293.15 +47640.0,307.37485482809296,293.15 +47660.0,307.3679172711835,293.15 +47680.0,307.3609496377149,293.15 +47700.0,307.35395194242653,293.15 +47720.0,307.34692420012135,293.15 +47740.0,307.3398664256657,293.15 +47760.0,307.33277863398973,293.15 +47780.0,307.32566084008687,293.15 +47800.0,307.31851305901404,293.15 +47820.0,307.31133530589176,293.15 +47840.0,307.3041275959037,293.15 +47860.0,307.2968899442972,293.15 +47880.0,307.2896223663827,293.15 +47900.0,307.28232487753394,293.15 +47920.0,307.2749974931881,293.15 +47940.0,307.26764022884555,293.15 +47960.0,307.26025310006975,293.15 +47980.0,307.2528361224875,293.15 +48000.0,307.2453893117886,293.15 +48020.0,307.23791268372605,293.15 +48040.0,307.2304062541159,293.15 +48060.0,307.22287003883724,293.15 +48080.0,307.21530405383214,293.15 +48100.0,307.2077083151057,293.15 +48120.0,307.20008283872596,293.15 +48140.0,307.1924276408238,293.15 +48160.0,307.18474273759296,293.15 +48180.0,307.17702814529014,293.15 +48200.0,307.1692838802348,293.15 +48220.0,307.1615099588091,293.15 +48240.0,307.153706397458,293.15 +48260.0,307.14587321268914,293.15 +48280.0,307.1380104210728,293.15 +48300.0,307.13011803924195,293.15 +48320.0,307.1221960838921,293.15 +48340.0,307.11424457178134,293.15 +48360.0,307.10626351973036,293.15 +48380.0,307.0982529446221,293.15 +48400.0,307.0902128634023,293.15 +48420.0,307.08214329307884,293.15 +48440.0,307.07404425072207,293.15 +48460.0,307.0659157534647,293.15 +48480.0,307.0577578185018,293.15 +48500.0,307.04957046309056,293.15 +48520.0,307.04135370455054,293.15 +48540.0,307.0331075602635,293.15 +48560.0,307.0248320476732,293.15 +48580.0,307.0165271842858,293.15 +48600.0,307.0081929876693,293.15 +48620.0,306.99982947545385,293.15 +48640.0,306.9914366653316,293.15 +48660.0,306.98301457505676,293.15 +48680.0,306.97456322244534,293.15 +48700.0,306.96608262537535,293.15 +48720.0,306.95757280178657,293.15 +48740.0,306.94903376968074,293.15 +48760.0,306.94046554712133,293.15 +48780.0,306.93186815223345,293.15 +48800.0,306.9232416032041,293.15 +48820.0,306.91458591828183,293.15 +48840.0,306.9059011157768,293.15 +48860.0,306.897187214061,293.15 +48880.0,306.88844423156763,293.15 +48900.0,306.8796721867917,293.15 +48920.0,306.8708710982895,293.15 +48940.0,306.86204098467886,293.15 +48960.0,306.853181864639,293.15 +48980.0,306.8442937569105,293.15 +49000.0,306.8353766802952,293.15 +49020.0,306.8264306536563,293.15 +49040.0,306.8174556959182,293.15 +49060.0,306.8084518260666,293.15 +49080.0,306.79941906314815,293.15 +49100.0,306.79035742627076,293.15 +49120.0,306.7812669346034,293.15 +49140.0,306.7721476073762,293.15 +49160.0,306.76299946388,293.15 +49180.0,306.7538225234669,293.15 +49200.0,306.74461680554975,293.15 +49220.0,306.73538232960226,293.15 +49240.0,306.726119115159,293.15 +49260.0,306.7168271818155,293.15 +49280.0,306.7075065492278,293.15 +49300.0,306.69815723711275,293.15 +49320.0,306.6887792652479,293.15 +49340.0,306.6793726534714,293.15 +49360.0,306.66993742168194,293.15 +49380.0,306.6604735898388,293.15 +49400.0,306.6509811779618,293.15 +49420.0,306.6414602061311,293.15 +49440.0,306.6319106944875,293.15 +49460.0,306.6223326632318,293.15 +49480.0,306.61272613262554,293.15 +49500.0,306.6030911229903,293.15 +49520.0,306.5934276547079,293.15 +49540.0,306.58373574822053,293.15 +49560.0,306.57401542403034,293.15 +49580.0,306.56426670269974,293.15 +49600.0,306.55448960485114,293.15 +49620.0,306.544684151167,293.15 +49640.0,306.5348503623898,293.15 +49660.0,306.52498825932184,293.15 +49680.0,306.5150978628255,293.15 +49700.0,306.5051791938228,293.15 +49720.0,306.49523227329576,293.15 +49740.0,306.48525712228604,293.15 +49760.0,306.47525376189503,293.15 +49780.0,306.4652222132839,293.15 +49800.0,306.4551624976733,293.15 +49820.0,306.4450746363436,293.15 +49840.0,306.4349586506346,293.15 +49860.0,306.4248145619456,293.15 +49880.0,306.41464239173547,293.15 +49900.0,306.4044421615224,293.15 +49920.0,306.3942138928839,293.15 +49940.0,306.3839576074568,293.15 +49960.0,306.3736733269373,293.15 +49980.0,306.36336107308074,293.15 +50000.0,306.3530208677016,293.15 +50020.0,306.3426527326736,293.15 +50040.0,306.33225668992947,293.15 +50060.0,306.3218327614609,293.15 +50080.0,306.3113809693187,293.15 +50100.0,306.3009013356126,293.15 +50120.0,306.2903938825112,293.15 +50140.0,306.2798586322418,293.15 +50160.0,306.2692956070909,293.15 +50180.0,306.25870482940337,293.15 +50200.0,306.2480863215829,293.15 +50220.0,306.2374401060919,293.15 +50240.0,306.22676620545144,293.15 +50260.0,306.2160646422409,293.15 +50280.0,306.20533543909846,293.15 +50300.0,306.19457861872064,293.15 +50320.0,306.1837942038624,293.15 +50340.0,306.1729822173371,293.15 +50360.0,306.16214268201634,293.15 +50380.0,306.1512756208301,293.15 +50400.0,306.14038105676656,293.15 +50420.0,306.129459012872,293.15 +50440.0,306.11850951225097,293.15 +50460.0,306.1075325780659,293.15 +50480.0,306.0965282335375,293.15 +50500.0,306.08549650194436,293.15 +50520.0,306.07443740662285,293.15 +50540.0,306.0633509709675,293.15 +50560.0,306.05223721843043,293.15 +50580.0,306.04109617252175,293.15 +50600.0,306.0299278568092,293.15 +50620.0,306.0187322949181,293.15 +50640.0,306.0075095105317,293.15 +50660.0,305.99625952739046,293.15 +50680.0,305.98498236929277,293.15 +50700.0,305.9736780600942,293.15 +50720.0,305.96234662370784,293.15 +50740.0,305.9509880841043,293.15 +50760.0,305.93960246531134,293.15 +50780.0,305.9281897914141,293.15 +50800.0,305.916750086555,293.15 +50820.0,305.90528337493345,293.15 +50840.0,305.89378968080615,293.15 +50860.0,305.88226902848686,293.15 +50880.0,305.8707214423464,293.15 +50900.0,305.8591469468124,293.15 +50920.0,305.8475455663696,293.15 +50940.0,305.8359173255596,293.15 +50960.0,305.82426224898063,293.15 +50980.0,305.8125803612879,293.15 +51000.0,305.80087168719325,293.15 +51020.0,305.7891362514652,293.15 +51040.0,305.77737407892886,293.15 +51060.0,305.76558519446587,293.15 +51080.0,305.7537696230145,293.15 +51100.0,305.7419273895693,293.15 +51120.0,305.73005851918134,293.15 +51140.0,305.71816303695806,293.15 +51160.0,305.70624096806307,293.15 +51180.0,305.6942923377164,293.15 +51200.0,305.68231717119403,293.15 +51220.0,305.6703154938283,293.15 +51240.0,305.6582873310075,293.15 +51260.0,305.646232708176,293.15 +51280.0,305.63415165083416,293.15 +51300.0,305.62204418453814,293.15 +51320.0,305.6099103349002,293.15 +51340.0,305.5977501275881,293.15 +51360.0,305.5855635883256,293.15 +51380.0,305.5733507428921,293.15 +51400.0,305.5611116171226,293.15 +51420.0,305.5488462369078,293.15 +51440.0,305.5365546281938,293.15 +51460.0,305.52423681698224,293.15 +51480.0,305.51189282933024,293.15 +51500.0,305.4995226913502,293.15 +51520.0,305.4871264292099,293.15 +51540.0,305.47470406913243,293.15 +51560.0,305.46225563739597,293.15 +51580.0,305.44978116033394,293.15 +51600.0,305.4372806643349,293.15 +51620.0,305.42475417584217,293.15 +51640.0,305.41220172135445,293.15 +51660.0,305.39962332742516,293.15 +51680.0,305.38701902066254,293.15 +51700.0,305.3743888277298,293.15 +51720.0,305.36173277534476,293.15 +51740.0,305.34905089028007,293.15 +51760.0,305.3363431993629,293.15 +51780.0,305.32360972947515,293.15 +51800.0,305.31085050755314,293.15 +51820.0,305.29806556058776,293.15 +51840.0,305.2852549156242,293.15 +51860.0,305.2724185997621,293.15 +51880.0,305.2595566401554,293.15 +51900.0,305.2466690640122,293.15 +51920.0,305.23375589859495,293.15 +51940.0,305.2208171712201,293.15 +51960.0,305.20785290925824,293.15 +51980.0,305.1948631401339,293.15 +52000.0,305.1818478913256,293.15 +52020.0,305.1688071903659,293.15 +52040.0,305.1557410648409,293.15 +52060.0,305.1426495423908,293.15 +52080.0,305.1295326507094,293.15 +52100.0,305.116390417544,293.15 +52120.0,305.1032228706958,293.15 +52140.0,305.09003003801934,293.15 +52160.0,305.0768119474227,293.15 +52180.0,305.06356862686744,293.15 +52200.0,305.0503001043685,293.15 +52220.0,305.03700640799406,293.15 +52240.0,305.02368756586554,293.15 +52260.0,305.0103436061576,293.15 +52280.0,304.99697455709816,293.15 +52300.0,304.9835804469679,293.15 +52320.0,304.9701613041008,293.15 +52340.0,304.9567171568837,293.15 +52360.0,304.9432480337563,293.15 +52380.0,304.92975396321117,293.15 +52400.0,304.9162349737936,293.15 +52420.0,304.9026910941017,293.15 +52440.0,304.8891223527862,293.15 +52460.0,304.8755287785503,293.15 +52480.0,304.8619104001499,293.15 +52500.0,304.8482672463932,293.15 +52520.0,304.83459934614103,293.15 +52540.0,304.82090672830634,293.15 +52560.0,304.80718942185456,293.15 +52580.0,304.7934474558032,293.15 +52600.0,304.77968085922197,293.15 +52620.0,304.7658896612328,293.15 +52640.0,304.75207389100945,293.15 +52660.0,304.73823357777786,293.15 +52680.0,304.72436875081576,293.15 +52700.0,304.71047943945285,293.15 +52720.0,304.6965656730705,293.15 +52740.0,304.68262748110186,293.15 +52760.0,304.6686648930318,293.15 +52780.0,304.65467793839673,293.15 +52800.0,304.64066664678467,293.15 +52820.0,304.626631047835,293.15 +52840.0,304.6125711712387,293.15 +52860.0,304.5984870467379,293.15 +52880.0,304.58437870412627,293.15 +52900.0,304.57024617324845,293.15 +52920.0,304.55608948400044,293.15 +52940.0,304.5419086663293,293.15 +52960.0,304.527703750233,293.15 +52980.0,304.51347476576075,293.15 +53000.0,304.49922174301236,293.15 +53020.0,304.48494471213877,293.15 +53040.0,304.4706437033416,293.15 +53060.0,304.456318746873,293.15 +53080.0,304.4419698730362,293.15 +53100.0,304.4275971121846,293.15 +53120.0,304.41320049472245,293.15 +53140.0,304.39878005110427,293.15 +53160.0,304.384335811835,293.15 +53180.0,304.36986780747003,293.15 +53200.0,304.35537606861493,293.15 +53220.0,304.3408606259255,293.15 +53240.0,304.3263215101076,293.15 +53260.0,304.3117587519174,293.15 +53280.0,304.2971723821609,293.15 +53300.0,304.28256243169403,293.15 +53320.0,304.26792893142266,293.15 +53340.0,304.25327191230247,293.15 +53360.0,304.2385914053389,293.15 +53380.0,304.2238874415871,293.15 +53400.0,304.20916005215184,293.15 +53420.0,304.1944092681873,293.15 +53440.0,304.1796351208974,293.15 +53460.0,304.16483764153526,293.15 +53480.0,304.15001686140346,293.15 +53500.0,304.13517281185386,293.15 +53520.0,304.1203055242875,293.15 +53540.0,304.10541503015475,293.15 +53560.0,304.09050136095476,293.15 +53580.0,304.075564548236,293.15 +53600.0,304.06060462359574,293.15 +53620.0,304.0456216186801,293.15 +53640.0,304.0306155651843,293.15 +53660.0,304.01558649485196,293.15 +53680.0,304.0005344394756,293.15 +53700.0,303.9854594308963,293.15 +53720.0,303.97036150100377,293.15 +53740.0,303.95524068173603,293.15 +53760.0,303.94009700507974,293.15 +53780.0,303.9249305030698,293.15 +53800.0,303.9097412077893,293.15 +53820.0,303.8945291513698,293.15 +53840.0,303.87929436599075,293.15 +53860.0,303.86403688387986,293.15 +53880.0,303.8487567373127,293.15 +53900.0,303.83345395861295,293.15 +53920.0,303.818128580152,293.15 +53940.0,303.80278063434923,293.15 +53960.0,303.78741015367166,293.15 +53980.0,303.77201717063383,293.15 +54000.0,303.7566017177982,293.15 +54020.0,303.74116382777447,293.15 +54040.0,303.72570353322004,293.15 +54060.0,303.7102208668395,293.15 +54080.0,303.6947158613849,293.15 +54100.0,303.6791885496555,293.15 +54120.0,303.66363896449775,293.15 +54140.0,303.6480671388052,293.15 +54160.0,303.6324731055185,293.15 +54180.0,303.61685689762515,293.15 +54200.0,303.6012185481598,293.15 +54220.0,303.5855580902037,293.15 +54240.0,303.56987555688494,293.15 +54260.0,303.5541709813784,293.15 +54280.0,303.5384443969054,293.15 +54300.0,303.52269583673404,293.15 +54320.0,303.50692533417873,293.15 +54340.0,303.4911329226004,293.15 +54360.0,303.47531863540627,293.15 +54380.0,303.45948250604994,293.15 +54400.0,303.443624568031,293.15 +54420.0,303.42774485489537,293.15 +54440.0,303.411843400235,293.15 +54460.0,303.39592023768773,293.15 +54480.0,303.37997540093744,293.15 +54500.0,303.3640089237138,293.15 +54520.0,303.34802083979235,293.15 +54540.0,303.3320111829941,293.15 +54560.0,303.315979987186,293.15 +54580.0,303.29992728628025,293.15 +54600.0,303.2838531142349,293.15 +54620.0,303.26775750505305,293.15 +54640.0,303.2516404927835,293.15 +54660.0,303.23550211152,293.15 +54680.0,303.2193423954017,293.15 +54700.0,303.2031613786129,293.15 +54720.0,303.18695909538286,293.15 +54740.0,303.17073557998583,293.15 +54760.0,303.154490866741,293.15 +54780.0,303.1382249900125,293.15 +54800.0,303.12193798420907,293.15 +54820.0,303.10562988378416,293.15 +54840.0,303.089300723236,293.15 +54860.0,303.07295053710726,293.15 +54880.0,303.0565793599851,293.15 +54900.0,303.040187226501,293.15 +54920.0,303.02377417133096,293.15 +54940.0,303.007340229195,293.15 +54960.0,302.9908854348576,293.15 +54980.0,302.9744098231271,293.15 +55000.0,302.95791342885605,293.15 +55020.0,302.9413962869408,293.15 +55040.0,302.9248584323218,293.15 +55060.0,302.90829989998315,293.15 +55080.0,302.89172072495273,293.15 +55100.0,302.87512094230215,293.15 +55120.0,302.85850058714647,293.15 +55140.0,302.8418596946444,293.15 +55160.0,302.82519829999814,293.15 +55180.0,302.8085164384531,293.15 +55200.0,302.7918141452981,293.15 +55220.0,302.77509145586504,293.15 +55240.0,302.7583484055292,293.15 +55260.0,302.74158502970874,293.15 +55280.0,302.7248013638649,293.15 +55300.0,302.7079974435018,293.15 +55320.0,302.69117330416645,293.15 +55340.0,302.6743289814486,293.15 +55360.0,302.6574645109806,293.15 +55380.0,302.6405799284377,293.15 +55400.0,302.62367526953744,293.15 +55420.0,302.6067505700399,293.15 +55440.0,302.5898058657475,293.15 +55460.0,302.5728411925052,293.15 +55480.0,302.5558565861999,293.15 +55500.0,302.53885208276085,293.15 +55520.0,302.5218277181594,293.15 +55540.0,302.5047835284088,293.15 +55560.0,302.48771954956425,293.15 +55580.0,302.470635817723,293.15 +55600.0,302.4535323690239,293.15 +55620.0,302.4364092396475,293.15 +55640.0,302.41926646581607,293.15 +55660.0,302.40210408379346,293.15 +55680.0,302.38492212988484,293.15 +55700.0,302.36772064043697,293.15 +55720.0,302.3504996518379,293.15 +55740.0,302.3332592005167,293.15 +55760.0,302.315999322944,293.15 +55780.0,302.2987200556312,293.15 +55800.0,302.28142143513077,293.15 +55820.0,302.2641034980364,293.15 +55840.0,302.2467662809822,293.15 +55860.0,302.2294098206434,293.15 +55880.0,302.21203415373583,293.15 +55900.0,302.1946393170159,293.15 +55920.0,302.1772253472807,293.15 +55940.0,302.15979228136763,293.15 +55960.0,302.14234015615466,293.15 +55980.0,302.12486900855987,293.15 +56000.0,302.10737887554177,293.15 +56020.0,302.08986979409895,293.15 +56040.0,302.0723418012701,293.15 +56060.0,302.0547949341339,293.15 +56080.0,302.03722922980893,293.15 +56100.0,302.0196447254537,293.15 +56120.0,302.00204145826643,293.15 +56140.0,301.9844194654851,293.15 +56160.0,301.9667787843871,293.15 +56180.0,301.94911945228955,293.15 +56200.0,301.9314415065491,293.15 +56220.0,301.9137449845615,293.15 +56240.0,301.896029923762,293.15 +56260.0,301.878296361625,293.15 +56280.0,301.8605443356641,293.15 +56300.0,301.8427738834318,293.15 +56320.0,301.82498504251976,293.15 +56340.0,301.8071778505585,293.15 +56360.0,301.78935234521725,293.15 +56380.0,301.77150856420405,293.15 +56400.0,301.75364654526567,293.15 +56420.0,301.73576632618733,293.15 +56440.0,301.7178679447929,293.15 +56460.0,301.69995143894454,293.15 +56480.0,301.68201684654275,293.15 +56500.0,301.6640642055264,293.15 +56520.0,301.64609355387245,293.15 +56540.0,301.628104929596,293.15 +56560.0,301.61009837075017,293.15 +56580.0,301.592073915426,293.15 +56600.0,301.5740316017524,293.15 +56620.0,301.555971467896,293.15 +56640.0,301.5378935520612,293.15 +56660.0,301.51979789249,293.15 +56680.0,301.5016845274619,293.15 +56700.0,301.483553495294,293.15 +56720.0,301.4654048343406,293.15 +56740.0,301.4472385829932,293.15 +56760.0,301.4290547796808,293.15 +56780.0,301.41085346286945,293.15 +56800.0,301.39263467106207,293.15 +56820.0,301.3743984427987,293.15 +56840.0,301.3561448166562,293.15 +56860.0,301.3378738312483,293.15 +56880.0,301.31958552522536,293.15 +56900.0,301.30127993727456,293.15 +56920.0,301.28295710611934,293.15 +56940.0,301.2646170705199,293.15 +56960.0,301.2462598692727,293.15 +56980.0,301.22788554121047,293.15 +57000.0,301.20949412520235,293.15 +57020.0,301.1910856601534,293.15 +57040.0,301.17266018500493,293.15 +57060.0,301.15421773873413,293.15 +57080.0,301.13575836035415,293.15 +57100.0,301.1172820889139,293.15 +57120.0,301.09878896349807,293.15 +57140.0,301.080279023227,293.15 +57160.0,301.0617523072565,293.15 +57180.0,301.043208854778,293.15 +57200.0,301.02464870501836,293.15 +57220.0,301.0060718972397,293.15 +57240.0,300.98747847073923,293.15 +57260.0,300.96886846484955,293.15 +57280.0,300.9502419189382,293.15 +57300.0,300.9315988724078,293.15 +57320.0,300.9129393646958,293.15 +57340.0,300.8942634352744,293.15 +57360.0,300.8755711236508,293.15 +57380.0,300.85686246936655,293.15 +57400.0,300.83813751199796,293.15 +57420.0,300.8193962911558,293.15 +57440.0,300.8006388464851,293.15 +57460.0,300.7818652176655,293.15 +57480.0,300.76307544441056,293.15 +57500.0,300.7442695664682,293.15 +57520.0,300.7254476236203,293.15 +57540.0,300.7066096556829,293.15 +57560.0,300.6877557025056,293.15 +57580.0,300.6688858039722,293.15 +57600.0,300.65,293.15 +57620.0,300.63109833053994,293.15 +57640.0,300.6121808355766,293.15 +57660.0,300.59324755512813,293.15 +57680.0,300.57429852924577,293.15 +57700.0,300.55533379801443,293.15 +57720.0,300.536353401552,293.15 +57740.0,300.51735738000957,293.15 +57760.0,300.4983457735713,293.15 +57780.0,300.4793186224543,293.15 +57800.0,300.4602759669086,293.15 +57820.0,300.441217847217,293.15 +57840.0,300.42214430369506,293.15 +57860.0,300.4030553766908,293.15 +57880.0,300.383951106585,293.15 +57900.0,300.3648315337908,293.15 +57920.0,300.34569669875367,293.15 +57940.0,300.32654664195144,293.15 +57960.0,300.3073814038941,293.15 +57980.0,300.2882010251238,293.15 +58000.0,300.2690055462146,293.15 +58020.0,300.24979500777266,293.15 +58040.0,300.23056945043584,293.15 +58060.0,300.21132891487395,293.15 +58080.0,300.19207344178835,293.15 +58100.0,300.172803071912,293.15 +58120.0,300.1535178460095,293.15 +58140.0,300.13421780487664,293.15 +58160.0,300.1149029893408,293.15 +58180.0,300.0955734402606,293.15 +58200.0,300.0762291985255,293.15 +58220.0,300.05687030505646,293.15 +58240.0,300.0374968008052,293.15 +58260.0,300.01810872675435,293.15 +58280.0,299.99870612391743,293.15 +58300.0,299.9792890333388,293.15 +58320.0,299.9598574960932,293.15 +58340.0,299.9404115532861,293.15 +58360.0,299.92095124605345,293.15 +58380.0,299.9014766155615,293.15 +58400.0,299.8819877030069,293.15 +58420.0,299.86248454961645,293.15 +58440.0,299.8429671966471,293.15 +58460.0,299.82343568538585,293.15 +58480.0,299.80389005714954,293.15 +58500.0,299.784330353285,293.15 +58520.0,299.76475661516884,293.15 +58540.0,299.74516888420726,293.15 +58560.0,299.72556720183616,293.15 +58580.0,299.70595160952087,293.15 +58600.0,299.6863221487562,293.15 +58620.0,299.6666788610662,293.15 +58640.0,299.64702178800445,293.15 +58660.0,299.6273509711533,293.15 +58680.0,299.6076664521244,293.15 +58700.0,299.5879682725584,293.15 +58720.0,299.5682564741248,293.15 +58740.0,299.54853109852183,293.15 +58760.0,299.5287921874766,293.15 +58780.0,299.50903978274476,293.15 +58800.0,299.48927392611046,293.15 +58820.0,299.46949465938644,293.15 +58840.0,299.4497020244136,293.15 +58860.0,299.4298960630614,293.15 +58880.0,299.41007681722726,293.15 +58900.0,299.3902443288368,293.15 +58920.0,299.3703986398436,293.15 +58940.0,299.3505397922292,293.15 +58960.0,299.330667828003,293.15 +58980.0,299.31078278920216,293.15 +59000.0,299.29088471789134,293.15 +59020.0,299.27097365616305,293.15 +59040.0,299.251049646137,293.15 +59060.0,299.23111272996044,293.15 +59080.0,299.21116294980783,293.15 +59100.0,299.191200347881,293.15 +59120.0,299.17122496640883,293.15 +59140.0,299.15123684764706,293.15 +59160.0,299.1312360338787,293.15 +59180.0,299.1112225674133,293.15 +59200.0,299.0911964905873,293.15 +59220.0,299.071157845764,293.15 +59240.0,299.05110667533296,293.15 +59260.0,299.03104302171045,293.15 +59280.0,299.0109669273391,293.15 +59300.0,298.99087843468783,293.15 +59320.0,298.97077758625176,293.15 +59340.0,298.9506644245523,293.15 +59360.0,298.9305389921367,293.15 +59380.0,298.9104013315783,293.15 +59400.0,298.8902514854763,293.15 +59420.0,298.87008949645565,293.15 +59440.0,298.849915407167,293.15 +59460.0,298.82972926028646,293.15 +59480.0,298.80953109851595,293.15 +59500.0,298.7893209645825,293.15 +59520.0,298.76909890123864,293.15 +59540.0,298.74886495126214,293.15 +59560.0,298.7286191574558,293.15 +59580.0,298.70836156264755,293.15 +59600.0,298.68809220969024,293.15 +59620.0,298.6678111414617,293.15 +59640.0,298.64751840086444,293.15 +59660.0,298.62721403082566,293.15 +59680.0,298.60689807429725,293.15 +59700.0,298.5865705742555,293.15 +59720.0,298.5662315737012,293.15 +59740.0,298.5458811156594,293.15 +59760.0,298.5255192431795,293.15 +59780.0,298.5051459993349,293.15 +59800.0,298.48476142722313,293.15 +59820.0,298.4643655699657,293.15 +59840.0,298.443958470708,293.15 +59860.0,298.42354017261914,293.15 +59880.0,298.403110718892,293.15 +59900.0,298.38267015274295,293.15 +59920.0,298.3622185174119,293.15 +59940.0,298.34175585616237,293.15 +59960.0,298.3212822122809,293.15 +59980.0,298.3007976290774,293.15 +60000.0,298.280302149885,293.15 +60020.0,298.2597958180598,293.15 +60040.0,298.23927867698075,293.15 +60060.0,298.2187507700499,293.15 +60080.0,298.19821214069185,293.15 +60100.0,298.1776628323541,293.15 +60120.0,298.15710288850653,293.15 +60140.0,298.13653235264167,293.15 +60160.0,298.11595126827433,293.15 +60180.0,298.0953596789418,293.15 +60200.0,298.0747576282034,293.15 +60220.0,298.0541451596407,293.15 +60240.0,298.03352231685733,293.15 +60260.0,298.0128891434788,293.15 +60280.0,297.9922456831524,293.15 +60300.0,297.9715919795474,293.15 +60320.0,297.95092807635456,293.15 +60340.0,297.93025401728625,293.15 +60360.0,297.90956984607635,293.15 +60380.0,297.88887560648016,293.15 +60400.0,297.8681713422742,293.15 +60420.0,297.8474570972562,293.15 +60440.0,297.82673291524515,293.15 +60460.0,297.80599884008086,293.15 +60480.0,297.7852549156242,293.15 +60500.0,297.7645011857568,293.15 +60520.0,297.7437376943811,293.15 +60540.0,297.72296448542016,293.15 +60560.0,297.7021816028175,293.15 +60580.0,297.6813890905374,293.15 +60600.0,297.6605869925641,293.15 +60620.0,297.6397753529024,293.15 +60640.0,297.6189542155772,293.15 +60660.0,297.59812362463356,293.15 +60680.0,297.5772836241364,293.15 +60700.0,297.55643425817067,293.15 +60720.0,297.53557557084105,293.15 +60740.0,297.514707606272,293.15 +60760.0,297.49383040860755,293.15 +60780.0,297.4729440220113,293.15 +60800.0,297.45204849066636,293.15 +60820.0,297.43114385877493,293.15 +60840.0,297.4102301705588,293.15 +60860.0,297.3893074702587,293.15 +60880.0,297.36837580213444,293.15 +60900.0,297.3474352104649,293.15 +60920.0,297.32648573954765,293.15 +60940.0,297.3055274336993,293.15 +60960.0,297.28456033725496,293.15 +60980.0,297.2635844945684,293.15 +61000.0,297.2425999500119,293.15 +61020.0,297.22160674797607,293.15 +61040.0,297.20060493286996,293.15 +61060.0,297.1795945491208,293.15 +61080.0,297.15857564117385,293.15 +61100.0,297.13754825349247,293.15 +61120.0,297.11651243055803,293.15 +61140.0,297.0954682168696,293.15 +61160.0,297.07441565694415,293.15 +61180.0,297.0533547953162,293.15 +61200.0,297.0322856765378,290.15 +61220.0,297.0112083451786,290.15 +61240.0,296.99012284582557,290.15 +61260.0,296.9690292230829,290.15 +61280.0,296.947927521572,290.15 +61300.0,296.9268177859314,290.15 +61320.0,296.90570006081657,290.15 +61340.0,296.8845743909,290.15 +61360.0,296.8634408208708,290.15 +61380.0,296.84229939543485,290.15 +61400.0,296.82115015931487,290.15 +61420.0,296.79999315724973,290.15 +61440.0,296.778828433995,290.15 +61460.0,296.7576560343225,290.15 +61480.0,296.7364760030203,290.15 +61500.0,296.7152883848926,290.15 +61520.0,296.6940932247596,290.15 +61540.0,296.67289056745756,290.15 +61560.0,296.65168045783855,290.15 +61580.0,296.6304629407704,290.15 +61600.0,296.6092380611366,290.15 +61620.0,296.5880058638362,290.15 +61640.0,296.5667663937838,290.15 +61660.0,296.54551969590926,290.15 +61680.0,296.52426581515795,290.15 +61700.0,296.5030047964902,290.15 +61720.0,296.4817366848815,290.15 +61740.0,296.4604615253225,290.15 +61760.0,296.43917936281855,290.15 +61780.0,296.4178902423899,290.15 +61800.0,296.3965942090715,290.15 +61820.0,296.3752913079131,290.15 +61840.0,296.35398158397857,290.15 +61860.0,296.3326650823467,290.15 +61880.0,296.3113418481102,290.15 +61900.0,296.29001192637634,290.15 +61920.0,296.2686753622664,290.15 +61940.0,296.2473322009156,290.15 +61960.0,296.2259824874733,290.15 +61980.0,296.20462626710264,290.15 +62000.0,296.1832635849806,290.15 +62020.0,296.16189448629757,290.15 +62040.0,296.14051901625794,290.15 +62060.0,296.1191372200792,290.15 +62080.0,296.0977491429924,290.15 +62100.0,296.0763548302419,290.15 +62120.0,296.0549543270851,290.15 +62140.0,296.0335476787927,290.15 +62160.0,296.01213493064813,290.15 +62180.0,295.9907161279481,290.15 +62200.0,295.96929131600166,290.15 +62220.0,295.947860540131,290.15 +62240.0,295.9264238456707,290.15 +62260.0,295.9049812779679,290.15 +62280.0,295.8835328823822,290.15 +62300.0,295.86207870428547,290.15 +62320.0,295.84061878906186,290.15 +62340.0,295.8191531821076,290.15 +62360.0,295.7976819288311,290.15 +62380.0,295.77620507465247,290.15 +62400.0,295.75472266500395,290.15 +62420.0,295.7332347453293,290.15 +62440.0,295.7117413610841,290.15 +62460.0,295.69024255773536,290.15 +62480.0,295.6687383807616,290.15 +62500.0,295.64722887565284,290.15 +62520.0,295.6257140879101,290.15 +62540.0,295.6041940630459,290.15 +62560.0,295.5826688465835,290.15 +62580.0,295.5611384840574,290.15 +62600.0,295.5396030210128,290.15 +62620.0,295.5180625030059,290.15 +62640.0,295.49651697560347,290.15 +62660.0,295.4749664843828,290.15 +62680.0,295.45341107493175,290.15 +62700.0,295.4318507928487,290.15 +62720.0,295.41028568374225,290.15 +62740.0,295.3887157932311,290.15 +62760.0,295.3671411669441,290.15 +62780.0,295.34556185052037,290.15 +62800.0,295.32397788960867,290.15 +62820.0,295.30238932986765,290.15 +62840.0,295.28079621696577,290.15 +62860.0,295.25919859658103,290.15 +62880.0,295.237596514401,290.15 +62900.0,295.21599001612265,290.15 +62920.0,295.19437914745237,290.15 +62940.0,295.17276395410585,290.15 +62960.0,295.15114448180765,290.15 +62980.0,295.1295207762917,290.15 +63000.0,295.10789288330074,290.15 +63020.0,295.08626084858633,290.15 +63040.0,295.0646247179089,290.15 +63060.0,295.04298453703746,290.15 +63080.0,295.02134035174953,290.15 +63100.0,294.9996922078313,290.15 +63120.0,294.9780401510772,290.15 +63140.0,294.9563842272899,290.15 +63160.0,294.9347244822804,290.15 +63180.0,294.91306096186753,290.15 +63200.0,294.89139371187844,290.15 +63220.0,294.8697227781479,290.15 +63240.0,294.84804820651857,290.15 +63260.0,294.82637004284084,290.15 +63280.0,294.80468833297266,290.15 +63300.0,294.78300312277946,290.15 +63320.0,294.7613144581341,290.15 +63340.0,294.73962238491674,290.15 +63360.0,294.7179269490148,290.15 +63380.0,294.6962281963227,290.15 +63400.0,294.674526172742,290.15 +63420.0,294.6528209241811,290.15 +63440.0,294.6311124965553,290.15 +63460.0,294.60940093578654,290.15 +63480.0,294.5876862878033,290.15 +63500.0,294.56596859854096,290.15 +63520.0,294.54424791394086,290.15 +63540.0,294.522524279951,290.15 +63560.0,294.50079774252555,290.15 +63580.0,294.4790683476247,290.15 +63600.0,294.45733614121485,290.15 +63620.0,294.43560116926824,290.15 +63640.0,294.413863477763,290.15 +63660.0,294.392123112683,290.15 +63680.0,294.37038012001784,290.15 +63700.0,294.34863454576254,290.15 +63720.0,294.32688643591763,290.15 +63740.0,294.3051358364891,290.15 +63760.0,294.2833827934881,290.15 +63780.0,294.261627352931,290.15 +63800.0,294.2398695608391,290.15 +63820.0,294.218109463239,290.15 +63840.0,294.19634710616185,290.15 +63860.0,294.17458253564376,290.15 +63880.0,294.1528157977254,290.15 +63900.0,294.13104693845213,290.15 +63920.0,294.1092760038738,290.15 +63940.0,294.0875030400445,290.15 +63960.0,294.0657280930228,290.15 +63980.0,294.0439512088715,290.15 +64000.0,294.02217243365715,290.15 +64020.0,294.0003918134506,290.15 +64040.0,293.9786093943267,290.15 +64060.0,293.9568252223638,290.15 +64080.0,293.9350393436441,290.15 +64100.0,293.9132518042535,290.15 +64120.0,293.89146265028126,290.15 +64140.0,293.86967192782015,290.15 +64160.0,293.8478796829662,290.15 +64180.0,293.82608596181865,290.15 +64200.0,293.80429081048004,290.15 +64220.0,293.7824942750556,290.15 +64240.0,293.76069640165395,290.15 +64260.0,293.73889723638604,290.15 +64280.0,293.71709682536584,290.15 +64300.0,293.69529521471,290.15 +64320.0,293.6734924505375,290.15 +64340.0,293.6516885789699,290.15 +64360.0,293.6298836461312,290.15 +64380.0,293.6080776981473,290.15 +64400.0,293.58627078114665,290.15 +64420.0,293.5644629412595,290.15 +64440.0,293.5426542246181,290.15 +64460.0,293.5208446773566,290.15 +64480.0,293.4990343456108,290.15 +64500.0,293.4772232755184,290.15 +64520.0,293.4554115132184,290.15 +64540.0,293.43359910485134,290.15 +64560.0,293.41178609655924,290.15 +64580.0,293.38997253448525,290.15 +64600.0,293.3681584647737,290.15 +64620.0,293.34634393357015,290.15 +64640.0,293.3245289870209,290.15 +64660.0,293.3027136712734,290.15 +64680.0,293.2808980324756,290.15 +64700.0,293.2590821167763,290.15 +64720.0,293.23726597032487,290.15 +64740.0,293.2154496392712,290.15 +64760.0,293.1936331697654,290.15 +64780.0,293.1718166079581,290.15 +64800.0,293.15,290.15 +64820.0,293.1281833920419,290.15 +64840.0,293.10636683023455,290.15 +64860.0,293.08455036072877,290.15 +64880.0,293.0627340296751,290.15 +64900.0,293.04091788322364,290.15 +64920.0,293.01910196752436,290.15 +64940.0,292.9972863287266,290.15 +64960.0,292.975471012979,290.15 +64980.0,292.9536560664298,290.15 +65000.0,292.9318415352262,290.15 +65020.0,292.9100274655147,290.15 +65040.0,292.8882139034407,290.15 +65060.0,292.8664008951486,290.15 +65080.0,292.84458848678156,290.15 +65100.0,292.82277672448157,290.15 +65120.0,292.80096565438913,290.15 +65140.0,292.7791553226434,290.15 +65160.0,292.7573457753819,290.15 +65180.0,292.7355370587405,290.15 +65200.0,292.7137292188533,290.15 +65220.0,292.6919223018526,290.15 +65240.0,292.67011635386876,290.15 +65260.0,292.64831142103003,290.15 +65280.0,292.6265075494625,290.15 +65300.0,292.60470478529,290.15 +65320.0,292.5829031746341,290.15 +65340.0,292.561102763614,290.15 +65360.0,292.539303598346,290.15 +65380.0,292.51750572494433,290.15 +65400.0,292.4957091895199,290.15 +65420.0,292.4739140381813,290.15 +65440.0,292.4521203170338,290.15 +65460.0,292.4303280721798,290.15 +65480.0,292.4085373497187,290.15 +65500.0,292.38674819574646,290.15 +65520.0,292.36496065635583,290.15 +65540.0,292.34317477763614,290.15 +65560.0,292.32139060567323,290.15 +65580.0,292.29960818654934,290.15 +65600.0,292.27782756634286,290.15 +65620.0,292.25604879112853,290.15 +65640.0,292.23427190697714,290.15 +65660.0,292.21249695995544,290.15 +65680.0,292.19072399612617,290.15 +65700.0,292.1689530615478,290.15 +65720.0,292.14718420227456,290.15 +65740.0,292.12541746435625,290.15 +65760.0,292.1036528938381,290.15 +65780.0,292.08189053676097,290.15 +65800.0,292.06013043916084,290.15 +65820.0,292.03837264706897,290.15 +65840.0,292.01661720651185,290.15 +65860.0,291.99486416351084,290.15 +65880.0,291.9731135640823,290.15 +65900.0,291.9513654542374,290.15 +65920.0,291.9296198799821,290.15 +65940.0,291.90787688731695,290.15 +65960.0,291.88613652223694,290.15 +65980.0,291.8643988307317,290.15 +66000.0,291.8426638587851,290.15 +66020.0,291.82093165237524,290.15 +66040.0,291.7992022574744,290.15 +66060.0,291.7774757200489,290.15 +66080.0,291.7557520860591,290.15 +66100.0,291.73403140145905,290.15 +66120.0,291.71231371219665,290.15 +66140.0,291.6905990642135,290.15 +66160.0,291.66888750344464,290.15 +66180.0,291.6471790758188,290.15 +66200.0,291.62547382725796,290.15 +66220.0,291.60377180367726,290.15 +66240.0,291.5820730509852,290.15 +66260.0,291.5603776150832,290.15 +66280.0,291.53868554186585,290.15 +66300.0,291.5169968772205,290.15 +66320.0,291.4953116670273,290.15 +66340.0,291.4736299571591,290.15 +66360.0,291.4519517934814,290.15 +66380.0,291.43027722185207,290.15 +66400.0,291.4086062881215,290.15 +66420.0,291.3869390381324,290.15 +66440.0,291.3652755177196,290.15 +66460.0,291.34361577271005,290.15 +66480.0,291.32195984892275,290.15 +66500.0,291.30030779216867,290.15 +66520.0,291.2786596482504,290.15 +66540.0,291.25701546296256,290.15 +66560.0,291.23537528209107,290.15 +66580.0,291.2137391514136,290.15 +66600.0,291.1921071166992,290.15 +66620.0,291.17047922370824,290.15 +66640.0,291.1488555181923,290.15 +66660.0,291.1272360458941,290.15 +66680.0,291.1056208525476,290.15 +66700.0,291.0840099838773,290.15 +66720.0,291.062403485599,290.15 +66740.0,291.0408014034189,290.15 +66760.0,291.0192037830342,290.15 +66780.0,290.9976106701323,290.15 +66800.0,290.9760221103913,290.15 +66820.0,290.9544381494796,290.15 +66840.0,290.93285883305583,290.15 +66860.0,290.9112842067689,290.15 +66880.0,290.8897143162577,290.15 +66900.0,290.86814920715125,290.15 +66920.0,290.8465889250682,290.15 +66940.0,290.8250335156172,290.15 +66960.0,290.80348302439654,290.15 +66980.0,290.78193749699403,290.15 +67000.0,290.76039697898716,290.15 +67020.0,290.7388615159426,290.15 +67040.0,290.71733115341647,290.15 +67060.0,290.69580593695406,290.15 +67080.0,290.67428591208983,290.15 +67100.0,290.6527711243471,290.15 +67120.0,290.63126161923833,290.15 +67140.0,290.6097574422646,290.15 +67160.0,290.5882586389159,290.15 +67180.0,290.56676525467066,290.15 +67200.0,290.545277334996,290.15 +67220.0,290.5237949253475,290.15 +67240.0,290.5023180711689,290.15 +67260.0,290.48084681789237,290.15 +67280.0,290.45938121093815,290.15 +67300.0,290.4379212957145,290.15 +67320.0,290.41646711761774,290.15 +67340.0,290.39501872203203,290.15 +67360.0,290.37357615432927,290.15 +67380.0,290.35213945986897,290.15 +67400.0,290.3307086839983,290.15 +67420.0,290.30928387205194,290.15 +67440.0,290.2878650693518,290.15 +67460.0,290.2664523212073,290.15 +67480.0,290.24504567291484,290.15 +67500.0,290.2236451697581,290.15 +67520.0,290.2022508570075,290.15 +67540.0,290.18086277992074,290.15 +67560.0,290.159480983742,290.15 +67580.0,290.1381055137024,290.15 +67600.0,290.11673641501943,290.15 +67620.0,290.0953737328973,290.15 +67640.0,290.07401751252667,290.15 +67660.0,290.05266779908436,290.15 +67680.0,290.0313246377336,290.15 +67700.0,290.0099880736236,290.15 +67720.0,289.98865815188975,290.15 +67740.0,289.96733491765326,290.15 +67760.0,289.9460184160214,290.15 +67780.0,289.9247086920869,290.15 +67800.0,289.90340579092845,290.15 +67820.0,289.88210975761007,290.15 +67840.0,289.8608206371814,290.15 +67860.0,289.83953847467745,290.15 +67880.0,289.81826331511843,290.15 +67900.0,289.79699520350977,290.15 +67920.0,289.775734184842,290.15 +67940.0,289.7544803040907,290.15 +67960.0,289.7332336062162,290.15 +67980.0,289.71199413616375,290.15 +68000.0,289.6907619388634,290.15 +68020.0,289.6695370592296,290.15 +68040.0,289.6483195421614,290.15 +68060.0,289.6271094325424,290.15 +68080.0,289.6059067752404,290.15 +68100.0,289.5847116151074,290.15 +68120.0,289.56352399697965,290.15 +68140.0,289.54234396567745,290.15 +68160.0,289.52117156600497,290.15 +68180.0,289.5000068427502,290.15 +68200.0,289.47884984068514,290.15 +68220.0,289.4577006045651,290.15 +68240.0,289.4365591791292,290.15 +68260.0,289.4154256091,290.15 +68280.0,289.3942999391834,290.15 +68300.0,289.37318221406855,290.15 +68320.0,289.35207247842794,290.15 +68340.0,289.33097077691707,290.15 +68360.0,289.3098771541744,290.15 +68380.0,289.28879165482135,290.15 +68400.0,289.2677143234622,290.15 +68420.0,289.24664520468383,290.15 +68440.0,289.2255843430558,290.15 +68460.0,289.2045317831304,290.15 +68480.0,289.1834875694419,290.15 +68500.0,289.1624517465075,290.15 +68520.0,289.1414243588261,290.15 +68540.0,289.12040545087916,290.15 +68560.0,289.09939506713,290.15 +68580.0,289.0783932520239,290.15 +68600.0,289.0574000499881,290.15 +68620.0,289.03641550543153,290.15 +68640.0,289.015439662745,290.15 +68660.0,288.99447256630066,290.15 +68680.0,288.9735142604523,290.15 +68700.0,288.9525647895351,290.15 +68720.0,288.9316241978655,290.15 +68740.0,288.91069252974125,290.15 +68760.0,288.88976982944115,290.15 +68780.0,288.868856141225,290.15 +68800.0,288.8479515093336,290.15 +68820.0,288.82705597798866,290.15 +68840.0,288.8061695913924,290.15 +68860.0,288.78529239372796,290.15 +68880.0,288.7644244291589,290.15 +68900.0,288.7435657418293,290.15 +68920.0,288.72271637586357,290.15 +68940.0,288.7018763753664,290.15 +68960.0,288.68104578442274,290.15 +68980.0,288.6602246470976,290.15 +69000.0,288.63941300743585,290.15 +69020.0,288.6186109094626,290.15 +69040.0,288.59781839718244,290.15 +69060.0,288.5770355145798,290.15 +69080.0,288.5562623056189,290.15 +69100.0,288.53549881424317,290.15 +69120.0,288.51474508437576,290.15 +69140.0,288.4940011599191,290.15 +69160.0,288.4732670847548,290.15 +69180.0,288.45254290274374,290.15 +69200.0,288.43182865772576,290.15 +69220.0,288.4111243935198,290.15 +69240.0,288.3904301539236,290.15 +69260.0,288.3697459827137,290.15 +69280.0,288.3490719236454,290.15 +69300.0,288.32840802045257,290.15 +69320.0,288.30775431684754,290.15 +69340.0,288.2871108565212,290.15 +69360.0,288.2664776831426,290.15 +69380.0,288.24585484035924,290.15 +69400.0,288.2252423717966,290.15 +69420.0,288.20464032105815,290.15 +69440.0,288.1840487317256,290.15 +69460.0,288.1634676473583,290.15 +69480.0,288.1428971114934,290.15 +69500.0,288.12233716764587,290.15 +69520.0,288.1017878593081,290.15 +69540.0,288.08124922995006,290.15 +69560.0,288.0607213230192,290.15 +69580.0,288.0402041819402,290.15 +69600.0,288.01969785011494,290.15 +69620.0,287.99920237092255,290.15 +69640.0,287.97871778771906,290.15 +69660.0,287.9582441438376,290.15 +69680.0,287.93778148258804,290.15 +69700.0,287.917329847257,290.15 +69720.0,287.896889281108,290.15 +69740.0,287.8764598273808,290.15 +69760.0,287.85604152929193,290.15 +69780.0,287.83563443003425,290.15 +69800.0,287.8152385727768,290.15 +69820.0,287.79485400066505,290.15 +69840.0,287.7744807568205,290.15 +69860.0,287.7541188843405,290.15 +69880.0,287.73376842629875,290.15 +69900.0,287.71342942574444,290.15 +69920.0,287.6931019257027,290.15 +69940.0,287.6727859691743,290.15 +69960.0,287.6524815991355,290.15 +69980.0,287.63218885853826,290.15 +70000.0,287.6119077903097,290.15 +70020.0,287.59163843735246,290.15 +70040.0,287.57138084254416,290.15 +70060.0,287.5511350487378,290.15 +70080.0,287.5309010987613,290.15 +70100.0,287.51067903541747,290.15 +70120.0,287.490468901484,290.15 +70140.0,287.4702707397135,290.15 +70160.0,287.450084592833,290.15 +70180.0,287.4299105035443,290.15 +70200.0,287.40974851452364,290.15 +70220.0,287.3895986684216,290.15 +70240.0,287.36946100786326,290.15 +70260.0,287.34933557544764,290.15 +70280.0,287.3292224137482,290.15 +70300.0,287.3091215653121,290.15 +70320.0,287.28903307266086,290.15 +70340.0,287.2689569782895,290.15 +70360.0,287.248893324667,290.15 +70380.0,287.22884215423596,290.15 +70400.0,287.20880350941263,290.15 +70420.0,287.1887774325867,290.15 +70440.0,287.1687639661213,290.15 +70460.0,287.1487631523529,290.15 +70480.0,287.1287750335911,290.15 +70500.0,287.10879965211893,290.15 +70520.0,287.0888370501921,290.15 +70540.0,287.06888727003957,290.15 +70560.0,287.048950353863,290.15 +70580.0,287.0290263438369,290.15 +70600.0,287.0091152821086,290.15 +70620.0,286.9892172107978,290.15 +70640.0,286.96933217199694,290.15 +70660.0,286.94946020777076,290.15 +70680.0,286.92960136015637,290.15 +70700.0,286.90975567116317,290.15 +70720.0,286.8899231827727,290.15 +70740.0,286.87010393693856,290.15 +70760.0,286.85029797558633,290.15 +70780.0,286.8305053406135,290.15 +70800.0,286.8107260738895,290.15 +70820.0,286.7909602172552,290.15 +70840.0,286.77120781252336,290.15 +70860.0,286.7514689014781,290.15 +70880.0,286.7317435258752,290.15 +70900.0,286.71203172744157,290.15 +70920.0,286.69233354787553,290.15 +70940.0,286.6726490288467,290.15 +70960.0,286.65297821199556,290.15 +70980.0,286.63332113893375,290.15 +71000.0,286.6136778512438,290.15 +71020.0,286.5940483904791,290.15 +71040.0,286.5744327981638,290.15 +71060.0,286.5548311157927,290.15 +71080.0,286.5352433848311,290.15 +71100.0,286.51566964671497,290.15 +71120.0,286.49610994285047,290.15 +71140.0,286.4765643146141,290.15 +71160.0,286.45703280335283,290.15 +71180.0,286.4375154503835,290.15 +71200.0,286.418012296993,290.15 +71220.0,286.3985233844385,290.15 +71240.0,286.3790487539465,290.15 +71260.0,286.3595884467139,290.15 +71280.0,286.3401425039068,290.15 +71300.0,286.3207109666612,290.15 +71320.0,286.3012938760825,290.15 +71340.0,286.2818912732456,290.15 +71360.0,286.2625031991948,290.15 +71380.0,286.24312969494355,290.15 +71400.0,286.2237708014745,290.15 +71420.0,286.20442655973943,290.15 +71440.0,286.18509701065915,290.15 +71460.0,286.1657821951233,290.15 +71480.0,286.14648215399046,290.15 +71500.0,286.127196928088,290.15 +71520.0,286.1079265582116,290.15 +71540.0,286.088671085126,290.15 +71560.0,286.0694305495641,290.15 +71580.0,286.05020499222735,290.15 +71600.0,286.03099445378535,290.15 +71620.0,286.01179897487617,290.15 +71640.0,285.99261859610584,290.15 +71660.0,285.9734533580485,290.15 +71680.0,285.9543033012463,290.15 +71700.0,285.9351684662092,290.15 +71720.0,285.91604889341494,290.15 +71740.0,285.89694462330914,290.15 +71760.0,285.8778556963049,290.15 +71780.0,285.85878215278296,290.15 +71800.0,285.83972403309133,290.15 +71820.0,285.82068137754567,290.15 +71840.0,285.8016542264287,290.15 +71860.0,285.7826426199904,290.15 +71880.0,285.76364659844796,290.15 +71900.0,285.7446662019855,290.15 +71920.0,285.7257014707542,290.15 +71940.0,285.7067524448718,290.15 +71960.0,285.68781916442333,290.15 +71980.0,285.66890166946,290.15 +72000.0,285.65,290.15 +72020.0,285.63111419602774,290.15 +72040.0,285.6122442974943,290.15 +72060.0,285.5933903443171,290.15 +72080.0,285.57455237637964,290.15 +72100.0,285.5557304335318,290.15 +72120.0,285.5369245555894,290.15 +72140.0,285.51813478233447,290.15 +72160.0,285.4993611535148,290.15 +72180.0,285.48060370884417,290.15 +72200.0,285.461862488002,290.15 +72220.0,285.4431375306334,290.15 +72240.0,285.42442887634917,290.15 +72260.0,285.40573656472554,290.15 +72280.0,285.3870606353042,290.15 +72300.0,285.36840112759216,290.15 +72320.0,285.34975808106174,290.15 +72340.0,285.3311315351504,290.15 +72360.0,285.3125215292607,290.15 +72380.0,285.2939281027603,290.15 +72400.0,285.2753512949816,290.15 +72420.0,285.25679114522194,290.15 +72440.0,285.23824769274347,290.15 +72460.0,285.21972097677303,290.15 +72480.0,285.2012110365019,290.15 +72500.0,285.18271791108606,290.15 +72520.0,285.1642416396458,290.15 +72540.0,285.1457822612658,290.15 +72560.0,285.127339814995,290.15 +72580.0,285.10891433984654,290.15 +72600.0,285.0905058747976,290.15 +72620.0,285.0721144587895,290.15 +72640.0,285.0537401307273,290.15 +72660.0,285.0353829294801,290.15 +72680.0,285.0170428938806,290.15 +72700.0,284.9987200627254,290.15 +72720.0,284.9804144747746,290.15 +72740.0,284.9621261687517,290.15 +72760.0,284.94385518334377,290.15 +72780.0,284.9256015572013,290.15 +72800.0,284.9073653289379,290.15 +72820.0,284.8891465371305,290.15 +72840.0,284.87094522031913,290.15 +72860.0,284.8527614170068,290.15 +72880.0,284.8345951656594,290.15 +72900.0,284.81644650470594,290.15 +72920.0,284.79831547253804,290.15 +72940.0,284.78020210751,290.15 +72960.0,284.7621064479388,290.15 +72980.0,284.744028532104,290.15 +73000.0,284.7259683982476,290.15 +73020.0,284.70792608457396,290.15 +73040.0,284.6899016292498,290.15 +73060.0,284.67189507040393,290.15 +73080.0,284.6539064461275,290.15 +73100.0,284.63593579447354,290.15 +73120.0,284.6179831534572,290.15 +73140.0,284.6000485610554,290.15 +73160.0,284.58213205520707,290.15 +73180.0,284.5642336738126,290.15 +73200.0,284.5463534547343,290.15 +73220.0,284.5284914357959,290.15 +73240.0,284.51064765478276,290.15 +73260.0,284.49282214944145,290.15 +73280.0,284.4750149574802,290.15 +73300.0,284.45722611656817,290.15 +73320.0,284.43945566433587,290.15 +73340.0,284.42170363837494,290.15 +73360.0,284.40397007623795,290.15 +73380.0,284.38625501543845,290.15 +73400.0,284.36855849345085,290.15 +73420.0,284.3508805477104,290.15 +73440.0,284.33322121561287,290.15 +73460.0,284.3155805345149,290.15 +73480.0,284.2979585417335,290.15 +73500.0,284.28035527454625,290.15 +73520.0,284.262770770191,290.15 +73540.0,284.24520506586606,290.15 +73560.0,284.22765819872984,290.15 +73580.0,284.210130205901,290.15 +73600.0,284.1926211244582,290.15 +73620.0,284.1751309914401,290.15 +73640.0,284.1576598438453,290.15 +73660.0,284.1402077186323,290.15 +73680.0,284.1227746527193,290.15 +73700.0,284.10536068298404,290.15 +73720.0,284.0879658462641,290.15 +73740.0,284.07059017935654,290.15 +73760.0,284.0532337190178,290.15 +73780.0,284.03589650196363,290.15 +73800.0,284.0185785648692,290.15 +73820.0,284.0012799443688,290.15 +73840.0,283.984000677056,290.15 +73860.0,283.96674079948326,290.15 +73880.0,283.9495003481621,290.15 +73900.0,283.932279359563,290.15 +73920.0,283.9150778701151,290.15 +73940.0,283.8978959162065,290.15 +73960.0,283.8807335341839,290.15 +73980.0,283.86359076035245,290.15 +74000.0,283.84646763097606,290.15 +74020.0,283.82936418227695,290.15 +74040.0,283.8122804504357,290.15 +74060.0,283.7952164715912,290.15 +74080.0,283.77817228184057,290.15 +74100.0,283.7611479172391,290.15 +74120.0,283.74414341380003,290.15 +74140.0,283.72715880749473,290.15 +74160.0,283.71019413425245,290.15 +74180.0,283.6932494299601,290.15 +74200.0,283.6763247304625,290.15 +74220.0,283.65942007156224,290.15 +74240.0,283.64253548901934,290.15 +74260.0,283.62567101855143,290.15 +74280.0,283.6088266958335,290.15 +74300.0,283.59200255649813,290.15 +74320.0,283.57519863613504,290.15 +74340.0,283.5584149702912,290.15 +74360.0,283.54165159447075,290.15 +74380.0,283.5249085441349,290.15 +74400.0,283.5081858547019,290.15 +74420.0,283.49148356154683,290.15 +74440.0,283.4748017000018,290.15 +74460.0,283.4581403053555,290.15 +74480.0,283.4414994128535,290.15 +74500.0,283.4248790576978,290.15 +74520.0,283.4082792750472,290.15 +74540.0,283.3917001000168,290.15 +74560.0,283.37514156767816,290.15 +74580.0,283.35860371305915,290.15 +74600.0,283.3420865711439,290.15 +74620.0,283.3255901768729,290.15 +74640.0,283.30911456514235,290.15 +74660.0,283.29265977080496,290.15 +74680.0,283.27622582866906,290.15 +74700.0,283.25981277349894,290.15 +74720.0,283.24342064001485,290.15 +74740.0,283.22704946289264,290.15 +74760.0,283.21069927676393,290.15 +74780.0,283.1943701162158,290.15 +74800.0,283.17806201579094,290.15 +74820.0,283.1617750099875,290.15 +74840.0,283.14550913325894,290.15 +74860.0,283.1292644200141,290.15 +74880.0,283.1130409046171,290.15 +74900.0,283.09683862138706,290.15 +74920.0,283.08065760459823,290.15 +74940.0,283.06449788847993,290.15 +74960.0,283.0483595072165,290.15 +74980.0,283.0322424949469,290.15 +75000.0,283.01614688576507,290.15 +75020.0,283.0000727137197,290.15 +75040.0,282.98402001281397,290.15 +75060.0,282.96798881700585,290.15 +75080.0,282.95197916020766,290.15 +75100.0,282.93599107628614,290.15 +75120.0,282.9200245990625,290.15 +75140.0,282.9040797623122,290.15 +75160.0,282.88815659976495,290.15 +75180.0,282.8722551451046,290.15 +75200.0,282.85637543196896,290.15 +75220.0,282.84051749395,290.15 +75240.0,282.8246813645937,290.15 +75260.0,282.80886707739955,290.15 +75280.0,282.7930746658212,290.15 +75300.0,282.7773041632659,290.15 +75320.0,282.76155560309456,290.15 +75340.0,282.7458290186216,290.15 +75360.0,282.730124443115,290.15 +75380.0,282.7144419097963,290.15 +75400.0,282.69878145184015,290.15 +75420.0,282.6831431023748,290.15 +75440.0,282.66752689448145,290.15 +75460.0,282.6519328611948,290.15 +75480.0,282.6363610355022,290.15 +75500.0,282.62081145034443,290.15 +75520.0,282.60528413861505,290.15 +75540.0,282.58977913316045,290.15 +75560.0,282.5742964667799,290.15 +75580.0,282.5588361722255,290.15 +75600.0,282.5433982822018,290.15 +75620.0,282.5279828293661,290.15 +75640.0,282.5125898463283,290.15 +75660.0,282.4972193656507,290.15 +75680.0,282.48187141984795,290.15 +75700.0,282.466546041387,290.15 +75720.0,282.4512432626872,290.15 +75740.0,282.43596311612015,290.15 +75760.0,282.4207056340092,290.15 +75780.0,282.40547084863016,290.15 +75800.0,282.39025879221066,290.15 +75820.0,282.37506949693017,290.15 +75840.0,282.3599029949202,290.15 +75860.0,282.3447593182639,290.15 +75880.0,282.3296384989962,290.15 +75900.0,282.31454056910366,290.15 +75920.0,282.29946556052437,290.15 +75940.0,282.284413505148,290.15 +75960.0,282.26938443481566,290.15 +75980.0,282.25437838131984,290.15 +76000.0,282.2393953764042,290.15 +76020.0,282.22443545176395,290.15 +76040.0,282.2094986390452,290.15 +76060.0,282.1945849698452,290.15 +76080.0,282.17969447571244,290.15 +76100.0,282.1648271881461,290.15 +76120.0,282.1499831385965,290.15 +76140.0,282.1351623584647,290.15 +76160.0,282.12036487910257,290.15 +76180.0,282.10559073181264,290.15 +76200.0,282.0908399478481,290.15 +76220.0,282.07611255841283,290.15 +76240.0,282.06140859466103,290.15 +76260.0,282.0467280876975,290.15 +76280.0,282.03207106857735,290.15 +76300.0,282.017437568306,290.15 +76320.0,282.00282761783905,290.15 +76340.0,281.98824124808255,290.15 +76360.0,281.97367848989234,290.15 +76380.0,281.9591393740745,290.15 +76400.0,281.944623931385,290.15 +76420.0,281.9301321925299,290.15 +76440.0,281.91566418816495,290.15 +76460.0,281.9012199488957,290.15 +76480.0,281.8867995052775,290.15 +76500.0,281.8724028878153,290.15 +76520.0,281.85803012696374,290.15 +76540.0,281.84368125312693,290.15 +76560.0,281.8293562966584,290.15 +76580.0,281.8150552878612,290.15 +76600.0,281.8007782569876,290.15 +76620.0,281.78652523423926,290.15 +76640.0,281.77229624976695,290.15 +76660.0,281.7580913336707,290.15 +76680.0,281.7439105159995,290.15 +76700.0,281.7297538267515,290.15 +76720.0,281.7156212958737,290.15 +76740.0,281.70151295326207,290.15 +76760.0,281.68742882876126,290.15 +76780.0,281.67336895216494,290.15 +76800.0,281.6593333532153,290.15 +76820.0,281.6453220616032,290.15 +76840.0,281.63133510696815,290.15 +76860.0,281.6173725188981,290.15 +76880.0,281.60343432692946,290.15 +76900.0,281.5895205605471,290.15 +76920.0,281.5756312491842,290.15 +76940.0,281.5617664222221,290.15 +76960.0,281.5479261089905,290.15 +76980.0,281.5341103387672,290.15 +77000.0,281.520319140778,290.15 +77020.0,281.5065525441968,290.15 +77040.0,281.4928105781454,290.15 +77060.0,281.4790932716936,290.15 +77080.0,281.4654006538589,290.15 +77100.0,281.45173275360673,290.15 +77120.0,281.4380895998501,290.15 +77140.0,281.42447122144966,290.15 +77160.0,281.4108776472138,290.15 +77180.0,281.3973089058982,290.15 +77200.0,281.38376502620633,290.15 +77220.0,281.3702460367888,290.15 +77240.0,281.3567519662437,290.15 +77260.0,281.34328284311624,290.15 +77280.0,281.3298386958991,290.15 +77300.0,281.31641955303206,290.15 +77320.0,281.30302544290186,290.15 +77340.0,281.28965639384234,290.15 +77360.0,281.2763124341344,290.15 +77380.0,281.2629935920059,290.15 +77400.0,281.24969989563147,290.15 +77420.0,281.2364313731325,290.15 +77440.0,281.22318805257726,290.15 +77460.0,281.2099699619806,290.15 +77480.0,281.19677712930417,290.15 +77500.0,281.183609582456,290.15 +77520.0,281.17046734929056,290.15 +77540.0,281.15735045760914,290.15 +77560.0,281.14425893515903,290.15 +77580.0,281.13119280963406,290.15 +77600.0,281.11815210867434,290.15 +77620.0,281.1051368598661,290.15 +77640.0,281.0921470907417,290.15 +77660.0,281.07918282877984,290.15 +77680.0,281.066244101405,290.15 +77700.0,281.05333093598773,290.15 +77720.0,281.0404433598446,290.15 +77740.0,281.02758140023786,290.15 +77760.0,281.01474508437576,290.15 +77780.0,281.0019344394122,290.15 +77800.0,280.9891494924468,290.15 +77820.0,280.9763902705248,290.15 +77840.0,280.96365680063707,290.15 +77860.0,280.9509491097199,290.15 +77880.0,280.9382672246552,290.15 +77900.0,280.9256111722702,290.15 +77920.0,280.91298097933736,290.15 +77940.0,280.9003766725748,290.15 +77960.0,280.8877982786455,290.15 +77980.0,280.8752458241578,290.15 +78000.0,280.8627193356651,290.15 +78020.0,280.850218839666,290.15 +78040.0,280.837744362604,290.15 +78060.0,280.8252959308675,290.15 +78080.0,280.81287357079003,290.15 +78100.0,280.80047730864976,290.15 +78120.0,280.7881071706697,290.15 +78140.0,280.7757631830177,290.15 +78160.0,280.76344537180614,290.15 +78180.0,280.75115376309213,290.15 +78200.0,280.73888838287735,290.15 +78220.0,280.72664925710785,290.15 +78240.0,280.71443641167434,290.15 +78260.0,280.70224987241187,290.15 +78280.0,280.6900896650998,290.15 +78300.0,280.6779558154618,290.15 +78320.0,280.6658483491658,290.15 +78340.0,280.65376729182395,290.15 +78360.0,280.64171266899245,290.15 +78380.0,280.62968450617166,290.15 +78400.0,280.6176828288059,290.15 +78420.0,280.6057076622836,290.15 +78440.0,280.5937590319369,290.15 +78460.0,280.5818369630419,290.15 +78480.0,280.5699414808186,290.15 +78500.0,280.5580726104307,290.15 +78520.0,280.5462303769855,290.15 +78540.0,280.5344148055341,290.15 +78560.0,280.5226259210711,290.15 +78580.0,280.51086374853475,290.15 +78600.0,280.4991283128067,290.15 +78620.0,280.487419638712,290.15 +78640.0,280.4757377510193,290.15 +78660.0,280.46408267444036,290.15 +78680.0,280.45245443363035,290.15 +78700.0,280.44085305318754,290.15 +78720.0,280.42927855765356,290.15 +78740.0,280.4177309715131,290.15 +78760.0,280.4062103191938,290.15 +78780.0,280.39471662506656,290.15 +78800.0,280.38324991344496,290.15 +78820.0,280.3718102085858,290.15 +78840.0,280.3603975346886,290.15 +78860.0,280.34901191589563,290.15 +78880.0,280.3376533762921,290.15 +78900.0,280.32632193990577,290.15 +78920.0,280.3150176307072,290.15 +78940.0,280.3037404726095,290.15 +78960.0,280.2924904894683,290.15 +78980.0,280.28126770508186,290.15 +79000.0,280.27007214319076,290.15 +79020.0,280.2589038274782,290.15 +79040.0,280.2477627815695,290.15 +79060.0,280.23664902903244,290.15 +79080.0,280.2255625933771,290.15 +79100.0,280.2145034980556,290.15 +79120.0,280.2034717664624,290.15 +79140.0,280.19246742193405,290.15 +79160.0,280.18149048774904,290.15 +79180.0,280.17054098712794,290.15 +79200.0,280.1596189432334,290.15 +79220.0,280.14872437916983,290.15 +79240.0,280.1378573179836,290.15 +79260.0,280.12701778266285,290.15 +79280.0,280.11620579613754,290.15 +79300.0,280.1054213812793,290.15 +79320.0,280.0946645609015,290.15 +79340.0,280.08393535775906,290.15 +79360.0,280.07323379454857,290.15 +79380.0,280.06255989390803,290.15 +79400.0,280.05191367841707,290.15 +79420.0,280.0412951705966,290.15 +79440.0,280.03070439290906,290.15 +79460.0,280.02014136775813,290.15 +79480.0,280.00960611748883,290.15 +79500.0,279.99909866438736,290.15 +79520.0,279.98861903068126,290.15 +79540.0,279.9781672385391,290.15 +79560.0,279.9677433100705,290.15 +79580.0,279.9573472673263,290.15 +79600.0,279.94697913229834,290.15 +79620.0,279.9366389269192,290.15 +79640.0,279.92632667306265,290.15 +79660.0,279.91604239254315,290.15 +79680.0,279.90578610711606,290.15 +79700.0,279.89555783847754,290.15 +79720.0,279.8853576082645,290.15 +79740.0,279.87518543805436,290.15 +79760.0,279.8650413493654,290.15 +79780.0,279.8549253636564,290.15 +79800.0,279.84483750232664,290.15 +79820.0,279.8347777867161,290.15 +79840.0,279.8247462381049,290.15 +79860.0,279.8147428777139,290.15 +79880.0,279.8047677267042,290.15 +79900.0,279.79482080617714,290.15 +79920.0,279.78490213717447,290.15 +79940.0,279.7750117406781,290.15 +79960.0,279.76514963761014,290.15 +79980.0,279.75531584883294,290.15 +80000.0,279.7455103951488,290.15 +80020.0,279.7357332973002,290.15 +80040.0,279.7259845759696,290.15 +80060.0,279.7162642517794,290.15 +80080.0,279.70657234529205,290.15 +80100.0,279.69690887700966,290.15 +80120.0,279.6872738673744,290.15 +80140.0,279.67766733676814,290.15 +80160.0,279.66808930551247,290.15 +80180.0,279.65853979386884,290.15 +80200.0,279.64901882203816,290.15 +80220.0,279.6395264101612,290.15 +80240.0,279.6300625783181,290.15 +80260.0,279.6206273465286,290.15 +80280.0,279.61122073475207,290.15 +80300.0,279.6018427628872,290.15 +80320.0,279.59249345077217,290.15 +80340.0,279.58317281818444,290.15 +80360.0,279.57388088484095,290.15 +80380.0,279.56461767039775,290.15 +80400.0,279.5553831944502,290.15 +80420.0,279.54617747653305,290.15 +80440.0,279.53700053611993,290.15 +80460.0,279.52785239262374,290.15 +80480.0,279.51873306539653,290.15 +80500.0,279.5096425737292,290.15 +80520.0,279.5005809368518,290.15 +80540.0,279.4915481739334,290.15 +80560.0,279.4825443040817,290.15 +80580.0,279.47356934634365,290.15 +80600.0,279.46462331970474,290.15 +80620.0,279.4557062430895,290.15 +80640.0,279.44681813536096,290.15 +80660.0,279.4379590153211,290.15 +80680.0,279.42912890171044,290.15 +80700.0,279.42032781320825,290.15 +80720.0,279.4115557684323,290.15 +80740.0,279.402812785939,290.15 +80760.0,279.3940988842231,290.15 +80780.0,279.3854140817181,290.15 +80800.0,279.3767583967959,290.15 +80820.0,279.3681318477665,290.15 +80840.0,279.3595344528786,290.15 +80860.0,279.3509662303192,290.15 +80880.0,279.3424271982134,290.15 +80900.0,279.3339173746246,290.15 +80920.0,279.3254367775546,290.15 +80940.0,279.3169854249432,290.15 +80960.0,279.30856333466835,290.15 +80980.0,279.3001705245461,290.15 +81000.0,279.29180701233065,290.15 +81020.0,279.28347281571416,290.15 +81040.0,279.27516795232674,290.15 +81060.0,279.26689243973647,290.15 +81080.0,279.2586462954494,290.15 +81100.0,279.2504295369094,290.15 +81120.0,279.24224218149817,290.15 +81140.0,279.23408424653525,290.15 +81160.0,279.2259557492779,290.15 +81180.0,279.2178567069211,290.15 +81200.0,279.20978713659764,290.15 +81220.0,279.20174705537784,290.15 +81240.0,279.1937364802696,290.15 +81260.0,279.1857554282186,290.15 +81280.0,279.17780391610785,290.15 +81300.0,279.169881960758,290.15 +81320.0,279.16198957892715,290.15 +81340.0,279.1541267873108,290.15 +81360.0,279.14629360254196,290.15 +81380.0,279.13849004119083,290.15 +81400.0,279.13071611976517,290.15 +81420.0,279.1229718547098,290.15 +81440.0,279.115257262407,290.15 +81460.0,279.1075723591762,290.15 +81480.0,279.099917161274,290.15 +81500.0,279.09229168489424,290.15 +81520.0,279.0846959461678,290.15 +81540.0,279.0771299611627,290.15 +81560.0,279.06959374588405,290.15 +81580.0,279.0620873162739,290.15 +81600.0,279.05461068821137,290.15 +81620.0,279.04716387751245,290.15 +81640.0,279.0397468999302,290.15 +81660.0,279.0323597711544,290.15 +81680.0,279.02500250681186,290.15 +81700.0,279.017675122466,290.15 +81720.0,279.0103776336173,290.15 +81740.0,279.00311005570273,290.15 +81760.0,278.99587240409625,290.15 +81780.0,278.9886646941082,290.15 +81800.0,278.9814869409859,290.15 +81820.0,278.9743391599131,290.15 +81840.0,278.9672213660102,290.15 +81860.0,278.96013357433424,290.15 +81880.0,278.9530757998786,290.15 +81900.0,278.9460480575734,290.15 +81920.0,278.93905036228506,290.15 +81940.0,278.93208272881645,290.15 +81960.0,278.925145171907,290.15 +81980.0,278.91823770623233,290.15 +82000.0,278.9113603464045,290.15 +82020.0,278.9045131069718,290.15 +82040.0,278.897696002419,290.15 +82060.0,278.89090904716693,290.15 +82080.0,278.8841522555727,290.15 +82100.0,278.87742564192956,290.15 +82120.0,278.87072922046707,290.15 +82140.0,278.86406300535083,290.15 +82160.0,278.85742701068244,290.15 +82180.0,278.85082125049973,290.15 +82200.0,278.8442457387766,290.15 +82220.0,278.83770048942273,290.15 +82240.0,278.831185516284,290.15 +82260.0,278.8247008331422,290.15 +82280.0,278.81824645371495,290.15 +82300.0,278.8118223916559,290.15 +82320.0,278.80542866055447,290.15 +82340.0,278.7990652739359,290.15 +82360.0,278.7927322452614,290.15 +82380.0,278.7864295879278,290.15 +82400.0,278.7801573152677,290.15 +82420.0,278.7739154405494,290.15 +82440.0,278.7677039769771,290.15 +82460.0,278.7615229376904,290.15 +82480.0,278.7553723357647,290.15 +82500.0,278.74925218421106,290.15 +82520.0,278.74316249597587,290.15 +82540.0,278.7371032839414,290.15 +82560.0,278.7310745609252,290.15 +82580.0,278.72507633968047,290.15 +82600.0,278.71910863289577,290.15 +82620.0,278.7131714531953,290.15 +82640.0,278.7072648131384,290.15 +82660.0,278.7013887252201,290.15 +82680.0,278.69554320187063,290.15 +82700.0,278.6897282554556,290.15 +82720.0,278.6839438982759,290.15 +82740.0,278.67819014256776,290.15 +82760.0,278.67246700050276,290.15 +82780.0,278.6667744841875,290.15 +82800.0,278.66111260566396,290.15 +82820.0,278.6554813769093,290.15 +82840.0,278.6498808098358,290.15 +82860.0,278.6443109162908,290.15 +82880.0,278.638771708057,290.15 +82900.0,278.63326319685194,290.15 +82920.0,278.6277853943284,290.15 +82940.0,278.62233831207396,290.15 +82960.0,278.61692196161147,290.15 +82980.0,278.61153635439865,290.15 +83000.0,278.60618150182825,290.15 +83020.0,278.60085741522784,290.15 +83040.0,278.59556410586003,290.15 +83060.0,278.59030158492226,290.15 +83080.0,278.5850698635469,290.15 +83100.0,278.57986895280106,290.15 +83120.0,278.57469886368676,290.15 +83140.0,278.56955960714083,290.15 +83160.0,278.5644511940348,290.15 +83180.0,278.55937363517506,290.15 +83200.0,278.55432694130263,290.15 +83220.0,278.5493111230933,290.15 +83240.0,278.54432619115744,290.15 +83260.0,278.5393721560402,290.15 +83280.0,278.53444902822145,290.15 +83300.0,278.52955681811545,290.15 +83320.0,278.5246955360712,290.15 +83340.0,278.51986519237227,290.15 +83360.0,278.5150657972368,290.15 +83380.0,278.5102973608173,290.15 +83400.0,278.505559893201,290.15 +83420.0,278.5008534044095,290.15 +83440.0,278.4961779043989,290.15 +83460.0,278.4915334030598,290.15 +83480.0,278.4869199102171,290.15 +83500.0,278.4823374356302,290.15 +83520.0,278.4777859889929,290.15 +83540.0,278.47326557993324,290.15 +83560.0,278.4687762180138,290.15 +83580.0,278.46431791273125,290.15 +83600.0,278.4598906735167,290.15 +83620.0,278.4554945097356,290.15 +83640.0,278.45112943068756,290.15 +83660.0,278.4467954456064,290.15 +83680.0,278.44249256366027,290.15 +83700.0,278.43822079395153,290.15 +83720.0,278.4339801455166,290.15 +83740.0,278.42977062732615,290.15 +83760.0,278.425592248285,290.15 +83780.0,278.42144501723214,290.15 +83800.0,278.4173289429405,290.15 +83820.0,278.4132440341173,290.15 +83840.0,278.4091902994038,290.15 +83860.0,278.4051677473751,290.15 +83880.0,278.40117638654067,290.15 +83900.0,278.3972162253437,290.15 +83920.0,278.3932872721616,290.15 +83940.0,278.3893895353056,290.15 +83960.0,278.38552302302105,290.15 +83980.0,278.3816877434871,290.15 +84000.0,278.37788370481684,290.15 +84020.0,278.3741109150575,290.15 +84040.0,278.37036938218984,290.15 +84060.0,278.3666591141288,290.15 +84080.0,278.3629801187231,290.15 +84100.0,278.35933240375516,290.15 +84120.0,278.3557159769415,290.15 +84140.0,278.3521308459322,290.15 +84160.0,278.3485770183113,290.15 +84180.0,278.3450545015965,290.15 +84200.0,278.34156330323935,290.15 +84220.0,278.33810343062515,290.15 +84240.0,278.3346748910729,290.15 +84260.0,278.33127769183534,290.15 +84280.0,278.32791184009886,290.15 +84300.0,278.32457734298356,290.15 +84320.0,278.3212742075433,290.15 +84340.0,278.3180024407655,290.15 +84360.0,278.31476204957124,290.15 +84380.0,278.3115530408152,290.15 +84400.0,278.3083754212858,290.15 +84420.0,278.30522919770493,290.15 +84440.0,278.30211437672807,290.15 +84460.0,278.2990309649444,290.15 +84480.0,278.2959789688764,290.15 +84500.0,278.2929583949804,290.15 +84520.0,278.28996924964616,290.15 +84540.0,278.2870115391967,290.15 +84560.0,278.284085269889,290.15 +84580.0,278.2811904479131,290.15 +84600.0,278.2783270793928,290.15 +84620.0,278.2754951703853,290.15 +84640.0,278.27269472688107,290.15 +84660.0,278.26992575480426,290.15 +84680.0,278.26718826001235,290.15 +84700.0,278.2644822482962,290.15 +84720.0,278.26180772538015,290.15 +84740.0,278.25916469692186,290.15 +84760.0,278.25655316851237,290.15 +84780.0,278.25397314567607,290.15 +84800.0,278.25142463387084,290.15 +84820.0,278.2489076384877,290.15 +84840.0,278.24642216485114,290.15 +84860.0,278.243968218219,290.15 +84880.0,278.2415458037822,290.15 +84900.0,278.2391549266652,290.15 +84920.0,278.2367955919256,290.15 +84940.0,278.23446780455447,290.15 +84960.0,278.2321715694759,290.15 +84980.0,278.22990689154733,290.15 +85000.0,278.2276737755595,290.15 +85020.0,278.2254722262363,290.15 +85040.0,278.2233022482349,290.15 +85060.0,278.2211638461457,290.15 +85080.0,278.2190570244923,290.15 +85100.0,278.21698178773136,290.15 +85120.0,278.2149381402529,290.15 +85140.0,278.21292608638004,290.15 +85160.0,278.2109456303691,290.15 +85180.0,278.2089967764095,290.15 +85200.0,278.2070795286238,290.15 +85220.0,278.20519389106784,290.15 +85240.0,278.2033398677304,290.15 +85260.0,278.20151746253356,290.15 +85280.0,278.1997266793324,290.15 +85300.0,278.19796752191513,290.15 +85320.0,278.19623999400307,290.15 +85340.0,278.1945440992506,290.15 +85360.0,278.1928798412453,290.15 +85380.0,278.1912472235077,290.15 +85400.0,278.1896462494914,290.15 +85420.0,278.1880769225831,290.15 +85440.0,278.1865392461026,290.15 +85460.0,278.1850332233027,290.15 +85480.0,278.1835588573692,290.15 +85500.0,278.1821161514209,290.15 +85520.0,278.18070510850987,290.15 +85540.0,278.1793257316209,290.15 +85560.0,278.177978023672,290.15 +85580.0,278.176661987514,290.15 +85600.0,278.17537762593093,290.15 +85620.0,278.1741249416397,290.15 +85640.0,278.1729039372903,290.15 +85660.0,278.17171461546553,290.15 +85680.0,278.17055697868136,290.15 +85700.0,278.1694310293866,290.15 +85720.0,278.16833676996316,290.15 +85740.0,278.1672742027257,290.15 +85760.0,278.1662433299221,290.15 +85780.0,278.165244153733,290.15 +85800.0,278.1642766762721,290.15 +85820.0,278.163340899586,290.15 +85840.0,278.16243682565414,290.15 +85860.0,278.16156445638916,290.15 +85880.0,278.1607237936363,290.15 +85900.0,278.159914839174,290.15 +85920.0,278.1591375947135,290.15 +85940.0,278.15839206189906,290.15 +85960.0,278.1576782423076,290.15 +85980.0,278.15699613744926,290.15 +86000.0,278.15634574876697,290.15 +86020.0,278.1557270776365,290.15 +86040.0,278.15514012536664,290.15 +86060.0,278.15458489319894,290.15 +86080.0,278.15406138230804,290.15 +86100.0,278.15356959380136,290.15 +86120.0,278.15310952871914,290.15 +86140.0,278.1526811880347,290.15 +86160.0,278.1522845726541,290.15 +86180.0,278.1519196834164,290.15 +86200.0,278.15158652109335,290.15 +86220.0,278.15128508638986,290.15 +86240.0,278.15101537994354,290.15 +86260.0,278.15077740232493,290.15 +86280.0,278.1505711540374,290.15 +86300.0,278.1503966355173,290.15 +86320.0,278.1502538471338,290.15 +86340.0,278.150142789189,290.15 +86360.0,278.1500634619177,290.15 +86380.0,278.1500158654878,290.15 +86400.0,278.15,290.15 diff --git a/tests/test_examples.py b/tests/test_examples.py index 2927211a..a0d113d1 100644 --- a/tests/test_examples.py +++ b/tests/test_examples.py @@ -32,10 +32,10 @@ def test_tst_example(self): with_plot=False) def test_fmu_example(self): - """Execute e2_fmu_example.py""" + """Execute e2a_fmu_continuous_example.py""" if "linux" in sys.platform: self.skipTest("Not supported in CI") - self._run_example(file="e2_fmu_example.py", + self._run_example(file="e2a_fmu_continuous_example.py", func_name='main', with_plot=False, log_fmu=False, @@ -46,3 +46,12 @@ def test_opt_example(self): self._run_example(file="e4_optimization_example.py", func_name='main', with_plot=False) + + def test_fmu_discrete_example(self): + """Execute e2b_fmu_discrete_example.py""" + if "linux" in sys.platform: + self.skipTest("Not supported in CI") + self._run_example(file="e2b_fmu_discrete_example.py", + func_name='main', + with_plot=False, + log_fmu=False) diff --git a/tests/test_simulationapi.py b/tests/test_simulationapi.py index 0919e3dc..b387275c 100644 --- a/tests/test_simulationapi.py +++ b/tests/test_simulationapi.py @@ -7,8 +7,9 @@ from pathlib import Path import shutil import numpy as np +import pandas as pd from pydantic import ValidationError -from ebcpy.simulationapi import dymola_api, fmu, Variable +from ebcpy.simulationapi import dymola, fmu, Variable from ebcpy import TimeSeriesData @@ -63,8 +64,46 @@ def setUp(self) -> None: if self.__class__ == PartialTestSimAPI: self.skipTest("Just a partial class") + def test_set_cd(self): + """Test set_cd functionality of dymola api""" + # Test the setting of the function + self.sim_api.set_cd(self.data_dir) + self.assertEqual(self.data_dir, self.sim_api.cd) + + def test_set_sim_setup(self): + """Test set_sim_setup functionality of fmu api""" + self.sim_api.set_sim_setup(sim_setup=self.new_sim_setup) + for key, value in self.new_sim_setup.items(): + self.assertEqual(self.sim_api.sim_setup.dict()[key], + value) + with self.assertRaises(ValidationError): + self.sim_api.set_sim_setup(sim_setup={"NotAValidKey": None}) + with self.assertRaises(ValidationError): + self.sim_api.set_sim_setup(sim_setup={"stop_time": "not_a_float_or_int"}) + + def tearDown(self): + """Delete all files created while testing""" + + try: + self.sim_api.close() + except AttributeError: + pass + try: + shutil.rmtree(self.example_sim_dir) + except (FileNotFoundError, PermissionError): + pass + + +class PartialTestSimAPI_Continuous(PartialTestSimAPI): + """Extends the partial base class for simulation apis to specify for continuous simulation""" + + def setUp(self) -> None: + super().setUp() + if self.__class__ == PartialTestSimAPI_Continuous: + self.skipTest("Just a partial class") + def test_simulate(self): - """Test simulate functionality of dymola api""" + """Test simulate functionality of continuous simulation api""" self.sim_api.set_sim_setup({"start_time": 0.0, "stop_time": 10.0}) result_names = list(self.sim_api.states.keys())[:5] @@ -128,37 +167,7 @@ def test_savepath_handling(self): self.assertIsInstance(r, str) - def test_set_cd(self): - """Test set_cd functionality of dymola api""" - # Test the setting of the function - self.sim_api.set_cd(self.data_dir) - self.assertEqual(self.data_dir, self.sim_api.cd) - - def test_set_sim_setup(self): - """Test set_sim_setup functionality of fmu api""" - self.sim_api.set_sim_setup(sim_setup=self.new_sim_setup) - for key, value in self.new_sim_setup.items(): - self.assertEqual(self.sim_api.sim_setup.dict()[key], - value) - with self.assertRaises(ValidationError): - self.sim_api.set_sim_setup(sim_setup={"NotAValidKey": None}) - with self.assertRaises(ValidationError): - self.sim_api.set_sim_setup(sim_setup={"stop_time": "not_a_float_or_int"}) - - def tearDown(self): - """Delete all files created while testing""" - - try: - self.sim_api.close() - except AttributeError: - pass - try: - shutil.rmtree(self.example_sim_dir) - except (FileNotFoundError, PermissionError): - pass - - -class PartialTestDymolaAPI(PartialTestSimAPI): +class PartialTestDymolaAPI(PartialTestSimAPI_Continuous): n_cpu = None @@ -187,10 +196,13 @@ def setUp(self) -> None: else: dymola_path = None try: - self.sim_api = dymola_api.DymolaAPI( - cd=self.example_sim_dir, - model_name=model_name, - packages=packages, + config = { + 'model_name': model_name, + 'cd': self.example_sim_dir, + 'packages': packages + } + self.sim_api = dymola.DymolaAPI( + config=config, dymola_path=dymola_path, n_cpu=self.n_cpu, mos_script_pre=mos_script, @@ -267,7 +279,7 @@ class TestDymolaAPISingleCore(PartialTestDymolaAPI): n_cpu = 1 -class TestFMUAPI(PartialTestSimAPI): +class PartialTestFMUAPI(PartialTestSimAPI_Continuous): """Test-Class for the FMUAPI class.""" n_cpu = None @@ -276,15 +288,17 @@ def setUp(self): """Called before every test. Used to setup relevant paths and APIs etc.""" super().setUp() - if self.__class__ == PartialTestDymolaAPI: + if self.__class__ == PartialTestFMUAPI: self.skipTest("Just a partial class") if "win" in sys.platform: model_name = self.data_dir.joinpath("PumpAndValve_windows.fmu") else: model_name = self.data_dir.joinpath("PumpAndValve_linux.fmu") - - self.sim_api = fmu.FMU_API(cd=self.example_sim_dir, - model_name=model_name) + config = { + 'file_path': model_name, + 'cd': self.example_sim_dir + } + self.sim_api = fmu.FMU_API(config) def test_close(self): """Test close functionality of fmu api""" @@ -293,17 +307,55 @@ def test_close(self): self.assertIsNone(self.sim_api._unzip_dir) -class TestFMUAPISingleCore(TestFMUAPI): +class TestFMUAPISingleCore(PartialTestFMUAPI): """Test-Class for the FMU_API class on single core""" n_cpu = 1 -class TestFMUAPIMultiCore(TestFMUAPI): +class TestFMUAPIMultiCore(PartialTestFMUAPI): """Test-Class for the FMU_API class on multi core""" n_cpu = 2 +class TestFMUAPI_Discrete(PartialTestSimAPI): + """Test-Class for the discrete fmu simulation api class.""" + + def setUp(self): + """Called before every test. + Used to setup relevant paths and APIs etc.""" + super().setUp() + if "win" in sys.platform: + model_name = self.data_dir.joinpath("PumpAndValve_windows.fmu") + else: + model_name = self.data_dir.joinpath("PumpAndValve_linux.fmu") + config = { + 'file_path': model_name, + 'cd': self.example_sim_dir + } + self.sim_api = fmu.FMUDiscrete(config) + + def test_close(self): + """Test close functionality of fmu api""" + # pylint: disable=protected-access + self.sim_api.close() + self.assertTrue(self.sim_api._unzip_dir is None) + + def test_step(self): + """Test do step functionality of discrete fmu simulation api""" + self.sim_api.set_sim_setup({"start_time": 0.0, + "stop_time": 10.0}) + result_names = list(self.sim_api.states.keys())[:5] + self.sim_api.result_names = result_names + self.sim_api.initialize_discrete_sim() + while not self.sim_api.finished: + self.sim_api.do_step(close_when_finished=True) + res = self.sim_api.sim_res_df + self.assertIsInstance(res, pd.DataFrame) + self.assertIsInstance(self.sim_api.get_results(tsd_format=True), TimeSeriesData) + self.assertEqual(len(res.columns), len(result_names)) + + if __name__ == "__main__": unittest.main()