diff --git a/src/gretel_client/gretel/artifact_fetching.py b/src/gretel_client/gretel/artifact_fetching.py index 870f7a21..ef6d1906 100644 --- a/src/gretel_client/gretel/artifact_fetching.py +++ b/src/gretel_client/gretel/artifact_fetching.py @@ -6,6 +6,7 @@ import webbrowser from dataclasses import dataclass +from enum import Enum from pathlib import Path from typing import List, Union @@ -28,6 +29,20 @@ logger.setLevel(logging.INFO) +class ReportType(str, Enum): + """The kind of report to fetch.""" + + SQS = "sqs" + TEXT = "text" + + @property + def artifact_name(self) -> str: + if self == ReportType.SQS: + return "report" + elif self == ReportType.TEXT: + return "text_metrics_report" + + @dataclass class GretelReport: """Dataclass for a Gretel synthetic data quality report.""" @@ -79,20 +94,25 @@ def fetch_model_logs(model: Model) -> List[dict]: return model_logs -def fetch_model_report(model: Model) -> GretelReport: +def fetch_model_report( + model: Model, report_type: ReportType = ReportType.SQS +) -> GretelReport: """Fetch the quality report from a model training job. Args: model: The Gretel model object. + report_type: The type of report to fetch. One of "sqs" or "text". Returns: The Gretel report object. """ - with model.get_artifact_handle("report_json") as file: + report_type = ReportType(report_type) + + with model.get_artifact_handle(f"{report_type.artifact_name}_json") as file: report_dict = json.load(file) - with model.get_artifact_handle("report") as file: + with model.get_artifact_handle(report_type.artifact_name) as file: report_html = str(file.read(), encoding="utf-8") return GretelReport(as_dict=report_dict, as_html=report_html) diff --git a/src/gretel_client/gretel/config_setup.py b/src/gretel_client/gretel/config_setup.py index 649efc88..054710e0 100644 --- a/src/gretel_client/gretel/config_setup.py +++ b/src/gretel_client/gretel/config_setup.py @@ -3,40 +3,68 @@ from dataclasses import dataclass from enum import Enum from pathlib import Path -from typing import List, Optional, Union +from typing import List, Optional, Tuple, Union +from gretel_client.gretel.artifact_fetching import ReportType from gretel_client.gretel.exceptions import BaseConfigError, ConfigSettingError from gretel_client.projects.exceptions import ModelConfigError from gretel_client.projects.models import read_model_config -class ConfigDictName(str, Enum): - """Name of the model parameter dict in the config.""" +class ModelName(str, Enum): + """Name of the model parameter dict in the config. + Note: The values are the names used in the model configs. + """ + + # tabular ACTGAN = "actgan" AMPLIFY = "amplify" LSTM = "synthetics" TABULAR_DP = "tabular_dp" + # text + GPT_X = "gpt_x" + + # time series + DGAN = "timeseries_dgan" + @dataclass(frozen=True) class ModelConfigSections: - """Config sections for each model type.""" + """Config sections for each model type. + + Args: + model_name: Model name used in the url of the model docs. + config_sections: List of nested config sections (e.g., `params`). + data_source_optional: If True, the `data_source` config parameter is optional. + report_type: The type of quality report generated by the model. + extra_kwargs: List of non-nested config sections. + """ model_name: str config_sections: List[str] + data_source_optional: bool + report_type: Optional[ReportType] = None + extra_kwargs: Optional[List[str]] = None CONFIG_SETUP_DICT = { - ConfigDictName.ACTGAN: ModelConfigSections( + ModelName.ACTGAN: ModelConfigSections( model_name="actgan", config_sections=["params", "generate", "privacy_filters", "evaluate"], + data_source_optional=False, + report_type=ReportType.SQS, + extra_kwargs=["ref_data"], ), - ConfigDictName.AMPLIFY: ModelConfigSections( + ModelName.AMPLIFY: ModelConfigSections( model_name="amplify", config_sections=["params", "evaluate"], + data_source_optional=False, + report_type=ReportType.SQS, + extra_kwargs=["ref_data"], ), - ConfigDictName.LSTM: ModelConfigSections( + ModelName.LSTM: ModelConfigSections( model_name="lstm", config_sections=[ "params", @@ -47,14 +75,60 @@ class ModelConfigSections: "privacy_filters", "evaluate", ], + data_source_optional=False, + report_type=ReportType.SQS, + extra_kwargs=["ref_data"], ), - ConfigDictName.TABULAR_DP: ModelConfigSections( + ModelName.TABULAR_DP: ModelConfigSections( model_name="tabular_dp", + config_sections=["params", "generate", "evaluate"], + data_source_optional=False, + report_type=ReportType.SQS, + extra_kwargs=["ref_data"], + ), + ModelName.GPT_X: ModelConfigSections( + model_name="gpt", + config_sections=["params", "generate"], + data_source_optional=True, + report_type=ReportType.TEXT, + extra_kwargs=["pretrained_model", "column_name", "validation", "ref_data"], + ), + ModelName.DGAN: ModelConfigSections( + model_name="dgan", config_sections=["params", "generate"], + data_source_optional=False, + report_type=None, + extra_kwargs=[ + "attribute_columns", + "df_style", + "discrete_columns", + "example_id_column", + "feature_columns", + "ref_data", + "time_column", + ], ), } +def _backwards_compat_transform_config( + config: dict, non_default_settings: dict +) -> dict: + """ + If the base config is in old format *and* the user passes in a params dict, move the + non-default params to the base (non-nested) config level to be consistent with old format. + """ + model_type, model_config_section = extract_model_config_section(config) + if ( + model_type == ModelName.GPT_X.value + and "params" in non_default_settings + and "params" not in model_config_section + ): + params = non_default_settings.pop("params") + model_config_section.update(params) + return config + + def create_model_config_from_base( base_config: Union[str, Path], job_label: Optional[str] = None, @@ -64,12 +138,14 @@ def create_model_config_from_base( To update the base config, pass in keyword arguments, where the keys are config section names and the values are dicts of non-default settings. + If the parameter is not nested within a section, pass it directly as + a keyword argument. The base config can be given as a yaml file path or the name of one of the Gretel template files (without the extension) listed here: https://github.com/gretelai/gretel-blueprints/tree/main/config_templates/gretel/synthetics - Example:: + Examples:: # Create an ACTGAN config with 10 epochs. from gretel_client.gretel.config_setup import create_model_config_from_base @@ -78,6 +154,15 @@ def create_model_config_from_base( params={"epochs": 10}, ) + # Create a GPT config with a custom column name and 100 epochs. + from gretel_client.gretel.config_setup import create_model_config_from_base + config = create_model_config_from_base( + base_config="natural-language", + column_name="custom_name", # not nested in a config section + params={"epochs": 100}, # nested in the `params` section + ) + + The model configs are documented at https://docs.gretel.ai/reference/synthetics/models. For ACTGAN, the available config sections are `params`, `generate`, and `privacy_filters`. @@ -110,26 +195,41 @@ def create_model_config_from_base( "gretel-blueprints/tree/main/config_templates/gretel/synthetics" ) from e - dict_name = list(config["models"][0].keys())[0] - setup = CONFIG_SETUP_DICT[ConfigDictName(dict_name)] + model_type, model_config_section = extract_model_config_section(config) + setup = CONFIG_SETUP_DICT[ModelName(model_type)] + + config = _backwards_compat_transform_config(config, non_default_settings) if job_label is not None: config["name"] = f"{config['name']}-{job_label}" for section, settings in non_default_settings.items(): - if section not in setup.config_sections: + if not isinstance(settings, dict): + extra_kwargs = setup.extra_kwargs or [] + if section in extra_kwargs: + model_config_section[section] = settings + else: + raise ConfigSettingError( + f"`{section}` is an invalid keyword argument. Valid options " + f"include {setup.config_sections + extra_kwargs}." + ) + elif section not in setup.config_sections: raise ConfigSettingError( f"`{section}` is not a valid `{setup.model_name}` config section. " f"Must be one of [{setup.config_sections}]." ) - if not isinstance(settings, dict): - raise ConfigSettingError( - f"Invalid value for the `{section}` keyword argument. " - f"Must be a dict, but you gave `{type(settings)}`." - ) - for k, v in settings.items(): - if section not in config["models"][0][dict_name]: - config["models"][0][dict_name][section] = {} - config["models"][0][dict_name][section][k] = v - + else: + model_config_section.setdefault(section, {}).update(settings) return config + + +def extract_model_config_section(config: dict) -> Tuple[str, dict]: + """Extract the model type and config dict from a Gretel model config. + + Args: + config: The full Gretel config. + + Returns: + A tuple of the model type and the model section from the config. + """ + return next(iter(config["models"][0].items())) diff --git a/src/gretel_client/gretel/interface.py b/src/gretel_client/gretel/interface.py index 43aa5e78..c34e5f47 100644 --- a/src/gretel_client/gretel/interface.py +++ b/src/gretel_client/gretel/interface.py @@ -7,23 +7,17 @@ from gretel_client.config import configure_session from gretel_client.dataframe import _DataFrameT -from gretel_client.evaluation.quality_report import QualityReport -from gretel_client.evaluation.reports import ( - DEFAULT_CORRELATION_COLUMNS, - DEFAULT_RECORD_COUNT, - DEFAULT_SQS_REPORT_COLUMNS, -) from gretel_client.gretel.artifact_fetching import ( fetch_final_model_config, fetch_model_logs, fetch_model_report, fetch_synthetic_data, - GretelReport, PANDAS_IS_INSTALLED, ) from gretel_client.gretel.config_setup import ( CONFIG_SETUP_DICT, create_model_config_from_base, + extract_model_config_section, ) from gretel_client.gretel.exceptions import ( GretelJobSubmissionError, @@ -43,9 +37,9 @@ def _convert_to_valid_data_source( - data: Union[str, Path, _DataFrameT] -) -> Union[str, _DataFrameT]: - """Returns a valid data source (str of DataFrame) for a Gretel job.""" + data: Optional[Union[str, Path, _DataFrameT]] = None +) -> Optional[Union[str, _DataFrameT]]: + """Returns a valid data source (str, DataFrame, or None) for a Gretel job.""" return str(data) if isinstance(data, Path) else data @@ -113,7 +107,7 @@ def get_project(self) -> Project: If a project has not been set, a new one will be created. """ if self._project is None: - logger.info("No project set. Creating a new one...") + logger.info("No project set -> creating a new one...") self.set_project() return self._project @@ -159,6 +153,7 @@ def set_project( self._last_model = None self._project = project + logger.info(f"Project URL: {project.get_console_url()}") def fetch_model(self, model_id: str) -> Model: """Fetch a Gretel model using its ID. @@ -225,54 +220,11 @@ def fetch_generate_job_results( generated.refresh() return generated - def submit_evaluate( - self, - real_data: Union[str, Path, _DataFrameT], - synthetic_data: Union[str, Path, _DataFrameT], - num_eval_records: int = DEFAULT_RECORD_COUNT, - job_label: Optional[str] = None, - **kwargs, - ) -> GretelReport: - """Submit a synthetic data quality evaluate job. - - Args: - real_data: Real data source to compare against. - synthetic_data: Synthetic data source to evaluate. - num_eval_records: Number of records to sample for evaluation. - job_label: Descriptive label to append to job the name. - - Returns: - GretelReport object with the report as a dict and as HTML. - """ - - project = self.get_project() - - qr = QualityReport( - project=project, - name="evaluate" + (f"-{job_label}" if job_label else ""), - ref_data=_convert_to_valid_data_source(real_data), - data_source=_convert_to_valid_data_source(synthetic_data), - record_count=num_eval_records, - correlation_column_count=kwargs.get( - "correlation_column_count", DEFAULT_CORRELATION_COLUMNS - ), - column_count=kwargs.get("column_count", DEFAULT_SQS_REPORT_COLUMNS), - mandatory_columns=kwargs.get("mandatory_columns", []), - ) - - logger.info( - "Submitting synthetic data evaluation job...\n" - f"Console URL: {project.get_console_url()}/models/" - ) - qr.run() - - return GretelReport(as_dict=qr.as_dict, as_html=qr.as_html) - def submit_train( self, base_config: str, *, - data_source: Union[str, Path, _DataFrameT], + data_source: Union[str, Path, _DataFrameT, None], job_label: Optional[str] = None, wait: bool = True, **non_default_config_settings, @@ -293,6 +245,8 @@ def submit_train( template. The format is `section={"setting": "value"}`, where `section` is the name of a yaml section within the specific model settings, e.g. `params` or `privacy_filters`. + If the parameter is not nested within a section, pass it + directly as a keyword argument. Returns: Job results including the model object, report, logs, and final config. @@ -308,19 +262,29 @@ def submit_train( privacy_filters={"similarity": "high", "outliers": None}, ) """ - model_config = create_model_config_from_base( + job_config = create_model_config_from_base( base_config=base_config, job_label=job_label, **non_default_config_settings, ) + data_source = _convert_to_valid_data_source(data_source) + + model_type, model_config_section = extract_model_config_section(job_config) + model_setup = CONFIG_SETUP_DICT[model_type] + model_name = model_setup.model_name.replace("_", "-") + + if data_source is None: + if not model_setup.data_source_optional: + raise GretelJobSubmissionError( + f"A data source must be provided for {model_name.upper()}." + ) + model_config_section["data_source"] = None + project = self.get_project() - data_source = _convert_to_valid_data_source(data_source) - model = project.create_model_obj(model_config, data_source=data_source) + model = project.create_model_obj(job_config, data_source=data_source) - dict_name = list(model_config["models"][0].keys())[0] - model_name = CONFIG_SETUP_DICT[dict_name].model_name.replace("_", "-") docs_path = f"reference/synthetics/models/gretel-{model_name}" project_url = project.get_console_url() @@ -339,9 +303,13 @@ def submit_train( if wait: poll(model, verbose=False) - report = fetch_model_report(model) logs = fetch_model_logs(model) final_config = fetch_final_model_config(model) + if ( + model_setup.report_type is not None + and model_config_section.get("data_source") is not None + ): + report = fetch_model_report(model, model_setup.report_type) self._last_model = model @@ -393,7 +361,7 @@ def submit_generate( import pandas pd from gretel_client import Gretel gretel = Gretel(project_name="my-project") - df_seed = pd.DataFrame(["rare_class"] * 1000, columns=["rare"]) + df_seed = pd.DataFrame(["rare_class"] * 1000, columns=["field_name"]) generated = gretel.submit_generate(model_id, seed_data=df_seed) """ @@ -417,8 +385,8 @@ def submit_generate( data_source=_convert_to_valid_data_source(seed_data), params=generate_kwargs ) - dict_name = list(model.model_config["models"][0].keys())[0] - model_name = CONFIG_SETUP_DICT[dict_name].model_name.replace("_", "-") + model_type, _ = extract_model_config_section(model.model_config) + model_name = CONFIG_SETUP_DICT[model_type].model_name.replace("_", "-") docs_path = f"reference/synthetics/models/gretel-{model_name}" project_url = project.get_console_url() diff --git a/src/gretel_client/gretel/job_results.py b/src/gretel_client/gretel/job_results.py index 59522795..22ba9a7a 100644 --- a/src/gretel_client/gretel/job_results.py +++ b/src/gretel_client/gretel/job_results.py @@ -17,6 +17,10 @@ fetch_synthetic_data, GretelReport, ) +from gretel_client.gretel.config_setup import ( + CONFIG_SETUP_DICT, + extract_model_config_section, +) from gretel_client.gretel.exceptions import GretelJobResultsError from gretel_client.helpers import poll from gretel_client.projects import Project @@ -70,6 +74,10 @@ def job_status(self) -> Status: self.model.refresh() return self.model.status + @property + def model_config_section(self) -> dict: + return next(iter(self.model_config["models"][0].values())) + def fetch_report_synthetic_data(self) -> _DataFrameT: """Fetch synthetic data generated for the report and return as a DataFrame. @@ -80,6 +88,11 @@ def fetch_report_synthetic_data(self) -> _DataFrameT: "The `pandas` package is required to use this method. " "Please install it with `pip install pandas`." ) + if self.model_config_section.get("data_source") is None: + raise GretelJobResultsError( + "The training job did not have a data source, so " + "no synthetic data was generated for the report." + ) if self.job_status != Status.COMPLETED: raise GretelJobResultsError( "The training job must be in a completed state " @@ -94,12 +107,18 @@ def fetch_report_synthetic_data(self) -> _DataFrameT: def refresh(self): """Refresh the training job results attributes.""" if self.job_status == Status.COMPLETED: - if self.report is None: - self.report = fetch_model_report(self.model) if self.model_logs is None: self.model_logs = fetch_model_logs(self.model) if self.model_config is None: self.model_config = fetch_final_model_config(self.model) + if ( + self.report is None + and self.model_config_section.get("data_source") is not None + ): + model_type, _ = extract_model_config_section(self.model.model_config) + report_type = CONFIG_SETUP_DICT[model_type].report_type + if report_type is not None: + self.report = fetch_model_report(self.model, report_type) def wait_for_completion(self): """Wait for the model to finish training.""" diff --git a/src/gretel_client/helpers.py b/src/gretel_client/helpers.py index 2ea8adbc..e59a0297 100644 --- a/src/gretel_client/helpers.py +++ b/src/gretel_client/helpers.py @@ -3,7 +3,7 @@ import sys from pathlib import Path -from typing import Callable, Dict, Optional, Union +from typing import Callable, Dict, Optional, Tuple, Union from gretel_client.cli.utils.parser_utils import ref_data_factory from gretel_client.config import get_logger, get_session_config @@ -142,7 +142,7 @@ def _quiet_poll( ) -def _get_quiet_poll_context(job: Job) -> int: +def _get_quiet_poll_context(job: Job) -> Tuple[Optional[int], Optional[int]]: num_epochs = None num_records = None if isinstance(job, RecordHandler): @@ -152,13 +152,10 @@ def _get_quiet_poll_context(job: Job) -> int: num_records = job.model_config["models"][0][job.model_type]["params"][ "num_records" ] - if job.model_type in ["actgan", "gpt_x", "synthetics"]: - if job.model_type == "gpt_x": - num_epochs = job.model_config["models"][0][job.model_type]["epochs"] - else: - num_epochs = job.model_config["models"][0][job.model_type]["params"][ - "epochs" - ] + elif job.model_type in ["actgan", "gpt_x", "synthetics"]: + num_epochs = job.model_config["models"][0][job.model_type]["params"][ + "epochs" + ] num_records = job.model_config["models"][0][job.model_type]["generate"][ "num_records" ] diff --git a/tests/gretel_client/fixtures/daily-website-visitors.csv b/tests/gretel_client/fixtures/daily-website-visitors.csv new file mode 100644 index 00000000..7c7dfeba --- /dev/null +++ b/tests/gretel_client/fixtures/daily-website-visitors.csv @@ -0,0 +1,2168 @@ +Date,Page.Loads,Unique.Visits,First.Time.Visits,Returning.Visits +2014-9-14,2146,1582,1430,152 +2014-9-15,3621,2528,2297,231 +2014-9-16,3698,2630,2352,278 +2014-9-17,3667,2614,2327,287 +2014-9-18,3316,2366,2130,236 +2014-9-19,2815,1863,1622,241 +2014-9-20,1658,1118,985,133 +2014-9-21,2288,1656,1481,175 +2014-9-22,3638,2586,2312,274 +2014-9-23,4462,3257,2989,268 +2014-9-24,4414,3175,2891,284 +2014-9-25,4315,3029,2743,286 +2014-9-26,3323,2249,2033,216 +2014-9-27,1656,1180,1040,140 +2014-9-28,2465,1806,1613,193 +2014-9-29,4096,2873,2577,296 +2014-9-30,4474,3032,2720,312 +2014-10-1,4124,2849,2541,308 +2014-10-2,3514,2489,2239,250 +2014-10-3,3005,2097,1856,241 +2014-10-4,2054,1436,1274,162 +2014-10-5,2847,1913,1713,200 +2014-10-6,4501,3181,2853,328 +2014-10-7,4603,3163,2804,359 +2014-10-8,4187,3014,2663,351 +2014-10-9,4343,2864,2545,319 +2014-10-10,3565,2382,2100,282 +2014-10-11,2080,1457,1280,177 +2014-10-12,3031,2089,1856,233 +2014-10-13,4814,3339,2973,366 +2014-10-14,5040,3604,3217,387 +2014-10-15,5028,3515,3094,421 +2014-10-16,4658,3331,2955,376 +2014-10-17,3624,2477,2148,329 +2014-10-18,2285,1619,1416,203 +2014-10-19,3454,2346,2060,286 +2014-10-20,5307,3717,3308,409 +2014-10-21,5135,3701,3280,421 +2014-10-22,5084,3611,3177,434 +2014-10-23,4650,3316,2940,376 +2014-10-24,3571,2498,2170,328 +2014-10-25,2354,1661,1417,244 +2014-10-26,3497,2508,2218,290 +2014-10-27,5294,3737,3286,451 +2014-10-28,4643,3328,2905,423 +2014-10-29,4596,3279,2863,416 +2014-10-30,4162,3041,2657,384 +2014-10-31,2933,2007,1728,279 +2014-11-1,2202,1496,1270,226 +2014-11-2,3083,2204,1940,264 +2014-11-3,4376,3057,2629,428 +2014-11-4,4704,3141,2739,402 +2014-11-5,4306,3200,2797,403 +2014-11-6,4178,3034,2627,407 +2014-11-7,3236,2318,1975,343 +2014-11-8,2010,1536,1345,191 +2014-11-9,2901,2141,1849,292 +2014-11-10,4754,3325,2885,440 +2014-11-11,4417,3203,2793,410 +2014-11-12,4535,3351,2897,454 +2014-11-13,4274,3194,2758,436 +2014-11-14,3382,2423,2061,362 +2014-11-15,2085,1488,1280,208 +2014-11-16,3083,2215,1926,289 +2014-11-17,4860,3559,3069,490 +2014-11-18,4893,3570,3133,437 +2014-11-19,4866,3544,3056,488 +2014-11-20,4584,3357,2899,458 +2014-11-21,3914,2750,2361,389 +2014-11-22,2431,1716,1463,253 +2014-11-23,3157,2369,2082,287 +2014-11-24,5045,3615,3146,469 +2014-11-25,4746,3236,2821,415 +2014-11-26,4314,2919,2513,406 +2014-11-27,3663,2476,2162,314 +2014-11-28,3270,2268,1931,337 +2014-11-29,2905,1976,1695,281 +2014-11-30,4016,2832,2489,343 +2014-12-1,5266,3877,3317,560 +2014-12-2,5795,4274,3700,574 +2014-12-3,5728,4217,3656,561 +2014-12-4,5293,3830,3295,535 +2014-12-5,3934,2856,2479,377 +2014-12-6,3071,2165,1855,310 +2014-12-7,3876,2984,2582,402 +2014-12-8,5878,4375,3829,546 +2014-12-9,5712,4187,3635,552 +2014-12-10,5491,4074,3480,594 +2014-12-11,5144,3801,3247,554 +2014-12-12,3880,2860,2418,442 +2014-12-13,2605,1838,1538,300 +2014-12-14,3625,2650,2259,391 +2014-12-15,4685,3478,3000,478 +2014-12-16,4891,3338,2861,477 +2014-12-17,4222,3053,2606,447 +2014-12-18,3691,2690,2275,415 +2014-12-19,2748,1879,1559,320 +2014-12-20,1380,1011,836,175 +2014-12-21,1474,1054,876,178 +2014-12-22,2452,1715,1394,321 +2014-12-23,2298,1440,1159,281 +2014-12-24,1430,947,772,175 +2014-12-25,1002,667,522,145 +2014-12-26,1486,1005,808,197 +2014-12-27,1345,941,781,160 +2014-12-28,1453,948,765,183 +2014-12-29,2173,1472,1228,244 +2014-12-30,2208,1424,1172,252 +2014-12-31,1381,955,773,182 +2015-1-1,1265,876,715,161 +2015-1-2,1948,1288,1030,258 +2015-1-3,1742,1096,946,150 +2015-1-4,1896,1409,1186,223 +2015-1-5,3033,2062,1706,356 +2015-1-6,3445,2327,1942,385 +2015-1-7,3423,2384,1991,393 +2015-1-8,3319,2272,1922,350 +2015-1-9,2783,1941,1663,278 +2015-1-10,1952,1240,1066,174 +2015-1-11,2245,1611,1391,220 +2015-1-12,3928,2518,2125,393 +2015-1-13,3810,2621,2239,382 +2015-1-14,3931,2656,2229,427 +2015-1-15,3523,2457,2069,388 +2015-1-16,2943,1928,1640,288 +2015-1-17,1751,1237,1052,185 +2015-1-18,2491,1762,1541,221 +2015-1-19,3766,2665,2271,394 +2015-1-20,4194,2852,2423,429 +2015-1-21,4038,2916,2482,434 +2015-1-22,3891,2702,2334,368 +2015-1-23,3111,2181,1897,284 +2015-1-24,1946,1414,1239,175 +2015-1-25,2802,2010,1740,270 +2015-1-26,3892,2841,2466,375 +2015-1-27,4172,3003,2592,411 +2015-1-28,4464,3280,2862,418 +2015-1-29,4377,3143,2679,464 +2015-1-30,3734,2514,2129,385 +2015-1-31,2262,1657,1443,214 +2015-2-1,3050,2122,1825,297 +2015-2-2,4794,3366,2867,499 +2015-2-3,4936,3423,2922,501 +2015-2-4,5016,3500,3023,477 +2015-2-5,4489,3170,2753,417 +2015-2-6,3505,2468,2075,393 +2015-2-7,2264,1679,1437,242 +2015-2-8,3314,2435,2100,335 +2015-2-9,5095,3619,3125,494 +2015-2-10,5525,3793,3272,521 +2015-2-11,5074,3689,3190,499 +2015-2-12,4571,3319,2810,509 +2015-2-13,3570,2664,2253,411 +2015-2-14,2182,1565,1323,242 +2015-2-15,3265,2277,1935,342 +2015-2-16,4670,3297,2826,471 +2015-2-17,4764,3452,2957,495 +2015-2-18,4943,3526,3026,500 +2015-2-19,4790,3307,2811,496 +2015-2-20,3604,2621,2241,380 +2015-2-21,2455,1823,1569,254 +2015-2-22,3650,2690,2329,361 +2015-2-23,5463,3975,3433,542 +2015-2-24,5884,4112,3542,570 +2015-2-25,5615,4019,3432,587 +2015-2-26,5289,3747,3186,561 +2015-2-27,4434,2969,2486,483 +2015-2-28,2665,1977,1694,283 +2015-3-1,3907,2906,2519,387 +2015-3-2,5308,3778,3222,556 +2015-3-3,5773,4025,3490,535 +2015-3-4,5585,4060,3457,603 +2015-3-5,4783,3582,3049,533 +2015-3-6,3893,2707,2259,448 +2015-3-7,2917,2048,1723,325 +2015-3-8,3353,2468,2104,364 +2015-3-9,5400,3824,3246,578 +2015-3-10,5395,3926,3350,576 +2015-3-11,5229,3859,3263,596 +2015-3-12,5371,3784,3204,580 +2015-3-13,4185,3045,2559,486 +2015-3-14,2724,1988,1675,313 +2015-3-15,3590,2620,2196,424 +2015-3-16,5367,3771,3192,579 +2015-3-17,5440,3968,3387,581 +2015-3-18,5465,4043,3458,585 +2015-3-19,5318,3813,3262,551 +2015-3-20,4225,2916,2462,454 +2015-3-21,2687,1975,1667,308 +2015-3-22,3791,2786,2388,398 +2015-3-23,5661,3949,3331,618 +2015-3-24,5759,4081,3487,594 +2015-3-25,5599,3983,3378,605 +2015-3-26,5103,3755,3184,571 +2015-3-27,4313,2946,2446,500 +2015-3-28,2971,2011,1651,360 +2015-3-29,3662,2693,2285,408 +2015-3-30,5635,3985,3386,599 +2015-3-31,5581,3963,3359,604 +2015-4-1,5329,3761,3170,591 +2015-4-2,4553,3214,2710,504 +2015-4-3,3423,2404,1988,416 +2015-4-4,2708,1807,1512,295 +2015-4-5,3306,2266,1895,371 +2015-4-6,5203,3692,3133,559 +2015-4-7,5712,4104,3456,648 +2015-4-8,5601,4015,3401,614 +2015-4-9,5486,4063,3430,633 +2015-4-10,4178,3213,2697,516 +2015-4-11,2878,2153,1835,318 +2015-4-12,4169,2903,2447,456 +2015-4-13,6372,4485,3787,698 +2015-4-14,6240,4391,3698,693 +2015-4-15,6170,4409,3723,686 +2015-4-16,6071,4275,3586,689 +2015-4-17,4682,3307,2741,566 +2015-4-18,3208,2291,1894,397 +2015-4-19,4310,3144,2669,475 +2015-4-20,6435,4694,3929,765 +2015-4-21,6299,4455,3769,686 +2015-4-22,6360,4512,3797,715 +2015-4-23,6349,4360,3664,696 +2015-4-24,4660,3387,2845,542 +2015-4-25,3354,2420,2035,385 +2015-4-26,4371,3189,2688,501 +2015-4-27,6534,4731,3977,754 +2015-4-28,6832,4941,4161,780 +2015-4-29,6689,4870,4110,760 +2015-4-30,5849,4086,3450,636 +2015-5-1,4247,3064,2562,502 +2015-5-2,3219,2360,1958,402 +2015-5-3,4211,3210,2765,445 +2015-5-4,6424,4752,4043,709 +2015-5-5,6223,4520,3818,702 +2015-5-6,6551,4768,4059,709 +2015-5-7,6343,4449,3770,679 +2015-5-8,4696,3366,2824,542 +2015-5-9,3134,2239,1846,393 +2015-5-10,3868,2844,2365,479 +2015-5-11,6020,4482,3787,695 +2015-5-12,5705,4160,3490,670 +2015-5-13,5752,4016,3348,668 +2015-5-14,5181,3605,3008,597 +2015-5-15,4269,2913,2404,509 +2015-5-16,2633,1818,1473,345 +2015-5-17,3336,2376,1988,388 +2015-5-18,5127,3587,2955,632 +2015-5-19,5449,3767,3149,618 +2015-5-20,5746,3956,3371,585 +2015-5-21,5115,3642,3046,596 +2015-5-22,3995,2749,2243,506 +2015-5-23,2618,1884,1585,299 +2015-5-24,2961,2117,1763,354 +2015-5-25,4090,2913,2427,486 +2015-5-26,5201,3637,3073,564 +2015-5-27,5321,3797,3146,651 +2015-5-28,5219,3509,2887,622 +2015-5-29,4017,2804,2338,466 +2015-5-30,2297,1629,1346,283 +2015-5-31,3145,2226,1860,366 +2015-6-1,4905,3419,2797,622 +2015-6-2,4747,3284,2701,583 +2015-6-3,4591,3317,2713,604 +2015-6-4,4431,3173,2652,521 +2015-6-5,3608,2523,2068,455 +2015-6-6,2422,1673,1336,337 +2015-6-7,3132,2145,1790,355 +2015-6-8,4962,3377,2788,589 +2015-6-9,4881,3469,2862,607 +2015-6-10,5001,3425,2786,639 +2015-6-11,4635,3242,2614,628 +2015-6-12,3545,2494,2066,428 +2015-6-13,2262,1490,1235,255 +2015-6-14,2866,2034,1692,342 +2015-6-15,4692,3261,2682,579 +2015-6-16,4602,3204,2660,544 +2015-6-17,4620,3101,2556,545 +2015-6-18,4475,2955,2386,569 +2015-6-19,3564,2422,1954,468 +2015-6-20,2071,1370,1129,241 +2015-6-21,2659,1840,1523,317 +2015-6-22,4338,2963,2410,553 +2015-6-23,4531,3139,2566,573 +2015-6-24,4498,3022,2481,541 +2015-6-25,4128,2730,2210,520 +2015-6-26,3132,2153,1721,432 +2015-6-27,1829,1264,1067,197 +2015-6-28,2149,1517,1224,293 +2015-6-29,3975,2691,2169,522 +2015-6-30,4046,2718,2180,538 +2015-7-1,3897,2745,2266,479 +2015-7-2,3871,2540,2072,468 +2015-7-3,2630,1716,1353,363 +2015-7-4,1602,1104,900,204 +2015-7-5,1960,1370,1141,229 +2015-7-6,4143,2655,2171,484 +2015-7-7,4205,2789,2266,523 +2015-7-8,4193,2783,2255,528 +2015-7-9,3710,2536,2069,467 +2015-7-10,3137,2203,1767,436 +2015-7-11,1834,1145,944,201 +2015-7-12,2070,1473,1197,276 +2015-7-13,4180,2852,2310,542 +2015-7-14,4038,2731,2226,505 +2015-7-15,3906,2667,2119,548 +2015-7-16,3580,2424,1940,484 +2015-7-17,2948,2070,1708,362 +2015-7-18,1622,1121,924,197 +2015-7-19,2179,1480,1214,266 +2015-7-20,3906,2615,2146,469 +2015-7-21,3745,2596,2071,525 +2015-7-22,4212,2761,2205,556 +2015-7-23,3901,2595,2095,500 +2015-7-24,3292,2207,1785,422 +2015-7-25,1819,1229,1016,213 +2015-7-26,2068,1562,1286,276 +2015-7-27,3991,2805,2243,562 +2015-7-28,4073,2862,2361,501 +2015-7-29,4069,2825,2324,501 +2015-7-30,3716,2629,2126,503 +2015-7-31,3380,2120,1709,411 +2015-8-1,1737,1197,958,239 +2015-8-2,2181,1567,1282,285 +2015-8-3,3973,2794,2263,531 +2015-8-4,3997,2794,2269,525 +2015-8-5,4132,2798,2287,511 +2015-8-6,3791,2693,2204,489 +2015-8-7,2968,2139,1738,401 +2015-8-8,1752,1266,1021,245 +2015-8-9,2070,1497,1231,266 +2015-8-10,3920,2684,2139,545 +2015-8-11,4106,2791,2266,525 +2015-8-12,4006,2726,2166,560 +2015-8-13,3827,2639,2133,506 +2015-8-14,2944,1973,1564,409 +2015-8-15,1827,1193,954,239 +2015-8-16,2373,1658,1369,289 +2015-8-17,4031,2763,2290,473 +2015-8-18,4027,2780,2248,532 +2015-8-19,3912,2795,2291,504 +2015-8-20,3867,2715,2191,524 +2015-8-21,3304,2238,1806,432 +2015-8-22,1685,1208,1011,197 +2015-8-23,2130,1542,1282,260 +2015-8-24,3936,2697,2182,515 +2015-8-25,4029,2744,2203,541 +2015-8-26,4010,2789,2237,552 +2015-8-27,4027,2890,2392,498 +2015-8-28,2829,2000,1585,415 +2015-8-29,1736,1227,1023,204 +2015-8-30,2517,1686,1416,270 +2015-8-31,4029,2769,2299,470 +2015-9-1,4261,2890,2358,532 +2015-9-2,4058,2923,2442,481 +2015-9-3,4392,3007,2466,541 +2015-9-4,3072,2221,1846,375 +2015-9-5,1799,1284,1068,216 +2015-9-6,2341,1611,1345,266 +2015-9-7,3330,2354,1963,391 +2015-9-8,4734,3381,2833,548 +2015-9-9,4801,3381,2845,536 +2015-9-10,4399,3079,2575,504 +2015-9-11,3275,2375,1958,417 +2015-9-12,2042,1429,1223,206 +2015-9-13,2827,2103,1844,259 +2015-9-14,4836,3437,2954,483 +2015-9-15,4840,3465,2944,521 +2015-9-16,4504,3356,2902,454 +2015-9-17,4379,3240,2736,504 +2015-9-18,3391,2428,2024,404 +2015-9-19,2045,1513,1278,235 +2015-9-20,2721,2081,1817,264 +2015-9-21,4630,3535,2998,537 +2015-9-22,4748,3540,3004,536 +2015-9-23,4702,3377,2893,484 +2015-9-24,4440,3309,2827,482 +2015-9-25,3513,2518,2116,402 +2015-9-26,2253,1633,1395,238 +2015-9-27,3141,2291,1980,311 +2015-9-28,5122,3808,3289,519 +2015-9-29,5151,3868,3305,563 +2015-9-30,4969,3703,3182,521 +2015-10-1,4619,3365,2876,489 +2015-10-2,3443,2598,2196,402 +2015-10-3,2302,1754,1503,251 +2015-10-4,3291,2506,2173,333 +2015-10-5,5206,3737,3170,567 +2015-10-6,5474,3940,3337,603 +2015-10-7,5400,3934,3350,584 +2015-10-8,5334,3821,3244,577 +2015-10-9,4174,3022,2547,475 +2015-10-10,2571,1853,1597,256 +2015-10-11,3572,2636,2283,353 +2015-10-12,5018,3788,3241,547 +2015-10-13,5565,4159,3536,623 +2015-10-14,5420,4048,3403,645 +2015-10-15,5366,3908,3331,577 +2015-10-16,4091,3002,2507,495 +2015-10-17,2824,2087,1770,317 +2015-10-18,3843,2825,2441,384 +2015-10-19,5516,4140,3491,649 +2015-10-20,5572,4121,3460,661 +2015-10-21,5243,3882,3298,584 +2015-10-22,5133,3720,3104,616 +2015-10-23,4084,2947,2441,506 +2015-10-24,2739,1978,1647,331 +2015-10-25,3781,2857,2435,422 +2015-10-26,5684,4073,3417,656 +2015-10-27,5687,4179,3534,645 +2015-10-28,5906,4266,3614,652 +2015-10-29,5541,4020,3368,652 +2015-10-30,4171,3043,2501,542 +2015-10-31,2586,1820,1496,324 +2015-11-1,3838,2922,2456,466 +2015-11-2,5675,4076,3419,657 +2015-11-3,5624,4178,3504,674 +2015-11-4,5794,4316,3670,646 +2015-11-5,5389,4031,3379,652 +2015-11-6,4305,3047,2522,525 +2015-11-7,3281,2202,1854,348 +2015-11-8,3790,2837,2418,419 +2015-11-9,5894,4203,3487,716 +2015-11-10,5461,4048,3388,660 +2015-11-11,5206,3869,3219,650 +2015-11-12,5228,3929,3281,648 +2015-11-13,4097,2971,2436,535 +2015-11-14,2694,1964,1616,348 +2015-11-15,3893,2930,2483,447 +2015-11-16,6185,4550,3872,678 +2015-11-17,6178,4503,3795,708 +2015-11-18,6067,4397,3693,704 +2015-11-19,5656,4166,3487,679 +2015-11-20,4398,3173,2645,528 +2015-11-21,2836,2086,1741,345 +2015-11-22,3896,2927,2424,503 +2015-11-23,5814,4236,3543,693 +2015-11-24,5879,4140,3475,665 +2015-11-25,4800,3457,2836,621 +2015-11-26,3838,2825,2334,491 +2015-11-27,3576,2579,2118,461 +2015-11-28,2799,1974,1652,322 +2015-11-29,4228,3127,2605,522 +2015-11-30,6331,4570,3817,753 +2015-12-1,6380,4743,4027,716 +2015-12-2,6314,4829,4039,790 +2015-12-3,6160,4584,3835,749 +2015-12-4,4859,3615,2995,620 +2015-12-5,3317,2468,2040,428 +2015-12-6,4715,3550,2972,578 +2015-12-7,6940,5136,4303,833 +2015-12-8,6551,4866,4068,798 +2015-12-9,6327,4761,3961,800 +2015-12-10,6212,4578,3830,748 +2015-12-11,4687,3388,2771,617 +2015-12-12,3014,2283,1856,427 +2015-12-13,4132,3064,2548,516 +2015-12-14,5989,4330,3606,724 +2015-12-15,5331,3967,3309,658 +2015-12-16,5183,3665,3025,640 +2015-12-17,4769,3515,2917,598 +2015-12-18,3627,2518,2071,447 +2015-12-19,1857,1319,1087,232 +2015-12-20,2221,1489,1204,285 +2015-12-21,3335,2335,1906,429 +2015-12-22,2883,2047,1639,408 +2015-12-23,2353,1621,1312,309 +2015-12-24,1578,1099,886,213 +2015-12-25,1017,724,586,138 +2015-12-26,1334,936,760,176 +2015-12-27,1690,1155,947,208 +2015-12-28,2838,1829,1474,355 +2015-12-29,2815,1786,1419,367 +2015-12-30,2382,1618,1292,326 +2015-12-31,1587,1035,809,226 +2016-1-1,1411,960,786,174 +2016-1-2,1838,1197,969,228 +2016-1-3,2180,1562,1279,283 +2016-1-4,3587,2494,2037,457 +2016-1-5,3855,2742,2230,512 +2016-1-6,3840,2628,2127,501 +2016-1-7,3735,2746,2258,488 +2016-1-8,3223,2286,1860,426 +2016-1-9,2207,1531,1280,251 +2016-1-10,2814,2000,1661,339 +2016-1-11,4007,2976,2444,532 +2016-1-12,4119,2961,2385,576 +2016-1-13,4338,3164,2631,533 +2016-1-14,4432,2962,2418,544 +2016-1-15,3306,2349,1866,483 +2016-1-16,2223,1557,1262,295 +2016-1-17,2757,2002,1635,367 +2016-1-18,4047,2898,2373,525 +2016-1-19,4489,3190,2566,624 +2016-1-20,4588,3232,2656,576 +2016-1-21,4398,3106,2561,545 +2016-1-22,3340,2455,1990,465 +2016-1-23,2344,1639,1338,301 +2016-1-24,2973,2094,1736,358 +2016-1-25,4638,3205,2649,556 +2016-1-26,4791,3409,2834,575 +2016-1-27,5104,3768,3197,571 +2016-1-28,4621,3439,2876,563 +2016-1-29,3831,2715,2232,483 +2016-1-30,2295,1690,1400,290 +2016-1-31,3235,2462,2050,412 +2016-2-1,4918,3640,3060,580 +2016-2-2,5127,3783,3195,588 +2016-2-3,4794,3575,2999,576 +2016-2-4,4788,3420,2848,572 +2016-2-5,3948,2727,2256,471 +2016-2-6,2383,1765,1477,288 +2016-2-7,2950,2231,1839,392 +2016-2-8,4905,3592,3024,568 +2016-2-9,5353,3931,3299,632 +2016-2-10,5492,4007,3358,649 +2016-2-11,5052,3628,3019,609 +2016-2-12,3764,2807,2300,507 +2016-2-13,2458,1788,1459,329 +2016-2-14,3098,2277,1866,411 +2016-2-15,4951,3652,3039,613 +2016-2-16,5495,4000,3304,696 +2016-2-17,5505,4062,3375,687 +2016-2-18,5188,3812,3156,656 +2016-2-19,4002,2932,2377,555 +2016-2-20,2607,1888,1537,351 +2016-2-21,3906,2838,2355,483 +2016-2-22,6360,4432,3684,748 +2016-2-23,6046,4460,3714,746 +2016-2-24,5938,4309,3499,810 +2016-2-25,5325,3892,3199,693 +2016-2-26,4165,3048,2490,558 +2016-2-27,2829,2096,1726,370 +2016-2-28,4090,2979,2462,517 +2016-2-29,5734,4224,3493,731 +2016-3-1,6214,4474,3731,743 +2016-3-2,5906,4333,3597,736 +2016-3-3,5814,4191,3419,772 +2016-3-4,4507,3188,2624,564 +2016-3-5,2859,2064,1718,346 +2016-3-6,3897,2806,2326,480 +2016-3-7,5849,4240,3503,737 +2016-3-8,6264,4526,3743,783 +2016-3-9,6062,4404,3624,780 +2016-3-10,5685,4159,3415,744 +2016-3-11,4391,3241,2627,614 +2016-3-12,2880,2046,1638,408 +2016-3-13,3740,2673,2163,510 +2016-3-14,5710,4261,3469,792 +2016-3-15,5168,3778,3047,731 +2016-3-16,5577,4062,3287,775 +2016-3-17,5238,3827,3134,693 +2016-3-18,3931,2871,2320,551 +2016-3-19,2606,1892,1568,324 +2016-3-20,3149,2410,2028,382 +2016-3-21,5565,3968,3274,694 +2016-3-22,5281,3770,3035,735 +2016-3-23,5202,3780,3146,634 +2016-3-24,4581,3203,2649,554 +2016-3-25,3264,2281,1847,434 +2016-3-26,2344,1759,1393,366 +2016-3-27,3112,2311,1890,421 +2016-3-28,5051,3655,2985,670 +2016-3-29,5333,3944,3217,727 +2016-3-30,5671,4078,3369,709 +2016-3-31,5097,3707,3026,681 +2016-4-1,4555,2971,2408,563 +2016-4-2,2987,2129,1737,392 +2016-4-3,4257,2964,2421,543 +2016-4-4,5804,4216,3426,790 +2016-4-5,5885,4379,3597,782 +2016-4-6,6054,4293,3522,771 +2016-4-7,5791,4147,3422,725 +2016-4-8,4741,3430,2820,610 +2016-4-9,2946,2140,1740,400 +2016-4-10,4071,2864,2330,534 +2016-4-11,6265,4503,3667,836 +2016-4-12,6298,4626,3769,857 +2016-4-13,6495,4628,3791,837 +2016-4-14,5536,4189,3431,758 +2016-4-15,4737,3447,2785,662 +2016-4-16,3232,2333,1862,471 +2016-4-17,4201,3093,2504,589 +2016-4-18,6806,4769,3920,849 +2016-4-19,6769,4817,3940,877 +2016-4-20,6581,4824,3926,898 +2016-4-21,6254,4537,3707,830 +2016-4-22,5163,3685,3009,676 +2016-4-23,3851,2595,2113,482 +2016-4-24,4695,3386,2761,625 +2016-4-25,7098,5224,4237,987 +2016-4-26,7156,5392,4468,924 +2016-4-27,6836,5056,4130,926 +2016-4-28,6329,4724,3892,832 +2016-4-29,4990,3608,2922,686 +2016-4-30,3536,2489,1993,496 +2016-5-1,4366,3236,2605,631 +2016-5-2,6510,4786,3909,877 +2016-5-3,6855,4962,4085,877 +2016-5-4,6599,4651,3744,907 +2016-5-5,5510,4105,3375,730 +2016-5-6,4549,3245,2639,606 +2016-5-7,3064,2167,1760,407 +2016-5-8,3633,2663,2180,483 +2016-5-9,5838,4283,3489,794 +2016-5-10,6026,4336,3581,755 +2016-5-11,5780,4226,3479,747 +2016-5-12,5131,3781,3101,680 +2016-5-13,3928,2845,2294,551 +2016-5-14,2636,1930,1552,378 +2016-5-15,3278,2366,1922,444 +2016-5-16,4785,3560,2882,678 +2016-5-17,4886,3601,2914,687 +2016-5-18,5145,3672,2987,685 +2016-5-19,5849,4211,3484,727 +2016-5-20,4456,3324,2725,599 +2016-5-21,2960,2138,1716,422 +2016-5-22,3885,2860,2338,522 +2016-5-23,5857,4155,3368,787 +2016-5-24,6162,4345,3526,819 +2016-5-25,6014,4254,3398,856 +2016-5-26,5652,4119,3385,734 +2016-5-27,4793,3340,2692,648 +2016-5-28,2819,1995,1611,384 +2016-5-29,3687,2546,2067,479 +2016-5-30,4851,3399,2701,698 +2016-5-31,5775,4216,3413,803 +2016-6-1,5443,3962,3193,769 +2016-6-2,5590,3959,3176,783 +2016-6-3,4482,3164,2489,675 +2016-6-4,2792,1947,1533,414 +2016-6-5,3371,2449,1979,470 +2016-6-6,5547,3832,3036,796 +2016-6-7,5468,3954,3226,728 +2016-6-8,5104,3751,3064,687 +2016-6-9,4728,3485,2812,673 +2016-6-10,4024,2855,2290,565 +2016-6-11,2350,1677,1348,329 +2016-6-12,3234,2196,1779,417 +2016-6-13,4948,3550,2790,760 +2016-6-14,5247,3760,3052,708 +2016-6-15,5003,3557,2810,747 +2016-6-16,4816,3482,2775,707 +2016-6-17,4208,2818,2267,551 +2016-6-18,2454,1668,1357,311 +2016-6-19,2763,1919,1506,413 +2016-6-20,4954,3522,2829,693 +2016-6-21,4903,3470,2793,677 +2016-6-22,4907,3464,2772,692 +2016-6-23,4625,3336,2669,667 +2016-6-24,3497,2482,1947,535 +2016-6-25,1826,1358,1101,257 +2016-6-26,2307,1721,1356,365 +2016-6-27,4368,3078,2433,645 +2016-6-28,4233,3091,2466,625 +2016-6-29,4187,2948,2377,571 +2016-6-30,3811,2726,2135,591 +2016-7-1,3179,2226,1730,496 +2016-7-2,1615,1039,814,225 +2016-7-3,1788,1307,1028,279 +2016-7-4,2959,2144,1653,491 +2016-7-5,3947,2840,2235,605 +2016-7-6,3841,2821,2248,573 +2016-7-7,3729,2700,2148,552 +2016-7-8,3324,2381,1891,490 +2016-7-9,1795,1305,1036,269 +2016-7-10,2373,1655,1321,334 +2016-7-11,4101,2855,2208,647 +2016-7-12,4241,2960,2352,608 +2016-7-13,4478,3189,2578,611 +2016-7-14,3961,2814,2214,600 +2016-7-15,3367,2325,1796,529 +2016-7-16,1828,1222,951,271 +2016-7-17,2344,1636,1319,317 +2016-7-18,4415,3007,2382,625 +2016-7-19,4403,3151,2502,649 +2016-7-20,4244,3082,2450,632 +2016-7-21,4322,3077,2404,673 +2016-7-22,3456,2431,1936,495 +2016-7-23,2068,1407,1099,308 +2016-7-24,2568,1755,1374,381 +2016-7-25,4770,3320,2628,692 +2016-7-26,4621,3277,2595,682 +2016-7-27,4470,3164,2513,651 +2016-7-28,4307,3077,2459,618 +2016-7-29,3370,2366,1818,548 +2016-7-30,1960,1341,1017,324 +2016-7-31,2412,1765,1423,342 +2016-8-1,4504,3095,2489,606 +2016-8-2,4382,3138,2499,639 +2016-8-3,4710,3369,2697,672 +2016-8-4,4324,3106,2479,627 +2016-8-5,3472,2497,1980,517 +2016-8-6,1909,1339,1081,258 +2016-8-7,2365,1688,1334,354 +2016-8-8,4460,3056,2438,618 +2016-8-9,4479,3135,2482,653 +2016-8-10,4510,3207,2550,657 +2016-8-11,4340,3111,2491,620 +2016-8-12,3508,2436,1933,503 +2016-8-13,2030,1420,1122,298 +2016-8-14,2586,1749,1399,350 +2016-8-15,4476,2970,2346,624 +2016-8-16,3232,2299,1823,476 +2016-8-17,4291,3106,2498,608 +2016-8-18,4247,2926,2327,599 +2016-8-19,3477,2539,2045,494 +2016-8-20,2169,1470,1169,301 +2016-8-21,2430,1808,1453,355 +2016-8-22,4358,3082,2439,643 +2016-8-23,4465,3249,2550,699 +2016-8-24,4550,3210,2615,595 +2016-8-25,4147,3011,2380,631 +2016-8-26,3634,2532,2000,532 +2016-8-27,2014,1430,1141,289 +2016-8-28,2687,1910,1555,355 +2016-8-29,4376,3115,2521,594 +2016-8-30,4318,3226,2622,604 +2016-8-31,4441,3219,2620,599 +2016-9-1,4234,3116,2556,560 +2016-9-2,3027,2230,1762,468 +2016-9-3,1966,1376,1101,275 +2016-9-4,2446,1761,1452,309 +2016-9-5,3779,2643,2145,498 +2016-9-6,4619,3341,2727,614 +2016-9-7,4983,3584,2925,659 +2016-9-8,4645,3319,2716,603 +2016-9-9,3612,2630,2139,491 +2016-9-10,2153,1577,1323,254 +2016-9-11,3089,2307,1978,329 +2016-9-12,4580,3446,2882,564 +2016-9-13,4788,3625,2992,633 +2016-9-14,5095,3759,3113,646 +2016-9-15,4668,3454,2860,594 +2016-9-16,3711,2785,2272,513 +2016-9-17,2523,1861,1577,284 +2016-9-18,3364,2547,2122,425 +2016-9-19,5513,4050,3321,729 +2016-9-20,5362,3762,3095,667 +2016-9-21,5402,3987,3293,694 +2016-9-22,5398,3996,3299,697 +2016-9-23,3783,2663,2134,529 +2016-9-24,2395,1797,1503,294 +2016-9-25,3679,2719,2289,430 +2016-9-26,5688,4325,3570,755 +2016-9-27,5842,4382,3645,737 +2016-9-28,5923,4458,3682,776 +2016-9-29,5717,4222,3487,735 +2016-9-30,4250,3176,2565,611 +2016-10-1,2525,1986,1656,330 +2016-10-2,3923,3023,2559,464 +2016-10-3,5785,4281,3545,736 +2016-10-4,6052,4522,3780,742 +2016-10-5,6150,4588,3814,774 +2016-10-6,5591,4134,3419,715 +2016-10-7,4279,3196,2616,580 +2016-10-8,2897,2066,1717,349 +2016-10-9,3904,2873,2374,499 +2016-10-10,5458,4145,3442,703 +2016-10-11,5909,4399,3685,714 +2016-10-12,6175,4620,3823,797 +2016-10-13,5856,4422,3581,841 +2016-10-14,4610,3505,2837,668 +2016-10-15,3081,2269,1864,405 +2016-10-16,4390,3265,2718,547 +2016-10-17,6507,4917,4018,899 +2016-10-18,6941,5103,4189,914 +2016-10-19,6576,4776,3961,815 +2016-10-20,5985,4462,3701,761 +2016-10-21,4789,3497,2840,657 +2016-10-22,3263,2292,1881,411 +2016-10-23,4180,3135,2561,574 +2016-10-24,6371,4865,3993,872 +2016-10-25,6648,4960,4070,890 +2016-10-26,6501,4777,3880,897 +2016-10-27,6088,4431,3574,857 +2016-10-28,4376,3179,2510,669 +2016-10-29,2733,1955,1549,406 +2016-10-30,3953,2921,2344,577 +2016-10-31,6108,4416,3563,853 +2016-11-1,5668,4185,3360,825 +2016-11-2,6159,4508,3663,845 +2016-11-3,5810,4241,3426,815 +2016-11-4,4491,3394,2670,724 +2016-11-5,3110,2263,1842,421 +2016-11-6,4418,3281,2713,568 +2016-11-7,6529,4488,3573,915 +2016-11-8,5756,4251,3437,814 +2016-11-9,5716,4102,3315,787 +2016-11-10,5323,4022,3246,776 +2016-11-11,4280,3085,2441,644 +2016-11-12,2982,2169,1777,392 +2016-11-13,4365,3172,2595,577 +2016-11-14,6627,4888,3942,946 +2016-11-15,6467,4808,3905,903 +2016-11-16,6631,4903,3984,919 +2016-11-17,6378,4681,3779,902 +2016-11-18,4767,3424,2734,690 +2016-11-19,3501,2580,2136,444 +2016-11-20,4647,3426,2777,649 +2016-11-21,6336,4693,3788,905 +2016-11-22,6222,4564,3646,918 +2016-11-23,5527,3904,3082,822 +2016-11-24,4267,3197,2561,636 +2016-11-25,3733,2678,2135,543 +2016-11-26,3299,2394,1907,487 +2016-11-27,4530,3396,2722,674 +2016-11-28,6908,5047,4167,880 +2016-11-29,7714,5338,4369,969 +2016-11-30,7490,5425,4389,1036 +2016-12-1,7190,5081,4120,961 +2016-12-2,5391,3977,3171,806 +2016-12-3,3575,2667,2178,489 +2016-12-4,5285,4031,3247,784 +2016-12-5,7330,5439,4452,987 +2016-12-6,7489,5479,4500,979 +2016-12-7,7345,5467,4469,998 +2016-12-8,6679,4991,3998,993 +2016-12-9,5403,3970,3190,780 +2016-12-10,3573,2712,2203,509 +2016-12-11,4834,3515,2838,677 +2016-12-12,6905,4945,3988,957 +2016-12-13,6743,4927,3942,985 +2016-12-14,6201,4488,3593,895 +2016-12-15,5571,4071,3229,842 +2016-12-16,3872,2780,2191,589 +2016-12-17,2613,1884,1480,404 +2016-12-18,3109,2293,1853,440 +2016-12-19,4324,3145,2477,668 +2016-12-20,4226,3064,2339,725 +2016-12-21,3991,2914,2278,636 +2016-12-22,3160,2211,1728,483 +2016-12-23,2386,1626,1257,369 +2016-12-24,1115,825,634,191 +2016-12-25,1387,930,740,190 +2016-12-26,2147,1418,1142,276 +2016-12-27,2686,1777,1349,428 +2016-12-28,2885,1915,1476,439 +2016-12-29,2694,1837,1400,437 +2016-12-30,2273,1541,1164,377 +2016-12-31,1188,836,643,193 +2017-1-1,1447,1039,832,207 +2017-1-2,2568,1844,1448,396 +2017-1-3,3566,2527,1970,557 +2017-1-4,3941,2816,2226,590 +2017-1-5,3841,2625,2058,567 +2017-1-6,3261,2338,1812,526 +2017-1-7,2241,1523,1204,319 +2017-1-8,2679,1892,1519,373 +2017-1-9,4182,2841,2191,650 +2017-1-10,4236,3039,2391,648 +2017-1-11,4628,3206,2536,670 +2017-1-12,4205,3025,2403,622 +2017-1-13,3459,2508,2033,475 +2017-1-14,2448,1744,1390,354 +2017-1-15,2853,2015,1586,429 +2017-1-16,4638,3178,2543,635 +2017-1-17,5325,3669,2942,727 +2017-1-18,4866,3364,2670,694 +2017-1-19,4715,3375,2689,686 +2017-1-20,3753,2713,2136,577 +2017-1-21,2481,1778,1437,341 +2017-1-22,3233,2401,1981,420 +2017-1-23,5034,3660,2957,703 +2017-1-24,4787,3593,2909,684 +2017-1-25,4901,3602,2923,679 +2017-1-26,4398,3266,2653,613 +2017-1-27,3823,2832,2267,565 +2017-1-28,2619,1901,1534,367 +2017-1-29,3518,2612,2205,407 +2017-1-30,5178,3826,3127,699 +2017-1-31,5290,3876,3127,749 +2017-2-1,5469,4116,3402,714 +2017-2-2,5399,4028,3303,725 +2017-2-3,4232,3012,2342,670 +2017-2-4,2828,2084,1697,387 +2017-2-5,3724,2783,2281,502 +2017-2-6,5733,4249,3448,801 +2017-2-7,5814,4284,3521,763 +2017-2-8,5349,4006,3248,758 +2017-2-9,5025,3681,3010,671 +2017-2-10,4044,2922,2335,587 +2017-2-11,2323,1731,1377,354 +2017-2-12,3147,2469,2005,464 +2017-2-13,4972,3719,3014,705 +2017-2-14,4878,3582,2897,685 +2017-2-15,5288,3786,3039,747 +2017-2-16,4968,3668,2934,734 +2017-2-17,3788,2748,2158,590 +2017-2-18,2514,1839,1496,343 +2017-2-19,3463,2602,2083,519 +2017-2-20,4931,3700,3009,691 +2017-2-21,5101,3873,3079,794 +2017-2-22,5144,3727,2998,729 +2017-2-23,4433,3372,2657,715 +2017-2-24,3597,2648,2111,537 +2017-2-25,2621,1826,1482,344 +2017-2-26,3397,2494,2021,473 +2017-2-27,5062,3812,3009,803 +2017-2-28,4926,3678,2933,745 +2017-3-1,4936,3558,2822,736 +2017-3-2,4688,3441,2747,694 +2017-3-3,3827,2699,2140,559 +2017-3-4,2452,1754,1408,346 +2017-3-5,3283,2394,1958,436 +2017-3-6,4823,3481,2764,717 +2017-3-7,4821,3662,2942,720 +2017-3-8,5059,3613,2923,690 +2017-3-9,4585,3444,2744,700 +2017-3-10,3682,2733,2178,555 +2017-3-11,2350,1714,1351,363 +2017-3-12,3056,2189,1755,434 +2017-3-13,4746,3367,2721,646 +2017-3-14,4613,3465,2808,657 +2017-3-15,4560,3441,2694,747 +2017-3-16,4520,3304,2629,675 +2017-3-17,3346,2433,1930,503 +2017-3-18,2253,1649,1325,324 +2017-3-19,2927,2267,1807,460 +2017-3-20,4878,3463,2799,664 +2017-3-21,4852,3481,2802,679 +2017-3-22,4585,3430,2757,673 +2017-3-23,4477,3260,2600,660 +2017-3-24,3654,2566,1993,573 +2017-3-25,2411,1760,1420,340 +2017-3-26,3054,2336,1882,454 +2017-3-27,4696,3479,2765,714 +2017-3-28,5033,3633,2875,758 +2017-3-29,4948,3530,2809,721 +2017-3-30,4636,3390,2704,686 +2017-3-31,3539,2636,2060,576 +2017-4-1,2371,1678,1338,340 +2017-4-2,2816,2159,1715,444 +2017-4-3,4493,3356,2672,684 +2017-4-4,4678,3486,2739,747 +2017-4-5,4737,3484,2762,722 +2017-4-6,4775,3514,2806,708 +2017-4-7,3658,2725,2181,544 +2017-4-8,2260,1664,1324,340 +2017-4-9,3343,2433,1933,500 +2017-4-10,4640,3440,2756,684 +2017-4-11,4694,3532,2867,665 +2017-4-12,4771,3517,2800,717 +2017-4-13,4173,3017,2395,622 +2017-4-14,3046,2238,1752,486 +2017-4-15,2260,1701,1333,368 +2017-4-16,2876,2143,1700,443 +2017-4-17,4774,3402,2719,683 +2017-4-18,5009,3702,2906,796 +2017-4-19,5369,3852,3133,719 +2017-4-20,5020,3669,2969,700 +2017-4-21,3935,2802,2203,599 +2017-4-22,2795,2049,1630,419 +2017-4-23,3795,2827,2305,522 +2017-4-24,5489,4083,3252,831 +2017-4-25,5680,4108,3336,772 +2017-4-26,5383,3940,3205,735 +2017-4-27,4890,3695,2985,710 +2017-4-28,3872,2887,2310,577 +2017-4-29,2790,1987,1602,385 +2017-4-30,3524,2616,2118,498 +2017-5-1,4903,3551,2875,676 +2017-5-2,5160,3802,3079,723 +2017-5-3,5194,3766,2995,771 +2017-5-4,5142,3755,3013,742 +2017-5-5,3836,2925,2323,602 +2017-5-6,2737,1981,1572,409 +2017-5-7,3386,2534,2025,509 +2017-5-8,4816,3585,2900,685 +2017-5-9,4734,3458,2763,695 +2017-5-10,4761,3475,2754,721 +2017-5-11,4277,3224,2570,654 +2017-5-12,3563,2620,2056,564 +2017-5-13,2401,1749,1379,370 +2017-5-14,2877,2126,1674,452 +2017-5-15,4448,3191,2494,697 +2017-5-16,4525,3226,2593,633 +2017-5-17,4533,3318,2676,642 +2017-5-18,4431,3307,2686,621 +2017-5-19,3456,2470,1938,532 +2017-5-20,2162,1651,1332,319 +2017-5-21,2786,1971,1597,374 +2017-5-22,4172,3041,2403,638 +2017-5-23,4255,3077,2457,620 +2017-5-24,4154,2996,2400,596 +2017-5-25,3803,2839,2263,576 +2017-5-26,2950,2183,1720,463 +2017-5-27,1909,1444,1155,289 +2017-5-28,2506,1781,1399,382 +2017-5-29,3325,2457,1913,544 +2017-5-30,4086,2909,2298,611 +2017-5-31,3716,2667,2069,598 +2017-6-1,3702,2639,2103,536 +2017-6-2,2959,2171,1680,491 +2017-6-3,2006,1471,1161,310 +2017-6-4,2479,1795,1419,376 +2017-6-5,3501,2610,2072,538 +2017-6-6,3985,2922,2361,561 +2017-6-7,3920,2913,2314,599 +2017-6-8,3868,2796,2209,587 +2017-6-9,2921,2101,1660,441 +2017-6-10,1655,1244,975,269 +2017-6-11,2229,1622,1299,323 +2017-6-12,3660,2598,2020,578 +2017-6-13,3898,2809,2202,607 +2017-6-14,3912,2797,2200,597 +2017-6-15,3604,2624,2029,595 +2017-6-16,2970,2105,1621,484 +2017-6-17,1546,1187,957,230 +2017-6-18,1944,1465,1146,319 +2017-6-19,3608,2493,1959,534 +2017-6-20,3514,2472,1905,567 +2017-6-21,3344,2475,1915,560 +2017-6-22,3292,2351,1824,527 +2017-6-23,2469,1850,1445,405 +2017-6-24,1296,925,702,223 +2017-6-25,1546,1071,811,260 +2017-6-26,2948,1998,1528,470 +2017-6-27,3077,2190,1690,500 +2017-6-28,3028,2145,1649,496 +2017-6-29,2738,1976,1474,502 +2017-6-30,2147,1478,1087,391 +2017-7-1,1277,903,675,228 +2017-7-2,1606,1142,879,263 +2017-7-3,2504,1726,1296,430 +2017-7-4,2218,1566,1217,349 +2017-7-5,3024,2149,1681,468 +2017-7-6,2951,2047,1555,492 +2017-7-7,2401,1693,1310,383 +2017-7-8,1242,891,700,191 +2017-7-9,1511,1172,938,234 +2017-7-10,2934,2062,1619,443 +2017-7-11,3003,2140,1663,477 +2017-7-12,3073,2192,1710,482 +2017-7-13,2933,2043,1550,493 +2017-7-14,2468,1710,1287,423 +2017-7-15,1355,892,689,203 +2017-7-16,1553,1122,891,231 +2017-7-17,2902,1954,1479,475 +2017-7-18,2899,2109,1591,518 +2017-7-19,2986,2032,1584,448 +2017-7-20,2964,2031,1571,460 +2017-7-21,2433,1609,1214,395 +2017-7-22,1280,923,725,198 +2017-7-23,1603,1170,909,261 +2017-7-24,3154,2214,1726,488 +2017-7-25,3084,2148,1666,482 +2017-7-26,2983,1925,1490,435 +2017-7-27,2849,1908,1440,468 +2017-7-28,2420,1538,1150,388 +2017-7-29,1300,895,712,183 +2017-7-30,1526,1112,863,249 +2017-7-31,2872,1978,1481,497 +2017-8-1,2914,1957,1463,494 +2017-8-2,2843,1994,1536,458 +2017-8-3,2649,1894,1447,447 +2017-8-4,2042,1478,1150,328 +2017-8-5,1225,901,681,220 +2017-8-6,1562,1045,792,253 +2017-8-7,2751,1823,1398,425 +2017-8-8,2634,1868,1415,453 +2017-8-9,2704,1961,1511,450 +2017-8-10,2670,1864,1463,401 +2017-8-11,2073,1498,1121,377 +2017-8-12,1240,888,669,219 +2017-8-13,1530,1076,811,265 +2017-8-14,2392,1704,1346,358 +2017-8-15,2675,1846,1471,375 +2017-8-16,2755,1911,1436,475 +2017-8-17,2608,1824,1421,403 +2017-8-18,2163,1521,1163,358 +2017-8-19,1304,951,743,208 +2017-8-20,1969,1419,1156,263 +2017-8-21,2985,2069,1575,494 +2017-8-22,3087,2259,1772,487 +2017-8-23,3047,2147,1704,443 +2017-8-24,2961,2026,1600,426 +2017-8-25,2293,1589,1257,332 +2017-8-26,1261,934,751,183 +2017-8-27,1676,1211,983,228 +2017-8-28,1786,1287,1005,282 +2017-8-29,3252,2310,1845,465 +2017-8-30,3082,2179,1741,438 +2017-8-31,2721,1963,1579,384 +2017-9-1,2217,1583,1235,348 +2017-9-2,1271,908,730,178 +2017-9-3,1742,1197,958,239 +2017-9-4,2293,1704,1380,324 +2017-9-5,3155,2289,1818,471 +2017-9-6,3159,2320,1882,438 +2017-9-7,3054,2243,1777,466 +2017-9-8,2440,1848,1488,360 +2017-9-9,1532,1108,924,184 +2017-9-10,2247,1657,1366,291 +2017-9-11,3570,2496,2033,463 +2017-9-12,3524,2540,2075,465 +2017-9-13,3471,2473,2040,433 +2017-9-14,3303,2415,1974,441 +2017-9-15,2560,1867,1519,348 +2017-9-16,1470,1090,912,178 +2017-9-17,2234,1715,1446,269 +2017-9-18,3504,2596,2123,473 +2017-9-19,3984,2840,2382,458 +2017-9-20,3746,2660,2188,472 +2017-9-21,3524,2667,2143,524 +2017-9-22,2639,1944,1591,353 +2017-9-23,1523,1178,975,203 +2017-9-24,2425,1809,1521,288 +2017-9-25,3671,2705,2202,503 +2017-9-26,3669,2780,2306,474 +2017-9-27,3537,2657,2211,446 +2017-9-28,3413,2507,2048,459 +2017-9-29,2699,1902,1554,348 +2017-9-30,1829,1289,1058,231 +2017-10-1,2379,1812,1507,305 +2017-10-2,3637,2669,2221,448 +2017-10-3,3775,2787,2253,534 +2017-10-4,3572,2731,2245,486 +2017-10-5,3605,2695,2230,465 +2017-10-6,2774,2078,1670,408 +2017-10-7,1780,1354,1106,248 +2017-10-8,2469,1884,1571,313 +2017-10-9,3881,2869,2348,521 +2017-10-10,3767,2785,2296,489 +2017-10-11,4082,2924,2335,589 +2017-10-12,4047,2768,2240,528 +2017-10-13,2877,2114,1706,408 +2017-10-14,2073,1559,1298,261 +2017-10-15,2759,2066,1739,327 +2017-10-16,3817,2880,2344,536 +2017-10-17,3949,2930,2402,528 +2017-10-18,3867,2896,2395,501 +2017-10-19,3621,2582,2119,463 +2017-10-20,2978,2220,1772,448 +2017-10-21,1992,1434,1158,276 +2017-10-22,2851,2142,1779,363 +2017-10-23,4390,3177,2651,526 +2017-10-24,3886,2938,2406,532 +2017-10-25,3424,2477,2017,460 +2017-10-26,4207,3087,2561,526 +2017-10-27,3345,2478,1984,494 +2017-10-28,2128,1567,1277,290 +2017-10-29,2205,1637,1319,318 +2017-10-30,4091,2999,2453,546 +2017-10-31,4223,3143,2555,588 +2017-11-1,4361,3147,2554,593 +2017-11-2,4263,3103,2513,590 +2017-11-3,3341,2397,1903,494 +2017-11-4,2278,1634,1307,327 +2017-11-5,3097,2299,1888,411 +2017-11-6,4185,3113,2538,575 +2017-11-7,4477,3341,2689,652 +2017-11-8,4354,3227,2579,648 +2017-11-9,4194,3005,2401,604 +2017-11-10,3240,2319,1833,486 +2017-11-11,2424,1613,1283,330 +2017-11-12,3168,2309,1853,456 +2017-11-13,4709,3433,2784,649 +2017-11-14,4634,3373,2727,646 +2017-11-15,4545,3345,2681,664 +2017-11-16,4532,3332,2693,639 +2017-11-17,3317,2508,2018,490 +2017-11-18,2449,1741,1386,355 +2017-11-19,2893,2231,1780,451 +2017-11-20,4170,3135,2555,580 +2017-11-21,4277,3026,2419,607 +2017-11-22,3588,2625,2078,547 +2017-11-23,3141,2237,1760,477 +2017-11-24,2658,1843,1429,414 +2017-11-25,2391,1652,1327,325 +2017-11-26,3202,2354,1901,453 +2017-11-27,4349,3251,2601,650 +2017-11-28,4886,3660,2968,692 +2017-11-29,4555,3484,2824,660 +2017-11-30,4477,3134,2530,604 +2017-12-1,3577,2603,2056,547 +2017-12-2,2430,1827,1461,366 +2017-12-3,3449,2504,2006,498 +2017-12-4,4955,3673,3019,654 +2017-12-5,4475,3435,2775,660 +2017-12-6,4595,3452,2766,686 +2017-12-7,4451,3199,2563,636 +2017-12-8,3418,2549,2037,512 +2017-12-9,2605,1944,1572,372 +2017-12-10,3483,2607,2102,505 +2017-12-11,4651,3350,2656,694 +2017-12-12,4029,3011,2351,660 +2017-12-13,4282,3205,2609,596 +2017-12-14,4138,2930,2315,615 +2017-12-15,4130,2803,2211,592 +2017-12-16,2581,1761,1429,332 +2017-12-17,3355,2300,1876,424 +2017-12-18,4482,3109,2491,618 +2017-12-19,4584,3021,2456,565 +2017-12-20,4106,2661,2133,528 +2017-12-21,3378,2243,1798,445 +2017-12-22,2446,1544,1211,333 +2017-12-23,1447,958,753,205 +2017-12-24,1326,895,696,199 +2017-12-25,1609,1015,809,206 +2017-12-26,2481,1438,1105,333 +2017-12-27,2798,1740,1350,390 +2017-12-28,2809,1797,1425,372 +2017-12-29,2216,1410,1083,327 +2017-12-30,1546,1071,839,232 +2017-12-31,1339,923,724,199 +2018-1-1,1709,1120,878,242 +2018-1-2,3389,2208,1755,453 +2018-1-3,3391,2282,1827,455 +2018-1-4,3698,2310,1878,432 +2018-1-5,3511,2272,1801,471 +2018-1-6,2279,1498,1196,302 +2018-1-7,2822,1869,1495,374 +2018-1-8,4240,2784,2186,598 +2018-1-9,4319,2844,2302,542 +2018-1-10,4224,2866,2304,562 +2018-1-11,3797,2704,2203,501 +2018-1-12,3190,2127,1692,435 +2018-1-13,1998,1373,1128,245 +2018-1-14,2515,1711,1393,318 +2018-1-15,3950,2612,2065,547 +2018-1-16,4033,2631,2133,498 +2018-1-17,4269,2812,2285,527 +2018-1-18,4124,2677,2157,520 +2018-1-19,3228,2198,1763,435 +2018-1-20,2287,1423,1160,263 +2018-1-21,2946,1996,1628,368 +2018-1-22,4608,3035,2534,501 +2018-1-23,4786,3154,2566,588 +2018-1-24,4724,3244,2680,564 +2018-1-25,4417,2875,2348,527 +2018-1-26,3580,2314,1825,489 +2018-1-27,2345,1544,1229,315 +2018-1-28,3170,2140,1776,364 +2018-1-29,4862,3194,2573,621 +2018-1-30,4600,3106,2504,602 +2018-1-31,4705,3249,2704,545 +2018-2-1,4723,3164,2571,593 +2018-2-2,3969,2572,2104,468 +2018-2-3,2994,2034,1702,332 +2018-2-4,3162,2186,1811,375 +2018-2-5,4949,3287,2735,552 +2018-2-6,5092,3465,2838,627 +2018-2-7,4767,3319,2729,590 +2018-2-8,4625,3179,2603,576 +2018-2-9,3738,2477,2015,462 +2018-2-10,2739,1793,1477,316 +2018-2-11,3923,2476,2077,399 +2018-2-12,5341,3687,3045,642 +2018-2-13,5114,3460,2836,624 +2018-2-14,4896,3214,2568,646 +2018-2-15,4502,3050,2507,543 +2018-2-16,3729,2518,2012,506 +2018-2-17,2388,1618,1319,299 +2018-2-18,3405,2314,1928,386 +2018-2-19,5176,3620,2971,649 +2018-2-20,5429,3597,2978,619 +2018-2-21,5120,3448,2869,579 +2018-2-22,4993,3379,2774,605 +2018-2-23,4148,2751,2221,530 +2018-2-24,2763,1981,1648,333 +2018-2-25,3599,2446,2011,435 +2018-2-26,5542,3728,3052,676 +2018-2-27,5378,3764,3123,641 +2018-2-28,5536,3734,3095,639 +2018-3-1,4984,3315,2713,602 +2018-3-2,4130,2754,2231,523 +2018-3-3,2818,1922,1579,343 +2018-3-4,3978,2699,2249,450 +2018-3-5,5502,3727,3019,708 +2018-3-6,5740,3842,3160,682 +2018-3-7,5635,3734,3037,697 +2018-3-8,5375,3704,3044,660 +2018-3-9,4273,3038,2490,548 +2018-3-10,3223,2305,1918,387 +2018-3-11,3956,2727,2288,439 +2018-3-12,5895,4141,3447,694 +2018-3-13,6152,4207,3398,809 +2018-3-14,5906,4021,3305,716 +2018-3-15,6300,4061,3279,782 +2018-3-16,4915,3259,2673,586 +2018-3-17,3218,2161,1818,343 +2018-3-18,4429,2919,2435,484 +2018-3-19,5739,4038,3316,722 +2018-3-20,6220,4292,3553,739 +2018-3-21,6238,4163,3396,767 +2018-3-22,6226,4251,3595,656 +2018-3-23,4364,2994,2457,537 +2018-3-24,2882,2021,1682,339 +2018-3-25,4010,2748,2263,485 +2018-3-26,6084,3995,3289,706 +2018-3-27,5874,4147,3446,701 +2018-3-28,5719,3917,3288,629 +2018-3-29,5003,3396,2812,584 +2018-3-30,3605,2541,2062,479 +2018-3-31,2811,1901,1512,389 +2018-4-1,3567,2438,1956,482 +2018-4-2,5237,3542,2875,667 +2018-4-3,6154,4126,3438,688 +2018-4-4,5895,4112,3418,694 +2018-4-5,5858,3943,3232,711 +2018-4-6,5034,3348,2749,599 +2018-4-7,3613,2291,1840,451 +2018-4-8,4389,3059,2530,529 +2018-4-9,6278,4290,3546,744 +2018-4-10,6836,4514,3747,767 +2018-4-11,6731,4596,3759,837 +2018-4-12,6287,4332,3563,769 +2018-4-13,5089,3454,2850,604 +2018-4-14,3812,2542,2094,448 +2018-4-15,5290,3538,2914,624 +2018-4-16,7161,4993,4188,805 +2018-4-17,7352,4939,4058,881 +2018-4-18,7218,4842,4001,841 +2018-4-19,7040,4672,3895,777 +2018-4-20,5367,3728,3029,699 +2018-4-21,4021,2749,2253,496 +2018-4-22,5397,3722,3059,663 +2018-4-23,7605,5124,4216,908 +2018-4-24,7614,5094,4181,913 +2018-4-25,7984,5541,4616,925 +2018-4-26,7040,4823,3957,866 +2018-4-27,5628,3749,3095,654 +2018-4-28,3926,2618,2141,477 +2018-4-29,5479,3635,3057,578 +2018-4-30,6670,4584,3784,800 +2018-5-1,6783,4542,3742,800 +2018-5-2,7105,4865,4013,852 +2018-5-3,6877,4702,3854,848 +2018-5-4,5460,3711,3039,672 +2018-5-5,3648,2568,2058,510 +2018-5-6,4917,3311,2737,574 +2018-5-7,6980,4654,3881,773 +2018-5-8,6702,4577,3700,877 +2018-5-9,6699,4488,3581,907 +2018-5-10,6001,4059,3265,794 +2018-5-11,5094,3454,2766,688 +2018-5-12,3179,2237,1821,416 +2018-5-13,4169,2912,2413,499 +2018-5-14,6392,4388,3637,751 +2018-5-15,5878,4094,3384,710 +2018-5-16,5800,3976,3266,710 +2018-5-17,5690,4023,3254,769 +2018-5-18,4314,2986,2400,586 +2018-5-19,2948,2117,1735,382 +2018-5-20,3864,2674,2155,519 +2018-5-21,5499,3708,3005,703 +2018-5-22,5790,4040,3269,771 +2018-5-23,5720,3971,3206,765 +2018-5-24,5692,3675,2965,710 +2018-5-25,4082,2803,2188,615 +2018-5-26,2716,1965,1597,368 +2018-5-27,3430,2374,1887,487 +2018-5-28,4353,2994,2392,602 +2018-5-29,5525,3777,3112,665 +2018-5-30,5407,3574,2908,666 +2018-5-31,4994,3485,2792,693 +2018-6-1,3835,2681,2172,509 +2018-6-2,2511,1750,1423,327 +2018-6-3,3371,2308,1891,417 +2018-6-4,5226,3399,2741,658 +2018-6-5,5139,3453,2811,642 +2018-6-6,5051,3474,2828,646 +2018-6-7,4787,3283,2685,598 +2018-6-8,3956,2670,2107,563 +2018-6-9,2303,1589,1278,311 +2018-6-10,3011,2091,1717,374 +2018-6-11,4896,3326,2714,612 +2018-6-12,4952,3309,2624,685 +2018-6-13,4570,3099,2439,660 +2018-6-14,4542,2962,2377,585 +2018-6-15,3383,2320,1847,473 +2018-6-16,1922,1316,1061,255 +2018-6-17,2404,1677,1361,316 +2018-6-18,4576,2964,2313,651 +2018-6-19,4727,3144,2519,625 +2018-6-20,4639,2989,2370,619 +2018-6-21,4108,2762,2154,608 +2018-6-22,3372,2207,1744,463 +2018-6-23,1996,1277,989,288 +2018-6-24,2415,1619,1266,353 +2018-6-25,4457,2881,2272,609 +2018-6-26,4736,3039,2410,629 +2018-6-27,4245,2818,2244,574 +2018-6-28,4081,2785,2160,625 +2018-6-29,3053,2008,1568,440 +2018-6-30,1741,1147,927,220 +2018-7-1,2186,1447,1140,307 +2018-7-2,4026,2533,1952,581 +2018-7-3,3961,2515,1966,549 +2018-7-4,3019,2032,1595,437 +2018-7-5,3743,2496,1997,499 +2018-7-6,3050,1995,1575,420 +2018-7-7,1688,1080,857,223 +2018-7-8,2185,1440,1145,295 +2018-7-9,4104,2576,2016,560 +2018-7-10,4097,2694,2059,635 +2018-7-11,3844,2506,1895,611 +2018-7-12,3743,2530,2001,529 +2018-7-13,3073,2068,1581,487 +2018-7-14,1852,1249,992,257 +2018-7-15,2105,1474,1173,301 +2018-7-16,4078,2657,2095,562 +2018-7-17,4515,2856,2255,601 +2018-7-18,4276,2779,2173,606 +2018-7-19,4043,2705,2114,591 +2018-7-20,3004,2028,1576,452 +2018-7-21,1664,1177,942,235 +2018-7-22,2248,1561,1246,315 +2018-7-23,4062,2658,2081,577 +2018-7-24,4053,2680,2091,589 +2018-7-25,3628,2431,1879,552 +2018-7-26,3596,2415,1925,490 +2018-7-27,3140,2002,1539,463 +2018-7-28,1938,1304,1054,250 +2018-7-29,2460,1699,1364,335 +2018-7-30,4175,2771,2166,605 +2018-7-31,4113,2881,2310,571 +2018-8-1,4273,2901,2310,591 +2018-8-2,4194,2754,2202,552 +2018-8-3,3405,2345,1833,512 +2018-8-4,1800,1251,1025,226 +2018-8-5,2378,1694,1388,306 +2018-8-6,4319,2856,2233,623 +2018-8-7,4388,2971,2375,596 +2018-8-8,4205,2724,2118,606 +2018-8-9,3973,2555,1998,557 +2018-8-10,3510,2224,1777,447 +2018-8-11,1913,1281,1012,269 +2018-8-12,2397,1644,1284,360 +2018-8-13,4348,2789,2224,565 +2018-8-14,3966,2688,2127,561 +2018-8-15,3805,2544,2035,509 +2018-8-16,3866,2604,2074,530 +2018-8-17,3489,2219,1737,482 +2018-8-18,2074,1394,1108,286 +2018-8-19,2519,1687,1318,369 +2018-8-20,4202,2734,2128,606 +2018-8-21,4023,2711,2147,564 +2018-8-22,4048,2685,2121,564 +2018-8-23,4150,2860,2249,611 +2018-8-24,3154,2199,1742,457 +2018-8-25,2143,1317,1012,305 +2018-8-26,2576,1705,1372,333 +2018-8-27,4317,2954,2367,587 +2018-8-28,4421,3023,2427,596 +2018-8-29,4563,3019,2395,624 +2018-8-30,4055,2798,2265,533 +2018-8-31,3427,2305,1815,490 +2018-9-1,1731,1241,989,252 +2018-9-2,2258,1641,1293,348 +2018-9-3,3655,2499,2032,467 +2018-9-4,4456,2995,2435,560 +2018-9-5,4566,3042,2456,586 +2018-9-6,4314,3049,2508,541 +2018-9-7,3557,2349,1890,459 +2018-9-8,2281,1548,1255,293 +2018-9-9,3346,2255,1906,349 +2018-9-10,4711,3200,2600,600 +2018-9-11,4709,3134,2595,539 +2018-9-12,4379,3032,2464,568 +2018-9-13,4357,2870,2325,545 +2018-9-14,3560,2396,1907,489 +2018-9-15,2049,1488,1244,244 +2018-9-16,2813,1934,1614,320 +2018-9-17,5064,3241,2621,620 +2018-9-18,5006,3221,2595,626 +2018-9-19,4949,3282,2708,574 +2018-9-20,4695,3165,2573,592 +2018-9-21,3516,2383,1933,450 +2018-9-22,2460,1704,1374,330 +2018-9-23,2994,2127,1733,394 +2018-9-24,4688,3273,2679,594 +2018-9-25,4924,3481,2885,596 +2018-9-26,5209,3546,2936,610 +2018-9-27,5966,4029,3385,644 +2018-9-28,4740,3171,2643,528 +2018-9-29,2715,1870,1618,252 +2018-9-30,3739,2573,2194,379 +2018-10-1,5841,3982,3331,651 +2018-10-2,5881,4096,3514,582 +2018-10-3,5540,3863,3249,614 +2018-10-4,5636,3894,3306,588 +2018-10-5,4479,3120,2638,482 +2018-10-6,3076,2094,1750,344 +2018-10-7,3973,2865,2457,408 +2018-10-8,6045,4310,3659,651 +2018-10-9,6126,4173,3522,651 +2018-10-10,6084,4319,3616,703 +2018-10-11,6154,4254,3632,622 +2018-10-12,4868,3385,2784,601 +2018-10-13,3409,2379,2006,373 +2018-10-14,4722,3357,2859,498 +2018-10-15,6555,4550,3766,784 +2018-10-16,7079,4652,3893,759 +2018-10-17,6691,4673,3893,780 +2018-10-18,6522,4398,3666,732 +2018-10-19,4922,3390,2857,533 +2018-10-20,3409,2399,1990,409 +2018-10-21,4483,3092,2623,469 +2018-10-22,6666,4499,3769,730 +2018-10-23,6991,4677,3916,761 +2018-10-24,6871,4619,3808,811 +2018-10-25,6357,4331,3579,752 +2018-10-26,5114,3468,2827,641 +2018-10-27,3456,2400,2006,394 +2018-10-28,4924,3251,2735,516 +2018-10-29,6837,4704,3890,814 +2018-10-30,6481,4547,3798,749 +2018-10-31,6296,4316,3545,771 +2018-11-1,6044,3988,3299,689 +2018-11-2,4860,3326,2738,588 +2018-11-3,3430,2289,1946,343 +2018-11-4,4638,3236,2744,492 +2018-11-5,6365,4329,3609,720 +2018-11-6,6330,4291,3556,735 +2018-11-7,5865,3937,3267,670 +2018-11-8,5692,3938,3298,640 +2018-11-9,5026,3533,2917,616 +2018-11-10,3506,2428,2018,410 +2018-11-11,4778,3265,2709,556 +2018-11-12,6684,4592,3795,797 +2018-11-13,6766,4720,3918,802 +2018-11-14,6916,4674,3872,802 +2018-11-15,6440,4379,3634,745 +2018-11-16,5066,3497,2863,634 +2018-11-17,3503,2489,2043,446 +2018-11-18,4855,3321,2691,630 +2018-11-19,6818,4601,3795,806 +2018-11-20,6239,4424,3640,784 +2018-11-21,5471,3904,3194,710 +2018-11-22,4453,3186,2592,594 +2018-11-23,4062,2892,2347,545 +2018-11-24,3485,2445,1987,458 +2018-11-25,4906,3371,2815,556 +2018-11-26,7099,4871,4012,859 +2018-11-27,7503,5181,4267,914 +2018-11-28,7554,5227,4330,897 +2018-11-29,7169,4944,4106,838 +2018-11-30,5608,3895,3211,684 +2018-12-1,4055,2800,2306,494 +2018-12-2,5611,3906,3259,647 +2018-12-3,7650,5378,4431,947 +2018-12-4,7372,5225,4328,897 +2018-12-5,7369,5166,4316,850 +2018-12-6,7250,5093,4213,880 +2018-12-7,5735,4032,3296,736 +2018-12-8,4614,3240,2699,541 +2018-12-9,5979,4062,3352,710 +2018-12-10,7840,5421,4465,956 +2018-12-11,7659,5267,4330,937 +2018-12-12,7319,4983,4010,973 +2018-12-13,6373,4452,3620,832 +2018-12-14,4897,3404,2776,628 +2018-12-15,3325,2209,1833,376 +2018-12-16,3874,2671,2206,465 +2018-12-17,5436,3791,3062,729 +2018-12-18,5174,3562,2945,617 +2018-12-19,4873,3255,2632,623 +2018-12-20,3913,2716,2164,552 +2018-12-21,2934,1979,1543,436 +2018-12-22,1523,1074,846,228 +2018-12-23,1859,1223,997,226 +2018-12-24,1835,1310,1019,291 +2018-12-25,1852,1214,955,259 +2018-12-26,2357,1594,1243,351 +2018-12-27,2583,1783,1418,365 +2018-12-28,2477,1613,1279,334 +2018-12-29,1694,1197,990,207 +2018-12-30,1985,1340,1097,243 +2018-12-31,1723,1159,874,285 +2019-1-1,1715,1168,891,277 +2019-1-2,3431,2361,1899,462 +2019-1-3,4118,2793,2259,534 +2019-1-4,3504,2373,1936,437 +2019-1-5,2308,1609,1348,261 +2019-1-6,2925,2046,1648,398 +2019-1-7,4587,3100,2550,550 +2019-1-8,4731,3182,2585,597 +2019-1-9,4831,3245,2660,585 +2019-1-10,4162,2836,2298,538 +2019-1-11,3726,2476,1999,477 +2019-1-12,2458,1722,1413,309 +2019-1-13,3266,2264,1878,386 +2019-1-14,5016,3348,2760,588 +2019-1-15,4732,3320,2738,582 +2019-1-16,4938,3447,2845,602 +2019-1-17,5033,3516,2967,549 +2019-1-18,4114,2731,2236,495 +2019-1-19,2780,1929,1599,330 +2019-1-20,4205,2367,1974,393 +2019-1-21,4983,3391,2783,608 +2019-1-22,5182,3674,3052,622 +2019-1-23,5316,3856,3199,657 +2019-1-24,5021,3462,2853,609 +2019-1-25,4230,2882,2382,500 +2019-1-26,2743,1882,1541,341 +2019-1-27,3890,2622,2232,390 +2019-1-28,5575,3925,3232,693 +2019-1-29,5732,3866,3260,606 +2019-1-30,5402,3759,3134,625 +2019-1-31,5069,3597,2984,613 +2019-2-1,4222,2923,2364,559 +2019-2-2,2864,1902,1596,306 +2019-2-3,3598,2447,2044,403 +2019-2-4,5366,3767,3146,621 +2019-2-5,5427,3757,3124,633 +2019-2-6,5667,3759,3130,629 +2019-2-7,5517,3763,3069,694 +2019-2-8,4420,2943,2429,514 +2019-2-9,3150,2274,1911,363 +2019-2-10,4264,2962,2470,492 +2019-2-11,6569,4276,3566,710 +2019-2-12,6145,4092,3391,701 +2019-2-13,5743,3932,3236,696 +2019-2-14,5512,3762,3075,687 +2019-2-15,4127,2952,2377,575 +2019-2-16,3309,2195,1809,386 +2019-2-17,3761,2669,2217,452 +2019-2-18,5592,3912,3226,686 +2019-2-19,6100,4322,3575,747 +2019-2-20,6208,4265,3543,722 +2019-2-21,5730,4071,3352,719 +2019-2-22,4372,3073,2508,565 +2019-2-23,3378,2259,1871,388 +2019-2-24,4367,3012,2524,488 +2019-2-25,6318,4424,3678,746 +2019-2-26,6431,4304,3530,774 +2019-2-27,5919,4205,3442,763 +2019-2-28,5668,3966,3266,700 +2019-3-1,4581,3178,2594,584 +2019-3-2,3383,2263,1878,385 +2019-3-3,4311,3005,2476,529 +2019-3-4,6357,4214,3443,771 +2019-3-5,6092,4092,3343,749 +2019-3-6,5772,4070,3340,730 +2019-3-7,5861,4064,3330,734 +2019-3-8,4600,3147,2590,557 +2019-3-9,3390,2218,1849,369 +2019-3-10,4099,2898,2397,501 +2019-3-11,6240,4320,3599,721 +2019-3-12,5871,4127,3375,752 +2019-3-13,6381,4506,3726,780 +2019-3-14,5853,4043,3328,715 +2019-3-15,4425,3116,2499,617 +2019-3-16,2961,2099,1685,414 +2019-3-17,4008,2744,2258,486 +2019-3-18,5830,4040,3319,721 +2019-3-19,6089,4164,3448,716 +2019-3-20,5800,3946,3192,754 +2019-3-21,5431,3761,3100,661 +2019-3-22,4560,3071,2543,528 +2019-3-23,3256,2254,1859,395 +2019-3-24,4156,2858,2386,472 +2019-3-25,6060,4232,3469,763 +2019-3-26,6191,4344,3578,766 +2019-3-27,6678,4612,3842,770 +2019-3-28,6167,4086,3361,725 +2019-3-29,4441,3147,2601,546 +2019-3-30,3243,2325,1949,376 +2019-3-31,4260,3039,2543,496 +2019-4-1,6078,4238,3550,688 +2019-4-2,6824,4656,3833,823 +2019-4-3,6621,4727,3942,785 +2019-4-4,6231,4343,3647,696 +2019-4-5,4776,3346,2719,627 +2019-4-6,3148,2319,1924,395 +2019-4-7,4357,3050,2511,539 +2019-4-8,6794,4738,3960,778 +2019-4-9,6688,4505,3736,769 +2019-4-10,6570,4448,3646,802 +2019-4-11,6113,4264,3504,760 +2019-4-12,4856,3336,2726,610 +2019-4-13,3401,2409,2011,398 +2019-4-14,4551,3197,2600,597 +2019-4-15,6614,4773,3967,806 +2019-4-16,7019,4837,4037,800 +2019-4-17,6643,4470,3681,789 +2019-4-18,5398,3825,3133,692 +2019-4-19,4323,2981,2482,499 +2019-4-20,3546,2442,2020,422 +2019-4-21,4312,3045,2534,511 +2019-4-22,6363,4520,3729,791 +2019-4-23,6797,4968,4147,821 +2019-4-24,7144,5002,4136,866 +2019-4-25,6555,4621,3804,817 +2019-4-26,5400,3780,3089,691 +2019-4-27,3710,2465,2038,427 +2019-4-28,4788,3294,2728,566 +2019-4-29,6232,4340,3578,762 +2019-4-30,6093,4264,3440,824 +2019-5-1,6117,4275,3556,719 +2019-5-2,6274,4153,3433,720 +2019-5-3,4774,3370,2763,607 +2019-5-4,3437,2462,1999,463 +2019-5-5,4330,3009,2457,552 +2019-5-6,5902,4164,3402,762 +2019-5-7,6064,4258,3469,789 +2019-5-8,5709,4049,3310,739 +2019-5-9,5596,3944,3275,669 +2019-5-10,4498,3144,2494,650 +2019-5-11,3258,2119,1702,417 +2019-5-12,3571,2565,2070,495 +2019-5-13,5677,3908,3136,772 +2019-5-14,5534,3669,2977,692 +2019-5-15,5391,3667,2989,678 +2019-5-16,5043,3577,2953,624 +2019-5-17,3993,2795,2254,541 +2019-5-18,2565,1876,1545,331 +2019-5-19,3369,2364,1954,410 +2019-5-20,4993,3442,2806,636 +2019-5-21,4728,3406,2813,593 +2019-5-22,4963,3431,2772,659 +2019-5-23,4637,3243,2698,545 +2019-5-24,3694,2559,2070,489 +2019-5-25,2460,1658,1347,311 +2019-5-26,3006,2064,1693,371 +2019-5-27,3992,2780,2271,509 +2019-5-28,4960,3403,2767,636 +2019-5-29,4376,3115,2562,553 +2019-5-30,4143,2896,2353,543 +2019-5-31,3359,2363,1909,454 +2019-6-1,2218,1474,1221,253 +2019-6-2,2768,1845,1516,329 +2019-6-3,3967,2831,2295,536 +2019-6-4,4501,3008,2426,582 +2019-6-5,3973,2727,2233,494 +2019-6-6,4259,2871,2312,559 +2019-6-7,3181,2313,1869,444 +2019-6-8,2170,1583,1324,259 +2019-6-9,2810,1930,1586,344 +2019-6-10,4420,3030,2463,567 +2019-6-11,4793,3258,2664,594 +2019-6-12,4410,3064,2479,585 +2019-6-13,4076,2844,2280,564 +2019-6-14,3287,2265,1789,476 +2019-6-15,2176,1467,1201,266 +2019-6-16,2516,1747,1419,328 +2019-6-17,4142,2925,2398,527 +2019-6-18,4225,3013,2461,552 +2019-6-19,4162,2882,2351,531 +2019-6-20,3716,2615,2137,478 +2019-6-21,3333,2275,1853,422 +2019-6-22,1918,1360,1118,242 +2019-6-23,2344,1621,1317,304 +2019-6-24,3691,2591,2149,442 +2019-6-25,4035,2770,2247,523 +2019-6-26,3939,2675,2186,489 +2019-6-27,3738,2671,2197,474 +2019-6-28,2846,2021,1657,364 +2019-6-29,1733,1199,983,216 +2019-6-30,2184,1494,1240,254 +2019-7-1,3512,2485,2001,484 +2019-7-2,3675,2636,2163,473 +2019-7-3,3831,2579,2144,435 +2019-7-4,2801,1971,1648,323 +2019-7-5,2552,1790,1446,344 +2019-7-6,1950,1291,1110,181 +2019-7-7,2110,1477,1209,268 +2019-7-8,4303,2903,2383,520 +2019-7-9,3883,2799,2335,464 +2019-7-10,4244,2907,2347,560 +2019-7-11,3765,2669,2150,519 +2019-7-12,3286,2276,1816,460 +2019-7-13,1851,1305,1063,242 +2019-7-14,2580,1754,1433,321 +2019-7-15,4140,2911,2382,529 +2019-7-16,4076,2785,2285,500 +2019-7-17,4141,2900,2360,540 +2019-7-18,3898,2774,2249,525 +2019-7-19,3027,2078,1641,437 +2019-7-20,1831,1271,1033,238 +2019-7-21,2282,1617,1356,261 +2019-7-22,4138,2890,2376,514 +2019-7-23,4049,2868,2344,524 +2019-7-24,4272,2963,2359,604 +2019-7-25,4089,2755,2210,545 +2019-7-26,3277,2264,1842,422 +2019-7-27,1954,1308,1069,239 +2019-7-28,2111,1509,1239,270 +2019-7-29,3625,2539,2053,486 +2019-7-30,4415,2906,2386,520 +2019-7-31,3854,2743,2260,483 +2019-8-1,4114,2771,2262,509 +2019-8-2,3492,2280,1874,406 +2019-8-3,1849,1312,1096,216 +2019-8-4,2239,1630,1347,283 +2019-8-5,3976,2664,2191,473 +2019-8-6,4061,2833,2284,549 +2019-8-7,3702,2675,2215,460 +2019-8-8,3622,2553,2112,441 +2019-8-9,3039,2033,1660,373 +2019-8-10,1848,1265,1049,216 +2019-8-11,2082,1502,1242,260 +2019-8-12,3807,2574,2121,453 +2019-8-13,3993,2667,2215,452 +2019-8-14,3567,2517,2087,430 +2019-8-15,3484,2450,2046,404 +2019-8-16,2994,2022,1663,359 +2019-8-17,1793,1276,1074,202 +2019-8-18,2422,1721,1477,244 +2019-8-19,4070,2847,2371,476 +2019-8-20,3987,2800,2293,507 +2019-8-21,3355,2407,1963,444 +2019-8-22,2925,1959,1627,332 +2019-8-23,3010,2143,1769,374 +2019-8-24,1896,1380,1151,229 +2019-8-25,2501,1791,1497,294 +2019-8-26,3851,2714,2257,457 +2019-8-27,4403,3075,2622,453 +2019-8-28,4627,3125,2623,502 +2019-8-29,4221,2982,2477,505 +2019-8-30,3025,2102,1727,375 +2019-8-31,1998,1386,1179,207 +2019-9-1,2297,1645,1414,231 +2019-9-2,3192,2272,1910,362 +2019-9-3,4087,2921,2434,487 +2019-9-4,4787,3348,2842,506 +2019-9-5,4483,3078,2570,508 +2019-9-6,3571,2483,2095,388 +2019-9-7,2263,1566,1343,223 +2019-9-8,2948,2118,1827,291 +2019-9-9,4521,3287,2785,502 +2019-9-10,4563,3251,2758,493 +2019-9-11,4598,3365,2901,464 +2019-9-12,4603,3356,2868,488 +2019-9-13,3349,2508,2121,387 +2019-9-14,2437,1716,1451,265 +2019-9-15,3188,2367,2082,285 +2019-9-16,5291,3839,3280,559 +2019-9-17,5477,3815,3273,542 +2019-9-18,5257,3726,3222,504 +2019-9-19,5000,3500,3028,472 +2019-9-20,3890,2822,2407,415 +2019-9-21,2654,1994,1739,255 +2019-9-22,3656,2640,2328,312 +2019-9-23,5223,3804,3291,513 +2019-9-24,5276,3826,3287,539 +2019-9-25,5476,3838,3306,532 +2019-9-26,5196,3718,3208,510 +2019-9-27,4052,2863,2448,415 +2019-9-28,2635,1945,1696,249 +2019-9-29,4076,2895,2541,354 +2019-9-30,5167,3754,3216,538 +2019-10-1,4972,3634,3082,552 +2019-10-2,5143,3683,3209,474 +2019-10-3,4753,3454,2941,513 +2019-10-4,3795,2854,2440,414 +2019-10-5,2920,2118,1827,291 +2019-10-6,3950,2850,2471,379 +2019-10-7,5493,3929,3432,497 +2019-10-8,5652,4186,3705,481 +2019-10-9,5617,3936,3388,548 +2019-10-10,5234,3802,3261,541 +2019-10-11,4118,3147,2674,473 +2019-10-12,2863,2111,1803,308 +2019-10-13,4032,3013,2645,368 +2019-10-14,5476,4022,3466,556 +2019-10-15,5542,4117,3572,545 +2019-10-16,5340,3966,3403,563 +2019-10-17,5388,3905,3333,572 +2019-10-18,4309,3097,2675,422 +2019-10-19,3117,2223,1897,326 +2019-10-20,4234,3081,2679,402 +2019-10-21,5698,4144,3507,637 +2019-10-22,5721,4132,3536,596 +2019-10-23,6018,4446,3823,623 +2019-10-24,5563,3995,3397,598 +2019-10-25,4159,2961,2461,500 +2019-10-26,2732,2057,1753,304 +2019-10-27,3901,2854,2460,394 +2019-10-28,5749,4120,3529,591 +2019-10-29,5821,4140,3576,564 +2019-10-30,5647,4059,3452,607 +2019-10-31,5219,3689,3180,509 +2019-11-1,4054,3010,2604,406 +2019-11-2,2815,2170,1889,281 +2019-11-3,4253,3063,2603,460 +2019-11-4,5816,4184,3640,544 +2019-11-5,5843,4176,3549,627 +2019-11-6,6058,4351,3672,679 +2019-11-7,6291,4489,3810,679 +2019-11-8,4604,3357,2839,518 +2019-11-9,3354,2337,2000,337 +2019-11-10,4190,3075,2634,441 +2019-11-11,5931,4194,3573,621 +2019-11-12,6443,4589,3877,712 +2019-11-13,5805,4275,3572,703 +2019-11-14,5753,4172,3569,603 +2019-11-15,4709,3452,2927,525 +2019-11-16,3418,2506,2136,370 +2019-11-17,4821,3387,2872,515 +2019-11-18,6444,4699,3985,714 +2019-11-19,6607,4772,4119,653 +2019-11-20,6726,4781,4115,666 +2019-11-21,6334,4462,3840,622 +2019-11-22,4575,3214,2724,490 +2019-11-23,3414,2474,2118,356 +2019-11-24,4535,3242,2787,455 +2019-11-25,5970,4467,3836,631 +2019-11-26,5630,4115,3522,593 +2019-11-27,5384,3823,3225,598 +2019-11-28,4201,3223,2747,476 +2019-11-29,3799,2947,2504,443 +2019-11-30,3301,2443,2053,390 +2019-12-1,4420,3308,2849,459 +2019-12-2,6384,4674,4031,643 +2019-12-3,6964,4975,4285,690 +2019-12-4,6957,4959,4252,707 +2019-12-5,6350,4671,3989,682 +2019-12-6,5324,3796,3258,538 +2019-12-7,3795,2760,2362,398 +2019-12-8,5013,3636,3159,477 +2019-12-9,7005,5250,4569,681 +2019-12-10,6606,4791,4131,660 +2019-12-11,6686,4902,4240,662 +2019-12-12,6163,4533,3871,662 +2019-12-13,4581,3272,2801,471 +2019-12-14,2930,2240,1958,282 +2019-12-15,3585,2672,2280,392 +2019-12-16,4925,3653,3128,525 +2019-12-17,4743,3441,2895,546 +2019-12-18,4716,3390,2918,472 +2019-12-19,3793,2821,2381,440 +2019-12-20,2688,1906,1583,323 +2019-12-21,1682,1177,1020,157 +2019-12-22,1880,1411,1190,221 +2019-12-23,2451,1738,1442,296 +2019-12-24,1644,1197,977,220 +2019-12-25,1483,1027,851,176 +2019-12-26,1864,1355,1102,253 +2019-12-27,1927,1319,1109,210 +2019-12-28,1679,1219,1019,200 +2019-12-29,1962,1299,1111,188 +2019-12-30,2469,1762,1479,283 +2019-12-31,1750,1192,1005,187 +2020-1-1,1554,1105,870,235 +2020-1-2,2820,2083,1754,329 +2020-1-3,2970,2180,1859,321 +2020-1-4,2111,1526,1300,226 +2020-1-5,2393,1788,1514,274 +2020-1-6,3704,2770,2341,429 +2020-1-7,3760,2915,2492,423 +2020-1-8,3698,2844,2402,442 +2020-1-9,4243,3374,2910,464 +2020-1-10,3177,2415,2043,372 +2020-1-11,2361,1834,1581,253 +2020-1-12,2762,2238,1961,277 +2020-1-13,4298,3242,2727,515 +2020-1-14,3838,2884,2450,434 +2020-1-15,3754,2864,2470,394 +2020-1-16,3817,2951,2510,441 +2020-1-17,3175,2419,2006,413 +2020-1-18,2336,1927,1681,246 +2020-1-19,2597,2031,1717,314 +2020-1-20,3715,2948,2505,443 +2020-1-21,4459,3501,3017,484 +2020-1-22,4483,3552,3079,473 +2020-1-23,4225,3295,2805,490 +2020-1-24,3111,2484,2131,353 +2020-1-25,2353,1784,1535,249 +2020-1-26,3198,2520,2213,307 +2020-1-27,4432,3539,3058,481 +2020-1-28,4664,3654,3148,506 +2020-1-29,4471,3544,3025,519 +2020-1-30,4486,3499,3031,468 +2020-1-31,3527,2704,2304,400 +2020-2-1,2514,1995,1728,267 +2020-2-2,2993,2409,2106,303 +2020-2-3,4728,3694,3174,520 +2020-2-4,4883,3982,3472,510 +2020-2-5,5071,4061,3528,533 +2020-2-6,4638,3715,3217,498 +2020-2-7,3757,2942,2512,430 +2020-2-8,2761,2193,1890,303 +2020-2-9,3423,2849,2498,351 +2020-2-10,5066,4016,3464,552 +2020-2-11,4928,4045,3499,546 +2020-2-12,4996,4019,3497,522 +2020-2-13,5004,3823,3188,635 +2020-2-14,3675,2949,2529,420 +2020-2-15,2556,2024,1757,267 +2020-2-16,3732,2808,2361,447 +2020-2-17,4958,3951,3382,569 +2020-2-18,4869,3806,3273,533 +2020-2-19,5224,4042,3495,547 +2020-2-20,4890,3748,3212,536 +2020-2-21,3678,2914,2528,386 +2020-2-22,2456,2025,1759,266 +2020-2-23,3444,2708,2387,321 +2020-2-24,5000,3974,3390,584 +2020-2-25,5496,4210,3601,609 +2020-2-26,5059,4014,3468,546 +2020-2-27,4813,3759,3247,512 +2020-2-28,3810,3052,2569,483 +2020-2-29,2682,2169,1858,311 +2020-3-1,3332,2754,2379,375 +2020-3-2,4872,3801,3264,537 +2020-3-3,5097,3956,3452,504 +2020-3-4,4714,3591,3118,473 +2020-3-5,5048,3994,3428,566 +2020-3-6,3698,2843,2386,457 +2020-3-7,2670,2095,1798,297 +2020-3-8,3416,2743,2362,381 +2020-3-9,4731,3830,3269,561 +2020-3-10,4820,3718,3169,549 +2020-3-11,4813,3711,3182,529 +2020-3-12,4393,3508,2952,556 +2020-3-13,3316,2613,2172,441 +2020-3-14,2416,1888,1569,319 +2020-3-15,2934,2251,1937,314 +2020-3-16,2732,2157,1809,348 +2020-3-17,3805,3007,2525,482 +2020-3-18,3748,2976,2508,468 +2020-3-19,3678,2883,2471,412 +2020-3-20,3322,2647,2239,408 +2020-3-21,2701,2049,1749,300 +2020-3-22,3263,2469,2120,349 +2020-3-23,4105,3166,2690,476 +2020-3-24,4156,3247,2766,481 +2020-3-25,4153,3367,2878,489 +2020-3-26,4256,3394,2944,450 +2020-3-27,3818,3002,2588,414 +2020-3-28,3045,2438,2103,335 +2020-3-29,4079,3047,2603,444 +2020-3-30,4899,3852,3280,572 +2020-3-31,4943,3822,3310,512 +2020-4-1,4907,3799,3317,482 +2020-4-2,4933,3838,3305,533 +2020-4-3,4665,3498,2975,523 +2020-4-4,3366,2536,2175,361 +2020-4-5,3976,3045,2644,401 +2020-4-6,4981,3921,3351,570 +2020-4-7,5331,4144,3552,592 +2020-4-8,5331,4203,3656,547 +2020-4-9,5063,3982,3426,556 +2020-4-10,4252,3354,2869,485 +2020-4-11,3656,2712,2279,433 +2020-4-12,4152,3125,2666,459 +2020-4-13,5089,3922,3379,543 +2020-4-14,5491,4314,3721,593 +2020-4-15,5665,4424,3754,670 +2020-4-16,5423,4203,3592,611 +2020-4-17,4688,3682,3146,536 +2020-4-18,4055,3007,2521,486 +2020-4-19,4830,3671,3057,614 +2020-4-20,5908,4517,3869,648 +2020-4-21,5633,4377,3722,655 +2020-4-22,5786,4520,3856,664 +2020-4-23,5967,4758,4074,684 +2020-4-24,4937,3879,3319,560 +2020-4-25,4327,3284,2814,470 +2020-4-26,5086,3964,3393,571 +2020-4-27,6038,4771,4054,717 +2020-4-28,6324,4920,4210,710 +2020-4-29,6062,4735,4006,729 +2020-4-30,5520,4375,3776,599 +2020-5-1,4670,3621,3068,553 +2020-5-2,4171,3145,2683,462 +2020-5-3,4716,3648,3067,581 +2020-5-4,5939,4567,3882,685 +2020-5-5,6361,4900,4169,731 +2020-5-6,6659,5322,4580,742 +2020-5-7,6264,4857,4067,790 +2020-5-8,5359,4202,3592,610 +2020-5-9,4593,3452,2932,520 +2020-5-10,5092,3917,3338,579 +2020-5-11,6563,5112,4278,834 +2020-5-12,6124,4775,4028,747 +2020-5-13,5817,4596,3886,710 +2020-5-14,6057,4583,3937,646 +2020-5-15,4958,3829,3183,646 +2020-5-16,3651,2827,2384,443 +2020-5-17,4248,3291,2737,554 +2020-5-18,5624,4231,3588,643 +2020-5-19,5595,4300,3666,634 +2020-5-20,5213,4106,3466,640 +2020-5-21,5156,3990,3372,618 +2020-5-22,4350,3343,2816,527 +2020-5-23,3446,2696,2291,405 +2020-5-24,3945,2969,2479,490 +2020-5-25,4639,3610,3054,556 +2020-5-26,5224,4069,3416,653 +2020-5-27,5242,4105,3474,631 +2020-5-28,4939,3966,3371,595 +2020-5-29,4387,3486,2949,537 +2020-5-30,3327,2583,2189,394 +2020-5-31,3692,2919,2482,437 +2020-6-1,4734,3707,3133,574 +2020-6-2,4727,3690,3057,633 +2020-6-3,4994,3869,3239,630 +2020-6-4,4767,3733,3156,577 +2020-6-5,4124,3247,2778,469 +2020-6-6,3230,2425,2045,380 +2020-6-7,3906,3049,2574,475 +2020-6-8,4895,3787,3188,599 +2020-6-9,4871,3644,3050,594 +2020-6-10,4989,3857,3269,588 +2020-6-11,4633,3560,3015,545 +2020-6-12,4475,3292,2757,535 +2020-6-13,2967,2304,1942,362 +2020-6-14,3507,2684,2282,402 +2020-6-15,4337,3348,2794,554 +2020-6-16,4470,3461,2964,497 +2020-6-17,4439,3450,2898,552 +2020-6-18,4895,3677,3132,545 +2020-6-19,3924,2911,2459,452 +2020-6-20,2827,2190,1851,339 +2020-6-21,3481,2668,2256,412 +2020-6-22,4627,3493,2935,558 +2020-6-23,4561,3493,2950,543 +2020-6-24,4626,3521,2982,539 +2020-6-25,4137,3215,2668,547 +2020-6-26,3555,2675,2248,427 +2020-6-27,2671,1999,1680,319 +2020-6-28,3486,2635,2233,402 +2020-6-29,4000,3119,2616,503 +2020-6-30,3828,3013,2553,460 +2020-7-1,3935,3049,2599,450 +2020-7-2,3633,2881,2397,484 +2020-7-3,2997,2286,1932,354 +2020-7-4,2194,1704,1420,284 +2020-7-5,2948,2198,1836,362 +2020-7-6,4049,3215,2724,491 +2020-7-7,3792,2998,2485,513 +2020-7-8,4029,3096,2613,483 +2020-7-9,3945,3039,2587,452 +2020-7-10,3523,2620,2173,447 +2020-7-11,2646,1981,1665,316 +2020-7-12,3454,2611,2213,398 +2020-7-13,3703,2916,2459,457 +2020-7-14,3680,2853,2397,456 +2020-7-15,3479,2627,2196,431 +2020-7-16,3756,2916,2463,453 +2020-7-17,3289,2557,2122,435 +2020-7-18,2416,1892,1606,286 +2020-7-19,2793,2197,1892,305 +2020-7-20,3749,2881,2428,453 +2020-7-21,3786,2889,2450,439 +2020-7-22,4002,3039,2566,473 +2020-7-23,3823,3033,2525,508 +2020-7-24,3430,2623,2262,361 +2020-7-25,2400,1767,1487,280 +2020-7-26,2835,2207,1869,338 +2020-7-27,4001,3031,2523,508 +2020-7-28,3795,2969,2525,444 +2020-7-29,3903,3010,2591,419 +2020-7-30,3397,2687,2265,422 +2020-7-31,3005,2317,1887,430 +2020-8-1,2305,1750,1479,271 +2020-8-2,2696,1993,1701,292 +2020-8-3,3866,2814,2368,446 +2020-8-4,3826,2845,2400,445 +2020-8-5,3673,2774,2334,440 +2020-8-6,3660,2625,2189,436 +2020-8-7,3136,2364,1941,423 +2020-8-8,2223,1628,1354,274 +2020-8-9,2623,1941,1644,297 +2020-8-10,3638,2745,2325,420 +2020-8-11,3740,2742,2258,484 +2020-8-12,3767,2904,2477,427 +2020-8-13,3621,2780,2322,458 +2020-8-14,2971,2308,1922,386 +2020-8-15,2221,1696,1373,323 +2020-8-16,2724,2037,1686,351 +2020-8-17,3456,2638,2181,457 +2020-8-18,3581,2683,2184,499 +2020-8-19,2064,1564,1297,267 diff --git a/tests/gretel_client/fixtures/gpt_x_config_without_params.yml b/tests/gretel_client/fixtures/gpt_x_config_without_params.yml new file mode 100644 index 00000000..39f86b48 --- /dev/null +++ b/tests/gretel_client/fixtures/gpt_x_config_without_params.yml @@ -0,0 +1,19 @@ +# Default configuration GPT-2 XL + +# The parameter settings below match the default settings +# in Gretel's open source GPT-2 XL model + +schema_version: 1.0 + +models: + - gpt_x: + data_source: my-file.csv + pretrained_model: "gpt2" + steps: 1000 + batch_size: 64 + weight_decay: 0.1 + warmup_steps: 100 + lr_scheduler: "cosine" + learning_rate: 5e-4 + column_name: "sample_column" + diff --git a/tests/gretel_client/fixtures/gpt_x_with_params_section.yml b/tests/gretel_client/fixtures/gpt_x_with_params_section.yml new file mode 100644 index 00000000..6b3f8c1b --- /dev/null +++ b/tests/gretel_client/fixtures/gpt_x_with_params_section.yml @@ -0,0 +1,17 @@ +schema_version: "1.0" +name: "natural-language-gpt" +models: + - gpt_x: + data_source: "__temp__" + pretrained_model: "gretelai/mpt-7b" + column_name: null + params: + batch_size: 4 + steps: 750 + weight_decay: 0.01 + warmup_steps: 100 + lr_scheduler: "linear" + learning_rate: 0.0002 + generate: + num_records: 80 + maximum_text_length: 100 diff --git a/tests/gretel_client/integration/test_gretel.py b/tests/gretel_client/integration/test_gretel_tabular.py similarity index 84% rename from tests/gretel_client/integration/test_gretel.py rename to tests/gretel_client/integration/test_gretel_tabular.py index b1823c5e..58b54119 100644 --- a/tests/gretel_client/integration/test_gretel.py +++ b/tests/gretel_client/integration/test_gretel_tabular.py @@ -1,3 +1,5 @@ +import os + from pathlib import Path from typing import Callable @@ -25,7 +27,11 @@ def seed_data_file_path(get_fixture: Callable) -> Path: @pytest.fixture(scope="module") def gretel() -> Gretel: - gretel = Gretel(project_name="pytest", endpoint="https://api-dev.gretel.cloud") + gretel = Gretel( + project_name="pytest-tabular", + api_key=os.getenv("GRETEL_API_KEY"), + endpoint="https://api-dev.gretel.cloud", + ) yield gretel gretel._project.delete() @@ -63,9 +69,9 @@ def test_gretel_submit_train_tabular( # Verify that the model config was updated with the custom settings. for section, settings in custom_settings.items(): - dict_name = list(trained.model_config["models"][0].keys())[0] + model_type = list(trained.model_config["models"][0].keys())[0] for k, v in settings.items(): - assert trained.model_config["models"][0][dict_name][section][k] == v + assert trained.model_config["models"][0][model_type][section][k] == v def test_gretel_submit_generate_tabular(gretel: Gretel): @@ -134,8 +140,27 @@ def test_gretel_submit_generate_invalid_arguments(gretel: Gretel): ) +@pytest.mark.parametrize( + "base_config", + [ + "amplify", + "tabular-actgan", + "tabular-differential-privacy", + "tabular-lstm", + "time-series", + ], +) +def test_gretel_train_no_data_source_exception(gretel: Gretel, base_config: str): + """Test that an error is raised when a data source is required but not provided.""" + with pytest.raises(GretelJobSubmissionError): + gretel.submit_train(base_config, data_source=None) + + def test_gretel_no_project_set_exceptions(): - gretel = Gretel(endpoint="https://api-dev.gretel.cloud") + gretel = Gretel( + api_key=os.getenv("GRETEL_API_KEY"), + endpoint="https://api-dev.gretel.cloud", + ) assert gretel._project is None diff --git a/tests/gretel_client/integration/test_gretel_timeseries.py b/tests/gretel_client/integration/test_gretel_timeseries.py new file mode 100644 index 00000000..54f62329 --- /dev/null +++ b/tests/gretel_client/integration/test_gretel_timeseries.py @@ -0,0 +1,53 @@ +import os + +from pathlib import Path +from typing import Callable + +import pytest + +from gretel_client.gretel.interface import Gretel + +NUM_RECORDS = 1000 + + +@pytest.fixture +def data_file_path(get_fixture: Callable) -> Path: + return get_fixture("daily-website-visitors.csv") + + +@pytest.fixture(scope="module") +def gretel() -> Gretel: + gretel = Gretel( + project_name="pytest-timeseries", + api_key=os.getenv("GRETEL_API_KEY"), + endpoint="https://api-dev.gretel.cloud", + ) + yield gretel + gretel._project.delete() + + +def test_train_timeseries_custom_config(gretel: Gretel, data_file_path: Path): + """Test training a timeseries model with a custom config.""" + trained = gretel.submit_train( + base_config="time-series", + data_source=data_file_path, + params={"epochs": 50}, + generate={"num_records": NUM_RECORDS}, + ) + config = trained.model_config["models"][0]["timeseries_dgan"]["params"] + assert trained.job_status == "completed" + assert config["epochs"] == 50 + assert trained.report is None + assert ( + len(trained.fetch_report_synthetic_data()) + == config["max_sequence_len"] * NUM_RECORDS + ) + + +def test_generate_timeseries_data(gretel: Gretel): + """Test generating timeseries data from a trained model.""" + model = list(gretel.get_project().search_models(model_name="time-series-dgan"))[0] + generated = gretel.submit_generate(model.model_id, num_records=NUM_RECORDS) + config = model.model_config["models"][0]["timeseries_dgan"]["params"] + assert generated.job_status == "completed" + assert len(generated.synthetic_data) == config["max_sequence_len"] * NUM_RECORDS diff --git a/tests/gretel_client/test_gretel.py b/tests/gretel_client/test_gretel.py index 8f6d5997..61195652 100644 --- a/tests/gretel_client/test_gretel.py +++ b/tests/gretel_client/test_gretel.py @@ -12,6 +12,16 @@ def config_file_path(get_fixture: Callable) -> Path: return get_fixture("tabular-actgan.yml") +@pytest.fixture +def gpt_x_config_file_path(get_fixture: Callable) -> Path: + return get_fixture("gpt_x_with_params_section.yml") + + +@pytest.fixture +def gpt_x_old_config_file_path(get_fixture: Callable) -> Path: + return get_fixture("gpt_x_config_without_params.yml") + + def test_create_config_from_blueprint(): """Test creating a Gretel model config from a synthetics blueprint.""" settings = create_model_config_from_base( @@ -43,6 +53,44 @@ def test_create_config_from_file(config_file_path: Path): assert settings["privacy_filters"]["outliers"] is None +def test_update_non_nested_setting(gpt_x_config_file_path: Path): + """Test updating a non-nested config setting.""" + settings = create_model_config_from_base( + base_config=str(gpt_x_config_file_path), + pretrained_model="gretelai/we-are-awesome", + column_name="custom_name", + )["models"][0]["gpt_x"] + + assert settings["pretrained_model"] == "gretelai/we-are-awesome" + assert settings["column_name"] == "custom_name" + + +def test_gpt_x_backwards_compatibility( + gpt_x_old_config_file_path: Path, gpt_x_config_file_path: Path +): + """Test config to old format if base is old format and user passes `params`.""" + + # old format + settings = create_model_config_from_base( + base_config=str(gpt_x_old_config_file_path), + params={"learning_rate": 0.1, "batch_size": 16}, + )["models"][0]["gpt_x"] + + assert "params" not in settings + assert settings["batch_size"] == 16 + assert settings["learning_rate"] == 0.1 + + # new format + settings = create_model_config_from_base( + base_config=str(gpt_x_config_file_path), + params={"learning_rate": 0.1, "batch_size": 16}, + )["models"][0]["gpt_x"] + + assert "params" in settings + assert settings["params"]["batch_size"] == 16 + assert settings["params"]["learning_rate"] == 0.1 + + def test_create_config_template_error(): """Test exception from giving an invalid template.""" with pytest.raises(BaseConfigError): @@ -54,11 +102,11 @@ def test_create_config_settings_error(): with pytest.raises(ConfigSettingError): create_model_config_from_base( base_config="tabular-actgan", - invalid_setting="invalid", + invalid_non_nested_setting="invalid", ) with pytest.raises(ConfigSettingError): create_model_config_from_base( base_config="tabular-actgan", - params="must be a dict", + invalid_section={"invalid": "section"}, )