diff --git a/src/clib/lib/CMakeLists.txt b/src/clib/lib/CMakeLists.txt index 919600d03bc..270272be08f 100644 --- a/src/clib/lib/CMakeLists.txt +++ b/src/clib/lib/CMakeLists.txt @@ -12,7 +12,6 @@ pybind11_add_module( job_queue/slurm_driver.cpp job_queue/torque_driver.cpp job_queue/spawn.cpp - enkf/enkf_obs.cpp enkf/row_scaling.cpp) # ----------------------------------------------------------------- diff --git a/src/clib/lib/enkf/enkf_obs.cpp b/src/clib/lib/enkf/enkf_obs.cpp deleted file mode 100644 index 1e3242f7616..00000000000 --- a/src/clib/lib/enkf/enkf_obs.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include - -#include -#include -#include - -ERT_CLIB_SUBMODULE("enkf_obs", m) { - using namespace py::literals; - m.def("read_from_refcase", - [](Cwrap refcase, std::string local_key) { - int num_steps = rd_sum_get_last_report_step(refcase); - std::vector valid(num_steps + 1); - std::vector value(num_steps + 1); - for (int tstep = 0; tstep <= num_steps; tstep++) { - if (rd_sum_has_report_step(refcase, tstep)) { - int time_index = rd_sum_iget_report_end(refcase, tstep); - value[tstep] = rd_sum_get_general_var(refcase, time_index, - local_key.c_str()); - valid[tstep] = true; - } else { - valid[tstep] = false; - } - } - - return std::make_pair(valid, value); - }); -} diff --git a/src/ert/config/_read_summary.py b/src/ert/config/_read_summary.py index c3ea7cf5ab1..3b4041b21f7 100644 --- a/src/ert/config/_read_summary.py +++ b/src/ert/config/_read_summary.py @@ -202,7 +202,7 @@ def _find_file_matching( kind: str, case: str, predicate: Callable[[str, str], bool] ) -> str: dir, base = os.path.split(case) - candidates = list(filter(lambda x: predicate(base, x), os.listdir(dir))) + candidates = list(filter(lambda x: predicate(base, x), os.listdir(dir or "."))) if not candidates: raise ValueError(f"Could not find any {kind} matching case path {case}") if len(candidates) > 1: @@ -220,7 +220,7 @@ def _get_summary_filenames(filepath: str) -> Tuple[str, str]: def read_summary( filepath: str, fetch_keys: Sequence[str] -) -> Tuple[List[str], Sequence[datetime], Any]: +) -> Tuple[datetime, List[str], Sequence[datetime], Any]: summary, spec = _get_summary_filenames(filepath) try: date_index, start_date, date_units, keys, indices = _read_spec(spec, fetch_keys) @@ -229,7 +229,7 @@ def read_summary( ) except resfo.ResfoParsingError as err: raise ValueError(f"Failed to read summary file {filepath}: {err}") from err - return (keys, time_map, fetched) + return (start_date, keys, time_map, fetched) def _key2str(key: Union[bytes, str]) -> str: diff --git a/src/ert/config/ensemble_config.py b/src/ert/config/ensemble_config.py index 48a6816a35f..bef4448ce07 100644 --- a/src/ert/config/ensemble_config.py +++ b/src/ert/config/ensemble_config.py @@ -3,14 +3,27 @@ import logging import os from collections import Counter +from dataclasses import dataclass from datetime import datetime -from pathlib import Path -from typing import Any, Dict, List, Optional, Type, Union, no_type_check, overload - -from resdata.summary import Summary +from fnmatch import fnmatch +from typing import ( + Any, + Dict, + List, + Optional, + Sequence, + Type, + Union, + no_type_check, + overload, +) + +import numpy as np +import numpy.typing as npt from ert.field_utils import get_shape +from ._read_summary import read_summary from .field import Field from .gen_data_config import GenDataConfig from .gen_kw_config import GenKwConfig @@ -39,36 +52,29 @@ def _get_abs_path(file: Optional[str]) -> Optional[str]: return file -class EnsembleConfig: - @staticmethod - def _load_refcase(refcase_file: Optional[str]) -> Optional[Summary]: - if refcase_file is None: - return None - - refcase_filepath = Path(refcase_file).absolute() - refcase_file = str(refcase_filepath.parent / refcase_filepath.stem) +@dataclass(eq=False) +class Refcase: + start_date: datetime + keys: List[str] + dates: Sequence[datetime] + values: npt.NDArray[Any] - if not os.path.exists(refcase_file + ".UNSMRY"): - raise ConfigValidationError( - f"Cannot find UNSMRY file for refcase provided! {refcase_file}.UNSMRY" - ) + def __eq__(self, other: object) -> bool: + if not isinstance(other, Refcase): + return False + return bool( + self.start_date == other.start_date + and self.keys == other.keys + and self.dates == other.dates + and np.all(self.values == other.values) + ) - if not os.path.exists(refcase_file + ".SMSPEC"): - raise ConfigValidationError( - f"Cannot find SMSPEC file for refcase provided! {refcase_file}.SMSPEC" - ) + @property + def all_dates(self) -> List[datetime]: + return [self.start_date] + list(self.dates) - # defaults for loading refcase - necessary for using the function - # exposed in python part of ecl - refcase_load_args = { - "load_case": refcase_file, - "join_string": ":", - "include_restart": True, - "lazy_load": False, - "file_options": 0, - } - return Summary(**refcase_load_args) +class EnsembleConfig: def __init__( self, grid_file: Optional[str] = None, @@ -77,7 +83,7 @@ def __init__( surface_list: Optional[List[SurfaceConfig]] = None, summary_config: Optional[SummaryConfig] = None, field_list: Optional[List[Field]] = None, - refcase: Optional[Summary] = None, + refcase: Optional[Refcase] = None, ) -> None: _genkw_list = [] if genkw_list is None else genkw_list _gendata_list = [] if gendata_list is None else gendata_list @@ -150,28 +156,35 @@ def make_field(field_list: List[str]) -> Field: ecl_base = config_dict.get("ECLBASE") if ecl_base is not None: ecl_base = ecl_base.replace("%d", "") - refcase = None + summary_keys = [item for sublist in summary_list for item in sublist] + optional_keys = [] + refcase_keys = [] time_map = [] + data = None if refcase_file_path is not None: - refcase = cls._load_refcase(refcase_file_path) - time_map = set( - datetime(date.year, date.month, date.day) - for date in refcase.report_dates - ) - optional_keys = [] - summary_keys = [item for sublist in summary_list for item in sublist] + try: + start_date, refcase_keys, time_map, data = read_summary( + refcase_file_path, ["*"] + ) + except Exception as err: + raise ConfigValidationError(f"Could not read refcase: {err}") from err + to_add = list(refcase_keys) for key in summary_keys: - if "*" in key and refcase: - optional_keys.extend(list(refcase.keys(pattern=key))) + if "*" in key and refcase_keys: + for i, rkey in list(enumerate(to_add))[::-1]: + if fnmatch(rkey, key) and rkey != "TIME": + optional_keys.append(rkey) + del to_add[i] else: optional_keys.append(key) + summary_config = None if ecl_base: summary_config = SummaryConfig( name="summary", input_file=ecl_base, keys=optional_keys, - refcase=time_map, + refcase=set(time_map), ) return cls( @@ -181,7 +194,9 @@ def make_field(field_list: List[str]) -> Field: surface_list=[SurfaceConfig.from_config_list(s) for s in surface_list], summary_config=summary_config, field_list=[make_field(f) for f in field_list], - refcase=refcase, + refcase=Refcase(start_date, refcase_keys, time_map, data) + if data is not None + else None, ) def _node_info(self, object_type: Type[Any]) -> str: @@ -277,21 +292,12 @@ def __eq__(self, other: object) -> bool: if not isinstance(other, EnsembleConfig): return False - if ( - self.keys != other.keys - or self._grid_file != other._grid_file - or self.parameter_configs != other.parameter_configs - or self.response_configs != other.response_configs - ): - return False - - if self.refcase is None: - return other.refcase is None - if other.refcase is None: - return self.refcase is None - - return os.path.realpath(self.refcase.case) == os.path.realpath( - other.refcase.case + return ( + self.keys == other.keys + and self._grid_file == other._grid_file + and self.parameter_configs == other.parameter_configs + and self.response_configs == other.response_configs + and self.refcase == other.refcase ) def get_summary_keys(self) -> List[str]: diff --git a/src/ert/config/ert_config.py b/src/ert/config/ert_config.py index 054e024f1f2..9538e387a03 100644 --- a/src/ert/config/ert_config.py +++ b/src/ert/config/ert_config.py @@ -15,6 +15,7 @@ Dict, List, Optional, + Sequence, Tuple, Union, cast, @@ -22,7 +23,6 @@ ) import xarray as xr -from resdata.util.util import CTime from typing_extensions import Self from ert.substitution_list import SubstitutionList @@ -651,12 +651,9 @@ def preferred_num_cpu(self) -> int: def _create_observations(self) -> EnkfObs: obs_config_file = self.model_config.obs_config_file - obs_time_list: List[datetime] = [] + obs_time_list: Sequence[datetime] = [] if self.ensemble_config.refcase is not None: - refcase = self.ensemble_config.refcase - obs_time_list = [refcase.get_start_time()] + [ - CTime(t).datetime() for t in refcase.alloc_time_vector(True) - ] + obs_time_list = self.ensemble_config.refcase.all_dates elif self.model_config.time_map is not None: obs_time_list = self.model_config.time_map if obs_config_file: diff --git a/src/ert/config/observations.py b/src/ert/config/observations.py index 1e735b90074..84cce3bc79c 100644 --- a/src/ert/config/observations.py +++ b/src/ert/config/observations.py @@ -4,9 +4,7 @@ import numpy as np import xarray as xr -from resdata.summary import SummaryVarType -from ert._clib.enkf_obs import read_from_refcase from ert.validation import rangestring_to_list from .enkf_observation_implementation_type import EnkfObservationImplementationType @@ -32,6 +30,11 @@ DEFAULT_TIME_DELTA = timedelta(seconds=30) +def history_key(key: str) -> str: + keyword, *rest = key.split(":") + return ":".join([keyword + "H"] + rest) + + class EnkfObs: def __init__(self, obs_vectors: Dict[str, ObsVector], obs_time: List[datetime]): self.obs_vectors = obs_vectors @@ -111,24 +114,14 @@ def _handle_history_observation( error_mode = history_observation["ERROR_MODE"] if history_type == HistorySource.REFCASE_HISTORY: - var_type = refcase.var_type(summary_key) - local_key = None - if var_type in [ - SummaryVarType.RD_SMSPEC_WELL_VAR, - SummaryVarType.RD_SMSPEC_GROUP_VAR, - ]: - summary_node = refcase.smspec_node(summary_key) - local_key = summary_node.keyword + "H:" + summary_node.wgname - elif var_type == SummaryVarType.RD_SMSPEC_FIELD_VAR: - summary_node = refcase.smspec_node(summary_key) - local_key = summary_node.keyword + "H" + local_key = history_key(summary_key) else: local_key = summary_key if local_key is None: return {} - if local_key not in refcase: + if local_key not in refcase.keys: return {} - valid, values = read_from_refcase(refcase, local_key) + values = refcase.values[refcase.keys.index(local_key)] std_dev = cls._handle_error_mode(values, error, error_min, error_mode) for segment_name, segment_instance in history_observation["SEGMENT"]: start = segment_instance["START"] @@ -169,21 +162,15 @@ def _handle_history_observation( segment_instance["ERROR_MODE"], ) data: Dict[Union[int, datetime], Union[GenObservation, SummaryObservation]] = {} - dates = [ - datetime(date.year, date.month, date.day) for date in refcase.report_dates - ] - for i, (good, error, value) in enumerate(zip(valid, std_dev, values)): - if good: - if error <= std_cutoff: - ConfigWarning.ert_context_warn( - "Too small observation error in observation" - f" {summary_key}:{i} - ignored", - summary_key, - ) - continue - data[dates[i - 1]] = SummaryObservation( - summary_key, summary_key, value, error + for i, (date, error, value) in enumerate(zip(refcase.dates, std_dev, values)): + if error <= std_cutoff: + ConfigWarning.ert_context_warn( + "Too small observation error in observation" + f" {summary_key}:{i} - ignored", + summary_key, ) + continue + data[date] = SummaryObservation(summary_key, summary_key, value, error) return { summary_key: ObsVector( diff --git a/src/ert/config/summary_config.py b/src/ert/config/summary_config.py index a6760d02c21..9eb89b76dae 100644 --- a/src/ert/config/summary_config.py +++ b/src/ert/config/summary_config.py @@ -29,7 +29,7 @@ def __post_init__(self) -> None: def read_from_file(self, run_path: str, iens: int) -> xr.Dataset: filename = self.input_file.replace("", str(iens)) - keys, time_map, data = read_summary(f"{run_path}/{filename}", self.keys) + _, keys, time_map, data = read_summary(f"{run_path}/{filename}", self.keys) if self.refcase: assert isinstance(self.refcase, set) diff --git a/tests/performance_tests/test_memory_usage.py b/tests/performance_tests/test_memory_usage.py index 7e35d0857b6..9ebdc5a67f6 100644 --- a/tests/performance_tests/test_memory_usage.py +++ b/tests/performance_tests/test_memory_usage.py @@ -90,11 +90,10 @@ def fill_storage_with_data(poly_template: Path, ert_config: ErtConfig) -> None: real, ) else: + obs_time_list = ens_config.refcase.all_dates source.save_response( data_key, - make_summary_data( - summary_obs_keys, ens_config.refcase.numpy_dates - ), + make_summary_data(summary_obs_keys, obs_time_list), real, ) diff --git a/tests/unit_tests/all/plugins/snapshots/test_export_misfit/test_export_misfit/0/csv_data.csv b/tests/unit_tests/all/plugins/snapshots/test_export_misfit/test_export_misfit/0/csv_data.csv index 4d0aac1be0c..5424ec92d24 100644 --- a/tests/unit_tests/all/plugins/snapshots/test_export_misfit/test_export_misfit/0/csv_data.csv +++ b/tests/unit_tests/all/plugins/snapshots/test_export_misfit/test_export_misfit/0/csv_data.csv @@ -1,6 +1,6 @@ Realization,FOPR,WOPR_OP1_108,WOPR_OP1_144,WOPR_OP1_190,WOPR_OP1_36,WOPR_OP1_72,WOPR_OP1_9,WPR_DIFF_1 -0,1572.4551516177269,4.663157777414048,1.2280040962512109,24.150873738474047,0.16579549917171352,16.6031985311065,0.5786173169058768,17.52338148044444 -1,564.7325457301008,4.368782497900839,32.6530612244898,2.25,7.513238617348759,7.502955389862009,4.0,3.917211792502779 -2,760.2134818146507,0.6758601761400266,0.0495481141274234,0.878978328860087,0.53148428819629,10.315068719501141,0.5691876200100965,21.326953031224996 -3,762.2886413785844,0.057372834892021204,2.003570229564708,89.39209245855437,1.0729962591656552,0.23633929814081966,1.963529806065796,4.454344394944445 -4,978.6854544674984,0.6099979595035421,11.1651322515757,2.3617365751122437,0.5138762294603726,41.03398708587926,0.04177266072298375,27.46179846677778 +0,1572.455126624968,4.663157777414048,1.2280040962512109,24.150873738474047,0.16579549917171352,16.6031985311065,0.5786173169058768,17.52338148044444 +1,564.7325372587165,4.368782497900839,32.6530612244898,2.25,7.513238617348759,7.502955389862009,4.0,3.917211792502779 +2,760.2134646694443,0.6758601761400266,0.0495481141274234,0.878978328860087,0.53148428819629,10.315068719501141,0.5691876200100965,21.326953031224996 +3,762.2886383355541,0.057372834892021204,2.003570229564708,89.39209245855437,1.0729962591656552,0.23633929814081966,1.963529806065796,4.454344394944445 +4,978.68543806519,0.6099979595035421,11.1651322515757,2.3617365751122437,0.5138762294603726,41.03398708587926,0.04177266072298375,27.46179846677778 diff --git a/tests/unit_tests/config/test_ensemble_config.py b/tests/unit_tests/config/test_ensemble_config.py index 07fe2f45b3a..2e551858675 100644 --- a/tests/unit_tests/config/test_ensemble_config.py +++ b/tests/unit_tests/config/test_ensemble_config.py @@ -40,7 +40,7 @@ def test_ensemble_config_fails_on_non_sensical_refcase_file(): refcase_file_handler.write(refcase_file_content) with open(refcase_file + ".SMSPEC", "w+", encoding="utf-8") as refcase_file_handler: refcase_file_handler.write(refcase_file_content) - with pytest.raises(expected_exception=IOError, match=refcase_file): + with pytest.raises(expected_exception=ConfigValidationError, match=refcase_file): config_dict = {ConfigKeys.REFCASE: refcase_file} EnsembleConfig.from_dict(config_dict=config_dict) @@ -63,28 +63,11 @@ def test_ensemble_config_construct_refcase_and_grid(): ) assert isinstance(ec, EnsembleConfig) - assert isinstance(ec.refcase, Summary) + assert ec.refcase is not None assert ec.grid_file == os.path.realpath(grid_file) -def test_that_refcase_gets_correct_name(tmpdir): - refcase_name = "MY_REFCASE" - config_dict = { - ConfigKeys.REFCASE: refcase_name, - } - - with tmpdir.as_cwd(): - summary = Summary.writer(refcase_name, datetime(2014, 9, 10), 10, 10, 10) - summary.add_variable("FOPR", unit="SM3/DAY") - t_step = summary.add_t_step(2, sim_days=1) - t_step["FOPR"] = 1 - summary.fwrite() - - ec = EnsembleConfig.from_dict(config_dict=config_dict) - assert os.path.realpath(refcase_name) == ec.refcase.case - - @pytest.mark.usefixtures("use_tmpdir") @pytest.mark.parametrize( "existing_suffix, expected_suffix", @@ -109,7 +92,7 @@ def test_that_files_for_refcase_exists(existing_suffix, expected_suffix): with pytest.raises( ConfigValidationError, - match="Cannot find " + expected_suffix + " file for refcase provided!", + match=f"Could not find .* {refcase_file}", ): _ = EnsembleConfig.from_dict( config_dict={ diff --git a/tests/unit_tests/config/test_ert_config.py b/tests/unit_tests/config/test_ert_config.py index 4ce7c10b864..8479ebc85de 100644 --- a/tests/unit_tests/config/test_ert_config.py +++ b/tests/unit_tests/config/test_ert_config.py @@ -203,11 +203,6 @@ def test_extensive_config(setup_case): assert exp_job_data["STDOUT"] == job.stdout_file ensemble_config = ert_config.ensemble_config - for extension in ["SMSPEC", "UNSMRY"]: - assert ( - Path(snake_oil_structure_config["REFCASE"] + "." + extension).resolve() - == Path(ensemble_config.refcase.case + "." + extension).resolve() - ) assert ( Path(snake_oil_structure_config["GRID"]).resolve() == Path(ensemble_config._grid_file).resolve() diff --git a/tests/unit_tests/config/test_observations.py b/tests/unit_tests/config/test_observations.py index bf0d00c861f..fddf6460dd0 100644 --- a/tests/unit_tests/config/test_observations.py +++ b/tests/unit_tests/config/test_observations.py @@ -1388,19 +1388,13 @@ def test_that_segment_defaults_are_applied(tmpdir): # default error method is RELMIN # default error is 0.1 for i in range(1, 5): - assert ( - observations["FOPR"] - .observations[datetime(2014, 9, 11) + timedelta(days=i)] - .std - == 0.1 - ) + assert observations["FOPR"].observations[ + datetime(2014, 9, 11) + timedelta(days=i) + ].std == pytest.approx(0.1) for i in range(5, 9): - assert ( - observations["FOPR"] - .observations[datetime(2014, 9, 11) + timedelta(days=i)] - .std - == 0.1 - ) + assert observations["FOPR"].observations[ + datetime(2014, 9, 11) + timedelta(days=i) + ].std == pytest.approx(0.1) def test_that_summary_default_error_min_is_applied(tmpdir): diff --git a/tests/unit_tests/config/test_read_summary.py b/tests/unit_tests/config/test_read_summary.py index 8bde07e2580..d2a87dae4b5 100644 --- a/tests/unit_tests/config/test_read_summary.py +++ b/tests/unit_tests/config/test_read_summary.py @@ -251,7 +251,7 @@ def test_that_reading_summaries_returns_the_contents_of_the_file( smspec, unsmry = summary unsmry.to_file(tmp_path / f"TEST.{format_specifier}UNSMRY", format) smspec.to_file(tmp_path / f"TEST.{format_specifier}SMSPEC", format) - (keys, time_map, data) = read_summary(str(tmp_path / "TEST"), ["*"]) + (_, keys, time_map, data) = read_summary(str(tmp_path / "TEST"), ["*"]) local_name = smspec.lgrs if smspec.lgrs else [] lis = smspec.numlx if smspec.numlx else [] diff --git a/tests/unit_tests/data/snapshots/test_integration_data/test_all_measured_snapshot/0/snake_oil_measured_output.csv b/tests/unit_tests/data/snapshots/test_integration_data/test_all_measured_snapshot/0/snake_oil_measured_output.csv index 804d967183d..b508a4bf1aa 100644 --- a/tests/unit_tests/data/snapshots/test_integration_data/test_all_measured_snapshot/0/snake_oil_measured_output.csv +++ b/tests/unit_tests/data/snapshots/test_integration_data/test_all_measured_snapshot/0/snake_oil_measured_output.csv @@ -2,7 +2,7 @@ key_index,2010-01-10 00:00:00,2010-01-20 00:00:00,2010-01-30 00:00:00,2010-02-09 00:00:00,2010-02-19 00:00:00,2010-03-01 00:00:00,2010-03-11 00:00:00,2010-03-21 00:00:00,2010-03-31 00:00:00,2010-04-10 00:00:00,2010-04-20 00:00:00,2010-04-30 00:00:00,2010-05-10 00:00:00,2010-05-20 00:00:00,2010-05-30 00:00:00,2010-06-09 00:00:00,2010-06-19 00:00:00,2010-06-29 00:00:00,2010-07-09 00:00:00,2010-07-19 00:00:00,2010-07-29 00:00:00,2010-08-08 00:00:00,2010-08-18 00:00:00,2010-08-28 00:00:00,2010-09-07 00:00:00,2010-09-17 00:00:00,2010-09-27 00:00:00,2010-10-07 00:00:00,2010-10-17 00:00:00,2010-10-27 00:00:00,2010-11-06 00:00:00,2010-11-16 00:00:00,2010-11-26 00:00:00,2010-12-06 00:00:00,2010-12-16 00:00:00,2010-12-26 00:00:00,2011-01-05 00:00:00,2011-01-15 00:00:00,2011-01-25 00:00:00,2011-02-04 00:00:00,2011-02-14 00:00:00,2011-02-24 00:00:00,2011-03-06 00:00:00,2011-03-16 00:00:00,2011-03-26 00:00:00,2011-04-05 00:00:00,2011-04-15 00:00:00,2011-04-25 00:00:00,2011-05-05 00:00:00,2011-05-15 00:00:00,2011-05-25 00:00:00,2011-06-04 00:00:00,2011-06-14 00:00:00,2011-06-24 00:00:00,2011-07-04 00:00:00,2011-07-14 00:00:00,2011-07-24 00:00:00,2011-08-03 00:00:00,2011-08-13 00:00:00,2011-08-23 00:00:00,2011-09-02 00:00:00,2011-09-12 00:00:00,2011-09-22 00:00:00,2011-10-02 00:00:00,2011-10-12 00:00:00,2011-10-22 00:00:00,2011-11-01 00:00:00,2011-11-11 00:00:00,2011-11-21 00:00:00,2011-12-01 00:00:00,2011-12-11 00:00:00,2011-12-21 00:00:00,2011-12-31 00:00:00,2012-01-10 00:00:00,2012-01-20 00:00:00,2012-01-30 00:00:00,2012-02-09 00:00:00,2012-02-19 00:00:00,2012-02-29 00:00:00,2012-03-10 00:00:00,2012-03-20 00:00:00,2012-03-30 00:00:00,2012-04-09 00:00:00,2012-04-19 00:00:00,2012-04-29 00:00:00,2012-05-09 00:00:00,2012-05-19 00:00:00,2012-05-29 00:00:00,2012-06-08 00:00:00,2012-06-18 00:00:00,2012-06-28 00:00:00,2012-07-08 00:00:00,2012-07-18 00:00:00,2012-07-28 00:00:00,2012-08-07 00:00:00,2012-08-17 00:00:00,2012-08-27 00:00:00,2012-09-06 00:00:00,2012-09-16 00:00:00,2012-09-26 00:00:00,2012-10-06 00:00:00,2012-10-16 00:00:00,2012-10-26 00:00:00,2012-11-05 00:00:00,2012-11-15 00:00:00,2012-11-25 00:00:00,2012-12-05 00:00:00,2012-12-15 00:00:00,2012-12-25 00:00:00,2013-01-04 00:00:00,2013-01-14 00:00:00,2013-01-24 00:00:00,2013-02-03 00:00:00,2013-02-13 00:00:00,2013-02-23 00:00:00,2013-03-05 00:00:00,2013-03-15 00:00:00,2013-03-25 00:00:00,2013-04-04 00:00:00,2013-04-14 00:00:00,2013-04-24 00:00:00,2013-05-04 00:00:00,2013-05-14 00:00:00,2013-05-24 00:00:00,2013-06-03 00:00:00,2013-06-13 00:00:00,2013-06-23 00:00:00,2013-07-03 00:00:00,2013-07-13 00:00:00,2013-07-23 00:00:00,2013-08-02 00:00:00,2013-08-12 00:00:00,2013-08-22 00:00:00,2013-09-01 00:00:00,2013-09-11 00:00:00,2013-09-21 00:00:00,2013-10-01 00:00:00,2013-10-11 00:00:00,2013-10-21 00:00:00,2013-10-31 00:00:00,2013-11-10 00:00:00,2013-11-20 00:00:00,2013-11-30 00:00:00,2013-12-10 00:00:00,2013-12-20 00:00:00,2013-12-30 00:00:00,2014-01-09 00:00:00,2014-01-19 00:00:00,2014-01-29 00:00:00,2014-02-08 00:00:00,2014-02-18 00:00:00,2014-02-28 00:00:00,2014-03-10 00:00:00,2014-03-20 00:00:00,2014-03-30 00:00:00,2014-04-09 00:00:00,2014-04-19 00:00:00,2014-04-29 00:00:00,2014-05-09 00:00:00,2014-05-19 00:00:00,2014-05-29 00:00:00,2014-06-08 00:00:00,2014-06-18 00:00:00,2014-06-28 00:00:00,2014-07-08 00:00:00,2014-07-18 00:00:00,2014-07-28 00:00:00,2014-08-07 00:00:00,2014-08-17 00:00:00,2014-08-27 00:00:00,2014-09-06 00:00:00,2014-09-16 00:00:00,2014-09-26 00:00:00,2014-10-06 00:00:00,2014-10-16 00:00:00,2014-10-26 00:00:00,2014-11-05 00:00:00,2014-11-15 00:00:00,2014-11-25 00:00:00,2014-12-05 00:00:00,2014-12-15 00:00:00,2014-12-25 00:00:00,2015-01-04 00:00:00,2015-01-14 00:00:00,2015-01-24 00:00:00,2015-02-03 00:00:00,2015-02-13 00:00:00,2015-02-23 00:00:00,2015-03-05 00:00:00,2015-03-15 00:00:00,2015-03-25 00:00:00,2015-04-04 00:00:00,2015-04-14 00:00:00,2015-04-24 00:00:00,2015-05-04 00:00:00,2015-05-14 00:00:00,2015-05-24 00:00:00,2015-06-03 00:00:00,2015-06-13 00:00:00,2015-06-23 00:00:00,2012-12-15 00:00:00,2013-12-10 00:00:00,2015-03-15 00:00:00,2010-12-26 00:00:00,2011-12-21 00:00:00,2010-03-31 00:00:00,400,800,1200,1800 data_index,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,107,143,189,35,71,8,400,800,1200,1800 OBS,0.0016968873096629977,0.007549144793301821,0.017537245526909828,0.03158785030245781,0.04960281774401665,0.07146798074245453,0.09703561663627625,0.12614504992961884,0.1586153209209442,0.1942545473575592,0.23281694948673248,0.27404671907424927,0.3176907002925873,0.3634442389011383,0.4109863340854645,0.46002548933029175,0.5102593302726746,0.5614363551139832,0.6133571267127991,0.6655344367027283,0.7178515791893005,0.7704011797904968,0.8226962685585022,0.8746448755264282,0.9261661171913147,0.977008044719696,1.0266836881637573,1.0750459432601929,1.12155020236969,1.1657692193984985,1.207544207572937,1.2470088005065918,1.2835049629211426,1.3167047500610352,1.346083641052246,1.3711466789245605,1.3915883302688599,1.4073505401611328,1.4176363945007324,1.4222338199615479,1.4235652685165405,1.4251763820648193,1.4272525310516357,1.4300298690795898,1.4334416389465332,1.43769371509552,1.4429181814193726,1.4488641023635864,1.4547947645187378,1.4603124856948853,1.465605616569519,1.4704256057739258,1.4741872549057007,1.4752846956253052,1.4738245010375977,1.4694164991378784,1.4611896276474,1.4494869709014893,1.4363856315612793,1.4213961362838745,1.4026654958724976,1.3793243169784546,1.3527154922485352,1.3241467475891113,1.296581506729126,1.270460844039917,1.2434195280075073,1.2160032987594604,1.1891443729400635,1.161468505859375,1.1344152688980103,1.111630916595459,1.0911470651626587,1.071900486946106,1.0527071952819824,1.0326411724090576,1.0128751993179321,0.9945804476737976,0.975469708442688,0.9557305574417114,0.9363316893577576,0.9158328175544739,0.8928252458572388,0.8686985969543457,0.8423308730125427,0.8124594688415527,0.7789327502250671,0.7419267892837524,0.7024903893470764,0.661297619342804,0.6193501949310303,0.5782303810119629,0.5396573543548584,0.5051060914993286,0.47489526867866516,0.4502047300338745,0.43144863843917847,0.4186316132545471,0.410041481256485,0.40574684739112854,0.40424859523773193,0.3991520404815674,0.3887236714363098,0.37419527769088745,0.3551763594150543,0.331745445728302,0.30616295337677,0.28151485323905945,0.26365551352500916,0.24812838435173035,0.23326681554317474,0.21852639317512512,0.20469489693641663,0.19195015728473663,0.17977432906627655,0.16876085102558136,0.15952761471271515,0.15166985988616943,0.14568953216075897,0.14111457765102386,0.13730789721012115,0.13369180262088776,0.1301889419555664,0.12653681635856628,0.12283045053482056,0.11926789581775665,0.11993221193552017,0.12808072566986084,0.1359952986240387,0.1433563381433487,0.14990629255771637,0.1549033373594284,0.15908613801002502,0.16274403035640717,0.16555064916610718,0.1669514924287796,0.16719110310077667,0.1661362498998642,0.16499200463294983,0.16432030498981476,0.165121391415596,0.169014111161232,0.17592155933380127,0.18565155565738678,0.19735679030418396,0.2105773389339447,0.2247595340013504,0.23917199671268463,0.2524295449256897,0.2640857398509979,0.2746853232383728,0.2849123775959015,0.2945040166378021,0.3027935326099396,0.30875587463378906,0.3120051324367523,0.31252342462539673,0.3097202479839325,0.3039141893386841,0.2956465780735016,0.28585320711135864,0.2753968834877014,0.2641619145870209,0.2527305483818054,0.24120257794857025,0.22952820360660553,0.21775572001934052,0.20688839256763458,0.19651590287685394,0.18688032031059265,0.17763660848140717,0.1682787537574768,0.1587630957365036,0.14956273138523102,0.14119677245616913,0.13354657590389252,0.12660714983940125,0.12049901485443115,0.11532926559448242,0.11091870814561844,0.10653064399957657,0.10148541629314423,0.09563612192869186,0.0887933000922203,0.08123061805963516,0.0733993723988533,0.0654938817024231,0.05767139419913292,0.05034296214580536,0.04377567023038864,0.03793442249298096,0.032930485904216766,0.02895224094390869,0.025974156334996223,0.023769771680235863,0.022172002121806145,0.021033743396401405,0.020261472091078758,0.019794177263975143,0.01961757428944111,0.3,0.2,0.015,0.7,0.5,0.1,0.0,0.1,0.2,0.0 -STD,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.10266836881637574,0.10750459432601929,0.112155020236969,0.11657692193984986,0.1207544207572937,0.12470088005065919,0.12835049629211426,0.13167047500610352,0.13460836410522461,0.13711466789245605,0.139158833026886,0.14073505401611328,0.14176363945007325,0.14222338199615478,0.14235652685165406,0.14251763820648194,0.14272525310516357,0.14300298690795898,0.14334416389465332,0.14376937150955202,0.14429181814193726,0.14488641023635865,0.14547947645187378,0.14603124856948854,0.14656056165695192,0.1470425605773926,0.14741872549057009,0.14752846956253052,0.14738245010375978,0.14694164991378786,0.14611896276473998,0.14494869709014893,0.14363856315612794,0.14213961362838745,0.14026654958724977,0.13793243169784547,0.13527154922485352,0.13241467475891114,0.12965815067291261,0.1270460844039917,0.12434195280075074,0.12160032987594604,0.11891443729400636,0.1161468505859375,0.11344152688980103,0.11116309165954591,0.10911470651626587,0.1071900486946106,0.10527071952819825,0.10326411724090577,0.10128751993179322,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.075,0.035,0.01,0.07,0.05,0.05,0.1,0.2,0.15,0.05 +STD,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.10266836732625961,0.10750459879636765,0.112155020236969,0.11657692492008209,0.1207544207572937,0.1247008815407753,0.12835049629211426,0.13167047500610352,0.13460837304592133,0.13711467385292053,0.13915883004665375,0.14073505997657776,0.14176364243030548,0.14222338795661926,0.1423565298318863,0.14251764118671417,0.14272525906562805,0.14300298690795898,0.14334416389465332,0.14376936852931976,0.14429181814193726,0.14488641917705536,0.1454794853925705,0.1460312455892563,0.14656056463718414,0.14704255759716034,0.14741872251033783,0.14752846956253052,0.147382453083992,0.1469416469335556,0.14611896872520447,0.14494870603084564,0.14363856613636017,0.14213961362838745,0.140266552567482,0.1379324346780777,0.13527154922485352,0.13241468369960785,0.12965814769268036,0.12704609334468842,0.12434195727109909,0.12160032987594604,0.11891444027423859,0.11614685505628586,0.11344152688980103,0.11116309463977814,0.10911470651626587,0.10719005018472672,0.10527072101831436,0.10326411575078964,0.10128752142190933,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.075,0.035,0.01,0.07,0.05,0.05,0.1,0.2,0.15,0.05 0,0.05596115440130234,0.05905991047620773,0.06433762609958649,0.07174286246299744,0.08120841532945633,0.09265599399805069,0.10600091516971588,0.12115591764450073,0.1380334496498108,0.15654607117176056,0.17655602097511292,0.20094838738441467,0.24621784687042236,0.2936668395996094,0.3425387442111969,0.39265134930610657,0.4441823959350586,0.4966517984867096,0.5499683022499084,0.603771448135376,0.6578561067581177,0.7111904621124268,0.7627429366111755,0.8122514486312866,0.8594288229942322,0.9040638208389282,0.9463410973548889,0.9862102270126343,1.0224096775054932,1.0546443462371826,1.0845394134521484,1.1104881763458252,1.131589651107788,1.1479130983352661,1.1595455408096313,1.167633056640625,1.1722285747528076,1.1743475198745728,1.1731048822402954,1.1686681509017944,1.161161184310913,1.1525744199752808,1.1427159309387207,1.1304982900619507,1.1179068088531494,1.1081316471099854,1.0939658880233765,1.0752445459365845,1.0542879104614258,1.033347487449646,1.0119364261627197,0.991693377494812,0.9730311632156372,0.9550253748893738,0.9345653653144836,0.915583610534668,0.8953654766082764,0.8732743263244629,0.8482869863510132,0.8196418881416321,0.7878987193107605,0.7517772316932678,0.7119350433349609,0.6717563271522522,0.6330385804176331,0.5994275212287903,0.5638179183006287,0.5303453207015991,0.4990736246109009,0.47381284832954407,0.4495185911655426,0.4257318377494812,0.4019607603549957,0.3778245449066162,0.35616952180862427,0.33382049202919006,0.3128863275051117,0.2942618131637573,0.2768097221851349,0.25245460867881775,0.23063282668590546,0.2152853012084961,0.20333616435527802,0.19387012720108032,0.18325699865818024,0.1716025322675705,0.15743741393089294,0.14652186632156372,0.13051219284534454,0.12044452875852585,0.11048588901758194,0.10224469006061554,0.09571051597595215,0.09076317399740219,0.08720768988132477,0.08480052649974823,0.0832802802324295,0.0823993906378746,0.08195365220308304,0.08180616050958633,0.08303830027580261,0.0871763601899147,0.0938313826918602,0.1023586317896843,0.1119394525885582,0.12166640162467957,0.1306365430355072,0.1380424052476883,0.14325076341629028,0.1458611786365509,0.1471879780292511,0.14924518764019012,0.1518167108297348,0.15459828078746796,0.15724658966064453,0.15941375494003296,0.16078181564807892,0.16109345853328705,0.16017602384090424,0.15795643627643585,0.15502306818962097,0.15231360495090485,0.15010681748390198,0.14880436658859253,0.1488730013370514,0.15077413618564606,0.15489619970321655,0.1614965796470642,0.1706589013338089,0.1822691708803177,0.19436874985694885,0.2043376863002777,0.2121737152338028,0.2180357575416565,0.22218506038188934,0.22784097492694855,0.23126012086868286,0.23103396594524384,0.2298966646194458,0.22823171317577362,0.2288496047258377,0.2323354035615921,0.2407100647687912,0.24989749491214752,0.259870707988739,0.2709311246871948,0.2825491726398468,0.2953783869743347,0.3056764602661133,0.3122561275959015,0.3177250623703003,0.3260450065135956,0.33306464552879333,0.3378613293170929,0.3401772677898407,0.3393363654613495,0.33513420820236206,0.32767120003700256,0.3184562027454376,0.3070579171180725,0.2937939465045929,0.2805998921394348,0.26584646105766296,0.2500576078891754,0.23389898240566254,0.2171536237001419,0.2064875066280365,0.19675801694393158,0.18681614100933075,0.1767863929271698,0.16696739196777344,0.15770217776298523,0.14908964931964874,0.1412104070186615,0.1341284066438675,0.1278918832540512,0.12253551930189133,0.11808308213949203,0.11455046385526657,0.11194827407598495,0.10930047929286957,0.10525462031364441,0.10003970563411713,0.09402676671743393,0.08766300231218338,0.08140913397073746,0.07567841559648514,0.07078717648983002,0.06692437827587128,0.06414353847503662,0.06218907982110977,0.0607629232108593,0.05987086892127991,0.059472911059856415,0.0594835989177227,0.05978194996714592,0.06022725999355316,0.060678575187921524,0.06101493909955025,0.06115317344665527,0.1380424052476883,0.23878537118434906,0.06414353847503662,0.6714974045753479,0.2962648868560791,0.1380334496498108,0.047452,0.186768,0.183387,0.206747 1,0.015982799232006073,0.018984779715538025,0.024110613390803337,0.03132806345820427,0.040592338889837265,0.05184478685259819,0.06501130759716034,0.08000797778367996,0.09674280881881714,0.11666669696569443,0.1547873169183731,0.19551505148410797,0.23858241736888885,0.2837105095386505,0.33061379194259644,0.3790050148963928,0.42859306931495667,0.4790826141834259,0.530165433883667,0.5815176963806152,0.6328243017196655,0.683779776096344,0.7340631484985352,0.7833876609802246,0.8314805030822754,0.8780428767204285,0.9227654933929443,0.9654030203819275,1.0057004690170288,1.0433998107910156,1.0782145261764526,1.1098326444625854,1.1379904747009277,1.1624739170074463,1.1830859184265137,1.199626088142395,1.2118992805480957,1.2197221517562866,1.2229278087615967,1.2213786840438843,1.2169352769851685,1.2124816179275513,1.2080864906311035,1.2037124633789062,1.1992862224578857,1.1947860717773438,1.1902142763137817,1.18546462059021,1.1803616285324097,1.1747498512268066,1.168567180633545,1.1618250608444214,1.1543725728988647,1.1459240913391113,1.13620924949646,1.124887466430664,1.1115686893463135,1.0958844423294067,1.0775634050369263,1.0562971830368042,1.0329523086547852,1.0090575218200684,0.9846935868263245,0.9599347710609436,0.9349110126495361,0.9096108078956604,0.8839359879493713,0.8580445647239685,0.8321131467819214,0.8062962293624878,0.7803827524185181,0.7539368867874146,0.7269884943962097,0.6998342871665955,0.6727391481399536,0.6459682583808899,0.6198227405548096,0.5945395827293396,0.5701333284378052,0.546614944934845,0.5241619348526001,0.5030096173286438,0.4830918610095978,0.46424102783203125,0.44636914134025574,0.4295010268688202,0.41373512148857117,0.3993065655231476,0.3863489031791687,0.37498939037323,0.36516276001930237,0.3567117750644684,0.34958377480506897,0.34382718801498413,0.3394446074962616,0.3363114297389984,0.3341835141181946,0.3328339457511902,0.33216604590415955,0.33196502923965454,0.3318219780921936,0.3313627243041992,0.33065733313560486,0.32973673939704895,0.3287767171859741,0.3275703489780426,0.32573410868644714,0.32341766357421875,0.3206343948841095,0.3175012469291687,0.3141641318798065,0.310667484998703,0.3068810999393463,0.30280783772468567,0.2981817126274109,0.2929636240005493,0.2872481048107147,0.2808453440666199,0.273607462644577,0.26548323035240173,0.2569913864135742,0.24875681102275848,0.24054837226867676,0.23218560218811035,0.22346261143684387,0.21454405784606934,0.2057448923587799,0.1969687044620514,0.19148972630500793,0.1869451254606247,0.18230167031288147,0.1777462363243103,0.17350296676158905,0.16964203119277954,0.16624945402145386,0.16334843635559082,0.1608814150094986,0.15887707471847534,0.15757042169570923,0.15705910325050354,0.15676461160182953,0.1558055281639099,0.15419445931911469,0.15193144977092743,0.14906775951385498,0.1457849144935608,0.14229340851306915,0.13865648210048676,0.14243510365486145,0.14706450700759888,0.15147319436073303,0.15541724860668182,0.15862180292606354,0.16089214384555817,0.16202522814273834,0.16175909340381622,0.15994486212730408,0.15665996074676514,0.15195421874523163,0.14596134424209595,0.13947585225105286,0.13341030478477478,0.1276789754629135,0.12229876965284348,0.11719293892383575,0.11222783476114273,0.10731115192174911,0.10240022838115692,0.0974106714129448,0.0923248678445816,0.08721800893545151,0.08217174559831619,0.07716022431850433,0.07480820268392563,0.07278872281312943,0.07074357569217682,0.0686924159526825,0.06665557622909546,0.06462446600198746,0.06258249282836914,0.06048394367098808,0.05825715884566307,0.055906541645526886,0.05344926938414574,0.05093437433242798,0.04839274287223816,0.04584064334630966,0.043324366211891174,0.040897443890571594,0.03858765959739685,0.036393437534570694,0.03432837128639221,0.03244904801249504,0.030789656564593315,0.02938135340809822,0.02822822891175747,0.02732691913843155,0.026679888367652893,0.026284758001565933,0.026137633249163628,0.14323775470256805,0.0,0.0,0.5081279873847961,0.3630423843860626,0.0,-0.018255,-0.045011,0.003181,-0.063963 2,0.0,0.0,0.0,0.0009306804859079421,0.009585856460034847,0.020108461380004883,0.032440222799777985,0.046518269926309586,0.06227773800492287,0.07963735610246658,0.09848103672266006,0.11865821480751038,0.1488896757364273,0.19660300016403198,0.24429930746555328,0.2945767641067505,0.345316618680954,0.39578354358673096,0.450306236743927,0.5048250555992126,0.5587748885154724,0.614186704158783,0.6681363582611084,0.721177875995636,0.7719404697418213,0.8255054354667664,0.8687918186187744,0.9061083793640137,0.9438246488571167,0.982487678527832,1.0182257890701294,1.0524622201919556,1.0842313766479492,1.1144633293151855,1.1407458782196045,1.1650632619857788,1.1853220462799072,1.1931416988372803,1.1973447799682617,1.1967073678970337,1.1917431354522705,1.1848559379577637,1.1863983869552612,1.180171012878418,1.1808456182479858,1.1644538640975952,1.1476174592971802,1.139690637588501,1.1310341358184814,1.1272388696670532,1.1152210235595703,1.093773603439331,1.0590318441390991,1.0220450162887573,0.9824433922767639,0.9581566452980042,0.9283046126365662,0.8893449902534485,0.8637832999229431,0.8359286785125732,0.803458571434021,0.8110893368721008,0.7883930206298828,0.769569993019104,0.736599326133728,0.6992374658584595,0.6777465343475342,0.6741881966590881,0.671044111251831,0.6680765151977539,0.664774477481842,0.6605854034423828,0.6556973457336426,0.6500316858291626,0.6434630751609802,0.6357719302177429,0.6268970966339111,0.617358922958374,0.6077398061752319,0.5987376570701599,0.5895726084709167,0.578502357006073,0.5655543208122253,0.5514233112335205,0.5361951589584351,0.5202483534812927,0.5043804049491882,0.4890173077583313,0.474770188331604,0.4622876048088074,0.45095524191856384,0.4394868314266205,0.4282333254814148,0.41782838106155396,0.408579021692276,0.4006316661834717,0.4190254509449005,0.43807944655418396,0.4212518632411957,0.4232972264289856,0.4041292369365692,0.3852272927761078,0.3837123215198517,0.38165757060050964,0.3787357211112976,0.374404639005661,0.36859017610549927,0.3616580367088318,0.3533220887184143,0.344603955745697,0.3364063501358032,0.32908573746681213,0.32303041219711304,0.31812265515327454,0.31358474493026733,0.3091912567615509,0.3050493597984314,0.3004007935523987,0.29471608996391296,0.28817132115364075,0.28165388107299805,0.2761516869068146,0.27177420258522034,0.2684633135795593,0.2654974162578583,0.262513667345047,0.2592756748199463,0.25492778420448303,0.24965855479240417,0.24329020082950592,0.2366958111524582,0.2313782125711441,0.22729013860225677,0.22418691217899323,0.2218572497367859,0.22002002596855164,0.21842610836029053,0.21708914637565613,0.21592605113983154,0.21536625921726227,0.2147497832775116,0.21293288469314575,0.21053028106689453,0.2077907919883728,0.2046555131673813,0.20135003328323364,0.19799858331680298,0.19402647018432617,0.18963764607906342,0.18482011556625366,0.1794918328523636,0.17377987504005432,0.16786564886569977,0.16131030023097992,0.15413634479045868,0.14697274565696716,0.14039060473442078,0.1342773735523224,0.12885694205760956,0.12410005927085876,0.11916770786046982,0.11318899691104889,0.10661362111568451,0.09984112530946732,0.09322840720415115,0.08676834404468536,0.08038439601659775,0.07439789175987244,0.06882855296134949,0.06383582949638367,0.059450600296258926,0.05551062524318695,0.051901817321777344,0.048607032746076584,0.04552468657493591,0.042628213763237,0.03994819521903992,0.037432871758937836,0.035108331590890884,0.03296605870127678,0.030791183933615685,0.028320135548710823,0.025629933923482895,0.022796794772148132,0.019936542958021164,0.017027921974658966,0.014029205776751041,0.011087421327829361,0.008258547633886337,0.005624615587294102,0.0033161561004817486,0.0014094742946326733,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.3616580367088318,0.2077907919883728,0.005624615587294102,0.6489679217338562,0.6605854034423828,0.06227773800492287,0.0,0.167201,0.264971,0.229273 diff --git a/tests/unit_tests/snapshots/test_libres_facade/test_misfit_collector/0/misfit_collector.csv b/tests/unit_tests/snapshots/test_libres_facade/test_misfit_collector/0/misfit_collector.csv index d4d4b917f9e..f5bc3163718 100644 --- a/tests/unit_tests/snapshots/test_libres_facade/test_misfit_collector/0/misfit_collector.csv +++ b/tests/unit_tests/snapshots/test_libres_facade/test_misfit_collector/0/misfit_collector.csv @@ -1,6 +1,6 @@ Realization,MISFIT:FOPR,MISFIT:WOPR_OP1_108,MISFIT:WOPR_OP1_144,MISFIT:WOPR_OP1_190,MISFIT:WOPR_OP1_36,MISFIT:WOPR_OP1_72,MISFIT:WOPR_OP1_9,MISFIT:WPR_DIFF_1,MISFIT:TOTAL -0,1572.4551516177269,4.663157777414048,1.2280040962512109,24.150873738474047,0.16579549917171352,16.6031985311065,0.5786173169058768,17.52338148044444,1637.3681800574946 -1,564.7325457301008,4.368782497900839,32.6530612244898,2.25,7.513238617348759,7.502955389862009,4.0,3.917211792502779,626.937795252205 -2,760.2134818146507,0.6758601761400266,0.0495481141274234,0.878978328860087,0.53148428819629,10.315068719501141,0.5691876200100965,21.326953031224996,794.5605620927108 -3,762.2886413785844,0.057372834892021204,2.003570229564708,89.39209245855437,1.0729962591656552,0.23633929814081966,1.963529806065796,4.454344394944445,861.4688866599123 -4,978.6854544674984,0.6099979595035421,11.1651322515757,2.3617365751122437,0.5138762294603726,41.03398708587926,0.04177266072298375,27.46179846677778,1061.8737556965302 +0,1572.455126624968,4.663157777414048,1.2280040962512109,24.150873738474047,0.16579549917171352,16.6031985311065,0.5786173169058768,17.52338148044444,1637.3681550647357 +1,564.7325372587165,4.368782497900839,32.6530612244898,2.25,7.513238617348759,7.502955389862009,4.0,3.917211792502779,626.9377867808207 +2,760.2134646694443,0.6758601761400266,0.0495481141274234,0.878978328860087,0.53148428819629,10.315068719501141,0.5691876200100965,21.326953031224996,794.5605449475045 +3,762.2886383355541,0.057372834892021204,2.003570229564708,89.39209245855437,1.0729962591656552,0.23633929814081966,1.963529806065796,4.454344394944445,861.468883616882 +4,978.68543806519,0.6099979595035421,11.1651322515757,2.3617365751122437,0.5138762294603726,41.03398708587926,0.04177266072298375,27.46179846677778,1061.8737392942219 diff --git a/tests/unit_tests/test_libres_facade.py b/tests/unit_tests/test_libres_facade.py index 1a9ea0c9ca1..e69b12a33cc 100644 --- a/tests/unit_tests/test_libres_facade.py +++ b/tests/unit_tests/test_libres_facade.py @@ -72,9 +72,7 @@ def test_all_data_type_keys(facade): expected = [ "BPR:1,3,8", - "BPR:445", "BPR:5,5,5", - "BPR:721", "FGIP", "FGIPH", "FGOR", @@ -179,8 +177,52 @@ def test_summary_data_verify_indices_and_values( def test_summary_keys(facade): - assert len(facade.get_summary_keys()) == 46 - assert "FOPT" in facade.get_summary_keys() + assert facade.get_summary_keys() == [ + "BPR:1,3,8", + "BPR:5,5,5", + "FGIP", + "FGIPH", + "FGOR", + "FGORH", + "FGPR", + "FGPRH", + "FGPT", + "FGPTH", + "FOIP", + "FOIPH", + "FOPR", + "FOPRH", + "FOPT", + "FOPTH", + "FWCT", + "FWCTH", + "FWIP", + "FWIPH", + "FWPR", + "FWPRH", + "FWPT", + "FWPTH", + "WGOR:OP1", + "WGOR:OP2", + "WGORH:OP1", + "WGORH:OP2", + "WGPR:OP1", + "WGPR:OP2", + "WGPRH:OP1", + "WGPRH:OP2", + "WOPR:OP1", + "WOPR:OP2", + "WOPRH:OP1", + "WOPRH:OP2", + "WWCT:OP1", + "WWCT:OP2", + "WWCTH:OP1", + "WWCTH:OP2", + "WWPR:OP1", + "WWPR:OP2", + "WWPRH:OP1", + "WWPRH:OP2", + ] def test_gen_data_keys(facade):