From acdc469e39a193882f4559240b202eccb66cf0c8 Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Mon, 1 Feb 2021 21:05:34 +0900 Subject: [PATCH 001/134] Add A New Baseline: DoubleEnsemble --- .../DoubleEnsemble/requirements.txt | 3 + ...rkflow_config_doubleensemble_Alpha158.yaml | 91 +++++++ ...rkflow_config_doubleensemble_Alpha360.yaml | 98 +++++++ qlib/contrib/model/double_ensemble.py | 241 ++++++++++++++++++ 4 files changed, 433 insertions(+) create mode 100644 examples/benchmarks/DoubleEnsemble/requirements.txt create mode 100644 examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml create mode 100644 examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml create mode 100644 qlib/contrib/model/double_ensemble.py diff --git a/examples/benchmarks/DoubleEnsemble/requirements.txt b/examples/benchmarks/DoubleEnsemble/requirements.txt new file mode 100644 index 000000000..f9117361d --- /dev/null +++ b/examples/benchmarks/DoubleEnsemble/requirements.txt @@ -0,0 +1,3 @@ +pandas==1.1.2 +numpy==1.17.4 +lightgbm==3.1.0 \ No newline at end of file diff --git a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml new file mode 100644 index 000000000..b5c669c28 --- /dev/null +++ b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml @@ -0,0 +1,91 @@ +qlib_init: + provider_uri: "~/.qlib/qlib_data/cn_data" + region: cn +market: &market csi300 +benchmark: &benchmark SH000300 +data_handler_config: &data_handler_config + start_time: 2008-01-01 + end_time: 2020-08-01 + fit_start_time: 2008-01-01 + fit_end_time: 2014-12-31 + instruments: *market +port_analysis_config: &port_analysis_config + strategy: + class: TopkDropoutStrategy + module_path: qlib.contrib.strategy.strategy + kwargs: + topk: 50 + n_drop: 5 + backtest: + verbose: False + limit_threshold: 0.095 + account: 100000000 + benchmark: *benchmark + deal_price: close + open_cost: 0.0005 + close_cost: 0.0015 + min_cost: 5 +task: + model: + class: DEnsembleModel + module_path: qlib.contrib.model.double_ensemble + kwargs: + base: "gbm" + loss: mse + k: 6 + enable_sr: True + enable_fs: True + alpha1: 1 + alpha2: 1 + bins_sr: 10 + bins_fs: 5 + decay: 0.5 + sample_ratios: + - 0.8 + - 0.7 + - 0.6 + - 0.5 + - 0.4 + sub_weights: + - 1 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + colsample_bytree: 0.8879 + learning_rate: 0.2 + subsample: 0.8789 + lambda_l1: 205.6999 + lambda_l2: 580.9768 + max_depth: 8 + num_leaves: 210 + num_threads: 20 + verbosity: -1 + num_iterations: 28 + early_stopping_round: None + dataset: + class: DatasetH + module_path: qlib.data.dataset + kwargs: + handler: + class: Alpha158 + module_path: qlib.contrib.data.handler + kwargs: *data_handler_config + segments: + train: [2008-01-01, 2014-12-31] + valid: [2015-01-01, 2016-12-31] + test: [2017-01-01, 2020-08-01] + record: + - class: SignalRecord + module_path: qlib.workflow.record_temp + kwargs: {} + - class: SigAnaRecord + module_path: qlib.workflow.record_temp + kwargs: + ana_long_short: False + ann_scaler: 252 + - class: PortAnaRecord + module_path: qlib.workflow.record_temp + kwargs: + config: *port_analysis_config \ No newline at end of file diff --git a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml new file mode 100644 index 000000000..b31eac4ce --- /dev/null +++ b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml @@ -0,0 +1,98 @@ +qlib_init: + provider_uri: "~/.qlib/qlib_data/cn_data" + region: cn +market: &market csi300 +benchmark: &benchmark SH000300 +data_handler_config: &data_handler_config + start_time: 2008-01-01 + end_time: 2020-08-01 + fit_start_time: 2008-01-01 + fit_end_time: 2014-12-31 + instruments: *market + infer_processors: [] + learn_processors: + - class: DropnaLabel + - class: CSRankNorm + kwargs: + fields_group: label + label: ["Ref($close, -2) / Ref($close, -1) - 1"] +port_analysis_config: &port_analysis_config + strategy: + class: TopkDropoutStrategy + module_path: qlib.contrib.strategy.strategy + kwargs: + topk: 50 + n_drop: 5 + backtest: + verbose: False + limit_threshold: 0.095 + account: 100000000 + benchmark: *benchmark + deal_price: close + open_cost: 0.0005 + close_cost: 0.0015 + min_cost: 5 +task: + model: + class: DEnsembleModel + module_path: qlib.contrib.model.double_ensemble + kwargs: + base: "gbm" + loss: mse + k: 6 + enable_sr: True + enable_fs: True + alpha1: 1 + alpha2: 1 + bins_sr: 10 + bins_fs: 5 + decay: 0.5 + sample_ratios: + - 0.8 + - 0.7 + - 0.6 + - 0.5 + - 0.4 + sub_weights: + - 1 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + colsample_bytree: 0.8879 + learning_rate: 0.0421 + subsample: 0.8789 + lambda_l1: 205.6999 + lambda_l2: 580.9768 + max_depth: 8 + num_leaves: 210 + num_threads: 20 + verbosity: -1 + num_iterations: 28 + early_stopping_round: None + dataset: + class: DatasetH + module_path: qlib.data.dataset + kwargs: + handler: + class: Alpha360 + module_path: qlib.contrib.data.handler + kwargs: *data_handler_config + segments: + train: [2008-01-01, 2014-12-31] + valid: [2015-01-01, 2016-12-31] + test: [2017-01-01, 2020-08-01] + record: + - class: SignalRecord + module_path: qlib.workflow.record_temp + kwargs: {} + - class: SigAnaRecord + module_path: qlib.workflow.record_temp + kwargs: + ana_long_short: False + ann_scaler: 252 + - class: PortAnaRecord + module_path: qlib.workflow.record_temp + kwargs: + config: *port_analysis_config \ No newline at end of file diff --git a/qlib/contrib/model/double_ensemble.py b/qlib/contrib/model/double_ensemble.py new file mode 100644 index 000000000..68680b814 --- /dev/null +++ b/qlib/contrib/model/double_ensemble.py @@ -0,0 +1,241 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import lightgbm as lgb +import numpy as np +import pandas as pd + +from ...model.base import Model +from ...data.dataset import DatasetH +from ...data.dataset.handler import DataHandlerLP +from ...log import get_module_logger + + +class DEnsembleModel(Model): + """Double Ensemble Model""" + + def __init__( + self, + base="gbm", + loss="mse", + k=6, + enable_sr=True, + enable_fs=True, + alpha1=1., + alpha2=1., + bins_sr=10, + bins_fs=5, + decay=None, + sample_ratios=None, + sub_weights=None, + **kwargs): + self.base = base # "gbm" or "mlp", specifically, we use lgbm for "gbm" + self.k = k + self.enable_sr = enable_sr + self.enable_fs = enable_fs + self.alpha1 = alpha1 + self.alpha2 = alpha2 + self.bins_sr = bins_sr + self.bins_fs = bins_fs + self.decay = decay + if not len(sample_ratios) == bins_fs: + raise ValueError("The length of sample_ratios should be equal to bins_fs.") + self.sample_ratios = sample_ratios + if not len(sub_weights) == k: + raise ValueError("The length of sub_weights should be equal to k.") + self.sub_weights = sub_weights + self.logger = get_module_logger("DEnsembleModel") + self.logger.info("Double Ensemble Model...") + self.ensemble = [] # the current ensemble model, a list contains all the sub-models + self.sub_features = [] # the features for each sub model in the form of pandas.Index + self.params = {"objective": loss} + self.params.update(kwargs) + self.loss = loss + + def fit( + self, + dataset: DatasetH + ): + df_train, df_valid = dataset.prepare( + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L + ) + x_train, y_train = df_train["feature"], df_train["label"] + # initialize the sample weights + N, F = x_train.shape + weights = pd.Series(np.ones(N, dtype=float)) + # initialize the features + features = x_train.columns + pred_sub = pd.DataFrame(np.zeros((N, self.k), dtype=float), index=x_train.index) + # train k sub-models + for i_k in range(self.k): + self.sub_features.append(features) + self.logger.info("Training sub-model: ({}/{})".format(i_k+1, self.k)) + model_k = self.train_submodel(df_train, df_valid, weights, features) + self.ensemble.append(model_k) + # no further sample re-weight and feature selection needed for the last sub-model + if i_k + 1 == self.k: + break + + self.logger.info("Retrieving loss curve and loss values...") + loss_curve = self.retrieve_loss_curve(model_k, df_train, features) + pred_k = self.predict_sub(model_k, df_train, features) + pred_sub.iloc[:, i_k] = pred_k + pred_ensemble = pred_sub.iloc[:, :i_k+1].mean(axis=1) + loss_values = pd.Series(self.get_loss(y_train.values.squeeze(), pred_ensemble.values)) + + if self.enable_sr: + self.logger.info("Sample re-weighting...") + weights = self.sample_reweight(loss_curve, loss_values, i_k+1) + + if self.enable_fs: + self.logger.info("Feature selection...") + features = self.feature_selection(df_train, loss_values) + + def train_submodel(self, df_train, df_valid, weights, features): + dtrain, dvalid = self._prepare_data_gbm(df_train, df_valid, weights, features) + evals_result = dict() + model = lgb.train( + self.params, + dtrain, + valid_sets=[dtrain, dvalid], + valid_names=["train", "valid"], + verbose_eval=20, + evals_result=evals_result, + ) + evals_result["train"] = list(evals_result["train"].values())[0] + evals_result["valid"] = list(evals_result["valid"].values())[0] + return model + + def _prepare_data_gbm(self, df_train, df_valid, weights, features): + x_train, y_train = df_train["feature"].loc[:, features], df_train["label"] + x_valid, y_valid = df_valid["feature"].loc[:, features], df_valid["label"] + + # Lightgbm need 1D array as its label + if y_train.values.ndim == 2 and y_train.values.shape[1] == 1: + y_train, y_valid = np.squeeze(y_train.values), np.squeeze(y_valid.values) + else: + raise ValueError("LightGBM doesn't support multi-label training") + + dtrain = lgb.Dataset(x_train.values, label=y_train, weight=weights) + dvalid = lgb.Dataset(x_valid.values, label=y_valid) + return dtrain, dvalid + + def sample_reweight(self, loss_curve, loss_values, k_th): + """ + the SR module of Double Ensemble + :param loss_curve: the shape is NxT + the loss curve for the previous sub-model, where the element (i, t) if the error on the i-th sample + after the t-th iteration in the training of the previous sub-model. + :param loss_values: the shape is N + the loss of the current ensemble on the i-th sample. + :param k_th: the index of the current sub-model, starting from 1 + :return: weights + the weights for all the samples. + """ + # normalize loss_curve and loss_values with ranking + loss_curve_norm = loss_curve.rank(axis=0, pct=True) + loss_values_norm = (-loss_values).rank(pct=True) + + # calculate l_start and l_end from loss_curve + N, T = loss_curve.shape + part = np.maximum(int(T * 0.1), 1) + l_start = loss_curve_norm.iloc[:, :part].mean(axis=1) + l_end = loss_curve_norm.iloc[:, -part:].mean(axis=1) + + # calculate h-value for each sample + h1 = loss_values_norm + h2 = (l_end / l_start).rank(pct=True) + h = pd.DataFrame({'h_value': self.alpha1 * h1 + self.alpha2 * h2}) + + # calculate weights + h['bins'] = pd.cut(h['h_value'], self.bins_sr) + h_avg = h.groupby('bins')['h_value'].mean() + weights = pd.Series(np.zeros(N, dtype=float)) + for i_b, b in enumerate(h_avg.index): + weights[h['bins'] == b] = 1. / (self.decay ** k_th * h_avg[i_b] + 0.1) + return weights + + def feature_selection(self, df_train, loss_values): + """ + the FS module of Double Ensemble + :param df_train: the shape is NxF + :param loss_values: the shape is N + the loss of the current ensemble on the i-th sample. + :return: res_feat: in the form of pandas.Index + + """ + x_train, y_train = df_train["feature"], df_train["label"] + features = x_train.columns + N, F = x_train.shape + g = pd.DataFrame({'g_value': np.zeros(F, dtype=float)}) + M = len(self.ensemble) + + # shuffle specific columns and calculate g-value for each feature + x_train_tmp = x_train.copy() + for i_f, feat in enumerate(features): + x_train_tmp.loc[:, feat] = np.random.permutation(x_train_tmp.loc[:, feat].values) + pred = pd.Series(np.zeros(N), index=x_train_tmp.index) + for i_s, submodel in enumerate(self.ensemble): + pred += pd.Series(submodel.predict(x_train_tmp.loc[:, self.sub_features[i_s]].values), + index=x_train_tmp.index) / M + loss_feat = self.get_loss(y_train.values.squeeze(), pred.values) + g.loc[i_f, 'g_value'] = np.mean(loss_feat - loss_values) / np.std(loss_feat - loss_values) + x_train_tmp.loc[:, feat] = x_train.loc[:, feat].copy() + + # one column in train features is all-nan # if g['g_value'].isna().any() + g['g_value'].replace(np.nan, 0, inplace=True) + + # divide features into bins_fs bins + g['bins'] = pd.cut(g['g_value'], self.bins_fs) + + # randomly sample features from bins to construct the new features + res_feat = [] + sorted_bins = sorted(g['bins'].unique(), reverse=True) + for i_b, b in enumerate(sorted_bins): + b_feat = features[g['bins'] == b] + num_feat = int(np.ceil(self.sample_ratios[i_b] * len(b_feat))) + res_feat = res_feat + np.random.choice(b_feat, size=num_feat).tolist() + return pd.Index(res_feat) + + def get_loss(self, label, pred): + if self.loss == "mse": + return (label - pred) ** 2 + else: + raise ValueError("not implemented yet") + + def retrieve_loss_curve(self, model, df_train, features): + if self.base == "gbm": + num_trees = model.num_trees() + x_train, y_train = df_train["feature"].loc[:, features], df_train["label"] + # Lightgbm need 1D array as its label + if y_train.values.ndim == 2 and y_train.values.shape[1] == 1: + y_train = np.squeeze(y_train.values) + else: + raise ValueError("LightGBM doesn't support multi-label training") + + N = x_train.shape[0] + loss_curve = pd.DataFrame(np.zeros((N, num_trees))) + pred_tree = np.zeros(N, dtype=float) + for i_tree in range(num_trees): + pred_tree += model.predict(x_train.values, start_iteration=i_tree, num_iteration=1) + loss_curve.iloc[:, i_tree] = self.get_loss(y_train, pred_tree) + else: + raise ValueError("not implemented yet") + return loss_curve + + def predict(self, dataset): + if self.ensemble is None: + raise ValueError("model is not fitted yet!") + x_test = dataset.prepare("test", col_set="feature", data_key=DataHandlerLP.DK_I) + pred = pd.Series(np.zeros(x_test.shape[0]), index=x_test.index) + for i_sub, submodel in enumerate(self.ensemble): + feat_sub = self.sub_features[i_sub] + pred += pd.Series(submodel.predict(x_test.loc[:, feat_sub].values), index=x_test.index) * self.sub_weights[i_sub] + return pred + + def predict_sub(self, submodel, df_data, features): + x_data, y_data = df_data["feature"].loc[:, features], df_data["label"] + pred_sub = pd.Series(submodel.predict(x_data.values), index=x_data.index) + return pred_sub + + From 8c3ec164ff5bb73fea2cc0d63f91776148ed2760 Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Tue, 2 Feb 2021 11:46:37 +0900 Subject: [PATCH 002/134] Add A New Baseline: DoubleEnsemble --- ...rkflow_config_doubleensemble_Alpha158.yaml | 5 +- ...rkflow_config_doubleensemble_Alpha360.yaml | 47 +++++++++---------- examples/run_all_model.py | 2 +- qlib/contrib/model/double_ensemble.py | 3 ++ 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml index b5c669c28..c468eb320 100644 --- a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml +++ b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml @@ -33,7 +33,7 @@ task: base: "gbm" loss: mse k: 6 - enable_sr: True + enable_sr: False enable_fs: True alpha1: 1 alpha2: 1 @@ -53,6 +53,7 @@ task: - 0.2 - 0.2 - 0.2 + epochs: 28 colsample_bytree: 0.8879 learning_rate: 0.2 subsample: 0.8789 @@ -62,8 +63,6 @@ task: num_leaves: 210 num_threads: 20 verbosity: -1 - num_iterations: 28 - early_stopping_round: None dataset: class: DatasetH module_path: qlib.data.dataset diff --git a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml index b31eac4ce..3351cefc5 100644 --- a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml +++ b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml @@ -38,28 +38,29 @@ task: module_path: qlib.contrib.model.double_ensemble kwargs: base: "gbm" - loss: mse - k: 6 - enable_sr: True - enable_fs: True - alpha1: 1 - alpha2: 1 - bins_sr: 10 - bins_fs: 5 - decay: 0.5 - sample_ratios: - - 0.8 - - 0.7 - - 0.6 - - 0.5 - - 0.4 - sub_weights: - - 1 - - 0.2 - - 0.2 - - 0.2 - - 0.2 - - 0.2 + loss: mse + k: 6 + enable_sr: True + enable_fs: True + alpha1: 1 + alpha2: 1 + bins_sr: 10 + bins_fs: 5 + decay: 0.5 + sample_ratios: + - 0.8 + - 0.7 + - 0.6 + - 0.5 + - 0.4 + sub_weights: + - 1 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + - 0.2 + epochs: 136 colsample_bytree: 0.8879 learning_rate: 0.0421 subsample: 0.8789 @@ -69,8 +70,6 @@ task: num_leaves: 210 num_threads: 20 verbosity: -1 - num_iterations: 28 - early_stopping_round: None dataset: class: DatasetH module_path: qlib.data.dataset diff --git a/examples/run_all_model.py b/examples/run_all_model.py index d587eff15..1809bac2e 100644 --- a/examples/run_all_model.py +++ b/examples/run_all_model.py @@ -265,7 +265,7 @@ def run(times=1, models=None, dataset="Alpha360", exclude=False): ) # TODO: FIX ME! else: execute( - f"cd {env_path} && {python_path} -m pip install --upgrade --force-reinstall -e git+https://github.com/microsoft/qlib#egg=pyqlib" + f"cd {env_path} && {python_path} -m pip install --upgrade --force-reinstall -e git+https://github.com/meng-ustc/qlib#egg=pyqlib" ) # TODO: FIX ME! sys.stderr.write("\n") # run workflow_by_config for multiple times diff --git a/qlib/contrib/model/double_ensemble.py b/qlib/contrib/model/double_ensemble.py index 68680b814..786b3987c 100644 --- a/qlib/contrib/model/double_ensemble.py +++ b/qlib/contrib/model/double_ensemble.py @@ -28,6 +28,7 @@ class DEnsembleModel(Model): decay=None, sample_ratios=None, sub_weights=None, + epochs=100, **kwargs): self.base = base # "gbm" or "mlp", specifically, we use lgbm for "gbm" self.k = k @@ -44,6 +45,7 @@ class DEnsembleModel(Model): if not len(sub_weights) == k: raise ValueError("The length of sub_weights should be equal to k.") self.sub_weights = sub_weights + self.epochs = epochs self.logger = get_module_logger("DEnsembleModel") self.logger.info("Double Ensemble Model...") self.ensemble = [] # the current ensemble model, a list contains all the sub-models @@ -97,6 +99,7 @@ class DEnsembleModel(Model): model = lgb.train( self.params, dtrain, + num_boost_round=self.epochs, valid_sets=[dtrain, dvalid], valid_names=["train", "valid"], verbose_eval=20, From fd5c68a7d1b9e9074464431ab384dfbdda7aa206 Mon Sep 17 00:00:00 2001 From: Meng Dong Date: Tue, 2 Feb 2021 12:39:07 +0800 Subject: [PATCH 003/134] Update workflow_config_doubleensemble_Alpha158.yaml --- .../workflow_config_doubleensemble_Alpha158.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml index c468eb320..74923c0e5 100644 --- a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml +++ b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml @@ -33,7 +33,7 @@ task: base: "gbm" loss: mse k: 6 - enable_sr: False + enable_sr: True enable_fs: True alpha1: 1 alpha2: 1 @@ -87,4 +87,4 @@ task: - class: PortAnaRecord module_path: qlib.workflow.record_temp kwargs: - config: *port_analysis_config \ No newline at end of file + config: *port_analysis_config From 988b42e159111f52dbba3301e7b1ae1187d2dc12 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Tue, 9 Feb 2021 20:28:42 +0800 Subject: [PATCH 004/134] Add Structured Covariance Estimator to riskmodel.py --- qlib/model/riskmodel.py | 141 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 138 insertions(+), 3 deletions(-) diff --git a/qlib/model/riskmodel.py b/qlib/model/riskmodel.py index 07a1e0c9f..32984ed6a 100644 --- a/qlib/model/riskmodel.py +++ b/qlib/model/riskmodel.py @@ -39,7 +39,7 @@ class RiskModel(BaseModel): self.scale_return = scale_return def predict( - self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True + self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True ) -> Union[pd.DataFrame, np.ndarray]: """ Args: @@ -373,7 +373,8 @@ class ShrinkCovEstimator(RiskModel): roff1 = np.sum(v1 * cov_mkt[:, None].T) / var_mkt - np.sum(np.diag(v1) * cov_mkt) / var_mkt v3 = z.T.dot(z) / t - var_mkt * S roff3 = ( - np.sum(v3 * np.outer(cov_mkt, cov_mkt)) / var_mkt ** 2 - np.sum(np.diag(v3) * cov_mkt ** 2) / var_mkt ** 2 + np.sum(v3 * np.outer(cov_mkt, cov_mkt)) / var_mkt ** 2 - np.sum( + np.diag(v3) * cov_mkt ** 2) / var_mkt ** 2 ) roff = 2 * roff1 - roff3 rho = rdiag + roff @@ -433,7 +434,7 @@ class POETCovEstimator(RiskModel): if self.num_factors > 0: Dd, V = np.linalg.eig(Y.T.dot(Y)) V = V[:, np.argsort(Dd)] - F = V[:, -self.num_factors :][:, ::-1] * np.sqrt(n) + F = V[:, -self.num_factors:][:, ::-1] * np.sqrt(n) LamPCA = Y.dot(F) / n uhat = np.asarray(Y - LamPCA.dot(F.T)) Lowrank = np.asarray(LamPCA.dot(LamPCA.T)) @@ -465,3 +466,137 @@ class POETCovEstimator(RiskModel): SigmaY = SigmaU + Lowrank return SigmaY + + +class StructuredCovEstimator(RiskModel): + """Structured Covariance Estimator + + This estimator assumes observations can be predicted by multiple factors + X = FB + U + where `F` can be specified by explicit risk factors or latent factors. + + Therefore the structured covariance can be estimated by + cov(X) = F cov(B) F.T + cov(U) + + We use latent factor models to estimate the structured covariance. + Specifically, the following latent factor models are supported: + - `pca`: Principal Component Analysis + - `fa`: Factor Analysis + + Reference: [1] Fan, J., Liao, Y., & Liu, H. (2016). An overview of the estimation of large covariance and + precision matrices. Econometrics Journal, 19(1), C1–C32. https://doi.org/10.1111/ectj.12061 + """ + + FACTOR_MODEL_PCA = "pca" + FACTOR_MODEL_FA = "fa" + + def __init__(self, factor_model: str = 'pca', num_factors: int = 10, nan_option: str = "ignore", + assume_centered: bool = False, scale_return: bool = True): + """ + Args: + factor_model (str): the latent factor models used to estimate the structured covariance (`pca`/`fa`). + num_factors (int): number of components to keep. + nan_option (str): nan handling option (`ignore`/`fill`). + assume_centered (bool): whether the data is assumed to be centered. + scale_return (bool): whether scale returns as percentage. + """ + super().__init__(nan_option, assume_centered, scale_return) + + assert factor_model in [ + self.FACTOR_MODEL_PCA, + self.FACTOR_MODEL_FA, + ], 'factor_model={} is not supported'.format(factor_model) + self.solver = PCA if factor_model == self.FACTOR_MODEL_PCA else FactorAnalysis + + self.num_factors = num_factors + + def predict( + self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True, + return_decomposed_components=False + ) -> Union[pd.DataFrame, np.ndarray, tuple]: + """ + Args: + X (pd.Series, pd.DataFrame or np.ndarray): data from which to estimate the covariance, + with variables as columns and observations as rows. + return_corr (bool): whether return the correlation matrix. + is_price (bool): whether `X` contains price (if not assume stock returns). + return_decomposed_components (bool): whether return decomposed components of the covariance matrix. + + Returns: + tuple or pd.DataFrame or np.ndarray: decomposed covariance matrix or estimated covariance or correlation. + """ + assert not return_corr or not return_decomposed_components, \ + 'Can only return either correlation matrix or decomposed components.' + + # transform input into 2D array + if not isinstance(X, (pd.Series, pd.DataFrame)): + columns = None + else: + if isinstance(X.index, pd.MultiIndex): + if isinstance(X, pd.DataFrame): + X = X.iloc[:, 0].unstack(level="instrument") # always use the first column + else: + X = X.unstack(level="instrument") + else: + # X is 2D DataFrame + pass + columns = X.columns # will be used to restore dataframe + X = X.values + + # calculate pct_change + if is_price: + X = X[1:] / X[:-1] - 1 # NOTE: resulting `n - 1` rows + + # scale return + if self.scale_return: + X *= 100 + + # handle nan and centered + X = self._preprocess(X) + + if return_decomposed_components: + F, cov_b, var_u = self._predict(X, return_structured=True) + return F, cov_b, var_u + else: + # estimate covariance + S = self._predict(X) + + # return correlation if needed + if return_corr: + vola = np.sqrt(np.diag(S)) + corr = S / np.outer(vola, vola) + if columns is None: + return corr + return pd.DataFrame(corr, index=columns, columns=columns) + + # return covariance + if columns is None: + return S + return pd.DataFrame(S, index=columns, columns=columns) + + def _predict(self, X: np.ndarray, return_structured=False) -> Union[np.ndarray, tuple]: + """ + covariance estimation implementation + + Args: + X (np.ndarray): data matrix containing multiple variables (columns) and observations (rows). + return_structured (bool): whether return decomposed components of the covariance matrix. + + Returns: + tuple or np.ndarray: decomposed covariance matrix or covariance matrix. + """ + + model = self.solver(self.num_factors, random_state=0).fit(X) + + F = model.components_.T # num_features x num_factors + B = model.transform(X) # num_samples x num_factors + U = X - B @ F.T + cov_b = np.cov(B.T) # num_factors x num_factors + var_u = np.var(U, axis=0) # diagonal + + if return_structured: + return F, cov_b, var_u + + cov_x = F @ cov_b @ F.T + np.diag(var_u) + + return cov_x From 7b01c5cae7830d2b75c5566443f5a4559b5b2f40 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Tue, 9 Feb 2021 20:30:26 +0800 Subject: [PATCH 005/134] Add an implementation of Enhanced Indexing to optimizer.py --- qlib/.DS_Store | Bin 0 -> 6148 bytes qlib/portfolio/optimizer.py | 129 ++++++++++++++++++++++++++++++++---- 2 files changed, 117 insertions(+), 12 deletions(-) create mode 100644 qlib/.DS_Store diff --git a/qlib/.DS_Store b/qlib/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3b196d96a164ebf17b658d6f6d8c5ef19fb26c8c GIT binary patch literal 6148 zcmeHK%Wl&^6upx=txW}FQHgGlykS>WX{it_kU}Vn?vR3D0VuU=(^|NmD0Z;g5R^S% z0N;SbckloAHxWIzRhp0nDE)t`24cQXodQJ=0 zG9@>FLbZ`lK|@^IG+JQW0;_;k;9paK=kB_ivk7HXoxf)XsXPi(8G^yf!y}~apUU77 zd2~b)F>erctY&;O;%g&f%|sM5Mod_5U)*l69f~NxdJ;5v9~--ZHYJy`PvXJrW|?Rkd0?VRkk)wz)B!- zgQ;dimFZHcy5udogvWbXZ&~oHsPb`pshPpyu3yTu1gn5m;D1wq*9RYov1f3uQ7s+F z)DZyapja7v{#oD{-(b(+Tq9~=LWcr%s4zzip~F$`8(z=gT%!&rVGbX{JXx3%icn8S z`@W)+=xMaMRlq7xS71foc6k4Pa`E}U9%S#V0#<=5rGRku2m5_|lG$4qK92WVAL$T@ qjd^p8Dg>F?j+Mh(@g|Zo)cNcHdj{tkQ3A6+0!jv(Sq1*80>1zhm={X` literal 0 HcmV?d00001 diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer.py index 0e7d27254..e04923ed6 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer.py @@ -28,13 +28,13 @@ class PortfolioOptimizer: OPT_INV = "inv" def __init__( - self, - method: str = "inv", - lamb: float = 0, - delta: float = 0, - alpha: float = 0.0, - scale_alpha: bool = True, - tol: float = 1e-8, + self, + method: str = "inv", + lamb: float = 0, + delta: float = 0, + alpha: float = 0.0, + scale_alpha: bool = True, + tol: float = 1e-8, ): """ Args: @@ -59,10 +59,10 @@ class PortfolioOptimizer: self.tol = tol def __call__( - self, - S: Union[np.ndarray, pd.DataFrame], - u: Optional[Union[np.ndarray, pd.Series]] = None, - w0: Optional[Union[np.ndarray, pd.Series]] = None, + self, + S: Union[np.ndarray, pd.DataFrame], + u: Optional[Union[np.ndarray, pd.Series]] = None, + w0: Optional[Union[np.ndarray, pd.Series]] = None, ) -> Union[np.ndarray, pd.Series]: """ Args: @@ -151,7 +151,7 @@ class PortfolioOptimizer: return self._solve(len(S), self._get_objective_gmv(S), *self._get_constrains(w0)) def _optimize_mvo( - self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None + self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None ) -> np.ndarray: """optimize mean-variance portfolio @@ -256,3 +256,108 @@ class PortfolioOptimizer: warnings.warn(f"optimization not success ({sol.status})") return sol.x + + +class EnhancedIndexingOptimizer: + """ + Portfolio Optimizer with Enhanced Indexing + + Note: + This optimizer always assumes full investment and no-shorting. + """ + + START_FROM_W0 = 'w0' + START_FROM_BENCH = 'benchmark' + DO_NOT_START_FROM = '' + + def __init__(self, lamb: float = 10, delta: float = 0.4, bench_dev: float = 0.01, inds_dev: float = 0.01, + scale_alpha=True, verbose: bool = False, warm_start: str = '', max_iters: int = 10000): + """ + Args: + lamb (float): risk aversion parameter (larger `lamb` means less focus on return) + delta (float): turnover rate limit + bench_dev (float): benchmark deviation limit + inds_dev (float): industry deviation limit + verbose (bool): if print detailed information about the solver + warm_start (str): whether try to warm start (`w0`/`benchmark`/``) + (https://www.cvxpy.org/tutorial/advanced/index.html#warm-start) + """ + + assert lamb >= 0, "risk aversion parameter `lamb` should be positive" + self.lamb = lamb + + assert delta >= 0, "turnover limit `delta` should be positive" + self.delta = delta + + assert bench_dev >= 0, "benchmark deviation limit `bench_dev` should be positive" + self.bench_dev = bench_dev + + assert inds_dev >= 0, "industry deviation limit `inds_dev` should be positive" + self.inds_dev = inds_dev + + assert warm_start in [self.DO_NOT_START_FROM, self.START_FROM_W0, + self.START_FROM_BENCH], "illegal warm start option" + self.start_from_w0 = (warm_start == self.START_FROM_W0) + self.start_from_bench = (warm_start == self.START_FROM_BENCH) + + self.scale_alpha = scale_alpha + self.verbose = verbose + self.max_iters = max_iters + + def __call__(self, u: np.ndarray, F: np.ndarray, covB: np.ndarray, varU: np.ndarray, w0: np.ndarray, + w_bench: np.ndarray, inds_onehot: np.ndarray + ) -> Union[np.ndarray, pd.Series]: + """ + Args: + u (np.ndarray): expected returns (a.k.a., alpha) + F, covB, varU (np.ndarray): see StructuredCovEstimator + w0 (np.ndarray): initial weights (for turnover control) + w_bench (np.ndarray): benchmark weights + inds_onehot (np.ndarray): industry (onehot) + + Returns: + np.ndarray or pd.Series: optimized portfolio allocation + """ + # scale alpha to match volatility + if self.scale_alpha: + u = u / u.std() + x_variance = np.mean(np.diag(F @ covB @ F.T) + varU) + u *= x_variance ** 0.5 + + w = cp.Variable(len(u)) # num_assets + v = w @ F # num_factors + ret = w @ u + risk = cp.quad_form(v, covB) + cp.sum(cp.multiply(varU, w ** 2)) + obj = cp.Maximize(ret - self.lamb * risk) + d_bench = w - w_bench + d_inds = d_bench @ inds_onehot + cons = [ + w >= 0, + cp.sum(w) == 1, + d_bench >= -self.bench_dev, + d_bench <= self.bench_dev, + d_inds >= -self.inds_dev, + d_inds <= self.inds_dev + ] + if w0 is not None: + turnover = cp.sum(cp.abs(w - w0)) + cons.append(turnover <= self.delta) + + warm_start = False + if self.start_from_w0: + if w0 is None: + print('Warning: try warm start with w0, but w0 is `None`.') + else: + w.value = w0 + warm_start = True + elif self.start_from_bench: + w.value = w_bench + warm_start = True + + prob = cp.Problem(obj, cons) + prob.solve(solver=cp.SCS, verbose=self.verbose, warm_start=warm_start, max_iters=self.max_iters) + + if prob.status != 'optimal': + print('Warning: solve failed.', prob.status) + + return np.asarray(w.value) From 9c2653f125e31e754f00ef6df0c455f8e828d78a Mon Sep 17 00:00:00 2001 From: Charles Young Date: Tue, 9 Feb 2021 20:31:00 +0800 Subject: [PATCH 006/134] Add an implementation of Enhanced Indexing to optimizer.py --- qlib/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 qlib/.DS_Store diff --git a/qlib/.DS_Store b/qlib/.DS_Store deleted file mode 100644 index 3b196d96a164ebf17b658d6f6d8c5ef19fb26c8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK%Wl&^6upx=txW}FQHgGlykS>WX{it_kU}Vn?vR3D0VuU=(^|NmD0Z;g5R^S% z0N;SbckloAHxWIzRhp0nDE)t`24cQXodQJ=0 zG9@>FLbZ`lK|@^IG+JQW0;_;k;9paK=kB_ivk7HXoxf)XsXPi(8G^yf!y}~apUU77 zd2~b)F>erctY&;O;%g&f%|sM5Mod_5U)*l69f~NxdJ;5v9~--ZHYJy`PvXJrW|?Rkd0?VRkk)wz)B!- zgQ;dimFZHcy5udogvWbXZ&~oHsPb`pshPpyu3yTu1gn5m;D1wq*9RYov1f3uQ7s+F z)DZyapja7v{#oD{-(b(+Tq9~=LWcr%s4zzip~F$`8(z=gT%!&rVGbX{JXx3%icn8S z`@W)+=xMaMRlq7xS71foc6k4Pa`E}U9%S#V0#<=5rGRku2m5_|lG$4qK92WVAL$T@ qjd^p8Dg>F?j+Mh(@g|Zo)cNcHdj{tkQ3A6+0!jv(Sq1*80>1zhm={X` From 63d05e4a1a5cde0d47071171de736df55673039e Mon Sep 17 00:00:00 2001 From: Kenneth Tang Date: Tue, 16 Feb 2021 14:08:58 +0800 Subject: [PATCH 007/134] Fix typo --- scripts/data_collector/us_index/README.md | 4 ++-- scripts/data_collector/yahoo/README.md | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/data_collector/us_index/README.md b/scripts/data_collector/us_index/README.md index 99a0a09c3..f8244491c 100644 --- a/scripts/data_collector/us_index/README.md +++ b/scripts/data_collector/us_index/README.md @@ -10,10 +10,10 @@ pip install -r requirements.txt ```bash # parse instruments, using in qlib/instruments. -python collector.py --index_name SP500 --qlib_dir ~/.qlib/qlib_data/cn_data --method parse_instruments +python collector.py --index_name SP500 --qlib_dir ~/.qlib/qlib_data/us_data --method parse_instruments # parse new companies -python collector.py --index_name SP500 --qlib_dir ~/.qlib/qlib_data/cn_data --method save_new_companies +python collector.py --index_name SP500 --qlib_dir ~/.qlib/qlib_data/us_data --method save_new_companies # index_name support: SP500, NASDAQ100, DJIA, SP400 # help diff --git a/scripts/data_collector/yahoo/README.md b/scripts/data_collector/yahoo/README.md index d4c2d2c9c..520369ef5 100644 --- a/scripts/data_collector/yahoo/README.md +++ b/scripts/data_collector/yahoo/README.md @@ -39,7 +39,7 @@ python dump_bin.py dump_all --csv_path ~/.qlib/stock_data/source/cn_1d_nor --qli import qlib from qlib.data import D -qlib.init(provider_uri="~/.qlib/stock_data/source/qlib_cn_1d", region="CN") +qlib.init(provider_uri="~/.qlib/stock_data/source/qlib_cn_1d", region="cn") df = D.features(D.instruments("all"), ["$close"], freq="day") ``` @@ -81,13 +81,13 @@ python collector.py normalize_data --source_dir ~/.qlib/stock_data/source/us_1d # dump data cd qlib/scripts -python dump_bin.py dump_all --csv_path ~/.qlib/stock_data/source/cn_1d_nor --qlib_dir ~/.qlib/stock_data/source/qlib_us_1d --freq day --exclude_fields date,adjclose,dividends,splits,symbol +python dump_bin.py dump_all --csv_path ~/.qlib/stock_data/source/us_1d_nor --qlib_dir ~/.qlib/stock_data/source/qlib_us_1d --freq day --exclude_fields date,adjclose,dividends,splits,symbol # using import qlib from qlib.data import D -qlib.init(provider_uri="~/.qlib/stock_data/source/qlib_us_1d", region="US") +qlib.init(provider_uri="~/.qlib/stock_data/source/qlib_us_1d", region="us") df = D.features(D.instruments("all"), ["$close"], freq="day") ``` From d27dc8bab8955bc8900c1a0a0d9d564cd4c9400b Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Thu, 18 Feb 2021 19:02:33 +0900 Subject: [PATCH 008/134] Add A New Baseline: DoubleEnsemble --- examples/run_all_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/run_all_model.py b/examples/run_all_model.py index 1809bac2e..d587eff15 100644 --- a/examples/run_all_model.py +++ b/examples/run_all_model.py @@ -265,7 +265,7 @@ def run(times=1, models=None, dataset="Alpha360", exclude=False): ) # TODO: FIX ME! else: execute( - f"cd {env_path} && {python_path} -m pip install --upgrade --force-reinstall -e git+https://github.com/meng-ustc/qlib#egg=pyqlib" + f"cd {env_path} && {python_path} -m pip install --upgrade --force-reinstall -e git+https://github.com/microsoft/qlib#egg=pyqlib" ) # TODO: FIX ME! sys.stderr.write("\n") # run workflow_by_config for multiple times From 42590972e49457d659749a65e8c8ad02172c8fe5 Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Thu, 18 Feb 2021 19:15:02 +0900 Subject: [PATCH 009/134] Modify run_all_model.py --- examples/run_all_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/run_all_model.py b/examples/run_all_model.py index d587eff15..f9d4a62a0 100644 --- a/examples/run_all_model.py +++ b/examples/run_all_model.py @@ -265,7 +265,7 @@ def run(times=1, models=None, dataset="Alpha360", exclude=False): ) # TODO: FIX ME! else: execute( - f"cd {env_path} && {python_path} -m pip install --upgrade --force-reinstall -e git+https://github.com/microsoft/qlib#egg=pyqlib" + f"cd {env_path} && {python_path} -m pip install --upgrade --force-reinstall -e git+https://github.com/microsoft----/qlib#egg=pyqlib" ) # TODO: FIX ME! sys.stderr.write("\n") # run workflow_by_config for multiple times From cd5b721bc6e91de0d0c83978ec14475a52f94a2e Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Fri, 19 Feb 2021 11:56:50 +0900 Subject: [PATCH 010/134] Update --- examples/run_all_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/run_all_model.py b/examples/run_all_model.py index f9d4a62a0..d587eff15 100644 --- a/examples/run_all_model.py +++ b/examples/run_all_model.py @@ -265,7 +265,7 @@ def run(times=1, models=None, dataset="Alpha360", exclude=False): ) # TODO: FIX ME! else: execute( - f"cd {env_path} && {python_path} -m pip install --upgrade --force-reinstall -e git+https://github.com/microsoft----/qlib#egg=pyqlib" + f"cd {env_path} && {python_path} -m pip install --upgrade --force-reinstall -e git+https://github.com/microsoft/qlib#egg=pyqlib" ) # TODO: FIX ME! sys.stderr.write("\n") # run workflow_by_config for multiple times From 4000518698f0d5f929a2a493bdb9bd207a313d17 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 08:41:35 +0800 Subject: [PATCH 011/134] Separate specific implementation of Portfolio Optimizer to folder. --- .../portfolio_optimizer/enhanced_indexing.py | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 qlib/contrib/portfolio_optimizer/enhanced_indexing.py diff --git a/qlib/contrib/portfolio_optimizer/enhanced_indexing.py b/qlib/contrib/portfolio_optimizer/enhanced_indexing.py new file mode 100644 index 000000000..0c40a617e --- /dev/null +++ b/qlib/contrib/portfolio_optimizer/enhanced_indexing.py @@ -0,0 +1,112 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import numpy as np +import pandas as pd +import cvxpy as cp +from typing import Union + + +class EnhancedIndexingOptimizer: + """ + Portfolio Optimizer with Enhanced Indexing + + Note: + This optimizer always assumes full investment and no-shorting. + """ + + START_FROM_W0 = 'w0' + START_FROM_BENCH = 'benchmark' + DO_NOT_START_FROM = 'no_warm_start' + + def __init__(self, lamb: float = 10, delta: float = 0.4, bench_dev: float = 0.01, inds_dev: float = 0.01, + scale_alpha=True, verbose: bool = False, warm_start: str = DO_NOT_START_FROM, max_iters: int = 10000): + """ + Args: + lamb (float): risk aversion parameter (larger `lamb` means less focus on return) + delta (float): turnover rate limit + bench_dev (float): benchmark deviation limit + inds_dev (float): industry deviation limit + verbose (bool): if print detailed information about the solver + warm_start (str): whether try to warm start (`w0`/`benchmark`/``) + (https://www.cvxpy.org/tutorial/advanced/index.html#warm-start) + """ + + assert lamb >= 0, "risk aversion parameter `lamb` should be positive" + self.lamb = lamb + + assert delta >= 0, "turnover limit `delta` should be positive" + self.delta = delta + + assert bench_dev >= 0, "benchmark deviation limit `bench_dev` should be positive" + self.bench_dev = bench_dev + + assert inds_dev >= 0, "industry deviation limit `inds_dev` should be positive" + self.inds_dev = inds_dev + + assert warm_start in [self.DO_NOT_START_FROM, self.START_FROM_W0, + self.START_FROM_BENCH], "illegal warm start option" + self.start_from_w0 = (warm_start == self.START_FROM_W0) + self.start_from_bench = (warm_start == self.START_FROM_BENCH) + + self.scale_alpha = scale_alpha + self.verbose = verbose + self.max_iters = max_iters + + def __call__(self, u: np.ndarray, F: np.ndarray, covB: np.ndarray, varU: np.ndarray, w0: np.ndarray, + w_bench: np.ndarray, inds_onehot: np.ndarray + ) -> Union[np.ndarray, pd.Series]: + """ + Args: + u (np.ndarray): expected returns (a.k.a., alpha) + F, covB, varU (np.ndarray): see StructuredCovEstimator + w0 (np.ndarray): initial weights (for turnover control) + w_bench (np.ndarray): benchmark weights + inds_onehot (np.ndarray): industry (onehot) + + Returns: + np.ndarray or pd.Series: optimized portfolio allocation + """ + # scale alpha to match volatility + if self.scale_alpha: + u = u / u.std() + x_variance = np.mean(np.diag(F @ covB @ F.T) + varU) + u *= x_variance ** 0.5 + + w = cp.Variable(len(u)) # num_assets + v = w @ F # num_factors + ret = w @ u + risk = cp.quad_form(v, covB) + cp.sum(cp.multiply(varU, w ** 2)) + obj = cp.Maximize(ret - self.lamb * risk) + d_bench = w - w_bench + d_inds = d_bench @ inds_onehot + cons = [ + w >= 0, + cp.sum(w) == 1, + d_bench >= -self.bench_dev, + d_bench <= self.bench_dev, + d_inds >= -self.inds_dev, + d_inds <= self.inds_dev + ] + if w0 is not None: + turnover = cp.sum(cp.abs(w - w0)) + cons.append(turnover <= self.delta) + + warm_start = False + if self.start_from_w0: + if w0 is None: + print('Warning: try warm start with w0, but w0 is `None`.') + else: + w.value = w0 + warm_start = True + elif self.start_from_bench: + w.value = w_bench + warm_start = True + + prob = cp.Problem(obj, cons) + prob.solve(solver=cp.SCS, verbose=self.verbose, warm_start=warm_start, max_iters=self.max_iters) + + if prob.status != 'optimal': + print('Warning: solve failed.', prob.status) + + return np.asarray(w.value) From b2e2142594d38c0afa4e31d560a17cfad05e2705 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 09:00:12 +0800 Subject: [PATCH 012/134] Applied slight modification to follow PEP 8. --- qlib/portfolio/optimizer.py | 114 +++--------------------------------- 1 file changed, 7 insertions(+), 107 deletions(-) diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer.py index e04923ed6..104e2c441 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer.py @@ -42,6 +42,7 @@ class PortfolioOptimizer: lamb (float): risk aversion parameter (larger `lamb` means more focus on return) delta (float): turnover rate limit alpha (float): l2 norm regularizer + scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix tol (float): tolerance for optimization termination """ assert method in [self.OPT_GMV, self.OPT_MVO, self.OPT_RP, self.OPT_INV], f"method `{method}` is not supported" @@ -57,6 +58,7 @@ class PortfolioOptimizer: self.alpha = alpha self.tol = tol + self.scale_alpha = scale_alpha def __call__( self, @@ -94,7 +96,7 @@ class PortfolioOptimizer: w0 = w0.values # scale alpha to match volatility - if u is not None: + if u is not None and self.scale_alpha: u = u / u.std() u *= np.mean(np.diag(S)) ** 0.5 @@ -247,7 +249,10 @@ class PortfolioOptimizer: # add l2 regularization wrapped_obj = obj if self.alpha > 0: - wrapped_obj = lambda x: obj(x) + self.alpha * np.sum(np.square(x)) + def opt_obj(x): + return obj(x) + self.alpha * np.sum(np.square(x)) + + wrapped_obj = opt_obj # solve x0 = np.ones(n) / n # init results @@ -256,108 +261,3 @@ class PortfolioOptimizer: warnings.warn(f"optimization not success ({sol.status})") return sol.x - - -class EnhancedIndexingOptimizer: - """ - Portfolio Optimizer with Enhanced Indexing - - Note: - This optimizer always assumes full investment and no-shorting. - """ - - START_FROM_W0 = 'w0' - START_FROM_BENCH = 'benchmark' - DO_NOT_START_FROM = '' - - def __init__(self, lamb: float = 10, delta: float = 0.4, bench_dev: float = 0.01, inds_dev: float = 0.01, - scale_alpha=True, verbose: bool = False, warm_start: str = '', max_iters: int = 10000): - """ - Args: - lamb (float): risk aversion parameter (larger `lamb` means less focus on return) - delta (float): turnover rate limit - bench_dev (float): benchmark deviation limit - inds_dev (float): industry deviation limit - verbose (bool): if print detailed information about the solver - warm_start (str): whether try to warm start (`w0`/`benchmark`/``) - (https://www.cvxpy.org/tutorial/advanced/index.html#warm-start) - """ - - assert lamb >= 0, "risk aversion parameter `lamb` should be positive" - self.lamb = lamb - - assert delta >= 0, "turnover limit `delta` should be positive" - self.delta = delta - - assert bench_dev >= 0, "benchmark deviation limit `bench_dev` should be positive" - self.bench_dev = bench_dev - - assert inds_dev >= 0, "industry deviation limit `inds_dev` should be positive" - self.inds_dev = inds_dev - - assert warm_start in [self.DO_NOT_START_FROM, self.START_FROM_W0, - self.START_FROM_BENCH], "illegal warm start option" - self.start_from_w0 = (warm_start == self.START_FROM_W0) - self.start_from_bench = (warm_start == self.START_FROM_BENCH) - - self.scale_alpha = scale_alpha - self.verbose = verbose - self.max_iters = max_iters - - def __call__(self, u: np.ndarray, F: np.ndarray, covB: np.ndarray, varU: np.ndarray, w0: np.ndarray, - w_bench: np.ndarray, inds_onehot: np.ndarray - ) -> Union[np.ndarray, pd.Series]: - """ - Args: - u (np.ndarray): expected returns (a.k.a., alpha) - F, covB, varU (np.ndarray): see StructuredCovEstimator - w0 (np.ndarray): initial weights (for turnover control) - w_bench (np.ndarray): benchmark weights - inds_onehot (np.ndarray): industry (onehot) - - Returns: - np.ndarray or pd.Series: optimized portfolio allocation - """ - # scale alpha to match volatility - if self.scale_alpha: - u = u / u.std() - x_variance = np.mean(np.diag(F @ covB @ F.T) + varU) - u *= x_variance ** 0.5 - - w = cp.Variable(len(u)) # num_assets - v = w @ F # num_factors - ret = w @ u - risk = cp.quad_form(v, covB) + cp.sum(cp.multiply(varU, w ** 2)) - obj = cp.Maximize(ret - self.lamb * risk) - d_bench = w - w_bench - d_inds = d_bench @ inds_onehot - cons = [ - w >= 0, - cp.sum(w) == 1, - d_bench >= -self.bench_dev, - d_bench <= self.bench_dev, - d_inds >= -self.inds_dev, - d_inds <= self.inds_dev - ] - if w0 is not None: - turnover = cp.sum(cp.abs(w - w0)) - cons.append(turnover <= self.delta) - - warm_start = False - if self.start_from_w0: - if w0 is None: - print('Warning: try warm start with w0, but w0 is `None`.') - else: - w.value = w0 - warm_start = True - elif self.start_from_bench: - w.value = w_bench - warm_start = True - - prob = cp.Problem(obj, cons) - prob.solve(solver=cp.SCS, verbose=self.verbose, warm_start=warm_start, max_iters=self.max_iters) - - if prob.status != 'optimal': - print('Warning: solve failed.', prob.status) - - return np.asarray(w.value) From 2cc057e438cb412ff60a39d6e83df6724f29b4fe Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 09:09:03 +0800 Subject: [PATCH 013/134] Fix minor mismatches of type hints. --- qlib/portfolio/optimizer.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer.py index 104e2c441..87a8b7416 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer.py @@ -85,14 +85,14 @@ class PortfolioOptimizer: if u is not None: assert len(u) == len(S), "`u` has mismatched shape" if isinstance(u, pd.Series): - assert all(u.index == index), "`u` has mismatched index" + assert u.index.equals(index), "`u` has mismatched index" u = u.values # transform initial weights if w0 is not None: assert len(w0) == len(S), "`w0` has mismatched shape" if isinstance(w0, pd.Series): - assert all(w0.index == index), "`w0` has mismatched index" + assert w0.index.equals(index), "`w0` has mismatched index" w0 = w0.values # scale alpha to match volatility @@ -175,7 +175,7 @@ class PortfolioOptimizer: """ return self._solve(len(S), self._get_objective_rp(S), *self._get_constrains(w0)) - def _get_objective_gmv(self, S: np.ndarray) -> np.ndarray: + def _get_objective_gmv(self, S: np.ndarray) -> Callable: """global minimum variance optimization objective Optimization objective @@ -187,7 +187,7 @@ class PortfolioOptimizer: return func - def _get_objective_mvo(self, S: np.ndarray, u: np.ndarray = None) -> np.ndarray: + def _get_objective_mvo(self, S: np.ndarray, u: np.ndarray = None) -> Callable: """mean-variance optimization objective Optimization objective @@ -201,7 +201,7 @@ class PortfolioOptimizer: return func - def _get_objective_rp(self, S: np.ndarray) -> np.ndarray: + def _get_objective_rp(self, S: np.ndarray) -> Callable: """risk-parity optimization objective Optimization objective From 9448a6e2c79a344516e17abba7060d6e62231582 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 09:23:48 +0800 Subject: [PATCH 014/134] Add a abstract class as the base class for all optimization related portfolio constructions. --- .../portfolio_optimizer/enhanced_indexing.py | 4 +- .../portfolio_optimizer/mean_variance.py | 264 ++++++++++++++++++ qlib/portfolio/optimizer.py | 264 +----------------- 3 files changed, 274 insertions(+), 258 deletions(-) create mode 100644 qlib/contrib/portfolio_optimizer/mean_variance.py diff --git a/qlib/contrib/portfolio_optimizer/enhanced_indexing.py b/qlib/contrib/portfolio_optimizer/enhanced_indexing.py index 0c40a617e..323e3154b 100644 --- a/qlib/contrib/portfolio_optimizer/enhanced_indexing.py +++ b/qlib/contrib/portfolio_optimizer/enhanced_indexing.py @@ -6,8 +6,10 @@ import pandas as pd import cvxpy as cp from typing import Union +from ...portfolio.optimizer import BaseOptimizer -class EnhancedIndexingOptimizer: + +class EnhancedIndexingOptimizer(BaseOptimizer): """ Portfolio Optimizer with Enhanced Indexing diff --git a/qlib/contrib/portfolio_optimizer/mean_variance.py b/qlib/contrib/portfolio_optimizer/mean_variance.py new file mode 100644 index 000000000..c3c4f7a3d --- /dev/null +++ b/qlib/contrib/portfolio_optimizer/mean_variance.py @@ -0,0 +1,264 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import warnings +import numpy as np +import pandas as pd +import scipy.optimize as so +from typing import Optional, Union, Callable, List + +from ...portfolio.optimizer import BaseOptimizer + + +class PortfolioOptimizer(BaseOptimizer): + """Portfolio Optimizer + + The following optimization algorithms are supported: + - `gmv`: Global Minimum Variance Portfolio + - `mvo`: Mean Variance Optimized Portfolio + - `rp`: Risk Parity + - `inv`: Inverse Volatility + + Note: + This optimizer always assumes full investment and no-shorting. + """ + + OPT_GMV = "gmv" + OPT_MVO = "mvo" + OPT_RP = "rp" + OPT_INV = "inv" + + def __init__( + self, + method: str = "inv", + lamb: float = 0, + delta: float = 0, + alpha: float = 0.0, + scale_alpha: bool = True, + tol: float = 1e-8, + ): + """ + Args: + method (str): portfolio optimization method + lamb (float): risk aversion parameter (larger `lamb` means more focus on return) + delta (float): turnover rate limit + alpha (float): l2 norm regularizer + scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix + tol (float): tolerance for optimization termination + """ + assert method in [self.OPT_GMV, self.OPT_MVO, self.OPT_RP, self.OPT_INV], f"method `{method}` is not supported" + self.method = method + + assert lamb >= 0, f"risk aversion parameter `lamb` should be positive" + self.lamb = lamb + + assert delta >= 0, f"turnover limit `delta` should be positive" + self.delta = delta + + assert alpha >= 0, f"l2 norm regularizer `alpha` should be positive" + self.alpha = alpha + + self.tol = tol + self.scale_alpha = scale_alpha + + def __call__( + self, + S: Union[np.ndarray, pd.DataFrame], + u: Optional[Union[np.ndarray, pd.Series]] = None, + w0: Optional[Union[np.ndarray, pd.Series]] = None, + ) -> Union[np.ndarray, pd.Series]: + """ + Args: + S (np.ndarray or pd.DataFrame): covariance matrix + u (np.ndarray or pd.Series): expected returns (a.k.a., alpha) + w0 (np.ndarray or pd.Series): initial weights (for turnover control) + + Returns: + np.ndarray or pd.Series: optimized portfolio allocation + """ + # transform dataframe into array + index = None + if isinstance(S, pd.DataFrame): + index = S.index + S = S.values + + # transform alpha + if u is not None: + assert len(u) == len(S), "`u` has mismatched shape" + if isinstance(u, pd.Series): + assert u.index.equals(index), "`u` has mismatched index" + u = u.values + + # transform initial weights + if w0 is not None: + assert len(w0) == len(S), "`w0` has mismatched shape" + if isinstance(w0, pd.Series): + assert w0.index.equals(index), "`w0` has mismatched index" + w0 = w0.values + + # scale alpha to match volatility + if u is not None and self.scale_alpha: + u = u / u.std() + u *= np.mean(np.diag(S)) ** 0.5 + + # optimize + w = self._optimize(S, u, w0) + + # restore index if needed + if index is not None: + w = pd.Series(w, index=index) + + return w + + def _optimize(self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None) -> np.ndarray: + + # inverse volatility + if self.method == self.OPT_INV: + if u is not None: + warnings.warn("`u` is set but will not be used for `inv` portfolio") + if w0 is not None: + warnings.warn("`w0` is set but will not be used for `inv` portfolio") + return self._optimize_inv(S) + + # global minimum variance + if self.method == self.OPT_GMV: + if u is not None: + warnings.warn("`u` is set but will not be used for `gmv` portfolio") + return self._optimize_gmv(S, w0) + + # mean-variance + if self.method == self.OPT_MVO: + return self._optimize_mvo(S, u, w0) + + # risk parity + if self.method == self.OPT_RP: + if u is not None: + warnings.warn("`u` is set but will not be used for `rp` portfolio") + return self._optimize_rp(S, w0) + + def _optimize_inv(self, S: np.ndarray) -> np.ndarray: + """Inverse volatility""" + vola = np.diag(S) ** 0.5 + w = 1 / vola + w /= w.sum() + return w + + def _optimize_gmv(self, S: np.ndarray, w0: Optional[np.ndarray] = None) -> np.ndarray: + """optimize global minimum variance portfolio + + This method solves the following optimization problem + min_w w' S w + s.t. w >= 0, sum(w) == 1 + where `S` is the covariance matrix. + """ + return self._solve(len(S), self._get_objective_gmv(S), *self._get_constrains(w0)) + + def _optimize_mvo( + self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None + ) -> np.ndarray: + """optimize mean-variance portfolio + + This method solves the following optimization problem + min_w - w' u + lamb * w' S w + s.t. w >= 0, sum(w) == 1 + where `S` is the covariance matrix, `u` is the expected returns, + and `lamb` is the risk aversion parameter. + """ + return self._solve(len(S), self._get_objective_mvo(S, u), *self._get_constrains(w0)) + + def _optimize_rp(self, S: np.ndarray, w0: Optional[np.ndarray] = None) -> np.ndarray: + """optimize risk parity portfolio + + This method solves the following optimization problem + min_w sum_i [w_i - (w' S w) / ((S w)_i * N)]**2 + s.t. w >= 0, sum(w) == 1 + where `S` is the covariance matrix and `N` is the number of stocks. + """ + return self._solve(len(S), self._get_objective_rp(S), *self._get_constrains(w0)) + + def _get_objective_gmv(self, S: np.ndarray) -> Callable: + """global minimum variance optimization objective + + Optimization objective + min_w w' S w + """ + + def func(x): + return x @ S @ x + + return func + + def _get_objective_mvo(self, S: np.ndarray, u: np.ndarray = None) -> Callable: + """mean-variance optimization objective + + Optimization objective + min_w - w' u + lamb * w' S w + """ + + def func(x): + risk = x @ S @ x + ret = x @ u + return -ret + self.lamb * risk + + return func + + def _get_objective_rp(self, S: np.ndarray) -> Callable: + """risk-parity optimization objective + + Optimization objective + min_w sum_i [w_i - (w' S w) / ((S w)_i * N)]**2 + """ + + def func(x): + N = len(x) + Sx = S @ x + xSx = x @ Sx + return np.sum((x - xSx / Sx / N) ** 2) + + return func + + def _get_constrains(self, w0: Optional[np.ndarray] = None): + """optimization constraints + + Defines the following constraints: + - no shorting and leverage: 0 <= w <= 1 + - full investment: sum(w) == 1 + - turnover constraint: |w - w0| <= delta + """ + + # no shorting and leverage + bounds = so.Bounds(0.0, 1.0) + + # full investment constraint + cons = [{"type": "eq", "fun": lambda x: np.sum(x) - 1}] # == 0 + + # turnover constraint + if w0 is not None: + cons.append({"type": "ineq", "fun": lambda x: self.delta - np.sum(np.abs(x - w0))}) # >= 0 + + return bounds, cons + + def _solve(self, n: int, obj: Callable, bounds: so.Bounds, cons: List) -> np.ndarray: + """solve optimization + + Args: + n (int): number of parameters + obj (callable): optimization objective + bounds (Bounds): bounds of parameters + cons (list): optimization constraints + """ + # add l2 regularization + wrapped_obj = obj + if self.alpha > 0: + def opt_obj(x): + return obj(x) + self.alpha * np.sum(np.square(x)) + + wrapped_obj = opt_obj + + # solve + x0 = np.ones(n) / n # init results + sol = so.minimize(wrapped_obj, x0, bounds=bounds, constraints=cons, tol=self.tol) + if not sol.success: + warnings.warn(f"optimization not success ({sol.status})") + + return sol.x diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer.py index 87a8b7416..c63d93656 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer.py @@ -1,263 +1,13 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -import warnings -import numpy as np -import pandas as pd -import scipy.optimize as so - -from typing import Optional, Union, Callable, List +import abc -class PortfolioOptimizer: - """Portfolio Optimizer +class BaseOptimizer(abc.ABC): + """Modeling things""" - The following optimization algorithms are supported: - - `gmv`: Global Minimum Variance Portfolio - - `mvo`: Mean Variance Optimized Portfolio - - `rp`: Risk Parity - - `inv`: Inverse Volatility - - Note: - This optimizer always assumes full investment and no-shorting. - """ - - OPT_GMV = "gmv" - OPT_MVO = "mvo" - OPT_RP = "rp" - OPT_INV = "inv" - - def __init__( - self, - method: str = "inv", - lamb: float = 0, - delta: float = 0, - alpha: float = 0.0, - scale_alpha: bool = True, - tol: float = 1e-8, - ): - """ - Args: - method (str): portfolio optimization method - lamb (float): risk aversion parameter (larger `lamb` means more focus on return) - delta (float): turnover rate limit - alpha (float): l2 norm regularizer - scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix - tol (float): tolerance for optimization termination - """ - assert method in [self.OPT_GMV, self.OPT_MVO, self.OPT_RP, self.OPT_INV], f"method `{method}` is not supported" - self.method = method - - assert lamb >= 0, f"risk aversion parameter `lamb` should be positive" - self.lamb = lamb - - assert delta >= 0, f"turnover limit `delta` should be positive" - self.delta = delta - - assert alpha >= 0, f"l2 norm regularizer `alpha` should be positive" - self.alpha = alpha - - self.tol = tol - self.scale_alpha = scale_alpha - - def __call__( - self, - S: Union[np.ndarray, pd.DataFrame], - u: Optional[Union[np.ndarray, pd.Series]] = None, - w0: Optional[Union[np.ndarray, pd.Series]] = None, - ) -> Union[np.ndarray, pd.Series]: - """ - Args: - S (np.ndarray or pd.DataFrame): covariance matrix - u (np.ndarray or pd.Series): expected returns (a.k.a., alpha) - w0 (np.ndarray or pd.Series): initial weights (for turnover control) - - Returns: - np.ndarray or pd.Series: optimized portfolio allocation - """ - # transform dataframe into array - index = None - if isinstance(S, pd.DataFrame): - index = S.index - S = S.values - - # transform alpha - if u is not None: - assert len(u) == len(S), "`u` has mismatched shape" - if isinstance(u, pd.Series): - assert u.index.equals(index), "`u` has mismatched index" - u = u.values - - # transform initial weights - if w0 is not None: - assert len(w0) == len(S), "`w0` has mismatched shape" - if isinstance(w0, pd.Series): - assert w0.index.equals(index), "`w0` has mismatched index" - w0 = w0.values - - # scale alpha to match volatility - if u is not None and self.scale_alpha: - u = u / u.std() - u *= np.mean(np.diag(S)) ** 0.5 - - # optimize - w = self._optimize(S, u, w0) - - # restore index if needed - if index is not None: - w = pd.Series(w, index=index) - - return w - - def _optimize(self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None) -> np.ndarray: - - # inverse volatility - if self.method == self.OPT_INV: - if u is not None: - warnings.warn("`u` is set but will not be used for `inv` portfolio") - if w0 is not None: - warnings.warn("`w0` is set but will not be used for `inv` portfolio") - return self._optimize_inv(S) - - # global minimum variance - if self.method == self.OPT_GMV: - if u is not None: - warnings.warn("`u` is set but will not be used for `gmv` portfolio") - return self._optimize_gmv(S, w0) - - # mean-variance - if self.method == self.OPT_MVO: - return self._optimize_mvo(S, u, w0) - - # risk parity - if self.method == self.OPT_RP: - if u is not None: - warnings.warn("`u` is set but will not be used for `rp` portfolio") - return self._optimize_rp(S, w0) - - def _optimize_inv(self, S: np.ndarray) -> np.ndarray: - """Inverse volatility""" - vola = np.diag(S) ** 0.5 - w = 1 / vola - w /= w.sum() - return w - - def _optimize_gmv(self, S: np.ndarray, w0: Optional[np.ndarray] = None) -> np.ndarray: - """optimize global minimum variance portfolio - - This method solves the following optimization problem - min_w w' S w - s.t. w >= 0, sum(w) == 1 - where `S` is the covariance matrix. - """ - return self._solve(len(S), self._get_objective_gmv(S), *self._get_constrains(w0)) - - def _optimize_mvo( - self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None - ) -> np.ndarray: - """optimize mean-variance portfolio - - This method solves the following optimization problem - min_w - w' u + lamb * w' S w - s.t. w >= 0, sum(w) == 1 - where `S` is the covariance matrix, `u` is the expected returns, - and `lamb` is the risk aversion parameter. - """ - return self._solve(len(S), self._get_objective_mvo(S, u), *self._get_constrains(w0)) - - def _optimize_rp(self, S: np.ndarray, w0: Optional[np.ndarray] = None) -> np.ndarray: - """optimize risk parity portfolio - - This method solves the following optimization problem - min_w sum_i [w_i - (w' S w) / ((S w)_i * N)]**2 - s.t. w >= 0, sum(w) == 1 - where `S` is the covariance matrix and `N` is the number of stocks. - """ - return self._solve(len(S), self._get_objective_rp(S), *self._get_constrains(w0)) - - def _get_objective_gmv(self, S: np.ndarray) -> Callable: - """global minimum variance optimization objective - - Optimization objective - min_w w' S w - """ - - def func(x): - return x @ S @ x - - return func - - def _get_objective_mvo(self, S: np.ndarray, u: np.ndarray = None) -> Callable: - """mean-variance optimization objective - - Optimization objective - min_w - w' u + lamb * w' S w - """ - - def func(x): - risk = x @ S @ x - ret = x @ u - return -ret + self.lamb * risk - - return func - - def _get_objective_rp(self, S: np.ndarray) -> Callable: - """risk-parity optimization objective - - Optimization objective - min_w sum_i [w_i - (w' S w) / ((S w)_i * N)]**2 - """ - - def func(x): - N = len(x) - Sx = S @ x - xSx = x @ Sx - return np.sum((x - xSx / Sx / N) ** 2) - - return func - - def _get_constrains(self, w0: Optional[np.ndarray] = None): - """optimization constraints - - Defines the following constraints: - - no shorting and leverage: 0 <= w <= 1 - - full investment: sum(w) == 1 - - turnover constraint: |w - w0| <= delta - """ - - # no shorting and leverage - bounds = so.Bounds(0.0, 1.0) - - # full investment constraint - cons = [{"type": "eq", "fun": lambda x: np.sum(x) - 1}] # == 0 - - # turnover constraint - if w0 is not None: - cons.append({"type": "ineq", "fun": lambda x: self.delta - np.sum(np.abs(x - w0))}) # >= 0 - - return bounds, cons - - def _solve(self, n: int, obj: Callable, bounds: so.Bounds, cons: List) -> np.ndarray: - """solve optimization - - Args: - n (int): number of parameters - obj (callable): optimization objective - bounds (Bounds): bounds of parameters - cons (list): optimization constraints - """ - # add l2 regularization - wrapped_obj = obj - if self.alpha > 0: - def opt_obj(x): - return obj(x) + self.alpha * np.sum(np.square(x)) - - wrapped_obj = opt_obj - - # solve - x0 = np.ones(n) / n # init results - sol = so.minimize(wrapped_obj, x0, bounds=bounds, constraints=cons, tol=self.tol) - if not sol.success: - warnings.warn(f"optimization not success ({sol.status})") - - return sol.x + @abc.abstractmethod + def __call__(self, *args, **kwargs) -> object: + """ Generate a optimized portfolio allocation """ + pass From 42f882504e09d36f20c29f3eaafa11f0249144ed Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 09:25:48 +0800 Subject: [PATCH 015/134] Reformat code to follow PEP 8. --- qlib/model/base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qlib/model/base.py b/qlib/model/base.py index 5a295787f..a7001f0a6 100644 --- a/qlib/model/base.py +++ b/qlib/model/base.py @@ -43,8 +43,8 @@ class Model(BaseModel): # get weights try: - wdf_train, wdf_valid = dataset.prepare(["train", "valid"], col_set=["weight"], data_key=DataHandlerLP.DK_L) - w_train, w_valid = wdf_train["weight"], wdf_valid["weight"] + wdf_train, wdf_valid = dataset.prepare(["train", "valid"], col_set=["weight"], + data_key=DataHandlerLP.DK_L, w_train, w_valid = wdf_train["weight"], wdf_valid["weight"] except KeyError as e: w_train = pd.DataFrame(np.ones_like(y_train.values), index=y_train.index) w_valid = pd.DataFrame(np.ones_like(y_valid.values), index=y_valid.index) From f7d3e56561d4059bc85dc7922017706bfa322750 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 09:57:41 +0800 Subject: [PATCH 016/134] Merge optimization related portfolio construction back to portfolio/optimizer. --- .../portfolio_optimizer/enhanced_indexing.py | 114 ------ .../portfolio_optimizer/mean_variance.py | 264 ------------- qlib/portfolio/optimizer.py | 367 +++++++++++++++++- 3 files changed, 366 insertions(+), 379 deletions(-) delete mode 100644 qlib/contrib/portfolio_optimizer/enhanced_indexing.py delete mode 100644 qlib/contrib/portfolio_optimizer/mean_variance.py diff --git a/qlib/contrib/portfolio_optimizer/enhanced_indexing.py b/qlib/contrib/portfolio_optimizer/enhanced_indexing.py deleted file mode 100644 index 323e3154b..000000000 --- a/qlib/contrib/portfolio_optimizer/enhanced_indexing.py +++ /dev/null @@ -1,114 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import numpy as np -import pandas as pd -import cvxpy as cp -from typing import Union - -from ...portfolio.optimizer import BaseOptimizer - - -class EnhancedIndexingOptimizer(BaseOptimizer): - """ - Portfolio Optimizer with Enhanced Indexing - - Note: - This optimizer always assumes full investment and no-shorting. - """ - - START_FROM_W0 = 'w0' - START_FROM_BENCH = 'benchmark' - DO_NOT_START_FROM = 'no_warm_start' - - def __init__(self, lamb: float = 10, delta: float = 0.4, bench_dev: float = 0.01, inds_dev: float = 0.01, - scale_alpha=True, verbose: bool = False, warm_start: str = DO_NOT_START_FROM, max_iters: int = 10000): - """ - Args: - lamb (float): risk aversion parameter (larger `lamb` means less focus on return) - delta (float): turnover rate limit - bench_dev (float): benchmark deviation limit - inds_dev (float): industry deviation limit - verbose (bool): if print detailed information about the solver - warm_start (str): whether try to warm start (`w0`/`benchmark`/``) - (https://www.cvxpy.org/tutorial/advanced/index.html#warm-start) - """ - - assert lamb >= 0, "risk aversion parameter `lamb` should be positive" - self.lamb = lamb - - assert delta >= 0, "turnover limit `delta` should be positive" - self.delta = delta - - assert bench_dev >= 0, "benchmark deviation limit `bench_dev` should be positive" - self.bench_dev = bench_dev - - assert inds_dev >= 0, "industry deviation limit `inds_dev` should be positive" - self.inds_dev = inds_dev - - assert warm_start in [self.DO_NOT_START_FROM, self.START_FROM_W0, - self.START_FROM_BENCH], "illegal warm start option" - self.start_from_w0 = (warm_start == self.START_FROM_W0) - self.start_from_bench = (warm_start == self.START_FROM_BENCH) - - self.scale_alpha = scale_alpha - self.verbose = verbose - self.max_iters = max_iters - - def __call__(self, u: np.ndarray, F: np.ndarray, covB: np.ndarray, varU: np.ndarray, w0: np.ndarray, - w_bench: np.ndarray, inds_onehot: np.ndarray - ) -> Union[np.ndarray, pd.Series]: - """ - Args: - u (np.ndarray): expected returns (a.k.a., alpha) - F, covB, varU (np.ndarray): see StructuredCovEstimator - w0 (np.ndarray): initial weights (for turnover control) - w_bench (np.ndarray): benchmark weights - inds_onehot (np.ndarray): industry (onehot) - - Returns: - np.ndarray or pd.Series: optimized portfolio allocation - """ - # scale alpha to match volatility - if self.scale_alpha: - u = u / u.std() - x_variance = np.mean(np.diag(F @ covB @ F.T) + varU) - u *= x_variance ** 0.5 - - w = cp.Variable(len(u)) # num_assets - v = w @ F # num_factors - ret = w @ u - risk = cp.quad_form(v, covB) + cp.sum(cp.multiply(varU, w ** 2)) - obj = cp.Maximize(ret - self.lamb * risk) - d_bench = w - w_bench - d_inds = d_bench @ inds_onehot - cons = [ - w >= 0, - cp.sum(w) == 1, - d_bench >= -self.bench_dev, - d_bench <= self.bench_dev, - d_inds >= -self.inds_dev, - d_inds <= self.inds_dev - ] - if w0 is not None: - turnover = cp.sum(cp.abs(w - w0)) - cons.append(turnover <= self.delta) - - warm_start = False - if self.start_from_w0: - if w0 is None: - print('Warning: try warm start with w0, but w0 is `None`.') - else: - w.value = w0 - warm_start = True - elif self.start_from_bench: - w.value = w_bench - warm_start = True - - prob = cp.Problem(obj, cons) - prob.solve(solver=cp.SCS, verbose=self.verbose, warm_start=warm_start, max_iters=self.max_iters) - - if prob.status != 'optimal': - print('Warning: solve failed.', prob.status) - - return np.asarray(w.value) diff --git a/qlib/contrib/portfolio_optimizer/mean_variance.py b/qlib/contrib/portfolio_optimizer/mean_variance.py deleted file mode 100644 index c3c4f7a3d..000000000 --- a/qlib/contrib/portfolio_optimizer/mean_variance.py +++ /dev/null @@ -1,264 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import warnings -import numpy as np -import pandas as pd -import scipy.optimize as so -from typing import Optional, Union, Callable, List - -from ...portfolio.optimizer import BaseOptimizer - - -class PortfolioOptimizer(BaseOptimizer): - """Portfolio Optimizer - - The following optimization algorithms are supported: - - `gmv`: Global Minimum Variance Portfolio - - `mvo`: Mean Variance Optimized Portfolio - - `rp`: Risk Parity - - `inv`: Inverse Volatility - - Note: - This optimizer always assumes full investment and no-shorting. - """ - - OPT_GMV = "gmv" - OPT_MVO = "mvo" - OPT_RP = "rp" - OPT_INV = "inv" - - def __init__( - self, - method: str = "inv", - lamb: float = 0, - delta: float = 0, - alpha: float = 0.0, - scale_alpha: bool = True, - tol: float = 1e-8, - ): - """ - Args: - method (str): portfolio optimization method - lamb (float): risk aversion parameter (larger `lamb` means more focus on return) - delta (float): turnover rate limit - alpha (float): l2 norm regularizer - scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix - tol (float): tolerance for optimization termination - """ - assert method in [self.OPT_GMV, self.OPT_MVO, self.OPT_RP, self.OPT_INV], f"method `{method}` is not supported" - self.method = method - - assert lamb >= 0, f"risk aversion parameter `lamb` should be positive" - self.lamb = lamb - - assert delta >= 0, f"turnover limit `delta` should be positive" - self.delta = delta - - assert alpha >= 0, f"l2 norm regularizer `alpha` should be positive" - self.alpha = alpha - - self.tol = tol - self.scale_alpha = scale_alpha - - def __call__( - self, - S: Union[np.ndarray, pd.DataFrame], - u: Optional[Union[np.ndarray, pd.Series]] = None, - w0: Optional[Union[np.ndarray, pd.Series]] = None, - ) -> Union[np.ndarray, pd.Series]: - """ - Args: - S (np.ndarray or pd.DataFrame): covariance matrix - u (np.ndarray or pd.Series): expected returns (a.k.a., alpha) - w0 (np.ndarray or pd.Series): initial weights (for turnover control) - - Returns: - np.ndarray or pd.Series: optimized portfolio allocation - """ - # transform dataframe into array - index = None - if isinstance(S, pd.DataFrame): - index = S.index - S = S.values - - # transform alpha - if u is not None: - assert len(u) == len(S), "`u` has mismatched shape" - if isinstance(u, pd.Series): - assert u.index.equals(index), "`u` has mismatched index" - u = u.values - - # transform initial weights - if w0 is not None: - assert len(w0) == len(S), "`w0` has mismatched shape" - if isinstance(w0, pd.Series): - assert w0.index.equals(index), "`w0` has mismatched index" - w0 = w0.values - - # scale alpha to match volatility - if u is not None and self.scale_alpha: - u = u / u.std() - u *= np.mean(np.diag(S)) ** 0.5 - - # optimize - w = self._optimize(S, u, w0) - - # restore index if needed - if index is not None: - w = pd.Series(w, index=index) - - return w - - def _optimize(self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None) -> np.ndarray: - - # inverse volatility - if self.method == self.OPT_INV: - if u is not None: - warnings.warn("`u` is set but will not be used for `inv` portfolio") - if w0 is not None: - warnings.warn("`w0` is set but will not be used for `inv` portfolio") - return self._optimize_inv(S) - - # global minimum variance - if self.method == self.OPT_GMV: - if u is not None: - warnings.warn("`u` is set but will not be used for `gmv` portfolio") - return self._optimize_gmv(S, w0) - - # mean-variance - if self.method == self.OPT_MVO: - return self._optimize_mvo(S, u, w0) - - # risk parity - if self.method == self.OPT_RP: - if u is not None: - warnings.warn("`u` is set but will not be used for `rp` portfolio") - return self._optimize_rp(S, w0) - - def _optimize_inv(self, S: np.ndarray) -> np.ndarray: - """Inverse volatility""" - vola = np.diag(S) ** 0.5 - w = 1 / vola - w /= w.sum() - return w - - def _optimize_gmv(self, S: np.ndarray, w0: Optional[np.ndarray] = None) -> np.ndarray: - """optimize global minimum variance portfolio - - This method solves the following optimization problem - min_w w' S w - s.t. w >= 0, sum(w) == 1 - where `S` is the covariance matrix. - """ - return self._solve(len(S), self._get_objective_gmv(S), *self._get_constrains(w0)) - - def _optimize_mvo( - self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None - ) -> np.ndarray: - """optimize mean-variance portfolio - - This method solves the following optimization problem - min_w - w' u + lamb * w' S w - s.t. w >= 0, sum(w) == 1 - where `S` is the covariance matrix, `u` is the expected returns, - and `lamb` is the risk aversion parameter. - """ - return self._solve(len(S), self._get_objective_mvo(S, u), *self._get_constrains(w0)) - - def _optimize_rp(self, S: np.ndarray, w0: Optional[np.ndarray] = None) -> np.ndarray: - """optimize risk parity portfolio - - This method solves the following optimization problem - min_w sum_i [w_i - (w' S w) / ((S w)_i * N)]**2 - s.t. w >= 0, sum(w) == 1 - where `S` is the covariance matrix and `N` is the number of stocks. - """ - return self._solve(len(S), self._get_objective_rp(S), *self._get_constrains(w0)) - - def _get_objective_gmv(self, S: np.ndarray) -> Callable: - """global minimum variance optimization objective - - Optimization objective - min_w w' S w - """ - - def func(x): - return x @ S @ x - - return func - - def _get_objective_mvo(self, S: np.ndarray, u: np.ndarray = None) -> Callable: - """mean-variance optimization objective - - Optimization objective - min_w - w' u + lamb * w' S w - """ - - def func(x): - risk = x @ S @ x - ret = x @ u - return -ret + self.lamb * risk - - return func - - def _get_objective_rp(self, S: np.ndarray) -> Callable: - """risk-parity optimization objective - - Optimization objective - min_w sum_i [w_i - (w' S w) / ((S w)_i * N)]**2 - """ - - def func(x): - N = len(x) - Sx = S @ x - xSx = x @ Sx - return np.sum((x - xSx / Sx / N) ** 2) - - return func - - def _get_constrains(self, w0: Optional[np.ndarray] = None): - """optimization constraints - - Defines the following constraints: - - no shorting and leverage: 0 <= w <= 1 - - full investment: sum(w) == 1 - - turnover constraint: |w - w0| <= delta - """ - - # no shorting and leverage - bounds = so.Bounds(0.0, 1.0) - - # full investment constraint - cons = [{"type": "eq", "fun": lambda x: np.sum(x) - 1}] # == 0 - - # turnover constraint - if w0 is not None: - cons.append({"type": "ineq", "fun": lambda x: self.delta - np.sum(np.abs(x - w0))}) # >= 0 - - return bounds, cons - - def _solve(self, n: int, obj: Callable, bounds: so.Bounds, cons: List) -> np.ndarray: - """solve optimization - - Args: - n (int): number of parameters - obj (callable): optimization objective - bounds (Bounds): bounds of parameters - cons (list): optimization constraints - """ - # add l2 regularization - wrapped_obj = obj - if self.alpha > 0: - def opt_obj(x): - return obj(x) + self.alpha * np.sum(np.square(x)) - - wrapped_obj = opt_obj - - # solve - x0 = np.ones(n) / n # init results - sol = so.minimize(wrapped_obj, x0, bounds=bounds, constraints=cons, tol=self.tol) - if not sol.success: - warnings.warn(f"optimization not success ({sol.status})") - - return sol.x diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer.py index c63d93656..728a04ea9 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer.py @@ -2,12 +2,377 @@ # Licensed under the MIT License. import abc +import warnings +import numpy as np +import cvxpy as cp +import pandas as pd +import scipy.optimize as so +from typing import Optional, Union, Callable, List class BaseOptimizer(abc.ABC): - """Modeling things""" + """ Construct portfolio with a optimization related method """ @abc.abstractmethod def __call__(self, *args, **kwargs) -> object: """ Generate a optimized portfolio allocation """ pass + + +class PortfolioOptimizer(BaseOptimizer): + """Portfolio Optimizer + + The following optimization algorithms are supported: + - `gmv`: Global Minimum Variance Portfolio + - `mvo`: Mean Variance Optimized Portfolio + - `rp`: Risk Parity + - `inv`: Inverse Volatility + + Note: + This optimizer always assumes full investment and no-shorting. + """ + + OPT_GMV = "gmv" + OPT_MVO = "mvo" + OPT_RP = "rp" + OPT_INV = "inv" + + def __init__( + self, + method: str = "inv", + lamb: float = 0, + delta: float = 0, + alpha: float = 0.0, + scale_alpha: bool = True, + tol: float = 1e-8, + ): + """ + Args: + method (str): portfolio optimization method + lamb (float): risk aversion parameter (larger `lamb` means more focus on return) + delta (float): turnover rate limit + alpha (float): l2 norm regularizer + scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix + tol (float): tolerance for optimization termination + """ + assert method in [self.OPT_GMV, self.OPT_MVO, self.OPT_RP, self.OPT_INV], f"method `{method}` is not supported" + self.method = method + + assert lamb >= 0, f"risk aversion parameter `lamb` should be positive" + self.lamb = lamb + + assert delta >= 0, f"turnover limit `delta` should be positive" + self.delta = delta + + assert alpha >= 0, f"l2 norm regularizer `alpha` should be positive" + self.alpha = alpha + + self.tol = tol + self.scale_alpha = scale_alpha + + def __call__( + self, + S: Union[np.ndarray, pd.DataFrame], + u: Optional[Union[np.ndarray, pd.Series]] = None, + w0: Optional[Union[np.ndarray, pd.Series]] = None, + ) -> Union[np.ndarray, pd.Series]: + """ + Args: + S (np.ndarray or pd.DataFrame): covariance matrix + u (np.ndarray or pd.Series): expected returns (a.k.a., alpha) + w0 (np.ndarray or pd.Series): initial weights (for turnover control) + + Returns: + np.ndarray or pd.Series: optimized portfolio allocation + """ + # transform dataframe into array + index = None + if isinstance(S, pd.DataFrame): + index = S.index + S = S.values + + # transform alpha + if u is not None: + assert len(u) == len(S), "`u` has mismatched shape" + if isinstance(u, pd.Series): + assert u.index.equals(index), "`u` has mismatched index" + u = u.values + + # transform initial weights + if w0 is not None: + assert len(w0) == len(S), "`w0` has mismatched shape" + if isinstance(w0, pd.Series): + assert w0.index.equals(index), "`w0` has mismatched index" + w0 = w0.values + + # scale alpha to match volatility + if u is not None and self.scale_alpha: + u = u / u.std() + u *= np.mean(np.diag(S)) ** 0.5 + + # optimize + w = self._optimize(S, u, w0) + + # restore index if needed + if index is not None: + w = pd.Series(w, index=index) + + return w + + def _optimize(self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None) -> np.ndarray: + + # inverse volatility + if self.method == self.OPT_INV: + if u is not None: + warnings.warn("`u` is set but will not be used for `inv` portfolio") + if w0 is not None: + warnings.warn("`w0` is set but will not be used for `inv` portfolio") + return self._optimize_inv(S) + + # global minimum variance + if self.method == self.OPT_GMV: + if u is not None: + warnings.warn("`u` is set but will not be used for `gmv` portfolio") + return self._optimize_gmv(S, w0) + + # mean-variance + if self.method == self.OPT_MVO: + return self._optimize_mvo(S, u, w0) + + # risk parity + if self.method == self.OPT_RP: + if u is not None: + warnings.warn("`u` is set but will not be used for `rp` portfolio") + return self._optimize_rp(S, w0) + + def _optimize_inv(self, S: np.ndarray) -> np.ndarray: + """Inverse volatility""" + vola = np.diag(S) ** 0.5 + w = 1 / vola + w /= w.sum() + return w + + def _optimize_gmv(self, S: np.ndarray, w0: Optional[np.ndarray] = None) -> np.ndarray: + """optimize global minimum variance portfolio + + This method solves the following optimization problem + min_w w' S w + s.t. w >= 0, sum(w) == 1 + where `S` is the covariance matrix. + """ + return self._solve(len(S), self._get_objective_gmv(S), *self._get_constrains(w0)) + + def _optimize_mvo( + self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None + ) -> np.ndarray: + """optimize mean-variance portfolio + + This method solves the following optimization problem + min_w - w' u + lamb * w' S w + s.t. w >= 0, sum(w) == 1 + where `S` is the covariance matrix, `u` is the expected returns, + and `lamb` is the risk aversion parameter. + """ + return self._solve(len(S), self._get_objective_mvo(S, u), *self._get_constrains(w0)) + + def _optimize_rp(self, S: np.ndarray, w0: Optional[np.ndarray] = None) -> np.ndarray: + """optimize risk parity portfolio + + This method solves the following optimization problem + min_w sum_i [w_i - (w' S w) / ((S w)_i * N)]**2 + s.t. w >= 0, sum(w) == 1 + where `S` is the covariance matrix and `N` is the number of stocks. + """ + return self._solve(len(S), self._get_objective_rp(S), *self._get_constrains(w0)) + + def _get_objective_gmv(self, S: np.ndarray) -> Callable: + """global minimum variance optimization objective + + Optimization objective + min_w w' S w + """ + + def func(x): + return x @ S @ x + + return func + + def _get_objective_mvo(self, S: np.ndarray, u: np.ndarray = None) -> Callable: + """mean-variance optimization objective + + Optimization objective + min_w - w' u + lamb * w' S w + """ + + def func(x): + risk = x @ S @ x + ret = x @ u + return -ret + self.lamb * risk + + return func + + def _get_objective_rp(self, S: np.ndarray) -> Callable: + """risk-parity optimization objective + + Optimization objective + min_w sum_i [w_i - (w' S w) / ((S w)_i * N)]**2 + """ + + def func(x): + N = len(x) + Sx = S @ x + xSx = x @ Sx + return np.sum((x - xSx / Sx / N) ** 2) + + return func + + def _get_constrains(self, w0: Optional[np.ndarray] = None): + """optimization constraints + + Defines the following constraints: + - no shorting and leverage: 0 <= w <= 1 + - full investment: sum(w) == 1 + - turnover constraint: |w - w0| <= delta + """ + + # no shorting and leverage + bounds = so.Bounds(0.0, 1.0) + + # full investment constraint + cons = [{"type": "eq", "fun": lambda x: np.sum(x) - 1}] # == 0 + + # turnover constraint + if w0 is not None: + cons.append({"type": "ineq", "fun": lambda x: self.delta - np.sum(np.abs(x - w0))}) # >= 0 + + return bounds, cons + + def _solve(self, n: int, obj: Callable, bounds: so.Bounds, cons: List) -> np.ndarray: + """solve optimization + + Args: + n (int): number of parameters + obj (callable): optimization objective + bounds (Bounds): bounds of parameters + cons (list): optimization constraints + """ + # add l2 regularization + wrapped_obj = obj + if self.alpha > 0: + def opt_obj(x): + return obj(x) + self.alpha * np.sum(np.square(x)) + + wrapped_obj = opt_obj + + # solve + x0 = np.ones(n) / n # init results + sol = so.minimize(wrapped_obj, x0, bounds=bounds, constraints=cons, tol=self.tol) + if not sol.success: + warnings.warn(f"optimization not success ({sol.status})") + + return sol.x + + +class EnhancedIndexingOptimizer(BaseOptimizer): + """ + Portfolio Optimizer with Enhanced Indexing + + Note: + This optimizer always assumes full investment and no-shorting. + """ + + START_FROM_W0 = 'w0' + START_FROM_BENCH = 'benchmark' + DO_NOT_START_FROM = 'no_warm_start' + + def __init__(self, lamb: float = 10, delta: float = 0.4, bench_dev: float = 0.01, inds_dev: float = 0.01, + scale_alpha=True, verbose: bool = False, warm_start: str = DO_NOT_START_FROM, max_iters: int = 10000): + """ + Args: + lamb (float): risk aversion parameter (larger `lamb` means less focus on return) + delta (float): turnover rate limit + bench_dev (float): benchmark deviation limit + inds_dev (float): industry deviation limit + verbose (bool): if print detailed information about the solver + warm_start (str): whether try to warm start (`w0`/`benchmark`/``) + (https://www.cvxpy.org/tutorial/advanced/index.html#warm-start) + """ + + assert lamb >= 0, "risk aversion parameter `lamb` should be positive" + self.lamb = lamb + + assert delta >= 0, "turnover limit `delta` should be positive" + self.delta = delta + + assert bench_dev >= 0, "benchmark deviation limit `bench_dev` should be positive" + self.bench_dev = bench_dev + + assert inds_dev >= 0, "industry deviation limit `inds_dev` should be positive" + self.inds_dev = inds_dev + + assert warm_start in [self.DO_NOT_START_FROM, self.START_FROM_W0, + self.START_FROM_BENCH], "illegal warm start option" + self.start_from_w0 = (warm_start == self.START_FROM_W0) + self.start_from_bench = (warm_start == self.START_FROM_BENCH) + + self.scale_alpha = scale_alpha + self.verbose = verbose + self.max_iters = max_iters + + def __call__(self, u: np.ndarray, F: np.ndarray, covB: np.ndarray, varU: np.ndarray, w0: np.ndarray, + w_bench: np.ndarray, inds_onehot: np.ndarray + ) -> Union[np.ndarray, pd.Series]: + """ + Args: + u (np.ndarray): expected returns (a.k.a., alpha) + F, covB, varU (np.ndarray): see StructuredCovEstimator + w0 (np.ndarray): initial weights (for turnover control) + w_bench (np.ndarray): benchmark weights + inds_onehot (np.ndarray): industry (onehot) + + Returns: + np.ndarray or pd.Series: optimized portfolio allocation + """ + # scale alpha to match volatility + if self.scale_alpha: + u = u / u.std() + x_variance = np.mean(np.diag(F @ covB @ F.T) + varU) + u *= x_variance ** 0.5 + + w = cp.Variable(len(u)) # num_assets + v = w @ F # num_factors + ret = w @ u + risk = cp.quad_form(v, covB) + cp.sum(cp.multiply(varU, w ** 2)) + obj = cp.Maximize(ret - self.lamb * risk) + d_bench = w - w_bench + d_inds = d_bench @ inds_onehot + cons = [ + w >= 0, + cp.sum(w) == 1, + d_bench >= -self.bench_dev, + d_bench <= self.bench_dev, + d_inds >= -self.inds_dev, + d_inds <= self.inds_dev + ] + if w0 is not None: + turnover = cp.sum(cp.abs(w - w0)) + cons.append(turnover <= self.delta) + + warm_start = False + if self.start_from_w0: + if w0 is None: + print('Warning: try warm start with w0, but w0 is `None`.') + else: + w.value = w0 + warm_start = True + elif self.start_from_bench: + w.value = w_bench + warm_start = True + + prob = cp.Problem(obj, cons) + prob.solve(solver=cp.SCS, verbose=self.verbose, warm_start=warm_start, max_iters=self.max_iters) + + if prob.status != 'optimal': + print('Warning: solve failed.', prob.status) + + return np.asarray(w.value) From 58f74cfd84b1f7e94de4f47b5c09d063ca8ed507 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 10:07:03 +0800 Subject: [PATCH 017/134] Reformat code to follow PEP 8. --- qlib/model/riskmodel.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/qlib/model/riskmodel.py b/qlib/model/riskmodel.py index 32984ed6a..8eec73e00 100644 --- a/qlib/model/riskmodel.py +++ b/qlib/model/riskmodel.py @@ -1,11 +1,10 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -import warnings import numpy as np import pandas as pd - from typing import Union +from sklearn.decomposition import PCA, FactorAnalysis from qlib.model.base import BaseModel @@ -124,7 +123,7 @@ class RiskModel(BaseModel): X = np.nan_to_num(X) elif self.nan_option == self.MASK_NAN: X = np.ma.masked_invalid(X) - # centerize + # centralize if not self.assume_centered: X = X - np.nanmean(X, axis=0) return X @@ -162,8 +161,9 @@ class ShrinkCovEstimator(RiskModel): [3] Ledoit, O., & Wolf, M. (2003). Improved estimation of the covariance matrix of stock returns with an application to portfolio selection. Journal of Empirical Finance, 10(5), 603–621. https://doi.org/10.1016/S0927-5398(03)00007-0 - [4] Chen, Y., Wiesel, A., Eldar, Y. C., & Hero, A. O. (2010). Shrinkage algorithms for MMSE covariance estimation. - IEEE Transactions on Signal Processing, 58(10), 5016–5029. https://doi.org/10.1109/TSP.2010.2053029 + [4] Chen, Y., Wiesel, A., Eldar, Y. C., & Hero, A. O. (2010). Shrinkage algorithms for MMSE covariance + estimation. IEEE Transactions on Signal Processing, 58(10), 5016–5029. + https://doi.org/10.1109/TSP.2010.2053029 [5] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-0000-00007f64e5b9/cov1para.m.zip [6] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-ffff-ffffde5e2d4e/covCor.m.zip [7] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-0000-0000648dfc98/covMarket.m.zip From 164687d54bfc3ea454eb72e060de16c6dc4a43c1 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 10:13:08 +0800 Subject: [PATCH 018/134] Add scikit-learn to dependencies. --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index f759945fd..6582054b9 100644 --- a/setup.py +++ b/setup.py @@ -55,6 +55,7 @@ REQUIRED = [ "tornado", "joblib>=0.17.0", "ruamel.yaml>=0.16.12", + "scikit-learn>=0.22" ] # Numpy include From b8647c13c78842d8ceb20ffb3788cc034cba6041 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 10:20:51 +0800 Subject: [PATCH 019/134] Reformat code to follow PEP 8. --- qlib/contrib/strategy/strategy.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/qlib/contrib/strategy/strategy.py b/qlib/contrib/strategy/strategy.py index 74df39f3e..550ff649d 100644 --- a/qlib/contrib/strategy/strategy.py +++ b/qlib/contrib/strategy/strategy.py @@ -7,7 +7,6 @@ import numpy as np import pandas as pd from ..backtest.order import Order -from ...utils import get_pre_trading_date from .order_generator import OrderGenWInteract @@ -390,11 +389,11 @@ class TopkDropoutStrategy(BaseStrategy, ListAdjustTimer): current_stock_list = current_temp.get_stock_list() value = cash * self.risk_degree / len(buy) if len(buy) > 0 else 0 - # open_cost should be considered in the real trading environment, while the backtest in evaluate.py does not consider it - # as the aim of demo is to accomplish same strategy as evaluate.py, so comment out this line + # open_cost should be considered in the real trading environment, while the backtest in evaluate.py does not + # consider it as the aim of demo is to accomplish same strategy as evaluate.py, so comment out this line # value = value / (1+trade_exchange.open_cost) # set open_cost limit for code in buy: - # check is stock supended + # check is stock suspended if not trade_exchange.is_stock_tradable(stock_id=code, trade_date=trade_date): continue # buy order From 2f9d45e03ac429d56ab2356e104089c8544316a3 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 10:29:29 +0800 Subject: [PATCH 020/134] Reformat code with black. --- docs/conf.py | 10 +-- examples/benchmarks/TFT/libs/tft_model.py | 12 +-- examples/highfreq/highfreq_handler.py | 33 ++------ examples/highfreq/highfreq_processor.py | 4 +- examples/highfreq/workflow.py | 35 ++------- examples/run_all_model.py | 5 +- examples/workflow_by_code.py | 5 +- qlib/config.py | 24 +----- qlib/contrib/backtest/__init__.py | 18 +---- qlib/contrib/backtest/profit_attribution.py | 23 +----- qlib/contrib/data/handler.py | 10 +-- qlib/contrib/eva/alpha.py | 6 +- qlib/contrib/evaluate.py | 7 +- qlib/contrib/evaluate_portfolio.py | 16 +--- qlib/contrib/model/catboost_model.py | 4 +- qlib/contrib/model/pytorch_alstm.py | 21 ++--- qlib/contrib/model/pytorch_alstm_ts.py | 17 +---- qlib/contrib/model/pytorch_gats.py | 22 +----- qlib/contrib/model/pytorch_gats_ts.py | 18 +---- qlib/contrib/model/pytorch_gru.py | 21 +---- qlib/contrib/model/pytorch_gru_ts.py | 17 +---- qlib/contrib/model/pytorch_lstm.py | 21 +---- qlib/contrib/model/pytorch_lstm_ts.py | 17 +---- qlib/contrib/model/pytorch_nn.py | 6 +- qlib/contrib/model/pytorch_sfm.py | 19 +---- qlib/contrib/model/pytorch_tabnet.py | 14 +--- qlib/contrib/model/xgboost.py | 4 +- qlib/contrib/online/executor.py | 24 +----- qlib/contrib/online/manager.py | 6 +- qlib/contrib/online/operator.py | 8 +- qlib/contrib/online/utils.py | 6 +- .../analysis_model_performance.py | 66 +++------------- .../analysis_position/cumulative_return.py | 36 ++------- .../analysis_position/parse_position.py | 5 +- .../report/analysis_position/rank_label.py | 16 +--- .../report/analysis_position/report.py | 15 +--- qlib/contrib/report/graph.py | 6 +- qlib/contrib/strategy/cost_control.py | 5 +- qlib/contrib/strategy/order_generator.py | 12 +-- qlib/contrib/tuner/launcher.py | 6 +- qlib/contrib/tuner/space.py | 5 +- qlib/contrib/tuner/tuner.py | 26 ++----- qlib/data/client.py | 3 +- qlib/data/data.py | 69 ++--------------- qlib/data/dataset/utils.py | 5 +- qlib/data/filter.py | 7 +- qlib/model/riskmodel.py | 31 +++++--- qlib/portfolio/optimizer.py | 76 ++++++++++++------- qlib/tests/__init__.py | 6 +- qlib/workflow/record_temp.py | 5 +- scripts/data_collector/yahoo/collector.py | 27 ++----- scripts/dump_bin.py | 13 +--- setup.py | 16 +--- tests/test_all_pipeline.py | 9 +-- tests/test_dump_data.py | 9 +-- tests/test_get_data.py | 4 +- 56 files changed, 218 insertions(+), 713 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 6e52b0e34..61fe784e7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -191,15 +191,7 @@ man_pages = [(master_doc, "qlib", u"QLib Documentation", [author], 1)] # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - ( - master_doc, - "QLib", - u"QLib Documentation", - author, - "QLib", - "One line description of project.", - "Miscellaneous", - ), + (master_doc, "QLib", u"QLib Documentation", author, "QLib", "One line description of project.", "Miscellaneous",), ] diff --git a/examples/benchmarks/TFT/libs/tft_model.py b/examples/benchmarks/TFT/libs/tft_model.py index b39f17825..f40a1aece 100644 --- a/examples/benchmarks/TFT/libs/tft_model.py +++ b/examples/benchmarks/TFT/libs/tft_model.py @@ -721,12 +721,7 @@ class TemporalFusionTransformer: encoder_steps = self.num_encoder_steps # Inputs. - all_inputs = tf.keras.layers.Input( - shape=( - time_steps, - combined_input_size, - ) - ) + all_inputs = tf.keras.layers.Input(shape=(time_steps, combined_input_size,)) unknown_inputs, known_combined_layer, obs_inputs, static_inputs = self.get_tft_embeddings(all_inputs) @@ -866,10 +861,7 @@ class TemporalFusionTransformer: """Returns LSTM cell initialized with default parameters.""" if self.use_cudnn: lstm = tf.keras.layers.CuDNNLSTM( - self.hidden_layer_size, - return_sequences=True, - return_state=return_state, - stateful=False, + self.hidden_layer_size, return_sequences=True, return_state=return_state, stateful=False, ) else: lstm = tf.keras.layers.LSTM( diff --git a/examples/highfreq/highfreq_handler.py b/examples/highfreq/highfreq_handler.py index d35650514..2fc411ab6 100644 --- a/examples/highfreq/highfreq_handler.py +++ b/examples/highfreq/highfreq_handler.py @@ -20,10 +20,7 @@ class HighFreqHandler(DataHandlerLP): new_l = [] for p in proc_l: p["kwargs"].update( - { - "fit_start_time": fit_start_time, - "fit_end_time": fit_end_time, - } + {"fit_start_time": fit_start_time, "fit_end_time": fit_end_time,} ) new_l.append(p) return new_l @@ -33,11 +30,7 @@ class HighFreqHandler(DataHandlerLP): data_loader = { "class": "QlibDataLoader", - "kwargs": { - "config": self.get_feature_config(), - "swap_level": False, - "freq": "1min", - }, + "kwargs": {"config": self.get_feature_config(), "swap_level": False, "freq": "1min",}, } super().__init__( instruments=instruments, @@ -68,8 +61,7 @@ class HighFreqHandler(DataHandlerLP): feature_ops = template_norm.format( template_if.format( - template_fillnan.format(template_paused.format("$close")), - template_paused.format(price_field), + template_fillnan.format(template_paused.format("$close")), template_paused.format(price_field), ), template_fillnan.format(template_paused.format("$close")), ) @@ -119,24 +111,14 @@ class HighFreqHandler(DataHandlerLP): class HighFreqBacktestHandler(DataHandler): def __init__( - self, - instruments="csi300", - start_time=None, - end_time=None, + self, instruments="csi300", start_time=None, end_time=None, ): data_loader = { "class": "QlibDataLoader", - "kwargs": { - "config": self.get_feature_config(), - "swap_level": False, - "freq": "1min", - }, + "kwargs": {"config": self.get_feature_config(), "swap_level": False, "freq": "1min",}, } super().__init__( - instruments=instruments, - start_time=start_time, - end_time=end_time, - data_loader=data_loader, + instruments=instruments, start_time=start_time, end_time=end_time, data_loader=data_loader, ) def get_feature_config(self): @@ -155,8 +137,7 @@ class HighFreqBacktestHandler(DataHandler): fields += [ "Cut({0}, 240, None)".format( template_if.format( - template_fillnan.format(template_paused.format("$close")), - template_paused.format(simpson_vwap), + template_fillnan.format(template_paused.format("$close")), template_paused.format(simpson_vwap), ) ) ] diff --git a/examples/highfreq/highfreq_processor.py b/examples/highfreq/highfreq_processor.py index f0ab0dec2..73510ef06 100644 --- a/examples/highfreq/highfreq_processor.py +++ b/examples/highfreq/highfreq_processor.py @@ -65,8 +65,6 @@ class HighFreqNorm(Processor): feat = df_values[:, [0, 1, 2, 3, 4, 10]].reshape(-1, 6 * 240) feat_1 = df_values[:, [5, 6, 7, 8, 9, 11]].reshape(-1, 6 * 240) df_new_features = pd.DataFrame( - data=np.concatenate((feat, feat_1), axis=1), - index=idx, - columns=["FEATURE_%d" % i for i in range(12 * 240)], + data=np.concatenate((feat, feat_1), axis=1), index=idx, columns=["FEATURE_%d" % i for i in range(12 * 240)], ).sort_index() return df_new_features diff --git a/examples/highfreq/workflow.py b/examples/highfreq/workflow.py index 01de59c0e..0bfd0c2a0 100644 --- a/examples/highfreq/workflow.py +++ b/examples/highfreq/workflow.py @@ -63,13 +63,7 @@ class HighfreqWorkflow(object): "module_path": "highfreq_handler", "kwargs": DATA_HANDLER_CONFIG0, }, - "segments": { - "train": (start_time, train_end_time), - "test": ( - test_start_time, - end_time, - ), - }, + "segments": {"train": (start_time, train_end_time), "test": (test_start_time, end_time,),}, }, }, "dataset_backtest": { @@ -81,13 +75,7 @@ class HighfreqWorkflow(object): "module_path": "highfreq_handler", "kwargs": DATA_HANDLER_CONFIG1, }, - "segments": { - "train": (start_time, train_end_time), - "test": ( - test_start_time, - end_time, - ), - }, + "segments": {"train": (start_time, train_end_time), "test": (test_start_time, end_time,),}, }, }, } @@ -152,24 +140,11 @@ class HighfreqWorkflow(object): "start_time": "2021-01-19 00:00:00", "end_time": "2021-01-25 16:00:00", }, - segment_kwargs={ - "test": ( - "2021-01-19 00:00:00", - "2021-01-25 16:00:00", - ), - }, + segment_kwargs={"test": ("2021-01-19 00:00:00", "2021-01-25 16:00:00",),}, ) dataset_backtest.init( - handler_kwargs={ - "start_time": "2021-01-19 00:00:00", - "end_time": "2021-01-25 16:00:00", - }, - segment_kwargs={ - "test": ( - "2021-01-19 00:00:00", - "2021-01-25 16:00:00", - ), - }, + handler_kwargs={"start_time": "2021-01-19 00:00:00", "end_time": "2021-01-25 16:00:00",}, + segment_kwargs={"test": ("2021-01-19 00:00:00", "2021-01-25 16:00:00",),}, ) ##=============get data============= diff --git a/examples/run_all_model.py b/examples/run_all_model.py index d587eff15..d356b4128 100644 --- a/examples/run_all_model.py +++ b/examples/run_all_model.py @@ -34,10 +34,7 @@ exp_path = str(Path(os.getcwd()).resolve() / exp_folder_name) exp_manager = { "class": "MLflowExpManager", "module_path": "qlib.workflow.expm", - "kwargs": { - "uri": "file:" + exp_path, - "default_exp_name": "Experiment", - }, + "kwargs": {"uri": "file:" + exp_path, "default_exp_name": "Experiment",}, } if not exists_qlib_data(provider_uri): print(f"Qlib data is not found in {provider_uri}") diff --git a/examples/workflow_by_code.py b/examples/workflow_by_code.py index d5dab8917..6f5c11dc0 100644 --- a/examples/workflow_by_code.py +++ b/examples/workflow_by_code.py @@ -81,10 +81,7 @@ if __name__ == "__main__": "strategy": { "class": "TopkDropoutStrategy", "module_path": "qlib.contrib.strategy.strategy", - "kwargs": { - "topk": 50, - "n_drop": 5, - }, + "kwargs": {"topk": 50, "n_drop": 5,}, }, "backtest": { "verbose": False, diff --git a/qlib/config.py b/qlib/config.py index 52b05568d..344eb8527 100644 --- a/qlib/config.py +++ b/qlib/config.py @@ -115,12 +115,7 @@ _default_config = { "format": "[%(process)s:%(threadName)s](%(asctime)s) %(levelname)s - %(name)s - [%(filename)s:%(lineno)d] - %(message)s" } }, - "filters": { - "field_not_found": { - "()": "qlib.log.LogFilter", - "param": [".*?WARN: data not found for.*?"], - } - }, + "filters": {"field_not_found": {"()": "qlib.log.LogFilter", "param": [".*?WARN: data not found for.*?"],}}, "handlers": { "console": { "class": "logging.StreamHandler", @@ -135,10 +130,7 @@ _default_config = { "exp_manager": { "class": "MLflowExpManager", "module_path": "qlib.workflow.expm", - "kwargs": { - "uri": "file:" + str(Path(os.getcwd()).resolve() / "mlruns"), - "default_exp_name": "Experiment", - }, + "kwargs": {"uri": "file:" + str(Path(os.getcwd()).resolve() / "mlruns"), "default_exp_name": "Experiment",}, }, } @@ -200,16 +192,8 @@ HIGH_FREQ_CONFIG = { } _default_region_config = { - REG_CN: { - "trade_unit": 100, - "limit_threshold": 0.099, - "deal_price": "vwap", - }, - REG_US: { - "trade_unit": 1, - "limit_threshold": None, - "deal_price": "close", - }, + REG_CN: {"trade_unit": 100, "limit_threshold": 0.099, "deal_price": "vwap",}, + REG_US: {"trade_unit": 1, "limit_threshold": None, "deal_price": "close",}, } diff --git a/qlib/contrib/backtest/__init__.py b/qlib/contrib/backtest/__init__.py index aa24ffb0c..bd3494abf 100644 --- a/qlib/contrib/backtest/__init__.py +++ b/qlib/contrib/backtest/__init__.py @@ -18,13 +18,7 @@ logger = get_module_logger("backtest caller") def get_strategy( - strategy=None, - topk=50, - margin=0.5, - n_drop=5, - risk_degree=0.95, - str_type="dropout", - adjust_dates=None, + strategy=None, topk=50, margin=0.5, n_drop=5, risk_degree=0.95, str_type="dropout", adjust_dates=None, ): """get_strategy @@ -75,11 +69,7 @@ def get_strategy( str_cls = getattr(strategy_pool, str_cls_dict.get(str_type)) strategy = str_cls( - topk=topk, - buffer_margin=margin, - n_drop=n_drop, - risk_degree=risk_degree, - adjust_dates=adjust_dates, + topk=topk, buffer_margin=margin, n_drop=n_drop, risk_degree=risk_degree, adjust_dates=adjust_dates, ) elif isinstance(strategy, (dict, str)): # 2) create strategy with init_instance_by_config @@ -172,9 +162,7 @@ def get_exchange( def get_executor( - executor=None, - trade_exchange=None, - verbose=True, + executor=None, trade_exchange=None, verbose=True, ): """get_executor diff --git a/qlib/contrib/backtest/profit_attribution.py b/qlib/contrib/backtest/profit_attribution.py index 20c6f638f..355f06373 100644 --- a/qlib/contrib/backtest/profit_attribution.py +++ b/qlib/contrib/backtest/profit_attribution.py @@ -12,10 +12,7 @@ from pathlib import Path def get_benchmark_weight( - bench, - start_date=None, - end_date=None, - path=None, + bench, start_date=None, end_date=None, path=None, ): """get_benchmark_weight @@ -216,12 +213,7 @@ def get_stock_group(stock_group_field_df, bench_stock_weight_df, group_method, g def brinson_pa( - positions, - bench="SH000905", - group_field="industry", - group_method="category", - group_n=None, - deal_price="vwap", + positions, bench="SH000905", group_field="industry", group_method="category", group_n=None, deal_price="vwap", ): """brinson profit attribution @@ -255,17 +247,10 @@ def brinson_pa( # suspend stock is NAN. So we have to get more date to forward fill the NAN shift_start_date = start_date - datetime.timedelta(days=250) instruments = D.list_instruments( - D.instruments(market="all"), - start_time=shift_start_date, - end_time=end_date, - as_list=True, + D.instruments(market="all"), start_time=shift_start_date, end_time=end_date, as_list=True, ) stock_df = D.features( - instruments, - [group_field, deal_price], - start_time=shift_start_date, - end_time=end_date, - freq="day", + instruments, [group_field, deal_price], start_time=shift_start_date, end_time=end_date, freq="day", ) stock_df.columns = [group_field, "deal_price"] diff --git a/qlib/contrib/data/handler.py b/qlib/contrib/data/handler.py index 970b032d6..574287819 100644 --- a/qlib/contrib/data/handler.py +++ b/qlib/contrib/data/handler.py @@ -21,10 +21,7 @@ def check_transform_proc(proc_l, fit_start_time, fit_end_time): fit_start_time is not None and fit_end_time is not None ), "Make sure `fit_start_time` and `fit_end_time` are not None." pkwargs.update( - { - "fit_start_time": fit_start_time, - "fit_end_time": fit_end_time, - } + {"fit_start_time": fit_start_time, "fit_end_time": fit_end_time,} ) new_l.append({"class": klass.__name__, "kwargs": pkwargs}) else: @@ -170,10 +167,7 @@ class Alpha158(DataHandlerLP): def get_feature_config(self): conf = { "kbar": {}, - "price": { - "windows": [0], - "feature": ["OPEN", "HIGH", "LOW", "VWAP"], - }, + "price": {"windows": [0], "feature": ["OPEN", "HIGH", "LOW", "VWAP"],}, "rolling": {}, } return self.parse_config_to_fields(conf) diff --git a/qlib/contrib/eva/alpha.py b/qlib/contrib/eva/alpha.py index c68571853..363a18458 100644 --- a/qlib/contrib/eva/alpha.py +++ b/qlib/contrib/eva/alpha.py @@ -35,11 +35,7 @@ def calc_ic(pred: pd.Series, label: pd.Series, date_col="datetime", dropna=False def calc_long_short_return( - pred: pd.Series, - label: pd.Series, - date_col: str = "datetime", - quantile: float = 0.2, - dropna: bool = False, + pred: pd.Series, label: pd.Series, date_col: str = "datetime", quantile: float = 0.2, dropna: bool = False, ) -> Tuple[pd.Series, pd.Series]: """ calculate long-short return diff --git a/qlib/contrib/evaluate.py b/qlib/contrib/evaluate.py index 4aa5b5515..5cb1ce4eb 100644 --- a/qlib/contrib/evaluate.py +++ b/qlib/contrib/evaluate.py @@ -244,12 +244,7 @@ def long_short_backtest( short_returns[date] = np.mean(short_profit) + np.mean(all_profit) ls_returns[date] = np.mean(short_profit) + np.mean(long_profit) - return dict( - zip( - ["long", "short", "long_short"], - map(pd.Series, [long_returns, short_returns, ls_returns]), - ) - ) + return dict(zip(["long", "short", "long_short"], map(pd.Series, [long_returns, short_returns, ls_returns]),)) def t_run(): diff --git a/qlib/contrib/evaluate_portfolio.py b/qlib/contrib/evaluate_portfolio.py index 04ddd8db0..2d94105e4 100644 --- a/qlib/contrib/evaluate_portfolio.py +++ b/qlib/contrib/evaluate_portfolio.py @@ -64,12 +64,7 @@ def get_position_value(evaluate_date, position): instruments = list(set(instruments) - set(["cash"])) # filter 'cash' fields = ["$close"] close_data_df = D.features( - instruments, - fields, - start_time=evaluate_date, - end_time=evaluate_date, - freq="day", - disk_cache=0, + instruments, fields, start_time=evaluate_date, end_time=evaluate_date, freq="day", disk_cache=0, ) value = _get_position_value_from_df(evaluate_date, position, close_data_df) return value @@ -87,14 +82,7 @@ def get_position_list_value(positions): start_date, end_date = day_list[0], day_list[-1] # load data fields = ["$close"] - close_data_df = D.features( - instruments, - fields, - start_time=start_date, - end_time=end_date, - freq="day", - disk_cache=0, - ) + close_data_df = D.features(instruments, fields, start_time=start_date, end_time=end_date, freq="day", disk_cache=0,) # generate value # return dict for time:position_value value_dict = OrderedDict() diff --git a/qlib/contrib/model/catboost_model.py b/qlib/contrib/model/catboost_model.py index d57c32b70..2840c2cef 100644 --- a/qlib/contrib/model/catboost_model.py +++ b/qlib/contrib/model/catboost_model.py @@ -32,9 +32,7 @@ class CatBoostModel(Model): **kwargs ): df_train, df_valid = dataset.prepare( - ["train", "valid"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/model/pytorch_alstm.py b/qlib/contrib/model/pytorch_alstm.py index bbbb61851..306e68aad 100644 --- a/qlib/contrib/model/pytorch_alstm.py +++ b/qlib/contrib/model/pytorch_alstm.py @@ -118,10 +118,7 @@ class ALSTM(Model): torch.manual_seed(self.seed) self.ALSTM_model = ALSTMModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) @@ -211,17 +208,11 @@ class ALSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -328,14 +319,12 @@ class ALSTMModel(nn.Module): self.fc_out = nn.Linear(in_features=self.hid_size * 2, out_features=1) self.att_net = nn.Sequential() self.att_net.add_module( - "att_fc_in", - nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), + "att_fc_in", nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), ) self.att_net.add_module("att_dropout", torch.nn.Dropout(self.dropout)) self.att_net.add_module("att_act", nn.Tanh()) self.att_net.add_module( - "att_fc_out", - nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), + "att_fc_out", nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), ) self.att_net.add_module("att_softmax", nn.Softmax(dim=1)) diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 725568de8..612bacbec 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -123,10 +123,7 @@ class ALSTM(Model): torch.manual_seed(self.seed) self.ALSTM_model = ALSTMModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) @@ -198,11 +195,7 @@ class ALSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset, evals_result=dict(), verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -309,14 +302,12 @@ class ALSTMModel(nn.Module): self.fc_out = nn.Linear(in_features=self.hid_size * 2, out_features=1) self.att_net = nn.Sequential() self.att_net.add_module( - "att_fc_in", - nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), + "att_fc_in", nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), ) self.att_net.add_module("att_dropout", torch.nn.Dropout(self.dropout)) self.att_net.add_module("att_act", nn.Tanh()) self.att_net.add_module( - "att_fc_out", - nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), + "att_fc_out", nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), ) self.att_net.add_module("att_softmax", nn.Softmax(dim=1)) diff --git a/qlib/contrib/model/pytorch_gats.py b/qlib/contrib/model/pytorch_gats.py index 07048e1bc..c59dc9197 100644 --- a/qlib/contrib/model/pytorch_gats.py +++ b/qlib/contrib/model/pytorch_gats.py @@ -229,17 +229,11 @@ class GATs(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -340,19 +334,11 @@ class GATModel(nn.Module): if base_model == "GRU": self.rnn = nn.GRU( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) elif base_model == "LSTM": self.rnn = nn.LSTM( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) else: raise ValueError("unknown base model name `%s`" % base_model) diff --git a/qlib/contrib/model/pytorch_gats_ts.py b/qlib/contrib/model/pytorch_gats_ts.py index 1e94f56e4..dfc5f4ab5 100644 --- a/qlib/contrib/model/pytorch_gats_ts.py +++ b/qlib/contrib/model/pytorch_gats_ts.py @@ -242,11 +242,7 @@ class GATs(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset, evals_result=dict(), verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -361,19 +357,11 @@ class GATModel(nn.Module): if base_model == "GRU": self.rnn = nn.GRU( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) elif base_model == "LSTM": self.rnn = nn.LSTM( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) else: raise ValueError("unknown base model name `%s`" % base_model) diff --git a/qlib/contrib/model/pytorch_gru.py b/qlib/contrib/model/pytorch_gru.py index 84f863b9f..d2a774b65 100755 --- a/qlib/contrib/model/pytorch_gru.py +++ b/qlib/contrib/model/pytorch_gru.py @@ -118,10 +118,7 @@ class GRU(Model): torch.manual_seed(self.seed) self.gru_model = GRUModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.gru_model.parameters(), lr=self.lr) @@ -211,17 +208,11 @@ class GRU(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -305,11 +296,7 @@ class GRUModel(nn.Module): super().__init__() self.rnn = nn.GRU( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index bb6618b85..49f438cc3 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -123,10 +123,7 @@ class GRU(Model): torch.manual_seed(self.seed) self.GRU_model = GRUModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.GRU_model.parameters(), lr=self.lr) @@ -198,11 +195,7 @@ class GRU(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset, evals_result=dict(), verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -286,11 +279,7 @@ class GRUModel(nn.Module): super().__init__() self.rnn = nn.GRU( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_lstm.py b/qlib/contrib/model/pytorch_lstm.py index 163d500ec..02ca16e36 100755 --- a/qlib/contrib/model/pytorch_lstm.py +++ b/qlib/contrib/model/pytorch_lstm.py @@ -118,10 +118,7 @@ class LSTM(Model): torch.manual_seed(self.seed) self.lstm_model = LSTMModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.lstm_model.parameters(), lr=self.lr) @@ -211,17 +208,11 @@ class LSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -305,11 +296,7 @@ class LSTMModel(nn.Module): super().__init__() self.rnn = nn.LSTM( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_lstm_ts.py b/qlib/contrib/model/pytorch_lstm_ts.py index cf4f8fb9f..2ec36f96e 100755 --- a/qlib/contrib/model/pytorch_lstm_ts.py +++ b/qlib/contrib/model/pytorch_lstm_ts.py @@ -123,10 +123,7 @@ class LSTM(Model): torch.manual_seed(self.seed) self.LSTM_model = LSTMModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.LSTM_model.parameters(), lr=self.lr) @@ -198,11 +195,7 @@ class LSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset, evals_result=dict(), verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -286,11 +279,7 @@ class LSTMModel(nn.Module): super().__init__() self.rnn = nn.LSTM( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_nn.py b/qlib/contrib/model/pytorch_nn.py index 16fcea9ff..8c1a77ec3 100644 --- a/qlib/contrib/model/pytorch_nn.py +++ b/qlib/contrib/model/pytorch_nn.py @@ -154,11 +154,7 @@ class DNNModelPytorch(Model): self.dnn_model.to(self.device) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid = dataset.prepare( ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L diff --git a/qlib/contrib/model/pytorch_sfm.py b/qlib/contrib/model/pytorch_sfm.py index d5169e6c7..1f7433e05 100644 --- a/qlib/contrib/model/pytorch_sfm.py +++ b/qlib/contrib/model/pytorch_sfm.py @@ -30,14 +30,7 @@ from ...data.dataset.handler import DataHandlerLP class SFM_Model(nn.Module): def __init__( - self, - d_feat=6, - output_dim=1, - freq_dim=10, - hidden_size=64, - dropout_W=0.0, - dropout_U=0.0, - device="cpu", + self, d_feat=6, output_dim=1, freq_dim=10, hidden_size=64, dropout_W=0.0, dropout_U=0.0, device="cpu", ): super().__init__() @@ -362,17 +355,11 @@ class SFM(Model): self.train_optimizer.step() def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid = dataset.prepare( - ["train", "valid"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index 62e32d701..18e9d8eb4 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -120,9 +120,7 @@ class TabnetModel(Model): os.makedirs("pretrain") [df_train, df_valid] = dataset.prepare( - ["pretrain", "pretrain_validation"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["pretrain", "pretrain_validation"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) df_train.fillna(df_train.mean(), inplace=True) @@ -156,11 +154,7 @@ class TabnetModel(Model): break def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): if self.pretrain: # there is a pretrained model, load the model @@ -172,9 +166,7 @@ class TabnetModel(Model): # adding one more linear layer to fit the final output dimension self.tabnet_model = FinetuneModel(self.out_dim, self.final_out_dim, self.tabnet_model).to(self.device) df_train, df_valid = dataset.prepare( - ["train", "valid"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) df_train.fillna(df_train.mean(), inplace=True) x_train, y_train = df_train["feature"], df_train["label"] diff --git a/qlib/contrib/model/xgboost.py b/qlib/contrib/model/xgboost.py index ba2e5789b..e37725c2e 100755 --- a/qlib/contrib/model/xgboost.py +++ b/qlib/contrib/model/xgboost.py @@ -29,9 +29,7 @@ class XGBModel(Model): ): df_train, df_valid = dataset.prepare( - ["train", "valid"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/online/executor.py b/qlib/contrib/online/executor.py index 2bd0937a0..52b868881 100644 --- a/qlib/contrib/online/executor.py +++ b/qlib/contrib/online/executor.py @@ -150,21 +150,13 @@ class SimulatorExecutor(BaseExecutor): if order.direction == Order.SELL: # sell print( "[I {:%Y-%m-%d}]: sell {}, price {:.2f}, amount {}, value {:.2f}.".format( - trade_date, - order.stock_id, - trade_price, - order.deal_amount, - trade_val, + trade_date, order.stock_id, trade_price, order.deal_amount, trade_val, ) ) else: print( "[I {:%Y-%m-%d}]: buy {}, price {:.2f}, amount {}, value {:.2f}.".format( - trade_date, - order.stock_id, - trade_price, - order.deal_amount, - trade_val, + trade_date, order.stock_id, trade_price, order.deal_amount, trade_val, ) ) @@ -271,21 +263,13 @@ def load_order_list(user_path, trade_date): for stock_id in order_dict["sell"]: amount, factor = order_dict["sell"][stock_id] order = Order( - stock_id=stock_id, - amount=amount, - trade_date=pd.Timestamp(trade_date), - direction=Order.SELL, - factor=factor, + stock_id=stock_id, amount=amount, trade_date=pd.Timestamp(trade_date), direction=Order.SELL, factor=factor, ) order_list.append(order) for stock_id in order_dict["buy"]: amount, factor = order_dict["buy"][stock_id] order = Order( - stock_id=stock_id, - amount=amount, - trade_date=pd.Timestamp(trade_date), - direction=Order.BUY, - factor=factor, + stock_id=stock_id, amount=amount, trade_date=pd.Timestamp(trade_date), direction=Order.BUY, factor=factor, ) order_list.append(order) return order_list diff --git a/qlib/contrib/online/manager.py b/qlib/contrib/online/manager.py index cf850b9da..a4476709d 100644 --- a/qlib/contrib/online/manager.py +++ b/qlib/contrib/online/manager.py @@ -84,12 +84,10 @@ class UserManager: raise ValueError("Cannot find user {}".format(user_id)) self.users[user_id].account.save_account(self.data_path / user_id) save_instance( - self.users[user_id].strategy, - self.data_path / user_id / "strategy_{}.pickle".format(user_id), + self.users[user_id].strategy, self.data_path / user_id / "strategy_{}.pickle".format(user_id), ) save_instance( - self.users[user_id].model, - self.data_path / user_id / "model_{}.pickle".format(user_id), + self.users[user_id].model, self.data_path / user_id / "model_{}.pickle".format(user_id), ) def add_user(self, user_id, config_file, add_date): diff --git a/qlib/contrib/online/operator.py b/qlib/contrib/online/operator.py index c8b44f578..c82deb394 100644 --- a/qlib/contrib/online/operator.py +++ b/qlib/contrib/online/operator.py @@ -125,9 +125,7 @@ class Operator: trade_date=trade_date, ) save_order_list( - order_list=order_list, - user_path=(pathlib.Path(path) / user_id), - trade_date=trade_date, + order_list=order_list, user_path=(pathlib.Path(path) / user_id), trade_date=trade_date, ) self.logger.info("Generate order list at {} for {}".format(trade_date, user_id)) um.save_user_data(user_id) @@ -160,9 +158,7 @@ class Operator: order_list = load_order_list(user_path=(pathlib.Path(path) / user_id), trade_date=trade_date) trade_info = executor.execute(order_list=order_list, trade_account=user.account, trade_date=trade_date) executor.save_executed_file_from_trade_info( - trade_info=trade_info, - user_path=(pathlib.Path(path) / user_id), - trade_date=trade_date, + trade_info=trade_info, user_path=(pathlib.Path(path) / user_id), trade_date=trade_date, ) self.logger.info("execute order list at {} for {}".format(trade_date.date(), user_id)) diff --git a/qlib/contrib/online/utils.py b/qlib/contrib/online/utils.py index 611af63e4..fb96c87bd 100644 --- a/qlib/contrib/online/utils.py +++ b/qlib/contrib/online/utils.py @@ -79,11 +79,7 @@ def prepare(um, today, user_id, exchange_config=None): log.warning("user_id:{}, last trading date {} after today {}".format(user_id, latest_trading_date, today)) return [pd.Timestamp(latest_trading_date)], None - dates = D.calendar( - start_time=pd.Timestamp(latest_trading_date), - end_time=pd.Timestamp(today), - future=True, - ) + dates = D.calendar(start_time=pd.Timestamp(latest_trading_date), end_time=pd.Timestamp(today), future=True,) dates = list(dates) dates.append(get_next_trading_date(dates[-1], future=True)) if exchange_config: diff --git a/qlib/contrib/report/analysis_model/analysis_model_performance.py b/qlib/contrib/report/analysis_model/analysis_model_performance.py index 1cb14d261..ef1447a12 100644 --- a/qlib/contrib/report/analysis_model/analysis_model_performance.py +++ b/qlib/contrib/report/analysis_model/analysis_model_performance.py @@ -53,8 +53,7 @@ def _group_return(pred_label: pd.DataFrame = None, reverse: bool = False, N: int t_df.index = t_df.index.strftime("%Y-%m-%d") # Cumulative Return By Group group_scatter_figure = ScatterGraph( - t_df.cumsum(), - layout=dict(title="Cumulative Return", xaxis=dict(type="category", tickangle=45)), + t_df.cumsum(), layout=dict(title="Cumulative Return", xaxis=dict(type="category", tickangle=45)), ).figure t_df = t_df.loc[:, ["long-short", "long-average"]] @@ -62,12 +61,7 @@ def _group_return(pred_label: pd.DataFrame = None, reverse: bool = False, N: int group_hist_figure = SubplotsGraph( t_df, kind_map=dict(kind="DistplotGraph", kwargs=dict(bin_size=_bin_size)), - subplots_kwargs=dict( - rows=1, - cols=2, - print_grid=False, - subplot_titles=["long-short", "long-average"], - ), + subplots_kwargs=dict(rows=1, cols=2, print_grid=False, subplot_titles=["long-short", "long-average"],), ).figure return group_scatter_figure, group_hist_figure @@ -102,15 +96,12 @@ def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> t _index = ic.index.get_level_values(0).astype("str").str.replace("-", "").str.slice(0, 6) _monthly_ic = ic.groupby(_index).mean() _monthly_ic.index = pd.MultiIndex.from_arrays( - [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], - names=["year", "month"], + [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], names=["year", "month"], ) # fill month _month_list = pd.date_range( - start=pd.Timestamp(f"{_index.min()[:4]}0101"), - end=pd.Timestamp(f"{_index.max()[:4]}1231"), - freq="1M", + start=pd.Timestamp(f"{_index.min()[:4]}0101"), end=pd.Timestamp(f"{_index.max()[:4]}1231"), freq="1M", ) _years = [] _month = [] @@ -142,32 +133,15 @@ def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> t _bin_size = ((_ic_df.max() - _ic_df.min()) / 20).min() _sub_graph_data = [ - ( - "ic", - dict( - row=1, - col=1, - name="", - kind="DistplotGraph", - graph_kwargs=dict(bin_size=_bin_size), - ), - ), + ("ic", dict(row=1, col=1, name="", kind="DistplotGraph", graph_kwargs=dict(bin_size=_bin_size),),), (_qqplot_fig, dict(row=1, col=2)), ] ic_hist_figure = SubplotsGraph( _ic_df.dropna(), kind_map=dict(kind="HistogramGraph", kwargs=dict()), - subplots_kwargs=dict( - rows=1, - cols=2, - print_grid=False, - subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name], - ), + subplots_kwargs=dict(rows=1, cols=2, print_grid=False, subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name],), sub_graph_data=_sub_graph_data, - layout=dict( - yaxis2=dict(title="Observed Quantile"), - xaxis2=dict(title=f"{dist_name} Distribution Quantile"), - ), + layout=dict(yaxis2=dict(title="Observed Quantile"), xaxis2=dict(title=f"{dist_name} Distribution Quantile"),), ).figure return ic_bar_figure, ic_heatmap_figure, ic_hist_figure @@ -181,8 +155,7 @@ def _pred_autocorr(pred_label: pd.DataFrame, lag=1, **kwargs) -> tuple: _df = ac.to_frame("value") _df.index = _df.index.strftime("%Y-%m-%d") ac_figure = ScatterGraph( - _df, - layout=dict(title="Auto Correlation", xaxis=dict(type="category", tickangle=45)), + _df, layout=dict(title="Auto Correlation", xaxis=dict(type="category", tickangle=45)), ).figure return (ac_figure,) @@ -202,17 +175,11 @@ def _pred_turnover(pred_label: pd.DataFrame, N=5, lag=1, **kwargs) -> tuple: .sum() / (len(x) // N) ) - r_df = pd.DataFrame( - { - "Top": top, - "Bottom": bottom, - } - ) + r_df = pd.DataFrame({"Top": top, "Bottom": bottom,}) # FIXME: support HIGH-FREQ r_df.index = r_df.index.strftime("%Y-%m-%d") turnover_figure = ScatterGraph( - r_df, - layout=dict(title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45)), + r_df, layout=dict(title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45)), ).figure return (turnover_figure,) @@ -230,11 +197,7 @@ def ic_figure(ic_df: pd.DataFrame, show_nature_day=True, **kwargs) -> go.Figure: # FIXME: support HIGH-FREQ ic_df.index = ic_df.index.strftime("%Y-%m-%d") ic_bar_figure = BarGraph( - ic_df, - layout=dict( - title="Information Coefficient (IC)", - xaxis=dict(type="category", tickangle=45), - ), + ic_df, layout=dict(title="Information Coefficient (IC)", xaxis=dict(type="category", tickangle=45),), ).figure return ic_bar_figure @@ -277,12 +240,7 @@ def model_performance_graph( figure_list = [] for graph_name in graph_names: fun_res = eval(f"_{graph_name}")( - pred_label=pred_label, - lag=lag, - N=N, - reverse=reverse, - rank=rank, - show_nature_day=show_nature_day, + pred_label=pred_label, lag=lag, N=N, reverse=reverse, rank=rank, show_nature_day=show_nature_day, ) figure_list += fun_res diff --git a/qlib/contrib/report/analysis_position/cumulative_return.py b/qlib/contrib/report/analysis_position/cumulative_return.py index abb68ea60..604189c94 100644 --- a/qlib/contrib/report/analysis_position/cumulative_return.py +++ b/qlib/contrib/report/analysis_position/cumulative_return.py @@ -13,11 +13,7 @@ from ..analysis_position.parse_position import get_position_data def _get_cum_return_data_with_position( - position: dict, - report_normal: pd.DataFrame, - label_data: pd.DataFrame, - start_date=None, - end_date=None, + position: dict, report_normal: pd.DataFrame, label_data: pd.DataFrame, start_date=None, end_date=None, ): """ @@ -29,11 +25,7 @@ def _get_cum_return_data_with_position( :return: """ _cumulative_return_df = get_position_data( - position=position, - report_normal=report_normal, - label_data=label_data, - start_date=start_date, - end_date=end_date, + position=position, report_normal=report_normal, label_data=label_data, start_date=start_date, end_date=end_date, ).copy() _cumulative_return_df["label"] = _cumulative_return_df["label"] - _cumulative_return_df["bench"] @@ -87,11 +79,7 @@ def _get_cum_return_data_with_position( def _get_figure_with_position( - position: dict, - report_normal: pd.DataFrame, - label_data: pd.DataFrame, - start_date=None, - end_date=None, + position: dict, report_normal: pd.DataFrame, label_data: pd.DataFrame, start_date=None, end_date=None, ) -> Iterable[go.Figure]: """Get average analysis figures @@ -111,18 +99,12 @@ def _get_figure_with_position( # Create figures for _t_name in ["buy", "sell", "buy_minus_sell", "hold"]: sub_graph_data = [ - ( - "cum_{}".format(_t_name), - dict(row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"}), - ), + ("cum_{}".format(_t_name), dict(row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"}),), ( "{}_weight".format(_t_name.replace("minus", "plus") if "minus" in _t_name else _t_name), dict(row=2, col=1), ), - ( - "{}_value".format(_t_name), - dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}), - ), + ("{}_value".format(_t_name), dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}),), ] _default_xaxis = dict(showline=False, zeroline=True, tickangle=45) @@ -161,13 +143,7 @@ def _get_figure_with_position( [{"rowspan": 1}, None], ] subplots_kwargs = dict( - vertical_spacing=0.01, - rows=2, - cols=2, - row_width=[1, 2], - column_width=[3, 1], - print_grid=False, - specs=specs, + vertical_spacing=0.01, rows=2, cols=2, row_width=[1, 2], column_width=[3, 1], print_grid=False, specs=specs, ) yield SubplotsGraph( cum_return_df, diff --git a/qlib/contrib/report/analysis_position/parse_position.py b/qlib/contrib/report/analysis_position/parse_position.py index fe1d61137..23f9c592c 100644 --- a/qlib/contrib/report/analysis_position/parse_position.py +++ b/qlib/contrib/report/analysis_position/parse_position.py @@ -72,10 +72,7 @@ def parse_position(position: dict = None) -> pd.DataFrame: result_df = result_df.append(_trading_day_df, sort=True) - previous_data = dict( - date=_trading_date, - code_list=_trading_day_df[_trading_day_df["status"] != -1].index, - ) + previous_data = dict(date=_trading_date, code_list=_trading_day_df[_trading_day_df["status"] != -1].index,) result_df.reset_index(inplace=True) result_df.rename(columns={"date": "datetime", "index": "instrument"}, inplace=True) diff --git a/qlib/contrib/report/analysis_position/rank_label.py b/qlib/contrib/report/analysis_position/rank_label.py index 72a358adc..9a4d834ed 100644 --- a/qlib/contrib/report/analysis_position/rank_label.py +++ b/qlib/contrib/report/analysis_position/rank_label.py @@ -23,11 +23,7 @@ def _get_figure_with_position( :return: """ _position_df = get_position_data( - position, - label_data, - calculate_label_rank=True, - start_date=start_date, - end_date=end_date, + position, label_data, calculate_label_rank=True, start_date=start_date, end_date=end_date, ) res_dict = dict() @@ -51,20 +47,14 @@ def _get_figure_with_position( yield ScatterGraph( _res_df.loc[:, [_col]], layout=dict( - title=_col, - xaxis=dict(type="category", tickangle=45), - yaxis=dict(title="lable-rank-ratio: %"), + title=_col, xaxis=dict(type="category", tickangle=45), yaxis=dict(title="lable-rank-ratio: %"), ), graph_kwargs=dict(mode="lines+markers"), ).figure def rank_label_graph( - position: dict, - label_data: pd.DataFrame, - start_date=None, - end_date=None, - show_notebook=True, + position: dict, label_data: pd.DataFrame, start_date=None, end_date=None, show_notebook=True, ) -> Iterable[go.Figure]: """Ranking percentage of stocks buy, sell, and holding on the trading day. Average rank-ratio(similar to **sell_df['label'].rank(ascending=False) / len(sell_df)**) of daily trading diff --git a/qlib/contrib/report/analysis_position/report.py b/qlib/contrib/report/analysis_position/report.py index f82e654c4..8e2c05c0a 100644 --- a/qlib/contrib/report/analysis_position/report.py +++ b/qlib/contrib/report/analysis_position/report.py @@ -123,9 +123,7 @@ def _report_figure(df: pd.DataFrame) -> [list, tuple]: "y1": 1, "fillcolor": "#d3d3d3", "opacity": 0.3, - "line": { - "width": 0, - }, + "line": {"width": 0,}, }, { "type": "rect", @@ -137,20 +135,13 @@ def _report_figure(df: pd.DataFrame) -> [list, tuple]: "y1": 0.55, "fillcolor": "#d3d3d3", "opacity": 0.3, - "line": { - "width": 0, - }, + "line": {"width": 0,}, }, ], ) _subplot_kwargs = dict( - shared_xaxes=True, - vertical_spacing=0.01, - rows=7, - cols=1, - row_width=[1, 1, 1, 3, 1, 1, 3], - print_grid=False, + shared_xaxes=True, vertical_spacing=0.01, rows=7, cols=1, row_width=[1, 1, 1, 3, 1, 1, 3], print_grid=False, ) figure = SubplotsGraph( df=report_df, diff --git a/qlib/contrib/report/graph.py b/qlib/contrib/report/graph.py index 70e382fb1..dbbc41110 100644 --- a/qlib/contrib/report/graph.py +++ b/qlib/contrib/report/graph.py @@ -311,11 +311,7 @@ class SubplotsGraph: _temp_row_data = ( column_name, dict( - row=row, - col=col, - name=res_name, - kind=self._kind_map["kind"], - graph_kwargs=self._kind_map["kwargs"], + row=row, col=col, name=res_name, kind=self._kind_map["kind"], graph_kwargs=self._kind_map["kwargs"], ), ) self._sub_graph_data.append(_temp_row_data) diff --git a/qlib/contrib/strategy/cost_control.py b/qlib/contrib/strategy/cost_control.py index dd90437b0..ee3ee03ec 100644 --- a/qlib/contrib/strategy/cost_control.py +++ b/qlib/contrib/strategy/cost_control.py @@ -57,10 +57,7 @@ class SoftTopkStrategy(WeightStrategyBase): final_stock_weight[stock_id] -= sw if self.buy_method == "first_fill": for stock_id in buy_signal_stocks: - add_weight = min( - max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), - sold_stock_weight, - ) + add_weight = min(max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), sold_stock_weight,) final_stock_weight[stock_id] = final_stock_weight.get(stock_id, 0.0) + add_weight sold_stock_weight -= add_weight elif self.buy_method == "average_fill": diff --git a/qlib/contrib/strategy/order_generator.py b/qlib/contrib/strategy/order_generator.py index 494981ecc..6f168b4dd 100644 --- a/qlib/contrib/strategy/order_generator.py +++ b/qlib/contrib/strategy/order_generator.py @@ -102,14 +102,10 @@ class OrderGenWInteract(OrderGenerator): # strategy 1 : generate amount_position by weight_position # Use API in Exchange() target_amount_dict = trade_exchange.generate_amount_position_from_weight_position( - weight_position=target_weight_position, - cash=current_tradable_value, - trade_date=trade_date, + weight_position=target_weight_position, cash=current_tradable_value, trade_date=trade_date, ) order_list = trade_exchange.generate_order_for_target_amount_position( - target_position=target_amount_dict, - current_position=current_amount_dict, - trade_date=trade_date, + target_position=target_amount_dict, current_position=current_amount_dict, trade_date=trade_date, ) return order_list @@ -164,8 +160,6 @@ class OrderGenWOInteract(OrderGenerator): else: continue order_list = trade_exchange.generate_order_for_target_amount_position( - target_position=amount_dict, - current_position=current.get_stock_amount_dict(), - trade_date=trade_date, + target_position=amount_dict, current_position=current.get_stock_amount_dict(), trade_date=trade_date, ) return order_list diff --git a/qlib/contrib/tuner/launcher.py b/qlib/contrib/tuner/launcher.py index 711658c9a..409410a2a 100644 --- a/qlib/contrib/tuner/launcher.py +++ b/qlib/contrib/tuner/launcher.py @@ -13,11 +13,7 @@ from .config import TunerConfigManager args_parser = argparse.ArgumentParser(prog="tuner") args_parser.add_argument( - "-c", - "--config_path", - required=True, - type=str, - help="config path indicates where to load yaml config.", + "-c", "--config_path", required=True, type=str, help="config path indicates where to load yaml config.", ) args = args_parser.parse_args() diff --git a/qlib/contrib/tuner/space.py b/qlib/contrib/tuner/space.py index 76f101671..57f57a6c3 100644 --- a/qlib/contrib/tuner/space.py +++ b/qlib/contrib/tuner/space.py @@ -10,8 +10,5 @@ TopkAmountStrategySpace = { } QLibDataLabelSpace = { - "labels": hp.choice( - "labels", - [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]], - ) + "labels": hp.choice("labels", [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]],) } diff --git a/qlib/contrib/tuner/tuner.py b/qlib/contrib/tuner/tuner.py index 2ce957859..e81d41a9a 100644 --- a/qlib/contrib/tuner/tuner.py +++ b/qlib/contrib/tuner/tuner.py @@ -28,10 +28,7 @@ class Tuner: self.optim_config = optim_config self.max_evals = self.tuner_config.get("max_evals", 10) - self.ex_dir = os.path.join( - self.tuner_config["experiment"]["dir"], - self.tuner_config["experiment"]["name"], - ) + self.ex_dir = os.path.join(self.tuner_config["experiment"]["dir"], self.tuner_config["experiment"]["name"],) self.best_params = None self.best_res = None @@ -42,10 +39,7 @@ class Tuner: TimeInspector.set_time_mark() fmin( - fn=self.objective, - space=self.space, - algo=tpe.suggest, - max_evals=self.max_evals, + fn=self.objective, space=self.space, algo=tpe.suggest, max_evals=self.max_evals, ) self.logger.info("Local best params: {} ".format(self.best_params)) TimeInspector.log_cost_time( @@ -159,8 +153,7 @@ class QLibTuner(Tuner): estimator_config["data"]["args"].update(params["data_label_space"]) estimator_path = os.path.join( - self.tuner_config["experiment"].get("dir", "../"), - QLibTuner.ESTIMATOR_CONFIG_NAME, + self.tuner_config["experiment"].get("dir", "../"), QLibTuner.ESTIMATOR_CONFIG_NAME, ) with open(estimator_path, "w") as fp: @@ -173,27 +166,20 @@ class QLibTuner(Tuner): model_space_name = self.tuner_config["model"].get("space", None) if model_space_name is None: raise ValueError("Please give the search space of model.") - model_space = getattr( - importlib.import_module(".space", package="qlib.contrib.tuner"), - model_space_name, - ) + model_space = getattr(importlib.import_module(".space", package="qlib.contrib.tuner"), model_space_name,) # 2. Setup strategy space strategy_space_name = self.tuner_config["strategy"].get("space", None) if strategy_space_name is None: raise ValueError("Please give the search space of strategy.") - strategy_space = getattr( - importlib.import_module(".space", package="qlib.contrib.tuner"), - strategy_space_name, - ) + strategy_space = getattr(importlib.import_module(".space", package="qlib.contrib.tuner"), strategy_space_name,) # 3. Setup data label space if given if self.tuner_config.get("data_label", None) is not None: data_label_space_name = self.tuner_config["data_label"].get("space", None) if data_label_space_name is not None: data_label_space = getattr( - importlib.import_module(".space", package="qlib.contrib.tuner"), - data_label_space_name, + importlib.import_module(".space", package="qlib.contrib.tuner"), data_label_space_name, ) else: data_label_space_name = None diff --git a/qlib/data/client.py b/qlib/data/client.py index 5244a7e45..d1a68cb38 100644 --- a/qlib/data/client.py +++ b/qlib/data/client.py @@ -26,8 +26,7 @@ class Client: self.logger = get_module_logger(self.__class__.__name__) # bind connect/disconnect callbacks self.sio.on( - "connect", - lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), + "connect", lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), ) self.sio.on("disconnect", lambda: self.logger.debug("Disconnect from server!")) diff --git a/qlib/data/data.py b/qlib/data/data.py index 762467da3..47cded79c 100644 --- a/qlib/data/data.py +++ b/qlib/data/data.py @@ -328,14 +328,7 @@ class DatasetProvider(abc.ABC): raise NotImplementedError("Subclass of DatasetProvider must implement `Dataset` method") def _uri( - self, - instruments, - fields, - start_time=None, - end_time=None, - freq="day", - disk_cache=1, - **kwargs, + self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=1, **kwargs, ): """Get task uri, used when generating rabbitmq task in qlib_server @@ -414,29 +407,13 @@ class DatasetProvider(abc.ABC): for inst, spans in instruments_d.items(): data[inst] = p.apply_async( DatasetProvider.expression_calculator, - args=( - inst, - start_time, - end_time, - freq, - normalize_column_names, - spans, - C, - ), + args=(inst, start_time, end_time, freq, normalize_column_names, spans, C,), ) else: for inst in instruments_d: data[inst] = p.apply_async( DatasetProvider.expression_calculator, - args=( - inst, - start_time, - end_time, - freq, - normalize_column_names, - None, - C, - ), + args=(inst, start_time, end_time, freq, normalize_column_names, None, C,), ) p.close() @@ -598,12 +575,7 @@ class LocalInstrumentProvider(InstrumentProvider): start_time = pd.Timestamp(start_time or cal[0]) end_time = pd.Timestamp(end_time or cal[-1]) _instruments_filtered = { - inst: list( - filter( - lambda x: x[0] <= x[1], - [(max(start_time, x[0]), min(end_time, x[1])) for x in spans], - ) - ) + inst: list(filter(lambda x: x[0] <= x[1], [(max(start_time, x[0]), min(end_time, x[1])) for x in spans],)) for inst, spans in _instruments.items() } _instruments_filtered = {key: value for key, value in _instruments_filtered.items() if value} @@ -723,14 +695,7 @@ class LocalDatasetProvider(DatasetProvider): for inst in instruments_d: p.apply_async( - LocalDatasetProvider.cache_walker, - args=( - inst, - start_time, - end_time, - freq, - column_names, - ), + LocalDatasetProvider.cache_walker, args=(inst, start_time, end_time, freq, column_names,), ) p.close() @@ -763,12 +728,7 @@ class ClientCalendarProvider(CalendarProvider): def calendar(self, start_time=None, end_time=None, freq="day", future=False): self.conn.send_request( request_type="calendar", - request_content={ - "start_time": str(start_time), - "end_time": str(end_time), - "freq": freq, - "future": future, - }, + request_content={"start_time": str(start_time), "end_time": str(end_time), "freq": freq, "future": future,}, msg_queue=self.queue, msg_proc_func=lambda response_content: [pd.Timestamp(c) for c in response_content], ) @@ -832,14 +792,7 @@ class ClientDatasetProvider(DatasetProvider): self.queue = queue.Queue() def dataset( - self, - instruments, - fields, - start_time=None, - end_time=None, - freq="day", - disk_cache=0, - return_uri=False, + self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=0, return_uri=False, ): if Inst.get_inst_type(instruments) == Inst.DICT: get_module_logger("data").warning( @@ -942,13 +895,7 @@ class BaseProvider: return Inst.list_instruments(instruments, start_time, end_time, freq, as_list) def features( - self, - instruments, - fields, - start_time=None, - end_time=None, - freq="day", - disk_cache=None, + self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=None, ): """ Parameters: diff --git a/qlib/data/dataset/utils.py b/qlib/data/dataset/utils.py index feda19044..58e2bd968 100644 --- a/qlib/data/dataset/utils.py +++ b/qlib/data/dataset/utils.py @@ -32,10 +32,7 @@ def get_level_index(df: pd.DataFrame, level=Union[str, int]) -> int: def fetch_df_by_index( - df: pd.DataFrame, - selector: Union[pd.Timestamp, slice, str, list], - level: Union[str, int], - fetch_orig=True, + df: pd.DataFrame, selector: Union[pd.Timestamp, slice, str, list], level: Union[str, int], fetch_orig=True, ) -> pd.DataFrame: """ fetch data from `data` with `selector` and `level` diff --git a/qlib/data/filter.py b/qlib/data/filter.py index 70f9d3278..811fd387f 100644 --- a/qlib/data/filter.py +++ b/qlib/data/filter.py @@ -341,12 +341,7 @@ class ExpressionDFilter(SeriesDFilter): # do not use dataset cache try: _features = DatasetD.dataset( - instruments, - [self.rule_expression], - fstart, - fend, - freq=self.filter_freq, - disk_cache=0, + instruments, [self.rule_expression], fstart, fend, freq=self.filter_freq, disk_cache=0, ) except TypeError: # use LocalDatasetProvider diff --git a/qlib/model/riskmodel.py b/qlib/model/riskmodel.py index 8eec73e00..f19c60fc9 100644 --- a/qlib/model/riskmodel.py +++ b/qlib/model/riskmodel.py @@ -38,7 +38,7 @@ class RiskModel(BaseModel): self.scale_return = scale_return def predict( - self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True + self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True ) -> Union[pd.DataFrame, np.ndarray]: """ Args: @@ -373,8 +373,7 @@ class ShrinkCovEstimator(RiskModel): roff1 = np.sum(v1 * cov_mkt[:, None].T) / var_mkt - np.sum(np.diag(v1) * cov_mkt) / var_mkt v3 = z.T.dot(z) / t - var_mkt * S roff3 = ( - np.sum(v3 * np.outer(cov_mkt, cov_mkt)) / var_mkt ** 2 - np.sum( - np.diag(v3) * cov_mkt ** 2) / var_mkt ** 2 + np.sum(v3 * np.outer(cov_mkt, cov_mkt)) / var_mkt ** 2 - np.sum(np.diag(v3) * cov_mkt ** 2) / var_mkt ** 2 ) roff = 2 * roff1 - roff3 rho = rdiag + roff @@ -434,7 +433,7 @@ class POETCovEstimator(RiskModel): if self.num_factors > 0: Dd, V = np.linalg.eig(Y.T.dot(Y)) V = V[:, np.argsort(Dd)] - F = V[:, -self.num_factors:][:, ::-1] * np.sqrt(n) + F = V[:, -self.num_factors :][:, ::-1] * np.sqrt(n) LamPCA = Y.dot(F) / n uhat = np.asarray(Y - LamPCA.dot(F.T)) Lowrank = np.asarray(LamPCA.dot(LamPCA.T)) @@ -490,8 +489,14 @@ class StructuredCovEstimator(RiskModel): FACTOR_MODEL_PCA = "pca" FACTOR_MODEL_FA = "fa" - def __init__(self, factor_model: str = 'pca', num_factors: int = 10, nan_option: str = "ignore", - assume_centered: bool = False, scale_return: bool = True): + def __init__( + self, + factor_model: str = "pca", + num_factors: int = 10, + nan_option: str = "ignore", + assume_centered: bool = False, + scale_return: bool = True, + ): """ Args: factor_model (str): the latent factor models used to estimate the structured covariance (`pca`/`fa`). @@ -505,14 +510,17 @@ class StructuredCovEstimator(RiskModel): assert factor_model in [ self.FACTOR_MODEL_PCA, self.FACTOR_MODEL_FA, - ], 'factor_model={} is not supported'.format(factor_model) + ], "factor_model={} is not supported".format(factor_model) self.solver = PCA if factor_model == self.FACTOR_MODEL_PCA else FactorAnalysis self.num_factors = num_factors def predict( - self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True, - return_decomposed_components=False + self, + X: Union[pd.Series, pd.DataFrame, np.ndarray], + return_corr: bool = False, + is_price: bool = True, + return_decomposed_components=False, ) -> Union[pd.DataFrame, np.ndarray, tuple]: """ Args: @@ -525,8 +533,9 @@ class StructuredCovEstimator(RiskModel): Returns: tuple or pd.DataFrame or np.ndarray: decomposed covariance matrix or estimated covariance or correlation. """ - assert not return_corr or not return_decomposed_components, \ - 'Can only return either correlation matrix or decomposed components.' + assert ( + not return_corr or not return_decomposed_components + ), "Can only return either correlation matrix or decomposed components." # transform input into 2D array if not isinstance(X, (pd.Series, pd.DataFrame)): diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer.py index 728a04ea9..391242127 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer.py @@ -38,13 +38,13 @@ class PortfolioOptimizer(BaseOptimizer): OPT_INV = "inv" def __init__( - self, - method: str = "inv", - lamb: float = 0, - delta: float = 0, - alpha: float = 0.0, - scale_alpha: bool = True, - tol: float = 1e-8, + self, + method: str = "inv", + lamb: float = 0, + delta: float = 0, + alpha: float = 0.0, + scale_alpha: bool = True, + tol: float = 1e-8, ): """ Args: @@ -71,10 +71,10 @@ class PortfolioOptimizer(BaseOptimizer): self.scale_alpha = scale_alpha def __call__( - self, - S: Union[np.ndarray, pd.DataFrame], - u: Optional[Union[np.ndarray, pd.Series]] = None, - w0: Optional[Union[np.ndarray, pd.Series]] = None, + self, + S: Union[np.ndarray, pd.DataFrame], + u: Optional[Union[np.ndarray, pd.Series]] = None, + w0: Optional[Union[np.ndarray, pd.Series]] = None, ) -> Union[np.ndarray, pd.Series]: """ Args: @@ -163,7 +163,7 @@ class PortfolioOptimizer(BaseOptimizer): return self._solve(len(S), self._get_objective_gmv(S), *self._get_constrains(w0)) def _optimize_mvo( - self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None + self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None ) -> np.ndarray: """optimize mean-variance portfolio @@ -259,6 +259,7 @@ class PortfolioOptimizer(BaseOptimizer): # add l2 regularization wrapped_obj = obj if self.alpha > 0: + def opt_obj(x): return obj(x) + self.alpha * np.sum(np.square(x)) @@ -281,12 +282,21 @@ class EnhancedIndexingOptimizer(BaseOptimizer): This optimizer always assumes full investment and no-shorting. """ - START_FROM_W0 = 'w0' - START_FROM_BENCH = 'benchmark' - DO_NOT_START_FROM = 'no_warm_start' + START_FROM_W0 = "w0" + START_FROM_BENCH = "benchmark" + DO_NOT_START_FROM = "no_warm_start" - def __init__(self, lamb: float = 10, delta: float = 0.4, bench_dev: float = 0.01, inds_dev: float = 0.01, - scale_alpha=True, verbose: bool = False, warm_start: str = DO_NOT_START_FROM, max_iters: int = 10000): + def __init__( + self, + lamb: float = 10, + delta: float = 0.4, + bench_dev: float = 0.01, + inds_dev: float = 0.01, + scale_alpha=True, + verbose: bool = False, + warm_start: str = DO_NOT_START_FROM, + max_iters: int = 10000, + ): """ Args: lamb (float): risk aversion parameter (larger `lamb` means less focus on return) @@ -310,18 +320,28 @@ class EnhancedIndexingOptimizer(BaseOptimizer): assert inds_dev >= 0, "industry deviation limit `inds_dev` should be positive" self.inds_dev = inds_dev - assert warm_start in [self.DO_NOT_START_FROM, self.START_FROM_W0, - self.START_FROM_BENCH], "illegal warm start option" - self.start_from_w0 = (warm_start == self.START_FROM_W0) - self.start_from_bench = (warm_start == self.START_FROM_BENCH) + assert warm_start in [ + self.DO_NOT_START_FROM, + self.START_FROM_W0, + self.START_FROM_BENCH, + ], "illegal warm start option" + self.start_from_w0 = warm_start == self.START_FROM_W0 + self.start_from_bench = warm_start == self.START_FROM_BENCH self.scale_alpha = scale_alpha self.verbose = verbose self.max_iters = max_iters - def __call__(self, u: np.ndarray, F: np.ndarray, covB: np.ndarray, varU: np.ndarray, w0: np.ndarray, - w_bench: np.ndarray, inds_onehot: np.ndarray - ) -> Union[np.ndarray, pd.Series]: + def __call__( + self, + u: np.ndarray, + F: np.ndarray, + covB: np.ndarray, + varU: np.ndarray, + w0: np.ndarray, + w_bench: np.ndarray, + inds_onehot: np.ndarray, + ) -> Union[np.ndarray, pd.Series]: """ Args: u (np.ndarray): expected returns (a.k.a., alpha) @@ -352,7 +372,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): d_bench >= -self.bench_dev, d_bench <= self.bench_dev, d_inds >= -self.inds_dev, - d_inds <= self.inds_dev + d_inds <= self.inds_dev, ] if w0 is not None: turnover = cp.sum(cp.abs(w - w0)) @@ -361,7 +381,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): warm_start = False if self.start_from_w0: if w0 is None: - print('Warning: try warm start with w0, but w0 is `None`.') + print("Warning: try warm start with w0, but w0 is `None`.") else: w.value = w0 warm_start = True @@ -372,7 +392,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): prob = cp.Problem(obj, cons) prob.solve(solver=cp.SCS, verbose=self.verbose, warm_start=warm_start, max_iters=self.max_iters) - if prob.status != 'optimal': - print('Warning: solve failed.', prob.status) + if prob.status != "optimal": + print("Warning: solve failed.", prob.status) return np.asarray(w.value) diff --git a/qlib/tests/__init__.py b/qlib/tests/__init__.py index f92e72787..eb6f9c5ed 100644 --- a/qlib/tests/__init__.py +++ b/qlib/tests/__init__.py @@ -18,10 +18,6 @@ class TestAutoData(unittest.TestCase): print(f"Qlib data is not found in {provider_uri}") GetData().qlib_data( - name="qlib_data_simple", - region="cn", - interval="1d", - target_dir=provider_uri, - delete_old=False, + name="qlib_data_simple", region="cn", interval="1d", target_dir=provider_uri, delete_old=False, ) init(provider_uri=provider_uri, region=REG_CN, **cls._setup_kwargs) diff --git a/qlib/workflow/record_temp.py b/qlib/workflow/record_temp.py index be458a24d..0c704b896 100644 --- a/qlib/workflow/record_temp.py +++ b/qlib/workflow/record_temp.py @@ -193,10 +193,7 @@ class SigAnaRecord(SignalRecord): } ) objects.update( - { - "long_short_r.pkl": long_short_r, - "long_avg_r.pkl": long_avg_r, - } + {"long_short_r.pkl": long_short_r, "long_avg_r.pkl": long_avg_r,} ) self.recorder.log_metrics(**metrics) self.recorder.save_objects(**objects, artifact_path=self.get_path()) diff --git a/scripts/data_collector/yahoo/collector.py b/scripts/data_collector/yahoo/collector.py index 743f89462..24526e332 100644 --- a/scripts/data_collector/yahoo/collector.py +++ b/scripts/data_collector/yahoo/collector.py @@ -39,13 +39,7 @@ class YahooData: INTERVAL_1d = "1d" def __init__( - self, - timezone: str = None, - start=None, - end=None, - interval="1d", - delay=0, - show_1min_logging: bool = False, + self, timezone: str = None, start=None, end=None, interval="1d", delay=0, show_1min_logging: bool = False, ): """ @@ -125,11 +119,7 @@ class YahooData: self._sleep() _remote_interval = "1m" if self._interval == self.INTERVAL_1min else self._interval return self.get_data_from_remote( - symbol, - interval=_remote_interval, - start=start_, - end=end_, - show_1min_logging=self._show_1min_logging, + symbol, interval=_remote_interval, start=start_, end=end_, show_1min_logging=self._show_1min_logging, ) _result = None @@ -438,9 +428,7 @@ class YahooNormalize: DAILY_FORMAT = "%Y-%m-%d" def __init__( - self, - date_field_name: str = "date", - symbol_field_name: str = "symbol", + self, date_field_name: str = "date", symbol_field_name: str = "symbol", ): """ @@ -458,10 +446,7 @@ class YahooNormalize: @staticmethod def normalize_yahoo( - df: pd.DataFrame, - calendar_list: list = None, - date_field_name: str = "date", - symbol_field_name: str = "symbol", + df: pd.DataFrame, calendar_list: list = None, date_field_name: str = "date", symbol_field_name: str = "symbol", ): if df.empty: return df @@ -566,9 +551,7 @@ class YahooNormalize1min(YahooNormalize, ABC): CONSISTENT_1d = False def __init__( - self, - date_field_name: str = "date", - symbol_field_name: str = "symbol", + self, date_field_name: str = "date", symbol_field_name: str = "symbol", ): """ diff --git a/scripts/dump_bin.py b/scripts/dump_bin.py index 4811fd486..ab24fa9ca 100644 --- a/scripts/dump_bin.py +++ b/scripts/dump_bin.py @@ -153,22 +153,13 @@ class DumpDataBase: @staticmethod def _read_calendars(calendar_path: Path) -> List[pd.Timestamp]: - return sorted( - map( - pd.Timestamp, - pd.read_csv(calendar_path, header=None).loc[:, 0].tolist(), - ) - ) + return sorted(map(pd.Timestamp, pd.read_csv(calendar_path, header=None).loc[:, 0].tolist(),)) def _read_instruments(self, instrument_path: Path) -> pd.DataFrame: df = pd.read_csv( instrument_path, sep=self.INSTRUMENTS_SEP, - names=[ - self.symbol_field_name, - self.INSTRUMENTS_START_FIELD, - self.INSTRUMENTS_END_FIELD, - ], + names=[self.symbol_field_name, self.INSTRUMENTS_START_FIELD, self.INSTRUMENTS_END_FIELD,], ) return df diff --git a/setup.py b/setup.py index 6582054b9..d8a9d9efa 100644 --- a/setup.py +++ b/setup.py @@ -55,7 +55,7 @@ REQUIRED = [ "tornado", "joblib>=0.17.0", "ruamel.yaml>=0.16.12", - "scikit-learn>=0.22" + "scikit-learn>=0.22", ] # Numpy include @@ -70,16 +70,10 @@ with open(os.path.join(here, "README.md"), encoding="utf-8") as f: # Cython Extensions extensions = [ Extension( - "qlib.data._libs.rolling", - ["qlib/data/_libs/rolling.pyx"], - language="c++", - include_dirs=[NUMPY_INCLUDE], + "qlib.data._libs.rolling", ["qlib/data/_libs/rolling.pyx"], language="c++", include_dirs=[NUMPY_INCLUDE], ), Extension( - "qlib.data._libs.expanding", - ["qlib/data/_libs/expanding.pyx"], - language="c++", - include_dirs=[NUMPY_INCLUDE], + "qlib.data._libs.expanding", ["qlib/data/_libs/expanding.pyx"], language="c++", include_dirs=[NUMPY_INCLUDE], ), ] @@ -98,9 +92,7 @@ setup( # py_modules=['qlib'], entry_points={ # 'console_scripts': ['mycli=mymodule:cli'], - "console_scripts": [ - "qrun=qlib.workflow.cli:run", - ], + "console_scripts": ["qrun=qlib.workflow.cli:run",], }, ext_modules=extensions, install_requires=REQUIRED, diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py index f6e77cba4..8b3819c83 100644 --- a/tests/test_all_pipeline.py +++ b/tests/test_all_pipeline.py @@ -78,10 +78,7 @@ port_analysis_config = { "strategy": { "class": "TopkDropoutStrategy", "module_path": "qlib.contrib.strategy.strategy", - "kwargs": { - "topk": 50, - "n_drop": 5, - }, + "kwargs": {"topk": 50, "n_drop": 5,}, }, "backtest": { "verbose": False, @@ -176,9 +173,7 @@ class TestAllFlow(TestAutoData): def test_1_backtest(self): analyze_df = backtest_analysis(TestAllFlow.PRED_SCORE, TestAllFlow.RID) self.assertGreaterEqual( - analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], - 0.10, - "backtest failed", + analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], 0.10, "backtest failed", ) diff --git a/tests/test_dump_data.py b/tests/test_dump_data.py index dfa7f8556..de649c37e 100644 --- a/tests/test_dump_data.py +++ b/tests/test_dump_data.py @@ -40,9 +40,7 @@ class TestDumpData(unittest.TestCase): TestDumpData.STOCK_NAMES = list(map(lambda x: x.name[:-4].upper(), SOURCE_DIR.glob("*.csv"))) provider_uri = str(QLIB_DIR.resolve()) qlib.init( - provider_uri=provider_uri, - expression_cache=None, - dataset_cache=None, + provider_uri=provider_uri, expression_cache=None, dataset_cache=None, ) @classmethod @@ -54,10 +52,7 @@ class TestDumpData(unittest.TestCase): def test_1_dump_calendars(self): ori_calendars = set( - map( - pd.Timestamp, - pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values, - ) + map(pd.Timestamp, pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values,) ) res_calendars = set(D.calendar()) assert len(ori_calendars - res_calendars) == len(res_calendars - ori_calendars) == 0, "dump calendars failed" diff --git a/tests/test_get_data.py b/tests/test_get_data.py index c511d1b91..d5637b025 100644 --- a/tests/test_get_data.py +++ b/tests/test_get_data.py @@ -26,9 +26,7 @@ class TestGetData(unittest.TestCase): def setUpClass(cls) -> None: provider_uri = str(QLIB_DIR.resolve()) qlib.init( - provider_uri=provider_uri, - expression_cache=None, - dataset_cache=None, + provider_uri=provider_uri, expression_cache=None, dataset_cache=None, ) @classmethod From 37871389b98fe34da35cdd2e996469ac3c7434ff Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 11:25:42 +0800 Subject: [PATCH 021/134] Format code with the latest version of black. --- qlib/config.py | 24 +++++-- qlib/contrib/backtest/__init__.py | 18 ++++- qlib/contrib/backtest/profit_attribution.py | 23 +++++-- qlib/contrib/data/handler.py | 10 ++- qlib/contrib/eva/alpha.py | 6 +- qlib/contrib/evaluate.py | 7 +- qlib/contrib/evaluate_portfolio.py | 16 ++++- qlib/contrib/model/catboost_model.py | 4 +- qlib/contrib/model/pytorch_alstm.py | 21 ++++-- qlib/contrib/model/pytorch_alstm_ts.py | 17 +++-- qlib/contrib/model/pytorch_gats.py | 22 ++++-- qlib/contrib/model/pytorch_gats_ts.py | 18 ++++- qlib/contrib/model/pytorch_gru.py | 21 ++++-- qlib/contrib/model/pytorch_gru_ts.py | 17 ++++- qlib/contrib/model/pytorch_lstm.py | 21 ++++-- qlib/contrib/model/pytorch_lstm_ts.py | 17 ++++- qlib/contrib/model/pytorch_nn.py | 6 +- qlib/contrib/model/pytorch_sfm.py | 19 ++++- qlib/contrib/model/pytorch_tabnet.py | 14 +++- qlib/contrib/model/xgboost.py | 4 +- qlib/contrib/online/executor.py | 24 +++++-- qlib/contrib/online/manager.py | 6 +- qlib/contrib/online/operator.py | 8 ++- qlib/contrib/online/utils.py | 6 +- .../analysis_model_performance.py | 66 ++++++++++++++---- .../analysis_position/cumulative_return.py | 36 ++++++++-- .../analysis_position/parse_position.py | 5 +- .../report/analysis_position/rank_label.py | 16 ++++- .../report/analysis_position/report.py | 15 +++- qlib/contrib/report/graph.py | 6 +- qlib/contrib/strategy/cost_control.py | 5 +- qlib/contrib/strategy/order_generator.py | 12 +++- qlib/contrib/tuner/launcher.py | 6 +- qlib/contrib/tuner/space.py | 5 +- qlib/contrib/tuner/tuner.py | 26 +++++-- qlib/data/client.py | 3 +- qlib/data/data.py | 69 ++++++++++++++++--- qlib/data/dataset/utils.py | 5 +- qlib/data/filter.py | 7 +- qlib/tests/__init__.py | 6 +- qlib/workflow/record_temp.py | 5 +- 41 files changed, 526 insertions(+), 116 deletions(-) diff --git a/qlib/config.py b/qlib/config.py index 344eb8527..52b05568d 100644 --- a/qlib/config.py +++ b/qlib/config.py @@ -115,7 +115,12 @@ _default_config = { "format": "[%(process)s:%(threadName)s](%(asctime)s) %(levelname)s - %(name)s - [%(filename)s:%(lineno)d] - %(message)s" } }, - "filters": {"field_not_found": {"()": "qlib.log.LogFilter", "param": [".*?WARN: data not found for.*?"],}}, + "filters": { + "field_not_found": { + "()": "qlib.log.LogFilter", + "param": [".*?WARN: data not found for.*?"], + } + }, "handlers": { "console": { "class": "logging.StreamHandler", @@ -130,7 +135,10 @@ _default_config = { "exp_manager": { "class": "MLflowExpManager", "module_path": "qlib.workflow.expm", - "kwargs": {"uri": "file:" + str(Path(os.getcwd()).resolve() / "mlruns"), "default_exp_name": "Experiment",}, + "kwargs": { + "uri": "file:" + str(Path(os.getcwd()).resolve() / "mlruns"), + "default_exp_name": "Experiment", + }, }, } @@ -192,8 +200,16 @@ HIGH_FREQ_CONFIG = { } _default_region_config = { - REG_CN: {"trade_unit": 100, "limit_threshold": 0.099, "deal_price": "vwap",}, - REG_US: {"trade_unit": 1, "limit_threshold": None, "deal_price": "close",}, + REG_CN: { + "trade_unit": 100, + "limit_threshold": 0.099, + "deal_price": "vwap", + }, + REG_US: { + "trade_unit": 1, + "limit_threshold": None, + "deal_price": "close", + }, } diff --git a/qlib/contrib/backtest/__init__.py b/qlib/contrib/backtest/__init__.py index bd3494abf..aa24ffb0c 100644 --- a/qlib/contrib/backtest/__init__.py +++ b/qlib/contrib/backtest/__init__.py @@ -18,7 +18,13 @@ logger = get_module_logger("backtest caller") def get_strategy( - strategy=None, topk=50, margin=0.5, n_drop=5, risk_degree=0.95, str_type="dropout", adjust_dates=None, + strategy=None, + topk=50, + margin=0.5, + n_drop=5, + risk_degree=0.95, + str_type="dropout", + adjust_dates=None, ): """get_strategy @@ -69,7 +75,11 @@ def get_strategy( str_cls = getattr(strategy_pool, str_cls_dict.get(str_type)) strategy = str_cls( - topk=topk, buffer_margin=margin, n_drop=n_drop, risk_degree=risk_degree, adjust_dates=adjust_dates, + topk=topk, + buffer_margin=margin, + n_drop=n_drop, + risk_degree=risk_degree, + adjust_dates=adjust_dates, ) elif isinstance(strategy, (dict, str)): # 2) create strategy with init_instance_by_config @@ -162,7 +172,9 @@ def get_exchange( def get_executor( - executor=None, trade_exchange=None, verbose=True, + executor=None, + trade_exchange=None, + verbose=True, ): """get_executor diff --git a/qlib/contrib/backtest/profit_attribution.py b/qlib/contrib/backtest/profit_attribution.py index 355f06373..20c6f638f 100644 --- a/qlib/contrib/backtest/profit_attribution.py +++ b/qlib/contrib/backtest/profit_attribution.py @@ -12,7 +12,10 @@ from pathlib import Path def get_benchmark_weight( - bench, start_date=None, end_date=None, path=None, + bench, + start_date=None, + end_date=None, + path=None, ): """get_benchmark_weight @@ -213,7 +216,12 @@ def get_stock_group(stock_group_field_df, bench_stock_weight_df, group_method, g def brinson_pa( - positions, bench="SH000905", group_field="industry", group_method="category", group_n=None, deal_price="vwap", + positions, + bench="SH000905", + group_field="industry", + group_method="category", + group_n=None, + deal_price="vwap", ): """brinson profit attribution @@ -247,10 +255,17 @@ def brinson_pa( # suspend stock is NAN. So we have to get more date to forward fill the NAN shift_start_date = start_date - datetime.timedelta(days=250) instruments = D.list_instruments( - D.instruments(market="all"), start_time=shift_start_date, end_time=end_date, as_list=True, + D.instruments(market="all"), + start_time=shift_start_date, + end_time=end_date, + as_list=True, ) stock_df = D.features( - instruments, [group_field, deal_price], start_time=shift_start_date, end_time=end_date, freq="day", + instruments, + [group_field, deal_price], + start_time=shift_start_date, + end_time=end_date, + freq="day", ) stock_df.columns = [group_field, "deal_price"] diff --git a/qlib/contrib/data/handler.py b/qlib/contrib/data/handler.py index 574287819..970b032d6 100644 --- a/qlib/contrib/data/handler.py +++ b/qlib/contrib/data/handler.py @@ -21,7 +21,10 @@ def check_transform_proc(proc_l, fit_start_time, fit_end_time): fit_start_time is not None and fit_end_time is not None ), "Make sure `fit_start_time` and `fit_end_time` are not None." pkwargs.update( - {"fit_start_time": fit_start_time, "fit_end_time": fit_end_time,} + { + "fit_start_time": fit_start_time, + "fit_end_time": fit_end_time, + } ) new_l.append({"class": klass.__name__, "kwargs": pkwargs}) else: @@ -167,7 +170,10 @@ class Alpha158(DataHandlerLP): def get_feature_config(self): conf = { "kbar": {}, - "price": {"windows": [0], "feature": ["OPEN", "HIGH", "LOW", "VWAP"],}, + "price": { + "windows": [0], + "feature": ["OPEN", "HIGH", "LOW", "VWAP"], + }, "rolling": {}, } return self.parse_config_to_fields(conf) diff --git a/qlib/contrib/eva/alpha.py b/qlib/contrib/eva/alpha.py index 363a18458..c68571853 100644 --- a/qlib/contrib/eva/alpha.py +++ b/qlib/contrib/eva/alpha.py @@ -35,7 +35,11 @@ def calc_ic(pred: pd.Series, label: pd.Series, date_col="datetime", dropna=False def calc_long_short_return( - pred: pd.Series, label: pd.Series, date_col: str = "datetime", quantile: float = 0.2, dropna: bool = False, + pred: pd.Series, + label: pd.Series, + date_col: str = "datetime", + quantile: float = 0.2, + dropna: bool = False, ) -> Tuple[pd.Series, pd.Series]: """ calculate long-short return diff --git a/qlib/contrib/evaluate.py b/qlib/contrib/evaluate.py index 5cb1ce4eb..4aa5b5515 100644 --- a/qlib/contrib/evaluate.py +++ b/qlib/contrib/evaluate.py @@ -244,7 +244,12 @@ def long_short_backtest( short_returns[date] = np.mean(short_profit) + np.mean(all_profit) ls_returns[date] = np.mean(short_profit) + np.mean(long_profit) - return dict(zip(["long", "short", "long_short"], map(pd.Series, [long_returns, short_returns, ls_returns]),)) + return dict( + zip( + ["long", "short", "long_short"], + map(pd.Series, [long_returns, short_returns, ls_returns]), + ) + ) def t_run(): diff --git a/qlib/contrib/evaluate_portfolio.py b/qlib/contrib/evaluate_portfolio.py index 2d94105e4..04ddd8db0 100644 --- a/qlib/contrib/evaluate_portfolio.py +++ b/qlib/contrib/evaluate_portfolio.py @@ -64,7 +64,12 @@ def get_position_value(evaluate_date, position): instruments = list(set(instruments) - set(["cash"])) # filter 'cash' fields = ["$close"] close_data_df = D.features( - instruments, fields, start_time=evaluate_date, end_time=evaluate_date, freq="day", disk_cache=0, + instruments, + fields, + start_time=evaluate_date, + end_time=evaluate_date, + freq="day", + disk_cache=0, ) value = _get_position_value_from_df(evaluate_date, position, close_data_df) return value @@ -82,7 +87,14 @@ def get_position_list_value(positions): start_date, end_date = day_list[0], day_list[-1] # load data fields = ["$close"] - close_data_df = D.features(instruments, fields, start_time=start_date, end_time=end_date, freq="day", disk_cache=0,) + close_data_df = D.features( + instruments, + fields, + start_time=start_date, + end_time=end_date, + freq="day", + disk_cache=0, + ) # generate value # return dict for time:position_value value_dict = OrderedDict() diff --git a/qlib/contrib/model/catboost_model.py b/qlib/contrib/model/catboost_model.py index 2840c2cef..d57c32b70 100644 --- a/qlib/contrib/model/catboost_model.py +++ b/qlib/contrib/model/catboost_model.py @@ -32,7 +32,9 @@ class CatBoostModel(Model): **kwargs ): df_train, df_valid = dataset.prepare( - ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/model/pytorch_alstm.py b/qlib/contrib/model/pytorch_alstm.py index 306e68aad..bbbb61851 100644 --- a/qlib/contrib/model/pytorch_alstm.py +++ b/qlib/contrib/model/pytorch_alstm.py @@ -118,7 +118,10 @@ class ALSTM(Model): torch.manual_seed(self.seed) self.ALSTM_model = ALSTMModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) @@ -208,11 +211,17 @@ class ALSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -319,12 +328,14 @@ class ALSTMModel(nn.Module): self.fc_out = nn.Linear(in_features=self.hid_size * 2, out_features=1) self.att_net = nn.Sequential() self.att_net.add_module( - "att_fc_in", nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), + "att_fc_in", + nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), ) self.att_net.add_module("att_dropout", torch.nn.Dropout(self.dropout)) self.att_net.add_module("att_act", nn.Tanh()) self.att_net.add_module( - "att_fc_out", nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), + "att_fc_out", + nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), ) self.att_net.add_module("att_softmax", nn.Softmax(dim=1)) diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 612bacbec..725568de8 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -123,7 +123,10 @@ class ALSTM(Model): torch.manual_seed(self.seed) self.ALSTM_model = ALSTMModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) @@ -195,7 +198,11 @@ class ALSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset, evals_result=dict(), verbose=True, save_path=None, + self, + dataset, + evals_result=dict(), + verbose=True, + save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -302,12 +309,14 @@ class ALSTMModel(nn.Module): self.fc_out = nn.Linear(in_features=self.hid_size * 2, out_features=1) self.att_net = nn.Sequential() self.att_net.add_module( - "att_fc_in", nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), + "att_fc_in", + nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), ) self.att_net.add_module("att_dropout", torch.nn.Dropout(self.dropout)) self.att_net.add_module("att_act", nn.Tanh()) self.att_net.add_module( - "att_fc_out", nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), + "att_fc_out", + nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), ) self.att_net.add_module("att_softmax", nn.Softmax(dim=1)) diff --git a/qlib/contrib/model/pytorch_gats.py b/qlib/contrib/model/pytorch_gats.py index c59dc9197..07048e1bc 100644 --- a/qlib/contrib/model/pytorch_gats.py +++ b/qlib/contrib/model/pytorch_gats.py @@ -229,11 +229,17 @@ class GATs(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -334,11 +340,19 @@ class GATModel(nn.Module): if base_model == "GRU": self.rnn = nn.GRU( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) elif base_model == "LSTM": self.rnn = nn.LSTM( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) else: raise ValueError("unknown base model name `%s`" % base_model) diff --git a/qlib/contrib/model/pytorch_gats_ts.py b/qlib/contrib/model/pytorch_gats_ts.py index dfc5f4ab5..1e94f56e4 100644 --- a/qlib/contrib/model/pytorch_gats_ts.py +++ b/qlib/contrib/model/pytorch_gats_ts.py @@ -242,7 +242,11 @@ class GATs(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset, evals_result=dict(), verbose=True, save_path=None, + self, + dataset, + evals_result=dict(), + verbose=True, + save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -357,11 +361,19 @@ class GATModel(nn.Module): if base_model == "GRU": self.rnn = nn.GRU( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) elif base_model == "LSTM": self.rnn = nn.LSTM( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) else: raise ValueError("unknown base model name `%s`" % base_model) diff --git a/qlib/contrib/model/pytorch_gru.py b/qlib/contrib/model/pytorch_gru.py index d2a774b65..84f863b9f 100755 --- a/qlib/contrib/model/pytorch_gru.py +++ b/qlib/contrib/model/pytorch_gru.py @@ -118,7 +118,10 @@ class GRU(Model): torch.manual_seed(self.seed) self.gru_model = GRUModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.gru_model.parameters(), lr=self.lr) @@ -208,11 +211,17 @@ class GRU(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -296,7 +305,11 @@ class GRUModel(nn.Module): super().__init__() self.rnn = nn.GRU( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index 49f438cc3..bb6618b85 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -123,7 +123,10 @@ class GRU(Model): torch.manual_seed(self.seed) self.GRU_model = GRUModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.GRU_model.parameters(), lr=self.lr) @@ -195,7 +198,11 @@ class GRU(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset, evals_result=dict(), verbose=True, save_path=None, + self, + dataset, + evals_result=dict(), + verbose=True, + save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -279,7 +286,11 @@ class GRUModel(nn.Module): super().__init__() self.rnn = nn.GRU( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_lstm.py b/qlib/contrib/model/pytorch_lstm.py index 02ca16e36..163d500ec 100755 --- a/qlib/contrib/model/pytorch_lstm.py +++ b/qlib/contrib/model/pytorch_lstm.py @@ -118,7 +118,10 @@ class LSTM(Model): torch.manual_seed(self.seed) self.lstm_model = LSTMModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.lstm_model.parameters(), lr=self.lr) @@ -208,11 +211,17 @@ class LSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -296,7 +305,11 @@ class LSTMModel(nn.Module): super().__init__() self.rnn = nn.LSTM( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_lstm_ts.py b/qlib/contrib/model/pytorch_lstm_ts.py index 2ec36f96e..cf4f8fb9f 100755 --- a/qlib/contrib/model/pytorch_lstm_ts.py +++ b/qlib/contrib/model/pytorch_lstm_ts.py @@ -123,7 +123,10 @@ class LSTM(Model): torch.manual_seed(self.seed) self.LSTM_model = LSTMModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.LSTM_model.parameters(), lr=self.lr) @@ -195,7 +198,11 @@ class LSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset, evals_result=dict(), verbose=True, save_path=None, + self, + dataset, + evals_result=dict(), + verbose=True, + save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -279,7 +286,11 @@ class LSTMModel(nn.Module): super().__init__() self.rnn = nn.LSTM( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_nn.py b/qlib/contrib/model/pytorch_nn.py index 8c1a77ec3..16fcea9ff 100644 --- a/qlib/contrib/model/pytorch_nn.py +++ b/qlib/contrib/model/pytorch_nn.py @@ -154,7 +154,11 @@ class DNNModelPytorch(Model): self.dnn_model.to(self.device) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid = dataset.prepare( ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L diff --git a/qlib/contrib/model/pytorch_sfm.py b/qlib/contrib/model/pytorch_sfm.py index 1f7433e05..d5169e6c7 100644 --- a/qlib/contrib/model/pytorch_sfm.py +++ b/qlib/contrib/model/pytorch_sfm.py @@ -30,7 +30,14 @@ from ...data.dataset.handler import DataHandlerLP class SFM_Model(nn.Module): def __init__( - self, d_feat=6, output_dim=1, freq_dim=10, hidden_size=64, dropout_W=0.0, dropout_U=0.0, device="cpu", + self, + d_feat=6, + output_dim=1, + freq_dim=10, + hidden_size=64, + dropout_W=0.0, + dropout_U=0.0, + device="cpu", ): super().__init__() @@ -355,11 +362,17 @@ class SFM(Model): self.train_optimizer.step() def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid = dataset.prepare( - ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index 18e9d8eb4..62e32d701 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -120,7 +120,9 @@ class TabnetModel(Model): os.makedirs("pretrain") [df_train, df_valid] = dataset.prepare( - ["pretrain", "pretrain_validation"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["pretrain", "pretrain_validation"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) df_train.fillna(df_train.mean(), inplace=True) @@ -154,7 +156,11 @@ class TabnetModel(Model): break def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): if self.pretrain: # there is a pretrained model, load the model @@ -166,7 +172,9 @@ class TabnetModel(Model): # adding one more linear layer to fit the final output dimension self.tabnet_model = FinetuneModel(self.out_dim, self.final_out_dim, self.tabnet_model).to(self.device) df_train, df_valid = dataset.prepare( - ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) df_train.fillna(df_train.mean(), inplace=True) x_train, y_train = df_train["feature"], df_train["label"] diff --git a/qlib/contrib/model/xgboost.py b/qlib/contrib/model/xgboost.py index e37725c2e..ba2e5789b 100755 --- a/qlib/contrib/model/xgboost.py +++ b/qlib/contrib/model/xgboost.py @@ -29,7 +29,9 @@ class XGBModel(Model): ): df_train, df_valid = dataset.prepare( - ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/online/executor.py b/qlib/contrib/online/executor.py index 52b868881..2bd0937a0 100644 --- a/qlib/contrib/online/executor.py +++ b/qlib/contrib/online/executor.py @@ -150,13 +150,21 @@ class SimulatorExecutor(BaseExecutor): if order.direction == Order.SELL: # sell print( "[I {:%Y-%m-%d}]: sell {}, price {:.2f}, amount {}, value {:.2f}.".format( - trade_date, order.stock_id, trade_price, order.deal_amount, trade_val, + trade_date, + order.stock_id, + trade_price, + order.deal_amount, + trade_val, ) ) else: print( "[I {:%Y-%m-%d}]: buy {}, price {:.2f}, amount {}, value {:.2f}.".format( - trade_date, order.stock_id, trade_price, order.deal_amount, trade_val, + trade_date, + order.stock_id, + trade_price, + order.deal_amount, + trade_val, ) ) @@ -263,13 +271,21 @@ def load_order_list(user_path, trade_date): for stock_id in order_dict["sell"]: amount, factor = order_dict["sell"][stock_id] order = Order( - stock_id=stock_id, amount=amount, trade_date=pd.Timestamp(trade_date), direction=Order.SELL, factor=factor, + stock_id=stock_id, + amount=amount, + trade_date=pd.Timestamp(trade_date), + direction=Order.SELL, + factor=factor, ) order_list.append(order) for stock_id in order_dict["buy"]: amount, factor = order_dict["buy"][stock_id] order = Order( - stock_id=stock_id, amount=amount, trade_date=pd.Timestamp(trade_date), direction=Order.BUY, factor=factor, + stock_id=stock_id, + amount=amount, + trade_date=pd.Timestamp(trade_date), + direction=Order.BUY, + factor=factor, ) order_list.append(order) return order_list diff --git a/qlib/contrib/online/manager.py b/qlib/contrib/online/manager.py index a4476709d..cf850b9da 100644 --- a/qlib/contrib/online/manager.py +++ b/qlib/contrib/online/manager.py @@ -84,10 +84,12 @@ class UserManager: raise ValueError("Cannot find user {}".format(user_id)) self.users[user_id].account.save_account(self.data_path / user_id) save_instance( - self.users[user_id].strategy, self.data_path / user_id / "strategy_{}.pickle".format(user_id), + self.users[user_id].strategy, + self.data_path / user_id / "strategy_{}.pickle".format(user_id), ) save_instance( - self.users[user_id].model, self.data_path / user_id / "model_{}.pickle".format(user_id), + self.users[user_id].model, + self.data_path / user_id / "model_{}.pickle".format(user_id), ) def add_user(self, user_id, config_file, add_date): diff --git a/qlib/contrib/online/operator.py b/qlib/contrib/online/operator.py index c82deb394..c8b44f578 100644 --- a/qlib/contrib/online/operator.py +++ b/qlib/contrib/online/operator.py @@ -125,7 +125,9 @@ class Operator: trade_date=trade_date, ) save_order_list( - order_list=order_list, user_path=(pathlib.Path(path) / user_id), trade_date=trade_date, + order_list=order_list, + user_path=(pathlib.Path(path) / user_id), + trade_date=trade_date, ) self.logger.info("Generate order list at {} for {}".format(trade_date, user_id)) um.save_user_data(user_id) @@ -158,7 +160,9 @@ class Operator: order_list = load_order_list(user_path=(pathlib.Path(path) / user_id), trade_date=trade_date) trade_info = executor.execute(order_list=order_list, trade_account=user.account, trade_date=trade_date) executor.save_executed_file_from_trade_info( - trade_info=trade_info, user_path=(pathlib.Path(path) / user_id), trade_date=trade_date, + trade_info=trade_info, + user_path=(pathlib.Path(path) / user_id), + trade_date=trade_date, ) self.logger.info("execute order list at {} for {}".format(trade_date.date(), user_id)) diff --git a/qlib/contrib/online/utils.py b/qlib/contrib/online/utils.py index fb96c87bd..611af63e4 100644 --- a/qlib/contrib/online/utils.py +++ b/qlib/contrib/online/utils.py @@ -79,7 +79,11 @@ def prepare(um, today, user_id, exchange_config=None): log.warning("user_id:{}, last trading date {} after today {}".format(user_id, latest_trading_date, today)) return [pd.Timestamp(latest_trading_date)], None - dates = D.calendar(start_time=pd.Timestamp(latest_trading_date), end_time=pd.Timestamp(today), future=True,) + dates = D.calendar( + start_time=pd.Timestamp(latest_trading_date), + end_time=pd.Timestamp(today), + future=True, + ) dates = list(dates) dates.append(get_next_trading_date(dates[-1], future=True)) if exchange_config: diff --git a/qlib/contrib/report/analysis_model/analysis_model_performance.py b/qlib/contrib/report/analysis_model/analysis_model_performance.py index ef1447a12..1cb14d261 100644 --- a/qlib/contrib/report/analysis_model/analysis_model_performance.py +++ b/qlib/contrib/report/analysis_model/analysis_model_performance.py @@ -53,7 +53,8 @@ def _group_return(pred_label: pd.DataFrame = None, reverse: bool = False, N: int t_df.index = t_df.index.strftime("%Y-%m-%d") # Cumulative Return By Group group_scatter_figure = ScatterGraph( - t_df.cumsum(), layout=dict(title="Cumulative Return", xaxis=dict(type="category", tickangle=45)), + t_df.cumsum(), + layout=dict(title="Cumulative Return", xaxis=dict(type="category", tickangle=45)), ).figure t_df = t_df.loc[:, ["long-short", "long-average"]] @@ -61,7 +62,12 @@ def _group_return(pred_label: pd.DataFrame = None, reverse: bool = False, N: int group_hist_figure = SubplotsGraph( t_df, kind_map=dict(kind="DistplotGraph", kwargs=dict(bin_size=_bin_size)), - subplots_kwargs=dict(rows=1, cols=2, print_grid=False, subplot_titles=["long-short", "long-average"],), + subplots_kwargs=dict( + rows=1, + cols=2, + print_grid=False, + subplot_titles=["long-short", "long-average"], + ), ).figure return group_scatter_figure, group_hist_figure @@ -96,12 +102,15 @@ def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> t _index = ic.index.get_level_values(0).astype("str").str.replace("-", "").str.slice(0, 6) _monthly_ic = ic.groupby(_index).mean() _monthly_ic.index = pd.MultiIndex.from_arrays( - [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], names=["year", "month"], + [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], + names=["year", "month"], ) # fill month _month_list = pd.date_range( - start=pd.Timestamp(f"{_index.min()[:4]}0101"), end=pd.Timestamp(f"{_index.max()[:4]}1231"), freq="1M", + start=pd.Timestamp(f"{_index.min()[:4]}0101"), + end=pd.Timestamp(f"{_index.max()[:4]}1231"), + freq="1M", ) _years = [] _month = [] @@ -133,15 +142,32 @@ def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> t _bin_size = ((_ic_df.max() - _ic_df.min()) / 20).min() _sub_graph_data = [ - ("ic", dict(row=1, col=1, name="", kind="DistplotGraph", graph_kwargs=dict(bin_size=_bin_size),),), + ( + "ic", + dict( + row=1, + col=1, + name="", + kind="DistplotGraph", + graph_kwargs=dict(bin_size=_bin_size), + ), + ), (_qqplot_fig, dict(row=1, col=2)), ] ic_hist_figure = SubplotsGraph( _ic_df.dropna(), kind_map=dict(kind="HistogramGraph", kwargs=dict()), - subplots_kwargs=dict(rows=1, cols=2, print_grid=False, subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name],), + subplots_kwargs=dict( + rows=1, + cols=2, + print_grid=False, + subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name], + ), sub_graph_data=_sub_graph_data, - layout=dict(yaxis2=dict(title="Observed Quantile"), xaxis2=dict(title=f"{dist_name} Distribution Quantile"),), + layout=dict( + yaxis2=dict(title="Observed Quantile"), + xaxis2=dict(title=f"{dist_name} Distribution Quantile"), + ), ).figure return ic_bar_figure, ic_heatmap_figure, ic_hist_figure @@ -155,7 +181,8 @@ def _pred_autocorr(pred_label: pd.DataFrame, lag=1, **kwargs) -> tuple: _df = ac.to_frame("value") _df.index = _df.index.strftime("%Y-%m-%d") ac_figure = ScatterGraph( - _df, layout=dict(title="Auto Correlation", xaxis=dict(type="category", tickangle=45)), + _df, + layout=dict(title="Auto Correlation", xaxis=dict(type="category", tickangle=45)), ).figure return (ac_figure,) @@ -175,11 +202,17 @@ def _pred_turnover(pred_label: pd.DataFrame, N=5, lag=1, **kwargs) -> tuple: .sum() / (len(x) // N) ) - r_df = pd.DataFrame({"Top": top, "Bottom": bottom,}) + r_df = pd.DataFrame( + { + "Top": top, + "Bottom": bottom, + } + ) # FIXME: support HIGH-FREQ r_df.index = r_df.index.strftime("%Y-%m-%d") turnover_figure = ScatterGraph( - r_df, layout=dict(title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45)), + r_df, + layout=dict(title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45)), ).figure return (turnover_figure,) @@ -197,7 +230,11 @@ def ic_figure(ic_df: pd.DataFrame, show_nature_day=True, **kwargs) -> go.Figure: # FIXME: support HIGH-FREQ ic_df.index = ic_df.index.strftime("%Y-%m-%d") ic_bar_figure = BarGraph( - ic_df, layout=dict(title="Information Coefficient (IC)", xaxis=dict(type="category", tickangle=45),), + ic_df, + layout=dict( + title="Information Coefficient (IC)", + xaxis=dict(type="category", tickangle=45), + ), ).figure return ic_bar_figure @@ -240,7 +277,12 @@ def model_performance_graph( figure_list = [] for graph_name in graph_names: fun_res = eval(f"_{graph_name}")( - pred_label=pred_label, lag=lag, N=N, reverse=reverse, rank=rank, show_nature_day=show_nature_day, + pred_label=pred_label, + lag=lag, + N=N, + reverse=reverse, + rank=rank, + show_nature_day=show_nature_day, ) figure_list += fun_res diff --git a/qlib/contrib/report/analysis_position/cumulative_return.py b/qlib/contrib/report/analysis_position/cumulative_return.py index 604189c94..abb68ea60 100644 --- a/qlib/contrib/report/analysis_position/cumulative_return.py +++ b/qlib/contrib/report/analysis_position/cumulative_return.py @@ -13,7 +13,11 @@ from ..analysis_position.parse_position import get_position_data def _get_cum_return_data_with_position( - position: dict, report_normal: pd.DataFrame, label_data: pd.DataFrame, start_date=None, end_date=None, + position: dict, + report_normal: pd.DataFrame, + label_data: pd.DataFrame, + start_date=None, + end_date=None, ): """ @@ -25,7 +29,11 @@ def _get_cum_return_data_with_position( :return: """ _cumulative_return_df = get_position_data( - position=position, report_normal=report_normal, label_data=label_data, start_date=start_date, end_date=end_date, + position=position, + report_normal=report_normal, + label_data=label_data, + start_date=start_date, + end_date=end_date, ).copy() _cumulative_return_df["label"] = _cumulative_return_df["label"] - _cumulative_return_df["bench"] @@ -79,7 +87,11 @@ def _get_cum_return_data_with_position( def _get_figure_with_position( - position: dict, report_normal: pd.DataFrame, label_data: pd.DataFrame, start_date=None, end_date=None, + position: dict, + report_normal: pd.DataFrame, + label_data: pd.DataFrame, + start_date=None, + end_date=None, ) -> Iterable[go.Figure]: """Get average analysis figures @@ -99,12 +111,18 @@ def _get_figure_with_position( # Create figures for _t_name in ["buy", "sell", "buy_minus_sell", "hold"]: sub_graph_data = [ - ("cum_{}".format(_t_name), dict(row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"}),), + ( + "cum_{}".format(_t_name), + dict(row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"}), + ), ( "{}_weight".format(_t_name.replace("minus", "plus") if "minus" in _t_name else _t_name), dict(row=2, col=1), ), - ("{}_value".format(_t_name), dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}),), + ( + "{}_value".format(_t_name), + dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}), + ), ] _default_xaxis = dict(showline=False, zeroline=True, tickangle=45) @@ -143,7 +161,13 @@ def _get_figure_with_position( [{"rowspan": 1}, None], ] subplots_kwargs = dict( - vertical_spacing=0.01, rows=2, cols=2, row_width=[1, 2], column_width=[3, 1], print_grid=False, specs=specs, + vertical_spacing=0.01, + rows=2, + cols=2, + row_width=[1, 2], + column_width=[3, 1], + print_grid=False, + specs=specs, ) yield SubplotsGraph( cum_return_df, diff --git a/qlib/contrib/report/analysis_position/parse_position.py b/qlib/contrib/report/analysis_position/parse_position.py index 23f9c592c..fe1d61137 100644 --- a/qlib/contrib/report/analysis_position/parse_position.py +++ b/qlib/contrib/report/analysis_position/parse_position.py @@ -72,7 +72,10 @@ def parse_position(position: dict = None) -> pd.DataFrame: result_df = result_df.append(_trading_day_df, sort=True) - previous_data = dict(date=_trading_date, code_list=_trading_day_df[_trading_day_df["status"] != -1].index,) + previous_data = dict( + date=_trading_date, + code_list=_trading_day_df[_trading_day_df["status"] != -1].index, + ) result_df.reset_index(inplace=True) result_df.rename(columns={"date": "datetime", "index": "instrument"}, inplace=True) diff --git a/qlib/contrib/report/analysis_position/rank_label.py b/qlib/contrib/report/analysis_position/rank_label.py index 9a4d834ed..72a358adc 100644 --- a/qlib/contrib/report/analysis_position/rank_label.py +++ b/qlib/contrib/report/analysis_position/rank_label.py @@ -23,7 +23,11 @@ def _get_figure_with_position( :return: """ _position_df = get_position_data( - position, label_data, calculate_label_rank=True, start_date=start_date, end_date=end_date, + position, + label_data, + calculate_label_rank=True, + start_date=start_date, + end_date=end_date, ) res_dict = dict() @@ -47,14 +51,20 @@ def _get_figure_with_position( yield ScatterGraph( _res_df.loc[:, [_col]], layout=dict( - title=_col, xaxis=dict(type="category", tickangle=45), yaxis=dict(title="lable-rank-ratio: %"), + title=_col, + xaxis=dict(type="category", tickangle=45), + yaxis=dict(title="lable-rank-ratio: %"), ), graph_kwargs=dict(mode="lines+markers"), ).figure def rank_label_graph( - position: dict, label_data: pd.DataFrame, start_date=None, end_date=None, show_notebook=True, + position: dict, + label_data: pd.DataFrame, + start_date=None, + end_date=None, + show_notebook=True, ) -> Iterable[go.Figure]: """Ranking percentage of stocks buy, sell, and holding on the trading day. Average rank-ratio(similar to **sell_df['label'].rank(ascending=False) / len(sell_df)**) of daily trading diff --git a/qlib/contrib/report/analysis_position/report.py b/qlib/contrib/report/analysis_position/report.py index 8e2c05c0a..f82e654c4 100644 --- a/qlib/contrib/report/analysis_position/report.py +++ b/qlib/contrib/report/analysis_position/report.py @@ -123,7 +123,9 @@ def _report_figure(df: pd.DataFrame) -> [list, tuple]: "y1": 1, "fillcolor": "#d3d3d3", "opacity": 0.3, - "line": {"width": 0,}, + "line": { + "width": 0, + }, }, { "type": "rect", @@ -135,13 +137,20 @@ def _report_figure(df: pd.DataFrame) -> [list, tuple]: "y1": 0.55, "fillcolor": "#d3d3d3", "opacity": 0.3, - "line": {"width": 0,}, + "line": { + "width": 0, + }, }, ], ) _subplot_kwargs = dict( - shared_xaxes=True, vertical_spacing=0.01, rows=7, cols=1, row_width=[1, 1, 1, 3, 1, 1, 3], print_grid=False, + shared_xaxes=True, + vertical_spacing=0.01, + rows=7, + cols=1, + row_width=[1, 1, 1, 3, 1, 1, 3], + print_grid=False, ) figure = SubplotsGraph( df=report_df, diff --git a/qlib/contrib/report/graph.py b/qlib/contrib/report/graph.py index dbbc41110..70e382fb1 100644 --- a/qlib/contrib/report/graph.py +++ b/qlib/contrib/report/graph.py @@ -311,7 +311,11 @@ class SubplotsGraph: _temp_row_data = ( column_name, dict( - row=row, col=col, name=res_name, kind=self._kind_map["kind"], graph_kwargs=self._kind_map["kwargs"], + row=row, + col=col, + name=res_name, + kind=self._kind_map["kind"], + graph_kwargs=self._kind_map["kwargs"], ), ) self._sub_graph_data.append(_temp_row_data) diff --git a/qlib/contrib/strategy/cost_control.py b/qlib/contrib/strategy/cost_control.py index ee3ee03ec..dd90437b0 100644 --- a/qlib/contrib/strategy/cost_control.py +++ b/qlib/contrib/strategy/cost_control.py @@ -57,7 +57,10 @@ class SoftTopkStrategy(WeightStrategyBase): final_stock_weight[stock_id] -= sw if self.buy_method == "first_fill": for stock_id in buy_signal_stocks: - add_weight = min(max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), sold_stock_weight,) + add_weight = min( + max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), + sold_stock_weight, + ) final_stock_weight[stock_id] = final_stock_weight.get(stock_id, 0.0) + add_weight sold_stock_weight -= add_weight elif self.buy_method == "average_fill": diff --git a/qlib/contrib/strategy/order_generator.py b/qlib/contrib/strategy/order_generator.py index 6f168b4dd..494981ecc 100644 --- a/qlib/contrib/strategy/order_generator.py +++ b/qlib/contrib/strategy/order_generator.py @@ -102,10 +102,14 @@ class OrderGenWInteract(OrderGenerator): # strategy 1 : generate amount_position by weight_position # Use API in Exchange() target_amount_dict = trade_exchange.generate_amount_position_from_weight_position( - weight_position=target_weight_position, cash=current_tradable_value, trade_date=trade_date, + weight_position=target_weight_position, + cash=current_tradable_value, + trade_date=trade_date, ) order_list = trade_exchange.generate_order_for_target_amount_position( - target_position=target_amount_dict, current_position=current_amount_dict, trade_date=trade_date, + target_position=target_amount_dict, + current_position=current_amount_dict, + trade_date=trade_date, ) return order_list @@ -160,6 +164,8 @@ class OrderGenWOInteract(OrderGenerator): else: continue order_list = trade_exchange.generate_order_for_target_amount_position( - target_position=amount_dict, current_position=current.get_stock_amount_dict(), trade_date=trade_date, + target_position=amount_dict, + current_position=current.get_stock_amount_dict(), + trade_date=trade_date, ) return order_list diff --git a/qlib/contrib/tuner/launcher.py b/qlib/contrib/tuner/launcher.py index 409410a2a..711658c9a 100644 --- a/qlib/contrib/tuner/launcher.py +++ b/qlib/contrib/tuner/launcher.py @@ -13,7 +13,11 @@ from .config import TunerConfigManager args_parser = argparse.ArgumentParser(prog="tuner") args_parser.add_argument( - "-c", "--config_path", required=True, type=str, help="config path indicates where to load yaml config.", + "-c", + "--config_path", + required=True, + type=str, + help="config path indicates where to load yaml config.", ) args = args_parser.parse_args() diff --git a/qlib/contrib/tuner/space.py b/qlib/contrib/tuner/space.py index 57f57a6c3..76f101671 100644 --- a/qlib/contrib/tuner/space.py +++ b/qlib/contrib/tuner/space.py @@ -10,5 +10,8 @@ TopkAmountStrategySpace = { } QLibDataLabelSpace = { - "labels": hp.choice("labels", [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]],) + "labels": hp.choice( + "labels", + [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]], + ) } diff --git a/qlib/contrib/tuner/tuner.py b/qlib/contrib/tuner/tuner.py index e81d41a9a..2ce957859 100644 --- a/qlib/contrib/tuner/tuner.py +++ b/qlib/contrib/tuner/tuner.py @@ -28,7 +28,10 @@ class Tuner: self.optim_config = optim_config self.max_evals = self.tuner_config.get("max_evals", 10) - self.ex_dir = os.path.join(self.tuner_config["experiment"]["dir"], self.tuner_config["experiment"]["name"],) + self.ex_dir = os.path.join( + self.tuner_config["experiment"]["dir"], + self.tuner_config["experiment"]["name"], + ) self.best_params = None self.best_res = None @@ -39,7 +42,10 @@ class Tuner: TimeInspector.set_time_mark() fmin( - fn=self.objective, space=self.space, algo=tpe.suggest, max_evals=self.max_evals, + fn=self.objective, + space=self.space, + algo=tpe.suggest, + max_evals=self.max_evals, ) self.logger.info("Local best params: {} ".format(self.best_params)) TimeInspector.log_cost_time( @@ -153,7 +159,8 @@ class QLibTuner(Tuner): estimator_config["data"]["args"].update(params["data_label_space"]) estimator_path = os.path.join( - self.tuner_config["experiment"].get("dir", "../"), QLibTuner.ESTIMATOR_CONFIG_NAME, + self.tuner_config["experiment"].get("dir", "../"), + QLibTuner.ESTIMATOR_CONFIG_NAME, ) with open(estimator_path, "w") as fp: @@ -166,20 +173,27 @@ class QLibTuner(Tuner): model_space_name = self.tuner_config["model"].get("space", None) if model_space_name is None: raise ValueError("Please give the search space of model.") - model_space = getattr(importlib.import_module(".space", package="qlib.contrib.tuner"), model_space_name,) + model_space = getattr( + importlib.import_module(".space", package="qlib.contrib.tuner"), + model_space_name, + ) # 2. Setup strategy space strategy_space_name = self.tuner_config["strategy"].get("space", None) if strategy_space_name is None: raise ValueError("Please give the search space of strategy.") - strategy_space = getattr(importlib.import_module(".space", package="qlib.contrib.tuner"), strategy_space_name,) + strategy_space = getattr( + importlib.import_module(".space", package="qlib.contrib.tuner"), + strategy_space_name, + ) # 3. Setup data label space if given if self.tuner_config.get("data_label", None) is not None: data_label_space_name = self.tuner_config["data_label"].get("space", None) if data_label_space_name is not None: data_label_space = getattr( - importlib.import_module(".space", package="qlib.contrib.tuner"), data_label_space_name, + importlib.import_module(".space", package="qlib.contrib.tuner"), + data_label_space_name, ) else: data_label_space_name = None diff --git a/qlib/data/client.py b/qlib/data/client.py index d1a68cb38..5244a7e45 100644 --- a/qlib/data/client.py +++ b/qlib/data/client.py @@ -26,7 +26,8 @@ class Client: self.logger = get_module_logger(self.__class__.__name__) # bind connect/disconnect callbacks self.sio.on( - "connect", lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), + "connect", + lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), ) self.sio.on("disconnect", lambda: self.logger.debug("Disconnect from server!")) diff --git a/qlib/data/data.py b/qlib/data/data.py index 47cded79c..762467da3 100644 --- a/qlib/data/data.py +++ b/qlib/data/data.py @@ -328,7 +328,14 @@ class DatasetProvider(abc.ABC): raise NotImplementedError("Subclass of DatasetProvider must implement `Dataset` method") def _uri( - self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=1, **kwargs, + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=1, + **kwargs, ): """Get task uri, used when generating rabbitmq task in qlib_server @@ -407,13 +414,29 @@ class DatasetProvider(abc.ABC): for inst, spans in instruments_d.items(): data[inst] = p.apply_async( DatasetProvider.expression_calculator, - args=(inst, start_time, end_time, freq, normalize_column_names, spans, C,), + args=( + inst, + start_time, + end_time, + freq, + normalize_column_names, + spans, + C, + ), ) else: for inst in instruments_d: data[inst] = p.apply_async( DatasetProvider.expression_calculator, - args=(inst, start_time, end_time, freq, normalize_column_names, None, C,), + args=( + inst, + start_time, + end_time, + freq, + normalize_column_names, + None, + C, + ), ) p.close() @@ -575,7 +598,12 @@ class LocalInstrumentProvider(InstrumentProvider): start_time = pd.Timestamp(start_time or cal[0]) end_time = pd.Timestamp(end_time or cal[-1]) _instruments_filtered = { - inst: list(filter(lambda x: x[0] <= x[1], [(max(start_time, x[0]), min(end_time, x[1])) for x in spans],)) + inst: list( + filter( + lambda x: x[0] <= x[1], + [(max(start_time, x[0]), min(end_time, x[1])) for x in spans], + ) + ) for inst, spans in _instruments.items() } _instruments_filtered = {key: value for key, value in _instruments_filtered.items() if value} @@ -695,7 +723,14 @@ class LocalDatasetProvider(DatasetProvider): for inst in instruments_d: p.apply_async( - LocalDatasetProvider.cache_walker, args=(inst, start_time, end_time, freq, column_names,), + LocalDatasetProvider.cache_walker, + args=( + inst, + start_time, + end_time, + freq, + column_names, + ), ) p.close() @@ -728,7 +763,12 @@ class ClientCalendarProvider(CalendarProvider): def calendar(self, start_time=None, end_time=None, freq="day", future=False): self.conn.send_request( request_type="calendar", - request_content={"start_time": str(start_time), "end_time": str(end_time), "freq": freq, "future": future,}, + request_content={ + "start_time": str(start_time), + "end_time": str(end_time), + "freq": freq, + "future": future, + }, msg_queue=self.queue, msg_proc_func=lambda response_content: [pd.Timestamp(c) for c in response_content], ) @@ -792,7 +832,14 @@ class ClientDatasetProvider(DatasetProvider): self.queue = queue.Queue() def dataset( - self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=0, return_uri=False, + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=0, + return_uri=False, ): if Inst.get_inst_type(instruments) == Inst.DICT: get_module_logger("data").warning( @@ -895,7 +942,13 @@ class BaseProvider: return Inst.list_instruments(instruments, start_time, end_time, freq, as_list) def features( - self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=None, + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=None, ): """ Parameters: diff --git a/qlib/data/dataset/utils.py b/qlib/data/dataset/utils.py index 58e2bd968..feda19044 100644 --- a/qlib/data/dataset/utils.py +++ b/qlib/data/dataset/utils.py @@ -32,7 +32,10 @@ def get_level_index(df: pd.DataFrame, level=Union[str, int]) -> int: def fetch_df_by_index( - df: pd.DataFrame, selector: Union[pd.Timestamp, slice, str, list], level: Union[str, int], fetch_orig=True, + df: pd.DataFrame, + selector: Union[pd.Timestamp, slice, str, list], + level: Union[str, int], + fetch_orig=True, ) -> pd.DataFrame: """ fetch data from `data` with `selector` and `level` diff --git a/qlib/data/filter.py b/qlib/data/filter.py index 811fd387f..70f9d3278 100644 --- a/qlib/data/filter.py +++ b/qlib/data/filter.py @@ -341,7 +341,12 @@ class ExpressionDFilter(SeriesDFilter): # do not use dataset cache try: _features = DatasetD.dataset( - instruments, [self.rule_expression], fstart, fend, freq=self.filter_freq, disk_cache=0, + instruments, + [self.rule_expression], + fstart, + fend, + freq=self.filter_freq, + disk_cache=0, ) except TypeError: # use LocalDatasetProvider diff --git a/qlib/tests/__init__.py b/qlib/tests/__init__.py index eb6f9c5ed..f92e72787 100644 --- a/qlib/tests/__init__.py +++ b/qlib/tests/__init__.py @@ -18,6 +18,10 @@ class TestAutoData(unittest.TestCase): print(f"Qlib data is not found in {provider_uri}") GetData().qlib_data( - name="qlib_data_simple", region="cn", interval="1d", target_dir=provider_uri, delete_old=False, + name="qlib_data_simple", + region="cn", + interval="1d", + target_dir=provider_uri, + delete_old=False, ) init(provider_uri=provider_uri, region=REG_CN, **cls._setup_kwargs) diff --git a/qlib/workflow/record_temp.py b/qlib/workflow/record_temp.py index 0c704b896..be458a24d 100644 --- a/qlib/workflow/record_temp.py +++ b/qlib/workflow/record_temp.py @@ -193,7 +193,10 @@ class SigAnaRecord(SignalRecord): } ) objects.update( - {"long_short_r.pkl": long_short_r, "long_avg_r.pkl": long_avg_r,} + { + "long_short_r.pkl": long_short_r, + "long_avg_r.pkl": long_avg_r, + } ) self.recorder.log_metrics(**metrics) self.recorder.save_objects(**objects, artifact_path=self.get_path()) From dc4aa675034724a9d2815763fd575b3ec56e76e2 Mon Sep 17 00:00:00 2001 From: Jactus Date: Mon, 22 Feb 2021 11:42:36 +0800 Subject: [PATCH 022/134] Black format --- docs/conf.py | 10 ++++++- examples/benchmarks/TFT/libs/tft_model.py | 12 ++++++-- examples/highfreq/highfreq_handler.py | 33 ++++++++++++++++----- examples/highfreq/highfreq_processor.py | 4 ++- examples/highfreq/workflow.py | 35 +++++++++++++++++++---- examples/run_all_model.py | 5 +++- examples/workflow_by_code.py | 5 +++- scripts/data_collector/yahoo/collector.py | 27 +++++++++++++---- scripts/dump_bin.py | 13 +++++++-- setup.py | 14 +++++++-- tests/test_all_pipeline.py | 9 ++++-- tests/test_dump_data.py | 9 ++++-- tests/test_get_data.py | 4 ++- 13 files changed, 147 insertions(+), 33 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 61fe784e7..6e52b0e34 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -191,7 +191,15 @@ man_pages = [(master_doc, "qlib", u"QLib Documentation", [author], 1)] # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ - (master_doc, "QLib", u"QLib Documentation", author, "QLib", "One line description of project.", "Miscellaneous",), + ( + master_doc, + "QLib", + u"QLib Documentation", + author, + "QLib", + "One line description of project.", + "Miscellaneous", + ), ] diff --git a/examples/benchmarks/TFT/libs/tft_model.py b/examples/benchmarks/TFT/libs/tft_model.py index f40a1aece..b39f17825 100644 --- a/examples/benchmarks/TFT/libs/tft_model.py +++ b/examples/benchmarks/TFT/libs/tft_model.py @@ -721,7 +721,12 @@ class TemporalFusionTransformer: encoder_steps = self.num_encoder_steps # Inputs. - all_inputs = tf.keras.layers.Input(shape=(time_steps, combined_input_size,)) + all_inputs = tf.keras.layers.Input( + shape=( + time_steps, + combined_input_size, + ) + ) unknown_inputs, known_combined_layer, obs_inputs, static_inputs = self.get_tft_embeddings(all_inputs) @@ -861,7 +866,10 @@ class TemporalFusionTransformer: """Returns LSTM cell initialized with default parameters.""" if self.use_cudnn: lstm = tf.keras.layers.CuDNNLSTM( - self.hidden_layer_size, return_sequences=True, return_state=return_state, stateful=False, + self.hidden_layer_size, + return_sequences=True, + return_state=return_state, + stateful=False, ) else: lstm = tf.keras.layers.LSTM( diff --git a/examples/highfreq/highfreq_handler.py b/examples/highfreq/highfreq_handler.py index 2fc411ab6..d35650514 100644 --- a/examples/highfreq/highfreq_handler.py +++ b/examples/highfreq/highfreq_handler.py @@ -20,7 +20,10 @@ class HighFreqHandler(DataHandlerLP): new_l = [] for p in proc_l: p["kwargs"].update( - {"fit_start_time": fit_start_time, "fit_end_time": fit_end_time,} + { + "fit_start_time": fit_start_time, + "fit_end_time": fit_end_time, + } ) new_l.append(p) return new_l @@ -30,7 +33,11 @@ class HighFreqHandler(DataHandlerLP): data_loader = { "class": "QlibDataLoader", - "kwargs": {"config": self.get_feature_config(), "swap_level": False, "freq": "1min",}, + "kwargs": { + "config": self.get_feature_config(), + "swap_level": False, + "freq": "1min", + }, } super().__init__( instruments=instruments, @@ -61,7 +68,8 @@ class HighFreqHandler(DataHandlerLP): feature_ops = template_norm.format( template_if.format( - template_fillnan.format(template_paused.format("$close")), template_paused.format(price_field), + template_fillnan.format(template_paused.format("$close")), + template_paused.format(price_field), ), template_fillnan.format(template_paused.format("$close")), ) @@ -111,14 +119,24 @@ class HighFreqHandler(DataHandlerLP): class HighFreqBacktestHandler(DataHandler): def __init__( - self, instruments="csi300", start_time=None, end_time=None, + self, + instruments="csi300", + start_time=None, + end_time=None, ): data_loader = { "class": "QlibDataLoader", - "kwargs": {"config": self.get_feature_config(), "swap_level": False, "freq": "1min",}, + "kwargs": { + "config": self.get_feature_config(), + "swap_level": False, + "freq": "1min", + }, } super().__init__( - instruments=instruments, start_time=start_time, end_time=end_time, data_loader=data_loader, + instruments=instruments, + start_time=start_time, + end_time=end_time, + data_loader=data_loader, ) def get_feature_config(self): @@ -137,7 +155,8 @@ class HighFreqBacktestHandler(DataHandler): fields += [ "Cut({0}, 240, None)".format( template_if.format( - template_fillnan.format(template_paused.format("$close")), template_paused.format(simpson_vwap), + template_fillnan.format(template_paused.format("$close")), + template_paused.format(simpson_vwap), ) ) ] diff --git a/examples/highfreq/highfreq_processor.py b/examples/highfreq/highfreq_processor.py index 73510ef06..f0ab0dec2 100644 --- a/examples/highfreq/highfreq_processor.py +++ b/examples/highfreq/highfreq_processor.py @@ -65,6 +65,8 @@ class HighFreqNorm(Processor): feat = df_values[:, [0, 1, 2, 3, 4, 10]].reshape(-1, 6 * 240) feat_1 = df_values[:, [5, 6, 7, 8, 9, 11]].reshape(-1, 6 * 240) df_new_features = pd.DataFrame( - data=np.concatenate((feat, feat_1), axis=1), index=idx, columns=["FEATURE_%d" % i for i in range(12 * 240)], + data=np.concatenate((feat, feat_1), axis=1), + index=idx, + columns=["FEATURE_%d" % i for i in range(12 * 240)], ).sort_index() return df_new_features diff --git a/examples/highfreq/workflow.py b/examples/highfreq/workflow.py index 0bfd0c2a0..01de59c0e 100644 --- a/examples/highfreq/workflow.py +++ b/examples/highfreq/workflow.py @@ -63,7 +63,13 @@ class HighfreqWorkflow(object): "module_path": "highfreq_handler", "kwargs": DATA_HANDLER_CONFIG0, }, - "segments": {"train": (start_time, train_end_time), "test": (test_start_time, end_time,),}, + "segments": { + "train": (start_time, train_end_time), + "test": ( + test_start_time, + end_time, + ), + }, }, }, "dataset_backtest": { @@ -75,7 +81,13 @@ class HighfreqWorkflow(object): "module_path": "highfreq_handler", "kwargs": DATA_HANDLER_CONFIG1, }, - "segments": {"train": (start_time, train_end_time), "test": (test_start_time, end_time,),}, + "segments": { + "train": (start_time, train_end_time), + "test": ( + test_start_time, + end_time, + ), + }, }, }, } @@ -140,11 +152,24 @@ class HighfreqWorkflow(object): "start_time": "2021-01-19 00:00:00", "end_time": "2021-01-25 16:00:00", }, - segment_kwargs={"test": ("2021-01-19 00:00:00", "2021-01-25 16:00:00",),}, + segment_kwargs={ + "test": ( + "2021-01-19 00:00:00", + "2021-01-25 16:00:00", + ), + }, ) dataset_backtest.init( - handler_kwargs={"start_time": "2021-01-19 00:00:00", "end_time": "2021-01-25 16:00:00",}, - segment_kwargs={"test": ("2021-01-19 00:00:00", "2021-01-25 16:00:00",),}, + handler_kwargs={ + "start_time": "2021-01-19 00:00:00", + "end_time": "2021-01-25 16:00:00", + }, + segment_kwargs={ + "test": ( + "2021-01-19 00:00:00", + "2021-01-25 16:00:00", + ), + }, ) ##=============get data============= diff --git a/examples/run_all_model.py b/examples/run_all_model.py index d356b4128..d587eff15 100644 --- a/examples/run_all_model.py +++ b/examples/run_all_model.py @@ -34,7 +34,10 @@ exp_path = str(Path(os.getcwd()).resolve() / exp_folder_name) exp_manager = { "class": "MLflowExpManager", "module_path": "qlib.workflow.expm", - "kwargs": {"uri": "file:" + exp_path, "default_exp_name": "Experiment",}, + "kwargs": { + "uri": "file:" + exp_path, + "default_exp_name": "Experiment", + }, } if not exists_qlib_data(provider_uri): print(f"Qlib data is not found in {provider_uri}") diff --git a/examples/workflow_by_code.py b/examples/workflow_by_code.py index 6f5c11dc0..d5dab8917 100644 --- a/examples/workflow_by_code.py +++ b/examples/workflow_by_code.py @@ -81,7 +81,10 @@ if __name__ == "__main__": "strategy": { "class": "TopkDropoutStrategy", "module_path": "qlib.contrib.strategy.strategy", - "kwargs": {"topk": 50, "n_drop": 5,}, + "kwargs": { + "topk": 50, + "n_drop": 5, + }, }, "backtest": { "verbose": False, diff --git a/scripts/data_collector/yahoo/collector.py b/scripts/data_collector/yahoo/collector.py index 24526e332..743f89462 100644 --- a/scripts/data_collector/yahoo/collector.py +++ b/scripts/data_collector/yahoo/collector.py @@ -39,7 +39,13 @@ class YahooData: INTERVAL_1d = "1d" def __init__( - self, timezone: str = None, start=None, end=None, interval="1d", delay=0, show_1min_logging: bool = False, + self, + timezone: str = None, + start=None, + end=None, + interval="1d", + delay=0, + show_1min_logging: bool = False, ): """ @@ -119,7 +125,11 @@ class YahooData: self._sleep() _remote_interval = "1m" if self._interval == self.INTERVAL_1min else self._interval return self.get_data_from_remote( - symbol, interval=_remote_interval, start=start_, end=end_, show_1min_logging=self._show_1min_logging, + symbol, + interval=_remote_interval, + start=start_, + end=end_, + show_1min_logging=self._show_1min_logging, ) _result = None @@ -428,7 +438,9 @@ class YahooNormalize: DAILY_FORMAT = "%Y-%m-%d" def __init__( - self, date_field_name: str = "date", symbol_field_name: str = "symbol", + self, + date_field_name: str = "date", + symbol_field_name: str = "symbol", ): """ @@ -446,7 +458,10 @@ class YahooNormalize: @staticmethod def normalize_yahoo( - df: pd.DataFrame, calendar_list: list = None, date_field_name: str = "date", symbol_field_name: str = "symbol", + df: pd.DataFrame, + calendar_list: list = None, + date_field_name: str = "date", + symbol_field_name: str = "symbol", ): if df.empty: return df @@ -551,7 +566,9 @@ class YahooNormalize1min(YahooNormalize, ABC): CONSISTENT_1d = False def __init__( - self, date_field_name: str = "date", symbol_field_name: str = "symbol", + self, + date_field_name: str = "date", + symbol_field_name: str = "symbol", ): """ diff --git a/scripts/dump_bin.py b/scripts/dump_bin.py index ab24fa9ca..4811fd486 100644 --- a/scripts/dump_bin.py +++ b/scripts/dump_bin.py @@ -153,13 +153,22 @@ class DumpDataBase: @staticmethod def _read_calendars(calendar_path: Path) -> List[pd.Timestamp]: - return sorted(map(pd.Timestamp, pd.read_csv(calendar_path, header=None).loc[:, 0].tolist(),)) + return sorted( + map( + pd.Timestamp, + pd.read_csv(calendar_path, header=None).loc[:, 0].tolist(), + ) + ) def _read_instruments(self, instrument_path: Path) -> pd.DataFrame: df = pd.read_csv( instrument_path, sep=self.INSTRUMENTS_SEP, - names=[self.symbol_field_name, self.INSTRUMENTS_START_FIELD, self.INSTRUMENTS_END_FIELD,], + names=[ + self.symbol_field_name, + self.INSTRUMENTS_START_FIELD, + self.INSTRUMENTS_END_FIELD, + ], ) return df diff --git a/setup.py b/setup.py index d8a9d9efa..83cf6e1b6 100644 --- a/setup.py +++ b/setup.py @@ -70,10 +70,16 @@ with open(os.path.join(here, "README.md"), encoding="utf-8") as f: # Cython Extensions extensions = [ Extension( - "qlib.data._libs.rolling", ["qlib/data/_libs/rolling.pyx"], language="c++", include_dirs=[NUMPY_INCLUDE], + "qlib.data._libs.rolling", + ["qlib/data/_libs/rolling.pyx"], + language="c++", + include_dirs=[NUMPY_INCLUDE], ), Extension( - "qlib.data._libs.expanding", ["qlib/data/_libs/expanding.pyx"], language="c++", include_dirs=[NUMPY_INCLUDE], + "qlib.data._libs.expanding", + ["qlib/data/_libs/expanding.pyx"], + language="c++", + include_dirs=[NUMPY_INCLUDE], ), ] @@ -92,7 +98,9 @@ setup( # py_modules=['qlib'], entry_points={ # 'console_scripts': ['mycli=mymodule:cli'], - "console_scripts": ["qrun=qlib.workflow.cli:run",], + "console_scripts": [ + "qrun=qlib.workflow.cli:run", + ], }, ext_modules=extensions, install_requires=REQUIRED, diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py index 8b3819c83..f6e77cba4 100644 --- a/tests/test_all_pipeline.py +++ b/tests/test_all_pipeline.py @@ -78,7 +78,10 @@ port_analysis_config = { "strategy": { "class": "TopkDropoutStrategy", "module_path": "qlib.contrib.strategy.strategy", - "kwargs": {"topk": 50, "n_drop": 5,}, + "kwargs": { + "topk": 50, + "n_drop": 5, + }, }, "backtest": { "verbose": False, @@ -173,7 +176,9 @@ class TestAllFlow(TestAutoData): def test_1_backtest(self): analyze_df = backtest_analysis(TestAllFlow.PRED_SCORE, TestAllFlow.RID) self.assertGreaterEqual( - analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], 0.10, "backtest failed", + analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], + 0.10, + "backtest failed", ) diff --git a/tests/test_dump_data.py b/tests/test_dump_data.py index de649c37e..dfa7f8556 100644 --- a/tests/test_dump_data.py +++ b/tests/test_dump_data.py @@ -40,7 +40,9 @@ class TestDumpData(unittest.TestCase): TestDumpData.STOCK_NAMES = list(map(lambda x: x.name[:-4].upper(), SOURCE_DIR.glob("*.csv"))) provider_uri = str(QLIB_DIR.resolve()) qlib.init( - provider_uri=provider_uri, expression_cache=None, dataset_cache=None, + provider_uri=provider_uri, + expression_cache=None, + dataset_cache=None, ) @classmethod @@ -52,7 +54,10 @@ class TestDumpData(unittest.TestCase): def test_1_dump_calendars(self): ori_calendars = set( - map(pd.Timestamp, pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values,) + map( + pd.Timestamp, + pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values, + ) ) res_calendars = set(D.calendar()) assert len(ori_calendars - res_calendars) == len(res_calendars - ori_calendars) == 0, "dump calendars failed" diff --git a/tests/test_get_data.py b/tests/test_get_data.py index d5637b025..c511d1b91 100644 --- a/tests/test_get_data.py +++ b/tests/test_get_data.py @@ -26,7 +26,9 @@ class TestGetData(unittest.TestCase): def setUpClass(cls) -> None: provider_uri = str(QLIB_DIR.resolve()) qlib.init( - provider_uri=provider_uri, expression_cache=None, dataset_cache=None, + provider_uri=provider_uri, + expression_cache=None, + dataset_cache=None, ) @classmethod From f947a2fdef294ec927466ec7a287da83604c0bc8 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 15:15:51 +0800 Subject: [PATCH 023/134] Correct two mistakes in annotation. --- qlib/model/base.py | 3 ++- qlib/portfolio/optimizer.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/qlib/model/base.py b/qlib/model/base.py index a7001f0a6..3708298d5 100644 --- a/qlib/model/base.py +++ b/qlib/model/base.py @@ -44,7 +44,8 @@ class Model(BaseModel): # get weights try: wdf_train, wdf_valid = dataset.prepare(["train", "valid"], col_set=["weight"], - data_key=DataHandlerLP.DK_L, w_train, w_valid = wdf_train["weight"], wdf_valid["weight"] + data_key=DataHandlerLP.DK_L) + w_train, w_valid = wdf_train["weight"], wdf_valid["weight"] except KeyError as e: w_train = pd.DataFrame(np.ones_like(y_train.values), index=y_train.index) w_valid = pd.DataFrame(np.ones_like(y_valid.values), index=y_valid.index) diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer.py index 391242127..75c6c51f5 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer.py @@ -292,7 +292,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): delta: float = 0.4, bench_dev: float = 0.01, inds_dev: float = 0.01, - scale_alpha=True, + scale_alpha: bool = True, verbose: bool = False, warm_start: str = DO_NOT_START_FROM, max_iters: int = 10000, @@ -303,6 +303,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): delta (float): turnover rate limit bench_dev (float): benchmark deviation limit inds_dev (float): industry deviation limit + scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix verbose (bool): if print detailed information about the solver warm_start (str): whether try to warm start (`w0`/`benchmark`/``) (https://www.cvxpy.org/tutorial/advanced/index.html#warm-start) From d3caea60eed1caf7e8cce7ec89f9f4db938109a5 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 17:32:03 +0800 Subject: [PATCH 024/134] Add unittest for TestStructuredCovEstimator. --- tests/test_structured_cov_estimator.py | 80 ++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 tests/test_structured_cov_estimator.py diff --git a/tests/test_structured_cov_estimator.py b/tests/test_structured_cov_estimator.py new file mode 100644 index 000000000..6aeae3d89 --- /dev/null +++ b/tests/test_structured_cov_estimator.py @@ -0,0 +1,80 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import unittest +import numpy as np +from scipy.linalg import sqrtm + +from qlib.model.riskmodel import StructuredCovEstimator + + +class TestStructuredCovEstimator(unittest.TestCase): + def test_random_covariance(self): + # Try to estimate the covariance from a randomly generated matrix. + NUM_VARIABLE = 10 + NUM_OBSERVATION = 200 + EPS = 1e-6 + + estimator = StructuredCovEstimator(scale_return=False, assume_centered=True) + + X = np.random.rand(NUM_OBSERVATION, NUM_VARIABLE) + + est_cov = estimator.predict(X, is_price=False) + np_cov = np.cov(X.T) # While numpy assume row means variable, qlib assume the other wise. + + delta = abs(est_cov - np_cov) + if_identical = (delta < EPS).all() + + self.assertTrue(if_identical) + + def test_constructed_covariance(self): + # Try to estimate the covariance from a specially crafted matrix. + # There should be some significant correlation since X is specially crafted. + NUM_VARIABLE = 7 + NUM_OBSERVATION = 500 + EPS = 0.1 + + estimator = StructuredCovEstimator(scale_return=False, assume_centered=True, num_factors=NUM_VARIABLE - 1) + + sqrt_cov = None + while sqrt_cov is None or (np.iscomplex(sqrt_cov)).any(): + cov = np.random.rand(NUM_VARIABLE, NUM_VARIABLE) + for i in range(NUM_VARIABLE): + cov[i][i] = 1 + sqrt_cov = sqrtm(cov) + X = np.random.rand(NUM_OBSERVATION, NUM_VARIABLE) @ sqrt_cov + + est_cov = estimator.predict(X, is_price=False) + np_cov = np.cov(X.T) # While numpy assume row means variable, qlib assume the other wise. + + delta = abs(est_cov - np_cov) + if_identical = (delta < EPS).all() + + self.assertTrue(if_identical) + + def test_decomposition(self): + # Try to estimate the covariance from a specially crafted matrix. + # The matrix is generated in the assumption that observations can be predicted by multiple factors. + NUM_VARIABLE = 30 + NUM_OBSERVATION = 100 + NUM_FACTOR = 10 + EPS = 0.1 + + estimator = StructuredCovEstimator(scale_return=False, assume_centered=True, num_factors=NUM_FACTOR) + + F = np.random.rand(NUM_VARIABLE, NUM_FACTOR) + B = np.random.rand(NUM_FACTOR, NUM_OBSERVATION) + U = np.random.rand(NUM_OBSERVATION, NUM_VARIABLE) + X = (F @ B).T + U + + est_cov = estimator.predict(X, is_price=False) + np_cov = np.cov(X.T) # While numpy assume row means variable, qlib assume the other wise. + + delta = abs(est_cov - np_cov) + if_identical = (delta < EPS).all() + + self.assertTrue(if_identical) + + +if __name__ == "__main__": + unittest.main() From 527718a44015a9cac3f13bd71dfcfb583f2d268f Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 22 Feb 2021 19:04:31 +0800 Subject: [PATCH 025/134] Allow enhanced indexing to generate portfolio without industry related restriction. --- qlib/portfolio/optimizer.py | 18 ++- tests/test_enhanced_indexing.py | 194 ++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 6 deletions(-) create mode 100644 tests/test_enhanced_indexing.py diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer.py index 75c6c51f5..6ee396a51 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer.py @@ -291,7 +291,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): lamb: float = 10, delta: float = 0.4, bench_dev: float = 0.01, - inds_dev: float = 0.01, + inds_dev: float = None, scale_alpha: bool = True, verbose: bool = False, warm_start: str = DO_NOT_START_FROM, @@ -302,7 +302,8 @@ class EnhancedIndexingOptimizer(BaseOptimizer): lamb (float): risk aversion parameter (larger `lamb` means less focus on return) delta (float): turnover rate limit bench_dev (float): benchmark deviation limit - inds_dev (float): industry deviation limit + inds_dev (float/None): industry deviation limit, set `inds_dev` to None to ignore industry specific + restriction scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix verbose (bool): if print detailed information about the solver warm_start (str): whether try to warm start (`w0`/`benchmark`/``) @@ -341,7 +342,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): varU: np.ndarray, w0: np.ndarray, w_bench: np.ndarray, - inds_onehot: np.ndarray, + inds_onehot: np.ndarray = None, ) -> Union[np.ndarray, pd.Series]: """ Args: @@ -354,6 +355,8 @@ class EnhancedIndexingOptimizer(BaseOptimizer): Returns: np.ndarray or pd.Series: optimized portfolio allocation """ + assert inds_onehot is not None or self.inds_dev is None, "Industry onehot vector is required." + # scale alpha to match volatility if self.scale_alpha: u = u / u.std() @@ -366,15 +369,18 @@ class EnhancedIndexingOptimizer(BaseOptimizer): risk = cp.quad_form(v, covB) + cp.sum(cp.multiply(varU, w ** 2)) obj = cp.Maximize(ret - self.lamb * risk) d_bench = w - w_bench - d_inds = d_bench @ inds_onehot cons = [ w >= 0, cp.sum(w) == 1, d_bench >= -self.bench_dev, d_bench <= self.bench_dev, - d_inds >= -self.inds_dev, - d_inds <= self.inds_dev, ] + + if self.inds_dev is not None: + d_inds = d_bench @ inds_onehot + cons.append(d_inds >= -self.inds_dev) + cons.append(d_inds <= self.inds_dev) + if w0 is not None: turnover = cp.sum(cp.abs(w - w0)) cons.append(turnover <= self.delta) diff --git a/tests/test_enhanced_indexing.py b/tests/test_enhanced_indexing.py new file mode 100644 index 000000000..f6e77cba4 --- /dev/null +++ b/tests/test_enhanced_indexing.py @@ -0,0 +1,194 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import sys +import shutil +import unittest +from pathlib import Path + +import numpy as np +import pandas as pd + +import qlib +from qlib.config import REG_CN, C +from qlib.utils import drop_nan_by_y_index +from qlib.contrib.model.gbdt import LGBModel +from qlib.contrib.data.handler import Alpha158 +from qlib.contrib.strategy.strategy import TopkDropoutStrategy +from qlib.contrib.evaluate import ( + backtest as normal_backtest, + risk_analysis, +) +from qlib.utils import exists_qlib_data, init_instance_by_config, flatten_dict +from qlib.workflow import R +from qlib.workflow.record_temp import SignalRecord, SigAnaRecord, PortAnaRecord +from qlib.tests.data import GetData +from qlib.tests import TestAutoData + + +market = "csi300" +benchmark = "SH000300" + +################################### +# train model +################################### +data_handler_config = { + "start_time": "2008-01-01", + "end_time": "2020-08-01", + "fit_start_time": "2008-01-01", + "fit_end_time": "2014-12-31", + "instruments": market, +} + +task = { + "model": { + "class": "LGBModel", + "module_path": "qlib.contrib.model.gbdt", + "kwargs": { + "loss": "mse", + "colsample_bytree": 0.8879, + "learning_rate": 0.0421, + "subsample": 0.8789, + "lambda_l1": 205.6999, + "lambda_l2": 580.9768, + "max_depth": 8, + "num_leaves": 210, + "num_threads": 20, + }, + }, + "dataset": { + "class": "DatasetH", + "module_path": "qlib.data.dataset", + "kwargs": { + "handler": { + "class": "Alpha158", + "module_path": "qlib.contrib.data.handler", + "kwargs": data_handler_config, + }, + "segments": { + "train": ("2008-01-01", "2014-12-31"), + "valid": ("2015-01-01", "2016-12-31"), + "test": ("2017-01-01", "2020-08-01"), + }, + }, + }, +} + +port_analysis_config = { + "strategy": { + "class": "TopkDropoutStrategy", + "module_path": "qlib.contrib.strategy.strategy", + "kwargs": { + "topk": 50, + "n_drop": 5, + }, + }, + "backtest": { + "verbose": False, + "limit_threshold": 0.095, + "account": 100000000, + "benchmark": benchmark, + "deal_price": "close", + "open_cost": 0.0005, + "close_cost": 0.0015, + "min_cost": 5, + }, +} + + +# train +def train(): + """train model + + Returns + ------- + pred_score: pandas.DataFrame + predict scores + performance: dict + model performance + """ + + # model initiaiton + model = init_instance_by_config(task["model"]) + dataset = init_instance_by_config(task["dataset"]) + + # start exp + with R.start(experiment_name="workflow"): + R.log_params(**flatten_dict(task)) + model.fit(dataset) + + # prediction + recorder = R.get_recorder() + rid = recorder.id + sr = SignalRecord(model, dataset, recorder) + sr.generate() + pred_score = sr.load() + + # calculate ic and ric + sar = SigAnaRecord(recorder) + sar.generate() + ic = sar.load(sar.get_path("ic.pkl")) + ric = sar.load(sar.get_path("ric.pkl")) + + return pred_score, {"ic": ic, "ric": ric}, rid + + +def backtest_analysis(pred, rid): + """backtest and analysis + + Parameters + ---------- + pred : pandas.DataFrame + predict scores + rid : str + the id of the recorder to be used in this function + + Returns + ------- + analysis : pandas.DataFrame + the analysis result + + """ + recorder = R.get_recorder(experiment_name="workflow", recorder_id=rid) + # backtest + par = PortAnaRecord(recorder, port_analysis_config) + par.generate() + analysis_df = par.load(par.get_path("port_analysis.pkl")) + print(analysis_df) + return analysis_df + + +class TestAllFlow(TestAutoData): + PRED_SCORE = None + REPORT_NORMAL = None + POSITIONS = None + RID = None + + @classmethod + def tearDownClass(cls) -> None: + shutil.rmtree(str(Path(C["exp_manager"]["kwargs"]["uri"].strip("file:")).resolve())) + + def test_0_train(self): + TestAllFlow.PRED_SCORE, ic_ric, TestAllFlow.RID = train() + self.assertGreaterEqual(ic_ric["ic"].all(), 0, "train failed") + self.assertGreaterEqual(ic_ric["ric"].all(), 0, "train failed") + + def test_1_backtest(self): + analyze_df = backtest_analysis(TestAllFlow.PRED_SCORE, TestAllFlow.RID) + self.assertGreaterEqual( + analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], + 0.10, + "backtest failed", + ) + + +def suite(): + _suite = unittest.TestSuite() + _suite.addTest(TestAllFlow("test_0_train")) + _suite.addTest(TestAllFlow("test_1_backtest")) + return _suite + + +if __name__ == "__main__": + runner = unittest.TextTestRunner() + runner.run(suite()) From 1a990fdd25e5fd25e6b868d56122f92b7caa30f7 Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Tue, 23 Feb 2021 19:08:11 +0900 Subject: [PATCH 026/134] Add Risk Prediction Demo --- examples/workflow_by_code_lgb_risk_demo.py | 179 +++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 examples/workflow_by_code_lgb_risk_demo.py diff --git a/examples/workflow_by_code_lgb_risk_demo.py b/examples/workflow_by_code_lgb_risk_demo.py new file mode 100644 index 000000000..b250993d3 --- /dev/null +++ b/examples/workflow_by_code_lgb_risk_demo.py @@ -0,0 +1,179 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import sys +from pathlib import Path + +import qlib +from qlib.config import REG_CN +from qlib.utils import exists_qlib_data, init_instance_by_config, flatten_dict +from qlib.workflow import R +from qlib.workflow.record_temp import SignalRecord, PortAnaRecord +from qlib.data.dataset.handler import DataHandlerLP + +import seaborn as sns +import matplotlib.pyplot as plt +import math +import pandas as pd +from scipy.stats.stats import pearsonr +import numpy as np + +if __name__ == "__main__": + + # use default data + provider_uri = "~/.qlib/qlib_data/cn_data" # target_dir + if not exists_qlib_data(provider_uri): + print(f"Qlib data is not found in {provider_uri}") + sys.path.append(str(Path(__file__).resolve().parent.parent.joinpath("scripts"))) + from get_data import GetData + + GetData().qlib_data(target_dir=provider_uri, region=REG_CN) + + qlib.init(provider_uri=provider_uri, region=REG_CN) + + market = "csi300" + benchmark = "SH000300" + + ################################### + # train model + ################################### + data_handler_config = { + "start_time": "2008-01-01", + "end_time": "2020-08-01", + "fit_start_time": "2008-01-01", + "fit_end_time": "2014-12-31", + "instruments": market, + "infer_processors": [ + {"class": "ProcessInf", "kwargs": {}}, + {"class": "ZScoreNorm", "kwargs": {"fields_group": "feature"}}, + {"class": "Fillna", "kwargs": {}}, + ], + "learn_processors": [{ + "class": "DropnaLabel", }, + ], + "label": (["Ref(Min($low, 5), -4)/$close - 1"], ["LABEL0"]) # the period for risk prediction is 5 days + } + + task = { + "model": { + "class": "LGBModel", + "module_path": "qlib.contrib.model.gbdt", + "kwargs": { + "loss": "mse", + "colsample_bytree": 0.8999, + "learning_rate": 0.02, + "subsample": 0.7, + "lambda_l1": 11.9668, + "lambda_l2": 339.1301, + "max_depth": 16, + "num_leaves": 31, + "num_threads": 20, + }, + }, + "dataset": { + "class": "DatasetH", + "module_path": "qlib.data.dataset", + "kwargs": { + "handler": { + "class": "Alpha360", + "module_path": "qlib.contrib.data.handler", + "kwargs": data_handler_config, + }, + "segments": { + "train": ("2008-01-01", "2014-12-31"), + "valid": ("2015-01-01", "2016-12-31"), + "test": ("2017-01-01", "2020-08-01"), + }, + }, + }, + } + + port_analysis_config = { + "strategy": { + "class": "TopkDropoutStrategy", + "module_path": "qlib.contrib.strategy.strategy", + "kwargs": { + "topk": 50, + "n_drop": 5, + }, + }, + "backtest": { + "verbose": False, + "limit_threshold": 0.095, + "account": 100000000, + "benchmark": benchmark, + "deal_price": "close", + "open_cost": 0.0005, + "close_cost": 0.0015, + "min_cost": 5, + "return_order": True, + }, + } + + # model initiaiton + model = init_instance_by_config(task["model"]) + dataset = init_instance_by_config(task["dataset"]) + + # NOTE: This line is optional + # It demonstrates that the dataset can be used standalone. + example_df = dataset.prepare("train") + print(example_df.head()) + + def heatmap(actual_risk, predicted_risk, step=0.02): + """ + plot the precision heatmap as a visualized evaluation for risk predition + :param actual_risk: the LABEL0 of test samples + :param predicted_risk: the predicted results of test samples + :param step: the internal size of risk values on axis + :return: + """ + num_step = math.ceil(-predicted_risk.min() / step) + matrix = np.zeros((num_step, num_step), dtype=np.float) + for pred_thresh in range(num_step): + for act_thresh in range(num_step): + actual_positive = actual_risk < -act_thresh*step + predicted_alarm = predicted_risk < -pred_thresh*step + num_alarm = predicted_alarm.sum() + num_tp = (actual_positive & predicted_alarm).sum() + matrix[pred_thresh, act_thresh] = num_tp / num_alarm + axis_labels = ['{:.3f}'.format(-x * step) for x in range(num_step)] + return matrix, axis_labels + + # start exp + with R.start(experiment_name="workflow"): + R.log_params(**flatten_dict(task)) + model.fit(dataset) + + # prediction + actual_risk = dataset.prepare("test", col_set="label", data_key=DataHandlerLP.DK_I)['LABEL0'] + pred = model.predict(dataset) + + result_df = pd.concat((actual_risk, pred), axis=1) + result_df.columns = ['Actual Risk', 'Predicted Risk'] + result_df.dropna(inplace=True) + actual_risk, predicted_risk = result_df.iloc[:, 0], result_df.iloc[:, 1] + corr = pearsonr(actual_risk, predicted_risk)[0] + print('The correlation between predicted risk and actual risk is: {:.6f}'.format(corr)) + + # visualized results + fig, axes = plt.subplots(2, 2, figsize=(15, 10)) + sns.histplot(actual_risk, ax=axes[0, 0]) + axes[0, 0].set_title('Market: {} Actual Risk'.format(market)) + axes[0, 0].grid() + + sns.histplot(predicted_risk, ax=axes[0, 1]) + axes[0, 1].set_title('Feature: {} Predicted Risk'.format(task['dataset']['kwargs']['handler']['class'])) + axes[0, 1].grid() + + sns.scatterplot(data=result_df, ax=axes[1, 0], x='Actual Risk', y='Predicted Risk', s=20) + axes[1, 0].set_title('Market: {} Feature: {} Corr: {:.5f}'.format( + market, task['dataset']['kwargs']['handler']['class'], corr)) + axes[1, 0].grid() + + matrix, ax_labels = heatmap(actual_risk, predicted_risk) + sns.heatmap(matrix, annot=True, fmt=".3f", xticklabels=ax_labels, yticklabels=ax_labels, ax=axes[1, 1], + ) + axes[1, 1].set_xlabel('Predicted Alarm Threshold') + axes[1, 1].set_ylabel('Actual Positive Threshold') + axes[1, 1].set_title('Risk Prediction Precision Heatmap') + plt.show() From ce60097722d46bb431224d1bf9e67e59b2e03224 Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Wed, 24 Feb 2021 16:59:31 +0900 Subject: [PATCH 027/134] Add README and Formatted --- README.md | 1 + examples/benchmarks/DoubleEnsemble/README.md | 4 + qlib/contrib/model/double_ensemble.py | 77 ++++++++++---------- 3 files changed, 45 insertions(+), 37 deletions(-) create mode 100644 examples/benchmarks/DoubleEnsemble/README.md diff --git a/README.md b/README.md index 787075d6a..e1608c37d 100644 --- a/README.md +++ b/README.md @@ -232,6 +232,7 @@ Here is a list of models built on `Qlib`. - [SFM based on pytorch (Liheng Zhang, et al. 2017)](qlib/contrib/model/pytorch_sfm.py) - [TFT based on tensorflow (Bryan Lim, et al. 2019)](examples/benchmarks/TFT/tft.py) - [TabNet based on pytorch (Sercan O. Arik, et al. 2019)](qlib/contrib/model/pytorch_tabnet.py) +- [DoubleEnsemble based on LightGBM (Chuheng Zhang, et al. 2020)](qlib/contrib/model/double_ensemble.py) Your PR of new Quant models is highly welcomed. diff --git a/examples/benchmarks/DoubleEnsemble/README.md b/examples/benchmarks/DoubleEnsemble/README.md new file mode 100644 index 000000000..67e741050 --- /dev/null +++ b/examples/benchmarks/DoubleEnsemble/README.md @@ -0,0 +1,4 @@ +# DoubleEnsemble +* DoubleEnsemble is an ensemble framework leveraging learning trajectory based sample reweighting and shuffling based feature selection, to solve both the low signal-to-noise ratio and increasing number of features problems. They identify the key samples based on the training dynamics on each sample and elicit key features based on the ablation impact of each feature via shuffling. The model is applicable to a wide range of base models, capable of extracting complex patterns, while mitigating the overfitting and instability issues for financial market prediction. +* This code used in Qlib is implemented by ourselves. +* Paper: DoubleEnsemble: A New Ensemble Method Based on Sample Reweighting and Feature Selection for Financial Data Analysis [https://arxiv.org/pdf/2010.01265.pdf](https://arxiv.org/pdf/2010.01265.pdf). \ No newline at end of file diff --git a/qlib/contrib/model/double_ensemble.py b/qlib/contrib/model/double_ensemble.py index 786b3987c..c96b69e8b 100644 --- a/qlib/contrib/model/double_ensemble.py +++ b/qlib/contrib/model/double_ensemble.py @@ -15,21 +15,22 @@ class DEnsembleModel(Model): """Double Ensemble Model""" def __init__( - self, - base="gbm", - loss="mse", - k=6, - enable_sr=True, - enable_fs=True, - alpha1=1., - alpha2=1., - bins_sr=10, - bins_fs=5, - decay=None, - sample_ratios=None, - sub_weights=None, - epochs=100, - **kwargs): + self, + base="gbm", + loss="mse", + k=6, + enable_sr=True, + enable_fs=True, + alpha1=1.0, + alpha2=1.0, + bins_sr=10, + bins_fs=5, + decay=None, + sample_ratios=None, + sub_weights=None, + epochs=100, + **kwargs + ): self.base = base # "gbm" or "mlp", specifically, we use lgbm for "gbm" self.k = k self.enable_sr = enable_sr @@ -54,10 +55,7 @@ class DEnsembleModel(Model): self.params.update(kwargs) self.loss = loss - def fit( - self, - dataset: DatasetH - ): + def fit(self, dataset: DatasetH): df_train, df_valid = dataset.prepare( ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L ) @@ -71,7 +69,7 @@ class DEnsembleModel(Model): # train k sub-models for i_k in range(self.k): self.sub_features.append(features) - self.logger.info("Training sub-model: ({}/{})".format(i_k+1, self.k)) + self.logger.info("Training sub-model: ({}/{})".format(i_k + 1, self.k)) model_k = self.train_submodel(df_train, df_valid, weights, features) self.ensemble.append(model_k) # no further sample re-weight and feature selection needed for the last sub-model @@ -82,12 +80,12 @@ class DEnsembleModel(Model): loss_curve = self.retrieve_loss_curve(model_k, df_train, features) pred_k = self.predict_sub(model_k, df_train, features) pred_sub.iloc[:, i_k] = pred_k - pred_ensemble = pred_sub.iloc[:, :i_k+1].mean(axis=1) + pred_ensemble = pred_sub.iloc[:, : i_k + 1].mean(axis=1) loss_values = pd.Series(self.get_loss(y_train.values.squeeze(), pred_ensemble.values)) if self.enable_sr: self.logger.info("Sample re-weighting...") - weights = self.sample_reweight(loss_curve, loss_values, i_k+1) + weights = self.sample_reweight(loss_curve, loss_values, i_k + 1) if self.enable_fs: self.logger.info("Feature selection...") @@ -148,14 +146,14 @@ class DEnsembleModel(Model): # calculate h-value for each sample h1 = loss_values_norm h2 = (l_end / l_start).rank(pct=True) - h = pd.DataFrame({'h_value': self.alpha1 * h1 + self.alpha2 * h2}) + h = pd.DataFrame({"h_value": self.alpha1 * h1 + self.alpha2 * h2}) # calculate weights - h['bins'] = pd.cut(h['h_value'], self.bins_sr) - h_avg = h.groupby('bins')['h_value'].mean() + h["bins"] = pd.cut(h["h_value"], self.bins_sr) + h_avg = h.groupby("bins")["h_value"].mean() weights = pd.Series(np.zeros(N, dtype=float)) for i_b, b in enumerate(h_avg.index): - weights[h['bins'] == b] = 1. / (self.decay ** k_th * h_avg[i_b] + 0.1) + weights[h["bins"] == b] = 1.0 / (self.decay ** k_th * h_avg[i_b] + 0.1) return weights def feature_selection(self, df_train, loss_values): @@ -170,7 +168,7 @@ class DEnsembleModel(Model): x_train, y_train = df_train["feature"], df_train["label"] features = x_train.columns N, F = x_train.shape - g = pd.DataFrame({'g_value': np.zeros(F, dtype=float)}) + g = pd.DataFrame({"g_value": np.zeros(F, dtype=float)}) M = len(self.ensemble) # shuffle specific columns and calculate g-value for each feature @@ -179,23 +177,27 @@ class DEnsembleModel(Model): x_train_tmp.loc[:, feat] = np.random.permutation(x_train_tmp.loc[:, feat].values) pred = pd.Series(np.zeros(N), index=x_train_tmp.index) for i_s, submodel in enumerate(self.ensemble): - pred += pd.Series(submodel.predict(x_train_tmp.loc[:, self.sub_features[i_s]].values), - index=x_train_tmp.index) / M + pred += ( + pd.Series( + submodel.predict(x_train_tmp.loc[:, self.sub_features[i_s]].values), index=x_train_tmp.index + ) + / M + ) loss_feat = self.get_loss(y_train.values.squeeze(), pred.values) - g.loc[i_f, 'g_value'] = np.mean(loss_feat - loss_values) / np.std(loss_feat - loss_values) + g.loc[i_f, "g_value"] = np.mean(loss_feat - loss_values) / np.std(loss_feat - loss_values) x_train_tmp.loc[:, feat] = x_train.loc[:, feat].copy() # one column in train features is all-nan # if g['g_value'].isna().any() - g['g_value'].replace(np.nan, 0, inplace=True) + g["g_value"].replace(np.nan, 0, inplace=True) # divide features into bins_fs bins - g['bins'] = pd.cut(g['g_value'], self.bins_fs) + g["bins"] = pd.cut(g["g_value"], self.bins_fs) # randomly sample features from bins to construct the new features res_feat = [] - sorted_bins = sorted(g['bins'].unique(), reverse=True) + sorted_bins = sorted(g["bins"].unique(), reverse=True) for i_b, b in enumerate(sorted_bins): - b_feat = features[g['bins'] == b] + b_feat = features[g["bins"] == b] num_feat = int(np.ceil(self.sample_ratios[i_b] * len(b_feat))) res_feat = res_feat + np.random.choice(b_feat, size=num_feat).tolist() return pd.Index(res_feat) @@ -233,12 +235,13 @@ class DEnsembleModel(Model): pred = pd.Series(np.zeros(x_test.shape[0]), index=x_test.index) for i_sub, submodel in enumerate(self.ensemble): feat_sub = self.sub_features[i_sub] - pred += pd.Series(submodel.predict(x_test.loc[:, feat_sub].values), index=x_test.index) * self.sub_weights[i_sub] + pred += ( + pd.Series(submodel.predict(x_test.loc[:, feat_sub].values), index=x_test.index) + * self.sub_weights[i_sub] + ) return pred def predict_sub(self, submodel, df_data, features): x_data, y_data = df_data["feature"].loc[:, features], df_data["label"] pred_sub = pd.Series(submodel.predict(x_data.values), index=x_data.index) return pred_sub - - From 70575e8a1ce4f63cced98a55de1914009012bdcd Mon Sep 17 00:00:00 2001 From: Meng Dong Date: Wed, 24 Feb 2021 16:10:38 +0800 Subject: [PATCH 028/134] Delete workflow_by_code_lgb_risk_demo.py --- examples/workflow_by_code_lgb_risk_demo.py | 179 --------------------- 1 file changed, 179 deletions(-) delete mode 100644 examples/workflow_by_code_lgb_risk_demo.py diff --git a/examples/workflow_by_code_lgb_risk_demo.py b/examples/workflow_by_code_lgb_risk_demo.py deleted file mode 100644 index b250993d3..000000000 --- a/examples/workflow_by_code_lgb_risk_demo.py +++ /dev/null @@ -1,179 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import sys -from pathlib import Path - -import qlib -from qlib.config import REG_CN -from qlib.utils import exists_qlib_data, init_instance_by_config, flatten_dict -from qlib.workflow import R -from qlib.workflow.record_temp import SignalRecord, PortAnaRecord -from qlib.data.dataset.handler import DataHandlerLP - -import seaborn as sns -import matplotlib.pyplot as plt -import math -import pandas as pd -from scipy.stats.stats import pearsonr -import numpy as np - -if __name__ == "__main__": - - # use default data - provider_uri = "~/.qlib/qlib_data/cn_data" # target_dir - if not exists_qlib_data(provider_uri): - print(f"Qlib data is not found in {provider_uri}") - sys.path.append(str(Path(__file__).resolve().parent.parent.joinpath("scripts"))) - from get_data import GetData - - GetData().qlib_data(target_dir=provider_uri, region=REG_CN) - - qlib.init(provider_uri=provider_uri, region=REG_CN) - - market = "csi300" - benchmark = "SH000300" - - ################################### - # train model - ################################### - data_handler_config = { - "start_time": "2008-01-01", - "end_time": "2020-08-01", - "fit_start_time": "2008-01-01", - "fit_end_time": "2014-12-31", - "instruments": market, - "infer_processors": [ - {"class": "ProcessInf", "kwargs": {}}, - {"class": "ZScoreNorm", "kwargs": {"fields_group": "feature"}}, - {"class": "Fillna", "kwargs": {}}, - ], - "learn_processors": [{ - "class": "DropnaLabel", }, - ], - "label": (["Ref(Min($low, 5), -4)/$close - 1"], ["LABEL0"]) # the period for risk prediction is 5 days - } - - task = { - "model": { - "class": "LGBModel", - "module_path": "qlib.contrib.model.gbdt", - "kwargs": { - "loss": "mse", - "colsample_bytree": 0.8999, - "learning_rate": 0.02, - "subsample": 0.7, - "lambda_l1": 11.9668, - "lambda_l2": 339.1301, - "max_depth": 16, - "num_leaves": 31, - "num_threads": 20, - }, - }, - "dataset": { - "class": "DatasetH", - "module_path": "qlib.data.dataset", - "kwargs": { - "handler": { - "class": "Alpha360", - "module_path": "qlib.contrib.data.handler", - "kwargs": data_handler_config, - }, - "segments": { - "train": ("2008-01-01", "2014-12-31"), - "valid": ("2015-01-01", "2016-12-31"), - "test": ("2017-01-01", "2020-08-01"), - }, - }, - }, - } - - port_analysis_config = { - "strategy": { - "class": "TopkDropoutStrategy", - "module_path": "qlib.contrib.strategy.strategy", - "kwargs": { - "topk": 50, - "n_drop": 5, - }, - }, - "backtest": { - "verbose": False, - "limit_threshold": 0.095, - "account": 100000000, - "benchmark": benchmark, - "deal_price": "close", - "open_cost": 0.0005, - "close_cost": 0.0015, - "min_cost": 5, - "return_order": True, - }, - } - - # model initiaiton - model = init_instance_by_config(task["model"]) - dataset = init_instance_by_config(task["dataset"]) - - # NOTE: This line is optional - # It demonstrates that the dataset can be used standalone. - example_df = dataset.prepare("train") - print(example_df.head()) - - def heatmap(actual_risk, predicted_risk, step=0.02): - """ - plot the precision heatmap as a visualized evaluation for risk predition - :param actual_risk: the LABEL0 of test samples - :param predicted_risk: the predicted results of test samples - :param step: the internal size of risk values on axis - :return: - """ - num_step = math.ceil(-predicted_risk.min() / step) - matrix = np.zeros((num_step, num_step), dtype=np.float) - for pred_thresh in range(num_step): - for act_thresh in range(num_step): - actual_positive = actual_risk < -act_thresh*step - predicted_alarm = predicted_risk < -pred_thresh*step - num_alarm = predicted_alarm.sum() - num_tp = (actual_positive & predicted_alarm).sum() - matrix[pred_thresh, act_thresh] = num_tp / num_alarm - axis_labels = ['{:.3f}'.format(-x * step) for x in range(num_step)] - return matrix, axis_labels - - # start exp - with R.start(experiment_name="workflow"): - R.log_params(**flatten_dict(task)) - model.fit(dataset) - - # prediction - actual_risk = dataset.prepare("test", col_set="label", data_key=DataHandlerLP.DK_I)['LABEL0'] - pred = model.predict(dataset) - - result_df = pd.concat((actual_risk, pred), axis=1) - result_df.columns = ['Actual Risk', 'Predicted Risk'] - result_df.dropna(inplace=True) - actual_risk, predicted_risk = result_df.iloc[:, 0], result_df.iloc[:, 1] - corr = pearsonr(actual_risk, predicted_risk)[0] - print('The correlation between predicted risk and actual risk is: {:.6f}'.format(corr)) - - # visualized results - fig, axes = plt.subplots(2, 2, figsize=(15, 10)) - sns.histplot(actual_risk, ax=axes[0, 0]) - axes[0, 0].set_title('Market: {} Actual Risk'.format(market)) - axes[0, 0].grid() - - sns.histplot(predicted_risk, ax=axes[0, 1]) - axes[0, 1].set_title('Feature: {} Predicted Risk'.format(task['dataset']['kwargs']['handler']['class'])) - axes[0, 1].grid() - - sns.scatterplot(data=result_df, ax=axes[1, 0], x='Actual Risk', y='Predicted Risk', s=20) - axes[1, 0].set_title('Market: {} Feature: {} Corr: {:.5f}'.format( - market, task['dataset']['kwargs']['handler']['class'], corr)) - axes[1, 0].grid() - - matrix, ax_labels = heatmap(actual_risk, predicted_risk) - sns.heatmap(matrix, annot=True, fmt=".3f", xticklabels=ax_labels, yticklabels=ax_labels, ax=axes[1, 1], - ) - axes[1, 1].set_xlabel('Predicted Alarm Threshold') - axes[1, 1].set_ylabel('Actual Positive Threshold') - axes[1, 1].set_title('Risk Prediction Precision Heatmap') - plt.show() From 719074d30673d9ba256bf69df396854c3e498c47 Mon Sep 17 00:00:00 2001 From: wangershi Date: Thu, 25 Feb 2021 19:20:14 +0800 Subject: [PATCH 029/134] touch file --- scripts/data_collector/fund/README.md | 49 ++++++++++++++++++++ scripts/data_collector/fund/collector.py | 0 scripts/data_collector/fund/requirements.txt | 0 3 files changed, 49 insertions(+) create mode 100644 scripts/data_collector/fund/README.md create mode 100644 scripts/data_collector/fund/collector.py create mode 100644 scripts/data_collector/fund/requirements.txt diff --git a/scripts/data_collector/fund/README.md b/scripts/data_collector/fund/README.md new file mode 100644 index 000000000..c7b91a3f5 --- /dev/null +++ b/scripts/data_collector/fund/README.md @@ -0,0 +1,49 @@ +# Collect Fund Data + +> *Please pay **ATTENTION** that the data is collected from [天天基金网](https://fund.eastmoney.com/) and the data might not be perfect. We recommend users to prepare their own data if they have high-quality dataset. For more information, users can refer to the [related document](https://qlib.readthedocs.io/en/latest/component/data.html#converting-csv-format-into-qlib-format)* + +## Requirements + +```bash +pip install -r requirements.txt +``` + +## Collector Data + + +### CN Data + +#### 1d from East Money + +```bash + +# download from yahoo finance +python collector.py download_data --source_dir ~/.qlib/stock_data/source/cn_1d --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1d + + +# dump data +cd qlib/scripts +python dump_bin.py dump_all --csv_path ~/.qlib/stock_data/source/cn_1d_nor --qlib_dir ~/.qlib/qlib_data/qlib_cn_1d --freq day --exclude_fields date,adjclose,dividends,splits,symbol + +``` + +### using data + +```python +import qlib +from qlib.data import D + +qlib.init(provider_uri="~/.qlib/qlib_data/qlib_cn_1d", region="CN") +df = D.features(D.instruments("all"), ["$close"], freq="day") +``` + + +### Help +```bash +pythono collector.py collector_data --help +``` + +## Parameters + +- interval: 1min or 1d +- region: CN or US diff --git a/scripts/data_collector/fund/collector.py b/scripts/data_collector/fund/collector.py new file mode 100644 index 000000000..e69de29bb diff --git a/scripts/data_collector/fund/requirements.txt b/scripts/data_collector/fund/requirements.txt new file mode 100644 index 000000000..e69de29bb From a96f0c2e5fa427ce33660c8791fa2057c6f423fc Mon Sep 17 00:00:00 2001 From: Wendi Li Date: Fri, 26 Feb 2021 23:12:59 +0800 Subject: [PATCH 030/134] Update README.md Typos fixed. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6f416d420..a13a2b820 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Qlib is an AI-oriented quantitative investment platform, which aims to realize t It contains the full ML pipeline of data processing, model training, back-testing; and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution. -With Qlib, user can easily try ideas to create better Quant investment strategies. +With Qlib, users can easily try ideas to create better Quant investment strategies. For more details, please refer to our paper ["Qlib: An AI-oriented Quantitative Investment Platform"](https://arxiv.org/abs/2009.11189). @@ -246,10 +246,10 @@ The performance of each model on the `Alpha158` and `Alpha360` dataset can be fo All the models listed above are runnable with ``Qlib``. Users can find the config files we provide and some details about the model through the [benchmarks](examples/benchmarks) folder. More information can be retrieved at the model files listed above. `Qlib` provides three different ways to run a single model, users can pick the one that fits their cases best: -- User can use the tool `qrun` mentioned above to run a model's workflow based from a config file. -- User can create a `workflow_by_code` python script based on the [one](examples/workflow_by_code.py) listed in the `examples` folder. +- Users can use the tool `qrun` mentioned above to run a model's workflow based from a config file. +- Users can create a `workflow_by_code` python script based on the [one](examples/workflow_by_code.py) listed in the `examples` folder. -- User can use the script [`run_all_model.py`](examples/run_all_model.py) listed in the `examples` folder to run a model. Here is an example of the specific shell command to be used: `python run_all_model.py --models=lightgbm`, where the `--models` arguments can take any number of models listed above(the available models can be found in [benchmarks](examples/benchmarks/)). For more use cases, please refer to the file's [docstrings](examples/run_all_model.py). +- Users can use the script [`run_all_model.py`](examples/run_all_model.py) listed in the `examples` folder to run a model. Here is an example of the specific shell command to be used: `python run_all_model.py --models=lightgbm`, where the `--models` arguments can take any number of models listed above(the available models can be found in [benchmarks](examples/benchmarks/)). For more use cases, please refer to the file's [docstrings](examples/run_all_model.py). ## Run multiple models `Qlib` also provides a script [`run_all_model.py`](examples/run_all_model.py) which can run multiple models for several iterations. (**Note**: the script only support *Linux* for now. Other OS will be supported in the future. Besides, it doesn't support parrallel running the same model for multiple times as well, and this will be fixed in the future development too.) From 6e5639621710bae40d508357d77b9d60a104aff8 Mon Sep 17 00:00:00 2001 From: wangershi Date: Sun, 28 Feb 2021 12:24:26 +0800 Subject: [PATCH 031/134] add crawler --- scripts/data_collector/fund/README.md | 4 +- scripts/data_collector/fund/collector.py | 408 +++++++++++++++++++++++ scripts/data_collector/utils.py | 37 ++ 3 files changed, 447 insertions(+), 2 deletions(-) diff --git a/scripts/data_collector/fund/README.md b/scripts/data_collector/fund/README.md index c7b91a3f5..b14938a3d 100644 --- a/scripts/data_collector/fund/README.md +++ b/scripts/data_collector/fund/README.md @@ -17,8 +17,8 @@ pip install -r requirements.txt ```bash -# download from yahoo finance -python collector.py download_data --source_dir ~/.qlib/stock_data/source/cn_1d --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1d +# download from eastmoney.com +python collector.py download_data --source_dir ~/.qlib/fund_data/source/cn_1d --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1d # dump data diff --git a/scripts/data_collector/fund/collector.py b/scripts/data_collector/fund/collector.py index e69de29bb..404b6af0e 100644 --- a/scripts/data_collector/fund/collector.py +++ b/scripts/data_collector/fund/collector.py @@ -0,0 +1,408 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import abc +import sys +import copy +import time +import datetime +import importlib +import json +from abc import ABC +from pathlib import Path +from typing import Iterable, Type +from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor + +import fire +import requests +import numpy as np +import pandas as pd +from tqdm import tqdm +from loguru import logger +from dateutil.tz import tzlocal +from qlib.utils import code_to_fname, fname_to_code + +CUR_DIR = Path(__file__).resolve().parent +sys.path.append(str(CUR_DIR.parent.parent)) +from data_collector.utils import get_calendar_list, get_en_fund_symbols + +INDEX_BENCH_URL = "http://api.fund.eastmoney.com/f10/lsjz?callback=jQuery_&fundCode={index_code}&pageIndex=1&pageSize={numberOfHistoricalDaysToCrawl}&startDate={startDate}&endDate={endDate}" +REGION_CN = "CN" +REGION_US = "US" + + +class FundData: + START_DATETIME = pd.Timestamp("2000-01-01") + HIGH_FREQ_START_DATETIME = pd.Timestamp(datetime.datetime.now() - pd.Timedelta(days=5 * 6)) + END_DATETIME = pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1)) + INTERVAL_1d = "1d" + + def __init__( + self, + timezone: str = None, + start=None, + end=None, + interval="1d", + delay=0, + show_1min_logging: bool = False, + ): + """ + + Parameters + ---------- + timezone: str + The timezone where the data is located + delay: float + time.sleep(delay), default 0 + interval: str + freq, value from [1d], default 1d + start: str + start datetime, default None + end: str + end datetime, default None + show_1min_logging: bool + show 1min logging, by default False; if True, there may be many warning logs + """ + self._timezone = tzlocal() if timezone is None else timezone + self._delay = delay + self._interval = interval + self._show_1min_logging = show_1min_logging + self.start_datetime = pd.Timestamp(str(start)) if start else self.START_DATETIME + self.end_datetime = min(pd.Timestamp(str(end)) if end else self.END_DATETIME, self.END_DATETIME) + if self._interval != self.INTERVAL_1d: + raise ValueError(f"interval error: {self._interval}") + + # using for 1min + self._next_datetime = self.convert_datetime(self.start_datetime.date() + pd.Timedelta(days=1), self._timezone) + self._latest_datetime = self.convert_datetime(self.end_datetime.date(), self._timezone) + + self.start_datetime = self.convert_datetime(self.start_datetime, self._timezone) + self.end_datetime = self.convert_datetime(self.end_datetime, self._timezone) + + @staticmethod + def convert_datetime(dt: [pd.Timestamp, datetime.date, str], timezone): + try: + dt = pd.Timestamp(dt, tz=timezone).timestamp() + dt = pd.Timestamp(dt, tz=tzlocal(), unit="s") + except ValueError as e: + pass + return dt + + def _sleep(self): + time.sleep(self._delay) + + @staticmethod + def get_data_from_remote(symbol, interval, start, end, show_1min_logging: bool = False): + error_msg = f"{symbol}-{interval}-{start}-{end}" + + try: + _resp = None + + # TODO: numberOfHistoricalDaysToCrawl should be bigger enouhg + url = INDEX_BENCH_URL.format(index_code=symbol, numberOfHistoricalDaysToCrawl=100, startDate=start, endDate=end) + resp = requests.get(url, headers={"referer": "http://fund.eastmoney.com/110022.html"}) + + if resp.status_code != 200: + raise ValueError("request error") + try: + data = json.loads(resp.text.split("(")[-1].split(")")[0]) + + # Some funds don't show the net value, example: http://fundf10.eastmoney.com/jjjz_010288.html + SYType = data["Data"]["SYType"] + if (SYType == "每万份收益") or (SYType == "每百份收益") or (SYType == "每百万份收益"): + raise Exception("The fund contains 每*份收益") + + _resp = pd.DataFrame( + data["Data"]["LSJZList"] + ) + + except Exception as e: + logger.warning(f"request error: {e}") + raise + + if isinstance(_resp, pd.DataFrame): + return _resp.reset_index() + except Exception as e: + logger.warning(f"{error_msg}:{e}") + + def get_data(self, symbol: str) -> [pd.DataFrame]: + def _get_simple(start_, end_): + self._sleep() + _remote_interval = self._interval + return self.get_data_from_remote( + symbol, + interval=_remote_interval, + start=start_, + end=end_, + show_1min_logging=self._show_1min_logging, + ) + + if self._interval == self.INTERVAL_1d: + _result = _get_simple(self.start_datetime, self.end_datetime) + else: + raise ValueError(f"cannot support {self._interval}") + return _result + + +class FundCollector: + def __init__( + self, + save_dir: [str, Path], + start=None, + end=None, + interval="1d", + max_workers=4, + max_collector_count=2, + delay=0, + check_data_length: bool = False, + limit_nums: int = None, + show_1min_logging: bool = False, + ): + """ + + Parameters + ---------- + save_dir: str + stock save dir + max_workers: int + workers, default 4 + max_collector_count: int + default 2 + delay: float + time.sleep(delay), default 0 + interval: str + freq, value from [1min, 1d], default 1min + start: str + start datetime, default None + end: str + end datetime, default None + check_data_length: bool + check data length, by default False + limit_nums: int + using for debug, by default None + show_1min_logging: bool + show 1m logging, by default False; if True, there may be many warning logs + """ + self.save_dir = Path(save_dir).expanduser().resolve() + self.save_dir.mkdir(parents=True, exist_ok=True) + + self._delay = delay + self.max_workers = max_workers + self._max_collector_count = max_collector_count + self._mini_symbol_map = {} + self._interval = interval + self._check_small_data = check_data_length + + self.fund_list = sorted(set(self.get_fund_list())) + if limit_nums is not None: + try: + self.fund_list = self.fund_list[: int(limit_nums)] + except Exception as e: + logger.warning(f"Cannot use limit_nums={limit_nums}, the parameter will be ignored") + + self.fund_data = FundData( + timezone=self._timezone, + start=start, + end=end, + interval=interval, + delay=delay, + show_1min_logging=show_1min_logging, + ) + + @property + @abc.abstractmethod + def min_numbers_trading(self): + # daily, one year: 252 / 4 + # us 1min, a week: 6.5 * 60 * 5 + # cn 1min, a week: 4 * 60 * 5 + raise NotImplementedError("rewrite min_numbers_trading") + + @abc.abstractmethod + def get_fund_list(self): + raise NotImplementedError("rewrite get_fund_list") + + @property + @abc.abstractmethod + def _timezone(self): + raise NotImplementedError("rewrite get_timezone") + + def save_fund(self, symbol, df: pd.DataFrame): + """save fund data to file + + Parameters + ---------- + symbol: str + fund code + df : pd.DataFrame + df.columns must contain "symbol" and "datetime" + """ + if df.empty: + logger.warning(f"{symbol} is empty") + return + + symbol = code_to_fname(symbol) + stock_path = self.save_dir.joinpath(f"{symbol}.csv") + df["symbol"] = symbol + if stock_path.exists(): + _old_df = pd.read_csv(stock_path) + df = _old_df.append(df, sort=False) + df.to_csv(stock_path, index=False) + + def _save_small_data(self, symbol, df): + if len(df) <= self.min_numbers_trading: + logger.warning(f"the number of trading days of {symbol} is less than {self.min_numbers_trading}!") + _temp = self._mini_symbol_map.setdefault(symbol, []) + _temp.append(df.copy()) + return None + else: + if symbol in self._mini_symbol_map: + self._mini_symbol_map.pop(symbol) + return symbol + + def _get_data(self, symbol): + _result = None + df = self.fund_data.get_data(symbol) + if isinstance(df, pd.DataFrame): + if not df.empty: + if self._check_small_data: + if self._save_small_data(symbol, df) is not None: + _result = symbol + self.save_fund(symbol, df) + else: + _result = symbol + self.save_fund(symbol, df) + return _result + + def _collector(self, fund_list): + + error_symbol = [] + with ThreadPoolExecutor(max_workers=self.max_workers) as executor: + with tqdm(total=len(fund_list)) as p_bar: + for _symbol, _result in zip(fund_list, executor.map(self._get_data, fund_list)): + if _result is None: + error_symbol.append(_symbol) + p_bar.update() + print(error_symbol) + logger.info(f"error symbol nums: {len(error_symbol)}") + logger.info(f"current get symbol nums: {len(fund_list)}") + error_symbol.extend(self._mini_symbol_map.keys()) + return sorted(set(error_symbol)) + + def collector_data(self): + """collector data""" + logger.info("start collector fund data......") + fund_list = self.fund_list + for i in range(self._max_collector_count): + if not fund_list: + break + logger.info(f"getting data: {i+1}") + fund_list = self._collector(fund_list) + logger.info(f"{i+1} finish.") + for _symbol, _df_list in self._mini_symbol_map.items(): + self.save_fund(_symbol, pd.concat(_df_list, sort=False).drop_duplicates(["date"]).sort_values(["date"])) + if self._mini_symbol_map: + logger.warning(f"less than {self.min_numbers_trading} stock list: {list(self._mini_symbol_map.keys())}") + logger.info(f"total {len(self.fund_list)}, error: {len(set(fund_list))}") + +class FundollectorCN(FundCollector, ABC): + def get_fund_list(self): + logger.info("get cn fund symbols......") + symbols = get_en_fund_symbols() + logger.info(f"get {len(symbols)} symbols.") + return symbols + + @property + def _timezone(self): + return "Asia/Shanghai" + + +class FundCollectorCN1d(FundollectorCN): + @property + def min_numbers_trading(self): + return 252 / 4 + +class Run: + def __init__(self, source_dir=None, normalize_dir=None, max_workers=4, region=REGION_CN): + """ + + Parameters + ---------- + source_dir: str + The directory where the raw data collected from the Internet is saved, default "Path(__file__).parent/source" + normalize_dir: str + Directory for normalize data, default "Path(__file__).parent/normalize" + max_workers: int + Concurrent number, default is 4 + region: str + region, value from ["CN", "US"], default "CN" + """ + if source_dir is None: + source_dir = CUR_DIR.joinpath("source") + self.source_dir = Path(source_dir).expanduser().resolve() + self.source_dir.mkdir(parents=True, exist_ok=True) + + if normalize_dir is None: + normalize_dir = CUR_DIR.joinpath("normalize") + self.normalize_dir = Path(normalize_dir).expanduser().resolve() + self.normalize_dir.mkdir(parents=True, exist_ok=True) + + self._cur_module = importlib.import_module("collector") + self.max_workers = max_workers + self.region = region + + def download_data( + self, + max_collector_count=2, + delay=0, + start=None, + end=None, + interval="1d", + check_data_length=False, + limit_nums=None, + show_1min_logging=False, + ): + """download data from Internet + + Parameters + ---------- + max_collector_count: int + default 2 + delay: float + time.sleep(delay), default 0 + interval: str + freq, value from [1min, 1d], default 1d + start: str + start datetime, default "2000-01-01" + end: str + end datetime, default ``pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1))`` + check_data_length: bool + check data length, by default False + limit_nums: int + using for debug, by default None + show_1min_logging: bool + show 1m logging, by default False; if True, there may be many warning logs + + Examples + --------- + # get daily data + $ python collector.py download_data --source_dir ~/.qlib/fund_data/source/cn_1d --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1d + """ + + _class = getattr( + self._cur_module, f"FundCollector{self.region.upper()}{interval}" + ) # type: Type[FundCollector] + _class( + self.source_dir, + max_workers=self.max_workers, + max_collector_count=max_collector_count, + delay=delay, + start=start, + end=end, + interval=interval, + check_data_length=check_data_length, + limit_nums=limit_nums, + show_1min_logging=show_1min_logging, + ).collector_data() + +if __name__ == "__main__": + fire.Fire(Run) diff --git a/scripts/data_collector/utils.py b/scripts/data_collector/utils.py index 5f34aae7d..3319025fc 100644 --- a/scripts/data_collector/utils.py +++ b/scripts/data_collector/utils.py @@ -34,6 +34,7 @@ _BENCH_CALENDAR_LIST = None _ALL_CALENDAR_LIST = None _HS_SYMBOLS = None _US_SYMBOLS = None +_EN_FUND_SYMBOLS = None _CALENDAR_MAP = {} # NOTE: Until 2020-10-20 20:00:00 @@ -220,6 +221,42 @@ def get_us_stock_symbols(qlib_data_path: [str, Path] = None) -> list: return _US_SYMBOLS +def get_en_fund_symbols(qlib_data_path: [str, Path] = None) -> list: + """get en fund symbols + + Returns + ------- + fund symbols in China + """ + global _EN_FUND_SYMBOLS + + @deco_retry + def _get_eastmoney(): + url = "http://fund.eastmoney.com/js/fundcode_search.js" + resp = requests.get(url) + if resp.status_code != 200: + raise ValueError("request error") + try: + _symbols = [] + for sub_data in re.findall(r"[\[](.*?)[\]]", resp.content.decode().split("= [")[-1].replace("];", "")): + data = sub_data.replace("\"","").replace("'","") + # TODO: do we need other informations, like fund_name from ['000001', 'HXCZHH', '华夏成长混合', '混合型', 'HUAXIACHENGZHANGHUNHE'] + _symbols.append(data.split(",")[0]) + except Exception as e: + logger.warning(f"request error: {e}") + raise + if len(_symbols) < 8000: + raise ValueError("request error") + return _symbols + + if _EN_FUND_SYMBOLS is None: + _all_symbols = _get_eastmoney() + + _EN_FUND_SYMBOLS = sorted(set(_all_symbols)) + + return _EN_FUND_SYMBOLS + + def symbol_suffix_to_prefix(symbol: str, capital: bool = True) -> str: """symbol suffix to prefix From db80b620d8408998cab30e4a6d51b9d038264c7e Mon Sep 17 00:00:00 2001 From: wangershi Date: Sun, 28 Feb 2021 17:03:14 +0800 Subject: [PATCH 032/134] ready for collector --- scripts/data_collector/fund/collector.py | 79 ++++++-------------- scripts/data_collector/fund/requirements.txt | 10 +++ 2 files changed, 32 insertions(+), 57 deletions(-) diff --git a/scripts/data_collector/fund/collector.py b/scripts/data_collector/fund/collector.py index 404b6af0e..f9b2a6775 100644 --- a/scripts/data_collector/fund/collector.py +++ b/scripts/data_collector/fund/collector.py @@ -20,20 +20,16 @@ import pandas as pd from tqdm import tqdm from loguru import logger from dateutil.tz import tzlocal -from qlib.utils import code_to_fname, fname_to_code CUR_DIR = Path(__file__).resolve().parent sys.path.append(str(CUR_DIR.parent.parent)) -from data_collector.utils import get_calendar_list, get_en_fund_symbols +from data_collector.utils import get_en_fund_symbols INDEX_BENCH_URL = "http://api.fund.eastmoney.com/f10/lsjz?callback=jQuery_&fundCode={index_code}&pageIndex=1&pageSize={numberOfHistoricalDaysToCrawl}&startDate={startDate}&endDate={endDate}" REGION_CN = "CN" -REGION_US = "US" - class FundData: START_DATETIME = pd.Timestamp("2000-01-01") - HIGH_FREQ_START_DATETIME = pd.Timestamp(datetime.datetime.now() - pd.Timedelta(days=5 * 6)) END_DATETIME = pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1)) INTERVAL_1d = "1d" @@ -44,7 +40,6 @@ class FundData: end=None, interval="1d", delay=0, - show_1min_logging: bool = False, ): """ @@ -60,22 +55,15 @@ class FundData: start datetime, default None end: str end datetime, default None - show_1min_logging: bool - show 1min logging, by default False; if True, there may be many warning logs """ self._timezone = tzlocal() if timezone is None else timezone self._delay = delay self._interval = interval - self._show_1min_logging = show_1min_logging self.start_datetime = pd.Timestamp(str(start)) if start else self.START_DATETIME self.end_datetime = min(pd.Timestamp(str(end)) if end else self.END_DATETIME, self.END_DATETIME) if self._interval != self.INTERVAL_1d: raise ValueError(f"interval error: {self._interval}") - # using for 1min - self._next_datetime = self.convert_datetime(self.start_datetime.date() + pd.Timedelta(days=1), self._timezone) - self._latest_datetime = self.convert_datetime(self.end_datetime.date(), self._timezone) - self.start_datetime = self.convert_datetime(self.start_datetime, self._timezone) self.end_datetime = self.convert_datetime(self.end_datetime, self._timezone) @@ -92,33 +80,26 @@ class FundData: time.sleep(self._delay) @staticmethod - def get_data_from_remote(symbol, interval, start, end, show_1min_logging: bool = False): + def get_data_from_remote(symbol, interval, start, end): error_msg = f"{symbol}-{interval}-{start}-{end}" try: - _resp = None - # TODO: numberOfHistoricalDaysToCrawl should be bigger enouhg - url = INDEX_BENCH_URL.format(index_code=symbol, numberOfHistoricalDaysToCrawl=100, startDate=start, endDate=end) + url = INDEX_BENCH_URL.format(index_code=symbol, numberOfHistoricalDaysToCrawl=10000, startDate=start, endDate=end) resp = requests.get(url, headers={"referer": "http://fund.eastmoney.com/110022.html"}) if resp.status_code != 200: raise ValueError("request error") - try: - data = json.loads(resp.text.split("(")[-1].split(")")[0]) + + data = json.loads(resp.text.split("(")[-1].split(")")[0]) - # Some funds don't show the net value, example: http://fundf10.eastmoney.com/jjjz_010288.html - SYType = data["Data"]["SYType"] - if (SYType == "每万份收益") or (SYType == "每百份收益") or (SYType == "每百万份收益"): - raise Exception("The fund contains 每*份收益") + # Some funds don't show the net value, example: http://fundf10.eastmoney.com/jjjz_010288.html + SYType = data["Data"]["SYType"] + if (SYType == "每万份收益") or (SYType == "每百份收益") or (SYType == "每百万份收益"): + raise Exception("The fund contains 每*份收益") - _resp = pd.DataFrame( - data["Data"]["LSJZList"] - ) - - except Exception as e: - logger.warning(f"request error: {e}") - raise + # TODO: should we sort the value by datetime? + _resp = pd.DataFrame(data["Data"]["LSJZList"]) if isinstance(_resp, pd.DataFrame): return _resp.reset_index() @@ -134,7 +115,6 @@ class FundData: interval=_remote_interval, start=start_, end=end_, - show_1min_logging=self._show_1min_logging, ) if self._interval == self.INTERVAL_1d: @@ -156,14 +136,13 @@ class FundCollector: delay=0, check_data_length: bool = False, limit_nums: int = None, - show_1min_logging: bool = False, ): """ Parameters ---------- save_dir: str - stock save dir + fund save dir max_workers: int workers, default 4 max_collector_count: int @@ -180,8 +159,6 @@ class FundCollector: check data length, by default False limit_nums: int using for debug, by default None - show_1min_logging: bool - show 1m logging, by default False; if True, there may be many warning logs """ self.save_dir = Path(save_dir).expanduser().resolve() self.save_dir.mkdir(parents=True, exist_ok=True) @@ -206,7 +183,6 @@ class FundCollector: end=end, interval=interval, delay=delay, - show_1min_logging=show_1min_logging, ) @property @@ -240,13 +216,14 @@ class FundCollector: logger.warning(f"{symbol} is empty") return - symbol = code_to_fname(symbol) - stock_path = self.save_dir.joinpath(f"{symbol}.csv") + fund_path = self.save_dir.joinpath(f"{symbol}.csv") df["symbol"] = symbol - if stock_path.exists(): - _old_df = pd.read_csv(stock_path) + if fund_path.exists(): + # TODO: read the fund code as str, not int, like "000001" shouldn't be "1" + _old_df = pd.read_csv(fund_path) + # TODO: remove the duplicate date df = _old_df.append(df, sort=False) - df.to_csv(stock_path, index=False) + df.to_csv(fund_path, index=False) def _save_small_data(self, symbol, df): if len(df) <= self.min_numbers_trading: @@ -274,7 +251,6 @@ class FundCollector: return _result def _collector(self, fund_list): - error_symbol = [] with ThreadPoolExecutor(max_workers=self.max_workers) as executor: with tqdm(total=len(fund_list)) as p_bar: @@ -301,7 +277,7 @@ class FundCollector: for _symbol, _df_list in self._mini_symbol_map.items(): self.save_fund(_symbol, pd.concat(_df_list, sort=False).drop_duplicates(["date"]).sort_values(["date"])) if self._mini_symbol_map: - logger.warning(f"less than {self.min_numbers_trading} stock list: {list(self._mini_symbol_map.keys())}") + logger.warning(f"less than {self.min_numbers_trading} fund list: {list(self._mini_symbol_map.keys())}") logger.info(f"total {len(self.fund_list)}, error: {len(set(fund_list))}") class FundollectorCN(FundCollector, ABC): @@ -322,30 +298,23 @@ class FundCollectorCN1d(FundollectorCN): return 252 / 4 class Run: - def __init__(self, source_dir=None, normalize_dir=None, max_workers=4, region=REGION_CN): + def __init__(self, source_dir=None, max_workers=4, region=REGION_CN): """ Parameters ---------- source_dir: str The directory where the raw data collected from the Internet is saved, default "Path(__file__).parent/source" - normalize_dir: str - Directory for normalize data, default "Path(__file__).parent/normalize" max_workers: int Concurrent number, default is 4 region: str - region, value from ["CN", "US"], default "CN" + region, value from ["CN"], default "CN" """ if source_dir is None: source_dir = CUR_DIR.joinpath("source") self.source_dir = Path(source_dir).expanduser().resolve() self.source_dir.mkdir(parents=True, exist_ok=True) - if normalize_dir is None: - normalize_dir = CUR_DIR.joinpath("normalize") - self.normalize_dir = Path(normalize_dir).expanduser().resolve() - self.normalize_dir.mkdir(parents=True, exist_ok=True) - self._cur_module = importlib.import_module("collector") self.max_workers = max_workers self.region = region @@ -359,7 +328,6 @@ class Run: interval="1d", check_data_length=False, limit_nums=None, - show_1min_logging=False, ): """download data from Internet @@ -375,12 +343,10 @@ class Run: start datetime, default "2000-01-01" end: str end datetime, default ``pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1))`` - check_data_length: bool + check_data_length: bool # if this param useful? check data length, by default False limit_nums: int using for debug, by default None - show_1min_logging: bool - show 1m logging, by default False; if True, there may be many warning logs Examples --------- @@ -401,7 +367,6 @@ class Run: interval=interval, check_data_length=check_data_length, limit_nums=limit_nums, - show_1min_logging=show_1min_logging, ).collector_data() if __name__ == "__main__": diff --git a/scripts/data_collector/fund/requirements.txt b/scripts/data_collector/fund/requirements.txt index e69de29bb..11c6730c0 100644 --- a/scripts/data_collector/fund/requirements.txt +++ b/scripts/data_collector/fund/requirements.txt @@ -0,0 +1,10 @@ +loguru +fire +requests +numpy +pandas +tqdm +lxml +loguru +yahooquery +json \ No newline at end of file From 3082f6ac1ba201ebcdeb115f27e97f75d2017439 Mon Sep 17 00:00:00 2001 From: wangershi Date: Sun, 28 Feb 2021 19:06:40 +0800 Subject: [PATCH 033/134] ready for dump_bin --- scripts/data_collector/fund/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/data_collector/fund/README.md b/scripts/data_collector/fund/README.md index b14938a3d..bcbbbcba7 100644 --- a/scripts/data_collector/fund/README.md +++ b/scripts/data_collector/fund/README.md @@ -23,7 +23,7 @@ python collector.py download_data --source_dir ~/.qlib/fund_data/source/cn_1d -- # dump data cd qlib/scripts -python dump_bin.py dump_all --csv_path ~/.qlib/stock_data/source/cn_1d_nor --qlib_dir ~/.qlib/qlib_data/qlib_cn_1d --freq day --exclude_fields date,adjclose,dividends,splits,symbol +python dump_bin.py dump_all --csv_path ~/.qlib/fund_data/source/cn_1d --qlib_dir ~/.qlib/qlib_data/cn_fund_data --freq day --date_field_name FSRQ --include_fields DWJZ,LJJZ ``` @@ -33,8 +33,8 @@ python dump_bin.py dump_all --csv_path ~/.qlib/stock_data/source/cn_1d_nor --qli import qlib from qlib.data import D -qlib.init(provider_uri="~/.qlib/qlib_data/qlib_cn_1d", region="CN") -df = D.features(D.instruments("all"), ["$close"], freq="day") +qlib.init(provider_uri="~/.qlib/qlib_data/cn_fund_data") +df = D.features(D.instruments(market="all"), ["$DWJZ", "$LJJZ"], freq="day") ``` @@ -45,5 +45,5 @@ pythono collector.py collector_data --help ## Parameters -- interval: 1min or 1d -- region: CN or US +- interval: 1d +- region: CN From 82353b20e18462d8b1a67742b2b6210dc80461ee Mon Sep 17 00:00:00 2001 From: wangershi Date: Mon, 1 Mar 2021 21:10:46 +0800 Subject: [PATCH 034/134] black format --- scripts/data_collector/fund/collector.py | 14 +++++++++----- scripts/data_collector/utils.py | 2 +- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/scripts/data_collector/fund/collector.py b/scripts/data_collector/fund/collector.py index f9b2a6775..a2b7089a1 100644 --- a/scripts/data_collector/fund/collector.py +++ b/scripts/data_collector/fund/collector.py @@ -28,6 +28,7 @@ from data_collector.utils import get_en_fund_symbols INDEX_BENCH_URL = "http://api.fund.eastmoney.com/f10/lsjz?callback=jQuery_&fundCode={index_code}&pageIndex=1&pageSize={numberOfHistoricalDaysToCrawl}&startDate={startDate}&endDate={endDate}" REGION_CN = "CN" + class FundData: START_DATETIME = pd.Timestamp("2000-01-01") END_DATETIME = pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1)) @@ -85,12 +86,14 @@ class FundData: try: # TODO: numberOfHistoricalDaysToCrawl should be bigger enouhg - url = INDEX_BENCH_URL.format(index_code=symbol, numberOfHistoricalDaysToCrawl=10000, startDate=start, endDate=end) + url = INDEX_BENCH_URL.format( + index_code=symbol, numberOfHistoricalDaysToCrawl=10000, startDate=start, endDate=end + ) resp = requests.get(url, headers={"referer": "http://fund.eastmoney.com/110022.html"}) if resp.status_code != 200: raise ValueError("request error") - + data = json.loads(resp.text.split("(")[-1].split(")")[0]) # Some funds don't show the net value, example: http://fundf10.eastmoney.com/jjjz_010288.html @@ -280,6 +283,7 @@ class FundCollector: logger.warning(f"less than {self.min_numbers_trading} fund list: {list(self._mini_symbol_map.keys())}") logger.info(f"total {len(self.fund_list)}, error: {len(set(fund_list))}") + class FundollectorCN(FundCollector, ABC): def get_fund_list(self): logger.info("get cn fund symbols......") @@ -297,6 +301,7 @@ class FundCollectorCN1d(FundollectorCN): def min_numbers_trading(self): return 252 / 4 + class Run: def __init__(self, source_dir=None, max_workers=4, region=REGION_CN): """ @@ -354,9 +359,7 @@ class Run: $ python collector.py download_data --source_dir ~/.qlib/fund_data/source/cn_1d --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1d """ - _class = getattr( - self._cur_module, f"FundCollector{self.region.upper()}{interval}" - ) # type: Type[FundCollector] + _class = getattr(self._cur_module, f"FundCollector{self.region.upper()}{interval}") # type: Type[FundCollector] _class( self.source_dir, max_workers=self.max_workers, @@ -369,5 +372,6 @@ class Run: limit_nums=limit_nums, ).collector_data() + if __name__ == "__main__": fire.Fire(Run) diff --git a/scripts/data_collector/utils.py b/scripts/data_collector/utils.py index 3319025fc..5d5822f91 100644 --- a/scripts/data_collector/utils.py +++ b/scripts/data_collector/utils.py @@ -239,7 +239,7 @@ def get_en_fund_symbols(qlib_data_path: [str, Path] = None) -> list: try: _symbols = [] for sub_data in re.findall(r"[\[](.*?)[\]]", resp.content.decode().split("= [")[-1].replace("];", "")): - data = sub_data.replace("\"","").replace("'","") + data = sub_data.replace('"', "").replace("'", "") # TODO: do we need other informations, like fund_name from ['000001', 'HXCZHH', '华夏成长混合', '混合型', 'HUAXIACHENGZHANGHUNHE'] _symbols.append(data.split(",")[0]) except Exception as e: From 6e2ce6f1dce676f1c82bed2446e84ba43e4bc29b Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Tue, 2 Mar 2021 12:17:05 +0900 Subject: [PATCH 035/134] Add the results of DoubleEnsemble --- examples/benchmarks/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/benchmarks/README.md b/examples/benchmarks/README.md index bcd2279b3..c5bfced6d 100644 --- a/examples/benchmarks/README.md +++ b/examples/benchmarks/README.md @@ -16,7 +16,7 @@ The numbers shown below demonstrate the performance of the entire `workflow` of | LSTM (Sepp Hochreiter, et al.) | Alpha360 | 0.0443±0.01 | 0.3401±0.05| 0.0536±0.01 | 0.4248±0.05 | 0.0627±0.03 | 0.8441±0.48| -0.0882±0.03 | | ALSTM (Yao Qin, et al.) | Alpha360 | 0.0493±0.01 | 0.3778±0.06| 0.0585±0.00 | 0.4606±0.04 | 0.0513±0.03 | 0.6727±0.38| -0.1085±0.02 | | GATs (Petar Velickovic, et al.) | Alpha360 | 0.0475±0.00 | 0.3515±0.02| 0.0592±0.00 | 0.4585±0.01 | 0.0876±0.02 | 1.1513±0.27| -0.0795±0.02 | - +| DoubleEnsemble (Chuheng Zhang, et al.) | Alpha360 | 0.0407±0.00| 0.3053±0.00 | 0.0490±0.00 | 0.3840±0.00 | 0.0380±0.02 | 0.5000±0.21 | -0.0984±0.02 | ## Alpha158 dataset | Model Name | Dataset | IC | ICIR | Rank IC | Rank ICIR | Annualized Return | Information Ratio | Max Drawdown | |---|---|---|---|---|---|---|---|---| @@ -31,5 +31,7 @@ The numbers shown below demonstrate the performance of the entire `workflow` of | LSTM (Sepp Hochreiter, et al.) | Alpha158 (with selected 20 features) | 0.0312±0.00 | 0.2394±0.04| 0.0418±0.00 | 0.3324±0.03 | 0.0298±0.02 | 0.4198±0.33| -0.1348±0.03 | | ALSTM (Yao Qin, et al.) | Alpha158 (with selected 20 features) | 0.0385±0.01 | 0.3022±0.06| 0.0478±0.00 | 0.3874±0.04 | 0.0486±0.03 | 0.7141±0.45| -0.1088±0.03 | | GATs (Petar Velickovic, et al.) | Alpha158 (with selected 20 features) | 0.0349±0.00 | 0.2511±0.01| 0.0457±0.00 | 0.3537±0.01 | 0.0578±0.02 | 0.8221±0.25| -0.0824±0.02 | +| DoubleEnsemble (Chuheng Zhang, et al.) | Alpha158 | 0.0544±0.00 | 0.4338±0.01 | 0.0523±0.00 | 0.4257±0.01 | 0.1253±0.01 | 1.4105±0.14 | -0.0902±0.01 | - The selected 20 features are based on the feature importance of a lightgbm-based model. +- The base model of DoubleEnsemble is LGBM. From 1de4def444a44247aeb80db1adadb8fcad5beb39 Mon Sep 17 00:00:00 2001 From: meng-ustc Date: Tue, 2 Mar 2021 16:14:56 +0900 Subject: [PATCH 036/134] Update parameter names: 'k' and 'base' --- ...rkflow_config_doubleensemble_Alpha158.yaml | 4 +-- ...rkflow_config_doubleensemble_Alpha360.yaml | 4 +-- qlib/contrib/model/double_ensemble.py | 30 +++++++++---------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml index 74923c0e5..a12df802d 100644 --- a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml +++ b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha158.yaml @@ -30,9 +30,9 @@ task: class: DEnsembleModel module_path: qlib.contrib.model.double_ensemble kwargs: - base: "gbm" + base_model: "gbm" loss: mse - k: 6 + num_models: 6 enable_sr: True enable_fs: True alpha1: 1 diff --git a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml index 3351cefc5..415448f0b 100644 --- a/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml +++ b/examples/benchmarks/DoubleEnsemble/workflow_config_doubleensemble_Alpha360.yaml @@ -37,9 +37,9 @@ task: class: DEnsembleModel module_path: qlib.contrib.model.double_ensemble kwargs: - base: "gbm" + base_model: "gbm" loss: mse - k: 6 + num_models: 6 enable_sr: True enable_fs: True alpha1: 1 diff --git a/qlib/contrib/model/double_ensemble.py b/qlib/contrib/model/double_ensemble.py index c96b69e8b..a340489c2 100644 --- a/qlib/contrib/model/double_ensemble.py +++ b/qlib/contrib/model/double_ensemble.py @@ -16,9 +16,9 @@ class DEnsembleModel(Model): def __init__( self, - base="gbm", + base_model="gbm", loss="mse", - k=6, + num_models=6, enable_sr=True, enable_fs=True, alpha1=1.0, @@ -31,8 +31,8 @@ class DEnsembleModel(Model): epochs=100, **kwargs ): - self.base = base # "gbm" or "mlp", specifically, we use lgbm for "gbm" - self.k = k + self.base_model = base_model # "gbm" or "mlp", specifically, we use lgbm for "gbm" + self.num_models = num_models # the number of sub-models self.enable_sr = enable_sr self.enable_fs = enable_fs self.alpha1 = alpha1 @@ -43,8 +43,8 @@ class DEnsembleModel(Model): if not len(sample_ratios) == bins_fs: raise ValueError("The length of sample_ratios should be equal to bins_fs.") self.sample_ratios = sample_ratios - if not len(sub_weights) == k: - raise ValueError("The length of sub_weights should be equal to k.") + if not len(sub_weights) == num_models: + raise ValueError("The length of sub_weights should be equal to num_models.") self.sub_weights = sub_weights self.epochs = epochs self.logger = get_module_logger("DEnsembleModel") @@ -65,27 +65,27 @@ class DEnsembleModel(Model): weights = pd.Series(np.ones(N, dtype=float)) # initialize the features features = x_train.columns - pred_sub = pd.DataFrame(np.zeros((N, self.k), dtype=float), index=x_train.index) - # train k sub-models - for i_k in range(self.k): + pred_sub = pd.DataFrame(np.zeros((N, self.num_models), dtype=float), index=x_train.index) + # train sub-models + for k in range(self.num_models): self.sub_features.append(features) - self.logger.info("Training sub-model: ({}/{})".format(i_k + 1, self.k)) + self.logger.info("Training sub-model: ({}/{})".format(k + 1, self.num_models)) model_k = self.train_submodel(df_train, df_valid, weights, features) self.ensemble.append(model_k) # no further sample re-weight and feature selection needed for the last sub-model - if i_k + 1 == self.k: + if k + 1 == self.num_models: break self.logger.info("Retrieving loss curve and loss values...") loss_curve = self.retrieve_loss_curve(model_k, df_train, features) pred_k = self.predict_sub(model_k, df_train, features) - pred_sub.iloc[:, i_k] = pred_k - pred_ensemble = pred_sub.iloc[:, : i_k + 1].mean(axis=1) + pred_sub.iloc[:, k] = pred_k + pred_ensemble = pred_sub.iloc[:, : k + 1].mean(axis=1) loss_values = pd.Series(self.get_loss(y_train.values.squeeze(), pred_ensemble.values)) if self.enable_sr: self.logger.info("Sample re-weighting...") - weights = self.sample_reweight(loss_curve, loss_values, i_k + 1) + weights = self.sample_reweight(loss_curve, loss_values, k + 1) if self.enable_fs: self.logger.info("Feature selection...") @@ -209,7 +209,7 @@ class DEnsembleModel(Model): raise ValueError("not implemented yet") def retrieve_loss_curve(self, model, df_train, features): - if self.base == "gbm": + if self.base_model == "gbm": num_trees = model.num_trees() x_train, y_train = df_train["feature"].loc[:, features], df_train["label"] # Lightgbm need 1D array as its label From b592669d1fc1556bfee6b0a5ac9ad85e50dbc30a Mon Sep 17 00:00:00 2001 From: you-n-g Date: Tue, 2 Mar 2021 20:23:27 +0800 Subject: [PATCH 037/134] Update Index Report --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 368e2385f..5a035662b 100644 --- a/README.md +++ b/README.md @@ -319,6 +319,7 @@ Qlib data are stored in a compact format, which is efficient to be combined into # Related Reports +- [【华泰金工林晓明团队】图神经网络选股与Qlib实践——华泰人工智能系列之四十二](https://mp.weixin.qq.com/s/w5fDB6oAv9dO6vlhf1kmhA) - [Guide To Qlib: Microsoft’s AI Investment Platform](https://analyticsindiamag.com/qlib/) - [【华泰金工林晓明团队】微软AI量化投资平台Qlib体验——华泰人工智能系列之四十](https://mp.weixin.qq.com/s/Brcd7im4NibJOJzZfMn6tQ) - [微软也搞AI量化平台?还是开源的!](https://mp.weixin.qq.com/s/47bP5YwxfTp2uTHjUBzJQQ) From c48b4c99712fbacd6d477e43d8209796d877d682 Mon Sep 17 00:00:00 2001 From: D-X-Y Date: Tue, 2 Mar 2021 21:06:32 +0800 Subject: [PATCH 038/134] Make Wrapper with a informative str repr. --- qlib/utils/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/qlib/utils/__init__.py b/qlib/utils/__init__.py index be7969b65..484c0bbef 100644 --- a/qlib/utils/__init__.py +++ b/qlib/utils/__init__.py @@ -722,6 +722,10 @@ class Wrapper: def register(self, provider): self._provider = provider + def __repr__(self): + return ('{name}(provider={provider})'.format(name=self.__class__.__name__, + provider=self._provider)) + def __getattr__(self, key): if self._provider is None: raise AttributeError("Please run qlib.init() first using qlib") From dbc8ca7379ba771228ea253f174ab0132745db01 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Tue, 2 Mar 2021 22:15:30 +0800 Subject: [PATCH 039/134] Fix pylint by black -l 120 --- qlib/utils/__init__.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/qlib/utils/__init__.py b/qlib/utils/__init__.py index 484c0bbef..6640dae2c 100644 --- a/qlib/utils/__init__.py +++ b/qlib/utils/__init__.py @@ -723,8 +723,7 @@ class Wrapper: self._provider = provider def __repr__(self): - return ('{name}(provider={provider})'.format(name=self.__class__.__name__, - provider=self._provider)) + return "{name}(provider={provider})".format(name=self.__class__.__name__, provider=self._provider) def __getattr__(self, key): if self._provider is None: From a1fb10f7cff4495d5c63a188d534a922e210e77d Mon Sep 17 00:00:00 2001 From: bxdd Date: Wed, 3 Mar 2021 00:44:52 +0900 Subject: [PATCH 040/134] update FAQ doc --- docs/FAQ/FAQ.rst | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/FAQ/FAQ.rst b/docs/FAQ/FAQ.rst index ba6f77b47..df910e564 100644 --- a/docs/FAQ/FAQ.rst +++ b/docs/FAQ/FAQ.rst @@ -70,3 +70,31 @@ If the issue is not resolved, use ``keys *`` to find if multiple keys exist. If Also, feel free to post a new issue in our GitHub repository. We always check each issue carefully and try our best to solve them. + +3. ModuleNotFoundError: No module named 'qlib.data._libs.rolling' +------------------------------------------------------------------------------------------------------------------------------------ + +.. code-block:: python + + #### Do not import qlib package in the repository directory in case of importing qlib from . without compiling ##### + Traceback (most recent call last): + File "", line 1, in + File "qlib/qlib/__init__.py", line 19, in init + from .data.cache import H + File "qlib/qlib/data/__init__.py", line 8, in + from .data import ( + File "qlib/qlib/data/data.py", line 20, in + from .cache import H + File "qlib/qlib/data/cache.py", line 36, in + from .ops import Operators + File "qlib/qlib/data/ops.py", line 19, in + from ._libs.rolling import rolling_slope, rolling_rsquare, rolling_resi + ModuleNotFoundError: No module named 'qlib.data._libs.rolling' + +- If the error occurs when importing ``qlib`` package with ``PyCharm`` IDE, users can execute the following command in the project root folder to compile Cython files and generate executable files: + + .. code-block:: bash + + python setup.py build_ext --inplace + +- If the error occurs when importing ``qlib`` package with command ``python`` , users need to change the running directory to ensure that the script does not run in the project directory. \ No newline at end of file From 5378d261b41c1b104cb8a391ac29a059abee8f3f Mon Sep 17 00:00:00 2001 From: bxdd Date: Wed, 3 Mar 2021 00:47:50 +0900 Subject: [PATCH 041/134] update ops.py docstring --- qlib/data/ops.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/qlib/data/ops.py b/qlib/data/ops.py index 940c24002..94f3ff5b8 100644 --- a/qlib/data/ops.py +++ b/qlib/data/ops.py @@ -1182,7 +1182,7 @@ class Slope(Rolling): Returns ---------- Expression - a feature instance with regression slope of given window + a feature instance with linear regression slope of given window """ def __init__(self, feature, N): @@ -1210,7 +1210,7 @@ class Rsquare(Rolling): Returns ---------- Expression - a feature instance with regression r-value square of given window + a feature instance with linear regression r-value square of given window """ def __init__(self, feature, N): From a9a70dfddf131a278ba1a3d2c7395bf94d5fab08 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Wed, 3 Mar 2021 06:47:52 +0000 Subject: [PATCH 042/134] Update repr for DatasetH and ExpManager --- .gitignore | 2 ++ qlib/data/dataset/__init__.py | 17 +++++++++++------ qlib/workflow/__init__.py | 10 ++++++++-- qlib/workflow/expm.py | 3 +++ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 5b3745a02..0ddd5d21f 100644 --- a/.gitignore +++ b/.gitignore @@ -34,3 +34,5 @@ tags .pytest_cache/ .vscode/ + +*.swp diff --git a/qlib/data/dataset/__init__.py b/qlib/data/dataset/__init__.py index 8ff8c1210..ecbeebc95 100644 --- a/qlib/data/dataset/__init__.py +++ b/qlib/data/dataset/__init__.py @@ -1,5 +1,5 @@ from ...utils.serial import Serializable -from typing import Union, List, Tuple +from typing import Union, List, Tuple, Dict, Text, Optional from ...utils import init_instance_by_config, np_ffill from ...log import get_module_logger from .handler import DataHandler, DataHandlerLP @@ -76,7 +76,7 @@ class DatasetH(Dataset): - The processing is related to data split. """ - def __init__(self, handler: Union[dict, DataHandler], segments: dict): + def __init__(self, handler: Union[Dict, DataHandler], segments: Dict): """ Parameters ---------- @@ -87,7 +87,7 @@ class DatasetH(Dataset): """ super().__init__(handler, segments) - def init(self, handler_kwargs: dict = None, segment_kwargs: dict = None): + def init(self, handler_kwargs: Optional[Dict] = None, segment_kwargs: Optional[Dict] = None): """ Initialize the DatasetH @@ -124,7 +124,7 @@ class DatasetH(Dataset): raise TypeError(f"param handler_kwargs must be type dict, not {type(segment_kwargs)}") self.segments = segment_kwargs.copy() - def setup_data(self, handler: Union[dict, DataHandler], segments: dict): + def setup_data(self, handler: Union[Dict, DataHandler], segments: Dict[Text, Tuple]): """ Setup the underlying data. @@ -156,6 +156,11 @@ class DatasetH(Dataset): self.handler = init_instance_by_config(handler, accept_types=DataHandler) self.segments = segments.copy() + def __repr__(self): + return "{name}(handler={handler}, segments={segments})".format( + name=self.__class__.__name__, handler=self.handler, segments=self.segments + ) + def _prepare_seg(self, slc: slice, **kwargs): """ Give a slice, retrieve the according data @@ -168,7 +173,7 @@ class DatasetH(Dataset): def prepare( self, - segments: Union[List[str], Tuple[str], str, slice], + segments: Union[List[Text], Tuple[Text], Text, slice], col_set=DataHandler.CS_ALL, data_key=DataHandlerLP.DK_I, **kwargs, @@ -178,7 +183,7 @@ class DatasetH(Dataset): Parameters ---------- - segments : Union[List[str], Tuple[str], str, slice] + segments : Union[List[Text], Tuple[Text], Text, slice] Describe the scope of the data to be prepared Here are some examples: diff --git a/qlib/workflow/__init__.py b/qlib/workflow/__init__.py index aedf73a9c..9602963d8 100644 --- a/qlib/workflow/__init__.py +++ b/qlib/workflow/__init__.py @@ -16,8 +16,11 @@ class QlibRecorder: def __init__(self, exp_manager): self.exp_manager = exp_manager + def __repr__(self): + return "{name}(manager={manager})".format(name=self.__class__.__name__, manager=self.exp_manager) + @contextmanager - def start(self, experiment_name=None, recorder_name=None): + def start(self, experiment_name=None, recorder_name=None, uri=None): """ Method to start an experiment. This method can only be called within a Python's `with` statement. Here is the example code: @@ -34,8 +37,11 @@ class QlibRecorder: name of the experiment one wants to start. recorder_name : str name of the recorder under the experiment one wants to start. + uri : str + the tracking uri of the experiment, where all the artifacts/metrics etc. will be stored. + The default uri are set in the qlib.config. """ - run = self.start_exp(experiment_name, recorder_name) + run = self.start_exp(experiment_name, recorder_name, uri) try: yield run except Exception as e: diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index a50dce7c9..e905434cb 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -25,6 +25,9 @@ class ExpManager: self.default_exp_name = default_exp_name self.active_experiment = None # only one experiment can active each time + def __repr__(self): + return "{name}(uri={uri})".format(name=self.__class__.__name__, uri=self.uri) + def start_exp(self, experiment_name=None, recorder_name=None, uri=None, **kwargs): """ Start an experiment. This method includes first get_or_create an experiment, and then From 229a39d0d353788f649d414c01e229ec1a3ff92e Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Wed, 3 Mar 2021 07:30:55 +0000 Subject: [PATCH 043/134] Fix typos in DataHandler's doc --- qlib/data/dataset/handler.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/qlib/data/dataset/handler.py b/qlib/data/dataset/handler.py index 2889c4465..050043ba6 100644 --- a/qlib/data/dataset/handler.py +++ b/qlib/data/dataset/handler.py @@ -35,7 +35,7 @@ class DataHandler(Serializable): The data handler try to maintain a handler with 2 level. `datetime` & `instruments`. - Any order of the index level can be suported(The order will implied in the data). + Any order of the index level can be suported (The order will be implied in the data). The order <`datetime`, `instruments`> will be used when the dataframe index name is missed. Example of the data: @@ -47,8 +47,8 @@ class DataHandler(Serializable): $close $volume Ref($close, 1) Mean($close, 3) $high-$low LABEL0 datetime instrument 2010-01-04 SH600000 81.807068 17145150.0 83.737389 83.016739 2.741058 0.0032 - SH600004 13.313329 11800983.0 13.313329 13.317701 0.183632 0.0042 - SH600005 37.796539 12231662.0 38.258602 37.919757 0.970325 0.0289 + SH600004 13.313329 11800983.0 13.313329 13.317701 0.183632 0.0042 + SH600005 37.796539 12231662.0 38.258602 37.919757 0.970325 0.0289 """ From 34b7da1dd88ad6886d36f44ddf7d8ccf44a66eda Mon Sep 17 00:00:00 2001 From: wangershi Date: Wed, 3 Mar 2021 22:49:48 +0800 Subject: [PATCH 044/134] add calendar list by threshold --- scripts/data_collector/utils.py | 55 +++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/scripts/data_collector/utils.py b/scripts/data_collector/utils.py index 5d5822f91..1a08c514f 100644 --- a/scripts/data_collector/utils.py +++ b/scripts/data_collector/utils.py @@ -2,6 +2,7 @@ # Licensed under the MIT License. import re +import os import time import bisect import pickle @@ -14,6 +15,9 @@ import pandas as pd from lxml import etree from loguru import logger from yahooquery import Ticker +from tqdm import tqdm +from functools import partial +from concurrent.futures import ProcessPoolExecutor HS_SYMBOLS_URL = "http://app.finance.ifeng.com/hq/list.php?type=stock_a&class={s_type}" @@ -94,6 +98,57 @@ def get_calendar_list(bench_code="CSI300") -> list: return calendar +def return_date_list(source_dir, date_field_name, file_path): + df = pd.read_csv(Path(source_dir).joinpath(file_path), sep=",", index_col=0) + + return df[date_field_name].to_list() + + +def get_calendar_list_by_ratio( + source_dir: [str, Path], date_field_name: str = "date", threshold: float = 0.5, max_workers: int = 16 +) -> list: + """get calendar list by selecting the date when few funds trade in this day + + Parameters + ---------- + source_dir: str or Path + The directory where the raw data collected from the Internet is saved + date_field_name: str + date field name, default is date + threshold: float + threshold to exclude some days when few funds trade in this day, default 0.5 + max_workers: int + Concurrent number, default is 16 + + Returns + ------- + history calendar list + """ + logger.info(f"get calendar list from {source_dir} by threshold = {threshold}......") + + _number_all_funds = len(os.listdir(source_dir)) + + _list_all_date = dict() + + _fun = partial(return_date_list, source_dir, date_field_name) + + with tqdm(total=_number_all_funds) as p_bar: + with ProcessPoolExecutor(max_workers=max_workers) as executor: + for date_list in executor.map(_fun, os.listdir(source_dir)): + for date in date_list: + if date in _list_all_date.keys(): + _list_all_date[date] += 1 + else: + _list_all_date[date] = 0 + + p_bar.update() + + _threshold_number = int(_number_all_funds * threshold) + calendar = [date for date in _list_all_date if _list_all_date[date] >= _threshold_number] + + return calendar + + def get_hs_stock_symbols() -> list: """get SH/SZ stock symbols From 592db903b3afbfd1628fd7e6ad4f150a5c5d13cc Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 4 Mar 2021 05:02:56 +0000 Subject: [PATCH 045/134] Update repr for Experiment & Recorder --- qlib/workflow/__init__.py | 6 ++++-- qlib/workflow/exp.py | 4 ++-- qlib/workflow/expm.py | 2 +- qlib/workflow/recorder.py | 4 ++-- tests/test_all_pipeline.py | 4 ++++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/qlib/workflow/__init__.py b/qlib/workflow/__init__.py index 9602963d8..c6bf0c86c 100644 --- a/qlib/workflow/__init__.py +++ b/qlib/workflow/__init__.py @@ -38,8 +38,10 @@ class QlibRecorder: recorder_name : str name of the recorder under the experiment one wants to start. uri : str - the tracking uri of the experiment, where all the artifacts/metrics etc. will be stored. - The default uri are set in the qlib.config. + The tracking uri of the experiment, where all the artifacts/metrics etc. will be stored. + The default uri are set in the qlib.config. Note that this uri argument will not change the one defined in the config file. + Therefore, the next time when user call this function in the same experiment, + they have to also specify this argument with the same value. Otherwise, inconsistent uri may occur. """ run = self.start_exp(experiment_name, recorder_name, uri) try: diff --git a/qlib/workflow/exp.py b/qlib/workflow/exp.py index c2548971a..7c98fd68f 100644 --- a/qlib/workflow/exp.py +++ b/qlib/workflow/exp.py @@ -11,7 +11,7 @@ from ..log import get_module_logger logger = get_module_logger("workflow", "INFO") -class Experiment: +class Experiment(object): """ This is the `Experiment` class for each experiment being run. The API is designed similar to mlflow. (The link: https://mlflow.org/docs/latest/python_api/mlflow.html) @@ -23,7 +23,7 @@ class Experiment: self.active_recorder = None # only one recorder can running each time def __repr__(self): - return str(self.info) + return "{name}(info={info})".format(name=self.__class__.__name__, info=self.info) def __str__(self): return str(self.info) diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index e905434cb..541507a73 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -14,7 +14,7 @@ from ..log import get_module_logger logger = get_module_logger("workflow", "INFO") -class ExpManager: +class ExpManager(object): """ This is the `ExpManager` class for managing experiments. The API is designed similar to mlflow. (The link: https://mlflow.org/docs/latest/python_api/mlflow.html) diff --git a/qlib/workflow/recorder.py b/qlib/workflow/recorder.py index ceb57150c..31077176d 100644 --- a/qlib/workflow/recorder.py +++ b/qlib/workflow/recorder.py @@ -11,7 +11,7 @@ from ..log import get_module_logger logger = get_module_logger("workflow", "INFO") -class Recorder: +class Recorder(object): """ This is the `Recorder` class for logging the experiments. The API is designed similar to mlflow. (The link: https://mlflow.org/docs/latest/python_api/mlflow.html) @@ -34,7 +34,7 @@ class Recorder: self.status = Recorder.STATUS_S def __repr__(self): - return str(self.info) + return "{name}(info={info})".format(name=self.__class__.__name__, info=self.info) def __str__(self): return str(self.info) diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py index f6e77cba4..97f3f986a 100644 --- a/tests/test_all_pipeline.py +++ b/tests/test_all_pipeline.py @@ -110,7 +110,10 @@ def train(): # model initiaiton model = init_instance_by_config(task["model"]) + print(model) dataset = init_instance_by_config(task["dataset"]) + print(dataset) + print(R) # start exp with R.start(experiment_name="workflow"): @@ -119,6 +122,7 @@ def train(): # prediction recorder = R.get_recorder() + print(recorder) rid = recorder.id sr = SignalRecord(model, dataset, recorder) sr.generate() From ee7eb79277896ad3d1729dcf028cb0a027b9d538 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 4 Mar 2021 06:15:24 +0000 Subject: [PATCH 046/134] Fix unexpected mlruns folder error --- qlib/workflow/exp.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/qlib/workflow/exp.py b/qlib/workflow/exp.py index 7c98fd68f..15bb7604c 100644 --- a/qlib/workflow/exp.py +++ b/qlib/workflow/exp.py @@ -176,8 +176,6 @@ class MLflowExperiment(Experiment): self.client = mlflow.tracking.MlflowClient(tracking_uri=self._uri) def start(self, recorder_name=None): - # set the active experiment - mlflow.set_experiment(self.name) logger.info(f"Experiment {self.id} starts running ...") # set up recorder recorder = self.create_recorder(recorder_name) From 2bff6eb78120b8f3fc7aac12267d1e37c847ae0f Mon Sep 17 00:00:00 2001 From: Charles Young Date: Thu, 4 Mar 2021 22:08:11 +0800 Subject: [PATCH 047/134] Split classes in riskmodel.py & optimizer.py into seperate files. --- qlib/model/riskmodel_poet.py | 0 qlib/model/riskmodel_shrink.py | 0 qlib/model/riskmodel_structured.py | 0 qlib/portfolio/enhanced_indexing.py | 0 tests/test_enhanced_indexing.py | 212 ++++++++++++++++++++-------- 5 files changed, 150 insertions(+), 62 deletions(-) create mode 100644 qlib/model/riskmodel_poet.py create mode 100644 qlib/model/riskmodel_shrink.py create mode 100644 qlib/model/riskmodel_structured.py create mode 100644 qlib/portfolio/enhanced_indexing.py diff --git a/qlib/model/riskmodel_poet.py b/qlib/model/riskmodel_poet.py new file mode 100644 index 000000000..e69de29bb diff --git a/qlib/model/riskmodel_shrink.py b/qlib/model/riskmodel_shrink.py new file mode 100644 index 000000000..e69de29bb diff --git a/qlib/model/riskmodel_structured.py b/qlib/model/riskmodel_structured.py new file mode 100644 index 000000000..e69de29bb diff --git a/qlib/portfolio/enhanced_indexing.py b/qlib/portfolio/enhanced_indexing.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/test_enhanced_indexing.py b/tests/test_enhanced_indexing.py index f6e77cba4..f21d51984 100644 --- a/tests/test_enhanced_indexing.py +++ b/tests/test_enhanced_indexing.py @@ -2,32 +2,39 @@ # Licensed under the MIT License. import sys +import math import shutil import unittest -from pathlib import Path - import numpy as np import pandas as pd +from tqdm import tqdm +from pathlib import Path import qlib -from qlib.config import REG_CN, C -from qlib.utils import drop_nan_by_y_index -from qlib.contrib.model.gbdt import LGBModel -from qlib.contrib.data.handler import Alpha158 -from qlib.contrib.strategy.strategy import TopkDropoutStrategy -from qlib.contrib.evaluate import ( - backtest as normal_backtest, - risk_analysis, -) -from qlib.utils import exists_qlib_data, init_instance_by_config, flatten_dict +from qlib.config import C +from qlib.utils import init_instance_by_config, flatten_dict from qlib.workflow import R -from qlib.workflow.record_temp import SignalRecord, SigAnaRecord, PortAnaRecord -from qlib.tests.data import GetData +from qlib.config import REG_CN +from qlib.workflow.record_temp import SignalRecord, SigAnaRecord from qlib.tests import TestAutoData +from qlib.portfolio.optimizer import EnhancedIndexingOptimizer +from qlib.model.riskmodel import StructuredCovEstimator +from qlib.data.dataset.loader import QlibDataLoader +from qlib.data.dataset.handler import DataHandler +from qlib.data import D +from qlib.utils import exists_qlib_data, init_instance_by_config +market = "all" +trade_gap = 21 +label_config = "Ref($close, -{}) / Ref($close, -1) - 1".format(trade_gap) # reconstruct portfolio once a month -market = "csi300" -benchmark = "SH000300" +provider_uri = "~/.qlib_ei/qlib_data/cn_data" # target_dir +if not exists_qlib_data(provider_uri): + print(f"Qlib data is not found in {provider_uri}") + sys.path.append(str(Path.cwd().parent.joinpath("scripts"))) + from get_data import GetData + GetData().qlib_data(target_dir=provider_uri, region=REG_CN) +qlib.init(provider_uri=provider_uri, region=REG_CN) ################################### # train model @@ -36,8 +43,9 @@ data_handler_config = { "start_time": "2008-01-01", "end_time": "2020-08-01", "fit_start_time": "2008-01-01", - "fit_end_time": "2014-12-31", + "fit_end_time": "2014-11-30", "instruments": market, + "label": [label_config] } task = { @@ -53,7 +61,7 @@ task = { "lambda_l2": 580.9768, "max_depth": 8, "num_leaves": 210, - "num_threads": 20, + "num_threads": 32, }, }, "dataset": { @@ -66,37 +74,104 @@ task = { "kwargs": data_handler_config, }, "segments": { - "train": ("2008-01-01", "2014-12-31"), - "valid": ("2015-01-01", "2016-12-31"), - "test": ("2017-01-01", "2020-08-01"), + "train": ("2008-01-01", "2014-11-30"), + "valid": ("2015-01-01", "2016-11-30"), + "test": ("2017-01-01", "2018-01-01"), }, }, }, } -port_analysis_config = { - "strategy": { - "class": "TopkDropoutStrategy", - "module_path": "qlib.contrib.strategy.strategy", - "kwargs": { - "topk": 50, - "n_drop": 5, - }, - }, - "backtest": { - "verbose": False, - "limit_threshold": 0.095, - "account": 100000000, - "benchmark": benchmark, - "deal_price": "close", - "open_cost": 0.0005, - "close_cost": 0.0015, - "min_cost": 5, - }, -} + +class CSI300: + """Simulate CSI300 as the Benchmark for Enhanced Indexing to Track""" + + def __init__(self): + # provider_uri = '/nfs_data/qlib_data/ycz_daily/qlib' + # qlib.init(provider_uri=provider_uri, region=REG_CN, dataset_cache=None, expression_cache=None) + self.csi_weight = D.features(D.instruments('csi300'), ['$csi300_weight']) + + def __call__(self, pd_index, trade_date): + weights = np.zeros(len(pd_index)) + + for idx, instrument in enumerate(pd_index): + if (instrument, trade_date) in self.csi_weight.index: + weight = self.csi_weight.loc[(instrument, trade_date)].values[0] + if not math.isnan(weight): + weights[idx] = weight + + assert weights.sum() > 0, ' Fetch CSI Weights Error!' + weights = weights / weights.sum() + + return weights + + +class EnhancedIndexingStrategy: + """Enhanced Indexing Strategy""" + + def __init__(self): + self.benchmark = CSI300() + + provider_uri = "~/.qlib_ei/qlib_data/cn_data" + qlib.init(provider_uri=provider_uri, region=REG_CN) + + self.data_handler = DataHandler(market, "2015-01-01", "2019-01-01", QlibDataLoader(["$close"])) + self.label_handler = DataHandler(market, "2015-01-01", "2019-01-01", QlibDataLoader([label_config])) + self.cov_estimator = StructuredCovEstimator() + self.optimizer = EnhancedIndexingOptimizer(lamb=0.1, delta=0.4, bench_dev=0.03, max_iters=50000) + + def update(self, score_series, current, pred_date): + """ + Parameters + ----------- + score_series : pd.Series + stock_id , score. + current : Position() + current of account. + trade_exchange : Exchange() + exchange. + trade_date : pd.Timestamp + date. + """ + print(score_series) + score_series = score_series.dropna() + + # portfolio init weight + init_weight = current.reindex(score_series.index, fill_value=0).values.squeeze() + init_weight_sum = init_weight.sum() + if init_weight_sum > 0: + init_weight /= init_weight_sum + + # covariance estimation + selector = (self.data_handler.get_range_selector(pred_date, 252), score_series.index) + price = self.data_handler.fetch(selector, level=None, squeeze=True) + F, cov_b, var_u = self.cov_estimator.predict(price, return_decomposed_components=True) + + # optimize target portfolio + w_bench = self.benchmark(score_series.index, pred_date) + passed_init_weight = init_weight if init_weight_sum > 0 else None + # print(F) + # print(cov_b) + # print(var_u) + # print(passed_init_weight) + # print(w_bench) + target_weight = self.optimizer(score_series.values, F, cov_b, var_u, passed_init_weight, w_bench) + # print(target_weight) + target = pd.DataFrame(data=target_weight, index=score_series.index) + + active_weights = target_weight - w_bench + selector = (self.label_handler.get_range_selector(pred_date, 1), score_series.index) + label = self.label_handler.fetch(selector, level=None, squeeze=True) + alpha = 0 + for instrument, weight in zip(score_series.index, active_weights): + delta = label.loc[(pred_date, instrument)] + alpha += weight * (0 if math.isnan(delta) else delta) + + print(alpha) + + return alpha, target -# train def train(): """train model @@ -108,7 +183,7 @@ def train(): model performance """ - # model initiaiton + # model initiation model = init_instance_by_config(task["model"]) dataset = init_instance_by_config(task["dataset"]) @@ -133,29 +208,42 @@ def train(): return pred_score, {"ic": ic, "ric": ric}, rid -def backtest_analysis(pred, rid): - """backtest and analysis +def backtest_analysis(scores): + """backtest enhanced indexing Parameters ---------- - pred : pandas.DataFrame - predict scores - rid : str - the id of the recorder to be used in this function + scores: pandas.DataFrame + predict scores Returns ------- - analysis : pandas.DataFrame - the analysis result - + sharpe_ratio: floating-point + sharpe ratio of the enhanced indexing portfolio """ - recorder = R.get_recorder(experiment_name="workflow", recorder_id=rid) - # backtest - par = PortAnaRecord(recorder, port_analysis_config) - par.generate() - analysis_df = par.load(par.get_path("port_analysis.pkl")) - print(analysis_df) - return analysis_df + + # backtest and analysis + with R.start(experiment_name="backtest_analysis"): + strategy = EnhancedIndexingStrategy() + dates = scores.index.get_level_values(0).unique() + + alphas = [] + current = pd.DataFrame() + gap_between_next_trade = 0 + for date in tqdm(dates): + if gap_between_next_trade == 0: + score_series = scores.loc[date] + alpha, current = strategy.update(score_series, current, date) + alphas.append(alpha) + gap_between_next_trade = trade_gap + else: + gap_between_next_trade -= 1 + + alphas = np.array(alphas) + sharpe_ratio = alphas.mean() / np.std(alphas) + print('Sharpe:', sharpe_ratio) + + return sharpe_ratio class TestAllFlow(TestAutoData): @@ -174,10 +262,10 @@ class TestAllFlow(TestAutoData): self.assertGreaterEqual(ic_ric["ric"].all(), 0, "train failed") def test_1_backtest(self): - analyze_df = backtest_analysis(TestAllFlow.PRED_SCORE, TestAllFlow.RID) + sharpe_ratio = backtest_analysis(TestAllFlow.PRED_SCORE) self.assertGreaterEqual( - analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], - 0.10, + sharpe_ratio, + 0.90, "backtest failed", ) From 83c6e747835656d0c5d5f90fb3c903a239689158 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Thu, 4 Mar 2021 22:30:38 +0800 Subject: [PATCH 048/134] Reindex files. --- qlib/model/riskmodel.py | 611 ------------------ .../__init__.py} | 0 qlib/model/riskmodel/base.py | 141 ++++ qlib/model/riskmodel/poet.py | 84 +++ qlib/model/riskmodel/shrink.py | 262 ++++++++ qlib/model/riskmodel/structured.py | 152 +++++ qlib/portfolio/enhanced_indexing.py | 0 .../optimizer/__init__.py} | 0 .../optimizer/base.py} | 0 qlib/portfolio/optimizer/enhanced_indexing.py | 140 ++++ qlib/portfolio/{ => optimizer}/optimizer.py | 159 +---- tests/test_enhanced_indexing.py | 282 -------- 12 files changed, 793 insertions(+), 1038 deletions(-) delete mode 100644 qlib/model/riskmodel.py rename qlib/model/{riskmodel_poet.py => riskmodel/__init__.py} (100%) create mode 100644 qlib/model/riskmodel/base.py create mode 100644 qlib/model/riskmodel/poet.py create mode 100644 qlib/model/riskmodel/shrink.py create mode 100644 qlib/model/riskmodel/structured.py delete mode 100644 qlib/portfolio/enhanced_indexing.py rename qlib/{model/riskmodel_shrink.py => portfolio/optimizer/__init__.py} (100%) rename qlib/{model/riskmodel_structured.py => portfolio/optimizer/base.py} (100%) create mode 100644 qlib/portfolio/optimizer/enhanced_indexing.py rename qlib/portfolio/{ => optimizer}/optimizer.py (62%) delete mode 100644 tests/test_enhanced_indexing.py diff --git a/qlib/model/riskmodel.py b/qlib/model/riskmodel.py deleted file mode 100644 index f19c60fc9..000000000 --- a/qlib/model/riskmodel.py +++ /dev/null @@ -1,611 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import numpy as np -import pandas as pd -from typing import Union -from sklearn.decomposition import PCA, FactorAnalysis - -from qlib.model.base import BaseModel - - -class RiskModel(BaseModel): - """Risk Model - - A risk model is used to estimate the covariance matrix of stock returns. - """ - - MASK_NAN = "mask" - FILL_NAN = "fill" - IGNORE_NAN = "ignore" - - def __init__(self, nan_option: str = "ignore", assume_centered: bool = False, scale_return: bool = True): - """ - Args: - nan_option (str): nan handling option (`ignore`/`mask`/`fill`). - assume_centered (bool): whether the data is assumed to be centered. - scale_return (bool): whether scale returns as percentage. - """ - # nan - assert nan_option in [ - self.MASK_NAN, - self.FILL_NAN, - self.IGNORE_NAN, - ], f"`nan_option={nan_option}` is not supported" - self.nan_option = nan_option - - self.assume_centered = assume_centered - self.scale_return = scale_return - - def predict( - self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True - ) -> Union[pd.DataFrame, np.ndarray]: - """ - Args: - X (pd.Series, pd.DataFrame or np.ndarray): data from which to estimate the covariance, - with variables as columns and observations as rows. - return_corr (bool): whether return the correlation matrix. - is_price (bool): whether `X` contains price (if not assume stock returns). - - Returns: - pd.DataFrame or np.ndarray: estimated covariance (or correlation). - """ - # transform input into 2D array - if not isinstance(X, (pd.Series, pd.DataFrame)): - columns = None - else: - if isinstance(X.index, pd.MultiIndex): - if isinstance(X, pd.DataFrame): - X = X.iloc[:, 0].unstack(level="instrument") # always use the first column - else: - X = X.unstack(level="instrument") - else: - # X is 2D DataFrame - pass - columns = X.columns # will be used to restore dataframe - X = X.values - - # calculate pct_change - if is_price: - X = X[1:] / X[:-1] - 1 # NOTE: resulting `n - 1` rows - - # scale return - if self.scale_return: - X *= 100 - - # handle nan and centered - X = self._preprocess(X) - - # estimate covariance - S = self._predict(X) - - # return correlation if needed - if return_corr: - vola = np.sqrt(np.diag(S)) - corr = S / np.outer(vola, vola) - if columns is None: - return corr - return pd.DataFrame(corr, index=columns, columns=columns) - - # return covariance - if columns is None: - return S - return pd.DataFrame(S, index=columns, columns=columns) - - def _predict(self, X: np.ndarray) -> np.ndarray: - """covariance estimation implementation - - This method should be overridden by child classes. - - By default, this method implements the empirical covariance estimation. - - Args: - X (np.ndarray): data matrix containing multiple variables (columns) and observations (rows). - - Returns: - np.ndarray: covariance matrix. - """ - xTx = np.asarray(X.T.dot(X)) - N = len(X) - if isinstance(X, np.ma.MaskedArray): - M = 1 - X.mask - N = M.T.dot(M) # each pair has distinct number of samples - return xTx / N - - def _preprocess(self, X: np.ndarray) -> Union[np.ndarray, np.ma.MaskedArray]: - """handle nan and centerize data - - Note: - if `nan_option='mask'` then the returned array will be `np.ma.MaskedArray`. - """ - # handle nan - if self.nan_option == self.FILL_NAN: - X = np.nan_to_num(X) - elif self.nan_option == self.MASK_NAN: - X = np.ma.masked_invalid(X) - # centralize - if not self.assume_centered: - X = X - np.nanmean(X, axis=0) - return X - - -class ShrinkCovEstimator(RiskModel): - """Shrinkage Covariance Estimator - - This estimator will shrink the sample covariance matrix towards - an identify matrix: - S_hat = (1 - alpha) * S + alpha * F - where `alpha` is the shrink parameter and `F` is the shrinking target. - - The following shrinking parameters (`alpha`) are supported: - - `lw` [1][2][3]: use Ledoit-Wolf shrinking parameter. - - `oas` [4]: use Oracle Approximating Shrinkage shrinking parameter. - - float: directly specify the shrink parameter, should be between [0, 1]. - - The following shrinking targets (`F`) are supported: - - `const_var` [1][4][5]: assume stocks have the same constant variance and zero correlation. - - `const_corr` [2][6]: assume stocks have different variance but equal correlation. - - `single_factor` [3][7]: assume single factor model as the shrinking target. - - np.ndarray: provide the shrinking targets directly. - - Note: - - The optimal shrinking parameter depends on the selection of the shrinking target. - Currently, `oas` is not supported for `const_corr` and `single_factor`. - - Remember to set `nan_option` to `fill` or `mask` if your data has missing values. - - References: - [1] Ledoit, O., & Wolf, M. (2004). A well-conditioned estimator for large-dimensional covariance matrices. - Journal of Multivariate Analysis, 88(2), 365–411. https://doi.org/10.1016/S0047-259X(03)00096-4 - [2] Ledoit, O., & Wolf, M. (2004). Honey, I shrunk the sample covariance matrix. - Journal of Portfolio Management, 30(4), 1–22. https://doi.org/10.3905/jpm.2004.110 - [3] Ledoit, O., & Wolf, M. (2003). Improved estimation of the covariance matrix of stock returns - with an application to portfolio selection. - Journal of Empirical Finance, 10(5), 603–621. https://doi.org/10.1016/S0927-5398(03)00007-0 - [4] Chen, Y., Wiesel, A., Eldar, Y. C., & Hero, A. O. (2010). Shrinkage algorithms for MMSE covariance - estimation. IEEE Transactions on Signal Processing, 58(10), 5016–5029. - https://doi.org/10.1109/TSP.2010.2053029 - [5] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-0000-00007f64e5b9/cov1para.m.zip - [6] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-ffff-ffffde5e2d4e/covCor.m.zip - [7] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-0000-0000648dfc98/covMarket.m.zip - """ - - SHR_LW = "lw" - SHR_OAS = "oas" - - TGT_CONST_VAR = "const_var" - TGT_CONST_CORR = "const_corr" - TGT_SINGLE_FACTOR = "single_factor" - - def __init__(self, alpha: Union[str, float] = 0.0, target: Union[str, np.ndarray] = "const_var", **kwargs): - """ - Args: - alpha (str or float): shrinking parameter or estimator (`lw`/`oas`) - target (str or np.ndarray): shrinking target (`const_var`/`const_corr`/`single_factor`) - kwargs: see `RiskModel` for more information - """ - super().__init__(**kwargs) - - # alpha - if isinstance(alpha, str): - assert alpha in [self.SHR_LW, self.SHR_OAS], f"shrinking method `{alpha}` is not supported" - elif isinstance(alpha, (float, np.floating)): - assert 0 <= alpha <= 1, "alpha should be between [0, 1]" - else: - raise TypeError("invalid argument type for `alpha`") - self.alpha = alpha - - # target - if isinstance(target, str): - assert target in [ - self.TGT_CONST_VAR, - self.TGT_CONST_CORR, - self.TGT_SINGLE_FACTOR, - ], f"shrinking target `{target} is not supported" - elif isinstance(target, np.ndarray): - pass - else: - raise TypeError("invalid argument type for `target`") - if alpha == self.SHR_OAS and target != self.TGT_CONST_VAR: - raise NotImplementedError("currently `oas` can only support `const_var` as target") - self.target = target - - def _predict(self, X: np.ndarray) -> np.ndarray: - # sample covariance - S = super()._predict(X) - - # shrinking target - F = self._get_shrink_target(X, S) - - # get shrinking parameter - alpha = self._get_shrink_param(X, S, F) - - # shrink covariance - if alpha > 0: - S *= 1 - alpha - F *= alpha - S += F - - return S - - def _get_shrink_target(self, X: np.ndarray, S: np.ndarray) -> np.ndarray: - """get shrinking target `F`""" - if self.target == self.TGT_CONST_VAR: - return self._get_shrink_target_const_var(X, S) - if self.target == self.TGT_CONST_CORR: - return self._get_shrink_target_const_corr(X, S) - if self.target == self.TGT_SINGLE_FACTOR: - return self._get_shrink_target_single_factor(X, S) - return self.target - - def _get_shrink_target_const_var(self, X: np.ndarray, S: np.ndarray) -> np.ndarray: - """get shrinking target with constant variance - - This target assumes zero pair-wise correlation and constant variance. - The constant variance is estimated by averaging all sample's variances. - """ - n = len(S) - F = np.eye(n) - np.fill_diagonal(F, np.mean(np.diag(S))) - return F - - def _get_shrink_target_const_corr(self, X: np.ndarray, S: np.ndarray) -> np.ndarray: - """get shrinking target with constant correlation - - This target assumes constant pair-wise correlation but keep the sample variance. - The constant correlation is estimated by averaging all pairwise correlations. - """ - n = len(S) - var = np.diag(S) - sqrt_var = np.sqrt(var) - covar = np.outer(sqrt_var, sqrt_var) - r_bar = (np.sum(S / covar) - n) / (n * (n - 1)) - F = r_bar * covar - np.fill_diagonal(F, var) - return F - - def _get_shrink_target_single_factor(self, X: np.ndarray, S: np.ndarray) -> np.ndarray: - """get shrinking target with single factor model""" - X_mkt = np.nanmean(X, axis=1) - cov_mkt = np.asarray(X.T.dot(X_mkt) / len(X)) - var_mkt = np.asarray(X_mkt.dot(X_mkt) / len(X)) - F = np.outer(cov_mkt, cov_mkt) / var_mkt - np.fill_diagonal(F, np.diag(S)) - return F - - def _get_shrink_param(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: - """get shrinking parameter `alpha` - - Note: - The Ledoit-Wolf shrinking parameter estimator consists of three different methods. - """ - if self.alpha == self.SHR_OAS: - return self._get_shrink_param_oas(X, S, F) - elif self.alpha == self.SHR_LW: - if self.target == self.TGT_CONST_VAR: - return self._get_shrink_param_lw_const_var(X, S, F) - if self.target == self.TGT_CONST_CORR: - return self._get_shrink_param_lw_const_corr(X, S, F) - if self.target == self.TGT_SINGLE_FACTOR: - return self._get_shrink_param_lw_single_factor(X, S, F) - return self.alpha - - def _get_shrink_param_oas(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: - """Oracle Approximating Shrinkage Estimator - - This method uses the following formula to estimate the `alpha` - parameter for the shrink covariance estimator: - A = (1 - 2 / p) * trace(S^2) + trace^2(S) - B = (n + 1 - 2 / p) * (trace(S^2) - trace^2(S) / p) - alpha = A / B - where `n`, `p` are the dim of observations and variables respectively. - """ - trS2 = np.sum(S ** 2) - tr2S = np.trace(S) ** 2 - - n, p = X.shape - - A = (1 - 2 / p) * (trS2 + tr2S) - B = (n + 1 - 2 / p) * (trS2 + tr2S / p) - alpha = A / B - - return alpha - - def _get_shrink_param_lw_const_var(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: - """Ledoit-Wolf Shrinkage Estimator (Constant Variance) - - This method shrinks the covariance matrix towards the constand variance target. - """ - t, n = X.shape - - y = X ** 2 - phi = np.sum(y.T.dot(y) / t - S ** 2) - - gamma = np.linalg.norm(S - F, "fro") ** 2 - - kappa = phi / gamma - alpha = max(0, min(1, kappa / t)) - - return alpha - - def _get_shrink_param_lw_const_corr(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: - """Ledoit-Wolf Shrinkage Estimator (Constant Correlation) - - This method shrinks the covariance matrix towards the constand correlation target. - """ - t, n = X.shape - - var = np.diag(S) - sqrt_var = np.sqrt(var) - r_bar = (np.sum(S / np.outer(sqrt_var, sqrt_var)) - n) / (n * (n - 1)) - - y = X ** 2 - phi_mat = y.T.dot(y) / t - S ** 2 - phi = np.sum(phi_mat) - - theta_mat = (X ** 3).T.dot(X) / t - var[:, None] * S - np.fill_diagonal(theta_mat, 0) - rho = np.sum(np.diag(phi_mat)) + r_bar * np.sum(np.outer(1 / sqrt_var, sqrt_var) * theta_mat) - - gamma = np.linalg.norm(S - F, "fro") ** 2 - - kappa = (phi - rho) / gamma - alpha = max(0, min(1, kappa / t)) - - return alpha - - def _get_shrink_param_lw_single_factor(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: - """Ledoit-Wolf Shrinkage Estimator (Single Factor Model) - - This method shrinks the covariance matrix towards the single factor model target. - """ - t, n = X.shape - - X_mkt = np.nanmean(X, axis=1) - cov_mkt = np.asarray(X.T.dot(X_mkt) / len(X)) - var_mkt = np.asarray(X_mkt.dot(X_mkt) / len(X)) - - y = X ** 2 - phi = np.sum(y.T.dot(y)) / t - np.sum(S ** 2) - - rdiag = np.sum(y ** 2) / t - np.sum(np.diag(S) ** 2) - z = X * X_mkt[:, None] - v1 = y.T.dot(z) / t - cov_mkt[:, None] * S - roff1 = np.sum(v1 * cov_mkt[:, None].T) / var_mkt - np.sum(np.diag(v1) * cov_mkt) / var_mkt - v3 = z.T.dot(z) / t - var_mkt * S - roff3 = ( - np.sum(v3 * np.outer(cov_mkt, cov_mkt)) / var_mkt ** 2 - np.sum(np.diag(v3) * cov_mkt ** 2) / var_mkt ** 2 - ) - roff = 2 * roff1 - roff3 - rho = rdiag + roff - - gamma = np.linalg.norm(S - F, "fro") ** 2 - - kappa = (phi - rho) / gamma - alpha = max(0, min(1, kappa / t)) - - return alpha - - -class POETCovEstimator(RiskModel): - """Principal Orthogonal Complement Thresholding Estimator (POET) - - Reference: - [1] Fan, J., Liao, Y., & Mincheva, M. (2013). Large covariance estimation by thresholding principal orthogonal complements. - Journal of the Royal Statistical Society. Series B: Statistical Methodology, 75(4), 603–680. https://doi.org/10.1111/rssb.12016 - [2] http://econweb.rutgers.edu/yl1114/papers/poet/POET.m - """ - - THRESH_SOFT = "soft" - THRESH_HARD = "hard" - THRESH_SCAD = "scad" - - def __init__(self, num_factors: int = 0, thresh: float = 1.0, thresh_method: str = "soft", **kwargs): - """ - Args: - num_factors (int): number of factors (if set to zero, no factor model will be used). - thresh (float): the positive constant for thresholding. - thresh_method (str): thresholding method, which can be - - 'soft': soft thresholding. - - 'hard': hard thresholding. - - 'scad': scad thresholding. - kwargs: see `RiskModel` for more information. - """ - super().__init__(**kwargs) - - assert num_factors >= 0, "`num_factors` requires a positive integer" - self.num_factors = num_factors - - assert thresh >= 0, "`thresh` requires a positive float number" - self.thresh = thresh - - assert thresh_method in [ - self.THRESH_HARD, - self.THRESH_SOFT, - self.THRESH_SCAD, - ], "`thresh_method` should be `soft`/`hard`/`scad`" - self.thresh_method = thresh_method - - def _predict(self, X: np.ndarray) -> np.ndarray: - - Y = X.T # NOTE: to match POET's implementation - p, n = Y.shape - - if self.num_factors > 0: - Dd, V = np.linalg.eig(Y.T.dot(Y)) - V = V[:, np.argsort(Dd)] - F = V[:, -self.num_factors :][:, ::-1] * np.sqrt(n) - LamPCA = Y.dot(F) / n - uhat = np.asarray(Y - LamPCA.dot(F.T)) - Lowrank = np.asarray(LamPCA.dot(LamPCA.T)) - rate = 1 / np.sqrt(p) + np.sqrt(np.log(p) / n) - else: - uhat = np.asarray(Y) - rate = np.sqrt(np.log(p) / n) - Lowrank = 0 - - lamb = rate * self.thresh - SuPCA = uhat.dot(uhat.T) / n - SuDiag = np.diag(np.diag(SuPCA)) - R = np.linalg.inv(SuDiag ** 0.5).dot(SuPCA).dot(np.linalg.inv(SuDiag ** 0.5)) - - if self.thresh_method == self.THRESH_HARD: - M = R * (np.abs(R) > lamb) - elif self.thresh_method == self.THRESH_SOFT: - res = np.abs(R) - lamb - res = (res + np.abs(res)) / 2 - M = np.sign(R) * res - else: - M1 = (np.abs(R) < 2 * lamb) * np.sign(R) * (np.abs(R) - lamb) * (np.abs(R) > lamb) - M2 = (np.abs(R) < 3.7 * lamb) * (np.abs(R) >= 2 * lamb) * (2.7 * R - 3.7 * np.sign(R) * lamb) / 1.7 - M3 = (np.abs(R) >= 3.7 * lamb) * R - M = M1 + M2 + M3 - - Rthresh = M - np.diag(np.diag(M)) + np.eye(p) - SigmaU = (SuDiag ** 0.5).dot(Rthresh).dot(SuDiag ** 0.5) - SigmaY = SigmaU + Lowrank - - return SigmaY - - -class StructuredCovEstimator(RiskModel): - """Structured Covariance Estimator - - This estimator assumes observations can be predicted by multiple factors - X = FB + U - where `F` can be specified by explicit risk factors or latent factors. - - Therefore the structured covariance can be estimated by - cov(X) = F cov(B) F.T + cov(U) - - We use latent factor models to estimate the structured covariance. - Specifically, the following latent factor models are supported: - - `pca`: Principal Component Analysis - - `fa`: Factor Analysis - - Reference: [1] Fan, J., Liao, Y., & Liu, H. (2016). An overview of the estimation of large covariance and - precision matrices. Econometrics Journal, 19(1), C1–C32. https://doi.org/10.1111/ectj.12061 - """ - - FACTOR_MODEL_PCA = "pca" - FACTOR_MODEL_FA = "fa" - - def __init__( - self, - factor_model: str = "pca", - num_factors: int = 10, - nan_option: str = "ignore", - assume_centered: bool = False, - scale_return: bool = True, - ): - """ - Args: - factor_model (str): the latent factor models used to estimate the structured covariance (`pca`/`fa`). - num_factors (int): number of components to keep. - nan_option (str): nan handling option (`ignore`/`fill`). - assume_centered (bool): whether the data is assumed to be centered. - scale_return (bool): whether scale returns as percentage. - """ - super().__init__(nan_option, assume_centered, scale_return) - - assert factor_model in [ - self.FACTOR_MODEL_PCA, - self.FACTOR_MODEL_FA, - ], "factor_model={} is not supported".format(factor_model) - self.solver = PCA if factor_model == self.FACTOR_MODEL_PCA else FactorAnalysis - - self.num_factors = num_factors - - def predict( - self, - X: Union[pd.Series, pd.DataFrame, np.ndarray], - return_corr: bool = False, - is_price: bool = True, - return_decomposed_components=False, - ) -> Union[pd.DataFrame, np.ndarray, tuple]: - """ - Args: - X (pd.Series, pd.DataFrame or np.ndarray): data from which to estimate the covariance, - with variables as columns and observations as rows. - return_corr (bool): whether return the correlation matrix. - is_price (bool): whether `X` contains price (if not assume stock returns). - return_decomposed_components (bool): whether return decomposed components of the covariance matrix. - - Returns: - tuple or pd.DataFrame or np.ndarray: decomposed covariance matrix or estimated covariance or correlation. - """ - assert ( - not return_corr or not return_decomposed_components - ), "Can only return either correlation matrix or decomposed components." - - # transform input into 2D array - if not isinstance(X, (pd.Series, pd.DataFrame)): - columns = None - else: - if isinstance(X.index, pd.MultiIndex): - if isinstance(X, pd.DataFrame): - X = X.iloc[:, 0].unstack(level="instrument") # always use the first column - else: - X = X.unstack(level="instrument") - else: - # X is 2D DataFrame - pass - columns = X.columns # will be used to restore dataframe - X = X.values - - # calculate pct_change - if is_price: - X = X[1:] / X[:-1] - 1 # NOTE: resulting `n - 1` rows - - # scale return - if self.scale_return: - X *= 100 - - # handle nan and centered - X = self._preprocess(X) - - if return_decomposed_components: - F, cov_b, var_u = self._predict(X, return_structured=True) - return F, cov_b, var_u - else: - # estimate covariance - S = self._predict(X) - - # return correlation if needed - if return_corr: - vola = np.sqrt(np.diag(S)) - corr = S / np.outer(vola, vola) - if columns is None: - return corr - return pd.DataFrame(corr, index=columns, columns=columns) - - # return covariance - if columns is None: - return S - return pd.DataFrame(S, index=columns, columns=columns) - - def _predict(self, X: np.ndarray, return_structured=False) -> Union[np.ndarray, tuple]: - """ - covariance estimation implementation - - Args: - X (np.ndarray): data matrix containing multiple variables (columns) and observations (rows). - return_structured (bool): whether return decomposed components of the covariance matrix. - - Returns: - tuple or np.ndarray: decomposed covariance matrix or covariance matrix. - """ - - model = self.solver(self.num_factors, random_state=0).fit(X) - - F = model.components_.T # num_features x num_factors - B = model.transform(X) # num_samples x num_factors - U = X - B @ F.T - cov_b = np.cov(B.T) # num_factors x num_factors - var_u = np.var(U, axis=0) # diagonal - - if return_structured: - return F, cov_b, var_u - - cov_x = F @ cov_b @ F.T + np.diag(var_u) - - return cov_x diff --git a/qlib/model/riskmodel_poet.py b/qlib/model/riskmodel/__init__.py similarity index 100% rename from qlib/model/riskmodel_poet.py rename to qlib/model/riskmodel/__init__.py diff --git a/qlib/model/riskmodel/base.py b/qlib/model/riskmodel/base.py new file mode 100644 index 000000000..d5b009ccc --- /dev/null +++ b/qlib/model/riskmodel/base.py @@ -0,0 +1,141 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import numpy as np +import pandas as pd +from typing import Union + +from qlib.model.base import BaseModel + +from qlib.model.riskmodel_poet import POETCovEstimator +from qlib.model.riskmodel_shrink import ShrinkCovEstimator +from qlib.model.riskmodel_structured import StructuredCovEstimator + + +class RiskModel(BaseModel): + """Risk Model + + A risk model is used to estimate the covariance matrix of stock returns. + """ + + MASK_NAN = "mask" + FILL_NAN = "fill" + IGNORE_NAN = "ignore" + + def __init__(self, nan_option: str = "ignore", assume_centered: bool = False, scale_return: bool = True): + """ + Args: + nan_option (str): nan handling option (`ignore`/`mask`/`fill`). + assume_centered (bool): whether the data is assumed to be centered. + scale_return (bool): whether scale returns as percentage. + """ + # nan + assert nan_option in [ + self.MASK_NAN, + self.FILL_NAN, + self.IGNORE_NAN, + ], f"`nan_option={nan_option}` is not supported" + self.nan_option = nan_option + + self.assume_centered = assume_centered + self.scale_return = scale_return + + def predict( + self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True + ) -> Union[pd.DataFrame, np.ndarray]: + """ + Args: + X (pd.Series, pd.DataFrame or np.ndarray): data from which to estimate the covariance, + with variables as columns and observations as rows. + return_corr (bool): whether return the correlation matrix. + is_price (bool): whether `X` contains price (if not assume stock returns). + + Returns: + pd.DataFrame or np.ndarray: estimated covariance (or correlation). + """ + # transform input into 2D array + if not isinstance(X, (pd.Series, pd.DataFrame)): + columns = None + else: + if isinstance(X.index, pd.MultiIndex): + if isinstance(X, pd.DataFrame): + X = X.iloc[:, 0].unstack(level="instrument") # always use the first column + else: + X = X.unstack(level="instrument") + else: + # X is 2D DataFrame + pass + columns = X.columns # will be used to restore dataframe + X = X.values + + # calculate pct_change + if is_price: + X = X[1:] / X[:-1] - 1 # NOTE: resulting `n - 1` rows + + # scale return + if self.scale_return: + X *= 100 + + # handle nan and centered + X = self._preprocess(X) + + # estimate covariance + S = self._predict(X) + + # return correlation if needed + if return_corr: + vola = np.sqrt(np.diag(S)) + corr = S / np.outer(vola, vola) + if columns is None: + return corr + return pd.DataFrame(corr, index=columns, columns=columns) + + # return covariance + if columns is None: + return S + return pd.DataFrame(S, index=columns, columns=columns) + + def _predict(self, X: np.ndarray) -> np.ndarray: + """covariance estimation implementation + + This method should be overridden by child classes. + + By default, this method implements the empirical covariance estimation. + + Args: + X (np.ndarray): data matrix containing multiple variables (columns) and observations (rows). + + Returns: + np.ndarray: covariance matrix. + """ + xTx = np.asarray(X.T.dot(X)) + N = len(X) + if isinstance(X, np.ma.MaskedArray): + M = 1 - X.mask + N = M.T.dot(M) # each pair has distinct number of samples + return xTx / N + + def _preprocess(self, X: np.ndarray) -> Union[np.ndarray, np.ma.MaskedArray]: + """handle nan and centerize data + + Note: + if `nan_option='mask'` then the returned array will be `np.ma.MaskedArray`. + """ + # handle nan + if self.nan_option == self.FILL_NAN: + X = np.nan_to_num(X) + elif self.nan_option == self.MASK_NAN: + X = np.ma.masked_invalid(X) + # centralize + if not self.assume_centered: + X = X - np.nanmean(X, axis=0) + return X + + + + + + + + + diff --git a/qlib/model/riskmodel/poet.py b/qlib/model/riskmodel/poet.py new file mode 100644 index 000000000..8dbe89036 --- /dev/null +++ b/qlib/model/riskmodel/poet.py @@ -0,0 +1,84 @@ +import numpy as np + +from qlib.model.riskmodel import RiskModel + + +class POETCovEstimator(RiskModel): + """Principal Orthogonal Complement Thresholding Estimator (POET) + + Reference: + [1] Fan, J., Liao, Y., & Mincheva, M. (2013). Large covariance estimation by thresholding principal orthogonal complements. + Journal of the Royal Statistical Society. Series B: Statistical Methodology, 75(4), 603–680. https://doi.org/10.1111/rssb.12016 + [2] http://econweb.rutgers.edu/yl1114/papers/poet/POET.m + """ + + THRESH_SOFT = "soft" + THRESH_HARD = "hard" + THRESH_SCAD = "scad" + + def __init__(self, num_factors: int = 0, thresh: float = 1.0, thresh_method: str = "soft", **kwargs): + """ + Args: + num_factors (int): number of factors (if set to zero, no factor model will be used). + thresh (float): the positive constant for thresholding. + thresh_method (str): thresholding method, which can be + - 'soft': soft thresholding. + - 'hard': hard thresholding. + - 'scad': scad thresholding. + kwargs: see `RiskModel` for more information. + """ + super().__init__(**kwargs) + + assert num_factors >= 0, "`num_factors` requires a positive integer" + self.num_factors = num_factors + + assert thresh >= 0, "`thresh` requires a positive float number" + self.thresh = thresh + + assert thresh_method in [ + self.THRESH_HARD, + self.THRESH_SOFT, + self.THRESH_SCAD, + ], "`thresh_method` should be `soft`/`hard`/`scad`" + self.thresh_method = thresh_method + + def _predict(self, X: np.ndarray) -> np.ndarray: + + Y = X.T # NOTE: to match POET's implementation + p, n = Y.shape + + if self.num_factors > 0: + Dd, V = np.linalg.eig(Y.T.dot(Y)) + V = V[:, np.argsort(Dd)] + F = V[:, -self.num_factors:][:, ::-1] * np.sqrt(n) + LamPCA = Y.dot(F) / n + uhat = np.asarray(Y - LamPCA.dot(F.T)) + Lowrank = np.asarray(LamPCA.dot(LamPCA.T)) + rate = 1 / np.sqrt(p) + np.sqrt(np.log(p) / n) + else: + uhat = np.asarray(Y) + rate = np.sqrt(np.log(p) / n) + Lowrank = 0 + + lamb = rate * self.thresh + SuPCA = uhat.dot(uhat.T) / n + SuDiag = np.diag(np.diag(SuPCA)) + R = np.linalg.inv(SuDiag ** 0.5).dot(SuPCA).dot(np.linalg.inv(SuDiag ** 0.5)) + + if self.thresh_method == self.THRESH_HARD: + M = R * (np.abs(R) > lamb) + elif self.thresh_method == self.THRESH_SOFT: + res = np.abs(R) - lamb + res = (res + np.abs(res)) / 2 + M = np.sign(R) * res + else: + M1 = (np.abs(R) < 2 * lamb) * np.sign(R) * (np.abs(R) - lamb) * (np.abs(R) > lamb) + M2 = (np.abs(R) < 3.7 * lamb) * (np.abs(R) >= 2 * lamb) * (2.7 * R - 3.7 * np.sign(R) * lamb) / 1.7 + M3 = (np.abs(R) >= 3.7 * lamb) * R + M = M1 + M2 + M3 + + Rthresh = M - np.diag(np.diag(M)) + np.eye(p) + SigmaU = (SuDiag ** 0.5).dot(Rthresh).dot(SuDiag ** 0.5) + SigmaY = SigmaU + Lowrank + + return SigmaY diff --git a/qlib/model/riskmodel/shrink.py b/qlib/model/riskmodel/shrink.py new file mode 100644 index 000000000..1298891fb --- /dev/null +++ b/qlib/model/riskmodel/shrink.py @@ -0,0 +1,262 @@ +import numpy as np +from typing import Union + +from qlib.model.riskmodel import RiskModel + + +class ShrinkCovEstimator(RiskModel): + """Shrinkage Covariance Estimator + + This estimator will shrink the sample covariance matrix towards + an identify matrix: + S_hat = (1 - alpha) * S + alpha * F + where `alpha` is the shrink parameter and `F` is the shrinking target. + + The following shrinking parameters (`alpha`) are supported: + - `lw` [1][2][3]: use Ledoit-Wolf shrinking parameter. + - `oas` [4]: use Oracle Approximating Shrinkage shrinking parameter. + - float: directly specify the shrink parameter, should be between [0, 1]. + + The following shrinking targets (`F`) are supported: + - `const_var` [1][4][5]: assume stocks have the same constant variance and zero correlation. + - `const_corr` [2][6]: assume stocks have different variance but equal correlation. + - `single_factor` [3][7]: assume single factor model as the shrinking target. + - np.ndarray: provide the shrinking targets directly. + + Note: + - The optimal shrinking parameter depends on the selection of the shrinking target. + Currently, `oas` is not supported for `const_corr` and `single_factor`. + - Remember to set `nan_option` to `fill` or `mask` if your data has missing values. + + References: + [1] Ledoit, O., & Wolf, M. (2004). A well-conditioned estimator for large-dimensional covariance matrices. + Journal of Multivariate Analysis, 88(2), 365–411. https://doi.org/10.1016/S0047-259X(03)00096-4 + [2] Ledoit, O., & Wolf, M. (2004). Honey, I shrunk the sample covariance matrix. + Journal of Portfolio Management, 30(4), 1–22. https://doi.org/10.3905/jpm.2004.110 + [3] Ledoit, O., & Wolf, M. (2003). Improved estimation of the covariance matrix of stock returns + with an application to portfolio selection. + Journal of Empirical Finance, 10(5), 603–621. https://doi.org/10.1016/S0927-5398(03)00007-0 + [4] Chen, Y., Wiesel, A., Eldar, Y. C., & Hero, A. O. (2010). Shrinkage algorithms for MMSE covariance + estimation. IEEE Transactions on Signal Processing, 58(10), 5016–5029. + https://doi.org/10.1109/TSP.2010.2053029 + [5] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-0000-00007f64e5b9/cov1para.m.zip + [6] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-ffff-ffffde5e2d4e/covCor.m.zip + [7] https://www.econ.uzh.ch/dam/jcr:ffffffff-935a-b0d6-0000-0000648dfc98/covMarket.m.zip + """ + + SHR_LW = "lw" + SHR_OAS = "oas" + + TGT_CONST_VAR = "const_var" + TGT_CONST_CORR = "const_corr" + TGT_SINGLE_FACTOR = "single_factor" + + def __init__(self, alpha: Union[str, float] = 0.0, target: Union[str, np.ndarray] = "const_var", **kwargs): + """ + Args: + alpha (str or float): shrinking parameter or estimator (`lw`/`oas`) + target (str or np.ndarray): shrinking target (`const_var`/`const_corr`/`single_factor`) + kwargs: see `RiskModel` for more information + """ + super().__init__(**kwargs) + + # alpha + if isinstance(alpha, str): + assert alpha in [self.SHR_LW, self.SHR_OAS], f"shrinking method `{alpha}` is not supported" + elif isinstance(alpha, (float, np.floating)): + assert 0 <= alpha <= 1, "alpha should be between [0, 1]" + else: + raise TypeError("invalid argument type for `alpha`") + self.alpha = alpha + + # target + if isinstance(target, str): + assert target in [ + self.TGT_CONST_VAR, + self.TGT_CONST_CORR, + self.TGT_SINGLE_FACTOR, + ], f"shrinking target `{target} is not supported" + elif isinstance(target, np.ndarray): + pass + else: + raise TypeError("invalid argument type for `target`") + if alpha == self.SHR_OAS and target != self.TGT_CONST_VAR: + raise NotImplementedError("currently `oas` can only support `const_var` as target") + self.target = target + + def _predict(self, X: np.ndarray) -> np.ndarray: + # sample covariance + S = super()._predict(X) + + # shrinking target + F = self._get_shrink_target(X, S) + + # get shrinking parameter + alpha = self._get_shrink_param(X, S, F) + + # shrink covariance + if alpha > 0: + S *= 1 - alpha + F *= alpha + S += F + + return S + + def _get_shrink_target(self, X: np.ndarray, S: np.ndarray) -> np.ndarray: + """get shrinking target `F`""" + if self.target == self.TGT_CONST_VAR: + return self._get_shrink_target_const_var(X, S) + if self.target == self.TGT_CONST_CORR: + return self._get_shrink_target_const_corr(X, S) + if self.target == self.TGT_SINGLE_FACTOR: + return self._get_shrink_target_single_factor(X, S) + return self.target + + def _get_shrink_target_const_var(self, X: np.ndarray, S: np.ndarray) -> np.ndarray: + """get shrinking target with constant variance + + This target assumes zero pair-wise correlation and constant variance. + The constant variance is estimated by averaging all sample's variances. + """ + n = len(S) + F = np.eye(n) + np.fill_diagonal(F, np.mean(np.diag(S))) + return F + + def _get_shrink_target_const_corr(self, X: np.ndarray, S: np.ndarray) -> np.ndarray: + """get shrinking target with constant correlation + + This target assumes constant pair-wise correlation but keep the sample variance. + The constant correlation is estimated by averaging all pairwise correlations. + """ + n = len(S) + var = np.diag(S) + sqrt_var = np.sqrt(var) + covar = np.outer(sqrt_var, sqrt_var) + r_bar = (np.sum(S / covar) - n) / (n * (n - 1)) + F = r_bar * covar + np.fill_diagonal(F, var) + return F + + def _get_shrink_target_single_factor(self, X: np.ndarray, S: np.ndarray) -> np.ndarray: + """get shrinking target with single factor model""" + X_mkt = np.nanmean(X, axis=1) + cov_mkt = np.asarray(X.T.dot(X_mkt) / len(X)) + var_mkt = np.asarray(X_mkt.dot(X_mkt) / len(X)) + F = np.outer(cov_mkt, cov_mkt) / var_mkt + np.fill_diagonal(F, np.diag(S)) + return F + + def _get_shrink_param(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: + """get shrinking parameter `alpha` + + Note: + The Ledoit-Wolf shrinking parameter estimator consists of three different methods. + """ + if self.alpha == self.SHR_OAS: + return self._get_shrink_param_oas(X, S, F) + elif self.alpha == self.SHR_LW: + if self.target == self.TGT_CONST_VAR: + return self._get_shrink_param_lw_const_var(X, S, F) + if self.target == self.TGT_CONST_CORR: + return self._get_shrink_param_lw_const_corr(X, S, F) + if self.target == self.TGT_SINGLE_FACTOR: + return self._get_shrink_param_lw_single_factor(X, S, F) + return self.alpha + + def _get_shrink_param_oas(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: + """Oracle Approximating Shrinkage Estimator + + This method uses the following formula to estimate the `alpha` + parameter for the shrink covariance estimator: + A = (1 - 2 / p) * trace(S^2) + trace^2(S) + B = (n + 1 - 2 / p) * (trace(S^2) - trace^2(S) / p) + alpha = A / B + where `n`, `p` are the dim of observations and variables respectively. + """ + trS2 = np.sum(S ** 2) + tr2S = np.trace(S) ** 2 + + n, p = X.shape + + A = (1 - 2 / p) * (trS2 + tr2S) + B = (n + 1 - 2 / p) * (trS2 + tr2S / p) + alpha = A / B + + return alpha + + def _get_shrink_param_lw_const_var(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: + """Ledoit-Wolf Shrinkage Estimator (Constant Variance) + + This method shrinks the covariance matrix towards the constand variance target. + """ + t, n = X.shape + + y = X ** 2 + phi = np.sum(y.T.dot(y) / t - S ** 2) + + gamma = np.linalg.norm(S - F, "fro") ** 2 + + kappa = phi / gamma + alpha = max(0, min(1, kappa / t)) + + return alpha + + def _get_shrink_param_lw_const_corr(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: + """Ledoit-Wolf Shrinkage Estimator (Constant Correlation) + + This method shrinks the covariance matrix towards the constand correlation target. + """ + t, n = X.shape + + var = np.diag(S) + sqrt_var = np.sqrt(var) + r_bar = (np.sum(S / np.outer(sqrt_var, sqrt_var)) - n) / (n * (n - 1)) + + y = X ** 2 + phi_mat = y.T.dot(y) / t - S ** 2 + phi = np.sum(phi_mat) + + theta_mat = (X ** 3).T.dot(X) / t - var[:, None] * S + np.fill_diagonal(theta_mat, 0) + rho = np.sum(np.diag(phi_mat)) + r_bar * np.sum(np.outer(1 / sqrt_var, sqrt_var) * theta_mat) + + gamma = np.linalg.norm(S - F, "fro") ** 2 + + kappa = (phi - rho) / gamma + alpha = max(0, min(1, kappa / t)) + + return alpha + + def _get_shrink_param_lw_single_factor(self, X: np.ndarray, S: np.ndarray, F: np.ndarray) -> float: + """Ledoit-Wolf Shrinkage Estimator (Single Factor Model) + + This method shrinks the covariance matrix towards the single factor model target. + """ + t, n = X.shape + + X_mkt = np.nanmean(X, axis=1) + cov_mkt = np.asarray(X.T.dot(X_mkt) / len(X)) + var_mkt = np.asarray(X_mkt.dot(X_mkt) / len(X)) + + y = X ** 2 + phi = np.sum(y.T.dot(y)) / t - np.sum(S ** 2) + + rdiag = np.sum(y ** 2) / t - np.sum(np.diag(S) ** 2) + z = X * X_mkt[:, None] + v1 = y.T.dot(z) / t - cov_mkt[:, None] * S + roff1 = np.sum(v1 * cov_mkt[:, None].T) / var_mkt - np.sum(np.diag(v1) * cov_mkt) / var_mkt + v3 = z.T.dot(z) / t - var_mkt * S + roff3 = ( + np.sum(v3 * np.outer(cov_mkt, cov_mkt)) / var_mkt ** 2 - np.sum( + np.diag(v3) * cov_mkt ** 2) / var_mkt ** 2 + ) + roff = 2 * roff1 - roff3 + rho = rdiag + roff + + gamma = np.linalg.norm(S - F, "fro") ** 2 + + kappa = (phi - rho) / gamma + alpha = max(0, min(1, kappa / t)) + + return alpha diff --git a/qlib/model/riskmodel/structured.py b/qlib/model/riskmodel/structured.py new file mode 100644 index 000000000..e778c2faa --- /dev/null +++ b/qlib/model/riskmodel/structured.py @@ -0,0 +1,152 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import numpy as np +import pandas as pd +from typing import Union +from sklearn.decomposition import PCA, FactorAnalysis + +from qlib.model.riskmodel import RiskModel + + +class StructuredCovEstimator(RiskModel): + """Structured Covariance Estimator + + This estimator assumes observations can be predicted by multiple factors + X = FB + U + where `F` can be specified by explicit risk factors or latent factors. + + Therefore the structured covariance can be estimated by + cov(X) = F cov(B) F.T + cov(U) + + We use latent factor models to estimate the structured covariance. + Specifically, the following latent factor models are supported: + - `pca`: Principal Component Analysis + - `fa`: Factor Analysis + + Reference: [1] Fan, J., Liao, Y., & Liu, H. (2016). An overview of the estimation of large covariance and + precision matrices. Econometrics Journal, 19(1), C1–C32. https://doi.org/10.1111/ectj.12061 + """ + + FACTOR_MODEL_PCA = "pca" + FACTOR_MODEL_FA = "fa" + NAN_OPTION = "fill" + + def __init__( + self, + factor_model: str = "pca", + num_factors: int = 10, + assume_centered: bool = False, + scale_return: bool = True, + ): + """ + Args: + factor_model (str): the latent factor models used to estimate the structured covariance (`pca`/`fa`). + num_factors (int): number of components to keep. + assume_centered (bool): whether the data is assumed to be centered. + scale_return (bool): whether scale returns as percentage. + """ + super().__init__(self.NAN_OPTION, assume_centered, scale_return) + + assert factor_model in [ + self.FACTOR_MODEL_PCA, + self.FACTOR_MODEL_FA, + ], "factor_model={} is not supported".format(factor_model) + self.solver = PCA if factor_model == self.FACTOR_MODEL_PCA else FactorAnalysis + + self.num_factors = num_factors + + def predict( + self, + X: Union[pd.Series, pd.DataFrame, np.ndarray], + return_corr: bool = False, + is_price: bool = True, + return_decomposed_components=False, + ) -> Union[pd.DataFrame, np.ndarray, tuple]: + """ + Args: + X (pd.Series, pd.DataFrame or np.ndarray): data from which to estimate the covariance, + with variables as columns and observations as rows. + return_corr (bool): whether return the correlation matrix. + is_price (bool): whether `X` contains price (if not assume stock returns). + return_decomposed_components (bool): whether return decomposed components of the covariance matrix. + + Returns: + tuple or pd.DataFrame or np.ndarray: decomposed covariance matrix or estimated covariance or correlation. + """ + assert ( + not return_corr or not return_decomposed_components + ), "Can only return either correlation matrix or decomposed components." + + # transform input into 2D array + if not isinstance(X, (pd.Series, pd.DataFrame)): + columns = None + else: + if isinstance(X.index, pd.MultiIndex): + if isinstance(X, pd.DataFrame): + X = X.iloc[:, 0].unstack(level="instrument") # always use the first column + else: + X = X.unstack(level="instrument") + else: + # X is 2D DataFrame + pass + columns = X.columns # will be used to restore dataframe + X = X.values + + # calculate pct_change + if is_price: + X = X[1:] / X[:-1] - 1 # NOTE: resulting `n - 1` rows + + # scale return + if self.scale_return: + X *= 100 + + # handle nan and centered + X = self._preprocess(X) + + if return_decomposed_components: + F, cov_b, var_u = self._predict(X, return_structured=True) + return F, cov_b, var_u + else: + # estimate covariance + S = self._predict(X) + + # return correlation if needed + if return_corr: + vola = np.sqrt(np.diag(S)) + corr = S / np.outer(vola, vola) + if columns is None: + return corr + return pd.DataFrame(corr, index=columns, columns=columns) + + # return covariance + if columns is None: + return S + return pd.DataFrame(S, index=columns, columns=columns) + + def _predict(self, X: np.ndarray, return_structured=False) -> Union[np.ndarray, tuple]: + """ + covariance estimation implementation + + Args: + X (np.ndarray): data matrix containing multiple variables (columns) and observations (rows). + return_structured (bool): whether return decomposed components of the covariance matrix. + + Returns: + tuple or np.ndarray: decomposed covariance matrix or covariance matrix. + """ + + model = self.solver(self.num_factors, random_state=0).fit(X) + + F = model.components_.T # num_features x num_factors + B = model.transform(X) # num_samples x num_factors + U = X - B @ F.T + cov_b = np.cov(B.T) # num_factors x num_factors + var_u = np.var(U, axis=0) # diagonal + + if return_structured: + return F, cov_b, var_u + + cov_x = F @ cov_b @ F.T + np.diag(var_u) + + return cov_x diff --git a/qlib/portfolio/enhanced_indexing.py b/qlib/portfolio/enhanced_indexing.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/qlib/model/riskmodel_shrink.py b/qlib/portfolio/optimizer/__init__.py similarity index 100% rename from qlib/model/riskmodel_shrink.py rename to qlib/portfolio/optimizer/__init__.py diff --git a/qlib/model/riskmodel_structured.py b/qlib/portfolio/optimizer/base.py similarity index 100% rename from qlib/model/riskmodel_structured.py rename to qlib/portfolio/optimizer/base.py diff --git a/qlib/portfolio/optimizer/enhanced_indexing.py b/qlib/portfolio/optimizer/enhanced_indexing.py new file mode 100644 index 000000000..d988c776b --- /dev/null +++ b/qlib/portfolio/optimizer/enhanced_indexing.py @@ -0,0 +1,140 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import numpy as np +import cvxpy as cp +import pandas as pd +from typing import Union + +from qlib.portfolio.optimizer import BaseOptimizer + + +class EnhancedIndexingOptimizer(BaseOptimizer): + """ + Portfolio Optimizer with Enhanced Indexing + + Note: + This optimizer always assumes full investment and no-shorting. + """ + + START_FROM_W0 = "w0" + START_FROM_BENCH = "benchmark" + DO_NOT_START_FROM = "no_warm_start" + + def __init__( + self, + lamb: float = 10, + delta: float = 0.4, + bench_dev: float = 0.01, + inds_dev: float = None, + scale_alpha: bool = True, + verbose: bool = False, + warm_start: str = DO_NOT_START_FROM, + max_iters: int = 10000, + ): + """ + Args: + lamb (float): risk aversion parameter (larger `lamb` means less focus on return) + delta (float): turnover rate limit + bench_dev (float): benchmark deviation limit + inds_dev (float/None): industry deviation limit, set `inds_dev` to None to ignore industry specific + restriction + scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix + verbose (bool): if print detailed information about the solver + warm_start (str): whether try to warm start (`w0`/`benchmark`/``) + (https://www.cvxpy.org/tutorial/advanced/index.html#warm-start) + """ + + assert lamb >= 0, "risk aversion parameter `lamb` should be positive" + self.lamb = lamb + + assert delta >= 0, "turnover limit `delta` should be positive" + self.delta = delta + + assert bench_dev >= 0, "benchmark deviation limit `bench_dev` should be positive" + self.bench_dev = bench_dev + + assert inds_dev is None or inds_dev >= 0, "industry deviation limit `inds_dev` should be positive or None." + self.inds_dev = inds_dev + + assert warm_start in [ + self.DO_NOT_START_FROM, + self.START_FROM_W0, + self.START_FROM_BENCH, + ], "illegal warm start option" + self.start_from_w0 = warm_start == self.START_FROM_W0 + self.start_from_bench = warm_start == self.START_FROM_BENCH + + self.scale_alpha = scale_alpha + self.verbose = verbose + self.max_iters = max_iters + + def __call__( + self, + u: np.ndarray, + F: np.ndarray, + covB: np.ndarray, + varU: np.ndarray, + w0: np.ndarray, + w_bench: np.ndarray, + inds_onehot: np.ndarray = None, + ) -> Union[np.ndarray, pd.Series]: + """ + Args: + u (np.ndarray): expected returns (a.k.a., alpha) + F, covB, varU (np.ndarray): see StructuredCovEstimator + w0 (np.ndarray): initial weights (for turnover control) + w_bench (np.ndarray): benchmark weights + inds_onehot (np.ndarray): industry (onehot) + + Returns: + np.ndarray or pd.Series: optimized portfolio allocation + """ + assert inds_onehot is not None or self.inds_dev is None, "Industry onehot vector is required." + + # scale alpha to match volatility + if self.scale_alpha: + u = u / u.std() + x_variance = np.mean(np.diag(F @ covB @ F.T) + varU) + u *= x_variance ** 0.5 + + w = cp.Variable(len(u)) # num_assets + v = w @ F # num_factors + ret = w @ u + risk = cp.quad_form(v, covB) + cp.sum(cp.multiply(varU, w ** 2)) + obj = cp.Maximize(ret - self.lamb * risk) + d_bench = w - w_bench + cons = [ + w >= 0, + cp.sum(w) == 1, + d_bench >= -self.bench_dev, + d_bench <= self.bench_dev, + ] + + if self.inds_dev is not None: + d_inds = d_bench @ inds_onehot + cons.append(d_inds >= -self.inds_dev) + cons.append(d_inds <= self.inds_dev) + + if w0 is not None: + turnover = cp.sum(cp.abs(w - w0)) + cons.append(turnover <= self.delta) + + warm_start = False + if self.start_from_w0: + if w0 is None: + print("Warning: try warm start with w0, but w0 is `None`.") + else: + w.value = w0 + warm_start = True + elif self.start_from_bench: + w.value = w_bench + warm_start = True + + prob = cp.Problem(obj, cons) + prob.solve(solver=cp.SCS, verbose=self.verbose, warm_start=warm_start, max_iters=self.max_iters) + + if prob.status != "optimal": + print("Warning: solve failed.", prob.status) + + return np.asarray(w.value) diff --git a/qlib/portfolio/optimizer.py b/qlib/portfolio/optimizer/optimizer.py similarity index 62% rename from qlib/portfolio/optimizer.py rename to qlib/portfolio/optimizer/optimizer.py index 6ee396a51..17a7fc30a 100644 --- a/qlib/portfolio/optimizer.py +++ b/qlib/portfolio/optimizer/optimizer.py @@ -4,11 +4,12 @@ import abc import warnings import numpy as np -import cvxpy as cp import pandas as pd import scipy.optimize as so from typing import Optional, Union, Callable, List +from qlib.portfolio.enhanced_indexing import EnhancedIndexingOptimizer + class BaseOptimizer(abc.ABC): """ Construct portfolio with a optimization related method """ @@ -38,13 +39,13 @@ class PortfolioOptimizer(BaseOptimizer): OPT_INV = "inv" def __init__( - self, - method: str = "inv", - lamb: float = 0, - delta: float = 0, - alpha: float = 0.0, - scale_alpha: bool = True, - tol: float = 1e-8, + self, + method: str = "inv", + lamb: float = 0, + delta: float = 0, + alpha: float = 0.0, + scale_alpha: bool = True, + tol: float = 1e-8, ): """ Args: @@ -71,10 +72,10 @@ class PortfolioOptimizer(BaseOptimizer): self.scale_alpha = scale_alpha def __call__( - self, - S: Union[np.ndarray, pd.DataFrame], - u: Optional[Union[np.ndarray, pd.Series]] = None, - w0: Optional[Union[np.ndarray, pd.Series]] = None, + self, + S: Union[np.ndarray, pd.DataFrame], + u: Optional[Union[np.ndarray, pd.Series]] = None, + w0: Optional[Union[np.ndarray, pd.Series]] = None, ) -> Union[np.ndarray, pd.Series]: """ Args: @@ -163,7 +164,7 @@ class PortfolioOptimizer(BaseOptimizer): return self._solve(len(S), self._get_objective_gmv(S), *self._get_constrains(w0)) def _optimize_mvo( - self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None + self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None ) -> np.ndarray: """optimize mean-variance portfolio @@ -259,7 +260,6 @@ class PortfolioOptimizer(BaseOptimizer): # add l2 regularization wrapped_obj = obj if self.alpha > 0: - def opt_obj(x): return obj(x) + self.alpha * np.sum(np.square(x)) @@ -272,134 +272,3 @@ class PortfolioOptimizer(BaseOptimizer): warnings.warn(f"optimization not success ({sol.status})") return sol.x - - -class EnhancedIndexingOptimizer(BaseOptimizer): - """ - Portfolio Optimizer with Enhanced Indexing - - Note: - This optimizer always assumes full investment and no-shorting. - """ - - START_FROM_W0 = "w0" - START_FROM_BENCH = "benchmark" - DO_NOT_START_FROM = "no_warm_start" - - def __init__( - self, - lamb: float = 10, - delta: float = 0.4, - bench_dev: float = 0.01, - inds_dev: float = None, - scale_alpha: bool = True, - verbose: bool = False, - warm_start: str = DO_NOT_START_FROM, - max_iters: int = 10000, - ): - """ - Args: - lamb (float): risk aversion parameter (larger `lamb` means less focus on return) - delta (float): turnover rate limit - bench_dev (float): benchmark deviation limit - inds_dev (float/None): industry deviation limit, set `inds_dev` to None to ignore industry specific - restriction - scale_alpha (bool): if to scale alpha to match the volatility of the covariance matrix - verbose (bool): if print detailed information about the solver - warm_start (str): whether try to warm start (`w0`/`benchmark`/``) - (https://www.cvxpy.org/tutorial/advanced/index.html#warm-start) - """ - - assert lamb >= 0, "risk aversion parameter `lamb` should be positive" - self.lamb = lamb - - assert delta >= 0, "turnover limit `delta` should be positive" - self.delta = delta - - assert bench_dev >= 0, "benchmark deviation limit `bench_dev` should be positive" - self.bench_dev = bench_dev - - assert inds_dev >= 0, "industry deviation limit `inds_dev` should be positive" - self.inds_dev = inds_dev - - assert warm_start in [ - self.DO_NOT_START_FROM, - self.START_FROM_W0, - self.START_FROM_BENCH, - ], "illegal warm start option" - self.start_from_w0 = warm_start == self.START_FROM_W0 - self.start_from_bench = warm_start == self.START_FROM_BENCH - - self.scale_alpha = scale_alpha - self.verbose = verbose - self.max_iters = max_iters - - def __call__( - self, - u: np.ndarray, - F: np.ndarray, - covB: np.ndarray, - varU: np.ndarray, - w0: np.ndarray, - w_bench: np.ndarray, - inds_onehot: np.ndarray = None, - ) -> Union[np.ndarray, pd.Series]: - """ - Args: - u (np.ndarray): expected returns (a.k.a., alpha) - F, covB, varU (np.ndarray): see StructuredCovEstimator - w0 (np.ndarray): initial weights (for turnover control) - w_bench (np.ndarray): benchmark weights - inds_onehot (np.ndarray): industry (onehot) - - Returns: - np.ndarray or pd.Series: optimized portfolio allocation - """ - assert inds_onehot is not None or self.inds_dev is None, "Industry onehot vector is required." - - # scale alpha to match volatility - if self.scale_alpha: - u = u / u.std() - x_variance = np.mean(np.diag(F @ covB @ F.T) + varU) - u *= x_variance ** 0.5 - - w = cp.Variable(len(u)) # num_assets - v = w @ F # num_factors - ret = w @ u - risk = cp.quad_form(v, covB) + cp.sum(cp.multiply(varU, w ** 2)) - obj = cp.Maximize(ret - self.lamb * risk) - d_bench = w - w_bench - cons = [ - w >= 0, - cp.sum(w) == 1, - d_bench >= -self.bench_dev, - d_bench <= self.bench_dev, - ] - - if self.inds_dev is not None: - d_inds = d_bench @ inds_onehot - cons.append(d_inds >= -self.inds_dev) - cons.append(d_inds <= self.inds_dev) - - if w0 is not None: - turnover = cp.sum(cp.abs(w - w0)) - cons.append(turnover <= self.delta) - - warm_start = False - if self.start_from_w0: - if w0 is None: - print("Warning: try warm start with w0, but w0 is `None`.") - else: - w.value = w0 - warm_start = True - elif self.start_from_bench: - w.value = w_bench - warm_start = True - - prob = cp.Problem(obj, cons) - prob.solve(solver=cp.SCS, verbose=self.verbose, warm_start=warm_start, max_iters=self.max_iters) - - if prob.status != "optimal": - print("Warning: solve failed.", prob.status) - - return np.asarray(w.value) diff --git a/tests/test_enhanced_indexing.py b/tests/test_enhanced_indexing.py deleted file mode 100644 index f21d51984..000000000 --- a/tests/test_enhanced_indexing.py +++ /dev/null @@ -1,282 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -import sys -import math -import shutil -import unittest -import numpy as np -import pandas as pd -from tqdm import tqdm -from pathlib import Path - -import qlib -from qlib.config import C -from qlib.utils import init_instance_by_config, flatten_dict -from qlib.workflow import R -from qlib.config import REG_CN -from qlib.workflow.record_temp import SignalRecord, SigAnaRecord -from qlib.tests import TestAutoData -from qlib.portfolio.optimizer import EnhancedIndexingOptimizer -from qlib.model.riskmodel import StructuredCovEstimator -from qlib.data.dataset.loader import QlibDataLoader -from qlib.data.dataset.handler import DataHandler -from qlib.data import D -from qlib.utils import exists_qlib_data, init_instance_by_config - -market = "all" -trade_gap = 21 -label_config = "Ref($close, -{}) / Ref($close, -1) - 1".format(trade_gap) # reconstruct portfolio once a month - -provider_uri = "~/.qlib_ei/qlib_data/cn_data" # target_dir -if not exists_qlib_data(provider_uri): - print(f"Qlib data is not found in {provider_uri}") - sys.path.append(str(Path.cwd().parent.joinpath("scripts"))) - from get_data import GetData - GetData().qlib_data(target_dir=provider_uri, region=REG_CN) -qlib.init(provider_uri=provider_uri, region=REG_CN) - -################################### -# train model -################################### -data_handler_config = { - "start_time": "2008-01-01", - "end_time": "2020-08-01", - "fit_start_time": "2008-01-01", - "fit_end_time": "2014-11-30", - "instruments": market, - "label": [label_config] -} - -task = { - "model": { - "class": "LGBModel", - "module_path": "qlib.contrib.model.gbdt", - "kwargs": { - "loss": "mse", - "colsample_bytree": 0.8879, - "learning_rate": 0.0421, - "subsample": 0.8789, - "lambda_l1": 205.6999, - "lambda_l2": 580.9768, - "max_depth": 8, - "num_leaves": 210, - "num_threads": 32, - }, - }, - "dataset": { - "class": "DatasetH", - "module_path": "qlib.data.dataset", - "kwargs": { - "handler": { - "class": "Alpha158", - "module_path": "qlib.contrib.data.handler", - "kwargs": data_handler_config, - }, - "segments": { - "train": ("2008-01-01", "2014-11-30"), - "valid": ("2015-01-01", "2016-11-30"), - "test": ("2017-01-01", "2018-01-01"), - }, - }, - }, -} - - -class CSI300: - """Simulate CSI300 as the Benchmark for Enhanced Indexing to Track""" - - def __init__(self): - # provider_uri = '/nfs_data/qlib_data/ycz_daily/qlib' - # qlib.init(provider_uri=provider_uri, region=REG_CN, dataset_cache=None, expression_cache=None) - self.csi_weight = D.features(D.instruments('csi300'), ['$csi300_weight']) - - def __call__(self, pd_index, trade_date): - weights = np.zeros(len(pd_index)) - - for idx, instrument in enumerate(pd_index): - if (instrument, trade_date) in self.csi_weight.index: - weight = self.csi_weight.loc[(instrument, trade_date)].values[0] - if not math.isnan(weight): - weights[idx] = weight - - assert weights.sum() > 0, ' Fetch CSI Weights Error!' - weights = weights / weights.sum() - - return weights - - -class EnhancedIndexingStrategy: - """Enhanced Indexing Strategy""" - - def __init__(self): - self.benchmark = CSI300() - - provider_uri = "~/.qlib_ei/qlib_data/cn_data" - qlib.init(provider_uri=provider_uri, region=REG_CN) - - self.data_handler = DataHandler(market, "2015-01-01", "2019-01-01", QlibDataLoader(["$close"])) - self.label_handler = DataHandler(market, "2015-01-01", "2019-01-01", QlibDataLoader([label_config])) - self.cov_estimator = StructuredCovEstimator() - self.optimizer = EnhancedIndexingOptimizer(lamb=0.1, delta=0.4, bench_dev=0.03, max_iters=50000) - - def update(self, score_series, current, pred_date): - """ - Parameters - ----------- - score_series : pd.Series - stock_id , score. - current : Position() - current of account. - trade_exchange : Exchange() - exchange. - trade_date : pd.Timestamp - date. - """ - print(score_series) - score_series = score_series.dropna() - - # portfolio init weight - init_weight = current.reindex(score_series.index, fill_value=0).values.squeeze() - init_weight_sum = init_weight.sum() - if init_weight_sum > 0: - init_weight /= init_weight_sum - - # covariance estimation - selector = (self.data_handler.get_range_selector(pred_date, 252), score_series.index) - price = self.data_handler.fetch(selector, level=None, squeeze=True) - F, cov_b, var_u = self.cov_estimator.predict(price, return_decomposed_components=True) - - # optimize target portfolio - w_bench = self.benchmark(score_series.index, pred_date) - passed_init_weight = init_weight if init_weight_sum > 0 else None - # print(F) - # print(cov_b) - # print(var_u) - # print(passed_init_weight) - # print(w_bench) - target_weight = self.optimizer(score_series.values, F, cov_b, var_u, passed_init_weight, w_bench) - # print(target_weight) - target = pd.DataFrame(data=target_weight, index=score_series.index) - - active_weights = target_weight - w_bench - selector = (self.label_handler.get_range_selector(pred_date, 1), score_series.index) - label = self.label_handler.fetch(selector, level=None, squeeze=True) - alpha = 0 - for instrument, weight in zip(score_series.index, active_weights): - delta = label.loc[(pred_date, instrument)] - alpha += weight * (0 if math.isnan(delta) else delta) - - print(alpha) - - return alpha, target - - -def train(): - """train model - - Returns - ------- - pred_score: pandas.DataFrame - predict scores - performance: dict - model performance - """ - - # model initiation - model = init_instance_by_config(task["model"]) - dataset = init_instance_by_config(task["dataset"]) - - # start exp - with R.start(experiment_name="workflow"): - R.log_params(**flatten_dict(task)) - model.fit(dataset) - - # prediction - recorder = R.get_recorder() - rid = recorder.id - sr = SignalRecord(model, dataset, recorder) - sr.generate() - pred_score = sr.load() - - # calculate ic and ric - sar = SigAnaRecord(recorder) - sar.generate() - ic = sar.load(sar.get_path("ic.pkl")) - ric = sar.load(sar.get_path("ric.pkl")) - - return pred_score, {"ic": ic, "ric": ric}, rid - - -def backtest_analysis(scores): - """backtest enhanced indexing - - Parameters - ---------- - scores: pandas.DataFrame - predict scores - - Returns - ------- - sharpe_ratio: floating-point - sharpe ratio of the enhanced indexing portfolio - """ - - # backtest and analysis - with R.start(experiment_name="backtest_analysis"): - strategy = EnhancedIndexingStrategy() - dates = scores.index.get_level_values(0).unique() - - alphas = [] - current = pd.DataFrame() - gap_between_next_trade = 0 - for date in tqdm(dates): - if gap_between_next_trade == 0: - score_series = scores.loc[date] - alpha, current = strategy.update(score_series, current, date) - alphas.append(alpha) - gap_between_next_trade = trade_gap - else: - gap_between_next_trade -= 1 - - alphas = np.array(alphas) - sharpe_ratio = alphas.mean() / np.std(alphas) - print('Sharpe:', sharpe_ratio) - - return sharpe_ratio - - -class TestAllFlow(TestAutoData): - PRED_SCORE = None - REPORT_NORMAL = None - POSITIONS = None - RID = None - - @classmethod - def tearDownClass(cls) -> None: - shutil.rmtree(str(Path(C["exp_manager"]["kwargs"]["uri"].strip("file:")).resolve())) - - def test_0_train(self): - TestAllFlow.PRED_SCORE, ic_ric, TestAllFlow.RID = train() - self.assertGreaterEqual(ic_ric["ic"].all(), 0, "train failed") - self.assertGreaterEqual(ic_ric["ric"].all(), 0, "train failed") - - def test_1_backtest(self): - sharpe_ratio = backtest_analysis(TestAllFlow.PRED_SCORE) - self.assertGreaterEqual( - sharpe_ratio, - 0.90, - "backtest failed", - ) - - -def suite(): - _suite = unittest.TestSuite() - _suite.addTest(TestAllFlow("test_0_train")) - _suite.addTest(TestAllFlow("test_1_backtest")) - return _suite - - -if __name__ == "__main__": - runner = unittest.TextTestRunner() - runner.run(suite()) From 0f3e3d206b51300b953e06674104af2ae23dc786 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Thu, 4 Mar 2021 22:47:42 +0800 Subject: [PATCH 049/134] Update __init__.py. --- qlib/model/riskmodel/__init__.py | 7 +++++++ qlib/model/riskmodel/base.py | 4 ---- qlib/portfolio/__init__.py | 2 ++ qlib/portfolio/optimizer/__init__.py | 6 ++++++ qlib/portfolio/optimizer/base.py | 13 +++++++++++++ qlib/portfolio/optimizer/optimizer.py | 13 ++----------- 6 files changed, 30 insertions(+), 15 deletions(-) diff --git a/qlib/model/riskmodel/__init__.py b/qlib/model/riskmodel/__init__.py index e69de29bb..05af6b7d3 100644 --- a/qlib/model/riskmodel/__init__.py +++ b/qlib/model/riskmodel/__init__.py @@ -0,0 +1,7 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from .base import RiskModel +from .poet import POETCovEstimator +from .shrink import ShrinkCovEstimator +from .structured import StructuredCovEstimator diff --git a/qlib/model/riskmodel/base.py b/qlib/model/riskmodel/base.py index d5b009ccc..02ab8c2fb 100644 --- a/qlib/model/riskmodel/base.py +++ b/qlib/model/riskmodel/base.py @@ -7,10 +7,6 @@ from typing import Union from qlib.model.base import BaseModel -from qlib.model.riskmodel_poet import POETCovEstimator -from qlib.model.riskmodel_shrink import ShrinkCovEstimator -from qlib.model.riskmodel_structured import StructuredCovEstimator - class RiskModel(BaseModel): """Risk Model diff --git a/qlib/portfolio/__init__.py b/qlib/portfolio/__init__.py index e69de29bb..139597f9c 100644 --- a/qlib/portfolio/__init__.py +++ b/qlib/portfolio/__init__.py @@ -0,0 +1,2 @@ + + diff --git a/qlib/portfolio/optimizer/__init__.py b/qlib/portfolio/optimizer/__init__.py index e69de29bb..5080b9a46 100644 --- a/qlib/portfolio/optimizer/__init__.py +++ b/qlib/portfolio/optimizer/__init__.py @@ -0,0 +1,6 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +from .base import BaseOptimizer +from .optimizer import PortfolioOptimizer +from .enhanced_indexing import EnhancedIndexingOptimizer diff --git a/qlib/portfolio/optimizer/base.py b/qlib/portfolio/optimizer/base.py index e69de29bb..502443869 100644 --- a/qlib/portfolio/optimizer/base.py +++ b/qlib/portfolio/optimizer/base.py @@ -0,0 +1,13 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import abc + + +class BaseOptimizer(abc.ABC): + """ Construct portfolio with a optimization related method """ + + @abc.abstractmethod + def __call__(self, *args, **kwargs) -> object: + """ Generate a optimized portfolio allocation """ + pass diff --git a/qlib/portfolio/optimizer/optimizer.py b/qlib/portfolio/optimizer/optimizer.py index 17a7fc30a..3daa98af3 100644 --- a/qlib/portfolio/optimizer/optimizer.py +++ b/qlib/portfolio/optimizer/optimizer.py @@ -1,23 +1,14 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -import abc + import warnings import numpy as np import pandas as pd import scipy.optimize as so from typing import Optional, Union, Callable, List -from qlib.portfolio.enhanced_indexing import EnhancedIndexingOptimizer - - -class BaseOptimizer(abc.ABC): - """ Construct portfolio with a optimization related method """ - - @abc.abstractmethod - def __call__(self, *args, **kwargs) -> object: - """ Generate a optimized portfolio allocation """ - pass +from qlib.portfolio.optimizer import BaseOptimizer class PortfolioOptimizer(BaseOptimizer): From c4d6e00470e7cb1e962c56e971a6bfe5874ffadc Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 4 Mar 2021 21:04:01 -0800 Subject: [PATCH 050/134] Fix logic of uri in ExpM and add test --- qlib/data/ops.py | 2 +- qlib/workflow/__init__.py | 6 +++--- qlib/workflow/exp.py | 15 +++++++-------- qlib/workflow/expm.py | 28 +++++++++++++++++----------- qlib/workflow/recorder.py | 2 +- tests/test_all_pipeline.py | 31 +++++++++++++++++++++++++++++-- 6 files changed, 58 insertions(+), 26 deletions(-) diff --git a/qlib/data/ops.py b/qlib/data/ops.py index 940c24002..9307fdafa 100644 --- a/qlib/data/ops.py +++ b/qlib/data/ops.py @@ -1489,7 +1489,7 @@ OpsList = [ ] -class OpsWrapper(object): +class OpsWrapper: """Ops Wrapper""" def __init__(self): diff --git a/qlib/workflow/__init__.py b/qlib/workflow/__init__.py index c6bf0c86c..7bff505ce 100644 --- a/qlib/workflow/__init__.py +++ b/qlib/workflow/__init__.py @@ -39,8 +39,8 @@ class QlibRecorder: name of the recorder under the experiment one wants to start. uri : str The tracking uri of the experiment, where all the artifacts/metrics etc. will be stored. - The default uri are set in the qlib.config. Note that this uri argument will not change the one defined in the config file. - Therefore, the next time when user call this function in the same experiment, + The default uri is set in the qlib.config. Note that this uri argument will not change the one defined in the config file. + Therefore, the next time when users call this function in the same experiment, they have to also specify this argument with the same value. Otherwise, inconsistent uri may occur. """ run = self.start_exp(experiment_name, recorder_name, uri) @@ -280,7 +280,7 @@ class QlibRecorder: ------- The uri of current experiment manager. """ - return self.exp_manager.get_uri() + return self.exp_manager.uri def get_recorder(self, recorder_id=None, recorder_name=None, experiment_name=None): """ diff --git a/qlib/workflow/exp.py b/qlib/workflow/exp.py index 15bb7604c..18b0a143d 100644 --- a/qlib/workflow/exp.py +++ b/qlib/workflow/exp.py @@ -11,7 +11,7 @@ from ..log import get_module_logger logger = get_module_logger("workflow", "INFO") -class Experiment(object): +class Experiment: """ This is the `Experiment` class for each experiment being run. The API is designed similar to mlflow. (The link: https://mlflow.org/docs/latest/python_api/mlflow.html) @@ -173,7 +173,7 @@ class MLflowExperiment(Experiment): self._uri = uri self._default_name = None self._default_rec_name = "mlflow_recorder" - self.client = mlflow.tracking.MlflowClient(tracking_uri=self._uri) + self._client = mlflow.tracking.MlflowClient(tracking_uri=self._uri) def start(self, recorder_name=None): logger.info(f"Experiment {self.id} starts running ...") @@ -208,7 +208,6 @@ class MLflowExperiment(Experiment): else: recorder, is_new = self._get_recorder(recorder_id=recorder_id, recorder_name=recorder_name), False if is_new: - mlflow.set_experiment(self.name) self.active_recorder = recorder # start the recorder self.active_recorder.start_run() @@ -237,7 +236,7 @@ class MLflowExperiment(Experiment): ), "Please input at least one of recorder id or name before retrieving recorder." if recorder_id is not None: try: - run = self.client.get_run(recorder_id) + run = self._client.get_run(recorder_id) recorder = MLflowRecorder(self.id, self._uri, mlflow_run=run) return recorder except MlflowException: @@ -258,7 +257,7 @@ class MLflowExperiment(Experiment): max_results = 100000 if kwargs.get("max_results") is None else kwargs.get("max_results") order_by = kwargs.get("order_by") - return self.client.search_runs([self.id], filter_string, run_view_type, max_results, order_by) + return self._client.search_runs([self.id], filter_string, run_view_type, max_results, order_by) def delete_recorder(self, recorder_id=None, recorder_name=None): assert ( @@ -266,10 +265,10 @@ class MLflowExperiment(Experiment): ), "Please input a valid recorder id or name before deleting." try: if recorder_id is not None: - self.client.delete_run(recorder_id) + self._client.delete_run(recorder_id) else: recorder = self._get_recorder(recorder_name=recorder_name) - self.client.delete_run(recorder.id) + self._client.delete_run(recorder.id) except MlflowException as e: raise Exception( f"Error: {e}. Something went wrong when deleting recorder. Please check if the name/id of the recorder is correct." @@ -278,7 +277,7 @@ class MLflowExperiment(Experiment): UNLIMITED = 50000 # FIXME: Mlflow can only list 50000 records at most!!!!!!! def list_recorders(self, max_results=UNLIMITED): - runs = self.client.search_runs(self.id, run_view_type=ViewType.ACTIVE_ONLY, max_results=max_results)[::-1] + runs = self._client.search_runs(self.id, run_view_type=ViewType.ACTIVE_ONLY, max_results=max_results)[::-1] recorders = dict() for i in range(len(runs)): recorder = MLflowRecorder(self.id, self._uri, mlflow_run=runs[i]) diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index 541507a73..82265b585 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -14,19 +14,20 @@ from ..log import get_module_logger logger = get_module_logger("workflow", "INFO") -class ExpManager(object): +class ExpManager: """ This is the `ExpManager` class for managing experiments. The API is designed similar to mlflow. (The link: https://mlflow.org/docs/latest/python_api/mlflow.html) """ def __init__(self, uri, default_exp_name): - self.uri = uri + self._default_uri = uri + self._current_uri = None self.default_exp_name = default_exp_name self.active_experiment = None # only one experiment can active each time def __repr__(self): - return "{name}(uri={uri})".format(name=self.__class__.__name__, uri=self.uri) + return "{name}(default_uri={duri}, current_uri={curi})".format(name=self.__class__.__name__, duri=self._default_uri, curi=self._current_uri) def start_exp(self, experiment_name=None, recorder_name=None, uri=None, **kwargs): """ @@ -206,7 +207,8 @@ class ExpManager(object): """ raise NotImplementedError(f"Please implement the `delete_exp` method.") - def get_uri(self): + @property + def uri(self): """ Get the default tracking URI or current URI. @@ -214,7 +216,7 @@ class ExpManager(object): ------- The tracking URI string. """ - return self.uri + return self._current_uri or self._default_uri def list_experiments(self): """ @@ -234,25 +236,27 @@ class MLflowExpManager(ExpManager): def __init__(self, uri, default_exp_name): super(MLflowExpManager, self).__init__(uri, default_exp_name) + self._client = None @property def client(self): # Delay the creation of mlflow client in case of creating `mlruns` folder when importing qlib - if not hasattr(self, "_client"): + if self._client is None: self._client = mlflow.tracking.MlflowClient(tracking_uri=self.uri) return self._client def start_exp(self, experiment_name=None, recorder_name=None, uri=None): - # set the tracking uri + # Set the tracking uri if uri is None: logger.info("No tracking URI is provided. Use the default tracking URI.") else: - self.uri = uri - # create experiment + # Temporarily re-set the current uri as the uri argument. + self._current_uri = uri + # Create experiment experiment, _ = self._get_or_create_exp(experiment_name=experiment_name) - # set up active experiment + # Set up active experiment self.active_experiment = experiment - # start the experiment + # Start the experiment self.active_experiment.start(recorder_name) return self.active_experiment @@ -261,6 +265,8 @@ class MLflowExpManager(ExpManager): if self.active_experiment is not None: self.active_experiment.end(recorder_status) self.active_experiment = None + # When an experiment end, we will release the current uri. + self._current_uri = None def create_exp(self, experiment_name=None): assert experiment_name is not None diff --git a/qlib/workflow/recorder.py b/qlib/workflow/recorder.py index 31077176d..e75ae347b 100644 --- a/qlib/workflow/recorder.py +++ b/qlib/workflow/recorder.py @@ -11,7 +11,7 @@ from ..log import get_module_logger logger = get_module_logger("workflow", "INFO") -class Recorder(object): +class Recorder: """ This is the `Recorder` class for logging the experiments. The API is designed similar to mlflow. (The link: https://mlflow.org/docs/latest/python_api/mlflow.html) diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py index 97f3f986a..a75eada75 100644 --- a/tests/test_all_pipeline.py +++ b/tests/test_all_pipeline.py @@ -96,7 +96,6 @@ port_analysis_config = { } -# train def train(): """train model @@ -110,8 +109,8 @@ def train(): # model initiaiton model = init_instance_by_config(task["model"]) - print(model) dataset = init_instance_by_config(task["dataset"]) + # To test __repr__ print(dataset) print(R) @@ -122,6 +121,7 @@ def train(): # prediction recorder = R.get_recorder() + # To test __repr__ print(recorder) rid = recorder.id sr = SignalRecord(model, dataset, recorder) @@ -137,6 +137,27 @@ def train(): return pred_score, {"ic": ic, "ric": ric}, rid +def fake_experiment(): + """A fake experiment workflow to test uri + + Returns + ------- + pass_or_not_for_default_uri: bool + pass_or_not_for_current_uri: bool + temporary_exp_dir: str + """ + + # start exp + default_uri = R.get_uri() + current_uri = 'file:./temp-test-exp-mag' + with R.start(experiment_name="fake_workflow_for_expm", uri=current_uri): + R.log_params(**flatten_dict(task)) + + current_uri_to_check = R.get_uri() + default_uri_to_check = R.get_uri() + return default_uri == default_uri_to_check, current_uri == current_uri_to_check, current_uri + + def backtest_analysis(pred, rid): """backtest and analysis @@ -185,6 +206,12 @@ class TestAllFlow(TestAutoData): "backtest failed", ) + def test_2_expmanager(self): + pass_default, pass_current, uri_path = fake_experiment() + self.assertTrue(pass_default, msg='default uri is incorrect') + self.assertTrue(pass_current, msg='current uri is incorrect') + shutil.rmtree(str(Path(uri_path.strip("file:")).resolve())) + def suite(): _suite = unittest.TestSuite() From 452fb8f013904a0f119771da7dc37b4d083201b4 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 4 Mar 2021 22:33:35 -0800 Subject: [PATCH 051/134] Make mlflow client consistant with uri --- qlib/workflow/expm.py | 66 +++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 15 deletions(-) diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index 82265b585..362b1a82b 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -7,8 +7,10 @@ from mlflow.entities import ViewType import os from pathlib import Path from contextlib import contextmanager +from typing import Optional, Text + from .exp import MLflowExperiment, Experiment -from .recorder import Recorder, MLflowRecorder +from .recorder import Recorder from ..log import get_module_logger logger = get_module_logger("workflow", "INFO") @@ -20,16 +22,24 @@ class ExpManager: (The link: https://mlflow.org/docs/latest/python_api/mlflow.html) """ - def __init__(self, uri, default_exp_name): + def __init__(self, uri: Text, default_exp_name: Optional[Text]): self._default_uri = uri self._current_uri = None self.default_exp_name = default_exp_name self.active_experiment = None # only one experiment can active each time def __repr__(self): - return "{name}(default_uri={duri}, current_uri={curi})".format(name=self.__class__.__name__, duri=self._default_uri, curi=self._current_uri) + return "{name}(default_uri={duri}, current_uri={curi})".format( + name=self.__class__.__name__, duri=self._default_uri, curi=self._current_uri + ) - def start_exp(self, experiment_name=None, recorder_name=None, uri=None, **kwargs): + def start_exp( + self, + experiment_name: Optional[Text] = None, + recorder_name: Optional[Text] = None, + uri: Optional[Text] = None, + **kwargs, + ): """ Start an experiment. This method includes first get_or_create an experiment, and then set it to be active. @@ -49,7 +59,7 @@ class ExpManager: """ raise NotImplementedError(f"Please implement the `start_exp` method.") - def end_exp(self, recorder_status: str = Recorder.STATUS_S, **kwargs): + def end_exp(self, recorder_status: Text = Recorder.STATUS_S, **kwargs): """ End an active experiment. @@ -62,7 +72,7 @@ class ExpManager: """ raise NotImplementedError(f"Please implement the `end_exp` method.") - def create_exp(self, experiment_name=None): + def create_exp(self, experiment_name: Optional[Text] = None): """ Create an experiment. @@ -218,6 +228,30 @@ class ExpManager: """ return self._current_uri or self._default_uri + def set_uri(self, uri: Optional[Text] = None): + """ + Set the current tracking URI and the corresponding variables. + + Parameters + ---------- + uri : str + + """ + if uri is None: + logger.info("No tracking URI is provided. Use the default tracking URI.") + self._current_uri = self._default_uri + else: + # Temporarily re-set the current uri as the uri argument. + self._current_uri = uri + # Customized features for subclasses. + self._set_uri() + + def _set_uri(self): + """ + Customized features for subclasses' set_uri function. + """ + raise NotImplementedError(f"Please implement the `_set_uri` method.") + def list_experiments(self): """ List all the existing experiments. @@ -234,10 +268,14 @@ class MLflowExpManager(ExpManager): Use mlflow to implement ExpManager. """ - def __init__(self, uri, default_exp_name): + def __init__(self, uri: Text, default_exp_name: Optional[Text]): super(MLflowExpManager, self).__init__(uri, default_exp_name) self._client = None + def _set_uri(self): + self._client = mlflow.tracking.MlflowClient(tracking_uri=self.uri) + logger.info('{:}'.format(self._client)) + @property def client(self): # Delay the creation of mlflow client in case of creating `mlruns` folder when importing qlib @@ -245,13 +283,11 @@ class MLflowExpManager(ExpManager): self._client = mlflow.tracking.MlflowClient(tracking_uri=self.uri) return self._client - def start_exp(self, experiment_name=None, recorder_name=None, uri=None): + def start_exp( + self, experiment_name: Optional[Text] = None, recorder_name: Optional[Text] = None, uri: Optional[Text] = None + ): # Set the tracking uri - if uri is None: - logger.info("No tracking URI is provided. Use the default tracking URI.") - else: - # Temporarily re-set the current uri as the uri argument. - self._current_uri = uri + self.set_uri(uri) # Create experiment experiment, _ = self._get_or_create_exp(experiment_name=experiment_name) # Set up active experiment @@ -261,14 +297,14 @@ class MLflowExpManager(ExpManager): return self.active_experiment - def end_exp(self, recorder_status: str = Recorder.STATUS_S): + def end_exp(self, recorder_status: Text = Recorder.STATUS_S): if self.active_experiment is not None: self.active_experiment.end(recorder_status) self.active_experiment = None # When an experiment end, we will release the current uri. self._current_uri = None - def create_exp(self, experiment_name=None): + def create_exp(self, experiment_name: Optional[Text] = None): assert experiment_name is not None # init experiment experiment_id = self.client.create_experiment(experiment_name) From e327f404e33c7fc12f7c2fb43dd383b5d9dcaba4 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 4 Mar 2021 22:37:58 -0800 Subject: [PATCH 052/134] Fix pylint issues --- qlib/workflow/expm.py | 2 +- tests/test_all_pipeline.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index 362b1a82b..4ba72a634 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -274,7 +274,7 @@ class MLflowExpManager(ExpManager): def _set_uri(self): self._client = mlflow.tracking.MlflowClient(tracking_uri=self.uri) - logger.info('{:}'.format(self._client)) + logger.info("{:}".format(self._client)) @property def client(self): diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py index a75eada75..d9d684697 100644 --- a/tests/test_all_pipeline.py +++ b/tests/test_all_pipeline.py @@ -149,10 +149,10 @@ def fake_experiment(): # start exp default_uri = R.get_uri() - current_uri = 'file:./temp-test-exp-mag' + current_uri = "file:./temp-test-exp-mag" with R.start(experiment_name="fake_workflow_for_expm", uri=current_uri): R.log_params(**flatten_dict(task)) - + current_uri_to_check = R.get_uri() default_uri_to_check = R.get_uri() return default_uri == default_uri_to_check, current_uri == current_uri_to_check, current_uri @@ -208,8 +208,8 @@ class TestAllFlow(TestAutoData): def test_2_expmanager(self): pass_default, pass_current, uri_path = fake_experiment() - self.assertTrue(pass_default, msg='default uri is incorrect') - self.assertTrue(pass_current, msg='current uri is incorrect') + self.assertTrue(pass_default, msg="default uri is incorrect") + self.assertTrue(pass_current, msg="current uri is incorrect") shutil.rmtree(str(Path(uri_path.strip("file:")).resolve())) From 19d93744f3678881a29e110a3b2b4ea48b070fee Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Fri, 5 Mar 2021 07:15:25 +0000 Subject: [PATCH 053/134] Add set_log_basic_config function support re-directing log stream --- qlib/config.py | 8 +++---- qlib/log.py | 31 +++++++++++++++++++++------ qlib/workflow/recorder.py | 45 +++++++++++++++++++++++++++++++++------ 3 files changed, 66 insertions(+), 18 deletions(-) diff --git a/qlib/config.py b/qlib/config.py index 52b05568d..75ab0fa3e 100644 --- a/qlib/config.py +++ b/qlib/config.py @@ -105,7 +105,7 @@ _default_config = { "redis_port": 6379, "redis_task_db": 1, # This value can be reset via qlib.init - "logging_level": "INFO", + "logging_level": logging.INFO, # Global configuration of qlib log # logging_level can control the logging level more finely "logging_config": { @@ -124,12 +124,12 @@ _default_config = { "handlers": { "console": { "class": "logging.StreamHandler", - "level": "DEBUG", + "level": logging.DEBUG, "formatter": "logger_format", "filters": ["field_not_found"], } }, - "loggers": {"qlib": {"level": "DEBUG", "handlers": ["console"]}}, + "loggers": {"qlib": {"level": logging.DEBUG, "handlers": ["console"]}}, }, # Defatult config for experiment manager "exp_manager": { @@ -185,7 +185,7 @@ MODE_CONF = { # The nfs should be auto-mounted by qlib on other # serversS(such as PAI) [auto_mount:True] "timeout": 100, - "logging_level": "INFO", + "logging_level": logging.INFO, "region": REG_CN, ## Custom Operator "custom_ops": [], diff --git a/qlib/log.py b/qlib/log.py index 6553dcb11..78f12eb09 100644 --- a/qlib/log.py +++ b/qlib/log.py @@ -3,8 +3,7 @@ import logging -import logging.handlers -import os +from typing import Optional, Text, Dict, Any import re from logging import config as logging_config from time import time @@ -13,16 +12,13 @@ from contextlib import contextmanager from .config import C -def get_module_logger(module_name, level=None): +def get_module_logger(module_name, level: Optional[int] = None): """ Get a logger for a specific module. :param module_name: str Logic module name. :param level: int - :param sh_level: int - Stream handler log level. - :param log_format: str :return: Logger Logger object. """ @@ -103,7 +99,7 @@ class TimeInspector: cls.log_cost_time(info=f"{name} Done") -def set_log_with_config(log_config: dict): +def set_log_with_config(log_config: Dict[Text, Any]): """set log with config :param log_config: @@ -112,6 +108,27 @@ def set_log_with_config(log_config: dict): logging_config.dictConfig(log_config) +def set_log_basic_config(filename: Optional[Text] = None, format: Optional[Text] = None, level: Optional[int] = None): + """ + Set the basic configuration for the logging system. + See details at https://docs.python.org/3/library/logging.html#logging.basicConfig + + :param filename: str or None + The path to save the logs. + :param format: the logging format + :param level: int + :return: Logger + Logger object. + """ + if level is None: + level = C.logging_level + + if format is None: + format = C.logging_config["formatters"]["logger_format"]["format"] + + logging.basicConfig(filename=filename, format=format, level=level) + + class LogFilter(logging.Filter): def __init__(self, param=None): self.param = param diff --git a/qlib/workflow/recorder.py b/qlib/workflow/recorder.py index 31077176d..519b69710 100644 --- a/qlib/workflow/recorder.py +++ b/qlib/workflow/recorder.py @@ -11,7 +11,7 @@ from ..log import get_module_logger logger = get_module_logger("workflow", "INFO") -class Recorder(object): +class Recorder: """ This is the `Recorder` class for logging the experiments. The API is designed similar to mlflow. (The link: https://mlflow.org/docs/latest/python_api/mlflow.html) @@ -201,7 +201,7 @@ class MLflowRecorder(Recorder): def __init__(self, experiment_id, uri, name=None, mlflow_run=None): super(MLflowRecorder, self).__init__(experiment_id, name) self._uri = uri - self.artifact_uri = None + self._artifact_uri = None self.client = mlflow.tracking.MlflowClient(tracking_uri=self._uri) # construct from mlflow run if mlflow_run is not None: @@ -220,14 +220,45 @@ class MLflowRecorder(Recorder): else None ) + def __repr__(self): + name = self.__class__.__name__ + space_length = len(name) + 1 + return "{name}(info={info},\n{space}uri={uri},\n{space}artifact_uri={artifact_uri},\n{space}client={client})".format( + name=name, + space=" " * space_length, + info=self.info, + uri=self.uri, + artifact_uri=self.artifact_uri, + client=self.client, + ) + + @property + def uri(self): + return self._uri + + @property + def artifact_uri(self): + return self._artifact_uri + + @property + def root_uri(self): + start_str = "file:" + if self.artifact_uri is not None: + xpath = self.artifact_uri.strip(start_str) + return (Path(xpath) / "..").resolve() + else: + raise Exception( + "Please make sure the recorder has been created and started properly before getting artifact uri." + ) + def start_run(self): # set the tracking uri - mlflow.set_tracking_uri(self._uri) + mlflow.set_tracking_uri(self.uri) # start the run run = mlflow.start_run(self.id, self.experiment_id, self.name) # save the run id and artifact_uri self.id = run.info.run_id - self.artifact_uri = run.info.artifact_uri + self._artifact_uri = run.info.artifact_uri self.start_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.status = Recorder.STATUS_R logger.info(f"Recorder {self.id} starts running under Experiment {self.experiment_id} ...") @@ -247,7 +278,7 @@ class MLflowRecorder(Recorder): self.status = status def save_objects(self, local_path=None, artifact_path=None, **kwargs): - assert self._uri is not None, "Please start the experiment and recorder first before using recorder directly." + assert self.uri is not None, "Please start the experiment and recorder first before using recorder directly." if local_path is not None: self.client.log_artifacts(self.id, local_path, artifact_path) else: @@ -259,7 +290,7 @@ class MLflowRecorder(Recorder): shutil.rmtree(temp_dir) def load_object(self, name): - assert self._uri is not None, "Please start the experiment and recorder first before using recorder directly." + assert self.uri is not None, "Please start the experiment and recorder first before using recorder directly." path = self.client.download_artifacts(self.id, name) with Path(path).open("rb") as f: return pickle.load(f) @@ -289,7 +320,7 @@ class MLflowRecorder(Recorder): ) def list_artifacts(self, artifact_path=None): - assert self._uri is not None, "Please start the experiment and recorder first before using recorder directly." + assert self.uri is not None, "Please start the experiment and recorder first before using recorder directly." artifacts = self.client.list_artifacts(self.id, artifact_path) return [art.path for art in artifacts] From 131f0e2e676fb6368d9e76d05be4d17a3512741b Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Fri, 5 Mar 2021 12:07:43 +0000 Subject: [PATCH 054/134] Add count_parameters for pytorch models in contrib --- qlib/contrib/model/pytorch_alstm.py | 10 +++++++--- qlib/contrib/model/pytorch_alstm_ts.py | 6 +++--- qlib/contrib/model/pytorch_gru.py | 6 +++++- qlib/contrib/model/pytorch_gru_ts.py | 8 ++++++-- qlib/contrib/model/pytorch_lstm.py | 2 +- qlib/contrib/model/pytorch_lstm_ts.py | 2 +- qlib/contrib/model/pytorch_nn.py | 6 +++--- qlib/contrib/model/pytorch_utils.py | 21 +++++++++++++++++++++ 8 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 qlib/contrib/model/pytorch_utils.py diff --git a/qlib/contrib/model/pytorch_alstm.py b/qlib/contrib/model/pytorch_alstm.py index bbbb61851..6df996e11 100644 --- a/qlib/contrib/model/pytorch_alstm.py +++ b/qlib/contrib/model/pytorch_alstm.py @@ -23,6 +23,7 @@ import torch import torch.nn as nn import torch.optim as optim +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH from ...data.dataset.handler import DataHandlerLP @@ -39,8 +40,8 @@ class ALSTM(Model): the evaluate metric used in early stop optimizer : str optimizer name - GPU : str - the GPU ID(s) used for training + GPU : int + the GPU ID used for training """ def __init__( @@ -76,7 +77,7 @@ class ALSTM(Model): self.early_stop = early_stop self.optimizer = optimizer.lower() self.loss = loss - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.use_gpu = torch.cuda.is_available() self.seed = seed @@ -123,6 +124,9 @@ class ALSTM(Model): num_layers=self.num_layers, dropout=self.dropout, ) + self.logger.info("model:\n{:}".format(self.ALSTM_model)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.ALSTM_model))) + if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) elif optimizer.lower() == "gd": diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 725568de8..c8854e8d3 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -40,8 +40,8 @@ class ALSTM(Model): the evaluate metric used in early stop optimizer : str optimizer name - GPU : str - the GPU ID(s) used for training + GPU : int + the GPU ID used for training """ def __init__( @@ -78,7 +78,7 @@ class ALSTM(Model): self.early_stop = early_stop self.optimizer = optimizer.lower() self.loss = loss - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.n_jobs = n_jobs self.use_gpu = torch.cuda.is_available() self.seed = seed diff --git a/qlib/contrib/model/pytorch_gru.py b/qlib/contrib/model/pytorch_gru.py index 84f863b9f..720e6b4f1 100755 --- a/qlib/contrib/model/pytorch_gru.py +++ b/qlib/contrib/model/pytorch_gru.py @@ -23,6 +23,7 @@ import torch import torch.nn as nn import torch.optim as optim +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH from ...data.dataset.handler import DataHandlerLP @@ -76,7 +77,7 @@ class GRU(Model): self.early_stop = early_stop self.optimizer = optimizer.lower() self.loss = loss - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.use_gpu = torch.cuda.is_available() self.seed = seed @@ -123,6 +124,9 @@ class GRU(Model): num_layers=self.num_layers, dropout=self.dropout, ) + self.logger.info("model:\n{:}".format(self.gru_model)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.gru_model))) + if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.gru_model.parameters(), lr=self.lr) elif optimizer.lower() == "gd": diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index bb6618b85..cbf1c1add 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -24,6 +24,7 @@ import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH, TSDatasetH from ...data.dataset.handler import DataHandlerLP @@ -78,7 +79,7 @@ class GRU(Model): self.early_stop = early_stop self.optimizer = optimizer.lower() self.loss = loss - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.n_jobs = n_jobs self.use_gpu = torch.cuda.is_available() self.seed = seed @@ -127,7 +128,10 @@ class GRU(Model): hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, - ).to(self.device) + ) + self.logger.info("model:\n{:}".format(self.gru_model)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.gru_model))) + if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.GRU_model.parameters(), lr=self.lr) elif optimizer.lower() == "gd": diff --git a/qlib/contrib/model/pytorch_lstm.py b/qlib/contrib/model/pytorch_lstm.py index 163d500ec..61e372425 100755 --- a/qlib/contrib/model/pytorch_lstm.py +++ b/qlib/contrib/model/pytorch_lstm.py @@ -76,7 +76,7 @@ class LSTM(Model): self.early_stop = early_stop self.optimizer = optimizer.lower() self.loss = loss - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.use_gpu = torch.cuda.is_available() self.seed = seed diff --git a/qlib/contrib/model/pytorch_lstm_ts.py b/qlib/contrib/model/pytorch_lstm_ts.py index cf4f8fb9f..44d136676 100755 --- a/qlib/contrib/model/pytorch_lstm_ts.py +++ b/qlib/contrib/model/pytorch_lstm_ts.py @@ -78,7 +78,7 @@ class LSTM(Model): self.early_stop = early_stop self.optimizer = optimizer.lower() self.loss = loss - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.n_jobs = n_jobs self.use_gpu = torch.cuda.is_available() self.seed = seed diff --git a/qlib/contrib/model/pytorch_nn.py b/qlib/contrib/model/pytorch_nn.py index 16fcea9ff..f8b0b7748 100644 --- a/qlib/contrib/model/pytorch_nn.py +++ b/qlib/contrib/model/pytorch_nn.py @@ -42,8 +42,8 @@ class DNNModelPytorch(Model): learning rate decay steps optimizer : str optimizer name - GPU : str - the GPU ID(s) used for training + GPU : int + the GPU ID used for training """ def __init__( @@ -80,7 +80,7 @@ class DNNModelPytorch(Model): self.lr_decay_steps = lr_decay_steps self.optimizer = optimizer.lower() self.loss_type = loss - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.use_GPU = torch.cuda.is_available() self.seed = seed self.weight_decay = weight_decay diff --git a/qlib/contrib/model/pytorch_utils.py b/qlib/contrib/model/pytorch_utils.py new file mode 100644 index 000000000..532969eb5 --- /dev/null +++ b/qlib/contrib/model/pytorch_utils.py @@ -0,0 +1,21 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +import numpy as np +import torch.nn as nn + + +def count_parameters(model_or_parameters, unit="mb"): + if isinstance(model_or_parameters, nn.Module): + counts = np.sum(np.prod(v.size()) for v in model_or_parameters.parameters()) + else: + counts = np.sum(np.prod(v.size()) for v in model_or_parameters) + if unit.lower() == "mb": + counts /= 1e6 + elif unit.lower() == "kb": + counts /= 1e3 + elif unit.lower() == "gb": + counts /= 1e9 + elif unit is not None: + raise ValueError("Unknow unit: {:}".format(unit)) + return counts From 49697b1f1568608e3077450b72fe3ed5b92ec1e5 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Fri, 5 Mar 2021 12:46:41 +0000 Subject: [PATCH 055/134] Show model size for pytorch models --- qlib/contrib/model/pytorch_alstm_ts.py | 6 +++++- qlib/contrib/model/pytorch_gats.py | 10 +++++++--- qlib/contrib/model/pytorch_gats_ts.py | 10 +++++++--- qlib/contrib/model/pytorch_nn.py | 4 ++++ qlib/contrib/model/pytorch_sfm.py | 12 ++++++++---- qlib/contrib/model/pytorch_tabnet.py | 7 +++++-- 6 files changed, 36 insertions(+), 13 deletions(-) diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index c8854e8d3..933905439 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -24,6 +24,7 @@ import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH, TSDatasetH from ...data.dataset.handler import DataHandlerLP @@ -127,7 +128,10 @@ class ALSTM(Model): hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, - ).to(self.device) + ) + self.logger.info("model:\n{:}".format(self.ALSTM_model)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.ALSTM_model))) + if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) elif optimizer.lower() == "gd": diff --git a/qlib/contrib/model/pytorch_gats.py b/qlib/contrib/model/pytorch_gats.py index 07048e1bc..061feaa84 100644 --- a/qlib/contrib/model/pytorch_gats.py +++ b/qlib/contrib/model/pytorch_gats.py @@ -22,6 +22,7 @@ import torch import torch.nn as nn import torch.optim as optim +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH from ...data.dataset.handler import DataHandlerLP @@ -42,8 +43,8 @@ class GATs(Model): the evaluate metric used in early stop optimizer : str optimizer name - GPU : str - the GPU ID(s) used for training + GPU : int + the GPU ID used for training """ def __init__( @@ -83,7 +84,7 @@ class GATs(Model): self.base_model = base_model self.with_pretrain = with_pretrain self.model_path = model_path - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.use_gpu = torch.cuda.is_available() self.seed = seed @@ -135,6 +136,9 @@ class GATs(Model): dropout=self.dropout, base_model=self.base_model, ) + self.logger.info("model:\n{:}".format(self.GAT_model)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.GAT_model))) + if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.GAT_model.parameters(), lr=self.lr) elif optimizer.lower() == "gd": diff --git a/qlib/contrib/model/pytorch_gats_ts.py b/qlib/contrib/model/pytorch_gats_ts.py index 1e94f56e4..b179a6df6 100644 --- a/qlib/contrib/model/pytorch_gats_ts.py +++ b/qlib/contrib/model/pytorch_gats_ts.py @@ -24,6 +24,7 @@ import torch.optim as optim from torch.utils.data import DataLoader from torch.utils.data import Sampler +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH from ...data.dataset.handler import DataHandlerLP @@ -62,8 +63,8 @@ class GATs(Model): the evaluate metric used in early stop optimizer : str optimizer name - GPU : str - the GPU ID(s) used for training + GPU : int + the GPU ID used for training """ def __init__( @@ -104,7 +105,7 @@ class GATs(Model): self.base_model = base_model self.with_pretrain = with_pretrain self.model_path = model_path - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.n_jobs = n_jobs self.use_gpu = torch.cuda.is_available() self.seed = seed @@ -157,6 +158,9 @@ class GATs(Model): dropout=self.dropout, base_model=self.base_model, ) + self.logger.info("model:\n{:}".format(self.GAT_model)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.GAT_model))) + if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.GAT_model.parameters(), lr=self.lr) elif optimizer.lower() == "gd": diff --git a/qlib/contrib/model/pytorch_nn.py b/qlib/contrib/model/pytorch_nn.py index f8b0b7748..a51481c85 100644 --- a/qlib/contrib/model/pytorch_nn.py +++ b/qlib/contrib/model/pytorch_nn.py @@ -15,6 +15,7 @@ import torch import torch.nn as nn import torch.optim as optim +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH from ...data.dataset.handler import DataHandlerLP @@ -129,6 +130,9 @@ class DNNModelPytorch(Model): self._scorer = mean_squared_error if loss == "mse" else roc_auc_score self.dnn_model = Net(input_dim, output_dim, layers, loss=self.loss_type) + self.logger.info("model:\n{:}".format(self.dnn_model)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.dnn_model))) + if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.dnn_model.parameters(), lr=self.lr, weight_decay=self.weight_decay) elif optimizer.lower() == "gd": diff --git a/qlib/contrib/model/pytorch_sfm.py b/qlib/contrib/model/pytorch_sfm.py index d5169e6c7..55058797a 100644 --- a/qlib/contrib/model/pytorch_sfm.py +++ b/qlib/contrib/model/pytorch_sfm.py @@ -23,6 +23,7 @@ import torch.nn as nn import torch.nn.init as init import torch.optim as optim +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH from ...data.dataset.handler import DataHandlerLP @@ -196,8 +197,8 @@ class SFM(Model): learning rate optimizer : str optimizer name - GPU : str - the GPU ID(s) used for training + GPU : int + the GPU ID used for training """ def __init__( @@ -216,7 +217,7 @@ class SFM(Model): eval_steps=5, loss="mse", optimizer="gd", - GPU="0", + GPU=0, seed=None, **kwargs ): @@ -239,7 +240,7 @@ class SFM(Model): self.eval_steps = eval_steps self.optimizer = optimizer.lower() self.loss = loss - self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() else "cpu") + self.device = torch.device("cuda:%d" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu") self.use_gpu = torch.cuda.is_available() self.seed = seed @@ -295,6 +296,9 @@ class SFM(Model): dropout_U=self.dropout_U, device=self.device, ) + self.logger.info("model:\n{:}".format(self.sfm_model)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.sfm_model))) + if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.sfm_model.parameters(), lr=self.lr) elif optimizer.lower() == "gd": diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index 62e32d701..ff56b0561 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -23,6 +23,7 @@ import torch.optim as optim import torch.nn.functional as F from torch.autograd import Function +from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH from ...data.dataset.handler import DataHandlerLP @@ -49,7 +50,7 @@ class TabnetModel(Model): loss="mse", metric="", early_stop=20, - GPU="1", + GPU=0, pretrain_loss="custom", ps=0.3, lr=0.01, @@ -75,7 +76,7 @@ class TabnetModel(Model): self.n_epochs = n_epochs self.logger = get_module_logger("TabNet") self.pretrain_n_epochs = pretrain_n_epochs - self.device = "cuda:%s" % (GPU) if torch.cuda.is_available() else "cpu" + self.device = "cuda:%s" % (GPU) if torch.cuda.is_available() and GPU >= 0 else "cpu" self.loss = loss self.metric = metric self.early_stop = early_stop @@ -98,6 +99,8 @@ class TabnetModel(Model): self.tabnet_decoder = TabNet_Decoder(self.out_dim, self.d_feat, n_shared, n_ind, vbs, n_steps, self.device).to( self.device ) + self.logger.info("model:\n{:}\n{:}".format(self.tabnet_model, self.tabnet_decoder)) + self.logger.info("model size: {:.4f} MB".format(count_parameters(self.tabnet_model) + count_parameters(self.tabnet_decoder))) if optimizer.lower() == "adam": self.pretrain_optimizer = optim.Adam( From f277a66582eb9f8e65c64380a885105e236929e0 Mon Sep 17 00:00:00 2001 From: shubhendra Date: Sat, 6 Mar 2021 13:01:00 +0530 Subject: [PATCH 056/134] Add .deepsource.toml Signed-off-by: shubhendra --- .deepsource.toml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .deepsource.toml diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 000000000..773c9e023 --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,12 @@ +version = 1 + +test_patterns = ["tests/test_*.py"] + +exclude_patterns = ["examples/**"] + +[[analyzers]] +name = "python" +enabled = true + + [analyzers.meta] + runtime_version = "3.x.x" From 07eef183372e7dda39f7b427ff5cf22427a31bc8 Mon Sep 17 00:00:00 2001 From: shubhendra Date: Sat, 6 Mar 2021 13:01:01 +0530 Subject: [PATCH 057/134] Remove length check in favour of truthiness of the object Signed-off-by: shubhendra --- qlib/contrib/backtest/exchange.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qlib/contrib/backtest/exchange.py b/qlib/contrib/backtest/exchange.py index 178950eeb..5a8b8b2b6 100644 --- a/qlib/contrib/backtest/exchange.py +++ b/qlib/contrib/backtest/exchange.py @@ -93,7 +93,7 @@ class Exchange: self.limit_threshold = limit_threshold # TODO: the quote, trade_dates, codes are not necessray. # It is just for performance consideration. - if trade_dates is not None and len(trade_dates): + if trade_dates is not None and trade_dates: start_date, end_date = trade_dates[0], trade_dates[-1] else: self.logger.warning("trade_dates have not been assigned, all dates will be loaded") From 6f034ccb5d289845816fc8c62e0b4a04ef4857fa Mon Sep 17 00:00:00 2001 From: shubhendra Date: Sat, 6 Mar 2021 13:01:02 +0530 Subject: [PATCH 058/134] Remove unnecessary use of comprehension Signed-off-by: shubhendra --- qlib/contrib/online/manager.py | 2 +- qlib/contrib/report/graph.py | 2 +- qlib/workflow/cli.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/qlib/contrib/online/manager.py b/qlib/contrib/online/manager.py index b0be7f076..70b7bad40 100644 --- a/qlib/contrib/online/manager.py +++ b/qlib/contrib/online/manager.py @@ -63,7 +63,7 @@ class UserManager: account_path = self.data_path / user_id strategy_file = self.data_path / user_id / "strategy_{}.pickle".format(user_id) model_file = self.data_path / user_id / "model_{}.pickle".format(user_id) - cur_user_list = [user_id for user_id in self.users] + cur_user_list = list(self.users) if user_id in cur_user_list: raise ValueError("User {} has been loaded".format(user_id)) else: diff --git a/qlib/contrib/report/graph.py b/qlib/contrib/report/graph.py index 70e382fb1..677e767ee 100644 --- a/qlib/contrib/report/graph.py +++ b/qlib/contrib/report/graph.py @@ -161,7 +161,7 @@ class DistplotGraph(BaseGraph): """ _t_df = self._df.dropna() _data_list = [_t_df[_col] for _col in self._name_dict] - _label_list = [_name for _name in self._name_dict.values()] + _label_list = list(self._name_dict.values()) _fig = create_distplot(_data_list, _label_list, show_rug=False, **self._graph_kwargs) return _fig["data"] diff --git a/qlib/workflow/cli.py b/qlib/workflow/cli.py index 6eba96277..879c0aaeb 100644 --- a/qlib/workflow/cli.py +++ b/qlib/workflow/cli.py @@ -16,7 +16,7 @@ def get_path_list(path): if isinstance(path, str): return [path] else: - return [p for p in path] + return list(path) def sys_config(config, config_path): From 5015d218ff726784280dd1913ecd987990a3ea73 Mon Sep 17 00:00:00 2001 From: shubhendra Date: Sat, 6 Mar 2021 13:01:03 +0530 Subject: [PATCH 059/134] Remove methods with unnecessary super delegation. Signed-off-by: shubhendra --- qlib/data/cache.py | 3 --- qlib/data/data.py | 3 --- qlib/data/dataset/__init__.py | 11 ----------- qlib/workflow/expm.py | 3 --- 4 files changed, 20 deletions(-) diff --git a/qlib/data/cache.py b/qlib/data/cache.py index 0174dc63f..2d0b8a7cd 100644 --- a/qlib/data/cache.py +++ b/qlib/data/cache.py @@ -1045,9 +1045,6 @@ class SimpleDatasetCache(DatasetCache): class DatasetURICache(DatasetCache): """Prepared cache mechanism for server.""" - def __init__(self, provider): - super(DatasetURICache, self).__init__(provider) - def _uri(self, instruments, fields, start_time, end_time, freq, disk_cache=1, **kwargs): return hash_args(*self.normalize_uri_args(instruments, fields, freq), disk_cache) diff --git a/qlib/data/data.py b/qlib/data/data.py index 762467da3..000bd1196 100644 --- a/qlib/data/data.py +++ b/qlib/data/data.py @@ -654,9 +654,6 @@ class LocalExpressionProvider(ExpressionProvider): Provide expression data from local data source. """ - def __init__(self): - super().__init__() - def expression(self, instrument, field, start_time=None, end_time=None, freq="day"): expression = self.get_expression_instance(field) start_time = pd.Timestamp(start_time) diff --git a/qlib/data/dataset/__init__.py b/qlib/data/dataset/__init__.py index 8ff8c1210..b87beeeb4 100644 --- a/qlib/data/dataset/__init__.py +++ b/qlib/data/dataset/__init__.py @@ -76,17 +76,6 @@ class DatasetH(Dataset): - The processing is related to data split. """ - def __init__(self, handler: Union[dict, DataHandler], segments: dict): - """ - Parameters - ---------- - handler : Union[dict, DataHandler] - handler will be passed into setup_data. - segments : dict - handler will be passed into setup_data. - """ - super().__init__(handler, segments) - def init(self, handler_kwargs: dict = None, segment_kwargs: dict = None): """ Initialize the DatasetH diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index a50dce7c9..a75c1cf6e 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -229,9 +229,6 @@ class MLflowExpManager(ExpManager): Use mlflow to implement ExpManager. """ - def __init__(self, uri, default_exp_name): - super(MLflowExpManager, self).__init__(uri, default_exp_name) - @property def client(self): # Delay the creation of mlflow client in case of creating `mlruns` folder when importing qlib From a62d1a1b360355d26a9e21476a7b76a54f222be1 Mon Sep 17 00:00:00 2001 From: shubhendra Date: Sat, 6 Mar 2021 13:01:04 +0530 Subject: [PATCH 060/134] Use literal syntax to create data structure Signed-off-by: shubhendra --- qlib/contrib/evaluate_portfolio.py | 4 ++-- qlib/utils/__init__.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/qlib/contrib/evaluate_portfolio.py b/qlib/contrib/evaluate_portfolio.py index 04ddd8db0..b3a770e7c 100644 --- a/qlib/contrib/evaluate_portfolio.py +++ b/qlib/contrib/evaluate_portfolio.py @@ -61,7 +61,7 @@ def get_position_value(evaluate_date, position): # load close price for position # position should also consider cash instruments = list(position.keys()) - instruments = list(set(instruments) - set(["cash"])) # filter 'cash' + instruments = list(set(instruments) - {"cash"}) # filter 'cash' fields = ["$close"] close_data_df = D.features( instruments, @@ -80,7 +80,7 @@ def get_position_list_value(positions): instruments = set() for day, position in positions.items(): instruments.update(position.keys()) - instruments = list(set(instruments) - set(["cash"])) # filter 'cash' + instruments = list(set(instruments) - {"cash"}) # filter 'cash' instruments.sort() day_list = list(positions.keys()) day_list.sort() diff --git a/qlib/utils/__init__.py b/qlib/utils/__init__.py index 6640dae2c..3585c5281 100644 --- a/qlib/utils/__init__.py +++ b/qlib/utils/__init__.py @@ -212,7 +212,7 @@ def get_cls_kwargs(config: Union[dict, str], module) -> (type, dict): def init_instance_by_config( - config: Union[str, dict, object], module=None, accept_types: Union[type, Tuple[type]] = tuple([]), **kwargs + config: Union[str, dict, object], module=None, accept_types: Union[type, Tuple[type]] = (), **kwargs ) -> object: """ get initialized instance with config From dc86a6abc5ec9a5423dbfa4e96ad70cb04373699 Mon Sep 17 00:00:00 2001 From: shubhendra Date: Sat, 6 Mar 2021 13:01:05 +0530 Subject: [PATCH 061/134] Refactor unnecessary `else` / `elif` when `if` block has a `continue` statement Signed-off-by: shubhendra --- qlib/contrib/backtest/account.py | 7 +++---- qlib/contrib/backtest/exchange.py | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/qlib/contrib/backtest/account.py b/qlib/contrib/backtest/account.py index d8b285019..a614f08b6 100644 --- a/qlib/contrib/backtest/account.py +++ b/qlib/contrib/backtest/account.py @@ -104,10 +104,9 @@ class Account: # if suspend, no new price to be updated, profit is 0 if trader.check_stock_suspended(code, today): continue - else: - today_close = trader.get_close(code, today) - profit += (today_close - self.current.position[code]["price"]) * self.current.position[code]["amount"] - self.current.update_stock_price(stock_id=code, price=today_close) + today_close = trader.get_close(code, today) + profit += (today_close - self.current.position[code]["price"]) * self.current.position[code]["amount"] + self.current.update_stock_price(stock_id=code, price=today_close) self.rtn += profit # update holding day count self.current.add_count_all() diff --git a/qlib/contrib/backtest/exchange.py b/qlib/contrib/backtest/exchange.py index 5a8b8b2b6..cbb3d7932 100644 --- a/qlib/contrib/backtest/exchange.py +++ b/qlib/contrib/backtest/exchange.py @@ -325,7 +325,7 @@ class Exchange: deal_amount = self.get_real_deal_amount(current_amount, target_amount, factor) if deal_amount == 0: continue - elif deal_amount > 0: + if deal_amount > 0: # buy stock buy_order_list.append( Order( From aab5c5b311b47128a62b32500cb7fab7e3ba485f Mon Sep 17 00:00:00 2001 From: shubhendra Date: Sat, 6 Mar 2021 13:01:05 +0530 Subject: [PATCH 062/134] Refactor the comparison involving `not` Signed-off-by: shubhendra --- qlib/contrib/online/operator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qlib/contrib/online/operator.py b/qlib/contrib/online/operator.py index c8b44f578..d2307dad5 100644 --- a/qlib/contrib/online/operator.py +++ b/qlib/contrib/online/operator.py @@ -148,7 +148,7 @@ class Operator: for user_id, user in um.users.items(): dates, trade_exchange = prepare(um, trade_date, user_id, exchange_config) executor = SimulatorExecutor(trade_exchange=trade_exchange) - if not str(dates[0].date()) == str(pred_date.date()): + if str(dates[0].date()) != str(pred_date.date()): raise ValueError( "The account data is not newest! last trading date {}, today {}".format( dates[0].date(), trade_date.date() From 91fd53ab4d0724df73ccf8855ed83b6e1760bb08 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Sat, 6 Mar 2021 05:33:08 -0800 Subject: [PATCH 063/134] Add reset_default_uri func for R and expm --- qlib/workflow/__init__.py | 11 ++++++++++- qlib/workflow/exp.py | 5 ++++- qlib/workflow/expm.py | 4 ++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/qlib/workflow/__init__.py b/qlib/workflow/__init__.py index 7bff505ce..54297ecd7 100644 --- a/qlib/workflow/__init__.py +++ b/qlib/workflow/__init__.py @@ -2,6 +2,7 @@ # Licensed under the MIT License. from contextlib import contextmanager +from typing import Text, Optional from .expm import MLflowExpManager from .exp import Experiment from .recorder import Recorder @@ -20,7 +21,9 @@ class QlibRecorder: return "{name}(manager={manager})".format(name=self.__class__.__name__, manager=self.exp_manager) @contextmanager - def start(self, experiment_name=None, recorder_name=None, uri=None): + def start( + self, experiment_name: Optional[Text] = None, recorder_name: Optional[Text] = None, uri: Optional[Text] = None + ): """ Method to start an experiment. This method can only be called within a Python's `with` statement. Here is the example code: @@ -282,6 +285,12 @@ class QlibRecorder: """ return self.exp_manager.uri + def reset_default_uri(self, uri: Text): + """ + Method to reset the default uri of current experiment manager. + """ + self.exp_manager.reset_default_uri(uri) + def get_recorder(self, recorder_id=None, recorder_name=None, experiment_name=None): """ Method for retrieving a recorder. diff --git a/qlib/workflow/exp.py b/qlib/workflow/exp.py index 18b0a143d..9cda020c3 100644 --- a/qlib/workflow/exp.py +++ b/qlib/workflow/exp.py @@ -23,7 +23,7 @@ class Experiment: self.active_recorder = None # only one recorder can running each time def __repr__(self): - return "{name}(info={info})".format(name=self.__class__.__name__, info=self.info) + return "{name}(id={id}, info={info})".format(name=self.__class__.__name__, id=self.id, info=self.info) def __str__(self): return str(self.info) @@ -175,6 +175,9 @@ class MLflowExperiment(Experiment): self._default_rec_name = "mlflow_recorder" self._client = mlflow.tracking.MlflowClient(tracking_uri=self._uri) + def __repr__(self): + return "{name}(id={id}, info={info})".format(name=self.__class__.__name__, id=self.id, info=self.info) + def start(self, recorder_name=None): logger.info(f"Experiment {self.id} starts running ...") # set up recorder diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index 4ba72a634..f9a5d0252 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -33,6 +33,10 @@ class ExpManager: name=self.__class__.__name__, duri=self._default_uri, curi=self._current_uri ) + def reset_default_uri(self, uri: Text): + self._default_uri = uri + self.set_uri(None) + def start_exp( self, experiment_name: Optional[Text] = None, From 73b7107ee89f890456f62fc222f71b2e9f5ed23e Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Sun, 7 Mar 2021 00:52:27 -0800 Subject: [PATCH 064/134] Remove useless verbose kwarg --- qlib/contrib/model/pytorch_alstm.py | 1 - qlib/contrib/model/pytorch_alstm_ts.py | 1 - qlib/contrib/model/pytorch_gats.py | 1 - qlib/contrib/model/pytorch_gats_ts.py | 1 - qlib/contrib/model/pytorch_gru.py | 1 - qlib/contrib/model/pytorch_gru_ts.py | 1 - qlib/contrib/model/pytorch_lstm.py | 1 - qlib/contrib/model/pytorch_lstm_ts.py | 1 - qlib/contrib/model/pytorch_sfm.py | 1 - qlib/contrib/model/pytorch_tabnet.py | 1 - 10 files changed, 10 deletions(-) diff --git a/qlib/contrib/model/pytorch_alstm.py b/qlib/contrib/model/pytorch_alstm.py index 6df996e11..e8b316795 100644 --- a/qlib/contrib/model/pytorch_alstm.py +++ b/qlib/contrib/model/pytorch_alstm.py @@ -218,7 +218,6 @@ class ALSTM(Model): self, dataset: DatasetH, evals_result=dict(), - verbose=True, save_path=None, ): diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 933905439..1907b9d76 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -205,7 +205,6 @@ class ALSTM(Model): self, dataset, evals_result=dict(), - verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) diff --git a/qlib/contrib/model/pytorch_gats.py b/qlib/contrib/model/pytorch_gats.py index 061feaa84..7d3b00232 100644 --- a/qlib/contrib/model/pytorch_gats.py +++ b/qlib/contrib/model/pytorch_gats.py @@ -236,7 +236,6 @@ class GATs(Model): self, dataset: DatasetH, evals_result=dict(), - verbose=True, save_path=None, ): diff --git a/qlib/contrib/model/pytorch_gats_ts.py b/qlib/contrib/model/pytorch_gats_ts.py index b179a6df6..99ae3d4da 100644 --- a/qlib/contrib/model/pytorch_gats_ts.py +++ b/qlib/contrib/model/pytorch_gats_ts.py @@ -249,7 +249,6 @@ class GATs(Model): self, dataset, evals_result=dict(), - verbose=True, save_path=None, ): diff --git a/qlib/contrib/model/pytorch_gru.py b/qlib/contrib/model/pytorch_gru.py index 720e6b4f1..d4dc88452 100755 --- a/qlib/contrib/model/pytorch_gru.py +++ b/qlib/contrib/model/pytorch_gru.py @@ -218,7 +218,6 @@ class GRU(Model): self, dataset: DatasetH, evals_result=dict(), - verbose=True, save_path=None, ): diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index cbf1c1add..1f2137c8f 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -205,7 +205,6 @@ class GRU(Model): self, dataset, evals_result=dict(), - verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) diff --git a/qlib/contrib/model/pytorch_lstm.py b/qlib/contrib/model/pytorch_lstm.py index 61e372425..be8d20a15 100755 --- a/qlib/contrib/model/pytorch_lstm.py +++ b/qlib/contrib/model/pytorch_lstm.py @@ -214,7 +214,6 @@ class LSTM(Model): self, dataset: DatasetH, evals_result=dict(), - verbose=True, save_path=None, ): diff --git a/qlib/contrib/model/pytorch_lstm_ts.py b/qlib/contrib/model/pytorch_lstm_ts.py index 44d136676..3142f15c5 100755 --- a/qlib/contrib/model/pytorch_lstm_ts.py +++ b/qlib/contrib/model/pytorch_lstm_ts.py @@ -201,7 +201,6 @@ class LSTM(Model): self, dataset, evals_result=dict(), - verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) diff --git a/qlib/contrib/model/pytorch_sfm.py b/qlib/contrib/model/pytorch_sfm.py index 55058797a..40b991c9c 100644 --- a/qlib/contrib/model/pytorch_sfm.py +++ b/qlib/contrib/model/pytorch_sfm.py @@ -369,7 +369,6 @@ class SFM(Model): self, dataset: DatasetH, evals_result=dict(), - verbose=True, save_path=None, ): diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index ff56b0561..7e47f58dc 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -162,7 +162,6 @@ class TabnetModel(Model): self, dataset: DatasetH, evals_result=dict(), - verbose=True, save_path=None, ): if self.pretrain: From 11412727ef9089863b88f4d58b332513350cb115 Mon Sep 17 00:00:00 2001 From: wangershi Date: Sun, 7 Mar 2021 18:51:38 +0800 Subject: [PATCH 065/134] add normalizer --- scripts/data_collector/fund/README.md | 4 +- scripts/data_collector/fund/collector.py | 171 ++++++++++++++++++++++- scripts/data_collector/utils.py | 43 ++++-- 3 files changed, 200 insertions(+), 18 deletions(-) diff --git a/scripts/data_collector/fund/README.md b/scripts/data_collector/fund/README.md index bcbbbcba7..c729b7eaa 100644 --- a/scripts/data_collector/fund/README.md +++ b/scripts/data_collector/fund/README.md @@ -20,10 +20,12 @@ pip install -r requirements.txt # download from eastmoney.com python collector.py download_data --source_dir ~/.qlib/fund_data/source/cn_1d --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1d +# normalize +python collector.py normalize_data --source_dir ~/.qlib/fund_data/source/cn_1d --normalize_dir ~/.qlib/fund_data/source/cn_1d_nor --region CN --interval 1d --date_field_name FSRQ # dump data cd qlib/scripts -python dump_bin.py dump_all --csv_path ~/.qlib/fund_data/source/cn_1d --qlib_dir ~/.qlib/qlib_data/cn_fund_data --freq day --date_field_name FSRQ --include_fields DWJZ,LJJZ +python dump_bin.py dump_all --csv_path ~/.qlib/fund_data/source/cn_1d_nor --qlib_dir ~/.qlib/qlib_data/cn_fund_data --freq day --date_field_name FSRQ --include_fields DWJZ,LJJZ ``` diff --git a/scripts/data_collector/fund/collector.py b/scripts/data_collector/fund/collector.py index a2b7089a1..795d8848e 100644 --- a/scripts/data_collector/fund/collector.py +++ b/scripts/data_collector/fund/collector.py @@ -23,7 +23,7 @@ from dateutil.tz import tzlocal CUR_DIR = Path(__file__).resolve().parent sys.path.append(str(CUR_DIR.parent.parent)) -from data_collector.utils import get_en_fund_symbols +from data_collector.utils import get_calendar_list, get_en_fund_symbols INDEX_BENCH_URL = "http://api.fund.eastmoney.com/f10/lsjz?callback=jQuery_&fundCode={index_code}&pageIndex=1&pageSize={numberOfHistoricalDaysToCrawl}&startDate={startDate}&endDate={endDate}" REGION_CN = "CN" @@ -302,14 +302,149 @@ class FundCollectorCN1d(FundollectorCN): return 252 / 4 +class FundNormalize: + COLUMNS = ["open", "close", "high", "low", "volume"] + DAILY_FORMAT = "%Y-%m-%d" + + def __init__( + self, + date_field_name: str = "date", + symbol_field_name: str = "symbol", + ): + """ + + Parameters + ---------- + date_field_name: str + date field name, default is date + symbol_field_name: str + symbol field name, default is symbol + """ + self._date_field_name = date_field_name + self._symbol_field_name = symbol_field_name + + self._calendar_list = self._get_calendar_list() + print (self._calendar_list) + + @staticmethod + def normalize_fund( + df: pd.DataFrame, + calendar_list: list = None, + date_field_name: str = "date", + symbol_field_name: str = "symbol", + ): + if df.empty: + return df + df = df.copy() + df.set_index(date_field_name, inplace=True) + df.index = pd.to_datetime(df.index) + df = df[~df.index.duplicated(keep="first")] + if calendar_list is not None: + df = df.reindex( + pd.DataFrame(index=calendar_list) + .loc[ + pd.Timestamp(df.index.min()).date() : pd.Timestamp(df.index.max()).date() + + pd.Timedelta(hours=23, minutes=59) + ] + .index + ) + df.sort_index(inplace=True) + + df.index.names = [date_field_name] + return df.reset_index() + + def normalize(self, df: pd.DataFrame) -> pd.DataFrame: + # normalize + df = self.normalize_fund(df, self._calendar_list, self._date_field_name, self._symbol_field_name) + return df + + @abc.abstractmethod + def _get_calendar_list(self): + """Get benchmark calendar""" + raise NotImplementedError("") + + +class FundNormalize1d(FundNormalize, ABC): + DAILY_FORMAT = "%Y-%m-%d" + + def normalize(self, df: pd.DataFrame) -> pd.DataFrame: + df = super(FundNormalize, self).normalize(df) + return df + + +class FundNormalizeCN: + def _get_calendar_list(self): + return get_calendar_list("ALL") + + +class FundNormalizeCN1d(FundNormalizeCN, FundNormalize1d): + pass + + +class Normalize: + def __init__( + self, + source_dir: [str, Path], + target_dir: [str, Path], + normalize_class: Type[FundNormalize], + max_workers: int = 16, + date_field_name: str = "date", + symbol_field_name: str = "symbol", + ): + """ + + Parameters + ---------- + source_dir: str or Path + The directory where the raw data collected from the Internet is saved + target_dir: str or Path + Directory for normalize data + normalize_class: Type[FundNormalize] + normalize class + max_workers: int + Concurrent number, default is 16 + date_field_name: str + date field name, default is date + symbol_field_name: str + symbol field name, default is symbol + """ + if not (source_dir and target_dir): + raise ValueError("source_dir and target_dir cannot be None") + self._source_dir = Path(source_dir).expanduser() + self._target_dir = Path(target_dir).expanduser() + self._target_dir.mkdir(parents=True, exist_ok=True) + + self._max_workers = max_workers + + self._normalize_obj = normalize_class(date_field_name=date_field_name, symbol_field_name=symbol_field_name) + + def _executor(self, file_path: Path): + file_path = Path(file_path) + df = pd.read_csv(file_path) + df = self._normalize_obj.normalize(df) + if not df.empty: + df.to_csv(self._target_dir.joinpath(file_path.name), index=False) + + def normalize(self): + logger.info("normalize data......") + + with ProcessPoolExecutor(max_workers=self._max_workers) as worker: + file_list = list(self._source_dir.glob("*.csv")) + with tqdm(total=len(file_list)) as p_bar: + for _ in worker.map(self._executor, file_list): + p_bar.update() + + class Run: - def __init__(self, source_dir=None, max_workers=4, region=REGION_CN): + def __init__(self, source_dir=None, normalize_dir=None, max_workers=4, region=REGION_CN): """ Parameters ---------- source_dir: str The directory where the raw data collected from the Internet is saved, default "Path(__file__).parent/source" + normalize_dir: str + Directory for normalize data, default "Path(__file__).parent/normalize" max_workers: int Concurrent number, default is 4 region: str @@ -320,6 +455,11 @@ class Run: self.source_dir = Path(source_dir).expanduser().resolve() self.source_dir.mkdir(parents=True, exist_ok=True) + if normalize_dir is None: + normalize_dir = CUR_DIR.joinpath("normalize") + self.normalize_dir = Path(normalize_dir).expanduser().resolve() + self.normalize_dir.mkdir(parents=True, exist_ok=True) + self._cur_module = importlib.import_module("collector") self.max_workers = max_workers self.region = region @@ -372,6 +512,33 @@ class Run: limit_nums=limit_nums, ).collector_data() + def normalize_data(self, interval: str = "1d", date_field_name: str = "date", symbol_field_name: str = "symbol"): + """normalize data + + Parameters + ---------- + interval: str + freq, value from [1d], default 1d + date_field_name: str + date field name, default date + symbol_field_name: str + symbol field name, default symbol + + Examples + --------- + $ python collector.py normalize_data --source_dir ~/.qlib/fund_data/source/cn_1d --normalize_dir ~/.qlib/fund_data/source/cn_1d_nor --region CN --interval 1d --date_field_name FSRQ + """ + _class = getattr(self._cur_module, f"FundNormalize{self.region.upper()}{interval}") + fc = Normalize( + source_dir=self.source_dir, + target_dir=self.normalize_dir, + normalize_class=_class, + max_workers=self.max_workers, + date_field_name=date_field_name, + symbol_field_name=symbol_field_name, + ) + fc.normalize() + if __name__ == "__main__": fire.Fire(Run) diff --git a/scripts/data_collector/utils.py b/scripts/data_collector/utils.py index 1a08c514f..56d010974 100644 --- a/scripts/data_collector/utils.py +++ b/scripts/data_collector/utils.py @@ -98,14 +98,14 @@ def get_calendar_list(bench_code="CSI300") -> list: return calendar -def return_date_list(source_dir, date_field_name, file_path): - df = pd.read_csv(Path(source_dir).joinpath(file_path), sep=",", index_col=0) - - return df[date_field_name].to_list() +def return_date_list(source_dir, date_field_name: str, file_path: Path): + file_path = Path(file_path) + date_list = pd.read_csv(Path(source_dir).joinpath(file_path), sep=",", index_col=0)[date_field_name].to_list() + return sorted(map(lambda x: pd.Timestamp(x), date_list)) def get_calendar_list_by_ratio( - source_dir: [str, Path], date_field_name: str = "date", threshold: float = 0.5, max_workers: int = 16 + source_dir: [str, Path], date_field_name: str = "date", threshold: float = 0.5, minimum_count: int = 10, max_workers: int = 16 ) -> list: """get calendar list by selecting the date when few funds trade in this day @@ -117,6 +117,8 @@ def get_calendar_list_by_ratio( date field name, default is date threshold: float threshold to exclude some days when few funds trade in this day, default 0.5 + minimum_count: int + minimum count of funds should trade in one day max_workers: int Concurrent number, default is 16 @@ -126,25 +128,36 @@ def get_calendar_list_by_ratio( """ logger.info(f"get calendar list from {source_dir} by threshold = {threshold}......") - _number_all_funds = len(os.listdir(source_dir)) + source_dir = Path(source_dir).expanduser() + file_list = list(source_dir.glob("*.csv")) - _list_all_date = dict() + _number_all_funds = len(file_list) + logger.info(f"count how many funds trade in this day......") + _dict_count_trade = dict() # dict{date:count} _fun = partial(return_date_list, source_dir, date_field_name) - with tqdm(total=_number_all_funds) as p_bar: with ProcessPoolExecutor(max_workers=max_workers) as executor: - for date_list in executor.map(_fun, os.listdir(source_dir)): + for date_list in executor.map(_fun, file_list[:_number_all_funds]): for date in date_list: - if date in _list_all_date.keys(): - _list_all_date[date] += 1 - else: - _list_all_date[date] = 0 + if date not in _dict_count_trade.keys(): + _dict_count_trade[date] = 0 + + _dict_count_trade[date] += 1 p_bar.update() + + logger.info(f"count how many funds have founded in this day......") + _dict_count_founding = {date:_number_all_funds for date in _dict_count_trade.keys()} # dict{date:count} + with tqdm(total=_number_all_funds) as p_bar: + with ProcessPoolExecutor(max_workers=max_workers) as executor: + for date_list in executor.map(_fun, file_list[:_number_all_funds]): + oldest_date = sorted(date_list)[0] # this fund haven't found before this day + for date in _dict_count_founding.keys(): + if date < oldest_date: + _dict_count_founding[date] -= 1 - _threshold_number = int(_number_all_funds * threshold) - calendar = [date for date in _list_all_date if _list_all_date[date] >= _threshold_number] + calendar = [date for date in _dict_count_trade if _dict_count_trade[date] >= max(int(_dict_count_founding[date] * threshold), minimum_count)] return calendar From d13c9ae01869a31f123285a792b674694f844370 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Sun, 7 Mar 2021 11:25:53 +0000 Subject: [PATCH 066/134] Avoid dividing zero in model.double_ensemble --- qlib/contrib/model/double_ensemble.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qlib/contrib/model/double_ensemble.py b/qlib/contrib/model/double_ensemble.py index a340489c2..541f74e99 100644 --- a/qlib/contrib/model/double_ensemble.py +++ b/qlib/contrib/model/double_ensemble.py @@ -184,7 +184,7 @@ class DEnsembleModel(Model): / M ) loss_feat = self.get_loss(y_train.values.squeeze(), pred.values) - g.loc[i_f, "g_value"] = np.mean(loss_feat - loss_values) / np.std(loss_feat - loss_values) + g.loc[i_f, "g_value"] = np.mean(loss_feat - loss_values) / (np.std(loss_feat - loss_values) + 1e-7) x_train_tmp.loc[:, feat] = x_train.loc[:, feat].copy() # one column in train features is all-nan # if g['g_value'].isna().any() From 6bcd88973b3ff906ac61e174185a28ea2b1d8ea0 Mon Sep 17 00:00:00 2001 From: wangershi Date: Sun, 7 Mar 2021 19:32:37 +0800 Subject: [PATCH 067/134] resolve one bug --- scripts/data_collector/fund/collector.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/data_collector/fund/collector.py b/scripts/data_collector/fund/collector.py index 795d8848e..08773cb9f 100644 --- a/scripts/data_collector/fund/collector.py +++ b/scripts/data_collector/fund/collector.py @@ -324,7 +324,6 @@ class FundNormalize: self._symbol_field_name = symbol_field_name self._calendar_list = self._get_calendar_list() - print (self._calendar_list) @staticmethod def normalize_fund( @@ -368,7 +367,7 @@ class FundNormalize1d(FundNormalize, ABC): DAILY_FORMAT = "%Y-%m-%d" def normalize(self, df: pd.DataFrame) -> pd.DataFrame: - df = super(FundNormalize, self).normalize(df) + df = super(FundNormalize1d, self).normalize(df) return df From 9df0361262eadd065ab783bb5349ef16203d04b4 Mon Sep 17 00:00:00 2001 From: wangershi Date: Sun, 7 Mar 2021 19:35:50 +0800 Subject: [PATCH 068/134] black --- scripts/data_collector/utils.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/scripts/data_collector/utils.py b/scripts/data_collector/utils.py index 56d010974..ed14ad6e1 100644 --- a/scripts/data_collector/utils.py +++ b/scripts/data_collector/utils.py @@ -105,7 +105,11 @@ def return_date_list(source_dir, date_field_name: str, file_path: Path): def get_calendar_list_by_ratio( - source_dir: [str, Path], date_field_name: str = "date", threshold: float = 0.5, minimum_count: int = 10, max_workers: int = 16 + source_dir: [str, Path], + date_field_name: str = "date", + threshold: float = 0.5, + minimum_count: int = 10, + max_workers: int = 16, ) -> list: """get calendar list by selecting the date when few funds trade in this day @@ -134,7 +138,7 @@ def get_calendar_list_by_ratio( _number_all_funds = len(file_list) logger.info(f"count how many funds trade in this day......") - _dict_count_trade = dict() # dict{date:count} + _dict_count_trade = dict() # dict{date:count} _fun = partial(return_date_list, source_dir, date_field_name) with tqdm(total=_number_all_funds) as p_bar: with ProcessPoolExecutor(max_workers=max_workers) as executor: @@ -146,9 +150,9 @@ def get_calendar_list_by_ratio( _dict_count_trade[date] += 1 p_bar.update() - + logger.info(f"count how many funds have founded in this day......") - _dict_count_founding = {date:_number_all_funds for date in _dict_count_trade.keys()} # dict{date:count} + _dict_count_founding = {date: _number_all_funds for date in _dict_count_trade.keys()} # dict{date:count} with tqdm(total=_number_all_funds) as p_bar: with ProcessPoolExecutor(max_workers=max_workers) as executor: for date_list in executor.map(_fun, file_list[:_number_all_funds]): @@ -157,7 +161,11 @@ def get_calendar_list_by_ratio( if date < oldest_date: _dict_count_founding[date] -= 1 - calendar = [date for date in _dict_count_trade if _dict_count_trade[date] >= max(int(_dict_count_founding[date] * threshold), minimum_count)] + calendar = [ + date + for date in _dict_count_trade + if _dict_count_trade[date] >= max(int(_dict_count_founding[date] * threshold), minimum_count) + ] return calendar From 7bed3b4c2eba8ec0a04bdd2c1227be72d267f820 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Mon, 8 Mar 2021 06:39:03 +0000 Subject: [PATCH 069/134] Fix python format by black --- qlib/contrib/model/pytorch_tabnet.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index 7e47f58dc..682e1b19f 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -100,7 +100,9 @@ class TabnetModel(Model): self.device ) self.logger.info("model:\n{:}\n{:}".format(self.tabnet_model, self.tabnet_decoder)) - self.logger.info("model size: {:.4f} MB".format(count_parameters(self.tabnet_model) + count_parameters(self.tabnet_decoder))) + self.logger.info( + "model size: {:.4f} MB".format(count_parameters(self.tabnet_model) + count_parameters(self.tabnet_decoder)) + ) if optimizer.lower() == "adam": self.pretrain_optimizer = optim.Adam( From ca48345b29dd40d6b50c87bd027eca51cb522a05 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Mon, 8 Mar 2021 08:16:17 +0000 Subject: [PATCH 070/134] Simplify count_parameters --- qlib/contrib/model/pytorch_tabnet.py | 4 +--- qlib/contrib/model/pytorch_utils.py | 13 ++++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index 682e1b19f..020bbaff2 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -100,9 +100,7 @@ class TabnetModel(Model): self.device ) self.logger.info("model:\n{:}\n{:}".format(self.tabnet_model, self.tabnet_decoder)) - self.logger.info( - "model size: {:.4f} MB".format(count_parameters(self.tabnet_model) + count_parameters(self.tabnet_decoder)) - ) + self.logger.info("model size: {:.4f} MB".format(count_parameters([self.tabnet_model, self.tabnet_decoder]))) if optimizer.lower() == "adam": self.pretrain_optimizer = optim.Adam( diff --git a/qlib/contrib/model/pytorch_utils.py b/qlib/contrib/model/pytorch_utils.py index 532969eb5..f2457c9a6 100644 --- a/qlib/contrib/model/pytorch_utils.py +++ b/qlib/contrib/model/pytorch_utils.py @@ -1,15 +1,18 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. -import numpy as np import torch.nn as nn -def count_parameters(model_or_parameters, unit="mb"): - if isinstance(model_or_parameters, nn.Module): - counts = np.sum(np.prod(v.size()) for v in model_or_parameters.parameters()) +def count_parameters(models_or_parameters, unit="mb"): + if isinstance(models_or_parameters, nn.Module): + counts = sum(v.numel() for v in models_or_parameters.parameters()) + elif isinstance(models_or_parameters, nn.Parameter): + counts = models_or_parameters.numel() + elif isinstance(models_or_parameters, (list, tuple)): + return sum(count_parameters(x, unit) for x in model_or_parameters) else: - counts = np.sum(np.prod(v.size()) for v in model_or_parameters) + counts = sum(v.numel() for v in models_or_parameters) if unit.lower() == "mb": counts /= 1e6 elif unit.lower() == "kb": From 03ef918dd8efb22d4b0561b281420795ec028c89 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Mon, 8 Mar 2021 08:24:23 +0000 Subject: [PATCH 071/134] Fix bugs in count_parameters --- qlib/contrib/model/pytorch_utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/qlib/contrib/model/pytorch_utils.py b/qlib/contrib/model/pytorch_utils.py index f2457c9a6..c0d483db3 100644 --- a/qlib/contrib/model/pytorch_utils.py +++ b/qlib/contrib/model/pytorch_utils.py @@ -3,14 +3,13 @@ import torch.nn as nn - def count_parameters(models_or_parameters, unit="mb"): if isinstance(models_or_parameters, nn.Module): counts = sum(v.numel() for v in models_or_parameters.parameters()) elif isinstance(models_or_parameters, nn.Parameter): counts = models_or_parameters.numel() elif isinstance(models_or_parameters, (list, tuple)): - return sum(count_parameters(x, unit) for x in model_or_parameters) + return sum(count_parameters(x, unit) for x in models_or_parameters) else: counts = sum(v.numel() for v in models_or_parameters) if unit.lower() == "mb": From e061443560a9cdaef837760c9a485fedd0899007 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Mon, 8 Mar 2021 08:27:58 +0000 Subject: [PATCH 072/134] Fix lint error with Black --- qlib/contrib/model/pytorch_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/qlib/contrib/model/pytorch_utils.py b/qlib/contrib/model/pytorch_utils.py index c0d483db3..e7a8e8d67 100644 --- a/qlib/contrib/model/pytorch_utils.py +++ b/qlib/contrib/model/pytorch_utils.py @@ -3,6 +3,7 @@ import torch.nn as nn + def count_parameters(models_or_parameters, unit="mb"): if isinstance(models_or_parameters, nn.Module): counts = sum(v.numel() for v in models_or_parameters.parameters()) From 79c1142d3e7f456ca66fe238973a49edefa1b86f Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 17:09:33 +0800 Subject: [PATCH 073/134] Pass nan_option to structured covariance estimator. --- qlib/model/riskmodel/structured.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/qlib/model/riskmodel/structured.py b/qlib/model/riskmodel/structured.py index e778c2faa..69c032e81 100644 --- a/qlib/model/riskmodel/structured.py +++ b/qlib/model/riskmodel/structured.py @@ -30,7 +30,7 @@ class StructuredCovEstimator(RiskModel): FACTOR_MODEL_PCA = "pca" FACTOR_MODEL_FA = "fa" - NAN_OPTION = "fill" + DEFAULT_NAN_OPTION = "fill" def __init__( self, @@ -38,6 +38,7 @@ class StructuredCovEstimator(RiskModel): num_factors: int = 10, assume_centered: bool = False, scale_return: bool = True, + nan_option: str = DEFAULT_NAN_OPTION ): """ Args: @@ -45,8 +46,11 @@ class StructuredCovEstimator(RiskModel): num_factors (int): number of components to keep. assume_centered (bool): whether the data is assumed to be centered. scale_return (bool): whether scale returns as percentage. + nan_option (str): nan handling option (`fill`). """ - super().__init__(self.NAN_OPTION, assume_centered, scale_return) + assert nan_option in [self.DEFAULT_NAN_OPTION], "nan_option={} is not supported".format(nan_option) + + super().__init__(nan_option, assume_centered, scale_return) assert factor_model in [ self.FACTOR_MODEL_PCA, From 4d5a30b30b6766168dcc3b19e6a4420c31710da4 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 17:14:29 +0800 Subject: [PATCH 074/134] Resolve https://github.com/microsoft/qlib/pull/280\#discussion_r589167776 --- qlib/model/riskmodel/structured.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/qlib/model/riskmodel/structured.py b/qlib/model/riskmodel/structured.py index 69c032e81..7b722e600 100644 --- a/qlib/model/riskmodel/structured.py +++ b/qlib/model/riskmodel/structured.py @@ -36,21 +36,21 @@ class StructuredCovEstimator(RiskModel): self, factor_model: str = "pca", num_factors: int = 10, - assume_centered: bool = False, - scale_return: bool = True, - nan_option: str = DEFAULT_NAN_OPTION + **kwargs ): """ Args: factor_model (str): the latent factor models used to estimate the structured covariance (`pca`/`fa`). num_factors (int): number of components to keep. - assume_centered (bool): whether the data is assumed to be centered. - scale_return (bool): whether scale returns as percentage. - nan_option (str): nan handling option (`fill`). + kwargs: see `RiskModel` for more information """ - assert nan_option in [self.DEFAULT_NAN_OPTION], "nan_option={} is not supported".format(nan_option) + if 'nan_option' in kwargs.keys(): + assert kwargs['nan_option'] in [self.DEFAULT_NAN_OPTION], \ + "nan_option={} is not supported".format(kwargs['nan_option']) + else: + kwargs['nan_option'] = self.DEFAULT_NAN_OPTION - super().__init__(nan_option, assume_centered, scale_return) + super().__init__(**kwargs) assert factor_model in [ self.FACTOR_MODEL_PCA, From 81b86f8022ef90f437e01d20e75a0f77e1c65786 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 17:18:07 +0800 Subject: [PATCH 075/134] Update test to cover changes in structured_cov_estimator --- tests/test_structured_cov_estimator.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test_structured_cov_estimator.py b/tests/test_structured_cov_estimator.py index 6aeae3d89..8ac1e8477 100644 --- a/tests/test_structured_cov_estimator.py +++ b/tests/test_structured_cov_estimator.py @@ -27,6 +27,24 @@ class TestStructuredCovEstimator(unittest.TestCase): self.assertTrue(if_identical) + def test_nan_option_covariance(self): + # Try to estimate the covariance from a randomly generated matrix. + NUM_VARIABLE = 10 + NUM_OBSERVATION = 200 + EPS = 1e-6 + + estimator = StructuredCovEstimator(scale_return=False, assume_centered=True, nan_option='fill') + + X = np.random.rand(NUM_OBSERVATION, NUM_VARIABLE) + + est_cov = estimator.predict(X, is_price=False) + np_cov = np.cov(X.T) # While numpy assume row means variable, qlib assume the other wise. + + delta = abs(est_cov - np_cov) + if_identical = (delta < EPS).all() + + self.assertTrue(if_identical) + def test_constructed_covariance(self): # Try to estimate the covariance from a specially crafted matrix. # There should be some significant correlation since X is specially crafted. From 351d598c9f45a59d96fb0be1d57bbbc662d756f6 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 17:49:59 +0800 Subject: [PATCH 076/134] Resolve https://github.com/microsoft/qlib/pull/280\#discussion_r589165409 --- qlib/model/riskmodel/base.py | 28 ++++++---- qlib/model/riskmodel/structured.py | 74 ++------------------------ tests/test_structured_cov_estimator.py | 15 +++++- 3 files changed, 34 insertions(+), 83 deletions(-) diff --git a/qlib/model/riskmodel/base.py b/qlib/model/riskmodel/base.py index 02ab8c2fb..89df80e8f 100644 --- a/qlib/model/riskmodel/base.py +++ b/qlib/model/riskmodel/base.py @@ -1,6 +1,7 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. +import inspect import numpy as np import pandas as pd from typing import Union @@ -37,18 +38,24 @@ class RiskModel(BaseModel): self.scale_return = scale_return def predict( - self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True - ) -> Union[pd.DataFrame, np.ndarray]: + self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True, + return_decomposed_components=False, + ) -> Union[pd.DataFrame, np.ndarray, tuple]: """ Args: X (pd.Series, pd.DataFrame or np.ndarray): data from which to estimate the covariance, with variables as columns and observations as rows. return_corr (bool): whether return the correlation matrix. is_price (bool): whether `X` contains price (if not assume stock returns). + return_decomposed_components (bool): whether return decomposed components of the covariance matrix. Returns: pd.DataFrame or np.ndarray: estimated covariance (or correlation). """ + assert ( + not return_corr or not return_decomposed_components + ), "Can only return either correlation matrix or decomposed components." + # transform input into 2D array if not isinstance(X, (pd.Series, pd.DataFrame)): columns = None @@ -75,6 +82,14 @@ class RiskModel(BaseModel): # handle nan and centered X = self._preprocess(X) + # return decomposed components if needed + if return_decomposed_components: + assert 'return_decomposed_components' in inspect.getfullargspec(self._predict).args, \ + 'This risk model does not support return decomposed components of the covariance matrix ' + + F, cov_b, var_u = self._predict(X, return_decomposed_components=True) + return F, cov_b, var_u + # estimate covariance S = self._predict(X) @@ -126,12 +141,3 @@ class RiskModel(BaseModel): if not self.assume_centered: X = X - np.nanmean(X, axis=0) return X - - - - - - - - - diff --git a/qlib/model/riskmodel/structured.py b/qlib/model/riskmodel/structured.py index 7b722e600..39ff0166e 100644 --- a/qlib/model/riskmodel/structured.py +++ b/qlib/model/riskmodel/structured.py @@ -60,81 +60,13 @@ class StructuredCovEstimator(RiskModel): self.num_factors = num_factors - def predict( - self, - X: Union[pd.Series, pd.DataFrame, np.ndarray], - return_corr: bool = False, - is_price: bool = True, - return_decomposed_components=False, - ) -> Union[pd.DataFrame, np.ndarray, tuple]: - """ - Args: - X (pd.Series, pd.DataFrame or np.ndarray): data from which to estimate the covariance, - with variables as columns and observations as rows. - return_corr (bool): whether return the correlation matrix. - is_price (bool): whether `X` contains price (if not assume stock returns). - return_decomposed_components (bool): whether return decomposed components of the covariance matrix. - - Returns: - tuple or pd.DataFrame or np.ndarray: decomposed covariance matrix or estimated covariance or correlation. - """ - assert ( - not return_corr or not return_decomposed_components - ), "Can only return either correlation matrix or decomposed components." - - # transform input into 2D array - if not isinstance(X, (pd.Series, pd.DataFrame)): - columns = None - else: - if isinstance(X.index, pd.MultiIndex): - if isinstance(X, pd.DataFrame): - X = X.iloc[:, 0].unstack(level="instrument") # always use the first column - else: - X = X.unstack(level="instrument") - else: - # X is 2D DataFrame - pass - columns = X.columns # will be used to restore dataframe - X = X.values - - # calculate pct_change - if is_price: - X = X[1:] / X[:-1] - 1 # NOTE: resulting `n - 1` rows - - # scale return - if self.scale_return: - X *= 100 - - # handle nan and centered - X = self._preprocess(X) - - if return_decomposed_components: - F, cov_b, var_u = self._predict(X, return_structured=True) - return F, cov_b, var_u - else: - # estimate covariance - S = self._predict(X) - - # return correlation if needed - if return_corr: - vola = np.sqrt(np.diag(S)) - corr = S / np.outer(vola, vola) - if columns is None: - return corr - return pd.DataFrame(corr, index=columns, columns=columns) - - # return covariance - if columns is None: - return S - return pd.DataFrame(S, index=columns, columns=columns) - - def _predict(self, X: np.ndarray, return_structured=False) -> Union[np.ndarray, tuple]: + def _predict(self, X: np.ndarray, return_decomposed_components=False) -> Union[np.ndarray, tuple]: """ covariance estimation implementation Args: X (np.ndarray): data matrix containing multiple variables (columns) and observations (rows). - return_structured (bool): whether return decomposed components of the covariance matrix. + return_decomposed_components (bool): whether return decomposed components of the covariance matrix. Returns: tuple or np.ndarray: decomposed covariance matrix or covariance matrix. @@ -148,7 +80,7 @@ class StructuredCovEstimator(RiskModel): cov_b = np.cov(B.T) # num_factors x num_factors var_u = np.var(U, axis=0) # diagonal - if return_structured: + if return_decomposed_components: return F, cov_b, var_u cov_x = F @ cov_b @ F.T + np.diag(var_u) diff --git a/tests/test_structured_cov_estimator.py b/tests/test_structured_cov_estimator.py index 8ac1e8477..a3973be5a 100644 --- a/tests/test_structured_cov_estimator.py +++ b/tests/test_structured_cov_estimator.py @@ -28,7 +28,7 @@ class TestStructuredCovEstimator(unittest.TestCase): self.assertTrue(if_identical) def test_nan_option_covariance(self): - # Try to estimate the covariance from a randomly generated matrix. + # Test if nan_option is correctly passed. NUM_VARIABLE = 10 NUM_OBSERVATION = 200 EPS = 1e-6 @@ -45,6 +45,19 @@ class TestStructuredCovEstimator(unittest.TestCase): self.assertTrue(if_identical) + def test_decompose_covariance(self): + # Test if return_decomposed_components is correctly passed. + NUM_VARIABLE = 10 + NUM_OBSERVATION = 200 + + estimator = StructuredCovEstimator(scale_return=False, assume_centered=True, nan_option='fill') + + X = np.random.rand(NUM_OBSERVATION, NUM_VARIABLE) + + F, cov_b, var_u = estimator.predict(X, is_price=False, return_decomposed_components=True) + + self.assertTrue(F is not None and cov_b is not None and var_u is not None) + def test_constructed_covariance(self): # Try to estimate the covariance from a specially crafted matrix. # There should be some significant correlation since X is specially crafted. From c6675be7929afb6c0403aa6482f4bbea50bf053d Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 17:51:36 +0800 Subject: [PATCH 077/134] Resolve https://github.com/microsoft/qlib/pull/280\#discussion_r589166143 --- qlib/portfolio/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qlib/portfolio/__init__.py b/qlib/portfolio/__init__.py index 139597f9c..b7c525821 100644 --- a/qlib/portfolio/__init__.py +++ b/qlib/portfolio/__init__.py @@ -1,2 +1,3 @@ - +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. From fc89fec46d4c23e650ac2f9fca12c926673ab882 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 18:56:54 +0800 Subject: [PATCH 078/134] Resolve https://github.com/microsoft/qlib/pull/280\#discussion_r589168764 --- qlib/portfolio/optimizer/enhanced_indexing.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/qlib/portfolio/optimizer/enhanced_indexing.py b/qlib/portfolio/optimizer/enhanced_indexing.py index d988c776b..a0d0bc050 100644 --- a/qlib/portfolio/optimizer/enhanced_indexing.py +++ b/qlib/portfolio/optimizer/enhanced_indexing.py @@ -19,7 +19,6 @@ class EnhancedIndexingOptimizer(BaseOptimizer): START_FROM_W0 = "w0" START_FROM_BENCH = "benchmark" - DO_NOT_START_FROM = "no_warm_start" def __init__( self, @@ -29,7 +28,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): inds_dev: float = None, scale_alpha: bool = True, verbose: bool = False, - warm_start: str = DO_NOT_START_FROM, + warm_start: str = None, max_iters: int = 10000, ): """ @@ -58,7 +57,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): self.inds_dev = inds_dev assert warm_start in [ - self.DO_NOT_START_FROM, + None, self.START_FROM_W0, self.START_FROM_BENCH, ], "illegal warm start option" From 2f9af1af8ff44a4b60a0e9e2ca5412d1453c9755 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 19:02:40 +0800 Subject: [PATCH 079/134] Resolve https://github.com/microsoft/qlib/pull/280\#discussion_r589169769 --- qlib/portfolio/optimizer/enhanced_indexing.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/qlib/portfolio/optimizer/enhanced_indexing.py b/qlib/portfolio/optimizer/enhanced_indexing.py index a0d0bc050..1f7de6cb4 100644 --- a/qlib/portfolio/optimizer/enhanced_indexing.py +++ b/qlib/portfolio/optimizer/enhanced_indexing.py @@ -70,7 +70,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): def __call__( self, - u: np.ndarray, + u: Union[np.ndarray, pd.Series], F: np.ndarray, covB: np.ndarray, varU: np.ndarray, @@ -80,7 +80,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): ) -> Union[np.ndarray, pd.Series]: """ Args: - u (np.ndarray): expected returns (a.k.a., alpha) + u (np.ndarray or pd.Series): expected returns (a.k.a., alpha) F, covB, varU (np.ndarray): see StructuredCovEstimator w0 (np.ndarray): initial weights (for turnover control) w_bench (np.ndarray): benchmark weights @@ -91,6 +91,10 @@ class EnhancedIndexingOptimizer(BaseOptimizer): """ assert inds_onehot is not None or self.inds_dev is None, "Industry onehot vector is required." + # transform dataframe into array + if isinstance(u, pd.Series): + u = u.values + # scale alpha to match volatility if self.scale_alpha: u = u / u.std() From 7022675d003b4a603e9a04769e8a91e7232421ea Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 19:07:28 +0800 Subject: [PATCH 080/134] Resolve https://github.com/microsoft/qlib/pull/280\#discussion_r589169489 --- qlib/portfolio/optimizer/enhanced_indexing.py | 40 +++++++++---------- qlib/portfolio/optimizer/optimizer.py | 25 ++++++------ 2 files changed, 31 insertions(+), 34 deletions(-) diff --git a/qlib/portfolio/optimizer/enhanced_indexing.py b/qlib/portfolio/optimizer/enhanced_indexing.py index 1f7de6cb4..5fdc1014d 100644 --- a/qlib/portfolio/optimizer/enhanced_indexing.py +++ b/qlib/portfolio/optimizer/enhanced_indexing.py @@ -21,15 +21,15 @@ class EnhancedIndexingOptimizer(BaseOptimizer): START_FROM_BENCH = "benchmark" def __init__( - self, - lamb: float = 10, - delta: float = 0.4, - bench_dev: float = 0.01, - inds_dev: float = None, - scale_alpha: bool = True, - verbose: bool = False, - warm_start: str = None, - max_iters: int = 10000, + self, + lamb: float = 10, + delta: float = 0.4, + bench_dev: float = 0.01, + inds_dev: float = None, + scale_alpha: bool = True, + verbose: bool = False, + warm_start: str = None, + max_iters: int = 10000, ): """ Args: @@ -56,11 +56,7 @@ class EnhancedIndexingOptimizer(BaseOptimizer): assert inds_dev is None or inds_dev >= 0, "industry deviation limit `inds_dev` should be positive or None." self.inds_dev = inds_dev - assert warm_start in [ - None, - self.START_FROM_W0, - self.START_FROM_BENCH, - ], "illegal warm start option" + assert warm_start in [None, self.START_FROM_W0, self.START_FROM_BENCH,], "illegal warm start option" self.start_from_w0 = warm_start == self.START_FROM_W0 self.start_from_bench = warm_start == self.START_FROM_BENCH @@ -69,14 +65,14 @@ class EnhancedIndexingOptimizer(BaseOptimizer): self.max_iters = max_iters def __call__( - self, - u: Union[np.ndarray, pd.Series], - F: np.ndarray, - covB: np.ndarray, - varU: np.ndarray, - w0: np.ndarray, - w_bench: np.ndarray, - inds_onehot: np.ndarray = None, + self, + u: Union[np.ndarray, pd.Series], + F: np.ndarray, + covB: np.ndarray, + varU: np.ndarray, + w0: np.ndarray, + w_bench: np.ndarray, + inds_onehot: np.ndarray = None, ) -> Union[np.ndarray, pd.Series]: """ Args: diff --git a/qlib/portfolio/optimizer/optimizer.py b/qlib/portfolio/optimizer/optimizer.py index 3daa98af3..54648a46a 100644 --- a/qlib/portfolio/optimizer/optimizer.py +++ b/qlib/portfolio/optimizer/optimizer.py @@ -30,13 +30,13 @@ class PortfolioOptimizer(BaseOptimizer): OPT_INV = "inv" def __init__( - self, - method: str = "inv", - lamb: float = 0, - delta: float = 0, - alpha: float = 0.0, - scale_alpha: bool = True, - tol: float = 1e-8, + self, + method: str = "inv", + lamb: float = 0, + delta: float = 0, + alpha: float = 0.0, + scale_alpha: bool = True, + tol: float = 1e-8, ): """ Args: @@ -63,10 +63,10 @@ class PortfolioOptimizer(BaseOptimizer): self.scale_alpha = scale_alpha def __call__( - self, - S: Union[np.ndarray, pd.DataFrame], - u: Optional[Union[np.ndarray, pd.Series]] = None, - w0: Optional[Union[np.ndarray, pd.Series]] = None, + self, + S: Union[np.ndarray, pd.DataFrame], + u: Optional[Union[np.ndarray, pd.Series]] = None, + w0: Optional[Union[np.ndarray, pd.Series]] = None, ) -> Union[np.ndarray, pd.Series]: """ Args: @@ -155,7 +155,7 @@ class PortfolioOptimizer(BaseOptimizer): return self._solve(len(S), self._get_objective_gmv(S), *self._get_constrains(w0)) def _optimize_mvo( - self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None + self, S: np.ndarray, u: Optional[np.ndarray] = None, w0: Optional[np.ndarray] = None ) -> np.ndarray: """optimize mean-variance portfolio @@ -251,6 +251,7 @@ class PortfolioOptimizer(BaseOptimizer): # add l2 regularization wrapped_obj = obj if self.alpha > 0: + def opt_obj(x): return obj(x) + self.alpha * np.sum(np.square(x)) From 6a305c73ae51254c9c8d7629b968720bc099ac6f Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 19:08:55 +0800 Subject: [PATCH 081/134] Resolve https://github.com/microsoft/qlib/pull/280\#discussion_r589166529 --- qlib/model/riskmodel/base.py | 14 +++++++++----- qlib/model/riskmodel/poet.py | 2 +- qlib/model/riskmodel/shrink.py | 3 +-- qlib/model/riskmodel/structured.py | 16 ++++++---------- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/qlib/model/riskmodel/base.py b/qlib/model/riskmodel/base.py index 89df80e8f..bb067e3d5 100644 --- a/qlib/model/riskmodel/base.py +++ b/qlib/model/riskmodel/base.py @@ -38,8 +38,11 @@ class RiskModel(BaseModel): self.scale_return = scale_return def predict( - self, X: Union[pd.Series, pd.DataFrame, np.ndarray], return_corr: bool = False, is_price: bool = True, - return_decomposed_components=False, + self, + X: Union[pd.Series, pd.DataFrame, np.ndarray], + return_corr: bool = False, + is_price: bool = True, + return_decomposed_components=False, ) -> Union[pd.DataFrame, np.ndarray, tuple]: """ Args: @@ -53,7 +56,7 @@ class RiskModel(BaseModel): pd.DataFrame or np.ndarray: estimated covariance (or correlation). """ assert ( - not return_corr or not return_decomposed_components + not return_corr or not return_decomposed_components ), "Can only return either correlation matrix or decomposed components." # transform input into 2D array @@ -84,8 +87,9 @@ class RiskModel(BaseModel): # return decomposed components if needed if return_decomposed_components: - assert 'return_decomposed_components' in inspect.getfullargspec(self._predict).args, \ - 'This risk model does not support return decomposed components of the covariance matrix ' + assert ( + "return_decomposed_components" in inspect.getfullargspec(self._predict).args + ), "This risk model does not support return decomposed components of the covariance matrix " F, cov_b, var_u = self._predict(X, return_decomposed_components=True) return F, cov_b, var_u diff --git a/qlib/model/riskmodel/poet.py b/qlib/model/riskmodel/poet.py index 8dbe89036..840384555 100644 --- a/qlib/model/riskmodel/poet.py +++ b/qlib/model/riskmodel/poet.py @@ -50,7 +50,7 @@ class POETCovEstimator(RiskModel): if self.num_factors > 0: Dd, V = np.linalg.eig(Y.T.dot(Y)) V = V[:, np.argsort(Dd)] - F = V[:, -self.num_factors:][:, ::-1] * np.sqrt(n) + F = V[:, -self.num_factors :][:, ::-1] * np.sqrt(n) LamPCA = Y.dot(F) / n uhat = np.asarray(Y - LamPCA.dot(F.T)) Lowrank = np.asarray(LamPCA.dot(LamPCA.T)) diff --git a/qlib/model/riskmodel/shrink.py b/qlib/model/riskmodel/shrink.py index 1298891fb..3cb2620d1 100644 --- a/qlib/model/riskmodel/shrink.py +++ b/qlib/model/riskmodel/shrink.py @@ -248,8 +248,7 @@ class ShrinkCovEstimator(RiskModel): roff1 = np.sum(v1 * cov_mkt[:, None].T) / var_mkt - np.sum(np.diag(v1) * cov_mkt) / var_mkt v3 = z.T.dot(z) / t - var_mkt * S roff3 = ( - np.sum(v3 * np.outer(cov_mkt, cov_mkt)) / var_mkt ** 2 - np.sum( - np.diag(v3) * cov_mkt ** 2) / var_mkt ** 2 + np.sum(v3 * np.outer(cov_mkt, cov_mkt)) / var_mkt ** 2 - np.sum(np.diag(v3) * cov_mkt ** 2) / var_mkt ** 2 ) roff = 2 * roff1 - roff3 rho = rdiag + roff diff --git a/qlib/model/riskmodel/structured.py b/qlib/model/riskmodel/structured.py index 39ff0166e..878503401 100644 --- a/qlib/model/riskmodel/structured.py +++ b/qlib/model/riskmodel/structured.py @@ -32,23 +32,19 @@ class StructuredCovEstimator(RiskModel): FACTOR_MODEL_FA = "fa" DEFAULT_NAN_OPTION = "fill" - def __init__( - self, - factor_model: str = "pca", - num_factors: int = 10, - **kwargs - ): + def __init__(self, factor_model: str = "pca", num_factors: int = 10, **kwargs): """ Args: factor_model (str): the latent factor models used to estimate the structured covariance (`pca`/`fa`). num_factors (int): number of components to keep. kwargs: see `RiskModel` for more information """ - if 'nan_option' in kwargs.keys(): - assert kwargs['nan_option'] in [self.DEFAULT_NAN_OPTION], \ - "nan_option={} is not supported".format(kwargs['nan_option']) + if "nan_option" in kwargs.keys(): + assert kwargs["nan_option"] in [self.DEFAULT_NAN_OPTION], "nan_option={} is not supported".format( + kwargs["nan_option"] + ) else: - kwargs['nan_option'] = self.DEFAULT_NAN_OPTION + kwargs["nan_option"] = self.DEFAULT_NAN_OPTION super().__init__(**kwargs) From 8b9065c16690057b3fdd3968262e875e3c520c87 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 19:32:13 +0800 Subject: [PATCH 082/134] Reformat with black. --- qlib/config.py | 24 ++----- qlib/contrib/backtest/__init__.py | 18 +---- qlib/contrib/backtest/profit_attribution.py | 23 ++----- qlib/contrib/data/handler.py | 10 +-- qlib/contrib/eva/alpha.py | 6 +- qlib/contrib/evaluate.py | 7 +- qlib/contrib/evaluate_portfolio.py | 16 +---- qlib/contrib/model/catboost_model.py | 4 +- qlib/contrib/model/pytorch_alstm.py | 21 ++---- qlib/contrib/model/pytorch_alstm_ts.py | 17 ++--- qlib/contrib/model/pytorch_gats.py | 22 ++---- qlib/contrib/model/pytorch_gats_ts.py | 18 +---- qlib/contrib/model/pytorch_gru.py | 21 ++---- qlib/contrib/model/pytorch_gru_ts.py | 17 +---- qlib/contrib/model/pytorch_lstm.py | 21 ++---- qlib/contrib/model/pytorch_lstm_ts.py | 17 +---- qlib/contrib/model/pytorch_nn.py | 6 +- qlib/contrib/model/pytorch_sfm.py | 19 +---- qlib/contrib/model/pytorch_tabnet.py | 14 +--- qlib/contrib/model/xgboost.py | 4 +- qlib/contrib/online/executor.py | 24 ++----- qlib/contrib/online/manager.py | 6 +- qlib/contrib/online/operator.py | 8 +-- qlib/contrib/online/utils.py | 6 +- .../analysis_model_performance.py | 66 ++++-------------- .../analysis_position/cumulative_return.py | 36 ++-------- .../analysis_position/parse_position.py | 5 +- .../report/analysis_position/rank_label.py | 16 +---- .../report/analysis_position/report.py | 15 +--- qlib/contrib/report/graph.py | 6 +- qlib/contrib/strategy/cost_control.py | 5 +- qlib/contrib/strategy/order_generator.py | 12 +--- qlib/contrib/tuner/launcher.py | 6 +- qlib/contrib/tuner/space.py | 5 +- qlib/contrib/tuner/tuner.py | 26 ++----- qlib/data/client.py | 3 +- qlib/data/data.py | 69 +++---------------- qlib/data/dataset/utils.py | 5 +- qlib/data/filter.py | 7 +- qlib/portfolio/__init__.py | 1 - qlib/tests/__init__.py | 6 +- qlib/workflow/record_temp.py | 5 +- tests/test_all_pipeline.py | 9 +-- tests/test_dump_data.py | 9 +-- tests/test_get_data.py | 4 +- tests/test_structured_cov_estimator.py | 4 +- 46 files changed, 123 insertions(+), 546 deletions(-) diff --git a/qlib/config.py b/qlib/config.py index 52b05568d..344eb8527 100644 --- a/qlib/config.py +++ b/qlib/config.py @@ -115,12 +115,7 @@ _default_config = { "format": "[%(process)s:%(threadName)s](%(asctime)s) %(levelname)s - %(name)s - [%(filename)s:%(lineno)d] - %(message)s" } }, - "filters": { - "field_not_found": { - "()": "qlib.log.LogFilter", - "param": [".*?WARN: data not found for.*?"], - } - }, + "filters": {"field_not_found": {"()": "qlib.log.LogFilter", "param": [".*?WARN: data not found for.*?"],}}, "handlers": { "console": { "class": "logging.StreamHandler", @@ -135,10 +130,7 @@ _default_config = { "exp_manager": { "class": "MLflowExpManager", "module_path": "qlib.workflow.expm", - "kwargs": { - "uri": "file:" + str(Path(os.getcwd()).resolve() / "mlruns"), - "default_exp_name": "Experiment", - }, + "kwargs": {"uri": "file:" + str(Path(os.getcwd()).resolve() / "mlruns"), "default_exp_name": "Experiment",}, }, } @@ -200,16 +192,8 @@ HIGH_FREQ_CONFIG = { } _default_region_config = { - REG_CN: { - "trade_unit": 100, - "limit_threshold": 0.099, - "deal_price": "vwap", - }, - REG_US: { - "trade_unit": 1, - "limit_threshold": None, - "deal_price": "close", - }, + REG_CN: {"trade_unit": 100, "limit_threshold": 0.099, "deal_price": "vwap",}, + REG_US: {"trade_unit": 1, "limit_threshold": None, "deal_price": "close",}, } diff --git a/qlib/contrib/backtest/__init__.py b/qlib/contrib/backtest/__init__.py index aa24ffb0c..bd3494abf 100644 --- a/qlib/contrib/backtest/__init__.py +++ b/qlib/contrib/backtest/__init__.py @@ -18,13 +18,7 @@ logger = get_module_logger("backtest caller") def get_strategy( - strategy=None, - topk=50, - margin=0.5, - n_drop=5, - risk_degree=0.95, - str_type="dropout", - adjust_dates=None, + strategy=None, topk=50, margin=0.5, n_drop=5, risk_degree=0.95, str_type="dropout", adjust_dates=None, ): """get_strategy @@ -75,11 +69,7 @@ def get_strategy( str_cls = getattr(strategy_pool, str_cls_dict.get(str_type)) strategy = str_cls( - topk=topk, - buffer_margin=margin, - n_drop=n_drop, - risk_degree=risk_degree, - adjust_dates=adjust_dates, + topk=topk, buffer_margin=margin, n_drop=n_drop, risk_degree=risk_degree, adjust_dates=adjust_dates, ) elif isinstance(strategy, (dict, str)): # 2) create strategy with init_instance_by_config @@ -172,9 +162,7 @@ def get_exchange( def get_executor( - executor=None, - trade_exchange=None, - verbose=True, + executor=None, trade_exchange=None, verbose=True, ): """get_executor diff --git a/qlib/contrib/backtest/profit_attribution.py b/qlib/contrib/backtest/profit_attribution.py index 20c6f638f..355f06373 100644 --- a/qlib/contrib/backtest/profit_attribution.py +++ b/qlib/contrib/backtest/profit_attribution.py @@ -12,10 +12,7 @@ from pathlib import Path def get_benchmark_weight( - bench, - start_date=None, - end_date=None, - path=None, + bench, start_date=None, end_date=None, path=None, ): """get_benchmark_weight @@ -216,12 +213,7 @@ def get_stock_group(stock_group_field_df, bench_stock_weight_df, group_method, g def brinson_pa( - positions, - bench="SH000905", - group_field="industry", - group_method="category", - group_n=None, - deal_price="vwap", + positions, bench="SH000905", group_field="industry", group_method="category", group_n=None, deal_price="vwap", ): """brinson profit attribution @@ -255,17 +247,10 @@ def brinson_pa( # suspend stock is NAN. So we have to get more date to forward fill the NAN shift_start_date = start_date - datetime.timedelta(days=250) instruments = D.list_instruments( - D.instruments(market="all"), - start_time=shift_start_date, - end_time=end_date, - as_list=True, + D.instruments(market="all"), start_time=shift_start_date, end_time=end_date, as_list=True, ) stock_df = D.features( - instruments, - [group_field, deal_price], - start_time=shift_start_date, - end_time=end_date, - freq="day", + instruments, [group_field, deal_price], start_time=shift_start_date, end_time=end_date, freq="day", ) stock_df.columns = [group_field, "deal_price"] diff --git a/qlib/contrib/data/handler.py b/qlib/contrib/data/handler.py index 970b032d6..574287819 100644 --- a/qlib/contrib/data/handler.py +++ b/qlib/contrib/data/handler.py @@ -21,10 +21,7 @@ def check_transform_proc(proc_l, fit_start_time, fit_end_time): fit_start_time is not None and fit_end_time is not None ), "Make sure `fit_start_time` and `fit_end_time` are not None." pkwargs.update( - { - "fit_start_time": fit_start_time, - "fit_end_time": fit_end_time, - } + {"fit_start_time": fit_start_time, "fit_end_time": fit_end_time,} ) new_l.append({"class": klass.__name__, "kwargs": pkwargs}) else: @@ -170,10 +167,7 @@ class Alpha158(DataHandlerLP): def get_feature_config(self): conf = { "kbar": {}, - "price": { - "windows": [0], - "feature": ["OPEN", "HIGH", "LOW", "VWAP"], - }, + "price": {"windows": [0], "feature": ["OPEN", "HIGH", "LOW", "VWAP"],}, "rolling": {}, } return self.parse_config_to_fields(conf) diff --git a/qlib/contrib/eva/alpha.py b/qlib/contrib/eva/alpha.py index c68571853..363a18458 100644 --- a/qlib/contrib/eva/alpha.py +++ b/qlib/contrib/eva/alpha.py @@ -35,11 +35,7 @@ def calc_ic(pred: pd.Series, label: pd.Series, date_col="datetime", dropna=False def calc_long_short_return( - pred: pd.Series, - label: pd.Series, - date_col: str = "datetime", - quantile: float = 0.2, - dropna: bool = False, + pred: pd.Series, label: pd.Series, date_col: str = "datetime", quantile: float = 0.2, dropna: bool = False, ) -> Tuple[pd.Series, pd.Series]: """ calculate long-short return diff --git a/qlib/contrib/evaluate.py b/qlib/contrib/evaluate.py index 4aa5b5515..5cb1ce4eb 100644 --- a/qlib/contrib/evaluate.py +++ b/qlib/contrib/evaluate.py @@ -244,12 +244,7 @@ def long_short_backtest( short_returns[date] = np.mean(short_profit) + np.mean(all_profit) ls_returns[date] = np.mean(short_profit) + np.mean(long_profit) - return dict( - zip( - ["long", "short", "long_short"], - map(pd.Series, [long_returns, short_returns, ls_returns]), - ) - ) + return dict(zip(["long", "short", "long_short"], map(pd.Series, [long_returns, short_returns, ls_returns]),)) def t_run(): diff --git a/qlib/contrib/evaluate_portfolio.py b/qlib/contrib/evaluate_portfolio.py index 04ddd8db0..2d94105e4 100644 --- a/qlib/contrib/evaluate_portfolio.py +++ b/qlib/contrib/evaluate_portfolio.py @@ -64,12 +64,7 @@ def get_position_value(evaluate_date, position): instruments = list(set(instruments) - set(["cash"])) # filter 'cash' fields = ["$close"] close_data_df = D.features( - instruments, - fields, - start_time=evaluate_date, - end_time=evaluate_date, - freq="day", - disk_cache=0, + instruments, fields, start_time=evaluate_date, end_time=evaluate_date, freq="day", disk_cache=0, ) value = _get_position_value_from_df(evaluate_date, position, close_data_df) return value @@ -87,14 +82,7 @@ def get_position_list_value(positions): start_date, end_date = day_list[0], day_list[-1] # load data fields = ["$close"] - close_data_df = D.features( - instruments, - fields, - start_time=start_date, - end_time=end_date, - freq="day", - disk_cache=0, - ) + close_data_df = D.features(instruments, fields, start_time=start_date, end_time=end_date, freq="day", disk_cache=0,) # generate value # return dict for time:position_value value_dict = OrderedDict() diff --git a/qlib/contrib/model/catboost_model.py b/qlib/contrib/model/catboost_model.py index d57c32b70..2840c2cef 100644 --- a/qlib/contrib/model/catboost_model.py +++ b/qlib/contrib/model/catboost_model.py @@ -32,9 +32,7 @@ class CatBoostModel(Model): **kwargs ): df_train, df_valid = dataset.prepare( - ["train", "valid"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/model/pytorch_alstm.py b/qlib/contrib/model/pytorch_alstm.py index bbbb61851..306e68aad 100644 --- a/qlib/contrib/model/pytorch_alstm.py +++ b/qlib/contrib/model/pytorch_alstm.py @@ -118,10 +118,7 @@ class ALSTM(Model): torch.manual_seed(self.seed) self.ALSTM_model = ALSTMModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) @@ -211,17 +208,11 @@ class ALSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -328,14 +319,12 @@ class ALSTMModel(nn.Module): self.fc_out = nn.Linear(in_features=self.hid_size * 2, out_features=1) self.att_net = nn.Sequential() self.att_net.add_module( - "att_fc_in", - nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), + "att_fc_in", nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), ) self.att_net.add_module("att_dropout", torch.nn.Dropout(self.dropout)) self.att_net.add_module("att_act", nn.Tanh()) self.att_net.add_module( - "att_fc_out", - nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), + "att_fc_out", nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), ) self.att_net.add_module("att_softmax", nn.Softmax(dim=1)) diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 725568de8..612bacbec 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -123,10 +123,7 @@ class ALSTM(Model): torch.manual_seed(self.seed) self.ALSTM_model = ALSTMModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) @@ -198,11 +195,7 @@ class ALSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset, evals_result=dict(), verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -309,14 +302,12 @@ class ALSTMModel(nn.Module): self.fc_out = nn.Linear(in_features=self.hid_size * 2, out_features=1) self.att_net = nn.Sequential() self.att_net.add_module( - "att_fc_in", - nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), + "att_fc_in", nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), ) self.att_net.add_module("att_dropout", torch.nn.Dropout(self.dropout)) self.att_net.add_module("att_act", nn.Tanh()) self.att_net.add_module( - "att_fc_out", - nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), + "att_fc_out", nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), ) self.att_net.add_module("att_softmax", nn.Softmax(dim=1)) diff --git a/qlib/contrib/model/pytorch_gats.py b/qlib/contrib/model/pytorch_gats.py index 07048e1bc..c59dc9197 100644 --- a/qlib/contrib/model/pytorch_gats.py +++ b/qlib/contrib/model/pytorch_gats.py @@ -229,17 +229,11 @@ class GATs(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -340,19 +334,11 @@ class GATModel(nn.Module): if base_model == "GRU": self.rnn = nn.GRU( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) elif base_model == "LSTM": self.rnn = nn.LSTM( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) else: raise ValueError("unknown base model name `%s`" % base_model) diff --git a/qlib/contrib/model/pytorch_gats_ts.py b/qlib/contrib/model/pytorch_gats_ts.py index 1e94f56e4..dfc5f4ab5 100644 --- a/qlib/contrib/model/pytorch_gats_ts.py +++ b/qlib/contrib/model/pytorch_gats_ts.py @@ -242,11 +242,7 @@ class GATs(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset, evals_result=dict(), verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -361,19 +357,11 @@ class GATModel(nn.Module): if base_model == "GRU": self.rnn = nn.GRU( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) elif base_model == "LSTM": self.rnn = nn.LSTM( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) else: raise ValueError("unknown base model name `%s`" % base_model) diff --git a/qlib/contrib/model/pytorch_gru.py b/qlib/contrib/model/pytorch_gru.py index 84f863b9f..d2a774b65 100755 --- a/qlib/contrib/model/pytorch_gru.py +++ b/qlib/contrib/model/pytorch_gru.py @@ -118,10 +118,7 @@ class GRU(Model): torch.manual_seed(self.seed) self.gru_model = GRUModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.gru_model.parameters(), lr=self.lr) @@ -211,17 +208,11 @@ class GRU(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -305,11 +296,7 @@ class GRUModel(nn.Module): super().__init__() self.rnn = nn.GRU( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index bb6618b85..49f438cc3 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -123,10 +123,7 @@ class GRU(Model): torch.manual_seed(self.seed) self.GRU_model = GRUModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.GRU_model.parameters(), lr=self.lr) @@ -198,11 +195,7 @@ class GRU(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset, evals_result=dict(), verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -286,11 +279,7 @@ class GRUModel(nn.Module): super().__init__() self.rnn = nn.GRU( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_lstm.py b/qlib/contrib/model/pytorch_lstm.py index 163d500ec..02ca16e36 100755 --- a/qlib/contrib/model/pytorch_lstm.py +++ b/qlib/contrib/model/pytorch_lstm.py @@ -118,10 +118,7 @@ class LSTM(Model): torch.manual_seed(self.seed) self.lstm_model = LSTMModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.lstm_model.parameters(), lr=self.lr) @@ -211,17 +208,11 @@ class LSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -305,11 +296,7 @@ class LSTMModel(nn.Module): super().__init__() self.rnn = nn.LSTM( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_lstm_ts.py b/qlib/contrib/model/pytorch_lstm_ts.py index cf4f8fb9f..2ec36f96e 100755 --- a/qlib/contrib/model/pytorch_lstm_ts.py +++ b/qlib/contrib/model/pytorch_lstm_ts.py @@ -123,10 +123,7 @@ class LSTM(Model): torch.manual_seed(self.seed) self.LSTM_model = LSTMModel( - d_feat=self.d_feat, - hidden_size=self.hidden_size, - num_layers=self.num_layers, - dropout=self.dropout, + d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.LSTM_model.parameters(), lr=self.lr) @@ -198,11 +195,7 @@ class LSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, - dataset, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset, evals_result=dict(), verbose=True, save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -286,11 +279,7 @@ class LSTMModel(nn.Module): super().__init__() self.rnn = nn.LSTM( - input_size=d_feat, - hidden_size=hidden_size, - num_layers=num_layers, - batch_first=True, - dropout=dropout, + input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_nn.py b/qlib/contrib/model/pytorch_nn.py index 16fcea9ff..8c1a77ec3 100644 --- a/qlib/contrib/model/pytorch_nn.py +++ b/qlib/contrib/model/pytorch_nn.py @@ -154,11 +154,7 @@ class DNNModelPytorch(Model): self.dnn_model.to(self.device) def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid = dataset.prepare( ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L diff --git a/qlib/contrib/model/pytorch_sfm.py b/qlib/contrib/model/pytorch_sfm.py index d5169e6c7..1f7433e05 100644 --- a/qlib/contrib/model/pytorch_sfm.py +++ b/qlib/contrib/model/pytorch_sfm.py @@ -30,14 +30,7 @@ from ...data.dataset.handler import DataHandlerLP class SFM_Model(nn.Module): def __init__( - self, - d_feat=6, - output_dim=1, - freq_dim=10, - hidden_size=64, - dropout_W=0.0, - dropout_U=0.0, - device="cpu", + self, d_feat=6, output_dim=1, freq_dim=10, hidden_size=64, dropout_W=0.0, dropout_U=0.0, device="cpu", ): super().__init__() @@ -362,17 +355,11 @@ class SFM(Model): self.train_optimizer.step() def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): df_train, df_valid = dataset.prepare( - ["train", "valid"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index 62e32d701..18e9d8eb4 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -120,9 +120,7 @@ class TabnetModel(Model): os.makedirs("pretrain") [df_train, df_valid] = dataset.prepare( - ["pretrain", "pretrain_validation"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["pretrain", "pretrain_validation"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) df_train.fillna(df_train.mean(), inplace=True) @@ -156,11 +154,7 @@ class TabnetModel(Model): break def fit( - self, - dataset: DatasetH, - evals_result=dict(), - verbose=True, - save_path=None, + self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, ): if self.pretrain: # there is a pretrained model, load the model @@ -172,9 +166,7 @@ class TabnetModel(Model): # adding one more linear layer to fit the final output dimension self.tabnet_model = FinetuneModel(self.out_dim, self.final_out_dim, self.tabnet_model).to(self.device) df_train, df_valid = dataset.prepare( - ["train", "valid"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) df_train.fillna(df_train.mean(), inplace=True) x_train, y_train = df_train["feature"], df_train["label"] diff --git a/qlib/contrib/model/xgboost.py b/qlib/contrib/model/xgboost.py index ba2e5789b..e37725c2e 100755 --- a/qlib/contrib/model/xgboost.py +++ b/qlib/contrib/model/xgboost.py @@ -29,9 +29,7 @@ class XGBModel(Model): ): df_train, df_valid = dataset.prepare( - ["train", "valid"], - col_set=["feature", "label"], - data_key=DataHandlerLP.DK_L, + ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/online/executor.py b/qlib/contrib/online/executor.py index 2bd0937a0..52b868881 100644 --- a/qlib/contrib/online/executor.py +++ b/qlib/contrib/online/executor.py @@ -150,21 +150,13 @@ class SimulatorExecutor(BaseExecutor): if order.direction == Order.SELL: # sell print( "[I {:%Y-%m-%d}]: sell {}, price {:.2f}, amount {}, value {:.2f}.".format( - trade_date, - order.stock_id, - trade_price, - order.deal_amount, - trade_val, + trade_date, order.stock_id, trade_price, order.deal_amount, trade_val, ) ) else: print( "[I {:%Y-%m-%d}]: buy {}, price {:.2f}, amount {}, value {:.2f}.".format( - trade_date, - order.stock_id, - trade_price, - order.deal_amount, - trade_val, + trade_date, order.stock_id, trade_price, order.deal_amount, trade_val, ) ) @@ -271,21 +263,13 @@ def load_order_list(user_path, trade_date): for stock_id in order_dict["sell"]: amount, factor = order_dict["sell"][stock_id] order = Order( - stock_id=stock_id, - amount=amount, - trade_date=pd.Timestamp(trade_date), - direction=Order.SELL, - factor=factor, + stock_id=stock_id, amount=amount, trade_date=pd.Timestamp(trade_date), direction=Order.SELL, factor=factor, ) order_list.append(order) for stock_id in order_dict["buy"]: amount, factor = order_dict["buy"][stock_id] order = Order( - stock_id=stock_id, - amount=amount, - trade_date=pd.Timestamp(trade_date), - direction=Order.BUY, - factor=factor, + stock_id=stock_id, amount=amount, trade_date=pd.Timestamp(trade_date), direction=Order.BUY, factor=factor, ) order_list.append(order) return order_list diff --git a/qlib/contrib/online/manager.py b/qlib/contrib/online/manager.py index cf850b9da..a4476709d 100644 --- a/qlib/contrib/online/manager.py +++ b/qlib/contrib/online/manager.py @@ -84,12 +84,10 @@ class UserManager: raise ValueError("Cannot find user {}".format(user_id)) self.users[user_id].account.save_account(self.data_path / user_id) save_instance( - self.users[user_id].strategy, - self.data_path / user_id / "strategy_{}.pickle".format(user_id), + self.users[user_id].strategy, self.data_path / user_id / "strategy_{}.pickle".format(user_id), ) save_instance( - self.users[user_id].model, - self.data_path / user_id / "model_{}.pickle".format(user_id), + self.users[user_id].model, self.data_path / user_id / "model_{}.pickle".format(user_id), ) def add_user(self, user_id, config_file, add_date): diff --git a/qlib/contrib/online/operator.py b/qlib/contrib/online/operator.py index c8b44f578..c82deb394 100644 --- a/qlib/contrib/online/operator.py +++ b/qlib/contrib/online/operator.py @@ -125,9 +125,7 @@ class Operator: trade_date=trade_date, ) save_order_list( - order_list=order_list, - user_path=(pathlib.Path(path) / user_id), - trade_date=trade_date, + order_list=order_list, user_path=(pathlib.Path(path) / user_id), trade_date=trade_date, ) self.logger.info("Generate order list at {} for {}".format(trade_date, user_id)) um.save_user_data(user_id) @@ -160,9 +158,7 @@ class Operator: order_list = load_order_list(user_path=(pathlib.Path(path) / user_id), trade_date=trade_date) trade_info = executor.execute(order_list=order_list, trade_account=user.account, trade_date=trade_date) executor.save_executed_file_from_trade_info( - trade_info=trade_info, - user_path=(pathlib.Path(path) / user_id), - trade_date=trade_date, + trade_info=trade_info, user_path=(pathlib.Path(path) / user_id), trade_date=trade_date, ) self.logger.info("execute order list at {} for {}".format(trade_date.date(), user_id)) diff --git a/qlib/contrib/online/utils.py b/qlib/contrib/online/utils.py index 611af63e4..fb96c87bd 100644 --- a/qlib/contrib/online/utils.py +++ b/qlib/contrib/online/utils.py @@ -79,11 +79,7 @@ def prepare(um, today, user_id, exchange_config=None): log.warning("user_id:{}, last trading date {} after today {}".format(user_id, latest_trading_date, today)) return [pd.Timestamp(latest_trading_date)], None - dates = D.calendar( - start_time=pd.Timestamp(latest_trading_date), - end_time=pd.Timestamp(today), - future=True, - ) + dates = D.calendar(start_time=pd.Timestamp(latest_trading_date), end_time=pd.Timestamp(today), future=True,) dates = list(dates) dates.append(get_next_trading_date(dates[-1], future=True)) if exchange_config: diff --git a/qlib/contrib/report/analysis_model/analysis_model_performance.py b/qlib/contrib/report/analysis_model/analysis_model_performance.py index 1cb14d261..ef1447a12 100644 --- a/qlib/contrib/report/analysis_model/analysis_model_performance.py +++ b/qlib/contrib/report/analysis_model/analysis_model_performance.py @@ -53,8 +53,7 @@ def _group_return(pred_label: pd.DataFrame = None, reverse: bool = False, N: int t_df.index = t_df.index.strftime("%Y-%m-%d") # Cumulative Return By Group group_scatter_figure = ScatterGraph( - t_df.cumsum(), - layout=dict(title="Cumulative Return", xaxis=dict(type="category", tickangle=45)), + t_df.cumsum(), layout=dict(title="Cumulative Return", xaxis=dict(type="category", tickangle=45)), ).figure t_df = t_df.loc[:, ["long-short", "long-average"]] @@ -62,12 +61,7 @@ def _group_return(pred_label: pd.DataFrame = None, reverse: bool = False, N: int group_hist_figure = SubplotsGraph( t_df, kind_map=dict(kind="DistplotGraph", kwargs=dict(bin_size=_bin_size)), - subplots_kwargs=dict( - rows=1, - cols=2, - print_grid=False, - subplot_titles=["long-short", "long-average"], - ), + subplots_kwargs=dict(rows=1, cols=2, print_grid=False, subplot_titles=["long-short", "long-average"],), ).figure return group_scatter_figure, group_hist_figure @@ -102,15 +96,12 @@ def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> t _index = ic.index.get_level_values(0).astype("str").str.replace("-", "").str.slice(0, 6) _monthly_ic = ic.groupby(_index).mean() _monthly_ic.index = pd.MultiIndex.from_arrays( - [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], - names=["year", "month"], + [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], names=["year", "month"], ) # fill month _month_list = pd.date_range( - start=pd.Timestamp(f"{_index.min()[:4]}0101"), - end=pd.Timestamp(f"{_index.max()[:4]}1231"), - freq="1M", + start=pd.Timestamp(f"{_index.min()[:4]}0101"), end=pd.Timestamp(f"{_index.max()[:4]}1231"), freq="1M", ) _years = [] _month = [] @@ -142,32 +133,15 @@ def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> t _bin_size = ((_ic_df.max() - _ic_df.min()) / 20).min() _sub_graph_data = [ - ( - "ic", - dict( - row=1, - col=1, - name="", - kind="DistplotGraph", - graph_kwargs=dict(bin_size=_bin_size), - ), - ), + ("ic", dict(row=1, col=1, name="", kind="DistplotGraph", graph_kwargs=dict(bin_size=_bin_size),),), (_qqplot_fig, dict(row=1, col=2)), ] ic_hist_figure = SubplotsGraph( _ic_df.dropna(), kind_map=dict(kind="HistogramGraph", kwargs=dict()), - subplots_kwargs=dict( - rows=1, - cols=2, - print_grid=False, - subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name], - ), + subplots_kwargs=dict(rows=1, cols=2, print_grid=False, subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name],), sub_graph_data=_sub_graph_data, - layout=dict( - yaxis2=dict(title="Observed Quantile"), - xaxis2=dict(title=f"{dist_name} Distribution Quantile"), - ), + layout=dict(yaxis2=dict(title="Observed Quantile"), xaxis2=dict(title=f"{dist_name} Distribution Quantile"),), ).figure return ic_bar_figure, ic_heatmap_figure, ic_hist_figure @@ -181,8 +155,7 @@ def _pred_autocorr(pred_label: pd.DataFrame, lag=1, **kwargs) -> tuple: _df = ac.to_frame("value") _df.index = _df.index.strftime("%Y-%m-%d") ac_figure = ScatterGraph( - _df, - layout=dict(title="Auto Correlation", xaxis=dict(type="category", tickangle=45)), + _df, layout=dict(title="Auto Correlation", xaxis=dict(type="category", tickangle=45)), ).figure return (ac_figure,) @@ -202,17 +175,11 @@ def _pred_turnover(pred_label: pd.DataFrame, N=5, lag=1, **kwargs) -> tuple: .sum() / (len(x) // N) ) - r_df = pd.DataFrame( - { - "Top": top, - "Bottom": bottom, - } - ) + r_df = pd.DataFrame({"Top": top, "Bottom": bottom,}) # FIXME: support HIGH-FREQ r_df.index = r_df.index.strftime("%Y-%m-%d") turnover_figure = ScatterGraph( - r_df, - layout=dict(title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45)), + r_df, layout=dict(title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45)), ).figure return (turnover_figure,) @@ -230,11 +197,7 @@ def ic_figure(ic_df: pd.DataFrame, show_nature_day=True, **kwargs) -> go.Figure: # FIXME: support HIGH-FREQ ic_df.index = ic_df.index.strftime("%Y-%m-%d") ic_bar_figure = BarGraph( - ic_df, - layout=dict( - title="Information Coefficient (IC)", - xaxis=dict(type="category", tickangle=45), - ), + ic_df, layout=dict(title="Information Coefficient (IC)", xaxis=dict(type="category", tickangle=45),), ).figure return ic_bar_figure @@ -277,12 +240,7 @@ def model_performance_graph( figure_list = [] for graph_name in graph_names: fun_res = eval(f"_{graph_name}")( - pred_label=pred_label, - lag=lag, - N=N, - reverse=reverse, - rank=rank, - show_nature_day=show_nature_day, + pred_label=pred_label, lag=lag, N=N, reverse=reverse, rank=rank, show_nature_day=show_nature_day, ) figure_list += fun_res diff --git a/qlib/contrib/report/analysis_position/cumulative_return.py b/qlib/contrib/report/analysis_position/cumulative_return.py index abb68ea60..604189c94 100644 --- a/qlib/contrib/report/analysis_position/cumulative_return.py +++ b/qlib/contrib/report/analysis_position/cumulative_return.py @@ -13,11 +13,7 @@ from ..analysis_position.parse_position import get_position_data def _get_cum_return_data_with_position( - position: dict, - report_normal: pd.DataFrame, - label_data: pd.DataFrame, - start_date=None, - end_date=None, + position: dict, report_normal: pd.DataFrame, label_data: pd.DataFrame, start_date=None, end_date=None, ): """ @@ -29,11 +25,7 @@ def _get_cum_return_data_with_position( :return: """ _cumulative_return_df = get_position_data( - position=position, - report_normal=report_normal, - label_data=label_data, - start_date=start_date, - end_date=end_date, + position=position, report_normal=report_normal, label_data=label_data, start_date=start_date, end_date=end_date, ).copy() _cumulative_return_df["label"] = _cumulative_return_df["label"] - _cumulative_return_df["bench"] @@ -87,11 +79,7 @@ def _get_cum_return_data_with_position( def _get_figure_with_position( - position: dict, - report_normal: pd.DataFrame, - label_data: pd.DataFrame, - start_date=None, - end_date=None, + position: dict, report_normal: pd.DataFrame, label_data: pd.DataFrame, start_date=None, end_date=None, ) -> Iterable[go.Figure]: """Get average analysis figures @@ -111,18 +99,12 @@ def _get_figure_with_position( # Create figures for _t_name in ["buy", "sell", "buy_minus_sell", "hold"]: sub_graph_data = [ - ( - "cum_{}".format(_t_name), - dict(row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"}), - ), + ("cum_{}".format(_t_name), dict(row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"}),), ( "{}_weight".format(_t_name.replace("minus", "plus") if "minus" in _t_name else _t_name), dict(row=2, col=1), ), - ( - "{}_value".format(_t_name), - dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}), - ), + ("{}_value".format(_t_name), dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}),), ] _default_xaxis = dict(showline=False, zeroline=True, tickangle=45) @@ -161,13 +143,7 @@ def _get_figure_with_position( [{"rowspan": 1}, None], ] subplots_kwargs = dict( - vertical_spacing=0.01, - rows=2, - cols=2, - row_width=[1, 2], - column_width=[3, 1], - print_grid=False, - specs=specs, + vertical_spacing=0.01, rows=2, cols=2, row_width=[1, 2], column_width=[3, 1], print_grid=False, specs=specs, ) yield SubplotsGraph( cum_return_df, diff --git a/qlib/contrib/report/analysis_position/parse_position.py b/qlib/contrib/report/analysis_position/parse_position.py index fe1d61137..23f9c592c 100644 --- a/qlib/contrib/report/analysis_position/parse_position.py +++ b/qlib/contrib/report/analysis_position/parse_position.py @@ -72,10 +72,7 @@ def parse_position(position: dict = None) -> pd.DataFrame: result_df = result_df.append(_trading_day_df, sort=True) - previous_data = dict( - date=_trading_date, - code_list=_trading_day_df[_trading_day_df["status"] != -1].index, - ) + previous_data = dict(date=_trading_date, code_list=_trading_day_df[_trading_day_df["status"] != -1].index,) result_df.reset_index(inplace=True) result_df.rename(columns={"date": "datetime", "index": "instrument"}, inplace=True) diff --git a/qlib/contrib/report/analysis_position/rank_label.py b/qlib/contrib/report/analysis_position/rank_label.py index 72a358adc..9a4d834ed 100644 --- a/qlib/contrib/report/analysis_position/rank_label.py +++ b/qlib/contrib/report/analysis_position/rank_label.py @@ -23,11 +23,7 @@ def _get_figure_with_position( :return: """ _position_df = get_position_data( - position, - label_data, - calculate_label_rank=True, - start_date=start_date, - end_date=end_date, + position, label_data, calculate_label_rank=True, start_date=start_date, end_date=end_date, ) res_dict = dict() @@ -51,20 +47,14 @@ def _get_figure_with_position( yield ScatterGraph( _res_df.loc[:, [_col]], layout=dict( - title=_col, - xaxis=dict(type="category", tickangle=45), - yaxis=dict(title="lable-rank-ratio: %"), + title=_col, xaxis=dict(type="category", tickangle=45), yaxis=dict(title="lable-rank-ratio: %"), ), graph_kwargs=dict(mode="lines+markers"), ).figure def rank_label_graph( - position: dict, - label_data: pd.DataFrame, - start_date=None, - end_date=None, - show_notebook=True, + position: dict, label_data: pd.DataFrame, start_date=None, end_date=None, show_notebook=True, ) -> Iterable[go.Figure]: """Ranking percentage of stocks buy, sell, and holding on the trading day. Average rank-ratio(similar to **sell_df['label'].rank(ascending=False) / len(sell_df)**) of daily trading diff --git a/qlib/contrib/report/analysis_position/report.py b/qlib/contrib/report/analysis_position/report.py index f82e654c4..8e2c05c0a 100644 --- a/qlib/contrib/report/analysis_position/report.py +++ b/qlib/contrib/report/analysis_position/report.py @@ -123,9 +123,7 @@ def _report_figure(df: pd.DataFrame) -> [list, tuple]: "y1": 1, "fillcolor": "#d3d3d3", "opacity": 0.3, - "line": { - "width": 0, - }, + "line": {"width": 0,}, }, { "type": "rect", @@ -137,20 +135,13 @@ def _report_figure(df: pd.DataFrame) -> [list, tuple]: "y1": 0.55, "fillcolor": "#d3d3d3", "opacity": 0.3, - "line": { - "width": 0, - }, + "line": {"width": 0,}, }, ], ) _subplot_kwargs = dict( - shared_xaxes=True, - vertical_spacing=0.01, - rows=7, - cols=1, - row_width=[1, 1, 1, 3, 1, 1, 3], - print_grid=False, + shared_xaxes=True, vertical_spacing=0.01, rows=7, cols=1, row_width=[1, 1, 1, 3, 1, 1, 3], print_grid=False, ) figure = SubplotsGraph( df=report_df, diff --git a/qlib/contrib/report/graph.py b/qlib/contrib/report/graph.py index 70e382fb1..dbbc41110 100644 --- a/qlib/contrib/report/graph.py +++ b/qlib/contrib/report/graph.py @@ -311,11 +311,7 @@ class SubplotsGraph: _temp_row_data = ( column_name, dict( - row=row, - col=col, - name=res_name, - kind=self._kind_map["kind"], - graph_kwargs=self._kind_map["kwargs"], + row=row, col=col, name=res_name, kind=self._kind_map["kind"], graph_kwargs=self._kind_map["kwargs"], ), ) self._sub_graph_data.append(_temp_row_data) diff --git a/qlib/contrib/strategy/cost_control.py b/qlib/contrib/strategy/cost_control.py index dd90437b0..ee3ee03ec 100644 --- a/qlib/contrib/strategy/cost_control.py +++ b/qlib/contrib/strategy/cost_control.py @@ -57,10 +57,7 @@ class SoftTopkStrategy(WeightStrategyBase): final_stock_weight[stock_id] -= sw if self.buy_method == "first_fill": for stock_id in buy_signal_stocks: - add_weight = min( - max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), - sold_stock_weight, - ) + add_weight = min(max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), sold_stock_weight,) final_stock_weight[stock_id] = final_stock_weight.get(stock_id, 0.0) + add_weight sold_stock_weight -= add_weight elif self.buy_method == "average_fill": diff --git a/qlib/contrib/strategy/order_generator.py b/qlib/contrib/strategy/order_generator.py index 494981ecc..6f168b4dd 100644 --- a/qlib/contrib/strategy/order_generator.py +++ b/qlib/contrib/strategy/order_generator.py @@ -102,14 +102,10 @@ class OrderGenWInteract(OrderGenerator): # strategy 1 : generate amount_position by weight_position # Use API in Exchange() target_amount_dict = trade_exchange.generate_amount_position_from_weight_position( - weight_position=target_weight_position, - cash=current_tradable_value, - trade_date=trade_date, + weight_position=target_weight_position, cash=current_tradable_value, trade_date=trade_date, ) order_list = trade_exchange.generate_order_for_target_amount_position( - target_position=target_amount_dict, - current_position=current_amount_dict, - trade_date=trade_date, + target_position=target_amount_dict, current_position=current_amount_dict, trade_date=trade_date, ) return order_list @@ -164,8 +160,6 @@ class OrderGenWOInteract(OrderGenerator): else: continue order_list = trade_exchange.generate_order_for_target_amount_position( - target_position=amount_dict, - current_position=current.get_stock_amount_dict(), - trade_date=trade_date, + target_position=amount_dict, current_position=current.get_stock_amount_dict(), trade_date=trade_date, ) return order_list diff --git a/qlib/contrib/tuner/launcher.py b/qlib/contrib/tuner/launcher.py index 711658c9a..409410a2a 100644 --- a/qlib/contrib/tuner/launcher.py +++ b/qlib/contrib/tuner/launcher.py @@ -13,11 +13,7 @@ from .config import TunerConfigManager args_parser = argparse.ArgumentParser(prog="tuner") args_parser.add_argument( - "-c", - "--config_path", - required=True, - type=str, - help="config path indicates where to load yaml config.", + "-c", "--config_path", required=True, type=str, help="config path indicates where to load yaml config.", ) args = args_parser.parse_args() diff --git a/qlib/contrib/tuner/space.py b/qlib/contrib/tuner/space.py index 76f101671..57f57a6c3 100644 --- a/qlib/contrib/tuner/space.py +++ b/qlib/contrib/tuner/space.py @@ -10,8 +10,5 @@ TopkAmountStrategySpace = { } QLibDataLabelSpace = { - "labels": hp.choice( - "labels", - [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]], - ) + "labels": hp.choice("labels", [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]],) } diff --git a/qlib/contrib/tuner/tuner.py b/qlib/contrib/tuner/tuner.py index 2ce957859..e81d41a9a 100644 --- a/qlib/contrib/tuner/tuner.py +++ b/qlib/contrib/tuner/tuner.py @@ -28,10 +28,7 @@ class Tuner: self.optim_config = optim_config self.max_evals = self.tuner_config.get("max_evals", 10) - self.ex_dir = os.path.join( - self.tuner_config["experiment"]["dir"], - self.tuner_config["experiment"]["name"], - ) + self.ex_dir = os.path.join(self.tuner_config["experiment"]["dir"], self.tuner_config["experiment"]["name"],) self.best_params = None self.best_res = None @@ -42,10 +39,7 @@ class Tuner: TimeInspector.set_time_mark() fmin( - fn=self.objective, - space=self.space, - algo=tpe.suggest, - max_evals=self.max_evals, + fn=self.objective, space=self.space, algo=tpe.suggest, max_evals=self.max_evals, ) self.logger.info("Local best params: {} ".format(self.best_params)) TimeInspector.log_cost_time( @@ -159,8 +153,7 @@ class QLibTuner(Tuner): estimator_config["data"]["args"].update(params["data_label_space"]) estimator_path = os.path.join( - self.tuner_config["experiment"].get("dir", "../"), - QLibTuner.ESTIMATOR_CONFIG_NAME, + self.tuner_config["experiment"].get("dir", "../"), QLibTuner.ESTIMATOR_CONFIG_NAME, ) with open(estimator_path, "w") as fp: @@ -173,27 +166,20 @@ class QLibTuner(Tuner): model_space_name = self.tuner_config["model"].get("space", None) if model_space_name is None: raise ValueError("Please give the search space of model.") - model_space = getattr( - importlib.import_module(".space", package="qlib.contrib.tuner"), - model_space_name, - ) + model_space = getattr(importlib.import_module(".space", package="qlib.contrib.tuner"), model_space_name,) # 2. Setup strategy space strategy_space_name = self.tuner_config["strategy"].get("space", None) if strategy_space_name is None: raise ValueError("Please give the search space of strategy.") - strategy_space = getattr( - importlib.import_module(".space", package="qlib.contrib.tuner"), - strategy_space_name, - ) + strategy_space = getattr(importlib.import_module(".space", package="qlib.contrib.tuner"), strategy_space_name,) # 3. Setup data label space if given if self.tuner_config.get("data_label", None) is not None: data_label_space_name = self.tuner_config["data_label"].get("space", None) if data_label_space_name is not None: data_label_space = getattr( - importlib.import_module(".space", package="qlib.contrib.tuner"), - data_label_space_name, + importlib.import_module(".space", package="qlib.contrib.tuner"), data_label_space_name, ) else: data_label_space_name = None diff --git a/qlib/data/client.py b/qlib/data/client.py index 5244a7e45..d1a68cb38 100644 --- a/qlib/data/client.py +++ b/qlib/data/client.py @@ -26,8 +26,7 @@ class Client: self.logger = get_module_logger(self.__class__.__name__) # bind connect/disconnect callbacks self.sio.on( - "connect", - lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), + "connect", lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), ) self.sio.on("disconnect", lambda: self.logger.debug("Disconnect from server!")) diff --git a/qlib/data/data.py b/qlib/data/data.py index 762467da3..47cded79c 100644 --- a/qlib/data/data.py +++ b/qlib/data/data.py @@ -328,14 +328,7 @@ class DatasetProvider(abc.ABC): raise NotImplementedError("Subclass of DatasetProvider must implement `Dataset` method") def _uri( - self, - instruments, - fields, - start_time=None, - end_time=None, - freq="day", - disk_cache=1, - **kwargs, + self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=1, **kwargs, ): """Get task uri, used when generating rabbitmq task in qlib_server @@ -414,29 +407,13 @@ class DatasetProvider(abc.ABC): for inst, spans in instruments_d.items(): data[inst] = p.apply_async( DatasetProvider.expression_calculator, - args=( - inst, - start_time, - end_time, - freq, - normalize_column_names, - spans, - C, - ), + args=(inst, start_time, end_time, freq, normalize_column_names, spans, C,), ) else: for inst in instruments_d: data[inst] = p.apply_async( DatasetProvider.expression_calculator, - args=( - inst, - start_time, - end_time, - freq, - normalize_column_names, - None, - C, - ), + args=(inst, start_time, end_time, freq, normalize_column_names, None, C,), ) p.close() @@ -598,12 +575,7 @@ class LocalInstrumentProvider(InstrumentProvider): start_time = pd.Timestamp(start_time or cal[0]) end_time = pd.Timestamp(end_time or cal[-1]) _instruments_filtered = { - inst: list( - filter( - lambda x: x[0] <= x[1], - [(max(start_time, x[0]), min(end_time, x[1])) for x in spans], - ) - ) + inst: list(filter(lambda x: x[0] <= x[1], [(max(start_time, x[0]), min(end_time, x[1])) for x in spans],)) for inst, spans in _instruments.items() } _instruments_filtered = {key: value for key, value in _instruments_filtered.items() if value} @@ -723,14 +695,7 @@ class LocalDatasetProvider(DatasetProvider): for inst in instruments_d: p.apply_async( - LocalDatasetProvider.cache_walker, - args=( - inst, - start_time, - end_time, - freq, - column_names, - ), + LocalDatasetProvider.cache_walker, args=(inst, start_time, end_time, freq, column_names,), ) p.close() @@ -763,12 +728,7 @@ class ClientCalendarProvider(CalendarProvider): def calendar(self, start_time=None, end_time=None, freq="day", future=False): self.conn.send_request( request_type="calendar", - request_content={ - "start_time": str(start_time), - "end_time": str(end_time), - "freq": freq, - "future": future, - }, + request_content={"start_time": str(start_time), "end_time": str(end_time), "freq": freq, "future": future,}, msg_queue=self.queue, msg_proc_func=lambda response_content: [pd.Timestamp(c) for c in response_content], ) @@ -832,14 +792,7 @@ class ClientDatasetProvider(DatasetProvider): self.queue = queue.Queue() def dataset( - self, - instruments, - fields, - start_time=None, - end_time=None, - freq="day", - disk_cache=0, - return_uri=False, + self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=0, return_uri=False, ): if Inst.get_inst_type(instruments) == Inst.DICT: get_module_logger("data").warning( @@ -942,13 +895,7 @@ class BaseProvider: return Inst.list_instruments(instruments, start_time, end_time, freq, as_list) def features( - self, - instruments, - fields, - start_time=None, - end_time=None, - freq="day", - disk_cache=None, + self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=None, ): """ Parameters: diff --git a/qlib/data/dataset/utils.py b/qlib/data/dataset/utils.py index feda19044..58e2bd968 100644 --- a/qlib/data/dataset/utils.py +++ b/qlib/data/dataset/utils.py @@ -32,10 +32,7 @@ def get_level_index(df: pd.DataFrame, level=Union[str, int]) -> int: def fetch_df_by_index( - df: pd.DataFrame, - selector: Union[pd.Timestamp, slice, str, list], - level: Union[str, int], - fetch_orig=True, + df: pd.DataFrame, selector: Union[pd.Timestamp, slice, str, list], level: Union[str, int], fetch_orig=True, ) -> pd.DataFrame: """ fetch data from `data` with `selector` and `level` diff --git a/qlib/data/filter.py b/qlib/data/filter.py index 70f9d3278..811fd387f 100644 --- a/qlib/data/filter.py +++ b/qlib/data/filter.py @@ -341,12 +341,7 @@ class ExpressionDFilter(SeriesDFilter): # do not use dataset cache try: _features = DatasetD.dataset( - instruments, - [self.rule_expression], - fstart, - fend, - freq=self.filter_freq, - disk_cache=0, + instruments, [self.rule_expression], fstart, fend, freq=self.filter_freq, disk_cache=0, ) except TypeError: # use LocalDatasetProvider diff --git a/qlib/portfolio/__init__.py b/qlib/portfolio/__init__.py index b7c525821..59e481eb9 100644 --- a/qlib/portfolio/__init__.py +++ b/qlib/portfolio/__init__.py @@ -1,3 +1,2 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. - diff --git a/qlib/tests/__init__.py b/qlib/tests/__init__.py index f92e72787..eb6f9c5ed 100644 --- a/qlib/tests/__init__.py +++ b/qlib/tests/__init__.py @@ -18,10 +18,6 @@ class TestAutoData(unittest.TestCase): print(f"Qlib data is not found in {provider_uri}") GetData().qlib_data( - name="qlib_data_simple", - region="cn", - interval="1d", - target_dir=provider_uri, - delete_old=False, + name="qlib_data_simple", region="cn", interval="1d", target_dir=provider_uri, delete_old=False, ) init(provider_uri=provider_uri, region=REG_CN, **cls._setup_kwargs) diff --git a/qlib/workflow/record_temp.py b/qlib/workflow/record_temp.py index be458a24d..0c704b896 100644 --- a/qlib/workflow/record_temp.py +++ b/qlib/workflow/record_temp.py @@ -193,10 +193,7 @@ class SigAnaRecord(SignalRecord): } ) objects.update( - { - "long_short_r.pkl": long_short_r, - "long_avg_r.pkl": long_avg_r, - } + {"long_short_r.pkl": long_short_r, "long_avg_r.pkl": long_avg_r,} ) self.recorder.log_metrics(**metrics) self.recorder.save_objects(**objects, artifact_path=self.get_path()) diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py index f6e77cba4..8b3819c83 100644 --- a/tests/test_all_pipeline.py +++ b/tests/test_all_pipeline.py @@ -78,10 +78,7 @@ port_analysis_config = { "strategy": { "class": "TopkDropoutStrategy", "module_path": "qlib.contrib.strategy.strategy", - "kwargs": { - "topk": 50, - "n_drop": 5, - }, + "kwargs": {"topk": 50, "n_drop": 5,}, }, "backtest": { "verbose": False, @@ -176,9 +173,7 @@ class TestAllFlow(TestAutoData): def test_1_backtest(self): analyze_df = backtest_analysis(TestAllFlow.PRED_SCORE, TestAllFlow.RID) self.assertGreaterEqual( - analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], - 0.10, - "backtest failed", + analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], 0.10, "backtest failed", ) diff --git a/tests/test_dump_data.py b/tests/test_dump_data.py index dfa7f8556..de649c37e 100644 --- a/tests/test_dump_data.py +++ b/tests/test_dump_data.py @@ -40,9 +40,7 @@ class TestDumpData(unittest.TestCase): TestDumpData.STOCK_NAMES = list(map(lambda x: x.name[:-4].upper(), SOURCE_DIR.glob("*.csv"))) provider_uri = str(QLIB_DIR.resolve()) qlib.init( - provider_uri=provider_uri, - expression_cache=None, - dataset_cache=None, + provider_uri=provider_uri, expression_cache=None, dataset_cache=None, ) @classmethod @@ -54,10 +52,7 @@ class TestDumpData(unittest.TestCase): def test_1_dump_calendars(self): ori_calendars = set( - map( - pd.Timestamp, - pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values, - ) + map(pd.Timestamp, pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values,) ) res_calendars = set(D.calendar()) assert len(ori_calendars - res_calendars) == len(res_calendars - ori_calendars) == 0, "dump calendars failed" diff --git a/tests/test_get_data.py b/tests/test_get_data.py index c511d1b91..d5637b025 100644 --- a/tests/test_get_data.py +++ b/tests/test_get_data.py @@ -26,9 +26,7 @@ class TestGetData(unittest.TestCase): def setUpClass(cls) -> None: provider_uri = str(QLIB_DIR.resolve()) qlib.init( - provider_uri=provider_uri, - expression_cache=None, - dataset_cache=None, + provider_uri=provider_uri, expression_cache=None, dataset_cache=None, ) @classmethod diff --git a/tests/test_structured_cov_estimator.py b/tests/test_structured_cov_estimator.py index a3973be5a..494962cc3 100644 --- a/tests/test_structured_cov_estimator.py +++ b/tests/test_structured_cov_estimator.py @@ -33,7 +33,7 @@ class TestStructuredCovEstimator(unittest.TestCase): NUM_OBSERVATION = 200 EPS = 1e-6 - estimator = StructuredCovEstimator(scale_return=False, assume_centered=True, nan_option='fill') + estimator = StructuredCovEstimator(scale_return=False, assume_centered=True, nan_option="fill") X = np.random.rand(NUM_OBSERVATION, NUM_VARIABLE) @@ -50,7 +50,7 @@ class TestStructuredCovEstimator(unittest.TestCase): NUM_VARIABLE = 10 NUM_OBSERVATION = 200 - estimator = StructuredCovEstimator(scale_return=False, assume_centered=True, nan_option='fill') + estimator = StructuredCovEstimator(scale_return=False, assume_centered=True, nan_option="fill") X = np.random.rand(NUM_OBSERVATION, NUM_VARIABLE) From 53cf89d7c22f42234a452507cca67a98662e4ad9 Mon Sep 17 00:00:00 2001 From: Charles Young Date: Mon, 8 Mar 2021 19:43:03 +0800 Subject: [PATCH 083/134] Reformat with black. --- qlib/config.py | 24 +++++-- qlib/contrib/backtest/__init__.py | 18 ++++- qlib/contrib/backtest/profit_attribution.py | 23 +++++-- qlib/contrib/data/handler.py | 10 ++- qlib/contrib/eva/alpha.py | 6 +- qlib/contrib/evaluate.py | 7 +- qlib/contrib/evaluate_portfolio.py | 16 ++++- qlib/contrib/model/catboost_model.py | 4 +- qlib/contrib/model/pytorch_alstm.py | 21 ++++-- qlib/contrib/model/pytorch_alstm_ts.py | 17 +++-- qlib/contrib/model/pytorch_gats.py | 22 ++++-- qlib/contrib/model/pytorch_gats_ts.py | 18 ++++- qlib/contrib/model/pytorch_gru.py | 21 ++++-- qlib/contrib/model/pytorch_gru_ts.py | 17 ++++- qlib/contrib/model/pytorch_lstm.py | 21 ++++-- qlib/contrib/model/pytorch_lstm_ts.py | 17 ++++- qlib/contrib/model/pytorch_nn.py | 6 +- qlib/contrib/model/pytorch_sfm.py | 19 ++++- qlib/contrib/model/pytorch_tabnet.py | 14 +++- qlib/contrib/model/xgboost.py | 4 +- qlib/contrib/online/executor.py | 24 +++++-- qlib/contrib/online/manager.py | 6 +- qlib/contrib/online/operator.py | 8 ++- qlib/contrib/online/utils.py | 6 +- .../analysis_model_performance.py | 66 ++++++++++++++---- .../analysis_position/cumulative_return.py | 36 ++++++++-- .../analysis_position/parse_position.py | 5 +- .../report/analysis_position/rank_label.py | 16 ++++- .../report/analysis_position/report.py | 15 +++- qlib/contrib/report/graph.py | 6 +- qlib/contrib/strategy/cost_control.py | 5 +- qlib/contrib/strategy/order_generator.py | 12 +++- qlib/contrib/tuner/launcher.py | 6 +- qlib/contrib/tuner/space.py | 5 +- qlib/contrib/tuner/tuner.py | 26 +++++-- qlib/data/client.py | 3 +- qlib/data/data.py | 69 ++++++++++++++++--- qlib/data/dataset/utils.py | 5 +- qlib/data/filter.py | 7 +- qlib/portfolio/optimizer/enhanced_indexing.py | 6 +- qlib/tests/__init__.py | 6 +- qlib/workflow/record_temp.py | 5 +- tests/test_all_pipeline.py | 9 ++- tests/test_dump_data.py | 9 ++- tests/test_get_data.py | 4 +- 45 files changed, 548 insertions(+), 122 deletions(-) diff --git a/qlib/config.py b/qlib/config.py index 344eb8527..52b05568d 100644 --- a/qlib/config.py +++ b/qlib/config.py @@ -115,7 +115,12 @@ _default_config = { "format": "[%(process)s:%(threadName)s](%(asctime)s) %(levelname)s - %(name)s - [%(filename)s:%(lineno)d] - %(message)s" } }, - "filters": {"field_not_found": {"()": "qlib.log.LogFilter", "param": [".*?WARN: data not found for.*?"],}}, + "filters": { + "field_not_found": { + "()": "qlib.log.LogFilter", + "param": [".*?WARN: data not found for.*?"], + } + }, "handlers": { "console": { "class": "logging.StreamHandler", @@ -130,7 +135,10 @@ _default_config = { "exp_manager": { "class": "MLflowExpManager", "module_path": "qlib.workflow.expm", - "kwargs": {"uri": "file:" + str(Path(os.getcwd()).resolve() / "mlruns"), "default_exp_name": "Experiment",}, + "kwargs": { + "uri": "file:" + str(Path(os.getcwd()).resolve() / "mlruns"), + "default_exp_name": "Experiment", + }, }, } @@ -192,8 +200,16 @@ HIGH_FREQ_CONFIG = { } _default_region_config = { - REG_CN: {"trade_unit": 100, "limit_threshold": 0.099, "deal_price": "vwap",}, - REG_US: {"trade_unit": 1, "limit_threshold": None, "deal_price": "close",}, + REG_CN: { + "trade_unit": 100, + "limit_threshold": 0.099, + "deal_price": "vwap", + }, + REG_US: { + "trade_unit": 1, + "limit_threshold": None, + "deal_price": "close", + }, } diff --git a/qlib/contrib/backtest/__init__.py b/qlib/contrib/backtest/__init__.py index bd3494abf..aa24ffb0c 100644 --- a/qlib/contrib/backtest/__init__.py +++ b/qlib/contrib/backtest/__init__.py @@ -18,7 +18,13 @@ logger = get_module_logger("backtest caller") def get_strategy( - strategy=None, topk=50, margin=0.5, n_drop=5, risk_degree=0.95, str_type="dropout", adjust_dates=None, + strategy=None, + topk=50, + margin=0.5, + n_drop=5, + risk_degree=0.95, + str_type="dropout", + adjust_dates=None, ): """get_strategy @@ -69,7 +75,11 @@ def get_strategy( str_cls = getattr(strategy_pool, str_cls_dict.get(str_type)) strategy = str_cls( - topk=topk, buffer_margin=margin, n_drop=n_drop, risk_degree=risk_degree, adjust_dates=adjust_dates, + topk=topk, + buffer_margin=margin, + n_drop=n_drop, + risk_degree=risk_degree, + adjust_dates=adjust_dates, ) elif isinstance(strategy, (dict, str)): # 2) create strategy with init_instance_by_config @@ -162,7 +172,9 @@ def get_exchange( def get_executor( - executor=None, trade_exchange=None, verbose=True, + executor=None, + trade_exchange=None, + verbose=True, ): """get_executor diff --git a/qlib/contrib/backtest/profit_attribution.py b/qlib/contrib/backtest/profit_attribution.py index 355f06373..20c6f638f 100644 --- a/qlib/contrib/backtest/profit_attribution.py +++ b/qlib/contrib/backtest/profit_attribution.py @@ -12,7 +12,10 @@ from pathlib import Path def get_benchmark_weight( - bench, start_date=None, end_date=None, path=None, + bench, + start_date=None, + end_date=None, + path=None, ): """get_benchmark_weight @@ -213,7 +216,12 @@ def get_stock_group(stock_group_field_df, bench_stock_weight_df, group_method, g def brinson_pa( - positions, bench="SH000905", group_field="industry", group_method="category", group_n=None, deal_price="vwap", + positions, + bench="SH000905", + group_field="industry", + group_method="category", + group_n=None, + deal_price="vwap", ): """brinson profit attribution @@ -247,10 +255,17 @@ def brinson_pa( # suspend stock is NAN. So we have to get more date to forward fill the NAN shift_start_date = start_date - datetime.timedelta(days=250) instruments = D.list_instruments( - D.instruments(market="all"), start_time=shift_start_date, end_time=end_date, as_list=True, + D.instruments(market="all"), + start_time=shift_start_date, + end_time=end_date, + as_list=True, ) stock_df = D.features( - instruments, [group_field, deal_price], start_time=shift_start_date, end_time=end_date, freq="day", + instruments, + [group_field, deal_price], + start_time=shift_start_date, + end_time=end_date, + freq="day", ) stock_df.columns = [group_field, "deal_price"] diff --git a/qlib/contrib/data/handler.py b/qlib/contrib/data/handler.py index 574287819..970b032d6 100644 --- a/qlib/contrib/data/handler.py +++ b/qlib/contrib/data/handler.py @@ -21,7 +21,10 @@ def check_transform_proc(proc_l, fit_start_time, fit_end_time): fit_start_time is not None and fit_end_time is not None ), "Make sure `fit_start_time` and `fit_end_time` are not None." pkwargs.update( - {"fit_start_time": fit_start_time, "fit_end_time": fit_end_time,} + { + "fit_start_time": fit_start_time, + "fit_end_time": fit_end_time, + } ) new_l.append({"class": klass.__name__, "kwargs": pkwargs}) else: @@ -167,7 +170,10 @@ class Alpha158(DataHandlerLP): def get_feature_config(self): conf = { "kbar": {}, - "price": {"windows": [0], "feature": ["OPEN", "HIGH", "LOW", "VWAP"],}, + "price": { + "windows": [0], + "feature": ["OPEN", "HIGH", "LOW", "VWAP"], + }, "rolling": {}, } return self.parse_config_to_fields(conf) diff --git a/qlib/contrib/eva/alpha.py b/qlib/contrib/eva/alpha.py index 363a18458..c68571853 100644 --- a/qlib/contrib/eva/alpha.py +++ b/qlib/contrib/eva/alpha.py @@ -35,7 +35,11 @@ def calc_ic(pred: pd.Series, label: pd.Series, date_col="datetime", dropna=False def calc_long_short_return( - pred: pd.Series, label: pd.Series, date_col: str = "datetime", quantile: float = 0.2, dropna: bool = False, + pred: pd.Series, + label: pd.Series, + date_col: str = "datetime", + quantile: float = 0.2, + dropna: bool = False, ) -> Tuple[pd.Series, pd.Series]: """ calculate long-short return diff --git a/qlib/contrib/evaluate.py b/qlib/contrib/evaluate.py index 5cb1ce4eb..4aa5b5515 100644 --- a/qlib/contrib/evaluate.py +++ b/qlib/contrib/evaluate.py @@ -244,7 +244,12 @@ def long_short_backtest( short_returns[date] = np.mean(short_profit) + np.mean(all_profit) ls_returns[date] = np.mean(short_profit) + np.mean(long_profit) - return dict(zip(["long", "short", "long_short"], map(pd.Series, [long_returns, short_returns, ls_returns]),)) + return dict( + zip( + ["long", "short", "long_short"], + map(pd.Series, [long_returns, short_returns, ls_returns]), + ) + ) def t_run(): diff --git a/qlib/contrib/evaluate_portfolio.py b/qlib/contrib/evaluate_portfolio.py index 2d94105e4..04ddd8db0 100644 --- a/qlib/contrib/evaluate_portfolio.py +++ b/qlib/contrib/evaluate_portfolio.py @@ -64,7 +64,12 @@ def get_position_value(evaluate_date, position): instruments = list(set(instruments) - set(["cash"])) # filter 'cash' fields = ["$close"] close_data_df = D.features( - instruments, fields, start_time=evaluate_date, end_time=evaluate_date, freq="day", disk_cache=0, + instruments, + fields, + start_time=evaluate_date, + end_time=evaluate_date, + freq="day", + disk_cache=0, ) value = _get_position_value_from_df(evaluate_date, position, close_data_df) return value @@ -82,7 +87,14 @@ def get_position_list_value(positions): start_date, end_date = day_list[0], day_list[-1] # load data fields = ["$close"] - close_data_df = D.features(instruments, fields, start_time=start_date, end_time=end_date, freq="day", disk_cache=0,) + close_data_df = D.features( + instruments, + fields, + start_time=start_date, + end_time=end_date, + freq="day", + disk_cache=0, + ) # generate value # return dict for time:position_value value_dict = OrderedDict() diff --git a/qlib/contrib/model/catboost_model.py b/qlib/contrib/model/catboost_model.py index 2840c2cef..d57c32b70 100644 --- a/qlib/contrib/model/catboost_model.py +++ b/qlib/contrib/model/catboost_model.py @@ -32,7 +32,9 @@ class CatBoostModel(Model): **kwargs ): df_train, df_valid = dataset.prepare( - ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/model/pytorch_alstm.py b/qlib/contrib/model/pytorch_alstm.py index 306e68aad..bbbb61851 100644 --- a/qlib/contrib/model/pytorch_alstm.py +++ b/qlib/contrib/model/pytorch_alstm.py @@ -118,7 +118,10 @@ class ALSTM(Model): torch.manual_seed(self.seed) self.ALSTM_model = ALSTMModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) @@ -208,11 +211,17 @@ class ALSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -319,12 +328,14 @@ class ALSTMModel(nn.Module): self.fc_out = nn.Linear(in_features=self.hid_size * 2, out_features=1) self.att_net = nn.Sequential() self.att_net.add_module( - "att_fc_in", nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), + "att_fc_in", + nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), ) self.att_net.add_module("att_dropout", torch.nn.Dropout(self.dropout)) self.att_net.add_module("att_act", nn.Tanh()) self.att_net.add_module( - "att_fc_out", nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), + "att_fc_out", + nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), ) self.att_net.add_module("att_softmax", nn.Softmax(dim=1)) diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 612bacbec..725568de8 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -123,7 +123,10 @@ class ALSTM(Model): torch.manual_seed(self.seed) self.ALSTM_model = ALSTMModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.ALSTM_model.parameters(), lr=self.lr) @@ -195,7 +198,11 @@ class ALSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset, evals_result=dict(), verbose=True, save_path=None, + self, + dataset, + evals_result=dict(), + verbose=True, + save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -302,12 +309,14 @@ class ALSTMModel(nn.Module): self.fc_out = nn.Linear(in_features=self.hid_size * 2, out_features=1) self.att_net = nn.Sequential() self.att_net.add_module( - "att_fc_in", nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), + "att_fc_in", + nn.Linear(in_features=self.hid_size, out_features=int(self.hid_size / 2)), ) self.att_net.add_module("att_dropout", torch.nn.Dropout(self.dropout)) self.att_net.add_module("att_act", nn.Tanh()) self.att_net.add_module( - "att_fc_out", nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), + "att_fc_out", + nn.Linear(in_features=int(self.hid_size / 2), out_features=1, bias=False), ) self.att_net.add_module("att_softmax", nn.Softmax(dim=1)) diff --git a/qlib/contrib/model/pytorch_gats.py b/qlib/contrib/model/pytorch_gats.py index c59dc9197..07048e1bc 100644 --- a/qlib/contrib/model/pytorch_gats.py +++ b/qlib/contrib/model/pytorch_gats.py @@ -229,11 +229,17 @@ class GATs(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -334,11 +340,19 @@ class GATModel(nn.Module): if base_model == "GRU": self.rnn = nn.GRU( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) elif base_model == "LSTM": self.rnn = nn.LSTM( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) else: raise ValueError("unknown base model name `%s`" % base_model) diff --git a/qlib/contrib/model/pytorch_gats_ts.py b/qlib/contrib/model/pytorch_gats_ts.py index dfc5f4ab5..1e94f56e4 100644 --- a/qlib/contrib/model/pytorch_gats_ts.py +++ b/qlib/contrib/model/pytorch_gats_ts.py @@ -242,7 +242,11 @@ class GATs(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset, evals_result=dict(), verbose=True, save_path=None, + self, + dataset, + evals_result=dict(), + verbose=True, + save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -357,11 +361,19 @@ class GATModel(nn.Module): if base_model == "GRU": self.rnn = nn.GRU( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) elif base_model == "LSTM": self.rnn = nn.LSTM( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) else: raise ValueError("unknown base model name `%s`" % base_model) diff --git a/qlib/contrib/model/pytorch_gru.py b/qlib/contrib/model/pytorch_gru.py index d2a774b65..84f863b9f 100755 --- a/qlib/contrib/model/pytorch_gru.py +++ b/qlib/contrib/model/pytorch_gru.py @@ -118,7 +118,10 @@ class GRU(Model): torch.manual_seed(self.seed) self.gru_model = GRUModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.gru_model.parameters(), lr=self.lr) @@ -208,11 +211,17 @@ class GRU(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -296,7 +305,11 @@ class GRUModel(nn.Module): super().__init__() self.rnn = nn.GRU( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index 49f438cc3..bb6618b85 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -123,7 +123,10 @@ class GRU(Model): torch.manual_seed(self.seed) self.GRU_model = GRUModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.GRU_model.parameters(), lr=self.lr) @@ -195,7 +198,11 @@ class GRU(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset, evals_result=dict(), verbose=True, save_path=None, + self, + dataset, + evals_result=dict(), + verbose=True, + save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -279,7 +286,11 @@ class GRUModel(nn.Module): super().__init__() self.rnn = nn.GRU( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_lstm.py b/qlib/contrib/model/pytorch_lstm.py index 02ca16e36..163d500ec 100755 --- a/qlib/contrib/model/pytorch_lstm.py +++ b/qlib/contrib/model/pytorch_lstm.py @@ -118,7 +118,10 @@ class LSTM(Model): torch.manual_seed(self.seed) self.lstm_model = LSTMModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.lstm_model.parameters(), lr=self.lr) @@ -208,11 +211,17 @@ class LSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid, df_test = dataset.prepare( - ["train", "valid", "test"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid", "test"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] @@ -296,7 +305,11 @@ class LSTMModel(nn.Module): super().__init__() self.rnn = nn.LSTM( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_lstm_ts.py b/qlib/contrib/model/pytorch_lstm_ts.py index 2ec36f96e..cf4f8fb9f 100755 --- a/qlib/contrib/model/pytorch_lstm_ts.py +++ b/qlib/contrib/model/pytorch_lstm_ts.py @@ -123,7 +123,10 @@ class LSTM(Model): torch.manual_seed(self.seed) self.LSTM_model = LSTMModel( - d_feat=self.d_feat, hidden_size=self.hidden_size, num_layers=self.num_layers, dropout=self.dropout, + d_feat=self.d_feat, + hidden_size=self.hidden_size, + num_layers=self.num_layers, + dropout=self.dropout, ).to(self.device) if optimizer.lower() == "adam": self.train_optimizer = optim.Adam(self.LSTM_model.parameters(), lr=self.lr) @@ -195,7 +198,11 @@ class LSTM(Model): return np.mean(losses), np.mean(scores) def fit( - self, dataset, evals_result=dict(), verbose=True, save_path=None, + self, + dataset, + evals_result=dict(), + verbose=True, + save_path=None, ): dl_train = dataset.prepare("train", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) dl_valid = dataset.prepare("valid", col_set=["feature", "label"], data_key=DataHandlerLP.DK_L) @@ -279,7 +286,11 @@ class LSTMModel(nn.Module): super().__init__() self.rnn = nn.LSTM( - input_size=d_feat, hidden_size=hidden_size, num_layers=num_layers, batch_first=True, dropout=dropout, + input_size=d_feat, + hidden_size=hidden_size, + num_layers=num_layers, + batch_first=True, + dropout=dropout, ) self.fc_out = nn.Linear(hidden_size, 1) diff --git a/qlib/contrib/model/pytorch_nn.py b/qlib/contrib/model/pytorch_nn.py index 8c1a77ec3..16fcea9ff 100644 --- a/qlib/contrib/model/pytorch_nn.py +++ b/qlib/contrib/model/pytorch_nn.py @@ -154,7 +154,11 @@ class DNNModelPytorch(Model): self.dnn_model.to(self.device) def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid = dataset.prepare( ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L diff --git a/qlib/contrib/model/pytorch_sfm.py b/qlib/contrib/model/pytorch_sfm.py index 1f7433e05..d5169e6c7 100644 --- a/qlib/contrib/model/pytorch_sfm.py +++ b/qlib/contrib/model/pytorch_sfm.py @@ -30,7 +30,14 @@ from ...data.dataset.handler import DataHandlerLP class SFM_Model(nn.Module): def __init__( - self, d_feat=6, output_dim=1, freq_dim=10, hidden_size=64, dropout_W=0.0, dropout_U=0.0, device="cpu", + self, + d_feat=6, + output_dim=1, + freq_dim=10, + hidden_size=64, + dropout_W=0.0, + dropout_U=0.0, + device="cpu", ): super().__init__() @@ -355,11 +362,17 @@ class SFM(Model): self.train_optimizer.step() def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): df_train, df_valid = dataset.prepare( - ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index 18e9d8eb4..62e32d701 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -120,7 +120,9 @@ class TabnetModel(Model): os.makedirs("pretrain") [df_train, df_valid] = dataset.prepare( - ["pretrain", "pretrain_validation"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["pretrain", "pretrain_validation"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) df_train.fillna(df_train.mean(), inplace=True) @@ -154,7 +156,11 @@ class TabnetModel(Model): break def fit( - self, dataset: DatasetH, evals_result=dict(), verbose=True, save_path=None, + self, + dataset: DatasetH, + evals_result=dict(), + verbose=True, + save_path=None, ): if self.pretrain: # there is a pretrained model, load the model @@ -166,7 +172,9 @@ class TabnetModel(Model): # adding one more linear layer to fit the final output dimension self.tabnet_model = FinetuneModel(self.out_dim, self.final_out_dim, self.tabnet_model).to(self.device) df_train, df_valid = dataset.prepare( - ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) df_train.fillna(df_train.mean(), inplace=True) x_train, y_train = df_train["feature"], df_train["label"] diff --git a/qlib/contrib/model/xgboost.py b/qlib/contrib/model/xgboost.py index e37725c2e..ba2e5789b 100755 --- a/qlib/contrib/model/xgboost.py +++ b/qlib/contrib/model/xgboost.py @@ -29,7 +29,9 @@ class XGBModel(Model): ): df_train, df_valid = dataset.prepare( - ["train", "valid"], col_set=["feature", "label"], data_key=DataHandlerLP.DK_L, + ["train", "valid"], + col_set=["feature", "label"], + data_key=DataHandlerLP.DK_L, ) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] diff --git a/qlib/contrib/online/executor.py b/qlib/contrib/online/executor.py index 52b868881..2bd0937a0 100644 --- a/qlib/contrib/online/executor.py +++ b/qlib/contrib/online/executor.py @@ -150,13 +150,21 @@ class SimulatorExecutor(BaseExecutor): if order.direction == Order.SELL: # sell print( "[I {:%Y-%m-%d}]: sell {}, price {:.2f}, amount {}, value {:.2f}.".format( - trade_date, order.stock_id, trade_price, order.deal_amount, trade_val, + trade_date, + order.stock_id, + trade_price, + order.deal_amount, + trade_val, ) ) else: print( "[I {:%Y-%m-%d}]: buy {}, price {:.2f}, amount {}, value {:.2f}.".format( - trade_date, order.stock_id, trade_price, order.deal_amount, trade_val, + trade_date, + order.stock_id, + trade_price, + order.deal_amount, + trade_val, ) ) @@ -263,13 +271,21 @@ def load_order_list(user_path, trade_date): for stock_id in order_dict["sell"]: amount, factor = order_dict["sell"][stock_id] order = Order( - stock_id=stock_id, amount=amount, trade_date=pd.Timestamp(trade_date), direction=Order.SELL, factor=factor, + stock_id=stock_id, + amount=amount, + trade_date=pd.Timestamp(trade_date), + direction=Order.SELL, + factor=factor, ) order_list.append(order) for stock_id in order_dict["buy"]: amount, factor = order_dict["buy"][stock_id] order = Order( - stock_id=stock_id, amount=amount, trade_date=pd.Timestamp(trade_date), direction=Order.BUY, factor=factor, + stock_id=stock_id, + amount=amount, + trade_date=pd.Timestamp(trade_date), + direction=Order.BUY, + factor=factor, ) order_list.append(order) return order_list diff --git a/qlib/contrib/online/manager.py b/qlib/contrib/online/manager.py index a4476709d..cf850b9da 100644 --- a/qlib/contrib/online/manager.py +++ b/qlib/contrib/online/manager.py @@ -84,10 +84,12 @@ class UserManager: raise ValueError("Cannot find user {}".format(user_id)) self.users[user_id].account.save_account(self.data_path / user_id) save_instance( - self.users[user_id].strategy, self.data_path / user_id / "strategy_{}.pickle".format(user_id), + self.users[user_id].strategy, + self.data_path / user_id / "strategy_{}.pickle".format(user_id), ) save_instance( - self.users[user_id].model, self.data_path / user_id / "model_{}.pickle".format(user_id), + self.users[user_id].model, + self.data_path / user_id / "model_{}.pickle".format(user_id), ) def add_user(self, user_id, config_file, add_date): diff --git a/qlib/contrib/online/operator.py b/qlib/contrib/online/operator.py index c82deb394..c8b44f578 100644 --- a/qlib/contrib/online/operator.py +++ b/qlib/contrib/online/operator.py @@ -125,7 +125,9 @@ class Operator: trade_date=trade_date, ) save_order_list( - order_list=order_list, user_path=(pathlib.Path(path) / user_id), trade_date=trade_date, + order_list=order_list, + user_path=(pathlib.Path(path) / user_id), + trade_date=trade_date, ) self.logger.info("Generate order list at {} for {}".format(trade_date, user_id)) um.save_user_data(user_id) @@ -158,7 +160,9 @@ class Operator: order_list = load_order_list(user_path=(pathlib.Path(path) / user_id), trade_date=trade_date) trade_info = executor.execute(order_list=order_list, trade_account=user.account, trade_date=trade_date) executor.save_executed_file_from_trade_info( - trade_info=trade_info, user_path=(pathlib.Path(path) / user_id), trade_date=trade_date, + trade_info=trade_info, + user_path=(pathlib.Path(path) / user_id), + trade_date=trade_date, ) self.logger.info("execute order list at {} for {}".format(trade_date.date(), user_id)) diff --git a/qlib/contrib/online/utils.py b/qlib/contrib/online/utils.py index fb96c87bd..611af63e4 100644 --- a/qlib/contrib/online/utils.py +++ b/qlib/contrib/online/utils.py @@ -79,7 +79,11 @@ def prepare(um, today, user_id, exchange_config=None): log.warning("user_id:{}, last trading date {} after today {}".format(user_id, latest_trading_date, today)) return [pd.Timestamp(latest_trading_date)], None - dates = D.calendar(start_time=pd.Timestamp(latest_trading_date), end_time=pd.Timestamp(today), future=True,) + dates = D.calendar( + start_time=pd.Timestamp(latest_trading_date), + end_time=pd.Timestamp(today), + future=True, + ) dates = list(dates) dates.append(get_next_trading_date(dates[-1], future=True)) if exchange_config: diff --git a/qlib/contrib/report/analysis_model/analysis_model_performance.py b/qlib/contrib/report/analysis_model/analysis_model_performance.py index ef1447a12..1cb14d261 100644 --- a/qlib/contrib/report/analysis_model/analysis_model_performance.py +++ b/qlib/contrib/report/analysis_model/analysis_model_performance.py @@ -53,7 +53,8 @@ def _group_return(pred_label: pd.DataFrame = None, reverse: bool = False, N: int t_df.index = t_df.index.strftime("%Y-%m-%d") # Cumulative Return By Group group_scatter_figure = ScatterGraph( - t_df.cumsum(), layout=dict(title="Cumulative Return", xaxis=dict(type="category", tickangle=45)), + t_df.cumsum(), + layout=dict(title="Cumulative Return", xaxis=dict(type="category", tickangle=45)), ).figure t_df = t_df.loc[:, ["long-short", "long-average"]] @@ -61,7 +62,12 @@ def _group_return(pred_label: pd.DataFrame = None, reverse: bool = False, N: int group_hist_figure = SubplotsGraph( t_df, kind_map=dict(kind="DistplotGraph", kwargs=dict(bin_size=_bin_size)), - subplots_kwargs=dict(rows=1, cols=2, print_grid=False, subplot_titles=["long-short", "long-average"],), + subplots_kwargs=dict( + rows=1, + cols=2, + print_grid=False, + subplot_titles=["long-short", "long-average"], + ), ).figure return group_scatter_figure, group_hist_figure @@ -96,12 +102,15 @@ def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> t _index = ic.index.get_level_values(0).astype("str").str.replace("-", "").str.slice(0, 6) _monthly_ic = ic.groupby(_index).mean() _monthly_ic.index = pd.MultiIndex.from_arrays( - [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], names=["year", "month"], + [_monthly_ic.index.str.slice(0, 4), _monthly_ic.index.str.slice(4, 6)], + names=["year", "month"], ) # fill month _month_list = pd.date_range( - start=pd.Timestamp(f"{_index.min()[:4]}0101"), end=pd.Timestamp(f"{_index.max()[:4]}1231"), freq="1M", + start=pd.Timestamp(f"{_index.min()[:4]}0101"), + end=pd.Timestamp(f"{_index.max()[:4]}1231"), + freq="1M", ) _years = [] _month = [] @@ -133,15 +142,32 @@ def _pred_ic(pred_label: pd.DataFrame = None, rank: bool = False, **kwargs) -> t _bin_size = ((_ic_df.max() - _ic_df.min()) / 20).min() _sub_graph_data = [ - ("ic", dict(row=1, col=1, name="", kind="DistplotGraph", graph_kwargs=dict(bin_size=_bin_size),),), + ( + "ic", + dict( + row=1, + col=1, + name="", + kind="DistplotGraph", + graph_kwargs=dict(bin_size=_bin_size), + ), + ), (_qqplot_fig, dict(row=1, col=2)), ] ic_hist_figure = SubplotsGraph( _ic_df.dropna(), kind_map=dict(kind="HistogramGraph", kwargs=dict()), - subplots_kwargs=dict(rows=1, cols=2, print_grid=False, subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name],), + subplots_kwargs=dict( + rows=1, + cols=2, + print_grid=False, + subplot_titles=["IC", "IC %s Dist. Q-Q" % dist_name], + ), sub_graph_data=_sub_graph_data, - layout=dict(yaxis2=dict(title="Observed Quantile"), xaxis2=dict(title=f"{dist_name} Distribution Quantile"),), + layout=dict( + yaxis2=dict(title="Observed Quantile"), + xaxis2=dict(title=f"{dist_name} Distribution Quantile"), + ), ).figure return ic_bar_figure, ic_heatmap_figure, ic_hist_figure @@ -155,7 +181,8 @@ def _pred_autocorr(pred_label: pd.DataFrame, lag=1, **kwargs) -> tuple: _df = ac.to_frame("value") _df.index = _df.index.strftime("%Y-%m-%d") ac_figure = ScatterGraph( - _df, layout=dict(title="Auto Correlation", xaxis=dict(type="category", tickangle=45)), + _df, + layout=dict(title="Auto Correlation", xaxis=dict(type="category", tickangle=45)), ).figure return (ac_figure,) @@ -175,11 +202,17 @@ def _pred_turnover(pred_label: pd.DataFrame, N=5, lag=1, **kwargs) -> tuple: .sum() / (len(x) // N) ) - r_df = pd.DataFrame({"Top": top, "Bottom": bottom,}) + r_df = pd.DataFrame( + { + "Top": top, + "Bottom": bottom, + } + ) # FIXME: support HIGH-FREQ r_df.index = r_df.index.strftime("%Y-%m-%d") turnover_figure = ScatterGraph( - r_df, layout=dict(title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45)), + r_df, + layout=dict(title="Top-Bottom Turnover", xaxis=dict(type="category", tickangle=45)), ).figure return (turnover_figure,) @@ -197,7 +230,11 @@ def ic_figure(ic_df: pd.DataFrame, show_nature_day=True, **kwargs) -> go.Figure: # FIXME: support HIGH-FREQ ic_df.index = ic_df.index.strftime("%Y-%m-%d") ic_bar_figure = BarGraph( - ic_df, layout=dict(title="Information Coefficient (IC)", xaxis=dict(type="category", tickangle=45),), + ic_df, + layout=dict( + title="Information Coefficient (IC)", + xaxis=dict(type="category", tickangle=45), + ), ).figure return ic_bar_figure @@ -240,7 +277,12 @@ def model_performance_graph( figure_list = [] for graph_name in graph_names: fun_res = eval(f"_{graph_name}")( - pred_label=pred_label, lag=lag, N=N, reverse=reverse, rank=rank, show_nature_day=show_nature_day, + pred_label=pred_label, + lag=lag, + N=N, + reverse=reverse, + rank=rank, + show_nature_day=show_nature_day, ) figure_list += fun_res diff --git a/qlib/contrib/report/analysis_position/cumulative_return.py b/qlib/contrib/report/analysis_position/cumulative_return.py index 604189c94..abb68ea60 100644 --- a/qlib/contrib/report/analysis_position/cumulative_return.py +++ b/qlib/contrib/report/analysis_position/cumulative_return.py @@ -13,7 +13,11 @@ from ..analysis_position.parse_position import get_position_data def _get_cum_return_data_with_position( - position: dict, report_normal: pd.DataFrame, label_data: pd.DataFrame, start_date=None, end_date=None, + position: dict, + report_normal: pd.DataFrame, + label_data: pd.DataFrame, + start_date=None, + end_date=None, ): """ @@ -25,7 +29,11 @@ def _get_cum_return_data_with_position( :return: """ _cumulative_return_df = get_position_data( - position=position, report_normal=report_normal, label_data=label_data, start_date=start_date, end_date=end_date, + position=position, + report_normal=report_normal, + label_data=label_data, + start_date=start_date, + end_date=end_date, ).copy() _cumulative_return_df["label"] = _cumulative_return_df["label"] - _cumulative_return_df["bench"] @@ -79,7 +87,11 @@ def _get_cum_return_data_with_position( def _get_figure_with_position( - position: dict, report_normal: pd.DataFrame, label_data: pd.DataFrame, start_date=None, end_date=None, + position: dict, + report_normal: pd.DataFrame, + label_data: pd.DataFrame, + start_date=None, + end_date=None, ) -> Iterable[go.Figure]: """Get average analysis figures @@ -99,12 +111,18 @@ def _get_figure_with_position( # Create figures for _t_name in ["buy", "sell", "buy_minus_sell", "hold"]: sub_graph_data = [ - ("cum_{}".format(_t_name), dict(row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"}),), + ( + "cum_{}".format(_t_name), + dict(row=1, col=1, graph_kwargs={"mode": "lines+markers", "xaxis": "x3"}), + ), ( "{}_weight".format(_t_name.replace("minus", "plus") if "minus" in _t_name else _t_name), dict(row=2, col=1), ), - ("{}_value".format(_t_name), dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}),), + ( + "{}_value".format(_t_name), + dict(row=1, col=2, kind="HistogramGraph", graph_kwargs={}), + ), ] _default_xaxis = dict(showline=False, zeroline=True, tickangle=45) @@ -143,7 +161,13 @@ def _get_figure_with_position( [{"rowspan": 1}, None], ] subplots_kwargs = dict( - vertical_spacing=0.01, rows=2, cols=2, row_width=[1, 2], column_width=[3, 1], print_grid=False, specs=specs, + vertical_spacing=0.01, + rows=2, + cols=2, + row_width=[1, 2], + column_width=[3, 1], + print_grid=False, + specs=specs, ) yield SubplotsGraph( cum_return_df, diff --git a/qlib/contrib/report/analysis_position/parse_position.py b/qlib/contrib/report/analysis_position/parse_position.py index 23f9c592c..fe1d61137 100644 --- a/qlib/contrib/report/analysis_position/parse_position.py +++ b/qlib/contrib/report/analysis_position/parse_position.py @@ -72,7 +72,10 @@ def parse_position(position: dict = None) -> pd.DataFrame: result_df = result_df.append(_trading_day_df, sort=True) - previous_data = dict(date=_trading_date, code_list=_trading_day_df[_trading_day_df["status"] != -1].index,) + previous_data = dict( + date=_trading_date, + code_list=_trading_day_df[_trading_day_df["status"] != -1].index, + ) result_df.reset_index(inplace=True) result_df.rename(columns={"date": "datetime", "index": "instrument"}, inplace=True) diff --git a/qlib/contrib/report/analysis_position/rank_label.py b/qlib/contrib/report/analysis_position/rank_label.py index 9a4d834ed..72a358adc 100644 --- a/qlib/contrib/report/analysis_position/rank_label.py +++ b/qlib/contrib/report/analysis_position/rank_label.py @@ -23,7 +23,11 @@ def _get_figure_with_position( :return: """ _position_df = get_position_data( - position, label_data, calculate_label_rank=True, start_date=start_date, end_date=end_date, + position, + label_data, + calculate_label_rank=True, + start_date=start_date, + end_date=end_date, ) res_dict = dict() @@ -47,14 +51,20 @@ def _get_figure_with_position( yield ScatterGraph( _res_df.loc[:, [_col]], layout=dict( - title=_col, xaxis=dict(type="category", tickangle=45), yaxis=dict(title="lable-rank-ratio: %"), + title=_col, + xaxis=dict(type="category", tickangle=45), + yaxis=dict(title="lable-rank-ratio: %"), ), graph_kwargs=dict(mode="lines+markers"), ).figure def rank_label_graph( - position: dict, label_data: pd.DataFrame, start_date=None, end_date=None, show_notebook=True, + position: dict, + label_data: pd.DataFrame, + start_date=None, + end_date=None, + show_notebook=True, ) -> Iterable[go.Figure]: """Ranking percentage of stocks buy, sell, and holding on the trading day. Average rank-ratio(similar to **sell_df['label'].rank(ascending=False) / len(sell_df)**) of daily trading diff --git a/qlib/contrib/report/analysis_position/report.py b/qlib/contrib/report/analysis_position/report.py index 8e2c05c0a..f82e654c4 100644 --- a/qlib/contrib/report/analysis_position/report.py +++ b/qlib/contrib/report/analysis_position/report.py @@ -123,7 +123,9 @@ def _report_figure(df: pd.DataFrame) -> [list, tuple]: "y1": 1, "fillcolor": "#d3d3d3", "opacity": 0.3, - "line": {"width": 0,}, + "line": { + "width": 0, + }, }, { "type": "rect", @@ -135,13 +137,20 @@ def _report_figure(df: pd.DataFrame) -> [list, tuple]: "y1": 0.55, "fillcolor": "#d3d3d3", "opacity": 0.3, - "line": {"width": 0,}, + "line": { + "width": 0, + }, }, ], ) _subplot_kwargs = dict( - shared_xaxes=True, vertical_spacing=0.01, rows=7, cols=1, row_width=[1, 1, 1, 3, 1, 1, 3], print_grid=False, + shared_xaxes=True, + vertical_spacing=0.01, + rows=7, + cols=1, + row_width=[1, 1, 1, 3, 1, 1, 3], + print_grid=False, ) figure = SubplotsGraph( df=report_df, diff --git a/qlib/contrib/report/graph.py b/qlib/contrib/report/graph.py index dbbc41110..70e382fb1 100644 --- a/qlib/contrib/report/graph.py +++ b/qlib/contrib/report/graph.py @@ -311,7 +311,11 @@ class SubplotsGraph: _temp_row_data = ( column_name, dict( - row=row, col=col, name=res_name, kind=self._kind_map["kind"], graph_kwargs=self._kind_map["kwargs"], + row=row, + col=col, + name=res_name, + kind=self._kind_map["kind"], + graph_kwargs=self._kind_map["kwargs"], ), ) self._sub_graph_data.append(_temp_row_data) diff --git a/qlib/contrib/strategy/cost_control.py b/qlib/contrib/strategy/cost_control.py index ee3ee03ec..dd90437b0 100644 --- a/qlib/contrib/strategy/cost_control.py +++ b/qlib/contrib/strategy/cost_control.py @@ -57,7 +57,10 @@ class SoftTopkStrategy(WeightStrategyBase): final_stock_weight[stock_id] -= sw if self.buy_method == "first_fill": for stock_id in buy_signal_stocks: - add_weight = min(max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), sold_stock_weight,) + add_weight = min( + max(1 / self.topk - final_stock_weight.get(stock_id, 0), 0.0), + sold_stock_weight, + ) final_stock_weight[stock_id] = final_stock_weight.get(stock_id, 0.0) + add_weight sold_stock_weight -= add_weight elif self.buy_method == "average_fill": diff --git a/qlib/contrib/strategy/order_generator.py b/qlib/contrib/strategy/order_generator.py index 6f168b4dd..494981ecc 100644 --- a/qlib/contrib/strategy/order_generator.py +++ b/qlib/contrib/strategy/order_generator.py @@ -102,10 +102,14 @@ class OrderGenWInteract(OrderGenerator): # strategy 1 : generate amount_position by weight_position # Use API in Exchange() target_amount_dict = trade_exchange.generate_amount_position_from_weight_position( - weight_position=target_weight_position, cash=current_tradable_value, trade_date=trade_date, + weight_position=target_weight_position, + cash=current_tradable_value, + trade_date=trade_date, ) order_list = trade_exchange.generate_order_for_target_amount_position( - target_position=target_amount_dict, current_position=current_amount_dict, trade_date=trade_date, + target_position=target_amount_dict, + current_position=current_amount_dict, + trade_date=trade_date, ) return order_list @@ -160,6 +164,8 @@ class OrderGenWOInteract(OrderGenerator): else: continue order_list = trade_exchange.generate_order_for_target_amount_position( - target_position=amount_dict, current_position=current.get_stock_amount_dict(), trade_date=trade_date, + target_position=amount_dict, + current_position=current.get_stock_amount_dict(), + trade_date=trade_date, ) return order_list diff --git a/qlib/contrib/tuner/launcher.py b/qlib/contrib/tuner/launcher.py index 409410a2a..711658c9a 100644 --- a/qlib/contrib/tuner/launcher.py +++ b/qlib/contrib/tuner/launcher.py @@ -13,7 +13,11 @@ from .config import TunerConfigManager args_parser = argparse.ArgumentParser(prog="tuner") args_parser.add_argument( - "-c", "--config_path", required=True, type=str, help="config path indicates where to load yaml config.", + "-c", + "--config_path", + required=True, + type=str, + help="config path indicates where to load yaml config.", ) args = args_parser.parse_args() diff --git a/qlib/contrib/tuner/space.py b/qlib/contrib/tuner/space.py index 57f57a6c3..76f101671 100644 --- a/qlib/contrib/tuner/space.py +++ b/qlib/contrib/tuner/space.py @@ -10,5 +10,8 @@ TopkAmountStrategySpace = { } QLibDataLabelSpace = { - "labels": hp.choice("labels", [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]],) + "labels": hp.choice( + "labels", + [["Ref($vwap, -2)/Ref($vwap, -1) - 1"], ["Ref($close, -5)/$close - 1"]], + ) } diff --git a/qlib/contrib/tuner/tuner.py b/qlib/contrib/tuner/tuner.py index e81d41a9a..2ce957859 100644 --- a/qlib/contrib/tuner/tuner.py +++ b/qlib/contrib/tuner/tuner.py @@ -28,7 +28,10 @@ class Tuner: self.optim_config = optim_config self.max_evals = self.tuner_config.get("max_evals", 10) - self.ex_dir = os.path.join(self.tuner_config["experiment"]["dir"], self.tuner_config["experiment"]["name"],) + self.ex_dir = os.path.join( + self.tuner_config["experiment"]["dir"], + self.tuner_config["experiment"]["name"], + ) self.best_params = None self.best_res = None @@ -39,7 +42,10 @@ class Tuner: TimeInspector.set_time_mark() fmin( - fn=self.objective, space=self.space, algo=tpe.suggest, max_evals=self.max_evals, + fn=self.objective, + space=self.space, + algo=tpe.suggest, + max_evals=self.max_evals, ) self.logger.info("Local best params: {} ".format(self.best_params)) TimeInspector.log_cost_time( @@ -153,7 +159,8 @@ class QLibTuner(Tuner): estimator_config["data"]["args"].update(params["data_label_space"]) estimator_path = os.path.join( - self.tuner_config["experiment"].get("dir", "../"), QLibTuner.ESTIMATOR_CONFIG_NAME, + self.tuner_config["experiment"].get("dir", "../"), + QLibTuner.ESTIMATOR_CONFIG_NAME, ) with open(estimator_path, "w") as fp: @@ -166,20 +173,27 @@ class QLibTuner(Tuner): model_space_name = self.tuner_config["model"].get("space", None) if model_space_name is None: raise ValueError("Please give the search space of model.") - model_space = getattr(importlib.import_module(".space", package="qlib.contrib.tuner"), model_space_name,) + model_space = getattr( + importlib.import_module(".space", package="qlib.contrib.tuner"), + model_space_name, + ) # 2. Setup strategy space strategy_space_name = self.tuner_config["strategy"].get("space", None) if strategy_space_name is None: raise ValueError("Please give the search space of strategy.") - strategy_space = getattr(importlib.import_module(".space", package="qlib.contrib.tuner"), strategy_space_name,) + strategy_space = getattr( + importlib.import_module(".space", package="qlib.contrib.tuner"), + strategy_space_name, + ) # 3. Setup data label space if given if self.tuner_config.get("data_label", None) is not None: data_label_space_name = self.tuner_config["data_label"].get("space", None) if data_label_space_name is not None: data_label_space = getattr( - importlib.import_module(".space", package="qlib.contrib.tuner"), data_label_space_name, + importlib.import_module(".space", package="qlib.contrib.tuner"), + data_label_space_name, ) else: data_label_space_name = None diff --git a/qlib/data/client.py b/qlib/data/client.py index d1a68cb38..5244a7e45 100644 --- a/qlib/data/client.py +++ b/qlib/data/client.py @@ -26,7 +26,8 @@ class Client: self.logger = get_module_logger(self.__class__.__name__) # bind connect/disconnect callbacks self.sio.on( - "connect", lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), + "connect", + lambda: self.logger.debug("Connect to server {}".format(self.sio.connection_url)), ) self.sio.on("disconnect", lambda: self.logger.debug("Disconnect from server!")) diff --git a/qlib/data/data.py b/qlib/data/data.py index 47cded79c..762467da3 100644 --- a/qlib/data/data.py +++ b/qlib/data/data.py @@ -328,7 +328,14 @@ class DatasetProvider(abc.ABC): raise NotImplementedError("Subclass of DatasetProvider must implement `Dataset` method") def _uri( - self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=1, **kwargs, + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=1, + **kwargs, ): """Get task uri, used when generating rabbitmq task in qlib_server @@ -407,13 +414,29 @@ class DatasetProvider(abc.ABC): for inst, spans in instruments_d.items(): data[inst] = p.apply_async( DatasetProvider.expression_calculator, - args=(inst, start_time, end_time, freq, normalize_column_names, spans, C,), + args=( + inst, + start_time, + end_time, + freq, + normalize_column_names, + spans, + C, + ), ) else: for inst in instruments_d: data[inst] = p.apply_async( DatasetProvider.expression_calculator, - args=(inst, start_time, end_time, freq, normalize_column_names, None, C,), + args=( + inst, + start_time, + end_time, + freq, + normalize_column_names, + None, + C, + ), ) p.close() @@ -575,7 +598,12 @@ class LocalInstrumentProvider(InstrumentProvider): start_time = pd.Timestamp(start_time or cal[0]) end_time = pd.Timestamp(end_time or cal[-1]) _instruments_filtered = { - inst: list(filter(lambda x: x[0] <= x[1], [(max(start_time, x[0]), min(end_time, x[1])) for x in spans],)) + inst: list( + filter( + lambda x: x[0] <= x[1], + [(max(start_time, x[0]), min(end_time, x[1])) for x in spans], + ) + ) for inst, spans in _instruments.items() } _instruments_filtered = {key: value for key, value in _instruments_filtered.items() if value} @@ -695,7 +723,14 @@ class LocalDatasetProvider(DatasetProvider): for inst in instruments_d: p.apply_async( - LocalDatasetProvider.cache_walker, args=(inst, start_time, end_time, freq, column_names,), + LocalDatasetProvider.cache_walker, + args=( + inst, + start_time, + end_time, + freq, + column_names, + ), ) p.close() @@ -728,7 +763,12 @@ class ClientCalendarProvider(CalendarProvider): def calendar(self, start_time=None, end_time=None, freq="day", future=False): self.conn.send_request( request_type="calendar", - request_content={"start_time": str(start_time), "end_time": str(end_time), "freq": freq, "future": future,}, + request_content={ + "start_time": str(start_time), + "end_time": str(end_time), + "freq": freq, + "future": future, + }, msg_queue=self.queue, msg_proc_func=lambda response_content: [pd.Timestamp(c) for c in response_content], ) @@ -792,7 +832,14 @@ class ClientDatasetProvider(DatasetProvider): self.queue = queue.Queue() def dataset( - self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=0, return_uri=False, + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=0, + return_uri=False, ): if Inst.get_inst_type(instruments) == Inst.DICT: get_module_logger("data").warning( @@ -895,7 +942,13 @@ class BaseProvider: return Inst.list_instruments(instruments, start_time, end_time, freq, as_list) def features( - self, instruments, fields, start_time=None, end_time=None, freq="day", disk_cache=None, + self, + instruments, + fields, + start_time=None, + end_time=None, + freq="day", + disk_cache=None, ): """ Parameters: diff --git a/qlib/data/dataset/utils.py b/qlib/data/dataset/utils.py index 58e2bd968..feda19044 100644 --- a/qlib/data/dataset/utils.py +++ b/qlib/data/dataset/utils.py @@ -32,7 +32,10 @@ def get_level_index(df: pd.DataFrame, level=Union[str, int]) -> int: def fetch_df_by_index( - df: pd.DataFrame, selector: Union[pd.Timestamp, slice, str, list], level: Union[str, int], fetch_orig=True, + df: pd.DataFrame, + selector: Union[pd.Timestamp, slice, str, list], + level: Union[str, int], + fetch_orig=True, ) -> pd.DataFrame: """ fetch data from `data` with `selector` and `level` diff --git a/qlib/data/filter.py b/qlib/data/filter.py index 811fd387f..70f9d3278 100644 --- a/qlib/data/filter.py +++ b/qlib/data/filter.py @@ -341,7 +341,12 @@ class ExpressionDFilter(SeriesDFilter): # do not use dataset cache try: _features = DatasetD.dataset( - instruments, [self.rule_expression], fstart, fend, freq=self.filter_freq, disk_cache=0, + instruments, + [self.rule_expression], + fstart, + fend, + freq=self.filter_freq, + disk_cache=0, ) except TypeError: # use LocalDatasetProvider diff --git a/qlib/portfolio/optimizer/enhanced_indexing.py b/qlib/portfolio/optimizer/enhanced_indexing.py index 5fdc1014d..5a7a0804d 100644 --- a/qlib/portfolio/optimizer/enhanced_indexing.py +++ b/qlib/portfolio/optimizer/enhanced_indexing.py @@ -56,7 +56,11 @@ class EnhancedIndexingOptimizer(BaseOptimizer): assert inds_dev is None or inds_dev >= 0, "industry deviation limit `inds_dev` should be positive or None." self.inds_dev = inds_dev - assert warm_start in [None, self.START_FROM_W0, self.START_FROM_BENCH,], "illegal warm start option" + assert warm_start in [ + None, + self.START_FROM_W0, + self.START_FROM_BENCH, + ], "illegal warm start option" self.start_from_w0 = warm_start == self.START_FROM_W0 self.start_from_bench = warm_start == self.START_FROM_BENCH diff --git a/qlib/tests/__init__.py b/qlib/tests/__init__.py index eb6f9c5ed..f92e72787 100644 --- a/qlib/tests/__init__.py +++ b/qlib/tests/__init__.py @@ -18,6 +18,10 @@ class TestAutoData(unittest.TestCase): print(f"Qlib data is not found in {provider_uri}") GetData().qlib_data( - name="qlib_data_simple", region="cn", interval="1d", target_dir=provider_uri, delete_old=False, + name="qlib_data_simple", + region="cn", + interval="1d", + target_dir=provider_uri, + delete_old=False, ) init(provider_uri=provider_uri, region=REG_CN, **cls._setup_kwargs) diff --git a/qlib/workflow/record_temp.py b/qlib/workflow/record_temp.py index 0c704b896..be458a24d 100644 --- a/qlib/workflow/record_temp.py +++ b/qlib/workflow/record_temp.py @@ -193,7 +193,10 @@ class SigAnaRecord(SignalRecord): } ) objects.update( - {"long_short_r.pkl": long_short_r, "long_avg_r.pkl": long_avg_r,} + { + "long_short_r.pkl": long_short_r, + "long_avg_r.pkl": long_avg_r, + } ) self.recorder.log_metrics(**metrics) self.recorder.save_objects(**objects, artifact_path=self.get_path()) diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py index 8b3819c83..f6e77cba4 100644 --- a/tests/test_all_pipeline.py +++ b/tests/test_all_pipeline.py @@ -78,7 +78,10 @@ port_analysis_config = { "strategy": { "class": "TopkDropoutStrategy", "module_path": "qlib.contrib.strategy.strategy", - "kwargs": {"topk": 50, "n_drop": 5,}, + "kwargs": { + "topk": 50, + "n_drop": 5, + }, }, "backtest": { "verbose": False, @@ -173,7 +176,9 @@ class TestAllFlow(TestAutoData): def test_1_backtest(self): analyze_df = backtest_analysis(TestAllFlow.PRED_SCORE, TestAllFlow.RID) self.assertGreaterEqual( - analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], 0.10, "backtest failed", + analyze_df.loc(axis=0)["excess_return_with_cost", "annualized_return"].values[0], + 0.10, + "backtest failed", ) diff --git a/tests/test_dump_data.py b/tests/test_dump_data.py index de649c37e..dfa7f8556 100644 --- a/tests/test_dump_data.py +++ b/tests/test_dump_data.py @@ -40,7 +40,9 @@ class TestDumpData(unittest.TestCase): TestDumpData.STOCK_NAMES = list(map(lambda x: x.name[:-4].upper(), SOURCE_DIR.glob("*.csv"))) provider_uri = str(QLIB_DIR.resolve()) qlib.init( - provider_uri=provider_uri, expression_cache=None, dataset_cache=None, + provider_uri=provider_uri, + expression_cache=None, + dataset_cache=None, ) @classmethod @@ -52,7 +54,10 @@ class TestDumpData(unittest.TestCase): def test_1_dump_calendars(self): ori_calendars = set( - map(pd.Timestamp, pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values,) + map( + pd.Timestamp, + pd.read_csv(QLIB_DIR.joinpath("calendars", "day.txt"), header=None).loc[:, 0].values, + ) ) res_calendars = set(D.calendar()) assert len(ori_calendars - res_calendars) == len(res_calendars - ori_calendars) == 0, "dump calendars failed" diff --git a/tests/test_get_data.py b/tests/test_get_data.py index d5637b025..c511d1b91 100644 --- a/tests/test_get_data.py +++ b/tests/test_get_data.py @@ -26,7 +26,9 @@ class TestGetData(unittest.TestCase): def setUpClass(cls) -> None: provider_uri = str(QLIB_DIR.resolve()) qlib.init( - provider_uri=provider_uri, expression_cache=None, dataset_cache=None, + provider_uri=provider_uri, + expression_cache=None, + dataset_cache=None, ) @classmethod From 81987bb1436d2d3990662c89cb9c14e88270c0f9 Mon Sep 17 00:00:00 2001 From: bxdd <45119470+bxdd@users.noreply.github.com> Date: Tue, 9 Mar 2021 15:38:04 +0800 Subject: [PATCH 084/134] Update ops.py --- qlib/data/ops.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/qlib/data/ops.py b/qlib/data/ops.py index 8bc7e1fa7..cbc101f47 100644 --- a/qlib/data/ops.py +++ b/qlib/data/ops.py @@ -74,7 +74,6 @@ class NpElemOperator(ElemOperator): """ def __init__(self, feature, func): - self.feature = feature self.func = func super(NpElemOperator, self).__init__(feature) @@ -289,8 +288,6 @@ class NpPairOperator(PairOperator): """ def __init__(self, feature_left, feature_right, func): - self.feature_left = feature_left - self.feature_right = feature_right self.func = func super(NpPairOperator, self).__init__(feature_left, feature_right) From 78bc2c874891b567e10740b9573f4a9e4c06f003 Mon Sep 17 00:00:00 2001 From: Jactus Date: Tue, 9 Mar 2021 17:31:27 +0800 Subject: [PATCH 085/134] Update Filter doc --- docs/component/data.rst | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/component/data.rst b/docs/component/data.rst index 4b0962d49..9e5d7de2f 100644 --- a/docs/component/data.rst +++ b/docs/component/data.rst @@ -218,6 +218,25 @@ Filter - `cross-sectional features filter` \: rule_expression = '$rank($close)<10' - `time-sequence features filter`: rule_expression = '$Ref($close, 3)>100' +Here is a simple example showing how to use filter in a basic ``Qlib`` workflow configuration file: + +.. code-block:: yaml + + filter: &filter + filter_type: ExpressionDFilter + rule_expression: "Ref($close, -2) / Ref($close, -1) > 1" + filter_start_time: 2010-01-01 + filter_end_time: 2010-01-07 + keep: False + + data_handler_config: &data_handler_config + start_time: 2010-01-01 + end_time: 2021-01-22 + fit_start_time: 2010-01-01 + fit_end_time: 2015-12-31 + instruments: *market + filter_pipe: [*filter] + To know more about ``Filter``, please refer to `Filter API <../reference/api.html#module-qlib.data.filter>`_. Reference From 105fe1d3edde2ac35d88b2cc2154d6effd64339a Mon Sep 17 00:00:00 2001 From: Jactus Date: Wed, 10 Mar 2021 10:38:43 +0800 Subject: [PATCH 086/134] Remove deprecated warning for numpy>=1.20.0 --- qlib/data/dataset/__init__.py | 2 +- qlib/utils/__init__.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qlib/data/dataset/__init__.py b/qlib/data/dataset/__init__.py index ecbeebc95..690436ba9 100644 --- a/qlib/data/dataset/__init__.py +++ b/qlib/data/dataset/__init__.py @@ -413,7 +413,7 @@ class TSDataSampler: # 1) for better performance, use the last nan line for padding the lost date # 2) In case of precision problems. We use np.float64. # TODO: I'm not sure if whether np.float64 will result in # precision problems. It will not cause any problems in my tests at least - indices = np.nan_to_num(indices.astype(np.float64), nan=self.nan_idx).astype(np.int) + indices = np.nan_to_num(indices.astype(np.float64), nan=self.nan_idx).astype(int) data = self.data_arr[indices] if isinstance(idx, mtit): diff --git a/qlib/utils/__init__.py b/qlib/utils/__init__.py index 6640dae2c..f550a0419 100644 --- a/qlib/utils/__init__.py +++ b/qlib/utils/__init__.py @@ -64,7 +64,7 @@ def np_ffill(arr: np.array): arr : np.array Input numpy 1D array """ - mask = np.isnan(arr.astype(np.float)) # np.isnan only works on np.float + mask = np.isnan(arr.astype(float)) # np.isnan only works on np.float # get fill index idx = np.where(~mask, np.arange(mask.shape[0]), 0) np.maximum.accumulate(idx, out=idx) From 119fe90570374c99332d6afd816c34c3c7884e29 Mon Sep 17 00:00:00 2001 From: Jactus Date: Wed, 10 Mar 2021 16:43:32 +0800 Subject: [PATCH 087/134] Fix pytorch ts model loader bug --- qlib/contrib/model/pytorch_alstm_ts.py | 8 ++++++-- qlib/contrib/model/pytorch_gats_ts.py | 4 ++-- qlib/contrib/model/pytorch_gru_ts.py | 8 ++++++-- qlib/contrib/model/pytorch_lstm_ts.py | 8 ++++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 725568de8..ad3945368 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -210,8 +210,12 @@ class ALSTM(Model): dl_train.config(fillna_type="ffill+bfill") # process nan brought by dataloader dl_valid.config(fillna_type="ffill+bfill") # process nan brought by dataloader - train_loader = DataLoader(dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs) - valid_loader = DataLoader(dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs) + train_loader = DataLoader( + dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs, drop_last=True + ) + valid_loader = DataLoader( + dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs, drop_last=True + ) if save_path == None: save_path = create_save_path(save_path) diff --git a/qlib/contrib/model/pytorch_gats_ts.py b/qlib/contrib/model/pytorch_gats_ts.py index 1e94f56e4..241debe61 100644 --- a/qlib/contrib/model/pytorch_gats_ts.py +++ b/qlib/contrib/model/pytorch_gats_ts.py @@ -258,8 +258,8 @@ class GATs(Model): sampler_train = DailyBatchSampler(dl_train) sampler_valid = DailyBatchSampler(dl_valid) - train_loader = DataLoader(dl_train, sampler=sampler_train, num_workers=self.n_jobs) - valid_loader = DataLoader(dl_valid, sampler=sampler_valid, num_workers=self.n_jobs) + train_loader = DataLoader(dl_train, sampler=sampler_train, num_workers=self.n_jobs, drop_last=True) + valid_loader = DataLoader(dl_valid, sampler=sampler_valid, num_workers=self.n_jobs, drop_last=True) if save_path == None: save_path = create_save_path(save_path) diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index bb6618b85..a0b240ef4 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -210,8 +210,12 @@ class GRU(Model): dl_train.config(fillna_type="ffill+bfill") # process nan brought by dataloader dl_valid.config(fillna_type="ffill+bfill") # process nan brought by dataloader - train_loader = DataLoader(dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs) - valid_loader = DataLoader(dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs) + train_loader = DataLoader( + dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs, drop_last=True + ) + valid_loader = DataLoader( + dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs, drop_last=True + ) if save_path == None: save_path = create_save_path(save_path) diff --git a/qlib/contrib/model/pytorch_lstm_ts.py b/qlib/contrib/model/pytorch_lstm_ts.py index cf4f8fb9f..d0decc5fb 100755 --- a/qlib/contrib/model/pytorch_lstm_ts.py +++ b/qlib/contrib/model/pytorch_lstm_ts.py @@ -210,8 +210,12 @@ class LSTM(Model): dl_train.config(fillna_type="ffill+bfill") # process nan brought by dataloader dl_valid.config(fillna_type="ffill+bfill") # process nan brought by dataloader - train_loader = DataLoader(dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs) - valid_loader = DataLoader(dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs) + train_loader = DataLoader( + dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs, drop_last=True + ) + valid_loader = DataLoader( + dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs, drop_last=True + ) if save_path == None: save_path = create_save_path(save_path) From f6ed1750702eae3fce06f0f3f1c0fc5a0f377e3c Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 11 Mar 2021 02:33:00 +0000 Subject: [PATCH 088/134] Remove set_log_basic_config, refine count_parameters, rename root_uri as get_local_dir --- qlib/contrib/model/pytorch_utils.py | 27 ++++++++++++++++++++------- qlib/log.py | 21 --------------------- qlib/workflow/recorder.py | 16 +++++++++++----- tests/test_all_pipeline.py | 2 ++ 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/qlib/contrib/model/pytorch_utils.py b/qlib/contrib/model/pytorch_utils.py index e7a8e8d67..1148a596a 100644 --- a/qlib/contrib/model/pytorch_utils.py +++ b/qlib/contrib/model/pytorch_utils.py @@ -4,7 +4,19 @@ import torch.nn as nn -def count_parameters(models_or_parameters, unit="mb"): +def count_parameters(models_or_parameters, unit="m"): + """ + This function is to obtain the storage size unit of a (or multiple) models. + + Parameters + ---------- + models_or_parameters : PyTorch model(s) or a list of parameters. + unit : the storage size unit. + + Returns + ------- + The number of parameters of the given model(s) or parameters. + """ if isinstance(models_or_parameters, nn.Module): counts = sum(v.numel() for v in models_or_parameters.parameters()) elif isinstance(models_or_parameters, nn.Parameter): @@ -13,12 +25,13 @@ def count_parameters(models_or_parameters, unit="mb"): return sum(count_parameters(x, unit) for x in models_or_parameters) else: counts = sum(v.numel() for v in models_or_parameters) - if unit.lower() == "mb": - counts /= 1e6 - elif unit.lower() == "kb": - counts /= 1e3 - elif unit.lower() == "gb": - counts /= 1e9 + unit = unit.lower() + if unit == "kb" or unit == "k": + counts /= 2 ** 10 + elif unit == "mb" or unit == "m": + counts /= 2 ** 20 + elif unit == "gb" or unit == "g": + counts /= 2 ** 30 elif unit is not None: raise ValueError("Unknow unit: {:}".format(unit)) return counts diff --git a/qlib/log.py b/qlib/log.py index 78f12eb09..126acb9d2 100644 --- a/qlib/log.py +++ b/qlib/log.py @@ -108,27 +108,6 @@ def set_log_with_config(log_config: Dict[Text, Any]): logging_config.dictConfig(log_config) -def set_log_basic_config(filename: Optional[Text] = None, format: Optional[Text] = None, level: Optional[int] = None): - """ - Set the basic configuration for the logging system. - See details at https://docs.python.org/3/library/logging.html#logging.basicConfig - - :param filename: str or None - The path to save the logs. - :param format: the logging format - :param level: int - :return: Logger - Logger object. - """ - if level is None: - level = C.logging_level - - if format is None: - format = C.logging_config["formatters"]["logger_format"]["format"] - - logging.basicConfig(filename=filename, format=format, level=level) - - class LogFilter(logging.Filter): def __init__(self, param=None): self.param = param diff --git a/qlib/workflow/recorder.py b/qlib/workflow/recorder.py index 519b69710..bc0a9ef77 100644 --- a/qlib/workflow/recorder.py +++ b/qlib/workflow/recorder.py @@ -240,12 +240,18 @@ class MLflowRecorder(Recorder): def artifact_uri(self): return self._artifact_uri - @property - def root_uri(self): - start_str = "file:" + def get_local_dir(self): + """ + This function will return the directory path of this recorder. + """ if self.artifact_uri is not None: - xpath = self.artifact_uri.strip(start_str) - return (Path(xpath) / "..").resolve() + local_file_prefix = "file:" + if self.artifact_uri.startswith(local_file_prefix): + xpath = self.artifact_uri.lstrip(local_file_prefix) + return (Path(xpath) / "..").resolve() + else: + raise RuntimeError("This recorder is not saved in the local file system.") + else: raise Exception( "Please make sure the recorder has been created and started properly before getting artifact uri." diff --git a/tests/test_all_pipeline.py b/tests/test_all_pipeline.py index d9d684697..fbf15d29a 100644 --- a/tests/test_all_pipeline.py +++ b/tests/test_all_pipeline.py @@ -123,6 +123,8 @@ def train(): recorder = R.get_recorder() # To test __repr__ print(recorder) + # To test get_local_dir + print(recorder.get_local_dir()) rid = recorder.id sr = SignalRecord(model, dataset, recorder) sr.generate() From cda96be8c3cf8554587c06857c6e35cbe5adbd6d Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 11 Mar 2021 02:49:03 +0000 Subject: [PATCH 089/134] Refine default uri in expm --- qlib/workflow/__init__.py | 6 +++--- qlib/workflow/expm.py | 25 ++++++++++++++----------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/qlib/workflow/__init__.py b/qlib/workflow/__init__.py index 54297ecd7..834bd059e 100644 --- a/qlib/workflow/__init__.py +++ b/qlib/workflow/__init__.py @@ -285,11 +285,11 @@ class QlibRecorder: """ return self.exp_manager.uri - def reset_default_uri(self, uri: Text): + def set_uri(self, uri: Optional[Text]): """ - Method to reset the default uri of current experiment manager. + Method to reset the current uri of current experiment manager. """ - self.exp_manager.reset_default_uri(uri) + self.exp_manager.set_uri(uri) def get_recorder(self, recorder_id=None, recorder_name=None, experiment_name=None): """ diff --git a/qlib/workflow/expm.py b/qlib/workflow/expm.py index f9a5d0252..56fe810c3 100644 --- a/qlib/workflow/expm.py +++ b/qlib/workflow/expm.py @@ -10,6 +10,7 @@ from contextlib import contextmanager from typing import Optional, Text from .exp import MLflowExperiment, Experiment +from ..config import C from .recorder import Recorder from ..log import get_module_logger @@ -23,19 +24,12 @@ class ExpManager: """ def __init__(self, uri: Text, default_exp_name: Optional[Text]): - self._default_uri = uri - self._current_uri = None + self._current_uri = uri self.default_exp_name = default_exp_name self.active_experiment = None # only one experiment can active each time def __repr__(self): - return "{name}(default_uri={duri}, current_uri={curi})".format( - name=self.__class__.__name__, duri=self._default_uri, curi=self._current_uri - ) - - def reset_default_uri(self, uri: Text): - self._default_uri = uri - self.set_uri(None) + return "{name}(current_uri={curi})".format(name=self.__class__.__name__, curi=self._current_uri) def start_exp( self, @@ -221,6 +215,15 @@ class ExpManager: """ raise NotImplementedError(f"Please implement the `delete_exp` method.") + @property + def default_uri(self): + """ + Get the default tracking URI from qlib.config.C + """ + if "kwargs" not in C.exp_manager or "uri" not in C.exp_manager["kwargs"]: + raise ValueError("The default URI is not set in qlib.config.C") + return C.exp_manager["kwargs"]["uri"] + @property def uri(self): """ @@ -230,7 +233,7 @@ class ExpManager: ------- The tracking URI string. """ - return self._current_uri or self._default_uri + return self._current_uri or self.default_uri def set_uri(self, uri: Optional[Text] = None): """ @@ -243,7 +246,7 @@ class ExpManager: """ if uri is None: logger.info("No tracking URI is provided. Use the default tracking URI.") - self._current_uri = self._default_uri + self._current_uri = self.default_uri else: # Temporarily re-set the current uri as the uri argument. self._current_uri = uri From 0ef7c8e0e62f1b08f89f676eac97cbbd2bcc1657 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 11 Mar 2021 03:05:31 +0000 Subject: [PATCH 090/134] Fix bugs for get_local_dir --- qlib/contrib/backtest/account.py | 7 +++---- qlib/contrib/online/operator.py | 2 +- qlib/workflow/cli.py | 2 +- qlib/workflow/recorder.py | 8 ++++---- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/qlib/contrib/backtest/account.py b/qlib/contrib/backtest/account.py index d8b285019..a614f08b6 100644 --- a/qlib/contrib/backtest/account.py +++ b/qlib/contrib/backtest/account.py @@ -104,10 +104,9 @@ class Account: # if suspend, no new price to be updated, profit is 0 if trader.check_stock_suspended(code, today): continue - else: - today_close = trader.get_close(code, today) - profit += (today_close - self.current.position[code]["price"]) * self.current.position[code]["amount"] - self.current.update_stock_price(stock_id=code, price=today_close) + today_close = trader.get_close(code, today) + profit += (today_close - self.current.position[code]["price"]) * self.current.position[code]["amount"] + self.current.update_stock_price(stock_id=code, price=today_close) self.rtn += profit # update holding day count self.current.add_count_all() diff --git a/qlib/contrib/online/operator.py b/qlib/contrib/online/operator.py index c8b44f578..d2307dad5 100644 --- a/qlib/contrib/online/operator.py +++ b/qlib/contrib/online/operator.py @@ -148,7 +148,7 @@ class Operator: for user_id, user in um.users.items(): dates, trade_exchange = prepare(um, trade_date, user_id, exchange_config) executor = SimulatorExecutor(trade_exchange=trade_exchange) - if not str(dates[0].date()) == str(pred_date.date()): + if str(dates[0].date()) != str(pred_date.date()): raise ValueError( "The account data is not newest! last trading date {}, today {}".format( dates[0].date(), trade_date.date() diff --git a/qlib/workflow/cli.py b/qlib/workflow/cli.py index 6eba96277..879c0aaeb 100644 --- a/qlib/workflow/cli.py +++ b/qlib/workflow/cli.py @@ -16,7 +16,7 @@ def get_path_list(path): if isinstance(path, str): return [path] else: - return [p for p in path] + return list(path) def sys_config(config, config_path): diff --git a/qlib/workflow/recorder.py b/qlib/workflow/recorder.py index bc0a9ef77..5915e58da 100644 --- a/qlib/workflow/recorder.py +++ b/qlib/workflow/recorder.py @@ -245,10 +245,10 @@ class MLflowRecorder(Recorder): This function will return the directory path of this recorder. """ if self.artifact_uri is not None: - local_file_prefix = "file:" - if self.artifact_uri.startswith(local_file_prefix): - xpath = self.artifact_uri.lstrip(local_file_prefix) - return (Path(xpath) / "..").resolve() + local_dir_path = Path(self.artifact_uri.lstrip("file:")) / ".." + local_dir_path = str(local_dir_path.resolve()) + if os.path.isdir(local_dir_path): + return local_dir_path else: raise RuntimeError("This recorder is not saved in the local file system.") From b99de068f8dc585f93a1b95b47e7bd3ee0973d24 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Thu, 11 Mar 2021 12:52:26 +0000 Subject: [PATCH 091/134] Move save_path to get_or_create_path, and fix bugs in sfm / tabnet --- qlib/contrib/model/pytorch_alstm.py | 5 ++--- qlib/contrib/model/pytorch_alstm_ts.py | 5 ++--- qlib/contrib/model/pytorch_gats.py | 5 ++--- qlib/contrib/model/pytorch_gats_ts.py | 5 ++--- qlib/contrib/model/pytorch_gru.py | 5 ++--- qlib/contrib/model/pytorch_gru_ts.py | 5 ++--- qlib/contrib/model/pytorch_lstm.py | 5 ++--- qlib/contrib/model/pytorch_lstm_ts.py | 5 ++--- qlib/contrib/model/pytorch_nn.py | 4 ++-- qlib/contrib/model/pytorch_sfm.py | 6 +++++- qlib/contrib/model/pytorch_tabnet.py | 12 +++++++----- qlib/utils/__init__.py | 26 +++++++++++++++++--------- 12 files changed, 47 insertions(+), 41 deletions(-) diff --git a/qlib/contrib/model/pytorch_alstm.py b/qlib/contrib/model/pytorch_alstm.py index e8b316795..0cb09a05a 100644 --- a/qlib/contrib/model/pytorch_alstm.py +++ b/qlib/contrib/model/pytorch_alstm.py @@ -14,7 +14,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -230,8 +230,7 @@ class ALSTM(Model): x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] - if save_path == None: - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 best_score = -np.inf diff --git a/qlib/contrib/model/pytorch_alstm_ts.py b/qlib/contrib/model/pytorch_alstm_ts.py index 1907b9d76..0272dd2e5 100644 --- a/qlib/contrib/model/pytorch_alstm_ts.py +++ b/qlib/contrib/model/pytorch_alstm_ts.py @@ -14,7 +14,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -216,8 +216,7 @@ class ALSTM(Model): train_loader = DataLoader(dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs) valid_loader = DataLoader(dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs) - if save_path == None: - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 diff --git a/qlib/contrib/model/pytorch_gats.py b/qlib/contrib/model/pytorch_gats.py index 7d3b00232..b5330146f 100644 --- a/qlib/contrib/model/pytorch_gats.py +++ b/qlib/contrib/model/pytorch_gats.py @@ -14,7 +14,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -248,8 +248,7 @@ class GATs(Model): x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] - if save_path == None: - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 best_score = -np.inf best_epoch = 0 diff --git a/qlib/contrib/model/pytorch_gats_ts.py b/qlib/contrib/model/pytorch_gats_ts.py index 99ae3d4da..7c8015437 100644 --- a/qlib/contrib/model/pytorch_gats_ts.py +++ b/qlib/contrib/model/pytorch_gats_ts.py @@ -14,7 +14,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -264,8 +264,7 @@ class GATs(Model): train_loader = DataLoader(dl_train, sampler=sampler_train, num_workers=self.n_jobs) valid_loader = DataLoader(dl_valid, sampler=sampler_valid, num_workers=self.n_jobs) - if save_path == None: - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 diff --git a/qlib/contrib/model/pytorch_gru.py b/qlib/contrib/model/pytorch_gru.py index d4dc88452..697b71cc9 100755 --- a/qlib/contrib/model/pytorch_gru.py +++ b/qlib/contrib/model/pytorch_gru.py @@ -14,7 +14,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -230,8 +230,7 @@ class GRU(Model): x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] - if save_path == None: - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 best_score = -np.inf diff --git a/qlib/contrib/model/pytorch_gru_ts.py b/qlib/contrib/model/pytorch_gru_ts.py index 1f2137c8f..da449c714 100755 --- a/qlib/contrib/model/pytorch_gru_ts.py +++ b/qlib/contrib/model/pytorch_gru_ts.py @@ -14,7 +14,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -216,8 +216,7 @@ class GRU(Model): train_loader = DataLoader(dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs) valid_loader = DataLoader(dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs) - if save_path == None: - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 diff --git a/qlib/contrib/model/pytorch_lstm.py b/qlib/contrib/model/pytorch_lstm.py index be8d20a15..648a909c7 100755 --- a/qlib/contrib/model/pytorch_lstm.py +++ b/qlib/contrib/model/pytorch_lstm.py @@ -14,7 +14,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -226,8 +226,7 @@ class LSTM(Model): x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] - if save_path == None: - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 best_score = -np.inf diff --git a/qlib/contrib/model/pytorch_lstm_ts.py b/qlib/contrib/model/pytorch_lstm_ts.py index 3142f15c5..94d9a3f12 100755 --- a/qlib/contrib/model/pytorch_lstm_ts.py +++ b/qlib/contrib/model/pytorch_lstm_ts.py @@ -14,7 +14,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -212,8 +212,7 @@ class LSTM(Model): train_loader = DataLoader(dl_train, batch_size=self.batch_size, shuffle=True, num_workers=self.n_jobs) valid_loader = DataLoader(dl_valid, batch_size=self.batch_size, shuffle=False, num_workers=self.n_jobs) - if save_path == None: - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 diff --git a/qlib/contrib/model/pytorch_nn.py b/qlib/contrib/model/pytorch_nn.py index a51481c85..37d8dec3e 100644 --- a/qlib/contrib/model/pytorch_nn.py +++ b/qlib/contrib/model/pytorch_nn.py @@ -19,7 +19,7 @@ from .pytorch_utils import count_parameters from ...model.base import Model from ...data.dataset import DatasetH from ...data.dataset.handler import DataHandlerLP -from ...utils import unpack_archive_with_buffer, save_multiple_parts_file, create_save_path, drop_nan_by_y_index +from ...utils import unpack_archive_with_buffer, save_multiple_parts_file, get_or_create_path, drop_nan_by_y_index from ...log import get_module_logger, TimeInspector from ...workflow import R @@ -176,7 +176,7 @@ class DNNModelPytorch(Model): w_train = pd.DataFrame(np.ones_like(y_train.values), index=y_train.index) w_valid = pd.DataFrame(np.ones_like(y_valid.values), index=y_valid.index) - save_path = create_save_path(save_path) + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 best_loss = np.inf diff --git a/qlib/contrib/model/pytorch_sfm.py b/qlib/contrib/model/pytorch_sfm.py index 40b991c9c..cc600a955 100644 --- a/qlib/contrib/model/pytorch_sfm.py +++ b/qlib/contrib/model/pytorch_sfm.py @@ -13,7 +13,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -380,6 +380,7 @@ class SFM(Model): x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 best_score = -np.inf @@ -412,7 +413,10 @@ class SFM(Model): if stop_steps >= self.early_stop: self.logger.info("early stop") break + self.logger.info("best score: %.6lf @ %d" % (best_score, best_epoch)) + self.sfm_model.load_state_dict(best_param) + torch.save(best_param, save_path) if self.device != "cpu": torch.cuda.empty_cache() diff --git a/qlib/contrib/model/pytorch_tabnet.py b/qlib/contrib/model/pytorch_tabnet.py index 020bbaff2..93b2a36da 100644 --- a/qlib/contrib/model/pytorch_tabnet.py +++ b/qlib/contrib/model/pytorch_tabnet.py @@ -12,7 +12,7 @@ import logging from ...utils import ( unpack_archive_with_buffer, save_multiple_parts_file, - create_save_path, + get_or_create_path, drop_nan_by_y_index, ) from ...log import get_module_logger, TimeInspector @@ -117,10 +117,7 @@ class TabnetModel(Model): raise NotImplementedError("optimizer {} is not supported!".format(optimizer)) def pretrain_fn(self, dataset=DatasetH, pretrain_file="./pretrain/best.model"): - # make a directory if pretrian director does not exist - if pretrain_file.startswith("./pretrain") and not os.path.exists("pretrain"): - self.logger.info("make folder to store model...") - os.makedirs("pretrain") + get_or_create_path(pretrain_file) [df_train, df_valid] = dataset.prepare( ["pretrain", "pretrain_validation"], @@ -181,6 +178,7 @@ class TabnetModel(Model): df_train.fillna(df_train.mean(), inplace=True) x_train, y_train = df_train["feature"], df_train["label"] x_valid, y_valid = df_valid["feature"], df_valid["label"] + save_path = get_or_create_path(save_path) stop_steps = 0 train_loss = 0 @@ -207,12 +205,16 @@ class TabnetModel(Model): best_score = val_score stop_steps = 0 best_epoch = epoch_idx + best_param = copy.deepcopy(self.tabnet_model.state_dict()) else: stop_steps += 1 if stop_steps >= self.early_stop: self.logger.info("early stop") break + self.logger.info("best score: %.6lf @ %d" % (best_score, best_epoch)) + self.tabnet_model.load_state_dict(best_param) + torch.save(best_param, save_path) def predict(self, dataset): if not self.fitted: diff --git a/qlib/utils/__init__.py b/qlib/utils/__init__.py index 6640dae2c..e5933cd9d 100644 --- a/qlib/utils/__init__.py +++ b/qlib/utils/__init__.py @@ -24,7 +24,7 @@ import collections import numpy as np import pandas as pd from pathlib import Path -from typing import Union, Tuple +from typing import Union, Tuple, Text, Optional from ..config import C from ..log import get_module_logger, set_log_with_config @@ -276,23 +276,31 @@ def compare_dict_value(src_data: dict, dst_data: dict): return changes -def create_save_path(save_path=None): - """Create save path +def get_or_create_path(path: Optional[Text] = None, return_dir: bool = False): + """Create or get a file or directory given the path and return_dir. Parameters ---------- - save_path: str + path: a string indicates the path or None indicates creating a temporary path. + return_dir: if True, create and return a directory; otherwise c&r a file. """ - if save_path: - if not os.path.exists(save_path): - os.makedirs(save_path) + if path: + if return_dir and not os.path.exists(path): + os.makedirs(path) + elif not return_dir: # return a file, thus we need to create its parent directory + xpath = os.path.abspath(os.path.join(path, "..")) + if not os.path.exists(xpath): + os.makedirs(xpath) else: temp_dir = os.path.expanduser("~/tmp") if not os.path.exists(temp_dir): os.makedirs(temp_dir) - _, save_path = tempfile.mkstemp(dir=temp_dir) - return save_path + if return_dir: + _, path = tempfile.mkdtemp(dir=temp_dir) + else: + _, path = tempfile.mkstemp(dir=temp_dir) + return path @contextlib.contextmanager From 42be8ac312ae35ac4af3d9f5021621708657f020 Mon Sep 17 00:00:00 2001 From: zhupr Date: Wed, 10 Mar 2021 16:23:20 +0800 Subject: [PATCH 092/134] Add BaseCollector --- scripts/data_collector/base.py | 430 +++++++++++++++++++ scripts/data_collector/yahoo/collector.py | 488 ++++++---------------- 2 files changed, 548 insertions(+), 370 deletions(-) create mode 100644 scripts/data_collector/base.py diff --git a/scripts/data_collector/base.py b/scripts/data_collector/base.py new file mode 100644 index 000000000..ccd8f59e5 --- /dev/null +++ b/scripts/data_collector/base.py @@ -0,0 +1,430 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + + +import abc +import time +import datetime +import importlib +from pathlib import Path +from typing import Type +from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor + +import pandas as pd +from tqdm import tqdm +from loguru import logger +from qlib.utils import code_to_fname + + +class BaseCollector(abc.ABC): + + CACHE_FLAG = "CACHED" + NORMAL_FLAG = "NORMAL" + + DEFAULT_START_DATETIME_1D = pd.Timestamp("2000-01-01") + DEFAULT_START_DATETIME_1MIN = pd.Timestamp(datetime.datetime.now() - pd.Timedelta(days=5 * 6)) + DEFAULT_END_DATETIME_1D = pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1)) + DEFAULT_END_DATETIME_1MIN = pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1)) + + INTERVAL_1min = "1min" + INTERVAL_1d = "1d" + + def __init__( + self, + save_dir: [str, Path], + start=None, + end=None, + interval="1d", + max_workers=4, + max_collector_count=2, + delay=0, + check_data_length: bool = False, + limit_nums: int = None, + ): + """ + + Parameters + ---------- + save_dir: str + stock save dir + max_workers: int + workers, default 4 + max_collector_count: int + default 2 + delay: float + time.sleep(delay), default 0 + interval: str + freq, value from [1min, 1d], default 1d + start: str + start datetime, default None + end: str + end datetime, default None + check_data_length: bool + check data length, by default False + limit_nums: int + using for debug, by default None + """ + self.save_dir = Path(save_dir).expanduser().resolve() + self.save_dir.mkdir(parents=True, exist_ok=True) + + self.delay = delay + self.max_workers = max_workers + self.max_collector_count = max_collector_count + self.mini_symbol_map = {} + self.interval = interval + self.check_small_data = check_data_length + + self.start_datetime = self.normalize_start_datetime(start) + self.end_datetime = self.normalize_end_datetime(end) + + self.stock_list = sorted(set(self.get_stock_list())) + + if limit_nums is not None: + try: + self.stock_list = self.stock_list[: int(limit_nums)] + except Exception as e: + logger.warning(f"Cannot use limit_nums={limit_nums}, the parameter will be ignored") + + def normalize_start_datetime(self, start_datetime: [str, pd.Timestamp] = None): + return ( + pd.Timestamp(str(start_datetime)) + if start_datetime + else getattr(self, f"DEFAULT_START_DATETIME_{self.interval.upper()}") + ) + + def normalize_end_datetime(self, end_datetime: [str, pd.Timestamp] = None): + return ( + pd.Timestamp(str(end_datetime)) + if end_datetime + else getattr(self, f"DEFAULT_END_DATETIME_{self.interval.upper()}") + ) + + @property + @abc.abstractmethod + def min_numbers_trading(self): + # daily, one year: 252 / 4 + # us 1min, a week: 6.5 * 60 * 5 + # cn 1min, a week: 4 * 60 * 5 + raise NotImplementedError("rewrite min_numbers_trading") + + @abc.abstractmethod + def get_stock_list(self): + raise NotImplementedError("rewrite get_stock_list") + + @abc.abstractmethod + def normalize_symbol(self, symbol: str): + """normalize symbol""" + raise NotImplementedError("rewrite normalize_symbol") + + @abc.abstractmethod + def get_data( + self, symbol: str, interval: str, start_datetime: pd.Timestamp, end_datetime: pd.Timestamp + ) -> pd.DataFrame: + """get data with symbol + + Parameters + ---------- + symbol: str + interval: str + value from [1min, 1d] + start_datetime: pd.Timestamp + end_datetime: pd.Timestamp + + Returns + --------- + pd.DataFrame, "symbol" in pd.columns + + """ + raise NotImplementedError("rewrite get_timezone") + + def sleep(self): + time.sleep(self.delay) + + def _simple_collector(self, symbol: str): + """ + + Parameters + ---------- + symbol: str + + """ + self.sleep() + df = self.get_data(symbol, self.interval, self.start_datetime, self.end_datetime) + _result = self.NORMAL_FLAG + if self.check_small_data: + _result = self.cache_small_data(symbol, df) + if _result == self.NORMAL_FLAG: + self.save_instrument(symbol, df) + return _result + + def save_instrument(self, symbol, df: pd.DataFrame): + """save stock data to file + + Parameters + ---------- + symbol: str + stock code + df : pd.DataFrame + df.columns must contain "symbol" and "datetime" + """ + if df.empty: + logger.warning(f"{symbol} is empty") + return + + symbol = self.normalize_symbol(symbol) + symbol = code_to_fname(symbol) + stock_path = self.save_dir.joinpath(f"{symbol}.csv") + df["symbol"] = symbol + if stock_path.exists(): + _old_df = pd.read_csv(stock_path) + df = _old_df.append(df, sort=False) + df.to_csv(stock_path, index=False) + + def cache_small_data(self, symbol, df): + if len(df) <= self.min_numbers_trading: + logger.warning(f"the number of trading days of {symbol} is less than {self.min_numbers_trading}!") + _temp = self.mini_symbol_map.setdefault(symbol, []) + _temp.append(df.copy()) + return self.CACHE_FLAG + else: + if symbol in self.mini_symbol_map: + self.mini_symbol_map.pop(symbol) + return self.NORMAL_FLAG + + def _collector(self, stock_list): + + error_symbol = [] + with ThreadPoolExecutor(max_workers=self.max_workers) as executor: + with tqdm(total=len(stock_list)) as p_bar: + for _symbol, _result in zip(stock_list, executor.map(self._simple_collector, stock_list)): + if _result != self.NORMAL_FLAG: + error_symbol.append(_symbol) + p_bar.update() + print(error_symbol) + logger.info(f"error symbol nums: {len(error_symbol)}") + logger.info(f"current get symbol nums: {len(stock_list)}") + error_symbol.extend(self.mini_symbol_map.keys()) + return sorted(set(error_symbol)) + + def collector_data(self): + """collector data""" + logger.info("start collector data......") + stock_list = self.stock_list + for i in range(self.max_collector_count): + if not stock_list: + break + logger.info(f"getting data: {i+1}") + stock_list = self._collector(stock_list) + logger.info(f"{i+1} finish.") + for _symbol, _df_list in self.mini_symbol_map.items(): + self.save_instrument( + _symbol, pd.concat(_df_list, sort=False).drop_duplicates(["date"]).sort_values(["date"]) + ) + if self.mini_symbol_map: + logger.warning(f"less than {self.min_numbers_trading} stock list: {list(self.mini_symbol_map.keys())}") + logger.info(f"total {len(self.stock_list)}, error: {len(set(stock_list))}") + + +class BaseNormalize(abc.ABC): + def __init__( + self, + date_field_name: str = "date", + symbol_field_name: str = "symbol", + ): + """ + + Parameters + ---------- + date_field_name: str + date field name, default is date + symbol_field_name: str + symbol field name, default is symbol + """ + self._date_field_name = date_field_name + self._symbol_field_name = symbol_field_name + + self._calendar_list = self._get_calendar_list() + + @abc.abstractmethod + def normalize(self, df: pd.DataFrame) -> pd.DataFrame: + # normalize + raise NotImplementedError("") + + @abc.abstractmethod + def _get_calendar_list(self): + """Get benchmark calendar""" + raise NotImplementedError("") + + +class Normalize: + def __init__( + self, + source_dir: [str, Path], + target_dir: [str, Path], + normalize_class: Type[BaseNormalize], + max_workers: int = 16, + date_field_name: str = "date", + symbol_field_name: str = "symbol", + ): + """ + + Parameters + ---------- + source_dir: str or Path + The directory where the raw data collected from the Internet is saved + target_dir: str or Path + Directory for normalize data + normalize_class: Type[YahooNormalize] + normalize class + max_workers: int + Concurrent number, default is 16 + date_field_name: str + date field name, default is date + symbol_field_name: str + symbol field name, default is symbol + """ + if not (source_dir and target_dir): + raise ValueError("source_dir and target_dir cannot be None") + self._source_dir = Path(source_dir).expanduser() + self._target_dir = Path(target_dir).expanduser() + self._target_dir.mkdir(parents=True, exist_ok=True) + + self._max_workers = max_workers + + self._normalize_obj = normalize_class(date_field_name=date_field_name, symbol_field_name=symbol_field_name) + + def _executor(self, file_path: Path): + file_path = Path(file_path) + df = pd.read_csv(file_path) + df = self._normalize_obj.normalize(df) + if not df.empty: + df.to_csv(self._target_dir.joinpath(file_path.name), index=False) + + def normalize(self): + logger.info("normalize data......") + + with ProcessPoolExecutor(max_workers=self._max_workers) as worker: + file_list = list(self._source_dir.glob("*.csv")) + with tqdm(total=len(file_list)) as p_bar: + for _ in worker.map(self._executor, file_list): + p_bar.update() + + +class BaseRun(abc.ABC): + def __init__(self, source_dir=None, normalize_dir=None, max_workers=4, interval="1d"): + """ + + Parameters + ---------- + source_dir: str + The directory where the raw data collected from the Internet is saved, default "Path(__file__).parent/source" + normalize_dir: str + Directory for normalize data, default "Path(__file__).parent/normalize" + max_workers: int + Concurrent number, default is 4 + interval: str + freq, value from [1min, 1d], default 1d + """ + if source_dir is None: + source_dir = Path(self.default_base_dir).joinpath("_source") + self.source_dir = Path(source_dir).expanduser().resolve() + self.source_dir.mkdir(parents=True, exist_ok=True) + + if normalize_dir is None: + normalize_dir = Path(self.default_base_dir).joinpath("normalize") + self.normalize_dir = Path(normalize_dir).expanduser().resolve() + self.normalize_dir.mkdir(parents=True, exist_ok=True) + + self._cur_module = importlib.import_module("collector") + self.max_workers = max_workers + self.interval = interval + + @property + @abc.abstractmethod + def collector_class_name(self): + raise NotImplementedError("rewrite normalize_symbol") + + @property + @abc.abstractmethod + def normalize_class_name(self): + raise NotImplementedError("rewrite normalize_symbol") + + @property + @abc.abstractmethod + def default_base_dir(self) -> [Path, str]: + raise NotImplementedError("rewrite normalize_symbol") + + def download_data( + self, + max_collector_count=2, + delay=0, + start=None, + end=None, + interval="1d", + check_data_length=False, + limit_nums=None, + ): + """download data from Internet + + Parameters + ---------- + max_collector_count: int + default 2 + delay: float + time.sleep(delay), default 0 + interval: str + freq, value from [1min, 1d], default 1d + start: str + start datetime, default "2000-01-01" + end: str + end datetime, default ``pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1))`` + check_data_length: bool + check data length, by default False + limit_nums: int + using for debug, by default None + + Examples + --------- + # get daily data + $ python collector.py download_data --source_dir ~/.qlib/stock_data/source --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1d + # get 1m data + $ python collector.py download_data --source_dir ~/.qlib/stock_data/source --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1m + """ + + _class = getattr(self._cur_module, self.collector_class_name) # type: Type[BaseCollector] + _class( + self.source_dir, + max_workers=self.max_workers, + max_collector_count=max_collector_count, + delay=delay, + start=start, + end=end, + interval=interval, + check_data_length=check_data_length, + limit_nums=limit_nums, + ).collector_data() + + def normalize_data(self, date_field_name: str = "date", symbol_field_name: str = "symbol"): + """normalize data + + Parameters + ---------- + date_field_name: str + date field name, default date + symbol_field_name: str + symbol field name, default symbol + + Examples + --------- + $ python collector.py normalize_data --source_dir ~/.qlib/stock_data/source --normalize_dir ~/.qlib/stock_data/normalize --region CN --interval 1d + """ + _class = getattr(self._cur_module, self.normalize_class_name) + yc = Normalize( + source_dir=self.source_dir, + target_dir=self.normalize_dir, + normalize_class=_class, + max_workers=self.max_workers, + date_field_name=date_field_name, + symbol_field_name=symbol_field_name, + ) + yc.normalize() diff --git a/scripts/data_collector/yahoo/collector.py b/scripts/data_collector/yahoo/collector.py index 743f89462..eadc381ec 100644 --- a/scripts/data_collector/yahoo/collector.py +++ b/scripts/data_collector/yahoo/collector.py @@ -10,158 +10,26 @@ import importlib from abc import ABC from pathlib import Path from typing import Iterable, Type -from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor import fire import requests import numpy as np import pandas as pd -from tqdm import tqdm from loguru import logger from yahooquery import Ticker from dateutil.tz import tzlocal from qlib.utils import code_to_fname, fname_to_code +from qlib.config import REG_CN as REGION_CN CUR_DIR = Path(__file__).resolve().parent sys.path.append(str(CUR_DIR.parent.parent)) +from data_collector.base import BaseCollector, BaseNormalize, BaseRun from data_collector.utils import get_calendar_list, get_hs_stock_symbols, get_us_stock_symbols INDEX_BENCH_URL = "http://push2his.eastmoney.com/api/qt/stock/kline/get?secid=1.{index_code}&fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58&klt=101&fqt=0&beg={begin}&end={end}" -REGION_CN = "CN" -REGION_US = "US" -class YahooData: - START_DATETIME = pd.Timestamp("2000-01-01") - HIGH_FREQ_START_DATETIME = pd.Timestamp(datetime.datetime.now() - pd.Timedelta(days=5 * 6)) - END_DATETIME = pd.Timestamp(datetime.datetime.now() + pd.Timedelta(days=1)) - INTERVAL_1min = "1min" - INTERVAL_1d = "1d" - - def __init__( - self, - timezone: str = None, - start=None, - end=None, - interval="1d", - delay=0, - show_1min_logging: bool = False, - ): - """ - - Parameters - ---------- - timezone: str - The timezone where the data is located - delay: float - time.sleep(delay), default 0 - interval: str - freq, value from [1min, 1d], default 1min - start: str - start datetime, default None - end: str - end datetime, default None - show_1min_logging: bool - show 1min logging, by default False; if True, there may be many warning logs - """ - self._timezone = tzlocal() if timezone is None else timezone - self._delay = delay - self._interval = interval - self._show_1min_logging = show_1min_logging - self.start_datetime = pd.Timestamp(str(start)) if start else self.START_DATETIME - self.end_datetime = min(pd.Timestamp(str(end)) if end else self.END_DATETIME, self.END_DATETIME) - if self._interval == self.INTERVAL_1min: - self.start_datetime = max(self.start_datetime, self.HIGH_FREQ_START_DATETIME) - elif self._interval == self.INTERVAL_1d: - pass - else: - raise ValueError(f"interval error: {self._interval}") - - # using for 1min - self._next_datetime = self.convert_datetime(self.start_datetime.date() + pd.Timedelta(days=1), self._timezone) - self._latest_datetime = self.convert_datetime(self.end_datetime.date(), self._timezone) - - self.start_datetime = self.convert_datetime(self.start_datetime, self._timezone) - self.end_datetime = self.convert_datetime(self.end_datetime, self._timezone) - - @staticmethod - def convert_datetime(dt: [pd.Timestamp, datetime.date, str], timezone): - try: - dt = pd.Timestamp(dt, tz=timezone).timestamp() - dt = pd.Timestamp(dt, tz=tzlocal(), unit="s") - except ValueError as e: - pass - return dt - - def _sleep(self): - time.sleep(self._delay) - - @staticmethod - def get_data_from_remote(symbol, interval, start, end, show_1min_logging: bool = False): - error_msg = f"{symbol}-{interval}-{start}-{end}" - - def _show_logging_func(): - if interval == YahooData.INTERVAL_1min and show_1min_logging: - logger.warning(f"{error_msg}:{_resp}") - - interval = "1m" if interval in ["1m", "1min"] else interval - try: - _resp = Ticker(symbol, asynchronous=False).history(interval=interval, start=start, end=end) - if isinstance(_resp, pd.DataFrame): - return _resp.reset_index() - elif isinstance(_resp, dict): - _temp_data = _resp.get(symbol, {}) - if isinstance(_temp_data, str) or ( - isinstance(_resp, dict) and _temp_data.get("indicators", {}).get("quote", None) is None - ): - _show_logging_func() - else: - _show_logging_func() - except Exception as e: - logger.warning(f"{error_msg}:{e}") - - def get_data(self, symbol: str) -> [pd.DataFrame]: - def _get_simple(start_, end_): - self._sleep() - _remote_interval = "1m" if self._interval == self.INTERVAL_1min else self._interval - return self.get_data_from_remote( - symbol, - interval=_remote_interval, - start=start_, - end=end_, - show_1min_logging=self._show_1min_logging, - ) - - _result = None - if self._interval == self.INTERVAL_1d: - _result = _get_simple(self.start_datetime, self.end_datetime) - elif self._interval == self.INTERVAL_1min: - if self._next_datetime >= self._latest_datetime: - _result = _get_simple(self.start_datetime, self.end_datetime) - else: - _res = [] - - def _get_multi(start_, end_): - _resp = _get_simple(start_, end_) - if _resp is not None and not _resp.empty: - _res.append(_resp) - - for _s, _e in ( - (self.start_datetime, self._next_datetime), - (self._latest_datetime, self.end_datetime), - ): - _get_multi(_s, _e) - for _start in pd.date_range(self._next_datetime, self._latest_datetime, closed="left"): - _end = _start + pd.Timedelta(days=1) - _get_multi(_start, _end) - if _res: - _result = pd.concat(_res, sort=False).sort_values(["symbol", "date"]) - else: - raise ValueError(f"cannot support {self._interval}") - return _result - - -class YahooCollector: +class YahooCollector(BaseCollector): def __init__( self, save_dir: [str, Path], @@ -173,7 +41,6 @@ class YahooCollector: delay=0, check_data_length: bool = False, limit_nums: int = None, - show_1min_logging: bool = False, ): """ @@ -197,131 +64,118 @@ class YahooCollector: check data length, by default False limit_nums: int using for debug, by default None - show_1min_logging: bool - show 1m logging, by default False; if True, there may be many warning logs """ - self.save_dir = Path(save_dir).expanduser().resolve() - self.save_dir.mkdir(parents=True, exist_ok=True) - - self._delay = delay - self.max_workers = max_workers - self._max_collector_count = max_collector_count - self._mini_symbol_map = {} - self._interval = interval - self._check_small_data = check_data_length - - self.stock_list = sorted(set(self.get_stock_list())) - if limit_nums is not None: - try: - self.stock_list = self.stock_list[: int(limit_nums)] - except Exception as e: - logger.warning(f"Cannot use limit_nums={limit_nums}, the parameter will be ignored") - - self.yahoo_data = YahooData( - timezone=self._timezone, + super(YahooCollector, self).__init__( + save_dir=save_dir, start=start, end=end, interval=interval, + max_workers=max_workers, + max_collector_count=max_collector_count, delay=delay, - show_1min_logging=show_1min_logging, + check_data_length=check_data_length, + limit_nums=limit_nums, ) - @property - @abc.abstractmethod - def min_numbers_trading(self): - # daily, one year: 252 / 4 - # us 1min, a week: 6.5 * 60 * 5 - # cn 1min, a week: 4 * 60 * 5 - raise NotImplementedError("rewrite min_numbers_trading") + self.init_datetime() - @abc.abstractmethod - def get_stock_list(self): - raise NotImplementedError("rewrite get_stock_list") + def init_datetime(self): + if self.interval == self.INTERVAL_1min: + self.start_datetime = max(self.start_datetime, self.DEFAULT_START_DATETIME_1MIN) + elif self.interval == self.INTERVAL_1d: + pass + else: + raise ValueError(f"interval error: {self.interval}") + + # using for 1min + self._next_datetime = self.convert_datetime(self.start_datetime.date() + pd.Timedelta(days=1), self._timezone) + self._latest_datetime = self.convert_datetime(self.end_datetime.date(), self._timezone) + + self.start_datetime = self.convert_datetime(self.start_datetime, self._timezone) + self.end_datetime = self.convert_datetime(self.end_datetime, self._timezone) + + @staticmethod + def convert_datetime(dt: [pd.Timestamp, datetime.date, str], timezone): + try: + dt = pd.Timestamp(dt, tz=timezone).timestamp() + dt = pd.Timestamp(dt, tz=tzlocal(), unit="s") + except ValueError as e: + pass + return dt @property @abc.abstractmethod def _timezone(self): raise NotImplementedError("rewrite get_timezone") - def save_stock(self, symbol, df: pd.DataFrame): - """save stock data to file + @staticmethod + def get_data_from_remote(symbol, interval, start, end, show_1min_logging: bool = False): + error_msg = f"{symbol}-{interval}-{start}-{end}" - Parameters - ---------- - symbol: str - stock code - df : pd.DataFrame - df.columns must contain "symbol" and "datetime" - """ - if df.empty: - logger.warning(f"{symbol} is empty") - return + def _show_logging_func(): + if interval == YahooCollector.INTERVAL_1min and show_1min_logging: + logger.warning(f"{error_msg}:{_resp}") - symbol = self.normalize_symbol(symbol) - symbol = code_to_fname(symbol) - stock_path = self.save_dir.joinpath(f"{symbol}.csv") - df["symbol"] = symbol - if stock_path.exists(): - _old_df = pd.read_csv(stock_path) - df = _old_df.append(df, sort=False) - df.to_csv(stock_path, index=False) + interval = "1m" if interval in ["1m", "1min"] else interval + try: + _resp = Ticker(symbol, asynchronous=False).history(interval=interval, start=start, end=end) + if isinstance(_resp, pd.DataFrame): + return _resp.reset_index() + elif isinstance(_resp, dict): + _temp_data = _resp.get(symbol, {}) + if isinstance(_temp_data, str) or ( + isinstance(_resp, dict) and _temp_data.get("indicators", {}).get("quote", None) is None + ): + _show_logging_func() + else: + _show_logging_func() + except Exception as e: + logger.warning(f"{error_msg}:{e}") - def _save_small_data(self, symbol, df): - if len(df) <= self.min_numbers_trading: - logger.warning(f"the number of trading days of {symbol} is less than {self.min_numbers_trading}!") - _temp = self._mini_symbol_map.setdefault(symbol, []) - _temp.append(df.copy()) - return None - else: - if symbol in self._mini_symbol_map: - self._mini_symbol_map.pop(symbol) - return symbol + def get_data( + self, symbol: str, interval: str, start_datetime: pd.Timestamp, end_datetime: pd.Timestamp + ) -> pd.DataFrame: + def _get_simple(start_, end_): + self.sleep() + _remote_interval = "1m" if interval == self.INTERVAL_1min else interval + return self.get_data_from_remote( + symbol, + interval=_remote_interval, + start=start_, + end=end_, + ) - def _get_data(self, symbol): _result = None - df = self.yahoo_data.get_data(symbol) - if isinstance(df, pd.DataFrame): - if not df.empty: - if self._check_small_data: - if self._save_small_data(symbol, df) is not None: - _result = symbol - self.save_stock(symbol, df) - else: - _result = symbol - self.save_stock(symbol, df) - return _result + if interval == self.INTERVAL_1d: + _result = _get_simple(start_datetime, end_datetime) + elif interval == self.INTERVAL_1min: + if self._next_datetime >= self._latest_datetime: + _result = _get_simple(start_datetime, end_datetime) + else: + _res = [] - def _collector(self, stock_list): + def _get_multi(start_, end_): + _resp = _get_simple(start_, end_) + if _resp is not None and not _resp.empty: + _res.append(_resp) - error_symbol = [] - with ThreadPoolExecutor(max_workers=self.max_workers) as executor: - with tqdm(total=len(stock_list)) as p_bar: - for _symbol, _result in zip(stock_list, executor.map(self._get_data, stock_list)): - if _result is None: - error_symbol.append(_symbol) - p_bar.update() - print(error_symbol) - logger.info(f"error symbol nums: {len(error_symbol)}") - logger.info(f"current get symbol nums: {len(stock_list)}") - error_symbol.extend(self._mini_symbol_map.keys()) - return sorted(set(error_symbol)) + for _s, _e in ( + (self.start_datetime, self._next_datetime), + (self._latest_datetime, self.end_datetime), + ): + _get_multi(_s, _e) + for _start in pd.date_range(self._next_datetime, self._latest_datetime, closed="left"): + _end = _start + pd.Timedelta(days=1) + _get_multi(_start, _end) + if _res: + _result = pd.concat(_res, sort=False).sort_values(["symbol", "date"]) + else: + raise ValueError(f"cannot support {self.interval}") + return pd.DataFrame() if _result is None else _result def collector_data(self): """collector data""" - logger.info("start collector yahoo data......") - stock_list = self.stock_list - for i in range(self._max_collector_count): - if not stock_list: - break - logger.info(f"getting data: {i+1}") - stock_list = self._collector(stock_list) - logger.info(f"{i+1} finish.") - for _symbol, _df_list in self._mini_symbol_map.items(): - self.save_stock(_symbol, pd.concat(_df_list, sort=False).drop_duplicates(["date"]).sort_values(["date"])) - if self._mini_symbol_map: - logger.warning(f"less than {self.min_numbers_trading} stock list: {list(self._mini_symbol_map.keys())}") - logger.info(f"total {len(self.stock_list)}, error: {len(set(stock_list))}") - + super(YahooCollector, self).collector_data() self.download_index_data() @abc.abstractmethod @@ -329,11 +183,6 @@ class YahooCollector: """download index data""" raise NotImplementedError("rewrite download_index_data") - @abc.abstractmethod - def normalize_symbol(self, symbol: str): - """normalize symbol""" - raise NotImplementedError("rewrite normalize_symbol") - class YahooCollectorCN(YahooCollector, ABC): def get_stock_list(self): @@ -360,8 +209,8 @@ class YahooCollectorCN1d(YahooCollectorCN): def download_index_data(self): # TODO: from MSN _format = "%Y%m%d" - _begin = self.yahoo_data.start_datetime.strftime(_format) - _end = (self.yahoo_data.end_datetime + pd.Timedelta(days=-1)).strftime(_format) + _begin = self.start_datetime.strftime(_format) + _end = (self.end_datetime + pd.Timedelta(days=-1)).strftime(_format) for _index_name, _index_code in {"csi300": "000300", "csi100": "000903"}.items(): logger.info(f"get bench data: {_index_name}({_index_code})......") try: @@ -396,7 +245,7 @@ class YahooCollectorCN1min(YahooCollectorCN): def download_index_data(self): # TODO: 1m - logger.warning(f"{self.__class__.__name__} {self._interval} does not support: download_index_data") + logger.warning(f"{self.__class__.__name__} {self.interval} does not support: download_index_data") class YahooCollectorUS(YahooCollector, ABC): @@ -433,29 +282,10 @@ class YahooCollectorUS1min(YahooCollectorUS): return 60 * 6.5 * 5 -class YahooNormalize: +class YahooNormalize(BaseNormalize): COLUMNS = ["open", "close", "high", "low", "volume"] DAILY_FORMAT = "%Y-%m-%d" - def __init__( - self, - date_field_name: str = "date", - symbol_field_name: str = "symbol", - ): - """ - - Parameters - ---------- - date_field_name: str - date field name, default is date - symbol_field_name: str - symbol field name, default is symbol - """ - self._date_field_name = date_field_name - self._symbol_field_name = symbol_field_name - - self._calendar_list = self._get_calendar_list() - @staticmethod def normalize_yahoo( df: pd.DataFrame, @@ -498,11 +328,6 @@ class YahooNormalize: df = self.adjusted_price(df) return df - @abc.abstractmethod - def _get_calendar_list(self): - """Get benchmark calendar""" - raise NotImplementedError("") - @abc.abstractmethod def adjusted_price(self, df: pd.DataFrame) -> pd.DataFrame: """adjusted price""" @@ -618,7 +443,9 @@ class YahooNormalize1min(YahooNormalize, ABC): # get 1d data from yahoo _start = pd.Timestamp(df[self._date_field_name].min()).strftime(self.DAILY_FORMAT) _end = (pd.Timestamp(df[self._date_field_name].max()) + pd.Timedelta(days=1)).strftime(self.DAILY_FORMAT) - data_1d = YahooData.get_data_from_remote(self.symbol_to_yahoo(symbol), interval="1d", start=_start, end=_end) + data_1d = YahooCollector.get_data_from_remote( + self.symbol_to_yahoo(symbol), interval="1d", start=_start, end=_end + ) if data_1d is None or data_1d.empty: df["factor"] = 1 # TODO: np.nan or 1 or 0 @@ -723,62 +550,8 @@ class YahooNormalizeCN1min(YahooNormalizeCN, YahooNormalize1min): return get_calendar_list("ALL") -class Normalize: - def __init__( - self, - source_dir: [str, Path], - target_dir: [str, Path], - normalize_class: Type[YahooNormalize], - max_workers: int = 16, - date_field_name: str = "date", - symbol_field_name: str = "symbol", - ): - """ - - Parameters - ---------- - source_dir: str or Path - The directory where the raw data collected from the Internet is saved - target_dir: str or Path - Directory for normalize data - normalize_class: Type[YahooNormalize] - normalize class - max_workers: int - Concurrent number, default is 16 - date_field_name: str - date field name, default is date - symbol_field_name: str - symbol field name, default is symbol - """ - if not (source_dir and target_dir): - raise ValueError("source_dir and target_dir cannot be None") - self._source_dir = Path(source_dir).expanduser() - self._target_dir = Path(target_dir).expanduser() - self._target_dir.mkdir(parents=True, exist_ok=True) - - self._max_workers = max_workers - - self._normalize_obj = normalize_class(date_field_name=date_field_name, symbol_field_name=symbol_field_name) - - def _executor(self, file_path: Path): - file_path = Path(file_path) - df = pd.read_csv(file_path) - df = self._normalize_obj.normalize(df) - if not df.empty: - df.to_csv(self._target_dir.joinpath(file_path.name), index=False) - - def normalize(self): - logger.info("normalize data......") - - with ProcessPoolExecutor(max_workers=self._max_workers) as worker: - file_list = list(self._source_dir.glob("*.csv")) - with tqdm(total=len(file_list)) as p_bar: - for _ in worker.map(self._executor, file_list): - p_bar.update() - - -class Run: - def __init__(self, source_dir=None, normalize_dir=None, max_workers=4, region=REGION_CN): +class Run(BaseRun): + def __init__(self, source_dir=None, normalize_dir=None, max_workers=4, interval="1d", region=REGION_CN): """ Parameters @@ -789,23 +562,26 @@ class Run: Directory for normalize data, default "Path(__file__).parent/normalize" max_workers: int Concurrent number, default is 4 + interval: str + freq, value from [1min, 1d], default 1d region: str region, value from ["CN", "US"], default "CN" """ - if source_dir is None: - source_dir = CUR_DIR.joinpath("source") - self.source_dir = Path(source_dir).expanduser().resolve() - self.source_dir.mkdir(parents=True, exist_ok=True) - - if normalize_dir is None: - normalize_dir = CUR_DIR.joinpath("normalize") - self.normalize_dir = Path(normalize_dir).expanduser().resolve() - self.normalize_dir.mkdir(parents=True, exist_ok=True) - - self._cur_module = importlib.import_module("collector") - self.max_workers = max_workers + super().__init__(source_dir, normalize_dir, max_workers, interval) self.region = region + @property + def collector_class_name(self): + return f"YahooCollector{self.region.upper()}{self.interval}" + + @property + def normalize_class_name(self): + return f"YahooNormalize{self.region.upper()}{self.interval}" + + @property + def default_base_dir(self) -> [Path, str]: + return CUR_DIR + def download_data( self, max_collector_count=2, @@ -815,7 +591,6 @@ class Run: interval="1d", check_data_length=False, limit_nums=None, - show_1min_logging=False, ): """download data from Internet @@ -835,8 +610,6 @@ class Run: check data length, by default False limit_nums: int using for debug, by default None - show_1min_logging: bool - show 1m logging, by default False; if True, there may be many warning logs Examples --------- @@ -846,29 +619,13 @@ class Run: $ python collector.py download_data --source_dir ~/.qlib/stock_data/source --region CN --start 2020-11-01 --end 2020-11-10 --delay 0.1 --interval 1m """ - _class = getattr( - self._cur_module, f"YahooCollector{self.region.upper()}{interval}" - ) # type: Type[YahooCollector] - _class( - self.source_dir, - max_workers=self.max_workers, - max_collector_count=max_collector_count, - delay=delay, - start=start, - end=end, - interval=interval, - check_data_length=check_data_length, - limit_nums=limit_nums, - show_1min_logging=show_1min_logging, - ).collector_data() + super(Run, self).download_data(max_collector_count, delay, start, end, interval, check_data_length, limit_nums) - def normalize_data(self, interval: str = "1d", date_field_name: str = "date", symbol_field_name: str = "symbol"): + def normalize_data(self, date_field_name: str = "date", symbol_field_name: str = "symbol"): """normalize data Parameters ---------- - interval: str - freq, value from [1min, 1d], default 1d date_field_name: str date field name, default date symbol_field_name: str @@ -878,16 +635,7 @@ class Run: --------- $ python collector.py normalize_data --source_dir ~/.qlib/stock_data/source --normalize_dir ~/.qlib/stock_data/normalize --region CN --interval 1d """ - _class = getattr(self._cur_module, f"YahooNormalize{self.region.upper()}{interval}") - yc = Normalize( - source_dir=self.source_dir, - target_dir=self.normalize_dir, - normalize_class=_class, - max_workers=self.max_workers, - date_field_name=date_field_name, - symbol_field_name=symbol_field_name, - ) - yc.normalize() + super(Run, self).normalize_data(date_field_name, symbol_field_name) if __name__ == "__main__": From 67fbdafe7656aae9d9b51b72391df4cba72e5f97 Mon Sep 17 00:00:00 2001 From: D-X-Y <280835372@qq.com> Date: Fri, 12 Mar 2021 02:42:25 +0000 Subject: [PATCH 093/134] Fix many bugs in TabNet and use_gpu --- .gitignore | 2 ++ examples/benchmarks/README.md | 2 +- .../benchmarks/TabNet/pretrain/best.model | Bin 1955014 -> 0 bytes .../workflow_config_TabNet_Alpha158.yaml | 2 +- qlib/contrib/model/pytorch_alstm.py | 5 ++- qlib/contrib/model/pytorch_alstm_ts.py | 10 +++--- qlib/contrib/model/pytorch_gats.py | 9 ++--- qlib/contrib/model/pytorch_gats_ts.py | 10 +++--- qlib/contrib/model/pytorch_gru.py | 10 +++--- qlib/contrib/model/pytorch_gru_ts.py | 5 ++- qlib/contrib/model/pytorch_lstm.py | 5 ++- qlib/contrib/model/pytorch_lstm_ts.py | 10 +++--- qlib/contrib/model/pytorch_nn.py | 16 ++++----- qlib/contrib/model/pytorch_tabnet.py | 33 +++++++++++------- 14 files changed, 70 insertions(+), 49 deletions(-) delete mode 100644 examples/benchmarks/TabNet/pretrain/best.model diff --git a/.gitignore b/.gitignore index 0ddd5d21f..33a2a2530 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,5 @@ tags .vscode/ *.swp + +./pretrain diff --git a/examples/benchmarks/README.md b/examples/benchmarks/README.md index c5bfced6d..f1e7437fa 100644 --- a/examples/benchmarks/README.md +++ b/examples/benchmarks/README.md @@ -17,6 +17,7 @@ The numbers shown below demonstrate the performance of the entire `workflow` of | ALSTM (Yao Qin, et al.) | Alpha360 | 0.0493±0.01 | 0.3778±0.06| 0.0585±0.00 | 0.4606±0.04 | 0.0513±0.03 | 0.6727±0.38| -0.1085±0.02 | | GATs (Petar Velickovic, et al.) | Alpha360 | 0.0475±0.00 | 0.3515±0.02| 0.0592±0.00 | 0.4585±0.01 | 0.0876±0.02 | 1.1513±0.27| -0.0795±0.02 | | DoubleEnsemble (Chuheng Zhang, et al.) | Alpha360 | 0.0407±0.00| 0.3053±0.00 | 0.0490±0.00 | 0.3840±0.00 | 0.0380±0.02 | 0.5000±0.21 | -0.0984±0.02 | + ## Alpha158 dataset | Model Name | Dataset | IC | ICIR | Rank IC | Rank ICIR | Annualized Return | Information Ratio | Max Drawdown | |---|---|---|---|---|---|---|---|---| @@ -25,7 +26,6 @@ The numbers shown below demonstrate the performance of the entire `workflow` of | XGBoost (Tianqi Chen, et al.) | Alpha158 | 0.0481±0.00 | 0.3659±0.00| 0.0495±0.00 | 0.4033±0.00 | 0.1111±0.00 | 1.2915±0.00| -0.0893±0.00 | | LightGBM (Guolin Ke, et al.) | Alpha158 | 0.0475±0.00 | 0.3979±0.00| 0.0485±0.00 | 0.4123±0.00 | 0.1143±0.00 | 1.2744±0.00| -0.0800±0.00 | | MLP | Alpha158 | 0.0358±0.00 | 0.2738±0.03| 0.0425±0.00 | 0.3221±0.01 | 0.0836±0.02 | 1.0323±0.25| -0.1127±0.02 | -| TabNet with pretrain (Sercan O. Arikm et al) | Alpha158 | 0.0344±0.00|0.205±0.11|0.0398±0.00 |0.3479±0.01|0.0827±0.02|1.1141±0.32 |-0.0925±0.02 | | TFT (Bryan Lim, et al.) | Alpha158 (with selected 20 features) | 0.0343±0.00 | 0.2071±0.02| 0.0107±0.00 | 0.0660±0.02 | 0.0623±0.02 | 0.5818±0.20| -0.1762±0.01 | | GRU (Kyunghyun Cho, et al.) | Alpha158 (with selected 20 features) | 0.0311±0.00 | 0.2418±0.04| 0.0425±0.00 | 0.3434±0.02 | 0.0330±0.02 | 0.4805±0.30| -0.1021±0.02 | | LSTM (Sepp Hochreiter, et al.) | Alpha158 (with selected 20 features) | 0.0312±0.00 | 0.2394±0.04| 0.0418±0.00 | 0.3324±0.03 | 0.0298±0.02 | 0.4198±0.33| -0.1348±0.03 | diff --git a/examples/benchmarks/TabNet/pretrain/best.model b/examples/benchmarks/TabNet/pretrain/best.model deleted file mode 100644 index a85cbe392a4789d84331692bde397a4e129eb0b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1955014 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

^Pfed?d4NcWUQZ`*qBQ;EWL`eCFDWSAqP`m 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

GCJc=4Ed^9 zN0u3t)B5`3V31o1X%1Xp(K3S^u?b~!8s)%xW;n;pTL~j|LNIEq0rv}z;mNWFQuf~} zIC@tI`JDVfYmN{`eXk(7>Cjohv>B)`nX!RR!u0yQ|VqTfp-Y<@-i!<@Ti3seI`$tlbZ^r3w zp0P1Jf5~6Y>utO(figy2bXR%`ESSr6H(fdAjsF?;=6fFQH(voX>_V96@BE~OyN-)K z_7jB%HR$niF0tjjl-!Tjc=RqW9NkLLs=|x>GbzN*mKcb>#GM`QjM1*Q4d76h32n{M zRMmJBs_y;4SXw61b+x(V5}N{+YBH$gx&W)Pxjw(ld<=VOMPprZVbG|TE(|fo`f6o7 zuWF2f{H^2*F9E)nzVyHP7@{DRKwDx?lf5n#jFazN;Jf5SZ9n71)G;g#pPYQe{#lVv^u_Dht}=Vp zY4iZQR#z4@<*Pv}Po4^I*ox#_F~=U4LQ$h|cx>>Pbv%_ywp)gvuS`^@`{oHQn_dXV z=dWTFy~Ke(FbfLQkyzU6 z){1??%Wze?IG$eG02Uuqa6<+^*)eQE6vuP*!wq_`zoA_%2l0qy4rr)u=d`sWAwr{H2d?j+3CCC`RPY6EZ0F znd!QqgbgP?60d7VNdHI|&6!X_*Ya@Yb>R#8>WVB8{E-6x&ACaMOG-fOK_7YeA(29E zk5=*XKx*a@i&=6uWJjw7__DLe^DTa;cVHd_fh7I+;vy9eI0j)G>%m4ThhBVlf<#m` zvl8o6Fjv9_|T{w;C$;PeURM%KYo?t#DOd1i^o*R7;_ouIMi#dy$RA6fJ#0Uvx; zXI47I;QO3ZI9WRjgI3!?mVN;C3ya}oP#2M7PJ#z-1b#JbVe{KEp=5s|%usB_c>YHC zRT2gfw<4LPbKBS_d})}{l7YK+`x5GT3JRnX;7i~Ik`y&WG|tCTp2Qk<)4Lb6?t3cC zUvCOklZl{ivkST0T;|ww@Mb z?_gVN=HTJKmUtsijfmY2!{YQkbS;fWMKFeD{bZCGHsjors*V8RJjf6a!;ioA5$#Nc&K;Bz4d_tb}C{J%N~UgSzg zr@El{kTdNzEeC#`Z`91M3g5k{C-yuW86KY-)YY<`Hdk_-1I1WU`@Dq7+I^djtq5Uj z-)DBd@s7jHK51+=O$Hu?N@BTEkbao`i2VGn9@IP+IWus1AF^q+n4lX)R?9nMXi6p2O)G&TwoRb7 zWjgiDIn3?lOow5)EO_-&2j5ke;w%3z;#~@y4=aFq9Vg(*ja>Xx zAj=f`U1mH>t8s6^e5j%MpmyH{I{xm0va^ERR&y*ImyJdF6Xg&=P2j;)KH}(ubkCN9 z_~*+6O>9hqZ&M^e=zT6s)#xL6!>?G=bvFPoFN%ukrcIPOJ`?Tb?n6@$y~VUnl58E^OPgLd@@XbNpW-^UeNs#S*UrQ|kR zI#P~4300j}rs!}xfZ@!mlP{=KQyl6g&Eq_YQet?m0IKFi!}2SYbnoIw%v-BLZ6fy3 zj^-@Qp9KD7<)xqIxnliv8^ za|BH1y#1^NH88w#Aua?3xY26~-drzP#aF(w#Y>9vIh!HBcrfe@&cO>N^YMQ6GHRx= z2kbajjQgY+R(#5#EpsC$T(8Os^v)BG4 zP9w7+aBc^g6!Jsc=@T@34y4qIIKXs>AwIf`=H$Iw3 z2&zI2$KBeQy%AoCDB_1@m1xYKp^q+Zq?@g{o>8O_Y`IZLMPKETe(h8=PSSyS#;?ge zw?5W3CJLtIiX-kkz&NpYXX1@y`uMTtOYfzS`e<% z1lzeXAQ+N}V_UY8!gxtKN8u1;ynfBnoMyJ+6GJ{c^CY`I%cF}$6k~qeH|-vM&=JJW zAY0+W6jTgw;#`gRz?Vtda6u=&dTliU(;#N_Pb;oIeZYrc-)C zW*_8Vt7Q9WF6P%?BMo|@aO35Edi};TO8ITTp?`#pszWkyWgQx>E+o+xr=jeR-6%Rf zLCu(k}8>FpqjY};KybXraT=t-yVk|Y>#_roJ<`luqAf#0ni z(ZN6h4`sHX%e+e3vFZhVWS>a%g#0??9*E$1nPPY?y8!o|jYp{?3+P!JbxcueB7T-p z%+j{CTpuEqeDG@lrSGTLy=BUvlk+JK&#-~-+c_pl=6ZB$t$^Q>UrE>&Ylxd03I}Tk z=%%1HQYs#SZ!hhI;2(QY&zT=wcsLgK!)cwfN915L$D2PXVhT(1mji!r0<-6cIPztt z68SIb?cny_@FE2Z7H~Xr_G<7K}TW={HYowPMoLwEzTS+i_Jof@A6nLwg)S7K9lyM zF?Q1n3E0*Y0OP_t@pX1EN?30~ozZIeP!DSCOfFOeEH zM01BF0GFY!t4U!qr>n5aaz8~Zdsxj`IFFmaylA3be!EcYG@q%F;UW`nGyc>S_ zpnUkTlvu1;# zLJ=@r&h(sHK5U=wkB5SuQ9T}W^avBcQGIQsX<^`DvJXD5&Bk;0-LXGTis zedru3nZ$MrlqdTIiO7w90zCujht3N+I;0 zp(@j(DL|~H)}iyoar!3J5i%WlF-tX;Y^pB@&#rW0aCR2Xr7@rr$r5Q=4pur`FHET( zUqAGL0kK@BRZNu{HfeT_9w~=5!R{-M%>1 zXdi>CIHpg&=y8bp@Rp5fHU_@oQ+RvLOkyGsMN8Jof=!tml(*(kwT)XKBC{GD{kj;H zi9hspZ!F=TD27Gz%rS67Ctbl`hL*Ki_?PPd{EwpZ@T>8C<9K^14J{QdqKsr#=e`c2 zDH0hiqwItbD(#)L_ugr0qRxGtN`*p%sJ@A)kX?v`-}CzqdcAti^W67!eLnBE$<|uX z@p?&b&9Q~U-idIg^E>gszYVrE_(1D5MOcv&iLce=$QBb8=J6)uoNqDA95j?JzTt{5 z#_H*hLPxOp3LrD%0#y>NrXegh62sit3iq^79~BKKQeO@+Lkn>C!4y2loLfKDNkZJ* zY=$T91yflyAn%;cs>!csMLn%T=T-4AT*5>*6a|Rgy#zEBJrDVZZScC~0aR%@3aY8P z^uL8USa~{-W{T@WMAT9o?3cj{JgQhbIurIjjfS7Mg6Z|aOL&yYCBHtk58E%6(N&S< z)O%GK$X(oyd*2Je>1E8^fE`Yn7pH?>q7V5Haf`KLn2!uaoqz_1gV5(^0onQH*u?CB zHVrI6?+R129?*rtW6bluQJ;L(y#n8ueD=o;GhoN(xe(&W^q?45uVTPlPCSSJ~kDdf?Xdg46HbWz^K6M07;eDgRI<^&ny9j2$!J>do4 zRjUjnA9|wGG9QTNm&I=-DJUeg43^zUq8_Uf$o?&k&~(p%?hdFS;-;aDuY(`G*Qdiv z+YZhT6Mw4xfng<{7$w$T7h$CfbFS+=1I5Q9@yMVrFrWi!9MQ&#J$?|D#+1Pv&3MAq z(c~C0-Zt%Py=3y{Vmv>aA2v3hB5%L&VY6>4bp6l*x>X1lWd$O)dN%rryTT}q0=v|= zge+pd7u^ZiZ8Od)SC{}@ZVpgx zHb7@CiNubf3|QF9@M7XVHVS3=)250OsAiFf9UjG~=RXUfY!{{~y1=|>hLd+$5VS4~ zHVOpHr&+s_$*Tdz#hxsO?cVwLBWDj}r166B(OdN3ArG=%C6g3xj>M3G94zH#QT>4b zXiHl$-n-F25>_R`jksK(=`lp|1=B@a;*7Dqy>$2HJy@gQj$%vP;U<&y8B8{1?o~n5 zh&gZPtYG*ZX62lvl6m07oCl8UaOqLU^U%pv#>8|ciyk~kxhE2-PwO`l9B>uV-Cdzz zd@(btVY+a;8TYHJ5o|c<0}?;aLDIOXRD**8|a zc@exCe@N5qD&a+sG9Eja!Q_;gu2*sboS$)oTyptNm3rOi=}KpuJmLzSNAD4#WnO5J ztp$-Fk9@^t=vowo!v~o?h7KD$Q5H+gqBu#{jp?DHtIS!>3Y0QSS#tt)8WeNQF`5$r zDY{Bv#++C3LQ1Ht(n&P&t|C*_&18J%96Tdb3OdH8v7B1NVJt_oab&inohOe0GCc8DrvO@Rg%1lmPs@Rmj7o_lU6S6|nhpp7Jxi-}qZ~ z!0YV{t3}ITOVmc3a%Q8Zg(WI4-fL)?FA3gOu@E>@nPFHQ!}2F;Q2*A2O6Nx6&Icxx z?`}Cu&F~++ClrrsPL(iSQ*U_9WNtK=-m8|u0dO!2N8Rgb`0Ygl9qmwo52-#ZNAG<& zu)mc4dK-yz%hN!VUlv{--T~4*#n5%(6ntSa1>UozA-{|{OS{`3T~SBYG#2Acj{t}` zq=+&}-E<&YlghCU5IXxK`NtE7B|=H$;NrvB>6D9mRa3A+&mUq~Dj>i&L4rS2(hD40 z&?@G|m9^zC<@O(8`TNr)Z#>BR4{Pc7)@>kT^Mo#{_(-ztBH`bkE7%cOPimJfq0f15 z&X`fmz^raPBVc2+3Fo(!aqCDy{dZ_5m07B-Q^7mUzTE(&B$?*rHL`9#)J z0g|GP@NR|>d`l`xILmB&ao}}tIX}H8}CYl@JQZOo!Zp z?y(eSxT7jJp=QCb6{PcAL>OHgYADzA0$+pwL(n*q8SF; zY?CD1$^V-3iDdwz5m7jMzyg0b4${g`foOBY175CP0)HO{V-UmJTwVNzPP-|>Gx?KX zdEEuBpL$CbV^omu@p=;QFBZ;e)`BF%3|gbO58A6tX?k!T#vHSScK^Ga0rZ2+23trQ z%V6eFX^`C- z%Vv1e9cDP{c%o6gF#`vLj9~n65M8CVpJl2T1wLg;@HxANPR&t(F;N$Ye#z{ZABfOz znf+A9nGd7tzEJ(Xlhi#S1=OeJp-Fu>aWFqX_{?_WCgyjRdwM@s*9XG5j5av_F@jec z3ov$<5!l<-aMom;W*Buru>Ev3s#QH_le& z=zcGAMt70|iPBJXi<>Zh7eeU8It;pV2I&VSPN04geWfpg ziZ0<8pL2~C?aIe~MTV1}Q;0!RFUaY2F>uc<5y!F<=rNs8RC|00u1#DZXK!`VN>_%- zke3THKKhdzwn9|W=nl<05>Hy|M#2p22k= zmvX+XaY3Cm5;*ycVNbMHvTiLDV_l552Ct(dwCdJgkm{=NA zdkql#%m?x7qNrsB3l8Zpd!4tl80Nwv_^WsU`8C8ac8LLek3NKRR%W0=kto#sV|vUC zuVuE{2EaAC*rgN&AJ&MoIA`tfZ*VRi+mnYK>k9}CDWjv!Hir6Lve0)=22S~Bvd$P3 zgZu7BPF+0)t6bkmggEHjWZy6G!e;+aZZ!;V$^gQ zBQbwdaF@zK;;HCgSQWUV;vB|mzv(ue6UNNnIm|B0DjGNG&WA+d zEV%6-2klzp^aWosh|Lc{HCIWPUdf9Or1il12{UJs(xCFkb>WvRAMI@}1M}NjxN)$T zzB!SG1|M@l_^d2>zWF6tAz*`1=f@duO)Y0BUV)p@hMb1K8mPMY3VhLE*aoqch8CGpreIcRA$|i^Ie5%iv7eA6AuZG{i7mMDzLr;sy6PUOZO#Aj+MZ2q@y$ z;Eje6KNPhMY|&EXr3f`zBog37XVd?4yUEey2i-S7FdzdaY9CETU2Z~P>S zEwkyv?*$BVcm*bB&IV~3N>+{=;^JfC(EGW8?%T-5rcX(vLS7tPw#h@y!rLr~Ejl24 z{0sGhU_SV*FgvYj}a~ z-I0kxvH~a@#IX679R`z~3(!EwhaMgpr=NYSG4b#d+9cpk+j?rj&P)nD`vVMwhpS+{ zjxyxGl7Q*caxm+KIUGkq4K z=fkY_BDj8x+1*H|fYg#r_`6+$F6R%1!XS0J!Q~`vP>x00+m(=*kpSDC&!_(k8NZsd z170>F*z5b3bga<;XXf{Kc5gWHnPz}n!;TzqnioH&q%juXt>|-W?yNp{I6`+g(?g&fR*P`X&SGKPN!zf)sqv8h~Z_zvxHZ zK=PZ*bZ=QUD4=TtC+8jE$meY0tnXx4)Fy)1&JhKn^$v*#c5#MC%~f$W-fGy zaW4h;lW|TP-TM4Ac+Xa%WmS@}!X%+FQ|%I|+`I_M@HN_WcNT8nSxI4h1|VvI^6vv+ zGZcii#p`L!84nN}UID{z8DH7{IFP!&1X`w)aH={7z0_(!Y-m4pt=xlrp{BrIcm>~= zhJgVqgxY>xkLN_RSy5`6QAo!FDmQ3j#JmvP$Yf+!`yk&*aXek1*%-?8bu?%q&?e2sHUt6MwHt z{HSme10@Y0Y>N>&TNFu>yMxirE`dJ0{g8FsDh-OJH^Ak5BM@Zfk5yrfjRVKqi2nVZ zte+W~IAh@>@}Db{nbOLpyyai$29qjyWEBA-T^aPX_%wZXyO&;Pzaja2=b>LK3Xgk- zL$GHt*rb+l+N5`p&~10=g1TrZR$7mfdw5vCJ3Oh&221QXs1GfBp3=}~)o9#O0f*F% z!Y}PHDs`5?$}kU>$=yuo|KNbLNESGFgwWc1MPSgt^gR~M=R`{-;}?}yQWkFmb=i8D zmzinEZ41Jvs=ahHeS&V{FM=-l2C~^J6^9#B;ITp|MEdjL-cKjcw%Y_Jd+Ld%>3n>8 zu@?TiOw%pQ?zf(~2MZi>L(vLxh%hS#{s}EyH4%?S3a44~1j69*-ZI#%Q3xrgk713- zHm0X+iQ9(%(w~Kk@Y={>7?_l$H9Ue;XM*8nxiyne&1BeY6i(00zfU&)Hh@5*xiDbi z1_EMr9D^Gb@Wqn_xo=b9c-A`9K3D*yDpDYHz5>S51E9Bo$p&2rfgZnNG?`sU=V*_x zRGm-aIn#1Xw{?L&4_F~Mq> zcz70~-bDgGDdf~dxzTO&Hei8bIiv|{P|^Q-8hBP%!0wrH4?{qFXShx-!XT4EXWy9%-%R5)NomnYhI29j~bRnRuN0QnBd zAeV$-V9<9`+`SSGc$uJ+j1ebY!-BJ=eFbzrWb)f<>Odyo670NSJap zgeGdE+L$$&9Z(9A`hj4Ubq@4)8o(NvKz#hml(S{dNkX2Dlb(AA;h9u2wJS*np-H5y zxn0z-F&&{SiN)tSC~?_=_H|0`;meiom5N#Ma6D@?E5f=g$gAbPPu#P^yL zwl0jq&Ou&0GHefDGEb14^+se~rV=)A`Z%tO&9HCC7_g^au)Znvyygg<4DY+~ zR{&hGd2NVc3HU_M8CN^&Badt{UVn8Q{O%sZR}$9v_sB73&K(UMH>$B$JB%J)5r*C` zs^Lae8C@839^L6|8WFG-`gUIdi;_B`AsmP8m<5Gd4N?I6iA{DUxj%Z`(Z(P2u`1uhum993==j0vX8F^ zKW;sd3q1&)8?~vYXciQnU5-}ce;d_@G||b;2Ah|!#)mJjfcl4c65}3#)-C&?&{l;W zty$98u;DSCC9?x!Z(fAsb~TV@5rQv1%P`s6LO37rhDf#lS+pD3Y@tP0*>*lZVo2ShT7=G!YMzMKssGpz9No1gTiUN)5S z$Iu3b2|uD#34Z*-Ao`;OdVjf+!$$eAXvIV7HOhFrRBJ(LVIf)0@Kioo=Yo`P2rGqg zwnhHQVLY2obcuj2ET;rl{!^fjZCYue+c!FYSPX{jO~A)Fi*9+hjKe;sgOlty=sX#X zS;0X}m$jCjGe3?zri@GeSEr%yyG)Lg)CuZ#)D&OF1;OyAQ>0`p3s?SEj6?T4=x<#o zQ2mwx=FU5*gMKb#yD>bfM~(DdQ4vNtDdTW%8vXioCuiWk0O`u(m9pIg3KC8tj11ck4kb<)un&Nq!b^PK^+*Zy@wg(K8 zp)*NXA6)^vW3LlW?p}&#Ggy}QG-y*t0({Vj$Ckd!z;*vkH&}*XQ_whhEIf;B&C>v$ zfxVnFujb-F*$K|}b}n7HFAsOfhT>djIWk;mh3)*6sm3UpvkMxS?m$-21nII)!`yrmGF2YP6_(wEcc7@WLPf%b@$fN*|P`enhi0`Z@G|0 zg-61-LSxbsk_X~T6G&845IX)`42go7AZwk>saB66^VS99ta;;{WB-gXHc^@uD9fO2 z#t)W9MgYtTFDCS<7wG5!Gt*pypGUnRA}5)CTjc}y{rGW@S}u`kHs*w^ilS!UGFaF8 zMZnf}oY*B+Q*qY}&U@zFv&deHfqZ$>)~f*TmdqlDEP6`E5j3<_g}M zjzl%zTr8|(;fjesPUqtha^v|rkY5pmT5nPzUtvA&DcVjiEgxmM*CfD!l2}~P{+V^7 zTnczJ0#H9c80+7bVLT^{zVJCpPAE3fNRdc-+xRglSyF{F7tDaj&gtZc1?iw#-12>Ef()N`*U`_(uanEaXPFP zf`-+Cxa`p?*1A-4NRMl!N%QBymWvViSl*shs^|bU<&=5|8^gho)$n0fF>YsOOrEdI zp}vgq*QsZa-90L-E8+um&)Y$jvhD$uRbgkj-)Hu&2gfe#O! zAPZQ3NVr8jgnOscj~Y?wvT)|aA>f_X#h2_m^vLL5EaG*61cgFa z|CQl;4Ewh>`sZ8X?uctYWhnzP_I(ZrhDNm~KzB?tFChN(IfIWi<3r2s)T;!>K|; zczk&|C~rE1^QaY;)_q`UXRpTTa$lDG$sF9u>w!V4j3+HxmtK7yL00Zwi1goQ8W(n* z%Boa=#tbQPH!m9!F##Oo-f{hZX)g~9^^n#4jBxrgKZ-zbU{=Xof;|uzUVzD@pB{X7mdaF z6LZ1g`5KT<)4_RC8FM{bjcjULq#oF#wv`yFq^1AIAxAj?&`Dul3H_OqOMc&|>st11;ap_E9DJ*pP zM1&TEVN`b|j<>nunu&1S+Oh~~>KydMXR9?_j<^H5OKjvmyS2mMb@6JgmSxa7Sa zraYL%Fn-sNDN}PY_pCMCTfGs>#Mw~VB?(0gE5&^{8{SD5ahkqHz~7aZad~MZSnTa- zd}Z&6Ss{B3@015{PO#MQ>>U%l>LUr0T~&?uf6PU#d+xN)r;l)b!ssf2a3Uaj8LX)r zroA-;?VGbv@30x%U{vg^k8CV!t^|!B2jJb92=WOVK<%$A8fq? zYt~9%=saTFMZ$!)H4*s|*1)&B_7Gz$)-X>ip5ynY9Nvws!&Ab==&-dK?CSVou($}e zct507uD?i;TRXYGw~uvcJRTQrPREIOe{#afkt$#HV7##&P?#HzBMX^~%A5##EK(ci zsNbQ36BY2z@Czv%^~dV*jhN>VP9!{)m~a15xO_hlcE8HzcwAc!oAeTBH}?}g`Diic z$J-(zw%-zNN$n&$O512fTNJ*!Si$&rLz$gh0Nx(RrzxhV;bfT|!<7VdHpqf(J;qhJ ze>+S|ZUo!SeKhCBYAiKtBa7;;691??6o?I?*QIlrE)5(1UN$s1Wf%=*B2o~#ejPSf z@5RJ}8n7fN1$VUh!teL1K}p;kr+EzE%d9%OVSP8T2N&1@e%N`%9DA(94p&=C}j zChn=wZCQc`%w8DII5i8~*L=7UH5`UrPHNa_UI+b5Z*pCi6yuG~2hU}N^s8b9Y-qg* zV+wJ!Y0{89|aFAzWHHatEY$MTG8f+N4=**)|8VAqRID)vyG z9d^2$);zJs-ndDe$<0Q?>_}*8NW$-q%pA7iJNZxLFz#cWg0)Gq*#Gh?GiRwI>!*%D z*l`D(*w&79{CwQrwRb^!rySexz7qS-z#UxAav;Kj5fK066`WtIj8}4Qkfwxh(ld+SSYX6(b-rR%StW@|UkqJNTk7CSo2h#LJmCeb`Au7*q;l)E9c%RAU z$^PU8)84&MYnMh}yDcPA$JVl=2Wqg<_z}}7RYBuf7aL!$O^0-`P^x_9D-4{w2&(=P z@XDZ)&<{FX`Lic*->HSfGEj)y@gg3$O#euC?L+!)0UM$uSHeMFUT*dLYVUBR*$=aY_#CeBi>cBK?_6&@LJ$ACAhwyx`I=$No5ci)@q)g-(lN zVsK1_Z9h8(mJ8;g;|gW&(YuED@o^7L3@vGVou5YF%v&rEkEZ9$MA_TwGjZ{Ae#~xN zM!HwpgQrLvd{#~(Zs7vl1&yy^XhI79lM+GE-vdCXR< zMyYEr;ppsioXPNERxE6$BQ?)hd(70>LT5j5#y>iNLkbc2?S>kD*tv{zq4Xi}%3Z<1 zv)Wv#E?2x1`vzve3nypJUm-F(L?ENt6Psj&xO1ayaG&v2taI<8cgFvrW)d$uD8C)d z^BzKZm?_%((Ww`_oBk+h|8%DhljO1q0VrSQj#c*Vg}qeFw&Y|Gqv^5SHh@xjO)k`h~bICkg_k z7LnJ!ig2a#A(q`<06Ff;bnotFvOutvt}OVDCl~F6yOJ)TXeG}L6+8i6KN!aWPhdk} z>oW9T+RWP3r~#$fb*Od5AMZaKpu7or_)hRK-LWYEF7!`R^S`!GvThfeNGxM7f%BNT zAcC0_q~NxPj5GI|9IzXuxVu-Svq_P`z%Fr`bBELF$;b8;J3!vuE`Y$N9F8MTC|oj@;;vsWf`x)6>;_+kC-P+% zk{9wAZE201Bp#$YH=){-Ocdwr#iyH3!Hh3T)G{yxBRjpJLZb`)*x9%!B%a}7jzDaW zJocRV4NsWoz_nm8X_P1cLFY^;_`Vx%i_O7?x=na!P#Ckuk8!uP1Ts#QMq(M#35!ps zv1&Z8HL7~rvo)@JV6Gq^zLCF!Hj+S&s{qJ1M6kMUGMQuPNt_d*!p`|GlWsJxfv5FC zDCgt{laUJ0WTDAzDvZLi4_XR-yzFut+RsWIX3;x6)`yZ!CiKSI+k6gTVji7rr|q z3+XCT@Uv2%ooEsU{V93WS3U<9)*K`>+F`IpNZ8F?p?#a5hoj;}~7n zaI;Y#>QC~}4c-&*p|+if4BC^KdmZ7HvL<^tvj~OuvWQ#d5HmyDNJj)ssPnwf%=@8^ z;Z>GmgwbNQqeUERrKkv7plb-ouVzk@z!kh~Wd;e)8sHR>#D70qVCEiSAllT#jeOlZfWoc1T@Yhx{LVK>B0=jH^!=gxrq+<NgT=>lbcu2uKK?R+kE1l;{o`dXvKnV<@wjL>5wcRmWm5S>VEzu)WBoMBPBvtlhlZfO#!58l zLg=3qBXThUz`g1Ze#iD2uC?Q1D=U5@2}L2ec60(Rgj~i5w_tktQk9{8-6U?>IG6o* zPz?gYc(BKq$sI+lqekmuMnkXu+jJ3 z2C`=I8sXcjN597FG4GWW7`)?3A1ql!ey?qY7_+aOXr6TJ58_8JdvW%R+jH2v(*m(` zr=PxK(RWV8#k;t2Y970wLkB8n5n|q}1@B_{aaQ0Bun$W|-Mdokib^h4J~n4O8?LZ9 z@FO@cJxQM3^v3LxBKqg)K!e||1c)5dLjB{mv`sRE!+kHv?Y^-Kjx4_puMRz8TqWhO zr~e)-_T*=4*>lNl-f(;*CdbTE{)6*Lwcq?=WGq3l*T>qYf*n6$fsw}+K! zK@1P_ZkWWh_CQR&1mxeR5KcB@_omlm@VM|FcwAP93cEjZs?N;h&Ny_K96WRrUEE(n zp4dg!Uz<|8Ws4|Ve0Ujm9>eeQ)EUORqk8yPJ(L{I*@)@RDxB<{Z_sy33y6O7AsfVeAOBZtEy-6xiJ`1ti)B9mLy-7FGo?~ zh3xa+69`K+9iQ8J;lb>W&}b9|=MyE^vOikL#L8IW6U*cpJ~_~RXGa;orVw|Nf;{GZ zW%fN`g>=SA2`>A;GuUyK68&i#befrrFYYzLiW_w}#rp_OW{;wJ@*}t$_K-FlxzC|b zUUDYWLy4s56ATa8iu})F8?TAH$0*zDjF(0NkM%wyyeDR{dmavf(7G&m6c9}NYI8Un zS+TVBQxRlwXVJpWYUciP0Qgl@iIc?uT>7KOJ}SeHGNJ!Kdg>HTeYr?Wy%un{IB&o{ zVal@TkYFeH#iFvhHoKF_?)@|h1WB$KwzSG}7ark<4eQe>nJq+iT|7YscZV>YgD8&e z;=P;=sW)IomN0iHs}<7D{((IQ-ZC7a3$Rj2iW^{d6YM>6A*n-_9k`9j0AxQv_Wq*` zt3iij@kW-Ls8|Ipk0jvV<~gK%@+v4K>B0xG)6~wz1RG++x#_*x(9eAeX(dVE)G7eA znPK$9DM7Zdtvxb(0mG%qjZnWwkWBnPpQZm4*YH;227{Nl?0ynCZ^ra$*h{g>s}0k$ zdDto!M~KJL8_4fpNsiPT8H$vBhkGY4(~!*_xJ)eoU*744{te@>e9<6mo+CrOtc2Oc zBIg=)vR6Z0T@0>y5JFR%&B-CYEuh@yiyLBV(K@ve{T>WL!k=>FZPQ{8-08wsBl-|# zK974cy%4eoIzYg^9ZuQ%K%MYS;0@Wyo!2b~!+!Ue`=~d=Lqm`g{)+sq%`{Hi3E_PK zt=~8cf2y~TKHp8y@@$`>sM&k6IQ$W$to5f{*W09)r3;bYn>p4{N!5-zL-?)>7|A_F zbyoib#fNc>lP?e#C2O)=M+CWUj+AA7az4lO#S{vpZi5GjQrw04`KVNU6E>HIp`aXd z{dugwb~-Q4E+N%uwx=J$`+YcfqI}`!iaR(pcoqx}?O;D?*pE&}639P|NxY$>Ww6DO zkNq;X2}b@D!;UsJ_}Ie3ZWDIE|5CYhVJkm--h&P>aT=h_LaJm_N&_`7^@qh<9pOu> z1UuvCew1vMCq2?mup-1Ct`yH@H@ddsfgn=|RXqdNXEUJT?Q5vRDqQt3m}|EEBs!G0 z;ab08H(YTS6Muk=WG3hC7b59!{Wpy zm@9n?l#OSzr*D_x!?vYxUs{;k;aGvWOg`i0#9v5a-+}s>3qiEol$Jc_AzEt6+_R@G zz~LM(Yxmt?m^pNUMs3przO^^WP2Ir8pQ`2I;aR%uXd! zlDnsLH60U?Wq*F3ilx(Sq^l^FxH|~Kiye3Ikw+MLKmQ}9U(JBX>na>mn*b7bhRMb$ zw~)V*Jy1A9h)uo@;JHmn`RqGYdoXxxDLe9tG+UgPtuDhA^@q6<%z~qHCGnKuvHDJ{(cP{3FS9MR>P&99~>q0)qUdaAkK>aR%KAATKn+&>f#VlOAB=Z;(~&5DMlCHllPr56^g_(Yz)D1p??VJwX$h~1^h=*CfGS2lzY zE6YK{qQ+Qi_UF0baIYL!!`PCT|7ykpZ#C|q*l*6@snsND>=zMM5Xng?oC;4OfyI#8eVJRH_ zoIxsEAHkx*cKGVQhJAFKFjv}a2HJ=fplovsX&Jl?>&?3`+pU~5ulj;K4NuYTh&f2= zzQ-RYBB+r;0O<;>!L&9eGZFq9x*&;_RKo1$0`lnSkP_QAv=6)OeK2LuTcW%}2shnS zgD|=p4v2ih_5zF0#Cc1b-z2-2jQ zcl7A^xmjGX{WoFDgBq+JwFM!|1{|K$$Ao@UnDNs9REFL_iR4ydu__fDN++RFM}qDD zOoVWkY0%^Eg}FRq$0I}7-hFrte|}GI zoUQW}^!RJAyK5TLQr_UVpqcFDl{0ZvQHuR2pc^Y+-XOQ%e>HS*xlRk#%;bts@N#!# zzoK)Z_3`tP42WR(&R!tFjZ_fl{xj0RKRFy~y7(a}5uJjV3&CI#^n}QtR%EN`NfLua zl5ByurSL51F=u#xJ-zd_h?cCr#Nrv_hX!sP)-6m!-|?*wRsERUdN55Zawa(oY8H^L zf6wU|uPkDG;ScLn$rs$*A;~roRN#6?{y?^M2$hyktS$lwobo<2m@)Zc}6lbv{j+4<RRlbvHU^5!=Xm?;bU z{<^VBzW5RGC=p!1mgHJj1aelK*Wn6u+=P#{Vqn0@g8Ofkx#7#s!)7``me&cgGv*W` zM|&psgq|yUovNd6*X_VhwX)ptsTEw!@NJmk)5uy8!+6Xso`Qk+KNjns5?50B9)3GJ zL?3LvjM8)4ar*mKa;k3zx8{lw#GiJD!grIT=7&6Pe%gh%!3R$&+`?qzF>-ZqBP_b` ziPY#Wgu`otF)=$0+QqAI2iF--Z(zgq&{cS3zq>STq?y zn-V^v?diKv!TNwdBv!-TpL5wwtt+`xJ7#dt7mwq66F0oG{u^1USwtQgPvNY&dYr>O zV(h7+xkPA5AgvRr$AFzz;6L_R&K6Tg8g<=2zyK@coQqQo&%wuxw@YXOScK zn>pt{D`QXYKMa$RXNwFZV$A(0&Pl%aoSLU^;8%?x`>o{+v|M$CWSbPS1WgvQ?WgX+ z(^3vds`lXQf=|G!(#@2b|4>5}X>f7=P4Yt8@Xpr7RA{dVjvN$ZTh1@UEtU!>nN!mE7+cpFlTm`DxeUH9bdK;4@ zjG6bSDEHbIr10k+ZgT9vCdY2Lv~3~RFF=HSaMwu)blJj@sP4i$GLpD?+j8tP%f&}; zzmR3@Jcy}s!_T?ZgmlNz(0ROUeV^mRb%OyG>=I#D2-M*^kyc`7*pB5sJ&Z4I0yoqI zgY|LFD54Z!L0#4FmXF=SW{r0+`5u^dr+ z$j!lf2{YNksx5|r-GbatQS~@bF2jC4y8+&PP>14RFEm^@g1(zwNon348j#t^`JOyR z`j0)s+3Q|_<@rVQL@vWCOPoeK$0{fYDJR+y7PO*Afa#uUG5!!~`try=`svVOwl8lw zTzIF2p0?poW%v=y*X*G;p4UNX{Y!{7^rtf&_P|m*CTkWO1KXprY5hERvXvc$DT@%! zuvJ0AJp_s}w7B9~yQsu63i~ZjkwcONtU5zxr&DE)B5Pt$Wdp;?h}B`AlSu$=O9}RE z(|GhxUCfQ%{~a$`O~Zl_TUfWr0y5qwGxPo)*zG9>Ewe<~Ip=uTBi<@F^rMOz7A#?{ zcs2vO9~`CX6Je}u2PN)Kv&Z1;zJRRf6(apM8}V(FAbGR@9VpGY3L7kx=?lGk*qRoE zGmpN8$nFu=AK@otO;RsJba04gc>*{LHe=BAd-_gG45~AdVeiIJPK9PYNUF!e%7pps zqK&Q4KB>apS`~`Ms!QP7F-7j)l%3#_(a7)_@<`sudSWb&a6N7{_rK73lpWK9^%WNI zdgmc*UmJ}D?M&bOo&#=~#qh+Rj1t%9qmUV<49czR)ZpCQ5d=t0hRtN59<m5=?$ZSDwA)Ni3aTBh8MPR_A=?&m=X&9BSgRlp8uN4v#LLGCaLn+0cKvFn85H z19su28uIqF99(Ru!~3iH;Im^2gya;H1wmqLuGtR~TrA1?!OZ9*7TDmRej9!_72xg? zorfd86}i4XGTbYH9dNx>m7N*5m`;At<1YH!i}Sa70dK?-6qx6abXPR=AMhd9_xaHB zC`Z_xyb&yS7{UDZ9(Xyu1NM$~Q}dY95MHUlJzQ@BzM*-9))<0rNEMu)4#IT)D4Z!0 zNgk#Cgqt%D(rNy4cyogWeCup!oZ>!&BcGJH$_q8PJGDQ9d`TzS)5D9su35zUf(<+n zOvFt+9ICPTJ4eCx2A%S4V~OpFFbd(Ly; z&*yVp=-~H>-IY@ya5?@9#(J_O{q7Zz9h(J0C(7-X`5gv(!%1Y{;}B>nR$-E^@Sdat zKQP$h6zr9Fg_q;~;Dc2J7LUB3Z-2SzU@Wo6jRoiENu^q_?W;#^-aWW?Rx2KqT#bP)i%|ZD8!Zk0 zL+?Cw;@^9<*!Xb-wX6(bi&!q&%ZtDd`7pXi_!?Qk>4MCMeD=9(An{5Q!@MtA__11; zd+qfXo#j8^q5X<5)nWrVI767(wV_9lbGjbum43rvbxZKyWQ;$@?4o8(9Uy)E0y{&6 z?+JLkg3&55;#pJ%)60LcO5WFCY4dgLJa<{}MJN^@52OMq?-eB7*@`=?l(+EE z@Wi7dbcXu|Tr!~u-EGa8mY0d(d3+FBLSLi%mKSiAzpHuhL5=aeR1dOxx+UN{JtNSxZ%cvD+Rp?J@%`075$=f=e_uOKmFaEt zLAj@vM8l#7$>|UDSAnx&^;tP^UQj}%`mE7BQI_)?d z4I!&e;a$B_P_26afvSJ-&a{uPcSM8RQ5^sZTnK#LB$}CGma9 zJCC)0@eH7;0*k0Y3^2E&V%u^s<8cjK*(F6!0Iwm zu>L>{sova-R(BSX1?~k{c;_#QvU4H6><~@S>Bga$PdLU)97Ee|;DY@Hn%f&j#QQG7 zu&pPK)L6j5Nr-RiC72D@d52)988 zkq=4R)hWzjPa%Q&q692$9t86rjx+^t3x6!qIH;(@d58SX_6bu)tEJQ&iHwiDkGKJKL~J@c9n@Tm63d|FCYiD{us+_Ec!+vTOWm9)e{Nj zCD;~q5F?Z?;`jE$xJ#rNWu&DzMOzb&{d$U?3^Zgqe-@%j#4SPeZ$2;Bser#eYcg-< zL}98_FQk814$2!Afr)lE8?tCOjETMpDt8v*z{mGAThM?CGu4q>vu5VUsk|#rMuU?# zo`J_*IS}U=P_%X(MlbxqZtIRAGZK%G(#UssKH@l>p7$G08ivEMT{_Gq^B9)4#lX;o z*Z9qRB^+4o&pt@^AZCR*5G2zCx))Bv!iH7o@GBK-bVlH1&kodgO2Dx6d@8r?C>FF- zv0|g1IQ?D-z1KI4ll-4y{K0#ue5``)x;l#IL{_8OKm*Ave~wze<7oKEE`*^^aQH$t zOzJ#?6Thf)R{i`;^*RSDcg!sKydnZ?Zw^w`i#MR^z&TuJ^B1Q3T!Kg9sXQy76ChPU zCtoWfCqzF8J~+1mdRd21Vai{CvL@wqK0L zgT|Dk$0#rl*9Qr<{EEc-%E{!(f6eqh{~L=N$P?7tb9h!qme~+gOYU5G0ne+vpruca zVcW&&y-I&N-|{Vflzk3g9oG~*Olc8}xX96S0gD7D#>jHU+hn<$CtI*`cRs7M(hkSw z^PDc{Vw(7=2^BB4k;FNgjNIkFZ1$Cl;9$aca%c3zq%WD|n~)Q`-OU}tRtbZ~EiK0C zKVdGkH4PVu)PS19W*CWaBHLYp>D|ApZ6`SsFO^EvkLeRUyu@LY(K z8VQBDwJ%V4B?F62@!z2n$%1-4E&AXOznfCfMVH$PA=bqUq|C>%!`{DPVc;kHW%3#K zJ?_MXE|q|9{BYlFU)r8qN+s(aVe1z)Oq}+I#+6BMFZ@Gson$;|f7gq8(d(&QS{Rso zQs;uzd6#>&JluR!ME&{aiPS%YGSz3i>(ZCr?N|uS(L7f}@**2sF$)Cd{bXis8J4W# zaKYnHSP|U_r_Gka`S|JV*@t{D)I5X^ijUW5BEsW9D!a zBVTl*hJzA!QtB5qV*26x)k$G}SyAZ5^!_P=VvuGm_X=l?ft|Ey3#oI}TvejIobO&`VA!9KA$g4G8)>Gnl=kS^DR zXAfnO4bS%wmp{+xpxHWD-8q164IYF3cuCKv%Um-?K_8r_T&BXbYVobH%C9+nS z=W_HAG+Z+d6g{@V?1InmT$Mn_aUrg`Wi4(ydkD_{DWg*166i5QfwnA+K-1PGY(el> zG`Kbq?Y&-rY0p>Gvl~x!CA!!@Yel%6BU!}ak`=OJHh{)IMVx)qn+nD6hIb+jm>xdD zb7A)4oLBx-wd)sqtudYy$!x>3=b|8d`F!%4n?t4?{L1$)8X&Sslvz8}gn0-41HJbw z5p6gPn||AZ)e|MQBI7K)t59Vcuilxt{K_EgERCl!ZRfxeM?+FT@odo$nT&LiopSxJuF!L99h*YzT3o>O8JbKIb9?p1V2(&f0a{n-2S zG?lCl;2jLFh*_`>_fX{#-l-C&Kl~?=npgWsyu&KG7z)YuT;M_bBr7S3&u> zXh<+PjZsI{$oh*1@kQwfEMB#llTMfb9(Qkm=S@Yr+b;_wR-dNc&lkesd-w6+t8qZz zyo9YveUN^m0Q8wD#C7&#{8=u`%(Jz|-pI+Qt-J$Tw=BhE`x7+W;13+u66MbqZ)woo zAl#h00WLE^pq6@xSZ!2d?T?kvQt92e>xL0By@!}ssYLR)c$j>a{tV`p$3S!Q0YO{v zBldWl8F$q53H0bnGMJj#9KFXo+huHEN*Rj| zrg!oW)Y?P#x>`C=8G#)Uy!TA^3iSP(!u+(|4*fA&+%=CY_%LfHnxvJ%zbXfEXDA7> z6{>NnyC-@l-a;dt4Zw~Kg7W!IkZUT=gc`Ns?zB8OA-}p*w@6YV{bFI+1(;PZJ$#HY1_)t4bU-rq< zOxl;-&01QU1Ls^ump8tH!24O~JXw+%U(!Py4AnTpp##W_j}ch$IoA5K)4(+UD7fBC zhxKt{%)YIkQGc&IbL`Gtx`RJQ$9xEe)5ShGDx<{xoe%*#KU}fvjWfpYr**mSj zatp?!a_GIljW)_gg8eNU_>*>xjK8J{qEkx9pl||+JPpIUo1~b}R(qi1_Y-)mCCtoR zW{<{8RIvJk9OFA04zX#`XkG1tZ;x5S%SUG1^GTX$xvB_5l-84x^t-ssVk0aO66X@5 zucGYnZy;>pXE)l`0@MFo0V!PxOy9o{MF+=o56e7p%SLg|A}o}?XgmeZv5HKCt2$Sr zkqaG%p5lcc1hSS~gSBqC)alA49Fd&F)=pGnF1WQ|QnD;pu=fHxQC7gM&CoxNT#&hgF|)E0Iqg)*Rc|Olh{WqB!2K7l{9n?E+w<3zP6jOMuO=P{|dSp zTj6cYFtyPB0o&Gizy#A&X#M95k43Cmc=Q|;3^tHG%e|1fI~(v*3Rw;JK-ROaps6JW z?=89u%IA4TQ=l}AzUTt6=cnkgBf@C>>=dXD?0}!ux%{r}KI-UwB&)?vV9C4HIBY!* zPaUcPodHjHqcM>wkJW%@H|`ZQ-1>@(xEJh>WkaaxD9cR}Pa{_sHqzD^k)Ts@nas)% zz@)V@ob%$F(4EI&51->)ofnA4Uv5!Ji9U!wUWU^)hT*>0D*U4EM*^ahAa(bJ{PXp9 zp#9%pxE<7q@>vgHb`TBGAB>XS= zCS5!HmG3Phw)UtoW;5R6LY8+Vk1L}0Z9m~k8cFkKXQ8&R3b`Bl3>^}MnCx4V;LwmN z?ozCVmw$Ibg{2zv@(RoD-6F*0-;rRl_!%PQbu>x+v7a6r(c~seiGtXV2QVWk9DG#l z$l0R|^6EO+dcqgYw=JP3^=^=rR0%z9N-~FkY{g?DKZ%6(b0V7J1luoFV{b(=@$=(% z7%zo5wf`@W)g~|b-qQ&11JcZi!I8w~`30Do`UKp3|KbV%aokMnO5%OE z3WfYmK>)iPoHC_27g249n7kM_ZGMB-Efg4eZ(aQR4Y2L{3=G=r0Q>8Bwz1J1s>-_r zPY!K^b?@Yu)2HsEU4}85DQj|O-79&2=Xcy*`J9&gVnAEk34}RiCdP{);p=74xHKE5 z&VC8%nvH_6ArYFtkoWcV?1fKJ8v$5jxH40mnIrNB4bK(fRU0AZU+P)A+Y@EEsO`gO z`b~&?=<1FCMCFL^wU=;6R+M8h3~(ZUXD?zlmD&F01r&A#VRvW}=(LG*rn6AsB>o%p z^QXc!IUCm5?I!73yA9%Wb7=9pG4xO7PU_Gm&fJLWB#`Du7O!|Hh&(g^=k>*y>$cO#GY?t-b!O5BdUDVVgfp2*BQgeSswL-mCTpl&rx zY*`U#yeG>@1dDO{gWd%@tD*&N&yb#V0210K#vEx;!o+B4=FP!R=s5O@U6}MY?0b9{ z-d>p|*l8>Z*T(W4&KHWzo%(06*K`Ihky$qLR!|?CdC?rUKI%soQN?@K$fZS_fV3+`w{bxjBZE{1RfGC<9p^%Kr^tltN-S zzxPP|gzpDLgMis&XXD=C*O`OIQf^As%fxJkE^B+-{Td~SVG68YYf18$}~ z7q_K=b?>f#{z?!Ibf2XPTQ zh=+9(G0b}mrzXc|m`p{PJ-e*HB|;wcnt!3=WeqfHnZ@Tz`(e>q3a&DXpz3QLiQyL5 zX^f}1HueK}PnKZ}q9$PF3VsjhEeyrW+)!wq6pqz;X6Jau3o@J(uugLvbKb)fo|&J4 z4KEL4np+YUiB{zO6uC_7Lq1aHUP+V?i^k-uhrqSb1+8vgAUT>wsP^574lWdeOV&*| zCzL|j{cHHhekGi6*MaD(j&Lq4mggYlfQzUv&Z_!NBoBNfo6qrgT^o50Okodd$orFb zb(8SRq&c`WjrYoSts~8cyY)X_@!r2@2u~w2uV0uK#!^!bJOH*64lSjT;YpWl!}mq_Sxd#^zjb4lewKb zjeUhuJ-i!kWdk_8yh*1XQDzqG=I77bb#RioPM0SX^SzZjhMw%rE91*$Obgfv-2 zCP0YTS~liUJ~piWM;qm5v3=VkFvGx$tR7fzw@Fx-K1`QEg-@?=!?8bj>Fr~bcJwAs zEbo!)xzDh$8N zZVo&pi#9E#kz17Ed%;oM|M4m5vPgsU+PebZU82nADRRu)n{v?P_!gFDm%wh5NV2B3 zgT{RSi-BpSAp2I7S@&3iyL>GiPbsuuD4U5zMIRt|Y^6Yc?lt7se^jHmhQu9zNV+@U z!;fjfShrDwd98XL^DQpJ@oXu^J~;}iZC%Otgmv_`{#zLMk~Gs>xdtpAj?l|)D|t3S zI~>oEVCowG6ND{F!w9dK{CDnEnw*Hm+rb-B-b_quk|{}P0_6;G$pa~3<{ zN>V4--SUN^JPpuMe+;^V`LKJGpy+v7=Ea;~^w@9_-?_KJY*$bE-{TTY;WW9^O&?Jw zZYLOb(lnqXUV(ixplBxkXM2?}kLjjp!RF#r!6`J!2CRndl-=in@);@taXGas=-FylmtC;k=UhIPU4QC$Poj0R{#>IPa69)R*kf6#hSADDGr zmFtjKfYrCoV60j@2`p5Cn6qtQRQq3@Ci{Q2GoS2z#i%eP+$FI_;LfmN_f=PDWtbU@4XA|4i6#(TT=;1VS{ z3_ViL`ZUGEuMeWk;20H7vbPs@MAz_HIy1ceEeQ@U?1D`LypJ;A67`r}i5<#5kky$< zR{YGP<1%%*`TNh|i_4cug=r7fj(&Gq=cXn{wRJSOZFKVhnlU1)H;P<7|xP z--+5Z!b6k^H0z@)GPN21jqlK_AK4u)qj>asGR^8gBKYRmO#LPfzyQzwxfCCY-(`8% zn&WCHR#b+jTzzQNts*`->gaP)joZ>cj2+(+AV8YG+Y%5uJz$XM&=o?ApD1S&GfHbl z^&y?-N}r0*hKX-7!PNOOnb)xbq6|{;k3<0I&0hj_6FOn~!-u%JcPTyJqz5iLD0^Y) z7k*FB49^`~aijffzF#;4L|Pu>x!hJ<<55F*x7~sh<|EKEEQuRd-A27CNzSIVQgBfC zj9q3*9$|$d@!ru|+&k_*sP7NMLCIXQ^|}b-kb(jm?gPC%buH{WvX?&d?8T9fC56K2&=y%^C1sf#r7&pv-$kCUS}-$hc`k>_;9({%#ZIcbj#jt@r|at9cj~ZoCc^%mz62#vd}?$#EeI zrZTTBzLD~BXR?0x2lO~GfwOx0fc5AY!Lb)iIfbYt=!>%4H1{`9v1vA5I3JIH*)>4E zl%wLZRERqy$rRqWizPfC`}9OLZui~0z?usf{f=dLY5H2GaOY;sUwfabU(SMEr{k&X zy&kr}D3QpCsWV>dtk95mi(LBq4fl`M*e&TVqZ#+axhzKJXd6!&PuN z=m`E)d4ejNeR2CMH{M%z9yhGcf}F>~sMqNa5o6}E8+CheUuGbrt@(^HPH~uiHyF40 z`9Pux@vgNh^Dp2oCY<%66%p$p{KO@+&`2Q1Rp%FcGmV8H=P-=wG-5QECMush zDCqEi552>D_JWfDvpt((-Eb%zSh@-mnx|uLgDB(fSO*d3I`Dgl6AqsL1anf8_@2sL ztTBwo?twaTb6E)<6^kI}(iYIsmhVuV#k;IaACM({u11&dhHN|j0#q!JcN4lmrJ^vC zU^@uQk4$GAgo8->qWO$%Od!+;|0DC4dSOM>Dyn*VJonpW440)eo9}pbQ=<_@#@TH( zW(Pil4bFPptML*%Q)>=5@$3}eg)fn@oq}&`7UTRaj(B*HG6t;|W@7An*rb5NoZec5 zGuPMS-2Q&rKi3oGmbbGLj0tC@|BXtWb%gUTs=+^hA}(=F#gCpf&}w81R%5Tw`v0~T z^aeD*svHh#&7#3WQv|-qT?SHAjFB7O;-?-3F14eTm|BZ)lC~zayO{%v6Pr+C8lPML zCWo7q&Jise8&;ctkKEFJ!Ml=qSNcU+=0VIv-1$z8duC)ty%q()gN$0pp8tTzg&K1i z6I2A=%mdUit%t$O=CJDAUK}SmpR3(Bn|nA-ns+}$k>%4afL5^*S9)R$_h4TZo*DBL z*VXVIy_N_F-z*8ixwE*6sUoy;r#P3)X=4(<@82XW!~Og#%fx-3i~G_I?55ktf_vn1 z!E~NW)NJvO%3NE3c^>vS$C6@CeJ}3r(Itvz8=-V`72VOmpr=ANjn(l7V<&Mkxt!vM zUCU9u&zO3ywV|n2;*5*12=nj#DVSz@76wZ-alx&7_#vEo`hy?7{)Wu*U*Mi+0?dUlw0-s`(O@P{z5!1=MVOA^RLm*tz*xSAzxmXCI%F@wbmfla)3a^_-|4icBfSfoZJ!w zGUjbq`ltxB49oGz9s$p~t^rx=HBjr3N7C=9G1>QR;P|E@7&k18ml9jSLQ|ct|Dn$O z9(e_)4{C6eOhw4ne;?5#d}TpY-fNgFU^vx{d{*}0K9m|!Lfww7_~ukI9mtU4QknmeN8q_zpsH(QU}OHI<||0DP5FW2!cZGh=psBRbCyqJM<}$j%tg zZ1K1Z<85nUcZ-08hgS3ZdP#g!WWz+q?LosuZ?X1+DtvOZ<_fQ7`&it_*l%AYO{9g)@V_~b{X>>Zw5&FZHz5j=wZw6vhTL|R(oJX58 z6=dCXDb7sD1ipou;4n(VEJ>tceg@3w0*czwS@@$rnT@PzVFSRP>}hz25VL(}ZC7B| z41Y|UAVU^~S0MH)F?%9vY0ill^72nHY`o-&>SDgQ<8CrLec&p-nBR++&9z9KOE+a& z3vuj4vLVR;R|;{w*Rc5@ir5A;7=Bk1#kV4hqNWaNi^o ziTQDUN7I{*31iN^YOn2 zkvwxi0XF6p5?ReoqA`0GxxZ8lL(9~F$D+fn)NcHm?E`J6V#!@EZ(3@%8dgf2h9B`& zARm$p^F8?NMtCdLzx5q!#{S{YXC6e{`7?MGC4$GtP3*n*(pZrr!5JO)#-fS8SoQZ3 zv`4FsTp!K^E{33FfC_cK)K1q{N^_y-o|7NJ99~h`h(jLMbR;MP`Zk6UvMU;V&QyWv zu?uMUmIb9}PWa)b2qRW(L)dft`R9)sbJRWq!{_X!mKhJBt6m)cJgEhT$qC@UZ#Vb~ zJ%zdj&NO;QHt~6x2Tg`6@n1RbPng_K+}ySKy@nLGGx{U`$=^#e=jmapM?1J(X@||; z%g{se6D_#EoFuN#p=AdxseY9>RK8w_z+7N+G|U1b=09<@ei;(QpX-6$#8S| zZwxCopnoSCF>512khzg5kki)YtcPq+&Fwj=FDRx)5SV}2=oU!rx0sZ|MJB> z#>3NVHjLp`Pq-ZZ5C1mlazE20A!RGyT`%X^{VD#$-eflHNNfX#t*dZBk|yn(QG}8& zpArMUhg7rN6;kF$3)VLqP~-h9?fmKm?HLzg`bl@ePd#-ej;+Bg=X&_lY|O|9w?VnY zY~;BleDC2kpC1XQ+oOBnj&bOwjFm_w|P1J6l} zgaOkgFd6?CCpSL=nXymk#1Ex-qUIztMi%3}v44qwWFV3IwhOD3-_hOz1|`f^kR9K0 z&}P+Im=!9^JPOW+Q$h#H@|JpjN4pi98cZOpT9H|1YbO|VasVw4P108#Nc&r4I3HDI zI%eA&c)unK3OrR|Z@(Eg_G~<)96g4SpLAhw#}8O-qz)1y{AVDZ=+YBrw2=B3x**h*n$7T+tLU*=A` zCJL}VP6P9h!mlUd!BWXHTdTz&8K+k>aZ8O~JV05o@&G<7cJ+hROufwtu%XoaYV@EK1dC2O)gfT5_UlGFD{2Lh1kHnL}!0 z$V_`ZPI{IRH+n)2of14SSI~)DymP2yhAOu$ONe_~AIdwfO}YIBa@^msPjIQW74u_{ z7e0UD3G*!zSj&xB;I1jeXgcsYpas1=KA{39oG+z5lJYo|CyiGX6Nrz;6zHGmL*?aL zVBgg^j2Kr+^>>_Me)DHug@g9w`KDWN#Oxh;IsOD(d2j^=&Y7a1016J;^+CSRdvY<0 z=O0PD!yor+skYcmW{=NIl$me}MiOM0pBdi;V#h@h^wz;whX8QCU`QILh;b%45s+mk zfUiF(y!kqn(acSNTNQUf5T(q0?W=~TT|R=uN=dx`P?+0u$$L7DmhjbXqFrozrwV=T`^dBLYgR|+T<0hc}CY*S#d{0YNE#SsjC2o}G9nAmf%kLju z@J)6BS$~QFpO`d!zfgw$^qs;On+oCSs5ewx{|H!INGBh6ZYA>JgK*V5hgE=Kp4Hlc zzS-vlI+Od+>z5j8P8`QQD={YeH@soUzCo})Tn2lycxSAyA5oqx${8w(b7ki(*;fAC z7pyq}Pj2YJOl3!~OS8oH>mR{2QvsR&rV`%QXcPAcUvRxKk=P%!hmjMOSWufy$|ipX zmnoIF|FjZB9W%iNVZVs`LDU#1<*MkVAQ_C(ZNUgn1n2A%s>^=*!oH^b5trd(F zlrUs^4b--d;hqib#pI(ixwE$FjQ`v%XguW&o{Xv@)u)O;^H%|>E|~zzb;3;Ad45k7 z(*!*t(%h_(2ncexO^26VgHdrS3|R=| zjj30&ShIY>R{frfJI1A>e{eh1o*2Q7|7MF;NrO;mC(4WqPUl(wbx=~5f`2>H$X8P- zPBNitpMVe_8fz2Jwf?U2Kja86Abz05yQcqxS}!# zss|0=&}1|0Z66}5qWCP?mTNf4O&DuZ!--3{D9N2O039YR$Erb}xsMcA_}-=m@%}_Ji$9J;pk{7j-9nBfHXs?VJY&*eD-Y z`e?yXl+AR-W5VAtLq(YR?|RZrX|7B;Ar;k7GthIVH<9s!SKGi4A$Kh;!5P(;mrP9#Brb< zXXyz;`h`VsCuuDlvV2O&9G)Y;YCLnPd^~v>WVseTh*WY^( z8|Un1XZVV9vg_5Dko6IC&ignJzb4H+NY}RWoj<~JA5EECk->!J`!U;(or15<%HZ+m zB?J|v0;brb^L9dY#0#Cv(eV0P8o2Kvo#UU) z&x$AE=+|pJ4=D-l$LG+)^Kw!C_W_LRNTe?o+H-F`PeGc?2lA3@rme0G(5}82KgXyr zd8xN?!=(3Aa?49hDAk5DZN|)yLN;k5QQ&Fg2UG61!;ME0sMk`4jZi&Vi(O zNRbKPcU+q5Ovw4Z_v{%RXY7r+$W}66@!CvR$k_c94tj4V1zIa{MEVI;f1eD7q)4!3 z`CQP+9>c|7)Q8Q>KjOmi5{&A~t8llwg}O|SfXKo=Dx|*^v}S)4C=@=joA$<#+g|XH zb~n5us+x%)ir#EgKo>ozt;aiK#?#)+YG_G13@eSk(5mrKU~VSN#Jj(S+|6sScF2JV z`mYeC?_W;Xi3gDzm7=OEpHY1)Q|#Ek4(^^+X6n5T5t-qWf|+lJAo$KChCSHA?vdZZ z-E!Mc6YbAJ%PJjiyU-pex0nlC^KP*nUa1hY#)Vc}9sq~TIfA&M6L7mFjrH6$7v|r( zh~m3G(vj=Qf{q@4_^VQawOS6;FiRDbNeVFU_D~hSZj^j1U_MT9p|K4WI8oV|bY1$1 zE#klEoOwUl?~Sj(a#{vy7mg=w=i{J1R}Ew?L}54YFlbP+LDz2r9CCb3Izp2%<;x~W zy2S76L>I$U9WT@!{0l)ge`!3QQOQZ~2ijIlzVYm?3rojiTazp0scxiUu^~8HS)%-k za+3Wu1D||r!|qOTI;$p>{=0dKJcwh+bPp@;%z?}7)#v_ryWSYX&b+{qfC|X9GRK9p zROs$?0*i_^{<+V@giYNLVG{{vzLb=|X~N$dCSh@& zCNri9PU3g5*$}PcC-|jdz$E9cgfELLG1WDbI^{fq zd(B!PlKdKH?s-jwYokQ6<7LUM+q1g44+&?H_em@mHyMq?kK&df1z zbZG#@e0)#bFW;tmY8rSfD2n!+Ndile!(`RE$()=?9LO&JK-v4_8F!`k^uEFx=uOZd z6JOropW{a~K}VWiY9FEhj%D!Kt|VF{BE-!xh`|R63()PuC!OfWvV`a*$ zo&A~wq+cRKi#);dz#kH2n!&F-dRdt}S-Ai9aoD}02o+!qYr@>gK4HF3?if2U+K&wp^MlO9wYxaG&%Nr5rMt`K@ zy^8llbW0~V%t^vb$V3b8DDw8!L82b_h|iHd!WBz)fZ*?2>|q%u*mE(NJz0c%_G21+ zQSc$J3!>@AH--@4C&J7V>&C`sk8#R#ci7qG1UEe#$=Oa3T(LllzG=J)6%Tng(U?e> z9A(Evuf2sK`^Iu>XU?VU(?0e?NFJDKuKvfY(wVqrssXyPICZ z+(r2~{2i(d-F)ABRg(e7X1@f3ic6sCy^~xzX^cC-izQuta5y=J-tdy=rbfl1Xk!Z| zZ#ROWEvdz`uG1F`?S6BXMR;`RBXnCi5SI9JMpP}~`I zR#7vKwA?1jts{7oEr6M2-e970hjhm0kfhmpMA6_HsO;Bdj2p9|Cp8>Pu-c)!yB%Akzo0;AxdhI8H)|bB&YZE>^xFH%jDT zYSd$B?KwkEYre&x#{m#9^9!77n$M(u_QJ<+@{z}olh45-oc`+1_@nAEZfNYngV~CV zqopprZRn!yibY92F z+1E%<-6}9&<$(7;i{pxJe%4*W=f}TGGnHR=(kY91zp`x?^?Kw4^NiLBcDhGF#vd6r zy4)Y9n3*tg%3jc6x(aRMWno>7Ctgpu&gXz03EVu($!_u4{BPR}W9p_u?8_He`Z|yJ zXT3&`Dic&$B?SFfMVTk5USN>yf?Ce;5O15oclO6J)yCQQebgF`Pm-d?^zJ~cyfg0` zZluP=^31sIU0J%!gq-~o&M?l859{&hBk7zG)|ZRtx2x<6=eUKF|U{UrNir~=%hH}SmU z^LVP)lIMK=#^oQj;PTni?dtxs#V7ao6ZgpbBuVEU{8G_^s~RCtX{`*28B5q3cjW2% zePSpZ{t8t8+=N+{Ep%i*&%{|X2ck50f%Its|J=U?9kVQ=bUmFF@>j#@xtEEGNfa8( z>SFo{E3RyF5M8&#k4|>Dk27lSVapjg_|J5JtVmi+bOVK%Nhb%P?U@=UCF#Rv^WETC zPt}<*%NC=@?fYOAE5)d7o5DzoDbcst&rsIvxZwHeZtRv9#l$hnT=)bp*y!~QC*D?J za>wPOdbm6ndDDUaeh4wkX7F4M3u{Js-wJq;GXo#|vBbi?iv)#1)3^nvuYyOsC0@AH z4yKRJqVP6r%r5n${YUE|_R3MV#&-;z8NsnfV}elVGoP8RT2EWm^99B~UlZLDN!%zl zfXR~6=-IhhbX=K$)t26YKJv+A-aCZ1w|-;Y8gWiyTP}7;NN~Ff_`bcFFgNXsDtEQl z7-|iI@Kk>&F+Oskz-3N3y?pH_^hFMU!mv1>-_yh$7H7%0%hzG!%n_*h*~Bw_Q>eA< zbE17ZNTBGLz#}pFnPk%lpCf1|!V1TcUb~J#JN?ng&>FwK%*Kk`K;YYFG*YGzzKV3< zhDR~zr1u+Aax!81$Q2xL6=tqF?10)0_sEpKMDXo)AhGL%$liKZa;S)lK?6v=HuFo50|CZ|d-BE{G;=!uq)u#N|vQ1inyXic7DO zd*womg|-#cZGMQyytj~GgNNudBb+2$nL%9}rVIFQHcY)6f}I=WiDcL?YzPg6Qa!#; z6kS9#B|fv04-~WGuU?|QljHF}JVIPgpCDx^dvN3ZN8lGFkHt1W*+p}1kj4BRW~XKf z8rdHtZX?%O%V{e~`QmFddA=z3X|Fljsfa**LJK~#Qoz%>O56h_ZEj<^G#x)~7rkIw z12lCVPFXk|Huv|ztf8BjUQFn2-=~7(>Q|szErjpcyOOcj_&u7f6yt6XAov_BiGzYx zoGso(KBbvsk$8pR@q7vHVp}?Gk8K14jRqWAYK)`p3$X8O00wSTVT9a#sgUhd{@IeG zpKK=5t;~0H+O&+sXgsH{YmQYmkp92?UI|P<$7qG}r2It)u;{L0f z%wAdXp1#e02(a0Rq-ADf6pe(WD`jx>+!MS$LyE~r%Ouy4|D_P=visn_9SkbdGK z?5v*${?4=Ex0wOcv0x6F|9TyGow-31{gt^HbIoXex(-;JZAUAgDtbPW@8{Sm!r&hX zZb0c0WdE*4uf$+TniLNs+ncG!)@YpaVjh`hGYs!^6}be7>-bB#5gtvQN3p*f&p0b^ znb9?9r9J~6eJLwA@3$DvYi-9Q`7lhltHmsqs>jJ~JljIekIbAF2phlD)AX=Nx>_zC z_OyxM8fpbC@>fvbRR=t#II|VgjkueiUbDwX8*phJQV*?Vlgkn?F|Hq^r)Y48Ln?5kr2@B@q|k+yFTwCkA6@d0&wj6JfsFgLu%*3$R6e;0 z4&EQBqIxu$ljuXrAHITg$pDolbo{6yWXU5?sQcQ>{gHQ9O`v^8&U(aApuh+SUn1y_et`{}B4xbS-E}-$qP% z0Idf4SiGqO4(uLJl9R0jAIhFUW1>G@J?|oCgFmf&!Rd{aBnAzDRBxW2@NS}v$j`>2=ByqO=Yb)#=I)>$`> z0Tzl{IITs9Sv7J4Zt?t8p}pgofzaPrg4Mvom~em3Zt?^>jZ4}j zZSoql*<}b0qq)>GUzzdbSviqP;>?|G|0C~BqjLJ+zW*kgg%nXy$P`V6>fFcYI16RY zm?0@DR3sr&NSa9lB_h&55=!&AkByL7DnccZG9|N+;ojeC{U80;y6?5F@9$pgesG;@ z?FX$@?eTo?&oRB;e`xBIQ}F)C7M^t8h;xtQIGf~eH0{p|N|5^ry%hG-<~M8ULv$GM zCW`R#R|NIId$R7GQGCu+O){ynUtl_C070*L+S& z+uycAi>3-&m{mmcsR0f*7I4Foy9v&h#rL(j3z6K)WKT5Yj>eROkHW^ zd6CFPSK!|0$4P#Do4_sfeMXX?rLxaYY^n3<2jI@GhM{H#U^dA>2vM)$LOxy-c{QTv z=<^I%8T6SOKTV11zGw+&>&01ByW7-l_ciD{-xk`sMZ!;s!0qsjg`{Ft@Y?K1i_AH? z{>e&YJD-3Xt6%eq+kcWr##OkG_ycC#T?%?4u%geB7MQ3p4pL*)X}jDwwo0rGNW{1U zL+=8ViEGIUKMJ^EEQq8-UMsLWl^1@`Cg8-a=Y(KHoDw zO(G5nv3~qcI<$8Zsg54VS|`_2irCk)e!c^BUV9B&#oipt4WlUYt&~!xj0U%%UDz?5 z)m)>bnNzy)5iTohviS?gina1!zFW=;ZugrLTzt74d(bkFEDmm=qp+WEd^rXNdz%Wm z+UH4loe23p{ZP`(p>(3n)~*pVS^pO^jHjasO^P2`oDRv-;p%gUSz2T=F&JF8+!QuJ{7oI!_s}H z;BaI^S^TP=vU}b&G98Tw*kLAev7L0-rwKp7R|!EOt%8ht#n90C1)O)Eu2dv_!&__T z(c6K*`$m+B{!oU3I*Ivmqa0clpv8QDXYe(ZowAjev#4ER0RO6W6r0SIbJuddalbk` zsZi|-H``i_n?Ox4J()yd?wlZ_7LV4%L_TuI{w}6APBFBp}B`w!>7OA zq}rZB2Ko2kgIy0H;zAmKZ%8TkWo#+*KXL{nBf>%Bc{O)wK{L0-XeKwKy#xdoJMug? znESg~N3hV+gN$SAz`c(-&JUD)ekst{t*|n>^c=H##sppgx&^O{2Rr)WdA?x?Rh^BDvgxq{6KHFH@ zbv{yq(g=z=dzL;XwSZZVk}@BoLMk^u4Aw6p_Kt>8k;eUutbu?G@jvTKM9ZnX%g=LKc+3c7joO9Sv zx<3CbJUF%%X1We%qd>~?O}@aq?jz}`_?&{`1Bh7c2fy@kAoW%mXF0W)8!@7bF!Gw{ zhhf-H_`K8}9*cGAUNF=WIpfbcyxXZNsub7d+1oF3-qqFo(1JTu!JTVy(sc~JLh6uIAW;-T&!eB;F)go;Hl zBVFV?d(7brHfphMeqDr>a;0Pyw~G7Q8cibhmoFX^OB3QQ(uJe z1=h7q)O;jyb~>OD*;lBj8d&6W#t~NkjiE2bI7W z_|&DlaI@|RZ8V8%YtMexl?1h@&rO<81RPLGnLNdN7#|AyBhLg!7;mf5FDjCMs z@dMj3%PuM%;&v5ohN8V?;5%vW*~a8 zT1YsBELia;jElE!reR|KvumQ2Wc|Kse&5J#P&KNF;|BC*ZQ3GN>x&$hEuc>Nn4XG)FlBT@^>zHRiJ9e4~M@CGb z!l!Cnk~rV)5jY4eKOCi3-;$}|yF^mHL<;U18E|g0$dFWM04+Hc;lpInD==gPsZP!& zxu^2Xq%B`E?TQM0x9G}m)Z8ZW25-^K{7bM?SYvLpsGMu+VHP3K_^jqQ@}!uzLb6$2DBIk`gQJ zH~@zZ7t;jS54>OID;S;Fm-jxMP5Y1ZrJqheW#bzSpk?_|IA8Ia_V?8zbm3v)kusXH z@S(^790P}{$FRI{%lJQc!{~C_AZjz+PcJH-(d*&eIqNyoxZzIEX|LyAu=BqRm+pwy zCnT7@jaC$19Ppu*7Y{f+d6DOS*p!v-61Y>#{?P4dn)LHoHML%7?EdEOuab`tLc+*-! z`%fCn^0(xH@Xm$L_?`_PM24-;Xpu?il)-hJtgB$PZ2->s1QuLFB zw0?k$8>Z+4>s1pdWmXk*@vh-xg0o2yYfJqLoNcNHY>~tkr^D&{A}3f!QBWSam$U5Y zPBM`r{$%1aNN^p@zkU}5lC~9;_o@;U-1XU-$s&7F-h>?{0}eMc=uY_3ybGaGA#=JcDw}2d(A&@N|C_DEbf(X4jhyGDE+yaYxc%5rB~2m(L$+)c`ej-)tsbK3P$m%sMZ3ogxXf$JUTKqq~OB&b1= z+zN`g_yQaHc+)`mGb&X!baM;cpYw~Z&Q+m+lbw9;%wo$rP?TD0VQEG>9rMhC?_|HlsnVC>RcqWLz0 ze1dYQe6IzlZ+|7rPdd!8;w7R-V+*-S>cp6zpHxT{sha1Loxo6`CK2ehqo^ z>3IB0>iG76GKy|;_u~4{efb__iH_W`oM`^e{a-Z7)*Md#kw9MlM=pDDjK~6$7cLGO z1eLB$pqZydb8hx#Q^Z=7Q@>>tuslgpCFaC?Xe#kXa!!)B(pWy=S~^!c{;7mBY=eTV z&HPS3Urz6;DI9e)5#F9TPO}e$$aYTaBB58G_#o+E3L4#uGW(sDJ)h?TY#V`YemXpx zBIevvin-XkVw`dK3743oLP?Q95O=_qY+LJT;&+s#&fLKl)?X24O^-o=$6wi?HM=Fj zCTAtyl^O8C|0G}KkO7Jb&0Jl?P8gc{5Y#k#(N zE(6Ibp&4%ay@GQ6UgErEg2d)yU-s&xJO8!225fUP5!Y_7XyjNu$S(?j<9p2^a=9(| zlpUnHv5mZEunP>ze?<61sJ)i*noW_tmK27Wc*7%wZJEq0ao=+=f*&)X4 z>ScAoQ}juBoIQ+bu63v7ttZN!r8Gf?^;9^yGLM@TzFQ(`YlPxHRb~?sXSFooVFvE;~vy zSIX1Q-xumdzM^k}Qwi;+%hka#vK- z>EqY;yxIGE^!9}{^cj>vV^&#n9ybPZg`5JsY|5o)^IuTcno_RodU5tG;u@c#;YyQ) ziELl7BTW1IgZ|zwhM;vSu*z}|7;Ma>OQNT}mSZdx3^pb{QYv~~529TWih}0L0W`UP zA?#T6jbHX+3mI>FNh1^|^4#MVC`uLk#O=y>!)rmjVeU2FrKpJN>^iw=?^1X)dIsx) zGN9|C(a?SHA=3gzFz{Q-50qX z-+S;5MuR0s_sPiG#fYXpJP7x1$AZr1aWKFwlaGDkLv@mY)Z3`oc55|4g3o>^aBr4` z@P?EggYbb4z>2_$oQ;M6I`6cY&v6eJdqWeZ8!EE%Ue=ViuT!#0b0*u+XE%8FJ6dKH zQbb8nT^qVZ{ z9%&5s>RL+si8D$89^GkEh&+3DZM3a&ax`2F`$5;fE3%BXZfuzRDVb99bzZ)!z_l!$ zAhJtxxtXy}U^ept^k1jIA757tFBW~F(dp-9XPwI=@m^)rD}5O^WlIAr82ymu=7odv z=blV6l84qC?>UM4Ykud*S}xD|7uegB@#{r?{SrwxW}59s1}0)(eoZpBudNT;I3=GF z9G_8ZaDV7KK*BrvG|7IR$N-C3VoYhH2AAg_gf;pW@M1!D-Z^m|oq{q1g)(5fW-POGBT)fZ^~_PyR_!bH|qoT@N&(_~I-mOjg$@s}6Dhg{O8m$H%;En!MaZ(*4KYdAl^0nRP=p+0Aw z`L>8#kTEBm&z<>^@3^PWuDu*3dKc~H%TEjBZ6JjY6|q#^)}M5@MUk&@Hz97|5LrWo zk#NT60nEPLAo@?*bGFa(>4@l+IccdnsQ0`fJ6k7EgD|nzJoWClM})p>a*W7OJG-ny}-u_^vvxyDNh;4q<2LweBe!b`g8;(Ptu04n#nX! zA(;$6uH~#w#&N!zD`C!y!Q8vGeZ=@JlEx+XVRNd|Krj6V@2Rnj4~W?d7b~nlK0+d# z)9Xninl%OM!FAx3YDAC54F`>^NZ7mDoh#{lNH#a#(pEMI{IZl;cP$qo?`0mJJF0sPV*XqA3OzlyU92S!5DF-RFI8*e$31VMiW1T1#Qr;M z-Z+Y@TzgKkw!@UGn5_i$w-O=x&vRI6*b`KjzvAQ{2UCP?G+$@Zz@3fkE_80$A~Gp2 zkh04}ZkGEDXcqG+A3wTs=U?6R?Lxehix8_7NBmjqtD`%?;=#PzzRCCCqX%#BRz&RcI91NjLDxB*%^?8&fG zyrpAL{$R>o{?dR|@bjd)Fu%7PZE5aCP}xSw55lRqUq8X|ufUlsgI|ln?k@p z?l?4fUzHh-J5RNW8Z74L3I2u6d2ZFsKyF8i$kQtNL3PKH`6~y)xcn<^pr>=3%5}w= zyf>NfPPd*8fBFV?VGp3&+iKgzXa2dajht21ODI0DiXxWEvtL{8lkpQ9fyR8Nv#}vG zYF7kT8g9WZJUhiZ`;^GsboB*O_hQoV?^#;@u#i8IXUKnusNip#n9-e|e_^Le3?H!} zlU$A;fk8c@Xyt+wy0ZH%msq!4vLQN{v)ZFU^JbXBt)-9Y%f)(LJ76@-{AC0RQKqE3 zuK>Qdnu`q1!D7G72Xffmg+A*|q;hWsS|@rj%o2M$-1GagZwI=v*Z0)ezIAS;0kb!d zUNTS18q&B>akfZS8_lbXze4?9UZWN7b7}s`jhuyUM_FHuVz@+;IBvU{us8Cjq{xwj z7`?8-&YJ`2$6+h(=aOCEdvz$hI#dR!OAkus_88B7Q{7L`H~$dVnOy~?X|rkLvo~~S zqz5l~xtR-fo(ZEIk3o;sS+F?m6ZgttJ^3F9;-7fkr7jPQ_qsQVpd`wL} zuj-Zt)!DIBex?~rTlAs+mx(ZIyA{n&SEoY-_xV4zY2fShjFWGxh0V@#!rnE>yz)$5 z_E+g5?Choni*NK1n$)(C>!%tTc;ga3N3{dSKYT&eOAhb}7n`^QMF~8;x0Tf9hLU-D z3?%wopvO5Sv`w1Co4^=hx~MbWnwg?MZa0aJqbeJi)>jw@FX^sQ4UMmCC+~jKsGrG0 zzH^cbpJ;cKye537Vx><0_6!BVptL(E7mZ`Dj+@c4^v%#yqRY%SI)L1354fOnj#vGl z2cJd1!cWb8Df?(Pxb|@7{IrTGX~YoGKSzljJygM8Xtm>yuWjYtkD5>W(n4$-M<@wD z;?D404D>)N+CtQNg41E5e|POcGRWM<`$vsteilWxEtC&NhXP=P${h-+kx|~O3MQ6=}HI*TJm_PCJ0^23ZBg3GNIJ4oAbdRiNv~&9N?o#%y z>)aiP;u0=4^NYKc%4Vbok;LE%zrWio_!O!sOwss6Q%Ammz}!1D)6a-y*xjcswkLRl z=LaQq<9?9bsL6CXYZmv6W>B3RPsu(l@chUCP|0!yC#Tr#amzf!=LclMrBbEe9mb@ zwm4l~D6Ul&;-8!WUr__mdJCMc+AdkN`xW^Is0#fY-_zZr?j#HNA_VcGQ!ebu|P-$Gc?{oE>0&#RDq3-$iKf zHW1FZt5D3*y4xh>Wi;nhnF53;FbmbD^=K%yC(e040Xmen}e&{ z7fx%&J{Z}@f*!}u;IBuQ@NFUaR4C?*C(iuB@vC0Z#Jd?#KI1xtD$V5D)Q|F?MBkZy zUmjB410{jiRA##E_d&DoLH>gNQNAX(C);>@5I-(gk?4&9{2tQ;(`7`DZx1AoFYO$Z zouhNr-=J=_jJ9n)L$6nTggy4HvNgpu@LQY_xN&AM6@RRvjFSgsQ)VoO7P0Q?lcK_` z+Kq(c>wIK)4YosDydAB`H544D?xRM>vBEVC10jR^K@SJ^;KRi!KJ{c1t^vYqW=3GuThz^i%*WYSoE z|LJ99a8g&8Zz_YZ4>KtC-2vM1cr+a=NTR>5XVQ{a8ti^jA=ymtS5mPqp1W$C1Lbr5 zxKXd#WDVJG!NTPsSc&x*g}sNUeg9r+Y6_<3UG~y3gG1yz%T#caOQPBP=R&9$=fAB> zfsESKP;sgh%7<3Lu`**>QDFq>>^#LkJ3det9leZqYV0pu40+8L`~T)vlyrrzfe)x| zkv>V54HF8~dWZ~~?wr#$u`XP+1jd$5gux+eAaIc}C8}TLhcEHuUL0Bo@wx{5N84gB z_%)ViC)dIdo#&kU(mF{D?@x_MiY&Y59Wd>Ps zEXItnbg&=s-#L!|i~F}8V_`W~ybk}*_HQ%V+}!-Xxqsu#7`px^Q{;2amEC)j4_&Sw zgv*z7V06_4e)?cL=qpTvho*Zur=A|L{$c^u9{VXPbURLSk8C5i@xv(QSsHAbdJybO zd?~kRFJ<&R1F`ossHHHAE2uuf5BeKR-eW^){rGc~aY^*qdmc{Bo5bG2!f*1^e>-d|!n+?vJyIkgzo0rnlH1 z7c?q^9wzAuS4%6&|IBXa-nar*HfMmt^c^K0}(WbqtsgT$>8cGd<`Rhj7GkqjNa+^q*(bJQg`@|D+mnL#t_!a(<(SPylGf;GA-AgKCNVN42Wgk{*`tay4f zIU9}`kiRihYGn`iM+_IXsj0$TqfTg8V8ThY9H9B8 zK&kC+6n3JgFg1Gy_hNH3rLNJ1oVzW2f@?ZhEy;w0h{rHRHwaWT1=!s!oqIR!sAT5r zKz@bTm%6kxmG61Bi$tsXH$^=T2CwP)@YBYSAED5j9m&&XT@N+Nj;dbbN2xA>klGf42XV?*4D|-`Zx3%~VJ=C*Lu zPmIC&mm+Y-@kkt`z82^83CArb{BfPiF5KZCft$aEh3e_SF?%PVL`;q`;N@Z!Ko)E%@2uc(CL)KzP-{;3DH$?d`G@8Yl| zKLl?>7+!rDiP6cvsJ}k|%j+XB>*^*{y%33)u5QKn#Vc^o93KSpFf2%2kKe-9;qbp} z@tA2OF4-7`mgOsO-_%GjwFU(W*Mcf;WOM)Y@#CaQLdWU01A3xMB zj>N*%;n=bz5~t;E!Zx!=bd!(3Ypp?eJAWRI74)4Us3wy95cMp0!55XhL)?!!9 zb$DoFFnXQcjqTo{n7-N%PoMQi3BL#PXN6(nw^;10v;|cUMPP2*I%Mvi_>ca)Jhrv= zAMN>P`&ariZmgBK?)z8kPjRpRqd&zaxioXAR+*vL-=d(9Lf`uLp&7P^p=jzVsx{7n zshv6yvT_EQdA|mazcnN#eW>!I4v%Lx(Arxn(Cb$SNM+$LXwycRu-}VdRUW-KCD4mv zq}X+1C~>4cm2CVA!}U_Z>f2Qc&4~u1sn%fCWKPPSv&g~cD48q|g*4S{N)FAVwR^UZ z*{MM?o$xd|(W=4Lj=BVqYo&BfV-op0S?~^bk|1NFjGh?>(cgLd;isB8ZMP4!Wsdjw z2Zz(4WCstMGlqhr4{*4s^uX;ukyR!F$Lia#Fj`Kla`XOI7!R=ffy? zkRM3)4eMZR1`+>!F9;`-DN4bYX2}v^_F6B|XGxKr>U|VOo0M{qrEN9elM@Ctp+00-Nt9LZN0hE&n2NA}@9kV$TH7uv`!DN{SYFQ9CJXt+tSBbB5Nu z$fAgA_V9e`6;iB4Dg*2mPZzK5oZe{YUy^V`($?U+T~4 ziJL{%@;G)YE{jGEGpDGf86YWFVpRik!R@P_(7FCF^!Q^A7xpb-vYB&*F>c?u(*yg0 z-YL<$ty>Siqii>nJgR$t#f<^Hx?X3Q-jGGS%Eg0_ z8LubYZuaDwj3)^-Hl^HW%TV5Z&m@?>-;NJCtR$qDcY$TL8L(jTG0ChUtz5Xs!6-VU z&u>4UBXJy4A*<5+1i6QFY1waU;r-G1G~1%K$%hm~mW+Y$aH6Kr zXmm-?Ivl~ydRPcn_p$}EjEiKw&O?a&IGcscJ}cDBJS$wOIz=qt0nZr)d+UnixXg)0h4Sy%Z5Hb2FEiMg-c%(nTEqbx-7q6Xk5ErC_zgaJ7Wpk zGGsHG_hlUWpnrq)sXN4Gj)-KRoVqeAhYNgV`b9Yc(cdTc*E?S;B{vh%`)l3W@uYLnz|dT&aq@QBGb?HfLLZ4|A{I}LwC_DYa*3K*2DGxyA9PIHGfKYUsWEx)-? zc$YV=M8iLmeULAt>}A%VGs}tfJ#Q*ZaeBaBXATjjzB6YYs_Cp@f#{L0IEhKl^c1Z7 zA7KNxi{3)pO@*^V#eN{0pt2`p>}ZZzgm7Td8D1&EfR#TIXUnX2(Ym4G!eFCmw8AS^ z_!e@OGmA)O@e?nzdedv{5t6=6c^x{+*5pZzS}DdxZOZ%cFhRsRG1u@SRAqyKIE zW$=57kkb((6uvwl`L!Sy))ddBD<;}P!{ij(>^-9db$@+JRBCoxXLbS5I5ZpeWrT_6~uUCB&^xgWi>p^27Gw=u( zViv`}sbj*2C1=RUql|WS_zJt+V+E@XLDZN(g#{kl$ManqAbL(P+iDaq)adtOXQsTR zo`0(7>wRUKw%t&$^mAqr*chGm4ug$ztc4|(HLxc>NVv+4r-qDg^zqS3fq$3BW<>=`y_#D=Ws!(z(DZXw2^fkw?{DSI#=k$9pnc_z7hUPOof)b zJUD#$6u+=x0EJ?Ap+0p#OgK4`MaX#ylgo72I*Ac`Yof+pe{JO+?s>w?41aK!>${6Q ztyOHz1t+2YU>1L+-Ig*GUW3iTBf>g0B_{NbVWXTA*o7;zg-a@pv_|s~xF^r2S6xmD zZvuKz;=~Mg!R;JX^y|;6FMSh75nb5fp=*R0CC6FA!<)Qwk%! z66@YLOqc>{>>6hycz=i&W^A7$bnzG>I307QfcZT@vm=j&d(B~P_x7*?O=Etn#|9y> z?@`E6h+-$sEoEV=6PUKzKB4+uZ=qVh0FLt(VxRphN`G&~?klVix`;kM>6hk0aP4r^NEu1((D@1nKr*vrI#U#%Yt-3-chB@4b~q zKeU0o)cKl*a>4(w%>=W$mJ0G9@?20{=BJpIR5?&nZf=)&%INv`Mzdtv` zsHPHpJWCtHUJS#uaxI)lm(a>e9=~drVfXP<@$qb9Y&9K&rXLtOUTjAXb0eJFv;;kF z9mD0d)6wgd6V`Vaq1xwBs5Q(S-J~Iy>Z^~gr|z+$kY3pFRUcCp9>Vd*7T}txx){D# zhTUHqq5aKl+!k~aHC48gbAMh5-+zs*T7#sX<|BH>kF#s*|J#ox*2i!T`85e67vf}(r*#Asly!UJ(cCNBQ z%lVe*-Q_e6-Zc?#C=EyXkz!7Q+l4*!&R_&TM$D}Y!Fj5YnC9kMa8d2(Q9l^w7-9c862L0_Y`-E#}v8-kCA2W=j(UPOzK`jR zmlw^&>_b~|;yXRu)^3Y|v=-M)j6~m>E>h8)4x4}UK;U^G{?c!A z+xwsCkIh)I?)9(qr<+45o2X@l&&!h8x7w*p>*g|+*d))O30SK15%Ub5$~+Q!v*duM zY`y0a#)nT~b*W}-^|Ecuusww7>h@+YO@D*t>a#4QtRLHEG6a{1%;oPR?Ah>fD(I`> z#FqN>W3M7VgLd|4X4GrKgO|_rRUi8LUT4*I)fd( zn8jS5S}>j4TiN=#ri|~^gEiHNS8V=Bw$8LW3n=Z!CN&RbeHOQ~y$W)y{GF7Yh(ngG z22A0c2^;&Qh)v46$~;vUu(eMPu(-GbtX-~%b?W=E#zFnqKs_sVPWJ?>9Wh;MTCq|3 zu=`)Uc-B*@7M?1#T{}=(wC0r5ySxt;Z#;mrd!E4`F-N4@a+=cCpS*OygDohRCSa3h zEKV3-g^oURr600>;)`7aq@^lDrSnRP(Xe`e)T>@wI{l@K)ZmGew7N(Sf86LMZIpDC zc5LS{KRZYoRJBohU0RE8MxMudNgTQ;ER^=FRhE7XpDzv84wcHa|HOT^4VXN6Ek5#G zD!r3rDRnJR$4!H`AnBNz<{CxS82X<}cKBhcJhq?R` z*RH*%v-z5$&zYJ$tMfa-o|Pc0?-|Q>Ox?wdhqyDB+G)6;_iU!6*^`}mzmyHVxSHuK zn2J?vPO^ooRakqTHJchghHZH&@|5kjGt5+C%DRhL*sj?uYxHUM;6`8cc`%)QJ>8EP z4pwH(3*NxJRdZOu%VBIk)3%%J^%p}N?@0@P%$0_39xdJV)LB|H=^);DdIAj&OqKo` zEZPP9&6jpGt(N|+Gm;MGze*)R?{KJa9jmREOUG^2mLACYj`g{kQvHRCq?-;XNqd_# zVANT4sd+q)T|XI1J1f6qNVU2&ATdCC%+ zy^6<5|IweNaW549BmJ=$YyEHa=kthQ+A9WipJwA9tq`nQF&X84 z>tc@nSG<^c0~e-@6s@QYqL zUwLWZ!|5j2_9YX$zLCeRwbl4}(?&e@+;X@OeKTIN5!VuM;xA6x{Nfkx{W=Uw zKZape+!2&6(2#cbs>bE(1PsgHhnE7w@VfD3{Av||>bk?RByq5GcEf8tQMwD4UQ(1U z_;MHz@ASgkKP#~)L{X|@`-_>r(!dJOr)YVv3Qsw>Vb`oXMGis`IgRuLJ`vk73X@5sh8iN1DpA@ruC_bk+$*b6ttlSf>Opevd+6wdNpos1pzlIW>5uWZP;dBN3_2B#9};}=%=2HkV)Qng zt*}bEA9|P`@!;h?(o6jYN*$-9{a5|#clSdH|C#>SSpVDp zt6GOBY=6E2qorXecRn0@iY=6cW%Yuk3!L3c^@9N-+(u5B9V;`!(I1cG5pvT)Y%Y+xyKLSeV1iu zny??&4e-VM1#TEFt`)cL+=D_w2zJJ8MAxUjIP>vtY+RLsKko0x?xs6&df<9=KJAT4 z)3)Fh)!nGu=!d2oB2gjsD8{|?!#&&maPF1e_(W+p)=dk;57EnTlDJ0RZ<&mLYa>x^ z&l+@I7mjDzcH{RJcl52@jrIM)(WBEFzs`!np>u<=s9U61C-uS0R_k!6!A2aYmxPwn z;&FSrKQ4Dzf~k(H@YIam7<|wh3+?0Z>&-BHUb+a)&n&_C<>BaWy#`gxR^YSs9yt71 z0%l$GL&yHn=(c|m;>#V_t8f_(l_X-p#4z;C2}9-LtvI+N9$z1c!jbCn;xinBaVD|o z|6nZ+bMZu2ABDDG{4ro#0DiAugj>A4&}D8o&Y3M9dx$SC`Rj`hE!N?iXVLijV+a;` zMdPy*!8koQ90QD}quV_{biERc0WTBr_^)W}V!sZ{@3~-I_np`;H5>_`zde;@0CEJMw*S#^T=PG<(v<*KmTZgt|R^rE1OR)bNU)-9t4+rb4 zz`7BM_@Q_+>Pf*@^wat+AB?Mg=i!bXakz2XRxC62N2Se?xXFA2zNp%YYb%2> z<^B%5vt|`8yRa9-muQ@GZy;{T81%0)?&$)*_2y0Rn4WA+}~Z7t}M9f^RK_F7{Tm zcu6UIH66k##a`c*QwQL7uQWcjRhzw65P48ePdH8G1F&d9J&c_iLw9lq&<*DfI&of^ zMOF+DTn?}0Hx9T6tF1Hmj^mrDGpH60Ke@~gGmqi*_N|7u76SFi(r0=JH>u)%4-n?P zfx=dA`lft>x-b*LuF#tv8Q&|Ler_k27oDY{XY)8SkGGskwIK`{RRj*oEihG@$W{MZ z%^#TcRigf6H(ZdIa;y7)q%(<;Fm1deS&)q$jmkK;q(xvLmBJf# z2^`v&u;Uj>@yZPoZtW>S=kB-y7iNDF|5~!0ACJ~$YmR3ySBW1mrm|8T5_yYxB!{E& z`&B&UNi_cSyF@OZi^bW}9mG4c9B;j&xYbtyV zxjP#=z?1vQS@Jn$x;H{Hm!d=MYI@_&Rnd+ywq)axOprcu3P)#*WA)W@*^RAs{94{{ zTxV*6B@3nKs6Xd0ciC^)CUA5<#HB-qqQHc{`wu3(9!jqY`Eff1PR71|!@kLPVpGU< zbWTlT()10QE%s$I1Nu$4^wDSi!3dQ*$X+%|MC8)Fx>q~f-;jbxSzIB zEb6Ysj5a{`M~@L*LvZU48Cv}@6)Zj_L0R`dTpXk$vX2|V*N>YCS%!g__1=sZbRQ6} zSuq3EC0E0F)dF1VU`FrF*#nwIi|D$a#?&fP2n4I3>Q_GlYv{x%CIPCw67WL0r;-8mTd{SQu8 z-Ah#a8M~(O3|@By@XQg-xJx($hfLkaDwVeoxmAMCRl-Q{`u<`Yj4imjn>(CazZN|{ zI1x=zP07_$pT&A6-$b^r1P03)RZ-VO3t`60T;Lt~aN}>kV9h#fI++#X8ue}nFdIn^ z6x$2TzY+|+69!sur{Prh7}&T>23FUml!R3&@^rcryzV{}`<1wGM{g^{_GsvvwB! z78T6%wxx((R5*j2+j8-?`Kj<}SUv_wM!>62-n92{DmxeT0RPkuVo!F+g4d5O%+NhR z3Km_2r7{x4*DzFA4<>x_g~z~N2=f{}P7oIuBKmyFQ53t)Nqj>=AJ*JW#Ua-RQ>!>< zlH~ZEO@4ixZ6j-;=;6J~idr1M6_=)5#c9V$YSn$e%7&9#|BZMW#$o zX72^}b)K!cFbijmjw|x;{DL8L`-@xTpLhrxtGWO>OKU)u{wry+x1?uZM}n=CH|{Y$ zjXO@NQK{*L_-$pe^UAU7v3%Te-r1``%SO55R{H@we0?i8mCN(37GK57C$(asF!z6E z$$Mxwe8ZL-U&QUI-DuyV&2wjDLEgC|OgAAMBz@PD_GW)}{gkK3vO^3v!@}wK3Uk=I zC=Qgur|`I}eVAczi!LqR!n+5k@j|9TX775Ar$3Cqt#3QeEz->$NK&d#kxq+j!_!aM#!Vc?~`RMbs_vj z)^n_m6=ogn--?s<6!;`4ffM7JF?r@ET=y;)ncQ?P`+N{h6Wq>PB@r-VsUdz#SjnT^ zy-{k{LOO#y$LtwJ_;%wQyw=+R-&)GBosGbX72Z@|aS!pmk6pI+!F19hj!OR!I5*xfXWH5(8Lt{;_tGn5`S<@;|1rOC+<|NJwYtd?aF^m zz77-r#G_QiV{qwn1>&TPBQMwB5cK3*ZGCCa_W@*SzX{#wqe07;hr%s+Q*QI7kJ#@$ zLX;F-`NnCZprSAlxk(Lso=`^?wZ8<}-dM7$DUQtS+z-X|`{9|47R^)|&d-(&<+@T9 zY{D}S+*v6wnxl2--vj3GHPMec>#G8Z+y{DtQgQTaMbf|LF1~toOL*6J3E942IGpE# z8~?n+JF55a>#oVP*{Pj$)YiZ%pKhq0oeQ%+1<{-CdGPPXcEQ@v*(=0qMUqOSaX#r zc^o2#o0ejw%|Tc=yPUC-9C%hBPg{;?;OG_;2pZlEGm6xiWLG>(Qqbm6sdl`?VL8NR zyF<^GAGonE5Gqj}W;+E}r&S3;ps>ERY`kyfS@+g|x)(n>)?FI9D4PZ3t2@qU~LDgPbIJQ`ON5$Y>23`(ZW#Rq$=sfR|cc+K7CY^04O7~fICZC5S1aoKKs zE3jZY7g&Rt;~hlbE|ODbLI?P&(8qUI^X#vyK>E26J)HFbVhx?qrni|K|Km=-eHGjc zYS~yGmWSgabexhzui%yVAGD_3gFl)C^$vdktNGnHB_#%qI290;A z%g}DiWBj~$5quJS8aJM{;jYQmcz3KXH?i&@|DBD6jG$2^>)%)6+|wv<5;S?Iun!b` zl7V;w1^&tH0vwS`WbQ-r*kWl@!GR*M*vhY=_Ss@67$)$H_G;3M*Rs5LLk;e86xM;w z816WF3~#U5j4}H8#7VY`+|Y@DEIldM-=+jd;?!XAbR9hJYDFKMGC(h9O&0a4M>O5@ zpD5dU43&*=;1*5Ucw6QRzP&aaFN`0~OX9`s&tXNbr}5r-^F14& zv!5&ux8~j^LY?k9geqA)!YhmYxWUw!^liRBz3rY>VpZ)#+m;Kp&stX~+$qQ3Zghf< zHR@C$$_b=*siHMaVvYZvu-7JO&=;@`&Xk#ORh8lJuvd+%9%+NI(+8vfx(U?tm=D`I z&H(>9m*A!*u~6>}=8Ho6n14qstW26k6OFv6f2=Tbv@wa@iyDW!h5EvLb1uZ~K=iqN z8-~_u-~cyMHfq%!((&dTZZ^+?JvX9}NtHwL*?+`%=Q#RP@)ql8ypC73?5V^s4bI0Y z@_@25+@^QXsjo!_?>oML2Z3=gE#erA{iV+HdvD^JKdWI?_7xbL^HLo0qKkCRt6}2{ z2T%#$AhI}FmE1a^N_G76$i+r!ayK#)DyyV;iHaMvEt<+KJfd*-yupF|I?&zEuruPS-0EYGe$l!9StF zzm!ESUx{MB4)9vD3)SqEP}O-p8FDcXKDDcX{f|)Gu)rRI!nQ%ltJhF?&g;hZ@R8hc zUH~_k)(CFHf5ZOv%i=={Z*b9OW#0OC6{H@#ghpzu5V|&jg>7uZ3r^?If9)}{NJ5(W zL|j07*A6zzMS`AP0N8i^Ic^_3kUtK)1k1{tc;!N2eQ&m)gAM<~Jw0Q1bEYGAxaYv9 z{1}B3Z`I(ka|gvu+pdV8TrJ0eIqSh8wuzL9Q}F3cDSj!{7D^sS;=Cv3T2l zMNbHWL*X}B&^=jV$;;v7f9B55!h(UCA0=KEl|iXL5O{f=xe6HFS@$ZSH>ftu||^*b^idNC#}#;9eCSdIo7+Q4Akp1KxWWddZV?C+;hJG zxerU=_Cp1lyXil6p`sD&E?#AY#YXVfza1phl2I=vjUC=(hRU-X*gN|cV!!hTF3>fC zq`{JWWQGY|R^ewZQ59j>wY3ZnUroW4Ekh@7~eKG;cw1oGxu%)rgCqXyE(&;r#QelY)=-9S+WGz<1g6xXOQXao@H?P`;Z7 zZ&R;fob@lZUt%H7)LDR21{=V>9ZOKxYCM;n6bV=E^?+p4MYs@FLlTzgP@5xRBRIdg-hMx2c11=Zm+@Q}9YzKU#?^It=lqf(-dBc879<4_dar#A(LFH^_WGd`9)9K976-f;&R%@pzJXOH3C3}f0LPR8a-gFwY> z3~kj}iWi%8sZYsWxH?3N2Mt+*dX2h#cBLF0IPRPHw^9+=q&ksF1l#izml60|DiLNy z{v>^INlbQZ61#oD2ZAKDsfoaAuK4{GPnYFjW==VN9#;p8JqzL8y!oU@q6q%=U1a-z zEyqb8Mf8Q1Bh;B*A?gQ}>4e1_$>V|npm#3`mDyWT)m_4VcT;say-HNl`yfW2N{8txHe9CixOn0VXYNaO1IoJL;>*e8 zar$5uxk7N~yw7Lfyauzg)(=Tu$OIv)EAV!1TqUlu)ud3!r&?DJ<P2X zed}@vT+AYw@2Cv1LZYFNm2jY&oWFo%cpAJqr304}GO=@Q5^nW~g}{jMJS@|XTUV>{ zmitEZ=FfN-a3CIhYEnUV+6Jh-VvE;Kq+@2iBPwR!fw0F;q9n)nY~?XRPnruZvyw@4 zLbDxJRTmS9DhrxDxE9YIsR64)hagd43yiOS#g?22gSB@T;QNG;pyzxNm$zSn4O_e5 zl64)B;x6)K|7+*VS=zLEdL2p`#-Ur?NdEHQKsu_chV|IQVda=HxP0bmxI99SA1+j- zV{e7>4XGFK#K7wyzuE&veQ>5bBdut{_+?O}ISgmb{|e&G6h>9t!&95@Ive~IQHMy% zH?cRYA=!yP(&@(wuLpDU5C!zh9>ar!MqvIuDcZesC=EnS`o~m-=T4IWy{3WGFVBWf zudjnE>)V@K%4^>+9 z$%jgFF~9*+{(Hs}2qFm5rEqU#ig z;IeB&s7=RAv|RWTPfdMKB*w^+RiWSE=BG|%t5b=|c7fMumx%lG7hpl-Jn*Ui1)XP# zu~B0yN_H+S@m!RQH7%|@WJR6ekCEmZmc`(Q&P*J1aW!lzRiMk{fKQX>V4Lt7=P%hO zj()e0$zbc@{*8Kb-7SD5Fh!xI||K`}lV znRE>4mR(HNg>$Gfb;5(ep*HFI6+Kj8IOT+!lC-CnOj_;BkMUHLGjW_n`)8Qb+46;pWaHkxm^eE9H!IP-yHHRE(v8MY56hqIS zD{w3L5BnP~0atyUP@J4Y=I)v*a{K2X2KA`rm$-kUSeAo2 z3tajBoiCW(&RVn|mH~!0Ea{KyOJJYvr;=3(dzoCA41aom8yTXeiWwnU%%!jdCNI_G zk0XcE7f0<$xZtwR|B?(_zf7b<$GnEbTu*dO`p2FqQo(&?KaHWUt}$#LDBI)Nc^oXMmt^=+SLVaipVJe<=2SMLs{diZ%3| zz`PY0LtZ)9H$M&Ncspv^lYpZ~EFsMo7l6X*0d(E^YLa;<0;jG`fRo>*fOkqVNV>j- z9TJ+fh;F1SCVV7I4(N%d-!gD^Sa1RV<_;8ZOg@9A!(^N<&6&zGq9UlVN;Ure!ti^+ zbV&8a($}{J4jkB=R+Z)_xXwit{<4|Mad~E%;Ni@d% zD1JYi!lsprFh_X4nZkQoo;QFF954X$7O#Q+^j^GQ@j;Y3Vh_mAoB@G3DQMFpgF}vd zhWRgCS=aJ1^8E5~SUBV}**q#4-6o_GwQMD7W;h9D%OvShX=^^rM2hhJgir7v%-y{7 zac-n6+`W4VABOD#pQG>Lp89YeyI=y%D6@l83J+1_H3R&mSK{^NQZ`~}Br(u1rOgG; zkZ!f*wv+VuguTb$X6G14mFi$i^vz+bqb|trc4sdGHK~3`ym;Wy9DMiWINYm6m>O?N zt;gPmt3Ktp;qMzrwV8@Lb6u%NZW)f7E=w}VG`!tVj@jJ@Nr~S9_!VtVnM*e&9SMMw z|IA=+$V0&s8Y$kp&69QsT(3)qeOZ6uG@dRXx0Qgaxdp$(XzK);`v&QHmi;k(a9{9m9HKR0VS3vm1`+Wk?Q9NDQW zu5UJhXSOqGjE9YrZjdWYe>Db^(_>5ab>G0etpa-l4uiM;M7po;GH5(a!$nR*`OefL z@w~3zsM=KwBfT*$OjbNIyrQlOoti9fVG(SD~o zU$F8!UMlLh~Zz z==qR~s1SJw^!uXV^7CR?Jku41o7~3K4M$+z_?e_O_8UxSv&P3?#n`p<3A^EJOEcDn zL2Gs-n)EvH_O?;t7oW>mzk=}H&d}lMX-e?nk1K7upNy?vcf-k3(scafK3r-YPm^@i zK{IA9x7qZKWq#&P5&)n-qP-A)qYg55UBkqKXJN~Vg}6^&6~EuS z$b6$Cq2|8ek!?7D<;t?+VUbm+cjqa#8JTb&%{NSEJ%gs>cVXn(UW`pG#K6OrJpV*| ziP4NG(!8XCjhwm{*4;^Elf{l$D(KF4etYJ8fBP`1=lYkd`Lja&ZbJ#|@{poCHtfSI zI|>9I@l`hNUILppAy075K1Dh&xMldCNS zkXzIPneJ1eC-x7s>z~6q1`noHACBVuN(JgWu?PxGPoXi-0SoGmX`X6acX*t5&C!!M z>&I{Lu*@|48=nbE16}w_+dG0w=Ns8MO@K zUO1{pHziAwQ}+QBo_E3o;dr=8?Fo~ql*MyfXF~q_p>Xh01&&l0&T|&d!GxZ6HlLfr z^3%t#ah5z+J?2Qi>@Q@+MQ1=+tB1|*e8i~W2a8z{3H{MeL8*i}pD&fbU!h{wx?``~#i!O!3_dpAFT zKk^RbuV#OOmRlYeGUzkRpn|K;L57YxEbtM3d_?7iA28Xb5`!R>ZI_bZW95hP+x<=uUXUn;M%^<4p z+=@p_YGL2>wV*oeAC&z02O~o>Nqn>xyxVdJ&D!g6UG`^Yq-M*!^7n{JwYH((3S)W_ zwxfCPN}e`z8Q;CfhMsw#f%$uP@U5L6QM#vHwA+gDVndJj|VN2K)k?|N7Wy~p!d08JZ3cS z_L)ldzdb~{Iu;OHC(54QSH&lmDtP(iQxKK@h9BPfuyIffa~O9E2ig>|9cklGxDev^ z-Oqq3kp_in6)3Uc9U9pL;@!g@knAWeux0<_h0kqZ?FR)OUOSk31?|S%MUU{3;5w*y zJqo)Y524k)b`Y=D3<*1cYJL#GqjSOjElfDD!3wQ#@DIi~FRC1)tOjv`ILGEd^6J zbW5<)k7U^k4Z#IE`8j^Nd5{=HkEH8`#`{^zG_n6@ZTfAOE=n7&hU0zv1qQn;_JleT zJ5Lvfl-eOYV6+}*tv39yPYQ`We@1-w$zhmr`nvExtp>f&B(i9LJy;J7!G_q8^z|?o ze)e?}+cF^%&Td`>-^G^n#Duj>b9oEs_Gp1|^(~0cbfGu>N7I>Fmq}El45U_BLEx4l z{H5?5HICY&gUm3TyHXwoq`YKJ=a#_dgD;@kZa9@M8c3)9w#3?3kHK}N0)1Jh&i^x6 zjFXp{V`=DbVmVQX)7(DLt*OUZUeTiOG8JGqrwt9|ZjTCkHh|La|9=`GWb1Qjjwm_7lqaYgIU>Y&`WB^ zhJ!uzIIvN-UGbAr8*btntU>2F&hRz``bLZH8KO$JX9R(@TnGHz z^8i&Q?nbStv&rxN8z}KN0!mL-i)(l*8nstp(isCMO)GmyOc)QFe;y;`#sg=UXawOh)eqOzPV zH`oWeQ^sS5S2Wb#I{`N%+R$=b9Bw2zXg4JT6RvE5J*Jk_vY-HF4T}KF9Z%ShLu+t_ zSdr%#?SdW6{IBgH2aYnG>z%F7MRX~OdwNcBMK*-xM zfdBLn>WO~?d7Ir{+%oJqiI2DB?~wX>t4!!-GtKhDI;=}}4R zcM19=T%878Q9{4LOL1vrKf3tY@a@Buc>8q??p8jT^eym$URQmn_a8*P|Jvb8o$a{0 zK#g`LU&O^b?qOV9Dp7L31BKq_@OES?QH`z#V8+mVi82fHMLbbeCu;`2;&Mex86Oxv~gobL|6Z{=A?(~y)gHlNT_HbIK zQpXB(({Ojj3o_tfJn-+ytf5W@>{idhC%qqV{fu7R-+6<5_BG)XVz%)%M z_`$b>RrunsH2J+}CMeH40$=>MP^|KXiLb1Pe&ryT^+f_RF6gj}4IX^<=Sys|lPtcv z7X@+kH=JL7xC3#9XE8lw5-eUjlrDO*lccGCfsnPOa7SH+)|$BE*Lro{I(I02IlzR= ztiM*W+1HZ$=oLfN9~a0qoCix<2lK4*&){%vJU4i*PwyIu@wnh;7rq4SfV~7KTZ&oN z>&ejE7l5`>YP6>0pXm1Hnef6rn#J60C7MM8V3^?)Y`D1(eQX@Llld=b4eTd_{2Da--b9S(q17=Fz&(FlMAA#QGP& z`DBEwDe{p0JQTFnl!MfTw`}I_iC{VPlJjN7jo4Tj&u%^*2BTIg@we-WU{uXI2=qAz z&qX@4+Uqj$$gN=3iX(}}>S5SlHH0|qGlDOY(U8B)SU8)FhqtD3FspC`SadeS#a|a- zLT?p`mU{}9!^MytRDd5YRA8aLE#67`je$pwqx#dwXjZ6 z3YDP3h`>VGRInf8K;!Efn9Z5MQ+5o-NxN3UQ@=CNupuAl(}RLjFp6#3s=x;*zQb-E z!Sn5rB-YZg#c8&KXs&SYebZb8zlI9z!sD?pbLu)!ThNF~7XRV<#n}+!_=d?eDe&&j zQCv-7HV;0Q0KSc9G1B#`XrqK3yiJqmIRii7$(cssGq}&X^xnzd-iBDjB)fy&ijB58+n^hLHr9;pD-CGJM!>#rBWd z2LE2FiOat0P}t@`7hatUcl%P{&s$4w_U%2EPf_6u)`gKnH*0Z6;s^Ax3WhWP+yuXh z@Vt^Pp}(*v`<~B-5dQ>R!fuK^W}YM`a?fD%E(!kL_z4_?2C#1Wfv5fDXs_7|G%*er zuTrdK)>FpNw2CNrwny-Jgv_PlU?ICOcqVNYI5l@vOG^rA9ok)*gvYne7MB>6;$i5; zZ7)l4wABU7b2tD+W9(ROQZFWLn!)e49&omqbOE+EbVG!YRjiwMfDD@w=KLxBHJkS< z52XGIT!x?^7;o|w2ZT?hHGSRW{vtW9&!>Z<{TT4H8N~IEDYNsNZ!w$7l_;a*h-=+t zF-z8n{`NY;`aM?R^R30u*qMbwStQEKw&Tgs(dZ{+Fg%y3^UIrb#gC=6a8&mPHs@_P zX8!#P=Y}|PqZuc#Ph~HuJe1+Au6qmYcMAEiNs27pV>ZC2nGoHeK(%$>GXE_)aO;Nz z|FdHdf1@4(Mu%qc;b+{?bxS0)T{=yk&cB3H#y)hG6!Ho3R_4@y!6jCpau>XJ1;D7> zU*xX!-4cgw9x$ixC2rGjhuuPkxoF98j68npe&gf?J+hYi1F>p{uqxzs=E0j#*GLg!!EDQ*tE0`_eR^uWea z-~)tPXU+FmIv@sjC%Qwy_Bpgwv{$apo z3HP;Cd>`DaG-2`!TTxvhlATsvDc(Qb6t9k#!hHD>*q=2IU&o7R?Kn&PveS$n=okK% zQ#vRDNq(^_muV}yy=YhgA87@t6<17;Ip-i<46F{?D zo0m2i(Va6?_@aP?+~adIdZz3I!-a-)PB4%ggH7l^n^i z39YVhqm@C6Kxf4^`~q@hgxgi}ciU*H@n|Et;ueFqy9#jbxCr*eAr+P5)bYde4{VQA zI5x(az(&a*pr~jM3OSnC{pt_fq;(&b^&~U3@xQ>pP8oyl))O^h-niXcpDsmRKKODR zwok0aH0y~h+@%Iiln#YO@3&+4vXdCQPm?cmqqxgG9>t3rz-@OF8fA50a?ERZv@Qy- zZZP56OG9u}r7E5YGlda9rE%B7N{~Lh1$g-`xE+53&p&Bnb(IaID(5!7Ki`6}I&Nq? zU6%hUFrk()SMg_;IlXu|09~w=dE0a|y5aH<(%4~0>c+*Owsb1iU41F)IVD3)+EwW4 zheI)1|2LYA$cCTiHHqWE9q5ZBBVZ zvTYmOZvKo@Le4Vj1IBde-07l0C`E@x=unM?r$mc(JHf>{xA4`j$5^`KsnE-e#46kY zW>Gmp*sDh)^%zJ941=0Ap}k@5_)%g69~jJ_~!L(v} zK-*rLSJlhYoEO>5snHP&7hMxsPx^vte*?%V%|7AW?gnY+1cuSuHg--w97E21Ve69o zKt}!A4*(@nEQ3ua6|Y#^BzN&UpBwBs!?!ut;K_aL;MkuriTTW$G4xY#C2^uo{|#s zucJ4LYnOY$`Sq)jSnL7?!%{r?@;WQs)dJzK^f0oh1)T?1vMG+mu;u+NtXP$ae^Y$u zO{-*bD>Mw_=oL6+JplY37m9q(6aF*i0k)kp!-R(o;6GAY$PGLI%{Q(nKjJGEOj8xl z42goiE=d~Ln8;H9^g#Jo4;r6nMt8WJAS&JiS=Y!^l&Vfa$DoHWOJ@j;89qi_tgOxB zM3the{ukiP=r|1hJqRWms_@0@?%~zim6%^Kn2h|_LPoyY!i{#HL6hgJS>j$zC^#2Q ze5$1dUXeMJOe-X7mrvwsHdDbRRvq(&ti@DKU-Hv511;@~|-oQZq#4YjFVF)uHXwbf|X6(VtS(x#?42Q+nqLYAmyd^#i&-XR4 z==-gZ95a-)x*0+8yzfx{QUYYxs&nIIipZXZgTmD5aHahaE|pJ&hF~wA+LD2N(~gs@ zW@FxdbpafB=?2e}|G{4M^Mbb_6asG+!IaKTESR=I-pWi^`q76@^wDP{_o&k1rj2CG ziyydbq%p`>v|#YjILK@==LZkJf-}3sVvVtea3`h^gLYWpwcUA8*5*woEg4a=&N~Gm zQOE`M?_)g`ig;)B1gy2!=2KJ_qr~Shbm!+tOyg2&-Mp8j3Ew!0*ipRutOXw^^9Vnc zsL*@jKzbzpGEBcS8!iSOfWmJlA-P(PO*?FX|Mb_2rukICIE7d^Hs6X~N|*;b-l((a z*|l)S>NVM@G#CE*E`)5mtKhr73QBKD(4V(b*^Q$oV6GT=fADdhcJL6sP8))YUq=#` zol{B4Vs!}4SxRqRdjQ8C+w;3$m+}X_^3+0b(GAo+&hp%6V9<|NH2yS^_BgLV$#o*G zIH*qOeOU3Y<&pIFBnfKJvlT-NH-kcnEZh4>Fxs4603XIpCG|4NVvVY8bOySRuSqY! zVarB-sJjeLd?LKJ+J^_fn?fJ?FXqo||AXuMFJWnh5)=)#Ak|g5#AftVDCv^pf1^!t z#jjG>bniU7xKSRg=B?z$uS(GBvLF8(lEa=yK7=V-?eW#J=kRQ)J$Kphk({VL3GY9K zgZ-12Y@?D6y#5x%iVj}DS$F2+zsgUn<4rNKIB9~PdR2h7sK=727_IS|Eg3m3qe>ng4>J0jtSm5=pTI_3g zVt<7*<=89HEb?GAF40NH)#Y!%v19_%FnWd>gHDP61Yf~jjR&!Ac??z_t7ntmsL;J_ z9e76g?wl&}XN_4Q^j~`z=J*-YGrkh=-@IXz9kpS>!dycCTT9#`n}+(!x}a=UI8IpG zNs=F&CMP9>v8chAL%SbNoO2XfC5wsFxEi+cl>#j%8PKv`hFvO)!X^F(aNn{zVnCY3 zUk8?flEDT19)i^Nkk+3fJ;aDHv?50JmK4Ns@`VOU%roA-AJMA+>T zTV7CuIT#HklGEvvnoY!8JDa>TQsDb?_5-=B#h;zmhuimtaPIeD`^_@OrKuO}E$$J3ofv z`@b`YzfBFRn%U3Z1UtWntsv2GTFgT&9J)qK(aX(c;lD!sZW@7O6)kx|&L2=b%Y@m(4X8Du1B+_IP(sU;cG}D)Why@)X7~W?^uL4} zaz4CMhC}QYJuLmS8eUtc;%s$$&{1u~Ub7Om_irKjA|-*HQ?J0vyH?cs$0QnR@DksZ zlrpctDst!PDEjuwZm936!*%)E#3uIuX@2C&!toZngSRl}vjKN!J4tC(D|XF!!M0Z? zqQklaWbN@$D6u0;v~9`~zB_*a%kXYQkF)9c@Vy*guy`3H8^^+Br`fb9>?EYTEr7ev z&!CQJKSl^S%h>;9X=Fka6n^MuqdO|upPX&Dx+{!Ct=a-IR+4o0rWUy^Jly$&=$`jov{Z9|;59XXDc+2{Rpb{-u0o}29u^kM z(YoLT;FaJBaylyX?xYjUwkn?uRg&Q;vT`&bMF%H$RiMk=rEo}tVJtm}<33HGXS%;I z)m@`_Xqg#JF`Gx<1@sg15iHUeZO{8&;<#=m8)O0fGXXU& zT?J3GWD?4!LFAUt_P@%lVXw3$Ilm)MbmH^^x^r_rbcfGHXZO>vba)Hi5skwYpPihy zmO7)AurFRungJ{HwRwYF476HqgNkxXel2Gnh$iask^w{<0h;_}Z82zZCwf<=k(4yuY{u3ixWi_ngS9a7{Es`Jq5=4#mSTAq&c<#_n48XuH!9`oiO zBS}Slupm{5>Rsp~{hKuTsnQ3;*0+tU_bvsk1#xiOuLK4re`TMKF5t17pF-Hi;k0kx zZ*($tV0MnWTq-pHhN?v{(UuhQH)bqV`*I90@DPe3I-x8(3Ok|#M2<$$XwvLSHU2(= z>-`llR&zLCnd?OlteysqqXvt2^_rpSo0qtJjT*IkC`sc&O!<)0Ct$Nj6j!@ki2=G^ zv{GM>M|(UZE7Ih__Sj|&+?S8n{J()^cmgilQpg%M>(hdi^LWg|88_ue!1@FSQSJTl zOwZyfhK2Tt3*Mv(y^b%~d2A6lddCs3i`&6GUI~WxtMU4PE28b$-^6jjLjQP&Jda*- z0)L)LgJV60+;>(J%pLOwNz*52pW26)pEqFlST*{(-iaS5$YKKmocKRup)bCDKN|k^ z%fpQ9vXmpD^6k*+BoFNu zU*XD39X{zpIEzcX1_l==@bQ;SsEUpguP71N#vLQ*vEPTF@by{Jaxwsi4wt~5 zrPHyx#~I?^nUnc*a?wc~g_|Xh;P<%$v02fR=Qi6=%afm2)~uOaEi@gEHX2}etU0X` z|Az4ggniokFq--*!`6U1a6Z+Fs#WG=eSaCN-=KoOJkP=SQZta4GYPgXRi@W=|ARD_ ziCASfg1a@AvFE>TisN>>!u3QZUOLwd3LS%~j$0DE`D?&WOyA6YmV}E#gD&E>rz*~m z5*E`_FIIyv+=20x%kblwnP@n88Mu5CGFAURv&OYK=vt(PhCAd*ppFfMW$AM{O9n4H zsvx8KB+lQgiYpqu;qu#B)csF|Nv^*~ULGt1%b|1Fe{7mlmWSV{E(xKiT3$F5F&0TzqE0mNZ*@^2V6Y9z2NJ7JKj$K4Cnh zpRy|t<>9yP4g9Hd0zz9`U`Lb!{~q=WtN*p(VU1s`>0&P&h>U`I1Tg7I2Z!WfQmEg` zs=fKkHZ4(xaMsQzVg!uem`e0mbSiQpU#-l7=2l8npHzej+o=J z{;{yHQt0EGMqxqmJF;AKgZQu1;PdqFiVR-P#fK+PAZ=8JEg55J*MxJ}bf*M0PKcuM-X!cH&!QCBR@ay6(IoU)QNl-}~jG-BJ%KmTtnU1Eb*BmEU5ukJI1@JB_mE zWVzq$^}>667Ur+?rt%LmS@+J(%N4 zy&aWf-;rt8pQ32uIb0>bU+6oGfvQArdTq}L<}lfTe%|p1DxTgUA^)T3Jp6L}-Z);` ziM01nB$cE|&$*6Bv?MYbWG5pdGklezg+eG%gp3H;dd_vqDrqT-R4PRgLMRcx`}Ys@ zdR{$s-{)M{=l%XfZO7+jj4k1EJa_#VzG?bon5U$`M=BpipCe{$!x|guR0c_ zPu^n^5KEdgW%<0a;VgMf3>xh#$GL;VIJq6`eJk}5UGtYC)^sI}F_o#BiOa`0_n>YG$a$trKOaLDC%@?5KiaG!G=#cd_IlYsr=D zRPx95F}_{$h{(LHVYPi%#g)|qxz3k$Fi_|wCe|u+V1OlERrC|x!mdHN?^;~t?}_oP z20U!>UDW4i*zDp2IN>>rmZ^OqrG05&_fZXouT$p5LPmMO>UeTON$7BYYYOi@=dt&* z4-4~mMXq2ii7h==e3INJu-+p}M-S9SyYrJ^;4OFbJ}OOfw+QpWgbg&wv}O@b?*FX&1>7hN{4rxO;fwmL7fV z=?(^$H1XS72Yev&iOdMnr?EnpM$PvU=0TPCgCS0^r_)0m6Qhms@8dp8g6U*B*yI6&yjG@FET+DgQ2qubC+ za~IyL+s*Y&o#@?02i)O%6?5GZd6(x%9PVR8Q^$sv1SZg?L4yyU_4_l&3BTebPE&}Mcnz*M;7ZGwC6 zZKy+)7zZ9%4D-sfz&+$V+FMEDAIV!N@kO0qw-ck+iW;K5s~R5(jKt-hXSkvK8)z=I zhX=;~{NJIIY?-Y(UB2xk7|+qgslUx>S?xTorRq-SZY(CaU4hGY-h!DA6zFQNc1U?B z!Rs#W$LrhsaJ-q|*Sz&!6q&Chrm$;mKJ;1XPPFRQ z;2s`s zY&l)(J#!*8*?ta-l9i!4O_PGZ5nqcU+P=*QQw}d6m#PB!uNSqr_-U)y?Vlb7_zywd zyillh+KT$8^m&`v0pcP!J${zxlWSfw^m$MOQ+-Yd_%y)fgtr*gGG1(Ma0hRcKWD9y z&oOrA5fbosCl6bp&;O2b;5y5GV&CdojGq=wY>UR?YxfCUJmxBl4-Lk%uMU!sea}d& za3--YLtNUj6XJi`1FQdm{RR4T0+jVTl^oLF`Nwbs5-&z1ohdzMXveOuUb1H<&UPI5Qo$S@(YHZe@ zkLgE7@SMd1d1KK<=U|5&kp01xGGUM68Ye|=ddx#8e7j__z zmyD!x^WE4=w=g`n!GW4tzeD>Io#1vs$fK3NVK230>9^;ySb5++yg4ijxvD!zIIAVn zX1%B>JB})!QOEH4I&9q17}Px|O&cfVz`Bl=_#?&{_NX=CqVpNzV^6FxXO|JpDv%eP z!o=<7OS9{w9- z>SwTpqZ+XE<{aQldmz?pDX*2ZqNn*sv=Z3CQv;HiZowH0TN5M-8Ewledlr!Uu8}lz zxtY)basVTnRx+D;>U?g~9ys9Ri25cW5V*`Fzip@$C?BcBNr_Y0k^Ud}qOc5Y)h+0N zc`Cem#}xW{k2-%^>PTBP&w<&0>G0b-hPk{v2m|Ym1=L~FkYiccS(a$A| zo?l}rxkfN=)4`23|vrj9%(fP?VSXK}X#_f8byx}@X+WmyV`_%A5Rj!Y|O(U zHe>Oh?J_7nvk4pvwYf{*8F7eanP^nh1=d-p&%U?Rp}o{CcDj86x8L;(#KkEXKDHGu zR02T zxJ&`kmr7Hm6W`$(Pa+edwc?5#w^K0bKunw`m>_}?&>MFUd@(?RDhBMiM%j`UDg*VG3*<`I=sBTf@y?G8? zE};}g-M6QmIvOxCeiKx0w1x@u3vrT(Aw8lbO{Mpa70>?Bo8Ny=iEG_Rz*(<6_!|!w zoOL@AN5ND0ruq}EYu!iQR|>z**I|}uazL;ua|P zkwTN`F6=&W4b|6%gLL)}oFj1z*Y223hq(R|N8Jd4*KRJ5?(-eD56_3!#ieAjjRs#V zD@o_ymEsmn!Vfky;6X5z?I=ito(rw`^sWZXXAgxc)k{K#N+h0G0u4#YC$t@$WEGLbP{~iqyujXNRu@k#;(wL{{oAE3wHCW}Xjb;-A zLH4H&akWOmVixm=IZI&|8Aw~Uq=K&Q9ZYyEL!R&74xt_aper2F4zA08)jgALZPq`{+GNa8JfzEQ~F>6Tl9+UI4= zCRviJm$!*yrz+4^!)!>N=E@=kZ?^x_;ZV7-4VPs-7yHV82C<0}6$e_9{?S*+4D~zg zzVvvkYN{vx!vD;a+Ee)8augUAWf1FFC2Ca>4znNXaPLXJqTSw(SiU-hovV6}LrfY- z)XOlw-vM~4E%aA352j()p&@uyXz*}pfsME}7puQsV#mE+ zv682UK;@J_jCg&6-3S>@Uf^+$TC-|s^_)KJesS1v1Rl}kqg)nck9-Y}GWW8+$(~2Ps)(H%|@AV=QCAK{0sjP=XM>35B~SACkAKn$%oLo^LxTOTK zvR~yBgMsx#JFpQ(9J`1flV-9L8{*&xR|Mm6^5b@I8_Yw3WMER`Tqqb91J||PnfL8f z5@xMPXIpp>mo>s2+SZ>ZMm~ZIuYjGbkf+ zvc`e_oxUF)y8gh&nVw`*fGVC04`$rC7iK(`1s8KmZW63Z9iN-iUj76^gn9Sz#R^#K zt-_yme8qQ6hpL^A!?#VF!GBN;Yo5)}&~-Rw;|z$c_>E;v-|*6w#aOBE8f=4)K)r-B zR!NoP(2HB}53gcg?pN^pqGwn?ARdq1P7z<)?G7(W!kp9B&ZWM6vMBPKh(r4xie^(s z`hK?H5y{C0$rXdBn&&5IyL}E;C^zF8I}2PUQl^OyG-$DUG7`2alZ-b$2`<*CQ73vea(yK`e+ zJnQaqVPlrr(r?4Bz^CK_)HRQXE!#Bt>i>odJ@iFjZg?MO&0UW*zVR?#R>&PniCBxX zJDWf38$5m8i~IE@c%GId84`0=e0S|m^4DWE`!`O8M0GXbgh_L;|Ih$RpH8OVvOUPD z;%=~i^9$Cluz=+;^DxRvpL_MW!J>*EaA%1Rzv7Z8>?EAISJh2%`y(;DsUJrtFSMb- zXFfnkMhN)W59B>-`bCqz{T1!eRK-roYnYZ1N5t>9qpXe!eM2T;XX|99(DEGQql%dK zst$Z4cmvIi}p_3BCOsO{y z?SeG%dH-}e$Sa%p=Z_Izdr}RG3tK>aogB2y(!#)QYg`j&iyv>FMX}p_7^gUz2TA@C zb}R4T@uYFweWeBOi5mqus}f;%o+TO#^5UKTBcQvj0&c!_=kk|+!u*%nq?1>|>${FL zJ>)DF7e#O<)e+=FjuJmPTi{zA>afo`fClztiS@SH{_FY<8L}M(%8a& z=~trNzsI=Nst$+e1PV;5z@er#$-pAyYDu5Y{~`f)(*$(%6mi;|1E$K zp9IE1BA=*v9LH#t7nrt69Y1FK;r9XB)H^5z_g3}-aozx$YWlclc{~(uK7(HO%5n70 zsjza`IBac;!&+NIamGefO!iTvySg8+v71^+dH875NzEYd{s>%T*DZ{{n2CDf9niEu zi}nlb=fbKQh*~rRwc_?WJ3W1krAh;MYo8ow`YBV1t}m=*_&+v7ArTJ9deKczx-3iZ zZv3zg~$STyT4050VDev7HG>Llzrnuddy1mLgVT6E!oAR2pcGA#I{ zLzvn{qFA4gIS2ho?adTyRGH16D`er-V@R7QQr z)E~Jx>U#m+%{hzvxArrx_?3kY>L+ho2T}j^k#L==!2`KAHhIw?es$&BaS_sGWaEmr zsAw|*z6~q`k44hF`Lrg_JZMIm&4rG+{~nOYBs=21dK6Le?L))4l;Q|kkpIw&qBs3G z#eW;@ZPno~5={8n_XEN1K^sQA(ZDaJW6>?G0lNF!ftBxue+rKDPs2O>-2DjVNgC0D zbR)iRYXx!sn~RQKW-$7*1sB6cSk!inte;-Zw9S=hocJb;*K2fsxj_kb z{R+Zz?a`cOY4LCeVQ;Ed1E+opv!;l#AaQXr`V6|xSmsD@ynY`JwETgpS`XBBX%Xej zdX0uPr_s1yfrsxe5eNU1qqAZUvD?GEsn6DlFo4O@i?eNM?TikLySfhoE`MW#_S%6c zfI+lqJhw=ZdSYh%X*wGROa;cxdQ{WwJOGjbfWphx7bf??D4dnO! z(2p6xZw8M5CEZ1sC7f+GYec~(^M0c0c$lrYS^z;-7JSRx zE{Iw_0y7fEa6fx%Tv#e-lrxf9!o5uNT$qff5}R1giUKk#?k-9XGlVsE+t@mXUQ+ze z1zV2qgNu`2kiKKdc;~P-&Zn2LBKRwsKEJ?X{Ev{eGX<}N#3AzI_yAsU=@nVqg{ai+ z&uzCK1f#u9Od-jJUV9b~w@p4{q3WVPQPGVW$2+}s?%r>O+M`9Cf2+DitKZ9~vb0_c?m(NO*KDO#&UwuwC7Y#l=KB~wr8z5@8J6A02aAgn`(bA zhQnHyL1Nf($lCk{4h&mLzxinLRF|VT+2|^|$L=M88||5s;KneD&SQ=H^ikvS8d%_x zhPe~O7&%r#+CQ}l6K;RU#pr$mPgy8s(5q(V{gBxqepf=T`EW?goNaq#FO@_yW1to@RV=?f}AWL1dj`xo*3 zXQl`;1%4?+e|9`^vap_TYnCfVPSN+#P#e#T@*m4#FoE*R?q78Qh%?3jY8Sb6u z4CB)m^0`7TBKFy7j993~f+{Cd3*RYx*zy}Nc2X*M%+cbBd}?t}#b1fKC`56E|E&1~KS?l9dy0;>Nm!r}M)J($VT+I% zxS*WMdQ<&y>s)ElDN}``ZmaPA_C7MF@(7j*?v-iO2?m!=A-fAJSn&s2)O=58lva_5zB}lhd6=Aw^yax`1E|f;Vn}`;NPooKpq^9RX|4B2zWH|=Hgy~ZxxZ21 zL={kr%;4STlR$n@IkfM0f;)PNys&Z-x4ZcqC05(gjL-%`hULLrzkA}ck>|ioP4Jyo zpCZE`kS{$eOZPbbWCymKBJVA(;Wo!3So~L?iwif4w(ijp;e+4c>)y$JymR2=ek>(v z=ak5`Z$2P9D~Y@h(L(XYWHRZ}8s_4c&lXPlj*FgNMT1|L;QLe~mSGkO64!R|1gSLK zC~!%S4)@~JjIp>b)D31vtcHYWM=(CQ0QCFgV5?0TZjT?t9p?nl&KG)gkIOf>kTDRN z4_c7*jqZ4Dof7To@c_E%HJLHlfc90VK;@Ap$Vk#}t3vN%+!9n@B}3;e zGUe}MzGK2xAJA3*B`zAWl01!DFL*q+vaf%&c$kL?pZ;wkol=zvn{K56_Z!Z0*2Um> zk1<>$CX}2}p@JWBDk%)vO;YPOz{|KRtUS~cq@Udf$tB99XQ35OJ+DAZmFDoP!^P4vQ zvPgouPZk2BdlDWt?n2A`l&VPVb6!^@5#GHFKS49Am?UZ0If4=kn!ZDbF!B?O&j|W zUT7Dv-@~TEmDBBHR_8FfyksoQRd8nOB!>u&qt|SvkmdNOu$ewNpu?|^`GrpmCAen8 zh5R{b2heGSHTM@fd}sb@fjYlzd}cZwUMR~8zSndZb47ux?!Jj?KW72E{EOt-jv`t2 zjA(wtXnN8{L)>Q;jE@7gX_r?G%RKxLJ8bjGmbgG>@Xvsn*G|H2Wnb9awT_`v4^+-?y_br(5;bJ9mhyktw8vUTu^n=>sR)5)SWUa}1z z=Hly2Yo4v?f+h#vvIYZNKHyOV^Y-3Pnr6H4$1*PP>}?kQe0%{%Mec#eT9W)vdNP@z zxeC8%Y=%y~O32SO;JQ+`F*9ue*|T1XzHudV;bH@fj-kx^I% zdvLAlO*q}G18E9#FhAl79+TS1Z^)0N%d!=rcgY33m2N^KR~~@N6LyQpSwhXm*0a@5 zHH0~;G~F>G7LzIk*KJZQaXjsZD{Yps6+2{TU#$*bTU{k?b#@hU)RQ4ET$lZ_O@|fj z_pttJ4)#kc@hO&1u>aa#=x}O9yOv8N;F%bFHp$T^_fLTPR}OWrjJfT`N2E~Z2wIs+ z(!p(6%(o#M(~ExNurM)xxluwM=1H=~_w_irHGt2JYhdSB)S+E>EKvDr^uZ%d8k{$t zUoke|V=g|1bVF7CqO1mnsy%}JZSLGtL!IAL`HWK+)MHBQ0{BveU{)myhq_&au5d{@ zw>F2F#v~$DDkLq|XROT!%9IG-x^o))acCZPktXPLZA^M_}-b|77#lN^FFCJsMwxYjP7b%i1#bK4N zm`S7+uK422J>#4}bD@wmIUoyJB?5!9Uy3HgnV|oKRvge~Kn*rGVA_fTSUI~L{Qaj< z$AcLpcAPoaY}CWYm3_?Sq9X~6k>jDd-J-tMksNY6&}VojtX_ABOfH%&%u7}2rlg-( zy=Nlb^<^D1+utC*@#r_`wpPPOkutCPvj?o^#ew^ZOK{G)0jvd1I6 z@5Tr!b{q*Nv54Iw#3bv{cw4tz+#GI{pYrGyJaCfc+EWy%_q-`^HQJkA|Cc1(Z+xj` zr?$XV%kZ-;dhGD@p`=Q8AhmR_h91*yA!oUttj`hl00%5_hpi^v(DnnAWk%A>XD49t zDq}iMZx>O@5<_Q)0Z%%bfnh6LS)DLH^pcXL=JB72iFqe%zZJ!jN0mawVLkfakuQ+A zNE%O%Du;F9g*ZB516+HQfilfA>7tWIa7_OheB_r1MQ+W+?CL*kn39Eya@ydK?F(jD zr4A9duMnFDc_=m3k$QX=VSB13zE1m$V`v7%HKl^vRbggv`!AI4^XGOKdr5T1C-V1? zF%3(!MQM+VxZ`C!Sbnt~C)5F=ccU5%s_(+z#_yTVw9DW<@-VJ8$ig&*09;{x6`iY- z&^)Y+SigxPirs&S@mhw5g&leqnTf?4&l0aC1!B8gC;Ik+HXrWwhUpED!H*krqx zu;jm)SaCKF&OdHr9rNb0+yBMj53T?e=D^6{c8EKd2N%bM@#mAHaQzkyv=X=%-zC4< z(&|HGSf4qNjPasJuGh#-Q)}K)au6SGXk_=*Cc{282l%Eq1LjKS*A-%hrfXon`&sK9=LtEGJUMo&H8>iV7sQ^os3@$rxOG}nsu<) zE4GwO^CFnveoZuXmmPh%;4K;4wj75B^b-wo7H-TNM?dr(hO)NNJkRYW4Ag3cE7yKP zwsRhft9y-66Vl+rFdr&0bU0tLFCN|BIdhBFUYOr|7!70wv9@9hEL2QIt?$`*44cV- z52I*leH&_fP6AU44_q-V25#&0i(TUSutQIcTE$87O|7y#^Lr$TUYrZfWvXD{`H760 zxB~B0TVmkgWz2o}S+?ZJ1O3AB4a-OPpvR zbX-*B!h&ygh+at$lrxe_O?d_$o-wd(P?UJW{z-IbrXo$*z5~^R8${oI`a!=>hbL~; z$yaUDr5SFO;MinI<*L`hrTJDo+0g>LZlt1->0tV**_-^?6ag1yj-ztYZuBX!L|SqY zlBRtUyyBT?_CiZk6+V-yNV|#>&YggTor=6PXE<|gH0JMwnbetUognw%JeVckU;}xl z*kABgZ5%522GiZKdsZEUxDMi3GyjnNIZs8o7JFF7r#~p@9@wg$I8knUG*&KYWgWkq z_<#NkHSRGoYVdUu=6M1o)m^yNP-R-Uv>3-Yse>UiquJ#$2u&(3{8@b{uJ60h) zX9WhjW{fQ?)3-s%IM6VIwu%(LI_^$+4hoL$tW#!1*wD&Q6qym!~;;lhI4%ILVLDzNQ4BlxJs^vn6+r6F1laTGF%GD4WQBu1 zvM_%$jF}OK-Mz=*t2bb0dK=n(s)PGq=abObYa@5 z{`yRa*H6Jas`Ze&Xqxka1j?MouOTV16!uQlp?g{uV7Y-281`4f=|(G5oudpgi=rXq z@_4GKvs4_>T?)IpBT%;}3a|H!fc@)~_}sIhxM*@H-1@Z-wxArBtD45IJj;b^i+*9> zCQ15rx-r(f1b|ahhgf=el-MEZ6+7>?8MO_d~We2czVVO7s__x z_th!Rk$XR2iP3m?8*fTxE|Ui%(L_FK{}7mxehKFjMQUiHKo7}&M73>5Z2ta-Qga${ z)PVuwx`LPDgH=mt+sSjHjA>3-J4D1(K6l{zgijD}&&XA6DZZ^tk7i!(g51gw_Vl?C z(9xBm7gLIvXL%(Y3bV}5w~pYNDna;oS1QO0Y?|EA#TdCNh?Ok+10(NElkum3>N&ggyJhJVdXnh7<6VJmAEZSi#KG6T&{`% zwqJ*k3x{yVWi4*`?JIF?Iu7TP$A}AWg_EZVi)nDDDX1Hm!|ZVjDH-1Y=E8UO&sGL} zFD#>urxB;Tsevhf{K2$yxiFhdgVOwXa$%$cO+7sY6OX&Y-wS_mu8_+geC@Aw*3E9u}C6F4B!7MJh;=`nm#6UNZ1h>Zk3HeOM-9AM8E+B~71M#oY zU-%Qhm8ASF#prLth<3^+al2Y9&VFY@0yk`djRJ2LVD*hm_3vdj_AOvj@@25~B&C;C zm$AAvy1XD`2FLm;og>tS@xU$-cXgp)E#E4h8gdId(k9V^Hq+>Z%pZ`tq7K|f zIAEXngDCItT^upJNE|u6klo#5%992Qd|9k8BeI(gdAFs(JiCr44f`gl9`Fushi?SE zH60Ln;xOF*~goM%&g$KdIoyJ5kd!;oP+LCAmH7LCv!Lf!2haHB^KxP2Rmb9W>| zyk{4yiyXq$XS@+b&VGeYN}izThl#L{Y6Qhag3CtAgxX(n$9^-x7jL#1ul%(|gXg7C zv-}{g4lIR-aROs0`4u-F3lklalqIg4Ysl9*K_qmcIr$(_!^}ry!<|hB@z!Dq9$fMb zM1~y4{u&04J!(Y>=V#K`={7&f3 zQH68K+o46s#2C+@4#nFdIJGFM*$Cs7Tr1Y497XVM9&08h?pq}d(YM3(Iv0Q(Rsq2wO@xH zz8413&-;n&D0MjNKb|g*8pa)#OL6;xD)PFv96ndtF`UszToXFUh3QFfFk%>H2pN$_ z6}{xtfg4b_`x4u{#SPp}j^dix7w>MHWsA!N_PuIm1UjyL3q>V=*~AaKu;11W-^xa! zhM5$vC?`CqC=jL3=VMjHSaH^V7mOz=FU`3QWvGno1ZbI&a)cy#3?TDxK_IIsFgUKE(}kk>wZ z!`H8{;QI#nxb!9VbZo~%&o8m11=*-PN`~Gl%qRKXCgjWW|9EhJ6e*kd29(oY5x*1h z5YVMSFPdb+{-a5Fd0qmnQPISXUv+q1a3o$T(1cZai7ee^0BvY10Y681_9gfNR5?hq zt7>0hY+@o5re22aOSH*A4H^1^y~XCcGx+QPS>zkEdCZ2J*dJGodPg3^nL8Ir{o1ei z?@u9muAL8kc_#FT>oPbbXU;oYhG2kN6^>3X#-&5{IhVu>=Z$ke1WLXW!xbK~`4jI5 z`TSCN8Rje27%B~Yh7V!j7d>hnco~BK6XW`qihNC=vC!kzM&^tX-r=UgJ3^wt`NGad zO!S_D#@{AF^0$?+_nH!YIa(gpFY)Hl=XGiNV09Y$Vif+V3>FO#;FntYWvJ(V6~}9O z!Gz}BLeEzfiPTTWxO2WZG`kRYw_L(;(y}zw&44EFBJ|(rXtuF$&r$;6AQD)jeeqiTJlq=Pr^#{C$9Et$;U^qvAC8p;K0HdDi;c>Yi9_NXqEwa3 zTxG1F(JCD$sLRlVf<<_GwgtSKlgn=G4~Aua1iv}!Pz9ZCbOZx>ycmNQK}aQ-Cj zmAupW$+|eQST+emb6&Bjn@s7%kax@|tqkus_QP@&&b%a?!PYGXY71|Y@SDPO|MXiJ zDfN?-+?zveHag+Ffo;yky~cd&#S#HNA1d7FxW&H z40kr;(ub4zvD|GCb1;zG%AF;~NykzDQ4*Qe>Ish3`LN-;@IBjIWgQYp_|W|{nJ@Bz zsy_p0mXR~_UZ>8J?@R}Sce>)HV@uF_tONcYZ%FS2G>Iq9wWp1?u{h6dfM{>iV^nsq zB|B&Bfan>fJX`V{oIWNCEmg%hDE=`_yz@4H=Qd%^U**S!)C;`y@eNphWC{+#-{?;) zS;5X3w9#WX_C9=vc8^l?14qBa_=ANwe!Dg;Q~oIQ?5%^Fe}!C;M<%=x&IGk*zQMaK z<^nfnLe=-D!${%&JS@RlIDbteGgp_vTz*TeZJ7v%pNHp{9Xf=!Mqh#e=~|3fX-_W? zdq##DNANoV8dS7z7}hK8!6C`-&~kAjraTU1y3JwWWH66eY%0N=Z{FPd_Hg=i!eRXsPeZ|{|YBWWjWYq$lWXRhF~{CA|Gs)xvbUe0=+ z`k?;eCHTk9gpSR*!wjeAim1gSs1-M`xqT7vY^Fcb&Gz)*YdOAQWhhzsa5x=e>4Gw9 zNAUZs!L)JF8TIc-x(4^KDy7cY!;m~0Z z&|-X>@HhErcGDH+n*D%V>lsMbl(HGi5{R+81L&E5XD43GA$I?YSWD3$k&Vs_P?!=Y z%qkzCPvAhNcJl*Ndy7CJH4Vd(Yq9C?OV+N%Nb6c{8o75ijyn>|94iIaa9}VkxMoiq z%>O~kA6pJ*5=EbOs`4l4UN|>+Iy^tVj43XWpg|iqQeE*J`rPI^N=Zk<*Q0~Eg4z>o z-7ez$zUGs4?Wdf>C#JKWXEZT*+i!Jz={7&Gs8~t3Y;cnd3MI{ArZBQ(Ip}Qu8QMv)3uZM^)y4% zsiw51=MVPZn1y8cSm(-24!TtYE=Bi{A3yhjo#7L>IQj{y?R-gEnsj)KZ!><9l%_!x zq3_jnVxE2xukPx@i70f_=%+JFnQrKuuRtBduaV5%H@u@Y3LqsC=xoo z?#%+V;Z^uo=xI3r`U-yj7!AkS7+NLkg?8&N!ugmi5bghj)doExb=7#3_${j@4(*X4`mHXf^YKNP@#XTmbD&DhAqWUQ9Sty$*uT-IVveA^1cdB z&t1Vw=bsAsvR$~jZ2`*miebRVCU}&l#)n}H3%}XH&fTsig`aofu7_HfWAltiKQSa( zj`K0(Mh*!-ahi;k+D<+=4kXSNRxH>c9)eZ9@E!F9#o70vsy`fFoV2IatB#8c!|Pd5 z&pLelNXQPpibm7L(K!0KDqTNfDEAc4<(D@IxwP*VAbnsLX_n6rum3d@=NK&KK07X> zmTD>-ezOu(B$Q~t>|ExMnSo^25IT8tJTcCAC3H5vLMagesS3j71lOHO?>lk!LV5Vo zDeS<{OctD(@-(jF0P#E)FESc%0;hj=#R2jwVbg+RL{q;O-NN&k>wp@3bI~3L&;N&1 zx`*`avxHj5g*eiy6l{bXfJ65gNSl{}n?i)o2f29ZO$lyVa~}5{2*Jk4V^Cl43}NnQ zIxf=z+!WQQ+G97&l9tEA9S&6KqBGa}Bk$}zLY3Z`c1}!ujbP!=Jy82=23%hy0?~OD zf%D!5TXlS4$09wvt)x%$^p~-7Ujz6cCpq5r)txkjThRT}E`rrAC)nt{7`%$?aY0WC z4A0Tvml`kQWy7KL&T%!az1#(k1|0_ZgU#^yWdPi6-$fV9eah573G9Ne6^=bPf=kZ0 z3KGvUK~h4Ix4iw0zOs@y?#>F_wRsSqG^rAuQoG5ls-t*$aU`sh`i$-J(PHx#3~VVU z@?r@z*3X5BE2_l@dThv77ctH~A~?J^4dV}%8?be+r{RF3zhJb(LMTa5l8LsTDO#R0#MUi`F*FOad11FQoTdty2<2_3VRtmbl99pUbz2{!GigLuwXwK3 zcQWYgiian!gOGSDLHhC;aINnFh93}k*M$Uf<`{40Cv^#^@dy~UCRHtNZFoN;dc z7Px`}*z6jKxHg7dTv?C*RIH$Q)MPSIc&7v<{Q(D!YL@j~4#Ph^govAB(P$}MFi;;v z*AI!o&zlNZsDB0c9#X;$4v(3M))OoVyTR<9p1_3*(qQF@4A{{-21WZ1qi)Gtbb8`X zVs&Kr`^nmHbJQ4m-TpA_lvLm~D)Zp+h9mHB(`r7=Q&KeGr5!}q1o2Z-j^SpHE!;d& zn5Q<50QWCJAbIFCo9Y^jdmV$pcYFm|IBqaL7y7fWO*9ZE`OkuOpE9tE8X^AnQE-o) zONOw~GO%KmE`O@4#bqaG(1krS=rp5lv(5P_q;K}IjaIJ4rfC}^j|j3 zvI`tHEoRA=ZD35r4W{-~j<0&sf>A}8@Xsf z1_KLHRZrX|WzFEVmNM&yMVLJ8j zOabL6YpxQg1T&`WMwej%cM&DQGZc42(n`WFv`mDyzKPU2LD-Re9)YUo&%>3(jreu< zeAfN)56LySh>JGa(mF{K`r>T>o!VGPn$MVW#f;soWy?Kmae9poff3}~jy`;TzM2Ik z1!3q6AtScoC}azB*H06Dp<}xqx7mCdYBYS%bLj=qUVq5>ErqK(Y%#ek zhlEWVE8g^uP-~M&_*5Xnd(1S!YnB_t94B0RavhFu-VQ!RFW4@xLHJ!S5KC(fFe)q- zi@S!3t8?zdRS#tz-8ulTpPR_DdW}Wj?Ic8reezVNL*PJ7^!Nh%u^{pMj*wlk<}G%+ zV4CM4u#BmIrZrv&tSFjAHX-H7TDN&?cVle%b^%|aKX5gOjh4}H6Juh1C!sVLx zV7}N6&!pbM%5)XcHgP&j&$vrAs!e4HJLd~so`T2Jrvd$)jp0;55XeaSf)Psd2lI9K z_f5_)aY+T9^Gb&!Ee)hM&I^{6)I(2u9cKSf_q+m9F!Wx>Sxb{$Yu%p z*?c|oG*E|z7m*~AThc3kq-ch19FLmnimMI}V3$2s!=G8Ram4QH=yu!;_`3jVS?eIG z7P4HS^}4juc?85*sZirkefsy=C9?O`J9P9N$}4AT@OgXZK;o+$oZV9-_^I~b#r5_sZl#>>E zR!tpwLAfzlj$aDhZ?j;+JY$|X+=Q2(%oClRGXbkKx4_u%%i-zFKy+!}i;+t#sc)qg z_k&NUuXYrs9!!IRDo>F5n9nkruR+aOH%MG5bgAFB!xL@qVD=n8{QY+^G6@sBAEtEV+%$Gx^Ae;73q4f3vslBQo9vF3HMg{v!FP_Y(Z#_I zUT5jT-uxn>cXS)}j_?#c8@Qbe5I!7te~bB^hih@_f#2N*X%jI1eUO!OnnB+TA=^2v zMU+1^7{F{Ovv*m|-yNTgw+(~=(a4?L_uL1lJL^Og?M%dlbOb#Z(?rHr{eY+$%gErJ zvqiJzW7&#KTc&a;DPQ`+2>Sf|BX(n9Eqcu!fk(4KNM?Nl3pq!@$fh05|C&=TAAwQ$ zc2E>>R2>^Ei^+9~G;*eK@ZIUx=HZK1y?EhTDNNI_z{{&w!$v6y+M#U4ABjzQ%grDj z@z5SpV@ANzOCIz|-W}HCZHA%2#rWI02Mio1z?O^-%>0v!MFOv=u&0$Igp?Asg9kuC zb2RS|JX11-JF#w4H!k(Mfk)R8Sa-G*FLp*V^Sm$6Kd%FaeBX7;=ZGZF6qwt~0(&{; z$|%k)<5`~BRkpWaHE^FBur}ix;i0wUimN2QcAyh^(;h6GZ6i8mDsYdxV?jAI9M74X z(TAev;JWNFJhys@*Eb)6=D0`VX2D?%>pi){lUcl0F9=#jSFqQA%SgYr5r$g`-sE%* z`pfbWt{r!jbXp%5RrwC3N&OD+cEh!?xk@^m_3UGTvc_a(%x+w6?}M$&U$J9n899=p zhOyZybmRLWL{w#lb2>*;74w-;RTYoV&Ic2R9z`yCl_U!tnkKQuz(D21!}&=g6kXr;$rz4RNn8z*_-Au-M0I9*;f3PUu=16^+4V`Nr69`w+Cb2Pr~EtKfn|F5j4QQ0zTjcV)9&%p2_+Q zJ4{Z%%`F?i?wBlHKi+|!IzE;z**$<7@9Dz(k;?RHK|II`-Qa0kazx_=zsdr0Ir@zV zzO}vC?5?lh-6PG1F;`L-66W1Phjm_f`*aMpTc%>;*8hOr8v)WipW&^O5*VGHMihR< z2^4%IjD0#8ryWp3!yAiG{+vEEEyV87ifD9#ldqDalNP&^`MgnVMCmL{XWkgv_4v{jK%<^Q>n* zYdzoZUF)t@Yu$U#y`S?rpR+%E@AvB+P$ZdSje=HWF8J+sp%C+O_^tklX;2igiN?AR zF=!Zl$+-a+AC%BrL7&5F%CLC48oKMHSoPn7=iHx$tMFG{KWiGk9w| z1LlxU53H6Q#M=9hV*Bn-W==e;f-Aw7K*4w-C_ehl-PTwE+d|sQdIv>7>9qhV8PY-F z`AUMm?iRNo?-YDpa|QMb-pD>_cOhqCyyUOUdP-F|LBYOiWwX8;^D50rq^^zx`_6&- z#veAKn=*oTi7k(fd$>bBF08-NQdpfLz)c+bZZadC( zrcbBr%0J{^J&GSGfYsE^p0dDqu#^RkuIV&Nxx~@+#`@U z;tKsxZ2&Et%CB2J431>3W=&N0Ky;}I+sLVL=Y?Qq>Tg9D|GN$X!UmT4D@8%t26kyv9hk~U$_DFYJAk>YUYB+Ci-Wn$o^{{$yy9K z#7)W_$L`H4po`_Xu(KygLis^_<3NtP?>7~Q^6Q{ZbdmX;^;Y!LHj7i;X)SO78@ZH_z2+b9`;Jx7sqp?wo?OI?4$M#(ndVJqAUtYhb zeG)CQv|G<6T^d7daVyi~^N%DNPbtJtAG|b2^Zh3-Wsl50O^KHbn7=|!yr0_|7}GeL z)j9T&1}W##wdsc`Xyt71b9Z15Oo(DUgG^zG-+XSUw=$_u`UOkuro$BLYYBe2wLCV01rY%y6tlPw8pzNm2`Ks)r3?F?eV8$>}j=;-*Qe&O9_4pZrf92to$I9Gf0_oNd zRcK6jM~6>#(bI7wX;}6+{*!DG*FsbH(TbO7sKG;e^6?~`JEhGZIedho^8}wPlb_6# zf6@+2>(R*F`g%s-rF!Spl^U>_|Dr1C6*C%*9k zGvTRMiM0r zX~VMV;*V-NI_Et_Pg@8pPd$XB(HFTGCYuy5RMGd|0>+^4JY|$S^ZnhHlELnAtk`G; zn>@%-L@8-7{Z|jzZ^@vKdxEG)=#f5d` zX9{(+4>CO4cLx@`Kj#w6^w^`B7pZ4cD|21t92J>e0fqM_tfQtgjr=*A>YkS~)>pLH z1tI6bK+q*EOPmj5n0b84yafzQW#G!KhmibH^`H7fzn<|XuuxkpZ+W>l{52*QRPrUw6? zu!|YV@7`Lwa2I^5atZ?puz$x7!{XI>((YSCnC=TgK7FdwZE#uQo8p*2Ix= ziZ$7s4S)_ImpgI3Je)hDOU=da;C|g&NnB4R+;Q4XE;pvIk!n^<(^v=g6xUDK^XHIk zb`d!$P7ux~%XmLu&WoofLP=N;toWkMz8i4@F4Zpst8Z1@*5hid2MYe7FJ8c5&HaqB zq7wVeN1a_&ejIkRYB5g++~AzP8}d7+9iXWjd_Z}hl4w@)8m7C)Na%+sWX?qWgi)M6 zO&N56yxz?wni2}T#??{a+qq=fHk3EWH=^j^2xzuKPF&;w%D*PC6N{%ZtMp#c48cdz zbKqc@u+V~E&+4*GvWlcShvyUnmHE}dZdCSjBAZt+l>WsXp}%Dvl8+WWL%qi6DT zv3onH91j53tT<*|!3HSRolUFH>+s_`>S*^}JvMTLFFjtkpE>m=n=_G|h1NDTe)a4& zT3Py!Yd(963VA^@J}F;x=lgX2%iVhDIAl$&tD}i6m17rQ646(S{fzFSLF|a2!`!;Y zhmwG%WQY|sLNrU0dLwP2brQqB*<;OT*$trk+UCp}DRY>%Q> zm<8J_1dmiwOB@T(;t)TC^`Pd{5ho2 zw*YLM`|}n%w5V3^KE<3dVgA})rOoTgI2x(WI#(pYa??1$BRh+^?=^zI*?5AEUsqs` zs#lQOq$)VQekAKWb{<@Rgxpu{P9xeZ>@`Xb4yVT*g`})x$h&C_gmGDV{EuBDD1E*;pR7Jia%@K; zThck0cU|*`();#MVP67#jWK1v#|6*l2 z?U+m&^PqxOsI@}-spGKp<|EKei-uFx6;O3oQ?hr96F=j^JMPcFGP>+mMcyexVcbwX z{;S*zIxcuowdLCJBM$9?nUCYC=iE$~A+WLLEstStKRE-NOocj)MmJM7+?{zgwg-Mi zKB15e`#FSjgku`~OLQ^CnEiG!8 z|B4ekUL&h(uesM#JE!>nCi^0Xjn;3sYVoOs>%AkyTKX$F5qbO4ti=R&lVrmB-@z&EXFi& z6}b`;naHv;AMA(0v&S>>a}F>fhpqf&)qAwoQ5rmFB+%f#1HO$#7TAxq!As~ zBz^oDw`$D`hOJKIv@{AqM&RU`NUQUe@_FR8WGXB7B@Rl%CAj4fV0i2q{ri%ShP zWM8jq5Y3wNkS-4V$@~c$$r|Z3!&sr0V|%D2o0eh<)^DQd%N1#Qm{vk>7>hEG)IDVm z$z4=5b2^00{|gFre?(mkg~M>C8$x{!ocSEBAQvb$GV^70ftkNT=*VY5C=^w0puW8n&|m^ap3a>|+9l z2#k^SFfst(9x!RxTOs{ z-b|sF-nVoXU2uJ|-{}(zuSvheSFS-x!&xqv_>pA%=0-%5*<_$#u@r;4Ob< z(uBiC(77p{ynklF>%;W|mtTiw>{DUKHi>xey?Z6n_j_nfzi!54RzG;waEJR?_exSd zTZW4>v*t`@C&KxhBGGltFHFp;^EAY*n)ukuiK2|ebOFiIyYa*95&XhGisLijJ8$<3X+Wg#g;qU@OII9g_)VOj8vuu|K^9O67 zQ}d-H!bp{OP>3OZ1k&i1RG7+6V_nb4u}i!J(gR-&V0E!kWBg6J|$1J=4&Qn}57J)a}X zI&T>Uzx$MUvuSF)TAd1M{@xFczE1^RcqH@+`nkqs1p=E+k^f{ciI-0g1B;P+VUxN( zUzc)|`fJw-UZc&Fw{<48OE_lCXM*n~2~axGmX#SMB>OP-w-IDpCdTgV6A6SQPf+E-=n_2boZ*7No6Ran0F z3-?d90oMQd#jySDp+x%=oj?1JGNT%pLFJF=%07KMFDZt}Ulu{;OAS%YUlHH>{yh9i zF90rHigyfeD2s4OypmI*Wzo)PhR*H0xnOZ4}!Ma@x2`zP;`y! z=YIf3s-2_C7cc00kuGm2zgpm6_K4c^F?*N59P>?wtX zREsivrP-HHw7CI|x+M3qle~vS(r1tLoXxl^ut(=4Cz_(n+q=xz{B^e^3Od;&w0`_b30&tA!oR`P;d6=*ek_nZtRnc<-4)aI6Cs>aVlx$sZb8fOB=Fg*%0C>a z#m?S%jGi_0!t>$xNanX5A9U>*qjac~W>mJ(`nBOg95Gd7@cRx-v8{r1t*M;CfL02Q zCu-JTB#CYL#{>pTvH40xWRSX#rp`3rlLB0+-A;?dHX_z)+;h=ZlYSsw^O=e?^da{1 zV5VEpSD!nFta*D9eEf5m)JL}2<_S5Hki!E=_T?u!k=emzuba;e`e;OBvx3O@vMVVp zyiTFdQ_F70bu&rve`)U_FRrG*7A`BaP~oToro1*6tS@Qsp5g+|SB_&Ih|Ty{w!p6M z5!{PatM58B{h}`0D02f?Ktv?ronMod;->F0vKKqy?-&?Tk zU^WEI*g^e6?D=C3fs!x%#&IfHySa#DYxYp~U>H4Sn?!VT0NYhRioL6(3z_=qoWR(j zZaW>mGsT$y{5}j^lht|4$?lSuWzT4SzZl|zC$ZKNe?dET8ph>!g5Rv0Oy$jS%=Apb z12ZFun>cqhtT8H~Ncku5>WeWKXraLm_qBv_>kP12tS>rfCisT@>XHmCKfAuH*5p_e1ACe=O%aT$|LewUr(2PD?$F*9nP}U%y!sCbv9?!2~abOhADT_ zq2*3HwX~iAbH_AznyLxKN?sIKZ_oA}d&Rw&l4WcCIUS0<7qNF9R56FwHZiY0sIr&F z8qk%JRPK495i4;b9Z0yETfYKK{sVdbsf< zyc{CW+AhhG1SIAQCs`e2#u~8qrv0ONbNcn4Vlu8$Do;x4KhJq{WaXr!`u7+9`+q!i zq^zXY`MYiM*uKGh{kpB|%xx^JttL;gwz8Qx*=ov!S<@_}R{Z~e^n4CtMEjpmgES9{ zGRMFmW&!`_j|CiyP9y2D!}xP1v-vY4M}gCaVrc(9l&3ASd`sUQ+tDpAxeJ9-EOY!h zs7>i1dCyDCknjW%yZAWyRX%21eiwts2}>wx5PJR{ZJ~d=2Mqe^3zO8f_~Of+aJagW z%C;85Fi%%LYtl-x8ncL|irbijhfi}a?+Lv}!{#!l;>Xk4XDj&ul|@W+hbbFfIGmZk zU@iFaib9!lAuGCZi;i_=Ltn>uww~3caf7;G^WIiY{k`%50dUqAStnapNc~vo(a36>7ZbgAV`d=TT<5@nFF>Vj+$H zy_e)xkL5SdKTb^oRpHcDbADaXEOzsUGAJCC4BmxJ^z4i61J{xQPDH zwfT?8Wk9LKTsf7|mf21eV9F<-+DX4FgPHR-s$BTSpR`}N2NmWT@vpu$z{jn*q_#-{ z7iQ>_IeVG@q)uiAJF3b5XWp+mTDUY&MoQ{G&;PG^kN*(F%xk=_2^~I z5i;=2g$1ca%+{5~uw(fk{=JML^$ild3wqbUq}I#eGS`%Pb6cU;IFh8SMnJ601)5{# z2v53X*sBgHk^uWB6ccq85~d1%A1*7%WBF>K?>?S<9{9kcgux4I<*72h&*ETbS-xRpEAKrAg z+?PulJ)ZrSRzu?l=8*s5p)7{Y75(Y0qrviN@K|M^sI6)^YjYwVUf)$?n?tkf9?`oU$y^QZ4tEqaLA%Nensx*E%p5|0l;3da zLY~FL(47KrF9Fs)ALgr?NH#yeNOPl3ko(IVn!bAgZ68!l8xj>6Nkl0)4oHRaY9XFD z_Y3l(e!)p;2U>Dr4p;Sbsi0ZdNxduF;itk`Zfw{L`10UU7Q1tTjbgQtV23pR`;cZyY7FU|6l9S|LgttKkLwxNtXZZ{kMB?Jp_8y z!mMR=ATF(gIoImoM_oOX_N#~2@&Z%&K@D`xs{wviosdJVhF`5U(5zJtKB77>xn2hg zg+9y)%j+OyNgZs>u7Q-iI&hb-fr^-VkY8F48P{t-Hm3%nFIPd5axEBds)dKX^-yxW zR^TaAg9Bd!W5Vjdtg{-X->!psAF82ZL=8+duYvD3Y9ZCS9_BYR!5#Hlcy4wd4u#dj z<kpP(8fWs)Mi< z0_S5@HO%U%f%vg?kbbEi9F%InL{50^u6ih%Q3w5&*9x_xdT^Xu4~8=zKzVpAe7$)e zewH+VPD4E?-@6ZdNCP}@z7O^}RZz9677{B2&KX++YwK&EO<+@t9@RqfzIq7Lt^vuv zTIiZx3%Wx8NP~PWL@%xZ_f2&$S$OZT3$-9CXys;asE4wTwV)yV4sE?^P+UwzBC!27~F zz(w`YlpruEv+9IBK@Irl)~P`nSrPS=C> znOfMsp%$E9)`7EGJ!Ji@1ogoCpks6&WZmjumuEdB^{+8WJpcc*?ss%|#J^1dc z0q#u=O!c@AHQ#FC(4881I=UV*h2Ls)q8_|NwJ`m64a5oaYeshsK*fEKPOky;;#xTF zR0DNk_o3UY4t9i8LG^%om}*xIe}v-{{1G_5Tk60iqz*m^{bk+;HPG{;4(`j@B)l@-LNi}>OSqrPb z*Fl3}6&za81ey2hKondH`N9}?+X;QOGBptFQv}>CtT2Wh z`IWFWOE~X;YhX)q9c(wPg}qnrLpEOrGQ#|MEA-~}OA)S>OEth4*24qUI@mk29+b}3 zfwV>qymF`owz&=*FW10`4ONi1p$@Lw-G>{_wQyB9*UJ;{gV~*0xct5vid$+yI#3w9 zcU7P&j8)N`TCft1^=4u%{A;g;*}}Z;Oss`6;d--d7Ot;P!gcCc3y*}k_x)}yG@Yn} zTg&R9g1Zl~@2X*Vu6zNI3Z?2-iJzD&J=Xn0?m;zdRNrOcf z!8>*SBY3~eniHo8oUE(E`P_fM;NypnU}~Cb>s|5*R9-!1_BcJJ*OJjZvw0o7H+V|# z6NS*@kcf{SzKePPx{JP-JQiL0;7LwTeZc?O20lmdc>Socjjs}ia&I2ja)tWq`D=v- zVBVNGRyMGN;b*Mk-ACndHm>nPO!N&x|11Ni+h&uc0hUzH89Wjk(L|}=Sq_^=!b0wXCp1mJ48Q)K)HPOYO9{8^J*M8h82+_ouhTj7Qo2!qd>_( zmR;6s$d4VNE#!F?9_=z`uglG5FMFHwo|65G7nmFlyjQ{1ABw=+`8>>7dA8ijz6hE(> zgF7#d!K3$G#q&OG#+b`9#P7PbP}4OTm(P2NmlA(rUCSaoRJaTe9$tgN`W4t{uZaUb zCgRJ8gShziO*VC7l6dVbZEW2)2wfj8$H!WqFe_R{96q3o?b14lOKxe3`z=us?>*Rv zuKCyTPPwUg_@rXodgeBE6n()>!h039#^JR$Em&4JU;J3(1`cuBgvXPIVrRYx+gW3A zlm2eBNf6`TilunX&=i=g-Zg?Xg6+J>1p@Q2@HnB%dY~}olb(Sf>J^inu+lVwA zpTgoum1$VDAqxkzIpXPgpIB*gJKW4|#%Eh=Fvv0!$4abm#1$31bUGY8?C-Hoskbm9 zDF*v({=!Zyl@eEXo@2L9+mBmTN@1M!3)bgX2|DM@z_gxtJbbYRJI6@jxeLqj<=ane zzQ;|ru4gX}={STv4gIj~ldL!jU9jc&d)95iS`5E64xgvD;;`;Q9NKvb9WPA7u`$bV z(TEzXTlbTl?A5@Y#5MT**B5rjb15-pvDjXyi1trDvkGhcaD3)d3=bWMjdPmtdz}=H z8#5W#XFS5bb@OoilePHg+bg_fAA=){Vlbx^(E5@i+D%Twf`xfl>U*AL9UkNO2gg|F zc^_G+p-T9%?K|5q)fxB5Z$Zyy4*maG;gtPT@v37u?y$d#uhKN|{TF4i8T*ZuQf^{b z-U`P$GikA3$wo|--Gf(Zu3#>sjW34OV93zL7%}QP!q?9zo%n)PKbFeoIm+PhHaq;! zy1&#ZWXJzB|0h{b5aQ1NY5#k?(+j)OTydax5LRyAjyIdaF}*MbJKoJgZCH-W&O~78 zn+W{my%V4O-Hsk6-YEAy2ESA#qW92b^dIetKaOt24$oNBo|%mCzL6-&3&38RFkF@z zgLbANXn%hlwqq=2txUtq-dk|$3=hn4Peq?$G5GPSKNg0@;Jt5~@kLNPj*HxZNdvZ` z&fT?`V6h8dZi>Wjk|KT+Vu~>%j!w^Wn~cdal(5HlJS9RFb-X?8MpNF z!5s^8P$PFUhK>!#Y1VG|Wx{rB(TPCi>Nwo+FcL=|-;eX`!|__^Dy-ZXh)4K9tl7H_ zx3z7?pBp!$;no<`iHSfRVccGQ3Bgs%JTWCX79CP{<6*Z5T)sF8`Zt)HQ2Vw#4J zXYab`~%SE&aKTpQ5-X?dKBLY>7Z>@AZV&Bm{%>sV0vsb_?vbxFP0aG*3}N-Vp`Q{ zV&Fr%V*i3E^&@C}TL`9ix+z!b5e4`E2CeS$a6eJiL?vJ^tS;v`R$wK)5^cezVi3Z!|u zN76R>4DHbCqp;a8=||E=?z*`Q`@S^_W{oT1;^#=SZ+^7E^eY;0oXaDBxs^5%CN}sl7D)a_&cNLCP+LtHL^Vmkzr*MqB)Y}in=3B8v zKh)UWWBkc`mktc`5$XvmOF2)0rFqY17N`0(30|Kb!=C^8l@?U?N)FT=mz;QS#$*e= z1^eEq(d6IL1uwWtN#FG8w0G!k&OJfkti`B9oN@6)+LfBEjd!8M=x-(7&AwIjFEAmnW~et$o(qyDd7boI*VJ;O8%{Ao;fB z+qH0*u=Owuca`U4`_9__O%^mqFGdSq%-fj{Js;p}i8CGEIv+B9ayeFHEU~Puhfl@F zM9H=&+MPIn)_*RAvMUQ{{^pDHJ?;XN1^w6uPa7D6<<|u-25oL{q&|H8sL4*bJ&tZJ zybODlvdQy?lt_1f1GDYf5oX5c{;YRJoWM=@q#1UTY3+Jf5Gg$-ag8FGRjM+w%H>=$ z|A|}<8u1&>G)XRwoD2bv$8z%@7C_Ox5$t#CeD2Jy5A;B7KAFiMg=rUL*jHP!x#rwe zDq?XOO}z9jn3|GTg%`UeO{q??^CVBScU02a5E1Mv{fhA?xfJ zgIUJ{H7con&;2J3+Wzq0`u}PDnLOb?b%6h>{?)#43Ej`zKz=eSS-&Ob{K21%aHS!W z4YAt`H=^`tfQJE-y;qjnHb13baehq8u{YEqFGrIN3GN(z3JEX!%5wic3!*LI7`Pa>^?yLmylsimuk_oFV==F354y7NxEBT^PbyRY7 zDLd-dxw3y1OZZ*kf=~Fz&+OqfYOHCuALXcApr(_vN$N>{+3s#Tw%tjW)pA$o@Xu=) zGaw)m0N6_1DEZjS?%UI{AI-)fgy30-RIjS@(=q) zyLzXxhZ7H!O}bVBqb3ZegFT*-0oEe8chiO3zUc6VzFD*;W0SxTbOIZV6mYqAAFTP0 zlAk%cWVKEfQeua2#Ti8~`Xx{4MrJ&h!I945-<0)cAQ1mToc~kFNT(19Y|L53t^vTF*OP~t%s`Kym3_|jq~11Z^r(nGf`bIG5IYlD;2aC z!(3tdCRy^XoWR@+mWQPicR`o;1Lj_>7FD^-p^*WPVS<+r=uXT4HR=7d1*BN_+e^7U z5jy1lW#Pwl+(S3Ue^v~@2x(A7-B!b=w%wZ9Pbr=6;9qrM2YexPhw7klj7JgjG&<;?;)CgI}Tl z;QCun`f$*MT@v_;yR+dS*>{$~e%Jf95eG&JzI*$amlMoM)X>Jo@`kLO%rr^N@?7Rq zz%%MzGKG#WGGVMHB$89Z8fHU5vZ(#?0Qfm+DfupwFzMR_A7oD%{&??6vQgX)@;#rp zCx7-p#KEEbg1}G+e%&Z=<+RzKCrg-~A6?A3kGinDzdrlu=`8O25*yJzxg?0{kY<-E zI7l9KrCg0t^8zR5FJyD|JZvuCLKg!c3H_J0V9;T}ck2m$Z$ZsmXq`1h1gf#-CevZo z6TK^&1g1dYKV3R`I-V{`70@-`NXjr4$S1Aaq1sB9KHWV@D*i5DpLYmGYFb#fpVlc*NNOU2eJJtc&WX9C8s4yUfRpQit$?&RpE9 z9)bttWW{rW-lFewb2L=$%%*8t= zY{C%_zOb+IU!#?*KRWT%=#aM#pV$0gg`GSeJGUCOy`HkJ0fW&QvUcw?xp*!H=cxI8ZouTHQQuli>yw*LJSmkumOi_0^`uZPHqQx=xups{Y^(?zyo zMfp-(bk#xZC@RB2xrO-f(j&Y#+ElEauOp_gZ|FJW4muQBh|f>Y#=qT<(Ovp3-jQ6# zYs)6%TjdaZI`KY^3fqW>wJ+cd|61HL>>eK8+)q6BLOgEHF2XS?Kd?oy0wbk*F?Gx} zbk``vjIA2ta?7$bIctNd`eevuc zJIrxC?s_r}S7}+Ge{TZn{A|bM2Pg4^(nTDzs{mb;)KGbL2r6aW#tE#j7aev1tFx`} z(eII%xT6mrh0Vv6cZK;8aT~3FePvVFYJ9#o4E<%JarE#5cz(SK_G)C~tD8f_zYY(> z&Q*w`Z&zVVOC=uB*Tu^x4zLfVZNU$+`*4Xv0dAbxj5jQI z;xmWYXm(Rm>}BDEM@RLcNBkN5Cd}n$TZW7EQmVx;xdneZr{J<_+t9){50AY*h@X#b z5bIrDfF+#;=pArW+++O+*EMIMrHU?QJ@m(C23}ZqWfDG->n~ntpNn-7T4KYqvf}gU zBgEYoRq^lBS*T&DEG~cY1nV;p@5xu|y@3z*okPiw zt0?b2RD581F`it}gAUq`XmLhMEVJHB92}H`TfS+Cmzo=i{}cawxFEmle_DU0SX%$L z^~Ws=Cm?=SJ6Ez<(EeQ>&c=5SWLC{hC8egn5Z7c+$ByI?scXVjJqJ+o*Wz8rS+b$B zD5}QxvPY65Ty~2pd+V1^V#E>o{!PI*_rukVY+O@$hn6D)YiB7(#BI0cY1Qw&9Zb5XEzh-@5T& z;64MIW@@lSjSe)XcP-pm9>kpypMe(1P^i>s<4$cXp@AlK&}#Lb8#?18wC8?c)(lUC zKS#!qThS2eG;*d5w_k8;77Je6)5-~i=k5tnl36BpY_pse$s8G9<~nD)P5GBtK6P*~ zcW91{Xr|vb_-mRe(uoxqzGntPWy5l~`(`sFPD>G`cK(C9g2fW?wMvS%O9Ro%PfYCo zn{YC22tW7W5@yfs!4e%6ImV)=g7fz{4p&F1lCk4^$p2+7^!LpK+vq)vZ<7k0Hi%`&k<8K%ma3Kwl3Xd~=uiDsI(SHy>VGYiD4a}!?|d%Ymlt{li|VOPrym@9 zF2mF4F6dRxh7l7rp|HM1a=LhjUQT14m-KNb_h-`)SvUIP zo((huD=B{^rrJ_AIiDEx-q~QJ*Qvm zW0^{?f$W`-!;2{9EkZ7wqfW8A*Qj|iPwsRJQf>-#(80Q zap4xM@!N)?Z;|Mhw-fFEM56AI?HHQpi8_Wp$cBfay^zz+3<*KC#sth+6^CjKJ~&Ee z3))WFfX|bY@V=)9zHkh|r2GT8Wkdvu->t@T$5PN{eGDFc6Nf+UdST<>eHecv98)xc zu}#QRrwaFA2bWMZyS58oc?6(|t8lCnk$7=`JpPjG#ygkdux>>VuI%u~l274y*T4sj zg`DWZxKNzX;fAwQy|ACI5AMrNNAeEF0h5Yxe zFg)ZOfEy-9<7(qb?7kC(s%HLpH`ojPTBGn;tsh#BiN#T;V$snh06RH<{604bi*2J( zJ9a6m+D75&`LS5OIZdd=M4`^96pS_$a;}aUXbZbg<){xnZI8fJK|3){BN_wUcVKBj zG@jm_is5~M_;qC@E>8AEjisyc4C5(Zu0ge#sW;N_KT zv8yixCu{rS7O5~43FAjQ)}z||R17#7ftOx{dyAVv7%`FGk*&ndAt+f#rfgAL&A3scSU_6 zU)>_)NdGb0ainfM>h*3%-BLg7uk4Ef6}~tiBNmUo2*Fe4kyscde5QFg22^js@51;7 z>`um*Y=6vI?uzF^Bk|4QC@h;7flpQjWDxEAAh`M zwFRB`Mxnu=9jF=-fn6FqG2@3no**F)YmPt@KVjlDHdC}kLd9{r;5)XzX%YUzU7 zE5mTDT?(%4h(yJ?iP)@ zfl3p$qJvOxSmhIic7y%#i7Gmw}BJHsa%1YjDM+2y9D%%l|h29Iu?k zmfmb&7aXs_5h?S;>n22C;jtEc`{Wqw?~~0=AC-WXo|zcBf0z)zPZJNmsU+Ut_z35n z@54JYHe8TReX5%_#tDyCfscKR0^JK;CJoNI^bsU>J&SC6u8_4wodOuUJ^@k^fu2E862 zPG5c;k8cmeC(kReq2UOt_Gu`}-X1NU>r#)2YlWJoxdSQ;osUB+PO!JHoyYzk>)4sx zK(W`TAME_Cn=vHr7VdAVWUoB^j9u$=@#(e#{H$DxZ{ByX*N5F^dyg;1we_!A4O5|} zkm!OpjbhQQBm!S{Sz+(SaE!}vM$wKpti8uJT$R+u9$m5nBe{B3Y}=Ru03BMc8s^EzTO9he=MSS%*_YvHIp3%x@isnZqX_T%3%foE&hO{dUaWHWSZE zYh&kbVW0Fo7uQf28V3zRpTpm9`fOtH}x-R_g+`AJ<}hvs|Lv8b@kEW-yRteLRLmrMrDN0 zbzT=~FKMc1XeTWRl_Dcbl(H&HB&DK^;&Yw1ij<1tN7YXJM;Ue7Xz?59DW>sbEDFYM+~2d4hf znBDQw_HMgx&c*~qv5ez-EGoxdGz)V!IAf4^ifJ5sG})dJR}D63$T?QC{#+AX{Bm;IKr=gi96_1XoN@Lt9{YD$v#$q!fPH&>+nHHNaQ8Xj!4(QdYSl_rZl zRLL~VMzbMaJ6U+CDQkW#%MPC$%EmfZvMX=5v&-Fk=}|~xQ+s`*?RO)Y@T`y?>z=?o zUS-jV_m4A}y`KG0zeNq-tFfhpBbY_2qxZ{>^YqoXW)^+Ql|uhI z_l$u{*(yZ~_F}LYpJKLKb{7rb zIGaTUTw%W#s{kChbnd?s z)K2=)+dJ9%fBUa@(IJul)%oM;@*nSC92vHORRoB4e(z;0OFZjiXN9wA|5mY(Z=&C# zas{jKn9JshbNTy!Vh%7ata~z0c>fz@;nL zJLi?+^WMXD)U9S2;*7UdMSKTGC$c#4eo&qj&-PABW<{3b{q4As4R=prU0!S1op14M z@sQQb>P|S@*E5m*o*l*(&)Uk`|88acYzoWqU&=;C$1swe%f?@gV@@L?m?SlxxxSBO z4a>#4z+)-9yKWT=_Q_zeVGG%B-<8Z<{F_O$#M(kHfvvf-lRaM?!7@F=n90F4%zAnX z8!pbTWn^OhPk+t(m%_AXgtDTD6>NfOI9re$!n!JAS)cGVZ0qJV?A)n^?4I{F_9t~a zTf1lp^9|U-+Lp(#?9Aotlk0TWcrSo?)huM+HC8azV+(U1xQ<=FHjjOKw}E}%ynwCv zB5F3i>)El^ICkgUHnt~j9doXWVZZ#-*rCpOY>{CcYu+$k)a-)TT&Io9w<(ToJGPvC z5Np-w#+59uCV=&vx`EZ@uVkwRtYhx2+u0hk?QCr14yLV~z%H&|$r5j_635{|?1K6_ z_E@Zqov%(}uz5KP73-t{PC?8jY#YmQh-Xty&tngltYNj=H?rtWo0!&#$p6#N{(nCE z|I>d}c-YPUZ_XcAaS=@P!Tm?`uQ3t&jO16cdtd#SXa!>Xdsnj077N&#nFHCOEzZot z!;2Y-`s|qoQ#SeXV%9g-mz}#^#^Q7PGlPsmW}&9(9a9y_rl{nx@(*5Y`tGCb{Kp+E zQF4bplP+V?%YIX%J{ruVE{+MOX0e624_UwE$61GwrnmRmy=?qc4c2#(J^OORpM9%J zXMGKhF)OVW%B&+8HMqb$d{o$(J%rVs(qn(Lb6C`KJ7#6Dn>`N;XDeh4yn`kTVyr8M z)n#sG3lt66;(AloqjwCuFntE=zB-U;-m7BsMZZzo;X*d&WgvSqQq%jVQ4U-8W;<)L zIL&5Q7BZ90VJuh3W@|K(n90NfR%K)4J$dj*c948##^Rl>6my0>a0+H!TgR~e|3rV2 z=>N$mw(w@Bv{_}KCIgov?6B-(Hv42Nv)|8~TW) z{w`<7MIXxO&^VToJd=5uh;@dJsEvPVW=S%QIJC8$NAe!Aqr#zENRw#+R^w@m}89$7-2t#46@;Nvz$zgSEE>vuSG|F?yqj$%*~WchW`uFU)6YE+<)@=;<4O z-kPlmqKqc%us*w7L`^xGY0MbS{)~D=f17Ku_tw?yu3S2knfZ~u0P$X_r0nbqLw4(I zBTIJEVLW3E^JvLoZA;VH>hyW+_xl{SP!huKEPBN39vLv#m)qGx^Jq3~j}v=0(vN+# zGhkc#k7SCbw#?o>gbmeG692awnd6fv_O{NDoeuP56-T|xWH^NekJGn3ibH?aj&(fh8RH#0ldM!$?{Vt?k@u%Y+w zF!$ua>_yxTmahMdz06<1)IwJ?oY#{%-*RGeAKhY#bq4J1c3W?UekR^8Wbd=@&VDTC z+bDJ}?;P!{G-TVh&1W@fdzr(jQOxSXGFEtF5ewdI%f8#hGe;SD@2h9i*vQhWH29Y* zi)giDcYYL zTl!Xpb^nA>s)|9ZQ)8p6~trsk;b}IX_ef9sI zKME%jB>&a<2Wx1wooFPLYy z9Sb#7(9>`t%Fiu_SL;_o>XRC-I&GL>IH-oF_br92$c@6N#oM!&7QS+!uI$r^gno7X8b~?0{!a?-a#- z%xZfVYa6$%vV?t5$Y9Ew z2~*K~PPo9uBDTQ7i;Y?{s zEPZk^jlLc-nU)_8q&qYEQ6JguG*ebWA8j8&^Hp|I4J$>Kal?p`BTm#@C7a$~YefJ3 z8bv=}^rqqfosJFMO>ZyRK>xLe(et(a=+i=7`qjpVnh%Pm-kKq_*JT%~my$#i*3O{A z%m&gAxi)lKpW*b*Wj8uBa5f!1xQ4RGeY7~IAGN&XO7-WM(7Ja?v?wl>u4#&(W}{tb z!zW|f@UoiDTWmoOj-5z%9&e_*vhPy2IYF$XduMUSqZ}jq%BB&@o^3Mf!-k9vsBt;X1u6oM9vL16kU@ z1?;WP6_yvG!}AzYx^s#NGf-$?YLiXb!+uistB)r;{W+QqbzaBjbz8Hl ziJw?T(;^nBSL1DVRL=YD?#I2bCP`w_IzQ#s>GUp zn?GGT$Ca9!#8Z$AqozBZX-9W2+N3&D=tv*LkE0d6?dYmN1Nz>;jsBjuf{woLPK{+|Q=u}3M%DDDOFj~s@W6+@zL!Sz z4W?1srV}*TA%-^e%%ocedQhd6-c$&3pgEzQbe~)j?Gt^7_K(q`pUTZ>*~Yyza#<=} zkmN`)V+4&pKa!3Km`Ile6Z*DrB0Zqt#>Qu`|K0zct2ON2e|7%2i5QOmu>Z<*`iR?l zAK?zR=efOqGtBBd3QO#etan&UOYawg*2_SQSSs%SX58c>>xxLJLtk_?(x;tYWra2G zr{U+K3P|bp!SjPpfMV=4?y{?=&^q`&36Z=};^MO10?7{Det*RAHvlS%eJ@??~ zctycP%)q&ad>JaicBb=0IA9QU9Qr$l%76PP1;O?Ix1M+Fs2$Xxr0o7iRX zQ9l6wjN6Jc+s<;+hCUejwvqgp6C_lQ-OdByDSvWWm!5A-fo_<>SN~S0Io8H-{nIaE zUEY^U>LNk$$t*hWYYpuD9tivUPJkyf5#`^cN(}#~lltok(vkkP=oI!7R0n?JL){8s zY}zhfP(6!OHRxey(iR+i&kLrvPJ#`q_0NPy?}hmfyI{IUxy0T*knj8vN_LMCSxb@` zp!fF%i3pJsR@6CRvXu%L?&w49KjrbYX%E48y@s$<;|j=1LwHB?7q~34Lieq_K#u%0 zLfC6V-Ot8x$AtN`u^xBIwhS4@A%7R-dD&7<~xV zmv+FVmQrzt`f*K@&mvG>xtSkt=MenmY0XjF6o?760{g23R(?4ydP6cLUhG^0*v4 z9IFYdN>)QOtCI{;dMp{5(hcEBG32#ls3ct70JQR4$8_vo z?ar;ZY~(|7JyTnd-x&za!AIcV7B8AOcPi@i@Wcxz&Z69w6yTM`kRo%j=2lI+WW9bb zT7CZzS#_ma^6`5bITZH;8Xg+s<5TTeo7o8GCRtF+l*jNh!&SIl_D#$cy^lH<-=cbV z7X*lz9uq<|1kZDuq(eJV%x#U}y<+TyPYzn>z5O*gf7^*JE0_#-uP-O5FN~?-)^uWZ zGYK{Z5xA)r1CdwlXk=w7OdQ?{C$#3`%L#Va@5f26pKqkNFXF3I=5Hv;4hX{=Cu8BS zc%N_F)=b7v?g>-Qe1^K-NigN|FnBS$htT|NJ)gK-%$m#aBv*n|g+5|d(C&NVai@JN z`mR%E4@5(8q}S- zNsO9?U__)9e1EYJiyAZq$LGrQqsZCwj;G=~lF4OO^(ABGSKw;LN5o3^7*^isM}!}< z#T@Jk-hZd5V6L45V^mgRqE#-AVf9cKcN+fOlajT^9)OvO2@F4@0DgUBNyEb#xZg$r z11Gn7tueojytb1ZdPjuVSQDYX^C0XwR*tXL-$PFIRO}s~Ewmi?giA6zxUAVyA@A*B zFxc=F`-qI8=E{XsFRlqST@u0K^*Eu=vJBi@mJgO&Ckj!+AHe0+8p7C(xt{Sa@4)nV zC-Cc>L2&$PDmvav;zc#ibWeUh*(5swjkik4di!)Rx_C$`V`@(wvXY=};w!8eG!d<9 z{NPaDWpuO}A;d~n!vrtAvFQMGtVw-5p< z9!h)Z=s;h?E8rab9t(f%AiItfl87A=o*!5UwJT&`wVXax47DdEN48`5eOdTvln!s7 z0O%PWmu@-x2%7EhWAYr4@v{9l^xm+UwC<45zAAJ0b&K~Td6P?ZR@Cd7FTOmN*)YPz}Bpr5aO~IZ0bJ3)$59ayFvum42eUd ztqSDBs3urj8_mP#N`=Ge$C1?saQhhrME~_)aN8aWz1OReJ5?`udGig9=Q;2GRgZIr zDGRTjDGA3rZvt#>#}h>#!Bk{KV%8B7mNA#in0pOg>K@0}7yAoqyZ_XjdqB^M-*YEy{{#PjI;{e4gRfg z{XiKgTfOH!=icY1vv**+=_ycJU4+RBJt5E2n!D|*g-=7|g!2;=;ct$gn3p|QlJZm) z>thUr3(tPRKaXX?_VJF={_o#n?(;>E)2|Fmd>w>G^UiY3R&Bmz!am$+Cgua0?T1J8 z&U~P@I-b0xhL6Gy!;~5=l3;2E#i3u}{s$8nyVQ(7Y7T{gi|*m~=4i6%-vhE{{So;7 z{3+=e(HqUS5mwQ?7R&WRP47+l4THcxn;O&@Ah zwm!kwmHo*9?Ww|s5t;a;z(H6$VHY|CT0uDM>3ZE*9oZ6B$aCCYK!W*EC zOwTjjU?b@NRikfJF5oM>a6G<{z~1TB^vQlpVYf*c?DJ5itCmd_pT}Y-v@;OVUGCLllN6A7Di3U5uHhn~k}1~jkv@R0=9f>9 zYK;^q%NRW_#fvjfQ%?VfZ-`4bXx-dK38??!D!t*fL@368m>hc!EILjBC)w07t~ zQv1yh4RuXO(70H5dN>7ckJ&6t@|XtyPF}~)PtV|`K?A6Ncn`b;GbHK>uSl7g1zcD2 z3UjaM5L$Tv&L{oD;M&j9F$+(?Um0;9$mBbZ%5jI7<+j{5FOvJoUxI`JQ|iyWvDDoO zmJafOD|)g*rEem%>iB|QPASftmQ42U?n{q5sL+#TSvaOXgUhJv2^;-5=yV#xNX=W| z|3Liz9^Qcd^=S~7l!${%|B(|RzUa39DDHDVAhK+S;rHxh*zXuEJV}V=i*T@@zoZAP zy7UCxUw^{YEd%(;qxNXMZm_VwZxD9%)drv97O0YcM)DdB;naIw-X^|lhs}Eno6;0< z*a02k%84X&{iVpST=0RK4@$z@5Lw#xV+46rsX@>7nFfl(IW{Y+3Lf7_67Bb)c(l@9RbVahnsQ_Ri$_W^Rc0n5B78eLY92GuSRoU|sR&140^t*Hi< zzn%CLp0=uwald7T2rULG!- z(|3j0S9ArhP+#F!e+5w5`U%Em=+MRniTGJhgyv9f>|U>ozw%yV-&NO0{IUv2Rv$?; zZrh>bXEO|mN|*Gx77Pz6ZbOJ{9a$W|3uY`=5ME!6CU5F?^OT3ZV9}2}$UOMwjQrYs z@q8v^jBA{PNG8LEdCS1_LlRnQYSSxUk?%`>#E;FDLw^+;j7SN_P2=@R@XFVuLF+v^ zJN_Evb@ieL8IMcw1rLfig7a68DkcRHxO!js5rcqb#fpW@w{(AjIUKlbC z@}0Iqi@Y^D{h?wm$7alMsl#P+#TD&mBxeK1o4;1S`6-dBx@B-7^gZ7jzpP23 zO8huHKUj}>V?prInhO2rD+pmqXYl;>Q=oa;g+|9DV}wyI_=;@ojs}1`>v-o~)esJ1r^wMN_rg{eV&CvUfIJy0T-y3Cw zqfWV4`)Cb#u63?y8OEjA%ozQewL!b*3pk_p4=x#t892Trux|7g>4_Vq*eiaE$ka*~ zsvpGSZfAAD+jc0wsx_Q!-M$ah5^m#q&jm2d*@i023ddfv50H!f@~}tkBN8+=3iEP& z;KeC@p>y#AqSSGi8%-^P7}f^Yx8+OUzEQ>{=fvF2m6b5;tpl#x&`3tz=_U@ZdWkyO z34AqMAA)8(!}$1Q+_GsudJKGt!(0ozj3X1Ue9tA^FKQnC`wda4>nq;*(+zD`@+G!O z)o`JgzA(2!Uik2B7g(1i3&lF8_|v2cIQV{&aI(WlI8L9S+vK}mj$bbEAKTwzja!;v zyeFQ=A1Q~vOGM4Z`5#)PPbZtkG=bUt%lIwi2@F4?jWbs_@R(J(UKfkXaL49#a3C;W z61KpWPJ5UODi23`-aB7Sj9=(L*c*BJyuFA7-&+D#u5HATv&CKA#E;zaoT0Gc;}mpg zD#dX<%>}T2A>E^*N0-&j68y^lqV7@+uq&wb8Xq(pkK0cbKJGt-H~OYR*KRpMQPRb| zThj2sS2bbFJ|#%nYle|y|6%)>7d67{SW>t2I+AhQNL|)phzvlH&zyiS_m2kSL(4!j zz#6vgQY0rc_e1kITj9jaXd3>4oQST%g_@_)P(g}8-#lQ{q``FU)(Oz-_cN%TtVpZv zM)PUflki#TE)wscK~HYWN1sd15VQV0>G!+`tiD6Z66p*$2u~oO_zgJmx%5NVL2#oX zuyl<8KgX7$P1G%DALx(ib8XO>$N{nqWgg_>)<$MVmc~$BMkO2gq58En6zUMhMGxu*nLmw!3kw#lTtQxZyyJ9 zP83K6zl+26&`|gy?qX!_e~RxSG%*LJ}okwLL!v>AOmMwLhgo<{5R z2qODcPsqH`M@TTd$Bk4zaRWbj2)w+BpLfrONxuEz^o&%jJ2eBg8V-V|K3%93Uk)?6 zvtX2xA(5FsTRL=kD|Ss7$HRj&z@$h~FxFEbZw^SLo0eO{!w>Ia^Y}n)O??m79*WuE zw2;5C?jbBpy^ZFR#XaoyUGP43cg?ug7P$4uP3RxoOE3s)BJ*At@Y~N8V9jk`Zbwzg z%x6!*ZIc==*?F69I!4Hgw!u*TK;*S*bz?}sB`{4sK+J{R3omo-V08U8ZvHbE{IV*^ zV!JFjJdzX3uBF6sYXcUm`r%fa0rbKq6{_nq7?x;iqpV&lSUpgNkK3K`P4;-GQ}4jz z?peI8Oo2=&dyU8R&yu4?GIUDUd%SsH2lqADVav`;qF!}?wC{b+r_FF6%bXbQ_z>@* zFx82=E9?ffY5k;EvmA(2L0K3o>TY*NCd1zTL(p)9B|Nov;XBmQ@zfewdMs#l&2+K; z8$Mc=P6_QLs7J^PC;k4xke=t@(xo_<$r$E&b>imVwtHtb&XkuLUn`_wJ2Rh~hlsg|G4j6;_)3)HU()rYH z`b8XmPz) zYCNd#z7FHR#!H*F)I!R>LLSlY9AbSf&`2++FHgcFEs8L^T8R$Xw_pZnyZ561~B-y?ofphL#x1HGjr98m2^U$u$*e2oIPDjNycS{Gw(cqP2q z`&V4;-Sr@( zW^Khy1E0e)>l-+9L?^e~;6gs$wF8$*Pt=*c7H$r0N8R8G-dj?PYy0(v{8=-s&9-``8&`yaC5>TS5uap-S?Hm@!D-x)_>!DVIIsP+Z& z^KJQ~JALWA6F*6LmkdsLKM8cK%<#|5<#@FCwj{Bj2ttm#W%YsSG+4UrX0)zJ0W?dmB#t%UmS7t$|d-;l!9D-6wkZTODOvyPm6Dsz%|`wSoG8xBm?xZ zc6S;0Zk~yGDalaqS65K$Z3WrOZ9yg87HT$TkTk0rN#;B8v(<0}AI`NVa*vCM!6cC( zns)?~&!5ETm-q2xO%BQZq(yJ?4ruDw$ImU#foh#biLRA_==nGdHwubL;{07ac&P{9 zS-u-xr9;rDrH4?#n_+508#w*Pi%Am*&P}JTYs=-UGMWGdF?zH zSl>gkdU9Vhi&6Aq;H~JsB72>Y?%I-YsSBDHBV9g$E`d16=r7qonVyASQN27GDV;AnaQqHq}a1wRs0l#M!1|iM*JR=&=`U|T zoeG<35291rNFJPU2(`aY@%p+*WR^C^k#i9janPYuqCV&d_9#6Ar+N+}e!sl%i2n^# zD$Rz-{R254R1L;U?0JFPXdyKsoafE#L7Nf;(s6tr#(PgCs_WDQ|83c1shB&GVPX&V zj^2{<0s7#ex=-q5Ss{HpCLUGvdkE^UROw3N3z%tE0Eah3(FW~Busx$M_cb3uxu}7q z?6TyS9v9<`d;f6j(YLs3&tc4+)rSA<_e(GIwGlM@)u@513``ei8-50BiRzBmaM1P| zPJDR~&l}H$$NMY=Mf1fN{N+0L%0w8rD-*&+P3r#lJ>*?XdQI4wQE+ZfB~14EKz9GR zieoQ~hNEN_S?C@B$zM+5x-XRw^SlZsia%YSyi>AimN6J9SM#Am9E9Y@E~LQY51tt| z8o84(d=Fd?f7T1oEOQstuW9g}m4|Tq)85oXIEa=ZThQfU8jL!p3SMoigiFwu?l>O? z<4FK_*yc>5FK2*GdIwj!a}1qy9fhA!;_t5Oi<2tfi|=%A>N!}RL=JEjiZ|_mN15sP z)#g4qUYN%lU!Q`{y8mgZ}1Rq{Zzr8<9e!*oaUQum`nbTA}L8V6a&d#`E{QgR;j}kX+=2XB+#0<-cY4%Or`M z8TK8IeYeMX(hndt*^1^P6nL?Ht9Q-OLc{x~Cc$=^rBF#TwZqasb*&ZepratF&_zWI}i1W^>-0IYC zCwa4tDfMjJ45fYCh?BaSfQbv>c9((B-^U+96mJr*N25eO_f6i~*^J7L_2lujUl?Y3 zf^-jl4a3*IC4$d>v|6+of*(D_J$LNrn8=$@XEKksMEu6}8dPF%GXq|v0}mP^M_($K z3C9kt#Qx9KF>-XZq>K20sY)ukIA}uGQBMqwkfWb&tq1o-JHU2F8blQ7(u;TEA)~OT z;56tfJni1(W&hlaC+)Kn`uDdoM$>$5k!dtt+bohv^*tK9h=$LY{Z%Hz^v^%fA(Y_O2WMOnG7?b(-UCKZ7Xta z#(Oe5tXQh=W)G`(Mu7FcXz8qo2C#Z3X84`Wfw0vxvC_E{p3F&Xg1 zWwu@p!_8q($q6EprAi}QmV){oV_|*iA!)MfPDseIr%KsT!rgzUn?}j z6K=^+Qg4C38)IQ?ygH_i%;g(ytR#6I)uhuo5DlN-C#(HzgiDKdknwdHeE*pt+$g3G zw@!?~15>V5Kaf?z?Q+xkk(EVoZKVmuM&+UR`O)Bg&J<@~>nC-6-huxLtnk(MN^9>Pb9YpA?n3l=0>(Ngz3 z60J7?i~_cy>X(6nbbU5|du2IBymtd)dVmb?oD3iDSYSwfF#MjVO2=)>!0|=5Fgb7! z-2NZUFvdn`EbtaO%b#(-uS!C9I*{Ro+Je;|W0-%d9nOL}cseyf@8^fmCU&!zjMjNb z74u=UH?PK7nh9KItQWTEf0f*@KM0>98{pjbA(F2(A0#R%e{hG&XR>F!sM(*n0Eb_S zT&Bd+Wb=ey63xmxaA&&6)Rt|57xUV&PPr4-Y%mro>JRgr*2hpDp-Ud>9rjY{e(KeK z#{j|jcpMH$Q=mfhQ~n@*0NGov0bh#;VWmMR|EiLJ7xWHeWwQV-myCoP6+2;3&K^{A z=#55^DLArdAm-kzLXAEiFmqNW&Tvh|Yn{KKg?kB4PHMwgJ2?n1vxUOh_E6rKiP~- zYa5P`?uwBI?;W1d(@11_NGd?-)>mwD`ib#v3e+#`2bSfIfoZkw_{*XJBbV(KwP|xa z=3;@WYU;xLb?echb01ly-U{-Gk09)=f{-gH;qhxzF-k)4kh%pNIJN_=i}G-9vNATF zkK*@l*`ZI)T1k8K7~ERdAAY86LC5BgpmzTpNnH9<`q^;25LBp#^Mk|8!%lN#lNnRz&8*$9IRIlDW-av_>CBB%YLraJHN_7t$2eli9 zFzL=Sa&58}eR8{2y0Lmb88TrC+^tzgnja|&v)5_S`tx64VeEW(8{-VVc6)JA^eG%( zZ_HiFZ)2M6c38E`siu6`7*PXl0=I8rFnfW!u%q!FzY&**JNh0+dSovYjWQydsy47D zZy~y+A0;iz&w%gFSYpusBR_I&53b+bi4z^WLA_%s?2(IuQ!;IUU1H50^8_(ZfrjV$ z!{~>GbkuKap>13TKQ`J(&l$>`SQlp!0HLNo7Ed-2Wtuzszdpb1=e)<*cyq>-2wca#RJGJ*ooz*Ira=VP5z8H zf^PeAiD7?#{Fit@n(@0IYOCl_lk8h*D;k6C;_#fobqH9u z0G3wi@!$hZr0B3Gs*?ry>wPOP-L)E)dx@TKm<-P%7eVg9Gx$l@RvKNKK(}v5CBX|n zlEU%rVjuLBYp&Kt*HNeO@2+8R|EnAMrd1CEbrn4|MaE%3zX!Os^&kH17WF03r%^O- z16Cdrb*Ka6u^(y4I*DVu zCJM2ZI^^=$$8bAtEX?cL0ok$Y!oQA-nNdkI35c@zypz_&*@&YrgIhF>}&)dMb@fLdNWfQhP z150Nfg9kwaFeA!HShlhgk0&n?+TLv=MNUiczNHtnnj4B*l~S+3#r8sd#$ICbx`S++ z5-T;)aTAVd-+-xKO{wbO4N~Lv2@uen2p{a;qPwX*&JsPU#U}Cmg}(vyE zuml`Y%E15MHEF;YEgHUEMF@`l!N7dcROp~ky?2b>K(L-vaJ`MCe__>8FsreQ&I9=6C+G@O2dWUI-ORqmsO z7kYciCs_%fcHI-|{oTo}1tQQfhO zfea<$d!wdLdz+N=pF?cu^#n71p`R%|G|88G2bYn#hMz_KaXghXPRAc^ru1=%nA_Yi z3!+DV0G;?olyvw*uy%&@NB*vw5C679OuH^D3z~y>?=(op35S7g5&4|=6(whzYk8u1 z0LUx9gXg1r(-7I)+&Qd(OxiXTkNoaI-L5|3hsR~q-2HkHr74$CTm2~-m8YR=mI|&d z*1#pvyLDd<@fB57XJg~r~UlJggPfc?e;ILlC8crnHhM#w3H?jU7M_`DDX{&Nr+ zTE}5~>{D1c%9uJVh=tz<$%4(!-{e5{T=*J(2ChzZ;rARAQ0`nJ8u_im;Ko?ezr>I9 zjeZ6{OZ!2QYZ-2KUrvoHMSbS277UKuj@ELo$fAoHLeAg6{7v&kR6TqHr2V%L(|yCy z*LXahVXIM^X9Jnzw_y2~W6~ooAv9CuY_3+%hDx2S;ImDE{4?+ZCYKJs(o!HTDG%mq zXbR)LxZ>#_D)hcbnOD&66s|2v#pP2zN!hI@JbXYi^m8782gfAhEkPN>-zwAYklw;! z#lAQ}`7PdU2MDzrEKGPknQz|Jn+{l}MCHdmg7Qxvap&tPU~>8+mQ=4HlC9C0Gw3d~ z^c@bC4%5VZ&#(Bw$6AsLG_#|Ot9!hZG#Tt zkHu*yX;O!e{hP=$ld1f>Z8q7FG7u*h>k56u{K<@_$Jp+42@m}m3L%}YV&2kWT(RsC z7&PpK1piRHyt#+a+T<<#-l#4N&QeAPc@OyW)LJ;>e}uS%7V-McrI_+d6&7d9Q3dpe zQ+iG~cIgEivj9Qa=rCMp&>_z2EU`Rmu(Y#pB{5&K6Sa^xNvdLH-XMGWmi-_*{q|JcyPQ zHo`u61G+3Fmu%`<#Dn}O+N9oxs@7q!K3yFbXhsOIMhP6_m3e#Z9um+u3odmz(9~JV zkZm@bN@ALzOf^Y*Z;2dEvo3&fjoCP8k_H`NmPTH@c}0@M4qG3!!b=+sto@w}-{Yr{wgIP! z`NKiftiT-K)aXlFTGd&`rb{*)$Nr*;`~ z=mTv299zBWkE^gaNkPypmZi@}D8iNH$53<0De0qg#n5;3RqQp>RS2+o$3I%tlKOj2 z{AzIn`BSkI56sDvKANc@n9oyz?ys#-*c>3~*IpuB7UU>A>J&Z8T~^gWmserSLrv_V z9u5IpE$G-U!*NmOA*?fsf!ie)NKg~UmZy*5)wkI+HgGUk`D6&SKIV{g_6$y*pv5=1 zN04!!p2M2E`EWS@1}|s}Am;nqam}nY?lxZuhF5CBYKsl9@Yr@zJ>f3sJzs)f@BiZ; zEIFtzM&4h)w@|%$H2?KjRZuaCLpiM?9&d361|4j|dA_fSPk}sLVCPfwV=dg0zT>PV}MW3C%2dm1i z@sPXE@ndZYMEuRb`9U+jZ2^;X1k>9*AISmuPzPF(ZV3(XsL!n z5*BFlEc=D`7S~R*w;@}V=6sE^R)j=6yN`!@=EvtzG^Il^6i0ZodvkH=Lq4M=NHT+HrTSl98X_$ z0Jmb+7{4F6&b8Pry4w())N`Q zbETMpUQ6Fjw2-C0xV<(7HMo#bQjv?tl*!Aoxn#ikJ;;hF1+;h z1a_1N-1wo7S=#eFBK2n^s#|wq=mtgVy5)0e2R%R@wPj%ZC|#N%+=N;NE8+JsOPR&( zc+q?xUrK**yw(zqR5KH{SomW^%|A$Bjo{sXg6YQZ!8x1U;NUYo{_nSoXwj-XalOQA z@G3r8-aX3=ET^3%Q}-Oj+2+k?GW-iVtIQ{JOy?uJ@5+;O+~B7FOLU%j7-*>p-SbgI z?(Rw8>1*aesKGMWHe)!B5cxx{^%sM*!@`W1-afOGw0^8oZ4Uv9#uvP zn&tW6f|qP|$tE1)q)8(dxzWkCqapZWCd`^8qI)yO3ZCX=?%GkBJfy1x8xkLrB8mNO z)&T?P!;`P^$_#m^s(JzAb}O?z58e5y<`Kj)_Y_pxo3jH!KiJ>lbFe4LFW+5ymJv>8k{Cw360?E9|Mc{fbz3CH!(W<2mF5B z2v<++#Rc4&+Gu-XvDG3>*3m8>d}k?6ouG=!sgFqE84*0~JC0swqp{&dB3Kk1ft_Jp zm}qev_B=d~i+XOu_NG)AyJ0l{UK|SE8!|CL_ZSdAb8Jpb0;l(KaND{_G-j?99VXl~ zrk-kLqXQGjBHevNdfWl{wM&<3y;mc4k@12Ca1#IRI)xijt6=DrV0N=X@L2zlgqgm3 zz|7$$?8=K{vxbZynfoKLIZl>ZM%!bzwwSHTRicq!>p{edAueeayXrpxx5n>-lI%Ls zLw!MqPQJm;4Jjf!*6n61fB8Yx^{?9qv z=D!^dX6Ht71qFRD@~lAh2c8fD`!GQ88wBVE!rxOFus`8B8nhlpMcsIOY&DbkP8B@u zrZ+@!jzFZRO%|sfFy`#vADA3CozFRvj1w>Ug3Zj+Ec(B*KpA-2jwO`nxYz%p0l-M`LCh+*Rkb9Tj75}$B4@T8=Bac1JhVEVt zI;Wnq_g^GKA2P`JPmwB-p*;=@!`4ouPOYr~Nw$SEHCVYsH$Cwt-0VJcE zS?U}Ut^9cpw-o)vLo>8#a|BYWv%So>-P}`#0LlXq@nCfEOn)D2A0ey=|L_kJ!Uzlme@U&q7Q+ud;6 z`K`Ej)&V$j(FEU4UPm9SkfVm1{}5wSbsD-p!rlLJCYn6CPF7m~!=tkYLEfN9nBHN= zqVC>hqxUO{ykB*|QTYL|!*CbmR$qW4l@ajR^c7ChFoe~03e@C62n;KpExLbBA8ih) zGMi&Va3LLqyE+S@H*yye`CkHiLeLF6uE2sG2X?@A0D8wDd+}Y7&$@pALxYv*;x)1G zToz%~cm^BlwYWpiMRatQ;9r*P#`@AD=-j45XMOd7Igiv(TB?$LTqktFe6JMp0kSx1 z)NgcF=q*3;B!p*c#Nv-rsc?cjLD1Lp;wjY*BxOhdXbzL0>MgfeYQqR}W!eS2WsrsV zQI1#a2w*a^UWs=tt`e(-$#9Jov&rFrnXt6Zm`ojQK_72@O7>s8jGw|4uqbXLwb+^k zCR@YVw|Fn%UETuvB6U7vt|Y(cHUyH=hw=|uDX`T$4l1%QLS$YkNfdr_Ioor^J&p3v zRyr6W$IRnv?nq<6m~{~Nyb(5xdx)Ku??69Rjy%94xaRO#47}lt^K#B$>-ZWHQh1s@ zm=nVDLeGMZ_#)nP4`4-|%6LvZl)AOg#p&}VL4wy{dRFfVc$~81&B6QG;-@OC)IG2) zGt!oM#8$z&-hpuKumj(&atAkfTt@vSKf$*v&34}ihIw9($nZf2;CkeFeEZE11{(f$sf~>qt^d{ z%bnB6*VS#rvGD{v{V5Ay9nL`O{A=O`|K4EiCPS|9)SmzQFAo;4e@ZmkN(IZ*VDQ>H zANJH)SVu?1r9;nS1w-rLmdPBN)pFUYPNrwM;a05GZRZvIk z8YE8pK;90S4C2P~sQ5%1kE?2mmiA16m!pv!zqkSRS6#!1%v>}`i6c{`rh(Nuclh=z zid41tux&oI&KaK*N#C@k>-h3(e0!xvka?~C1F|jcj!!)g`3eP z)MrMy_`>)WRNP?T)C*h+RpulyM-KMu!%)`xUsd&|N zBl{!TE8I~Q;)QR)ctl;APw8vNuvRZ@_12^dBtNj8=I3P5fj0!wV==$L9$IhC5a(=6 z#_I7>=(p-KG8w(KtBg_T_)qoRq8w=p$2D#`{4UWbc;Kf1I%IDaRITr1HT&N)H@7G}>SN091Q%do=V=y@`~h1&M&c~_7i5Ku0Ve&C z!S#yw+#A9!g5!oPY@}tl?DS4}6Y>SS7v3Wv?Go_u?^yAjSvX+7FQji| z<@%PHnEhRg9_*6CFK>@x|EBTmlAUkF0Wh3iqa>@VgXxGicp+JK4@elTUH3zsm` zgq;g*;kVEo9s4B`riH{o#NG4aApQN~o^g@FoqqvFdu;*z-Z$*+n;r1?_-p*;(FAIF zvEVi{1tb6LWy4SY#Ty<-TLh#OHUNg2&oJJSOOf(BRT0M#SjL6_-0NM0#H zM@>_q&pz&k#wuO6-MKT-eXAs0Ra{9V_Kt>?mLfP2GY0LicQA*g0r;z4k1wrW0d>O< zg4X6Fw)xI=ranxCuWM|>aSlF5MK-B2`A6AA= z<%JN8rq9m8=Rr=WxKe|54H^tThKCbV!8<;%r5W4jwXp|!_h5VS4Y2=w9Qtl5Ls;Qe zk;g7s>icm%Br(BF9fe9>%7zQ@K}K449KKm@~qP9e-pi9-SyF?pyy$ zY?s!^9u&61v%1-+8Fr6MU;PF(l1KBmf31mD)i5Ht`lR4Rp9Q-z-;=K7}w|D{{q$uYl-<;V>%k;|gRxHsB2t z6lsaRJk3tD$F!PgZ2V;-yaQZ8vO|ksOF4$w(=W4;g7<7o@J%pl1>&LXhg)_`Woz&b zS@duyxhj8xob8sNb`$?%{rFE{cuoSL*&iJ4dQ%JMUP1e7fg8hK;8y@D@>a(^zJeEktWBV_DSHK(xb@O+S@OXK?$wFTEuIr(}FbyB6YvFZ`W|W>136ZmH$kjk~ zDqAoTI>!8Qmr%TjaUv7^ymuMuo}DY~r;M%mr$QCJ_|w7*{`et%1345ZXt*CDpvzv^ ze($eEr}JBJ&I3s=M{- ze@8;gmyt`t{M;~D26W#};4$mHVdpmsI2wCEr0OL@T`I0)bp1Lo=o%%$nX{q6R*|tk zx^#j2Sol-50vcpKLs)Mj6n>0_3$6zAPxW9Z@1ICcXjy}Dx;xEIE{3fSn~6^Ioy-UTC~Vt4ox;2YzK!t;St!sj;`65xuCGOkz>wuKDZ zJe2k(Y!Syumg0{SpWymufyZ-GhpeWnA#9loO?ha^?M}4dCUi{QCg@iaL(@iPE%6Ns$h=w}nA7($Qd+8ZE!4 z%dI~BhT{o}@c7~*?3B-k+BR7*e3yxv>(rppErO&Z$AKfZK%0RWPHit@>b_FcXzvm* zZ_uWP1GRXunw>Zybvb+N8V!SZDRaJNfZyAC(60R{;{w0rcBUOJ{#VHk%bjOa3PRa7 z7)L%IRE6l>)nu_vEEqgKMP7|PkLDHrn7``)#0lPZn~@W#z2sG5*m?t5KpeTBHl8-E zeh7ZEUZAbSJF@oDdiZJf5Qj>{!u6Tmm@W4fe>{y8op8Ot^7hMczZtbKW0)hopL-cr zy&6pJ$;OfeQKjMq)8^A`-7HeyP>V-rDiB-CUezbxq`t`_CVgO!+=k=)am^oFn@aj-+NTy ziq{lUYX;IeJMZH*lU{sKpi7_5Ek*Y!B@kD)8Z!DRR@DhMB*PxGci0G}AKYlL*%g+y zQkGtC4q~x_FLTe+b3zZ|Ale`ImHmqi!rR3fyzjpwXNQ>Sy#} zp|mv$%`$>svjP-;?_m$N72wd-ae@xu#+w840!qS-sUdO#Kjr!u%j93cty*iAJW>V|H-=;M$zgc4ZaM}wZo~=0 z-@}*X`lxgwlR3-8(e^7cyi5KOf`SUv*}I^j;5&xMDC#`X1kYaS#nW9vR`mdZD@G3? za!-P=Q+9w$n>Q*;XtKZF3o*I*KXxpBBxD*~B8e(TLGH3Ft!@YwpF3ZIeu5V3bu7<{ms4#+;X+ukC~3 z(%@bqUs_!L{FV=_y`aWlX-eUq`B`{;?*TAfZ~=cTQ)U)YcR=x_6q=hq2g}3`@U%C8 z?8)CT^~h#i(Y}M7y5LD4uCk}@+YX?%%m}(~=onmhQ;e6S{)!6>3vuB939*{TZDtfN zO{nt#7L)q`6*he&`E%#M0l}XfV10-ssvCi;fh3PQ)Pq;5l3~bYTY5Y~4u@nV@xvuA zaKYEB!d+AwZA?SprII}DOFGMbn%MB5i^_a&p)t4RL!sWypJ>NiM-L5o`eA@@^A;b$ zqL$G@{x_D`evo2CaXw&EkO~Ql_u#VOo5-;xs_3~*8pmui#)_(b*z`vVG`ugsFL4yc z&Y4bAhP?)7S2fg{t%&1|`=H{76@8m;4XnwIuKe@@E%&TK%dZ!3%=%XlR};Y{%rfDw z`V?%8JBD~c`2H>ql>54%W$$n-B){-`!*@{f-UEx~E#)nK^`tLXg`bb~7CC-w$8>FH#YwSR~?2$9HJHZ~??^ zK8e?VMWTUa4sM^Ig-ddqSucSoL_NBotqlD5`JoYZ|BbY8lUDdu}n<5{RUN$g7FE=4g3D>pi-P8RzO zHTa6>H!pCcKLLdk# zlw8@|gg{s!B}vD;Ji&Y(yWqa#b?~u_U_`PAGED2ldh?EBt7Rh=&3lGp51oQBcf2u4 zN0(lY+C_}MBRoi~f+*J`WJ1M2Xls!X>BNZ0MO}Gls>lTE5n15Xyan5xYhk(Y-aBQc z2VuGg8QL~rY}ZK^XlM$tZ$fdAcPCH{yN}i~0-DGrW{zAq)G@+ul8!T`0aR>{yizZ5X1`Tbc;g^Bw>b`;m7D@o$qJZyD3k5AGy%<+7TnBzpg!OttQu=dAK&A+T5TBQ zZj|DCCRK{P>$gB0b~2A}D=65dP4`6Ta>-9xH2(8QIBLeBq4FwD-JXiMJ7Y=7RXdnn zU&dn3j=|~;GB|i#9+bc~u#&Y9&E?(9U~en)^UZ`qQfe^1|1P*6IsiE?%W$6CP3$gw z0yDPTapUmoV2R!2&qIMT@*`2`hn)+HK4|u8 zhC!=p$&Po{EGy#{uADTABn9PRMWqAvc97>{%Od!2z3)5ee{_U37fa9un$JLLy(0Jgu!FR1Q|B|cd7@wG zd-&P%9sCmx;e*>+G(>R_$;>E)TMH$r`ssEEOM4I2-zL$PgEoBc>sMHwBgbbbRH1g{ zZp?bQmYjRP2hRFG1;vUZGU?R~S1u6=&Xx#WVjH>|)n&SV|7wTk6kJ_Z4xMu*n#3W;6e$yG!)@Nf$0j^aTZr zIIJBVLZ{~2P`m1NBzu<;eYjij6`ix^p)QuVx>8!`rt@HO+i&AfSu@PdDMR(+%GBcT zE|6Jqi)Ai1C!zAvbo0;4Xf`JZChn*Kl@0T$Tika@*VzTNGS@+Q*F*4Ht4qfUn&W|c zRpf5fB~of5Mvf&YbwlI zU%|GHJqZGt4U}@D@yeZj&@=EHY$-G0biD_!30L8=0&ghk#Q|nz^$y}XB>B<>gK*=a zTw)*Y16g8**>yoA^FL^NiR=xt!%n)-jeHEj74=x>(^2EIJ684bQe3h;Ay!A+;88t3eIBx1O<;zollV!uz=r|igJ}A8yY!`mSZ`Yzk(`w66=YStuyUYhWK$6A<7Q?4` zJK($CUdURuj6I+)Nn}Glxt(YWe= zfPLj2s36?NHAg#8g%wFK;`)5(UU9qJZNfEtV)~8% zI(s_=r9C4#jb|a^-v(smOmy=~1lIpvhOHYkX>>XXpU; zOrw90ny&|Xm5VymJz0avwr!LK+igOys`+qj0E2L zPX)57Y9!`taE9_lRZyM$3C7+?B{uap#k-g6!yQBdYIc)fL&<}iu&Z5$LU%L?!(Wi&Rq``C$3ec-AUJT=LEz zmY*4jU%F8qT=_1Q1)3& z9yyOD`iBLdP|a@STF0?*`+hq7rWUsfaN*7Y4zwvS3TUQ2r*|Gg)V?9uvLQm?#;S7< zrC7X_oktE#IM1Y>44_ucJ)*W}G2m+v1E6r2Ii<+);WMwZ*B89R3PPTSY<$XIUuh#+ zcQ4>jgGScacnE)P7{!%^>>3*UhIH~AEFQW*(UVqC4*reHfCUW=OQ zJ?xN$g5VL8qndO#S62&x>W|UlYvZ(elcza{LKPS(AWm-UDWTKUC3N_%{TLrI21e`t zM}G7w(&DvQEI;cqwwvms*3k>>zSxS6ceJLRlbm>n%r*S9V;ec`J(ABnVZ%e0s)F-m z38*~f3uE6LBIO+~AuaGZNxmD1elnMFXNM{sH{lw{ytjqb+l0Hg#27p^P6O?}9LD`Z z24tOtWBCvlWx8tWXM9(?6ZNW8XuNwgbeH}Ep~!?fd49+C1{<)fO%k17wFwSi4j|j= z^+D%H2c8(GD7ulj3@k^Bv2rEBu~$B!jg~uX-aiHwe$+!z;A=LkK#Sd3;|XPbGudRQ z!G(ciNXZ3XR<_Xue03CfQgsoF60*{Ak2L7G8^stVJiEOX$f9YaF3L%IV6?ZuQHvUm zxQu#Wb3OQn0#$HAJi!$`XqR*q@M}C zB&P|mHMLQ!SuV|$Y%eokCmojVv>1+_E5(gHAuu(p9-j$}E9W(ralLpIgSp!=_-^OAo^O}9_I8<1DBM3cvsSgv5LQOva&4q zl!;~Wo9dAotQY2@I=D2g7;oyQmzB)cWGgSE;hP8oH}>Bpp$7Z#kJz5i7j9s8Vtv5b zR*@f@wyJ!}xh8yDdy`cAKE`*N2`o0h4+kFn2t&qgfU=W4KuINg)^HfTB<;ZB+8~_r z(I36*4Vm^oV?6Ms2G6dqh7W2oy!Pl482x4v(RR)w^MkLV)P>Wq2v;&C=RuUydbl=4 zjoYW3ggawKW5;iKK@@bw$Q>#)&ni`%R;R>wzBVP9b~ae0Dn)n9h{M61Ir!<4H@<&k z;_kRM1!uk+jsf0objK9IFZXp8Ofm3;wSNU>_j-2-juJG|7G<2__!Xv3PQZ0*55f3h z(IonICK>A60~c26@`e6I7#DpA3qlR)ENKOP+AarMO+P@e=SFO>DZy^bO$% zi~AJaG}!3!39ApSaB$MatW>% z(1N=zm4fY7;THF@N#u~wO8)Hm25VHS#n;w8$B=9LVOZes(uVCau(@Op7J6QSJtleL zyCrjw&X?ndoE7<=`^6+`kqB3S7S%j<0YfG*wsZ1K(*4$*+!1@TrAyLCX5}y#d!!2A zqd)7s&<&dxN$~f{cZpf!cetctsq?R*Ow- zbYaIEDO!^>4o_?A)7qH%FyUYe?7ub+?S9IgZ+fY5`y{eBqemfAJRqEra${M)x+5?KdB(q^(D@Z+d zV69aXM&w<91E=c5H{)!Oe^h|nl^4;VNfk{`zlDD$^>|`K0h@eB$Q>w2lcYO?(V;^P z3~p57(UlBk4EDh#!QYq_Z^#!$S3&!1DeCm76CZCAG@*OGOkvJZ`=hxSGTg@A~`y-Fq#FeY7iK~-MFNogkh-&B?1>(U{3G2WP}f@^59Is z1>Ap0pI&(S9VYAVAh%!41dEBDq|&7sR!l!aPY2$_k3VnV8@->*^QIDgDZ@bVV+C1V zHvrO(of3G%Pec)GqA~rGJUx=O4mS%rr(10z{yl0y^|f{r^|Vw{x8omN5;()6$5gz0 ziwZ3Ga2Lld8UceV?_+e+cwDq-9tX8$bg#!NeB-V_N1eUP;zu38*a8`hvD}GIHcu0M zis^(KS361mT_q5JvrKzg4VHcwNUwbTDw-+RfQie7V}tc>791ozca1}!!M7EXJ3hMq z2=T{%M`dZl{yXCJrDx#m^l~91Zox}WDf0fjPnfs%u()%_3XGi430vnlf^&_#$l|FI z4L3>=xKB;uv0FJ*SN|X(VE$#z^h zcN6N}QlkZD&cNQZ6|CstMK;}K994O$!Gn~WaIM7-2vItZzepAdd>#hVCG_Z)tYtV= z@+(vmF1}50g0c_VZFGc+`Y2K2!$+d9-=(-^ z!C%qF4NpLRd^MDbbpikUg2bRmvNzC@HBYyrK8uW@S8osaA36;WJ8fXZ?agFMf{^X0 zNI*ZiS`zWN+-+8skZqqQgL;vFS$}pjJ8rdC95?4aJZ#YCs{|IyLyJp-7iSJm`5RoG zXetB0{-+Z~JO7Kvj~OTM^e#JkxO@|xS0=%YzHGvhWL>scG89%t z?j`jfmSdaUaxfYt#vr3!Na~(S*C%VzHBS}znV;iPSC>GW{0>^YelBLWZA5j2WDJk% zLp8a-0?Ym?PO>p%ZZ#*#=Q(mbdE-{mfngl(ggD^%*QasRzg_M#Ngmug*~Z={t!5uz zfcRa?QB2(#C*)c-lt13#NOu)Qf=|%_SRv$XHH~(oV_*z{8(N~Paq#KB9s0ma4TEymz zc#X5SeG@famKH7h6evFYGaRPNXo?F;-eK^672x{&z4+!=MUth~j+Z7(#yJvEaL1&N z9SLa$g`(eZUr&WEw$bM9|Hkot4|SU1=>j)L&4c;dpWv&Xfo%2+4Y=eymUSkNgVS}{ zBKgBX7?D4Y@0xgxIG9%;7``IwZg}DI5kaEiX>L@iEd*RbuAoNgAlNJTB{RZSVO*M! zaSv5v!LQFlx@It`(2)_xN(laGId8O-TLyOY7Mcv556=^ZVdATEF#g~NIC)%w&Uxtw zcF#0;u(hCVXbi{J)*|viPnv&Suoh+)lwti=ft3#1Fq@RK{F-~LHE|EQ>vxQ~`Uv$V zsglr|up2)d-Ur7f_v7df|Dk8>L-crdkh$-&h1|e#0_%eCu)Ic4S@wkmy))(4za^s5 znfvf%V<)wtGO#)NRCF^DWyva2EQHj}Y#vdbG$v=#xnn_W9GtVA;WVesZn`Et>d? zHDq0d*RfOi@^zm4Z`5+UJM}Iac}jDylYQ)H_El*4*$01?ZfBMS-*9M6BFyUB&)Z~s zaGsnSB$;1_y1S`(qO=9RIMw1;St9x+w-wGcIFo5nr(lcfSY|HF0#1AwT|7Yo9=<%r z;HnBO`)H5t9tn8dT#KH1@f&}1EQGTo2SG+zJ?q}MgI!EI$ubJo(5AZG^jA*<+i9l& zGd2H1%bhXsBEW;@+bhBE(WSWcW2vI;E@oAHY1N!b6s6kJAb2Oo`DI3f2W7WCL* z+(tPb=pgj8_}vC0o&vGpi@`xH?B_vQ)UZDV1x*)m))xi3*CvvkYW0No_l63c6@&)q z-p4(|ce{DqI?VniAE(`453t@SKuvuyo)Bh|!JZefFwX*#3;~9U0w8G71TJT?pKOlM zz@Rx6Y;%a%EvJ6b|F4Jsm#VraHMkS^3?T^ zCjYluf_wS+;Fj8Vm}m6{?pR3T+DTtP=lB(DjClUMBL+rLA==nU1sGh!ry#_DD`aK9TnLS|n`YeRy3-qNOxaN-EfUi-JPN!nv@%~~UBk>LeDCQ8%)iUt3q zn?1;{i2$`tKOpUlAI@$G#5SGN>`AE_OubkExX+%*Y#+_`e^uk3bmi&9{wA_&CxvH8 zB2t?_oJQ4*#IwoUS%%*s_~P>tD=ZA5SZ6*?Je>%`hX%vX&h1b;_bw`gM8mUA522gS zo_a88{`Xjg_{haMFm9|DtZ?ii@jiW`R81+m)2xSC+2xA{XS~51p^orO(Bs>KB4GEA zCir&S87%su;K?cn;t_oce#jJ*r=9!Cdbg^O>nmgMR)-RP44#cACY~Zr18;-;n_BoW z-5n_{h83$1gTyo?`aVhth=na~f2@n0Z|u>*wut0@jK!9!HV83)!1hmQ!`WWH@cH%* zsMen}e|>LZ)~c9V4t5Alh?T5y32WP|y6fl2CuYJ(hc)Vh1n*{n>rXtzQ` z@hliVhQV5wC^Wiq4g7ZQ#;Pz)tiIOF!USg7l}r`U%s5{<+FOfunx7SzR2}Y1TV~;< zoGLO^U`DE!oJETZJMhvLYp(S@jrsr9!R3vL^u1dR25p@MJGF=6fkIsxl&(vw)o($n zkk6St{|$?D5s{o^#?B8Ax@^9gaF4|oVcLQ<*qE9N<`-Y%j{yU?v%W4^{gdXoBgc}( z?}t#WgQ|Sh3NPaSqeEakce8anv*1*4CaCQmj!XafLAgVhaF=_EJ4ea#mlmT~yH+$@ zUXn^&KE6l8RVT&se)bDlbZZ{-+7s`l9DxG#CL?a!f&cg*#Me8>;G8a4JwpL=*;_n2 zcQwh8k*8@yg)GPjE}LMz4g(d|;IqGb(Dbeo9L|>I(lxbY>_ADXFYwvk|4bG8c%)%U zV*sem90F1ej)d+1$P|Cuu^AJCKxNe}QvP-bU;cYBY${cR|86P56VoejGifgQb+1~a zS{nj$rZ~Zov3l%rV-(g0RN%)M&BRvlle)B7)0u*H`=R6%Z+of_W-13!E4f_kUI86?I(XA|-f1tv15hS zZbJv${05T_mB6PrLU+-N{a8>l2mHD1c5gmG5#%hyDSyI{4fO;?HBxK zKO@0mtB4N@^TdF4Z{T+6L0o**1do{KV$X+H5N)=ZTx=3LrXIb5j737W;r%Fap8OiN zU-BIGjJw1-o_rjq3q_f<*y=dz!D>Ey6OHC z)SUDeV%F}(9(7YbzHtPmZ>9X@r+awZcB!boS%Gg_KY>r(ABx6vM}ZPaCXs4VT*hZK z|1hA1X=G2Kp*17;ctck>apaQwpuq-s8Dk-Tcd+2=)S$8}-$K0F4)Cx(0PEZ(V8q8; zAhX#|tYSZvU!3*}CLc>Db6l@uc~b*6j1I#YUu?;>7Gscp{tSCG&3Q@GV?1%K7Wyu3 zgTjU>ywoNh952;C!2SE=?$t+l`0F?nFI4BjH>9Y7F`%d=h;^S!27RqT^hno3mM&?` zZ9Xb;jk`y2NJfshslg2nco#!RlfS#HtDPwIppbdGu>dBXG~!(n_WbCVV{j+1gKe7Q zEN)yo7x&~E^USbNQKs`dxc1~2k+AY0|NYsG)uvtKm_sX^HDip#YeCMC{d9Dm7vJYl z2Y&St{FabCj5sU}`Y!XRdD0}ltyz&z7`q)C0(vlADGa5LD^jiLZftR{(B(SDh<-P0 zXP>wI#a%&v;MBrSQM(0DNw2?XiCyA7XPlT{u`%6X6ibIXALM#_-(q{jMXWSzg30P? zw6rCLyeivGZy(Wy_M5SMl8{9WeTTU4&TPK8E)ic@_`&#-G59#t7!sdeWnLGT;UT+s zcv$cRXdQE;^+L`#v~MNN35tWd5j#lemKrqD915rJJcsRS{dg*C7(6#W1Cvc8@wM$| zNXVE49#6W&o&H%c(CHCz8z4M`L-pv1hpzCtry3nT7m%i=C%8#o$ao$w<2lO#hlZUH zYgqpW11_8M`6bbi-8KPM^3l*zk&Sl@U$UP&KaCx$aB%%)+J5ExGZ^ewL6aATh=l z5Fb*<0#|p!MvV~Q@e_bdb%A9i-(XAgM*h-dKK75uM?+BJxBW-L%Z)0Kz4IGf?M}lU z)hhU&Igr=9*p0P`&9HpuQ-IVpBE98<>E`c_yft7Z)heon@neH*dg@5S3D4&Xc2)QX~gC$K~D)7gi($E>t}0PXPp3cU~4pA2MuPwSG7qzkO7rK3{=&p9LNDLMJUG7Y9eX#w z2jv77&8-=&xU@kVcgPEj(7RC}>*>gToY;G!hCmJ0I zFy!}jv5w$F(g~jiZ{Qly7Ry46Neo^#6c|4egRo)YM3`?L4T;c$VJohR1~gnNUs`L< z&%Y=nA3g?>;qq_c;NeX6=qr$EPFkStZH!=c4CNyy;_!GCswZ(CM9~B2#y%-JP&*N> zxL2}(KI?R5EN-(roX8wPqVL=gSXlEw!uFrg17XT`n;n9HoJ{nYxDIalTouig zTY!IAOv_|^y`mijFPSleYGKkot3GvA@O|AR<7JR1*3yYc(`%3;px z7`AG9x2PlaF)O=!8l<*5LFdbxEX>*r?dm9XbS+~H;|2E$8 ze#-h^^|3hPWK7VRjNhXMp<%BI=L1`@A|?hOo!3Sd1~z%KW>rF+`}X zhRf=1H1>%yJaQU=dmM_;?V|*L*n9=nKGEQR2i`#G#u~V6_8yA&O-A?c$KlNIp(uWG z6HOBw!9!M-yG>W8d)Mx8hcOOxvD09@ebbkZEA=5AFJjooeX_jPBNDd9%kkBoQe@oi zI;K~l#_vt;zfpzZ)ffwctnUW{>@|Hr%6)3FOzb7vgx&sBS|jRghG0mv5DN2;~_s%vDii^xzx0 z(Q$@W6p1s^z8C4|J9$us`c3C;f&sF_M)# z3|#2S<^p`QwTIa3rnq_60Hi2*km*hbQA)iKzQ$SM_=j3jX25Z6R>(3}N|aeS-Jd*@ zN-npqF`N0R>4ze&!N+X}@yNdocz=&ANLUo$hE?;=>;}9(tVENKEJm3?X*MxzItX6X;%}HB#0>VUw(cQ>je2i#r`9tQJYr(%~&(S;{(J0fHS<8FPKmF$}ar}K7|M)n-)GNtQ zByRxTTRz~7OeuCn^)WQtn*_~1tB$!|A#7LMMV9lEaV&+z%A9GxaN5t#%^E6 zDj5%gZW2p(3UtHmG;=h!`pY+T&V-)iopjNas~DOdhA*F9#DDKctinG3rt6-Z!s02M z2mFTvad-d23)b}nET4$tv*bCR#~X0B)gnSA@l@=cKHd=A1RIMM^EN*Fi``tdOk?x| zJ~EHQP(N)(*6RvN3eJE@OFT*K_FXhpdQ;Vv`MKoKQZF>l-2~V4r{UT)DL5EYPnv}l znEV4A*Q#8SG&z@{TXZ$=`;nuxY5rOKo^~JOnc1k5q0ES!bfg+0g>;RtBy(176IMwF zfJ>_+GX3vq=C%;{822B|zt8nPYX)QP{0q43+C1<)*-q3pw~=w*2)L1^$c*ncWpC+7 zuvJCPutKB}^41>1gzz4a;n+?)E#_hRx~(|-3%4^RC&*`~7J4Y$0CuO2(JP0|8PRtU zXqdN`-1;K|ZXR=RtH?a`F5iPj_6~^Qzj4k68Fpy@7jUh=3i!4V3sznr7l;1P*pZ#^ zJnc4QUNeD*=C84EtPKxN3L>B9a?D_d*O<ubD{L;DRg!$reA~R;&st> zoNt+mwcm^wKeH1gU|A9>Id)@Ko;L=Vq@ahcB>4I~BawU$Jo~f})fTu?UQQ+^nHe+U zql0g& zK@M&hFo(gHM$E2wNqo8dHEh-H#Fvq$se$ZL=1tu_^5#zk_Gd_=VL(30?`b5rcX{Kv z?f;REts-pFWlhE){wnCNHD%s#&))ds8L~+64oyDP2bJ6FAo=@s6fo_9*DX@a+W-@6 z7YN74Svlawu@lGlBob58R;&Hw=>Ns#vj01et4k{AF70xxbCpDOQ7Pu` zbIvC@Tn>qs2-Gc0;l;lF&7T~96BM#bQGehoDX-Z=HhmgLq4vLo<0`|1Pc68ldI&_U zwW0Y%4>aaUGwyDsI9y_a(><$Ef5uaK#> zfWc$Uya&cRiN|&iczbaY?k-jeY<2L`yIEU}`A7H7Zb6%W0F2dhqFpLYZO@j`;Rz5g43>Gd|KDbFEG zGIXkrKRd^d&`QM>LOiAx#L(}ZI!@c20*R}`$-vPx-jjYGY}658Jgt3!_bM2f#|v=d z*{4`;ZpaMvu4O+@X~odPP5gB?O;EgQA~SH|7HH2?2&2OuQP77^ zb7wJc&F|n%-g5T2xCHCH_8w_?kdIma*BD_6igEK@y}c+KrTP{|OD14n`5`!Fb`H1C zt|!kooy3m4))+266AyH7m%bz?@-H}?L8hDURq_t++CJI<#E2E-$-Jt{gQ@`}A!Qau9+idU z%xcQ}vJ4%aBH*QDAuY;EMSqWAT&vm!8xt*w>8TLjUguwUX;TWQq=$mSwkRm6^r17? zr*S<43AB3gc^W%}5D%2f{yRsmtBJwWTv^8JPb<&nz&|wNvN;2`gWNkui?OKq03P)f z)MUdO*eoo@1W!n#uSYN7`#H-Xcxe^XUYf>BTsILJTRnInxdv}b?!k-k|DkZ=L~1JB z1n;URGTKp}P)?G8s(~uF%bjb+-T9Dr@*F+*WdkYa`rVrPwRomif01q(OJ?gq0_U^1 zoat0Pu6g-`_+>><1GR$~YjdsY)k&^{_*w@Qc*O0~*6YC$?bq0PG6Vu;;)&akDKp#t zGZDG<1ocQedT!3d-T)=$!0F4lQg|9Mw5TSAN2Rc@W*OtxdXzj6vw#6*L*}znKODx_ zc%Z5uc2|agvE?I(9*=>*&lgbhS{%ggXvY;pjreWwDLAH`;q)UO*;+n{7;Y3{ZsxV} z*V$J=$EXl(%lQwV9zQ?=40gfv1EP%5U^wJ$JOPo+2##*a!;ra6@U?~O$JRWGoA|mg zy6iJ3Smt4X3&mikdNj}Mq5jWxFlXy2q8Hl%K|D%Z+~Uc(j4o_*REAMQ2W+rjN3@#_ zAyrxu7Tk;Ay>Z$K-V46-4(z^ZWw`7B*1aEs+K0BxyYClpp;9K#roM;h99&29p5zdN zC|xv~mOupms({30d*(s@OVloJBW;UrRo!jq0ZDlyRGP!h8rvhFasPbk*inscM-n*B zF4y;7k&dfPl1R0a5xC2V!LJpI8Iwgy=-O_|b_od(-tOrh*b&%TXtlGVf60 zcniML>4S+f5$Iy=jbRzf7?WvtAmMH$^{~GMgJ$PZ==v}fF-^qt_iCZtqz*l^L|GYL zB+P6s#m34S>}WFv>$9(+Ozs7l4em_YLp?I}1_Q6!bhz24rK&-{7Si{uWV>6IqszN1 zysVw~Fqj&^7tT`wp?`SCrV27re;UDAkz>nf4Re{Odpzsecfs5_5jQDLC+=&%@iuwh zgtYH{pua+cbw9ZhjAD%8imd{>%2k$0UBSZJJWF`F^crc6<$6)F|KW=1Gx$G<9y-4b zz&|mYFy7@g2!C&&JEvWQ&c4NDqAt2j|+8B@EnO|A7?|>7(UR@0hXI!H-UiYxCL5zDRInyztH*l#l9DLo{ zG2BX=m2W-`tIH-bnkQ_TKPwF&5cm-0H;ws}Fq=IXp$dN6{b68^9!>w_%6U&X&QNqa zv5xuzg1Z^ORjSB@RU#dx}sIMHs&QP3@d~1>=6EKjja%T(U&)WQWM1PuYhk7W=vpwCg0XN z3DJeixo=Ts?DpNIGj>U`k;Z>`8Iixg(SxPtRlZ%9oVk0aD0}P zN$eJkTNx`VvDZeov&BOv@mGE@WImol)Ap&cvwkw@+9|{wOzGzN?=fWKUzp(U#5;gN z%{UrcNy-IgGAqni!P2yHm@xbk=X(#+-CKp(lcxI6+y8{)y(IC@n{xf-r_SQkXg=yZ zpA4eQn`nW#2ID&|2_}7$$J_%;VXRUXrc9K>r_%4CacL1=N&NturLM!Li0gFLhsCUD zzAqGKiR0e`@u+a?9Grgt45MzEGuk^Y;gucR*nONvzrBU){9XNo{Che8Y0DIun?iih zSaS>iYUktJNvfz|$miE_tdR=dYRvtk$}T>rPChL!#|26qcwntPmD#!uq)XMHs@WD+ z6^($J>0_>gIUT3v$zXC-2HfIyoBQT^;g(A(?19X+C|9?~(xF2G_jX*w)?=rz`Q}Wn zH_)D0sIA3lW=g{j(Kt9&>IOCbQyH;!e30i!v)Lh+FgZdG+WwOR?{D1@ut5b3TI*@^ zyj9>;UP%2ua=o&D)!A+jHTIdKC*0^!X0^A(;djeOIGXko|BQuT#*73oaCg8v)|SM0 zfd}gHM|iNPg!hQq#0&rOfvmI*vU(LM#AL{v0_40hK>{UUwIl%i<9FaKt6~UoFNYDq zL)ein!sMMI%su%@puXV-UywXN`!(qJTVRI?!=g0v!~)P^B{j zCe;nmG>-icw>t#gji=zvg4bk01((Zze3sS+X5pWY4EZhJOoL1ViHCp$>)`&D&nvg& zbjj6>#iT0wXc-}Qq~zgEkUm7tFu~!u6?pxfIDE({fH1dJa7^?A;3XE*laCOa@f0k2 zQiKOKW?`(jBx5B~3=QSZ@Nw05v{E`n)L2gU-L1{BP}5QA(O0r-U^c6>HWxQq3$wp0 zXS2cMPDE5?0n`lyz{K~r!T4$mr3qXI?cK}hZDPqN7CpkmJwDKxau}MIkJD1SM=$%xLWhs(bP!DWX$d;i)eh|@{p%S}1YTcll3B{fiun?RB+{jY?#zUe;y zmA)*~A5h8lkt;JroMvA7b{TY9oP>NYdDwoi1D{l8z-Sjm%{qUs5Ar^0zqcWJo3z<$ zE1mH0op!4UA>pv)0>?Xh)B+k`1ljmIog{eh0^~Q}BVwT&;r)+RY~0Lo38*|?Q?i4c zOS)k7ToiVDAAmuX2l)HKZ@yx{1MshvLKWV6YUCh?MaoXRd!<5TmqR*TLv)z1o5^4- zmquQeGf?uE>wC+|=dnNIp~5&0yaQF)wey^iUEcq5ise}J8m(Wo!}9g-fkk#nY^Y$~Utuv1;2_Q6T6uigo(^$+tF+C+oGovq-z z;|q3#q~V;Cmb9rI7{!09@tS)NPUrt21F=B6m5fpN@-OfnQh}T~IXo}-84z+V5u(p< ztoo-yXlCyQX3uxRzt@tOxUU~$9DJa?_YBCtI)bU4)@+jGCsM2Rh~^w`BQH45&6tJ( zlinlD%$0A)?ZG#|ep4K=`1Jw#T&BLXI)+Lu=R7XHPUuQ zY3eZ|pzaH)A0^lc60?DSO9OYW%_Cj+RuRolx2W#IGq}tqkuI?q$A90SVct=3MlO%* zpYTnj{X;?6#@&Cv7))e;zt5povzCL&nSMCW-GMg^zJtvV-@yCpvD72!K3zXk6m^5b zcys4IfY~!5f_Fy$8*6Q4W_V&ksJ4pRY!JzIvhpXXrN=`HldKN03{K#A4u!wz`&N(D{c z$bihTBAlvs2^Y+(rTRDTke?DRU>Z?D)UHO88Q}$BH#SE6*SscPiH||VYcb#Qf3|=j(q+`+tVY(#<}Te?jpLEvk75zn|#f(~DgY{kR71dw1Y$_bG5_ zZ|KyQW@e`oX`kPi(cUM3Hz?kG#D-XFqW z%?h}xBNT7?{DYn(V?Nt5m4;ji#;@OtiBfkn@J%Dhb@7{6>aickJoWeoK4`OH?oZLk zVKQ7Zdx1q~6Dy}Jz7IDGwOLaIQ%sEDSlP>0ah;3z;bF)ot2uXqV9|&lB>D+pRh>SJ zs>lIf<~AP9AK-T62Ka36dFaWDhOtv+#B-z_kMu_I8$%JCX6ArZkteQP@f#IBYoG|V zgX=34$wSj%^a`HAoLy8ha{mX9$IJaZhkWZxuL zZ@mWh`*!5v`3JN;w0c?4!;xc9AeX>b z_K{{o-x!hfkKa)A_7wQHVj59Z`oTY@5J+|8zVm*Zn1@rRDYH8STWR5jSeSkOGR_dW z4h=$2`QDpe^1}sf;o|Qbly^6S^UNiY`F6(a^nnI+uIG5t-jZx}DCfmbN+H+FUg3i% z7A{q@V6~+b4jAr4=r;oqhe~ulI}ggkn#pD^_&?CIgk#Eo#30Aju>9J6I=tl|fBs8F z#{O9_T)88T`wq)7_l-i(B~g`QXbwP5NfBV`2CVy1#O3cI!SqNz$D%gnwZDA`TND>T zfT$iWo-vIvev?2K6LI#q_j|MtU2PRSu8bjE?o4%DmU$d9g|+gJ=9?`NU@mU4h3c4X z$g8p>(MhW8RPBct?lKC`Hc2ykmazK7vvFdnBqJEpz?=Rvfcovf z13k+j4i-g+SxGsp&X3#TgX7>f4J3nfQ0Fu$7utPxP4Oys>#JL zU^-4_9&^Fv^#ZKu+-7?EcRu;OyABN>R^Y$YlI(q@RcIjZ2oEEFQ}RL)|JtX)y8e@x zXI_Choz1W)o6Eh_a~?&dz3{efEhL`^2a~JUd5e+Y>l+SCarKxd3hX9T;`Y(#glM#t~uwkRbfY?IM&2Z zYZCQg7cO*;Mv^)+gYgd6l9aH8{?YcCJ^lR!iB57#L#J>(RsFVSZ{i_sB^B2pqE?J}0vbYJqbS))I7~d+-ujkNjb|K$ztN`1x z+pJzZDS%I*jdbj40tvR_F;+%m>@me7pyKR=zt?}lqN4)r%(rXs^0SGIP4z$6(>ohQ zCQf8e%_xBB7qZcIun@Etq(kJEVtCyt!5UA$N}l?iz&77OSTV;Bl;63-eAN+TwXc&E zJR!FEt0}lI4u-5>`!H&XFKtOceCJb$6P)_!#?e`*RB+Bp`RrAY?2I5Y{i5kxmseE* z;-A5L3Xgm^+Q|FPh_TaRW^g&wNuX>lNDZfPJ*ZFtzkhP`sIw;j-PJkxNarLx`<;ZR zxQt(fY%L8InG5xGBBkGOMe}FOWC2ro0R83u-u3U8wUMzY|=N4aquBT@~P)3$%`ui2??vXzkDNF+srY#y&NtqS&HIQtFT+=E@r1~!11?- z@yd+_%=NjPFL*cs{+oXi7D*_xeg!h@hHrc5I^P0ZyQm1AE}P>npBbR6hm zBT4o%7r1BkZJ+`|e~7cBTZrkqzXh`UG@1XnT@$~v2Ism*Q@^;ga5>SMcC?Jqn&C*& z;$8v15B->uOlu?=JLqwvhYKjne$6}YlQ+i_u(pb2;Rii@`e0>CxT3%A46P5v@lT5lD?1Ijp26H+!-HC zcjr!oE8|>i*N7bBR5Baij=RvMMZt8$X%8x&ucv)7J$OD*p0U`=-5K^wVo$gHz%@%9 znOS~PHfMvUg--JQ3fylxBc;wueiPOuoeEOHW4Hr@sE{B6-VbSentPNkm? znlQm0m3SuhDg3JFg(>HrV$!P^dg0?JEI%5Hq9c)bs`wc%{Y)sl`dx)fDz-w3!Akto z8irj@%CXC8A=&T$oDAgaQF?~!&nbJ3tzISYS6`9M4qXgV>pH2jOe=0wKTihs$zb)? zM|i5T7+sFu#%+qK;4B^u1^2C~*zP^_`J2NaG{>5eKJt@qYgvd(uYSSh|L+V|)L{qw zxEV9Q02P~L+Fp7%m$h7+msS72k`gpoy3;pBssAVxfBqo!-yV6ajP zYq{LS>hM><9OL?%U;RX%>y5B9rwl#IRM_l?^*C+W9QO3ir|7Le565;JqQR_C@N{^9 zha{izr3CWf(b8XFq!Ed)_x#3W{ZkNXl>oC$M`^VDTi$?Z2@MWuc~0+TmlcLr4hfokww_nGP(7*#o!CYH7WE4H>&MjLEqS1cclH%gpCs{;3kg z6Mx_&Zl}CE-kI4HScmrWq*0(Wobdc>ksjCuTJd*j!(alf5w>RZZF?a0zB)Gh88a93 zWf-+@@px!70KZFx!S!}elIN<)Jf9-Y^q=UXFIP_IiDfwBW^ZM@tSQel-tonCTUyaU z;u?QwT^~$1D9yTL%dq_>FG*d}Pb#RThl-rPTlLvzI?d)Lee)s${a$5PS#FA87oGTk zYYIeIpEsgd*8LsS3kT7w$p?D7`ce7j7G4my)40bjp|&q%$?^rgV6RjIS6$w~TiFVz zcNN1256+@vLNA^CN|UvDJC*%h;K+t9$*27%&*9)-LzdCiqa!{#R7}N(4$4U|`xQ*V zbizrHxuOBW4`$-&n!_kDA>K;sxfRMRdQ}w{zlrY8rMy7biSWKmfoZ8Nq)jt6k~OoO z@$Ym~XyThNS4LOBbH|eb92n-Tmm`6G6W?IXt3!FYL( zA&l1=!9rFOF7|SB8kZR`Hk%BE!B^<&`NHf@-w!mvU=K_gmB5xSuSxi?T%4eJ1B*jT zz#Izeb59?D82=gt4Z?0z#0n=(Y| zRP3NLWA|((BhjvFWh*|L4SIcym;G=OCixh#lRj#)j*01zwRjJX(HPjUC<;I;g62+H z$UG?i15=y6ScdIShqT|t;Fo?8HdZ~u_Ol1*MdlS6Uiy!h<+l*lKFUVFM`ysBbFt>zZ-cyAF{akl22)q7(uBxRvfObJhMK$} z2`40YN@wkGL-ilnrgM_OG9LUVbCAp(w50Cb9na`t7k~EtHexdtPt7+LK~hu`FJUF0 ze*VD6_lY&6-s~6ZKGea!>nHf*Zie{1#|9%p#o4L$T8w027A1+o05H*#USHpY!xGb3$3;s(@5UKOhWswKI83uyOS8Cr^6GV*o@@7rYB)^6r5WhadbLm*?ai&T_ovoY6=z@kbK6&Dy{%R+{fOZCFML_64FFoHjm0kO5tT1^lT93)vv`}`?-6~wMuY)GeY?&F}z7`Lda^)lTN%laDyA=3YY~%D>HQXDwkc@d9 zL3L#pm~g8Peldq(pRz5gl?T(uz-db12J9@88T{e3&9Ldc3Rmm-4mF1>cuGQ(n39zf z+12-?S&KVz%&(|3*b(%QE~y{q(WC0jVUGEHUMC#&S4M)woy)*{6J-M{ZJ5^DX!7c! zJTv;Xgo>@Hz;lK-xU6jqIdwS#v>zA4GV?5OjL(2|Vpb?9pN(7JYJ+-O3221&p=V}W zmG+)|>@2r~O-JLgruqq*sK3D9HK*~#s|#q6Z_j#vNBk9V1~TueiYn7{F@A`JUJn&) z>9auo)=2d6+CvgO1~6dPIQg_o3d`>NL!I>;`%kF}nJu-j{!k_=^(B!n7H;`Tg+FR9PkhM42>2{T#Wa%28MB`uuJh*8HtRebZ{4Da+VU-stLbh12W8h*Ad;5jGi z;C3+{cB#qZ8;M2a`mb1;EiTEv+2#oe&%VO$z?&$YD$llXERM7=Bb0vDNgDiz;P9&+ zyia2x$0dR+tbPnZhqdA3#whsDWSG|5mB5U-qa;U<%PRi2k$$ugWuJuxuu`FCpk?-K zR^KojTXyY*YUOEcT-|My?^{aZTtwK=jb7yN$LY-en||u=8>veh(n;B zmuFN*HwwmHbF<=?7kGl}C-@r^3j>jB!NEnG*&0!gp*yBBf7av?!)d`-7I&Ig)fa?8 z+L4%(dmg;DRbY2O0cf}m(O{W!^evyyPH0rejlpMdzu9`Yw=Mw0vxe#Zuk%?6ju$;~ zjTTCGh%%GarU1+N)jb0>$>Lu}aPavfDyZO&%5U3g=E(;5t*6U|y0N@1_ulbTPnCdQ z#23i3*v;#*D#Vo&rcm23P4t`S$^_HSv%O!YLa{@ss0I|Lwn zjsmJ5+KCe$no(YY8Mlw`;$?{y!BLGv?5Pz^sPS+Xb9A-=iaZkIa)&bX^5=!HfT_my zdCD+}>)WY22kfqSPcUHS47Mca5%|+VkQfbzgM1)x zf-rN|e-Ru2niB+v-jE(_wbo+0SHIRn4BIOE0JF>o&Hd!_rLDtcRc zM&Wr3UsmY}i?au!7UIIt zM0|N+Iu1A~v%GJ8d}Wsx}Uuq=E*6lxxGgqIfGQBy0_fPy8_8Z4yg5FEg zwq_Qbv@yU^Mx8BJlVl?L(~0@4AsTkZ6!w`|;o;nNT)1}vd{!!k;qpbG6g3Hj&bGs? z-vfA#l+YLdNi#yd(-?=Mjr2`(9;|!z3eCjSnTnbSki0Sixt&uXHGu2TYW#W-`8|=1xMSBMR_10nebQ-#M?$V)&B#+)YN^7e zZq;IcS$!uz>$~W!ku;KPKMUN8jhM8kdZ;;i1DQr^R2FAxYhxz;A~OWaI*Dj^Czq!d zTo1S7Vlid!1=O4PfqyP<6THgf?jo;ukQ3?qNTy*jsyy>$H*oX7@i*o?yV5OK_o|If z_^krZOO?U>-Z#>=z>GOzXiu&g2BXNPGMsw739YYpLDH5egtc5AJaG>=4K?x~C?%r8 zzQwTcTprmqdX-}*j-lmv1Dds&qT6n17*75JPhG09WKJzkVh`b^8QDZ6IR?i)IS+Ef z1O8>ji=^?;A-v`<10}Vgxc+w;&96UCpNCI}KO$M=va<|(WNrdp)jo&2nY$=wDh9_+ zB$7gTt`F*)HCsM?2u{a|fai}`#8t9ZvODc@fBapgy8Un{L>`I(g;G80<8&DB9?Qp*^R9qeR||?63A0^p ze$?0EHTT}xONI`=r|U1tGjgNNbmJTaIH6^Q7kfm&H82i>wiUwfm4#5TU7TGk_l7+8 z+ldQa+$J01SJK%Z%-NJ~2i&tlo$ctKgR7?%!oknlI4o}g&*!*N=Sj{y{Z=a!;!kI1 z&wfEZpOmEHwvy;HBOjN|jm0mzQq0_u1URI<3X3B1A?Bwf`$Og?4Q|?pFMiiTrE?rz z_A(Lf2w%Zo(IQx2H~=o5lOfw(4UgFGM7f>$#58#uWS5^ssv*VtkG9ZIxi}CpI7uf< z+rg{uIoRl^h|ix!VfW<+aP;4FnDRrIVdr1B(rrt@^Fs6CZipF^mg>qp9*TpHOTvi$ z^bvm7gCrbWnno4#;Z2Tqa_-mGFQ}2JigrRLs0~0R28~g=;nP{Idgh!DPDto9LWC^i=!#*`;Ur;j^@$ zXlerIn>E6Xn`hv_uqGqnkeSa+%cbkny} zvAhNB+8g5RU2)Fu)a8v*mJYafo)D8J_Jn_T$s=f2uEoZM6`;bgFBeZcg6%_h!Tqo> zPE`qpn~$ekm3==)cU(M(TZ|K-=Hy~#?y|Y~LtKg}P!VF6o_dJB`j>dMH>@DjDGi41 zaQ#eql1RC|V$s$g90Mr}Ut2sN(lTXm{2~L0-PqSp7PRcfpoJHS95=%sSusj%Jkmivt^#7in_$DXeP|t+1lu}1;O@zLa9FyO z+_koc_WL5tq6$SOYs+~)ZjC_OV~_Y(dR)LLP?5c=UkG0WIgR&|Fw=d;0#l7Ui2XEa zCP6J3*1IXv6^7$@!Lf?WRv`FiLK*Z$Mv|pI)tHd=5ndK5v;H&nASuWhw13ruQFRes zi_1VpW{^tQn1Zs}V(jbA=U9Fhi09eqO#Y(_+&ftvGc_N>#!3~4R~H8X*AcL8vBD9B znXK|^XCnUi2dq$(V#n5bqTJ^aydjxJ2bK)Oq>f84vGF`T_OPEe&8#3%Yp&4K0#|5^ z(nRK~T>w1o5n@_DN#ddJZi(XTlhwVqdWAyq7;4U?aPhL>o)}&?7Zzso8B{_ob%#%2J^$Jz< zk>k2lbU;JhiFuVP$jm%mV%0ou%7{14p^6hOfJIjim)BHfw>#OR>nU*6fS-ZI|h|L8sK{FD6*Iq_RsS%!R zVjtG1zNe4NcVo#J0jglB3~O@~86l^iRdk#shpz2}Q}b-8WT!J3na}B01u2+SVt{w| z#NlNX19rD-C9V&7P6sZ|gOC(OOuHe4=gYo=c*B2Z3sVFwFCT&D9wkuiX%A_1?V(x0$^qy3ea=fr9{(CzVQe)(9|CyY7;QGr#lQGA2Q}rwII8 zv>CE?XOP*Fx8Q74snt_YPwdV91~o-H;Qsb7-1)Pb~_WPgnbz-j5fc*meQ56PW zAM_{BZ*tuaKd(}~^ah-6KZq~Ky+Kq;h<(3Jf;m3Yi$4x3!okEZL}1xB*q~jAX7SIl z@->&Q8xmm0Ukk9mh5AX#z!x;-y5(=v39!rB89d5f@V0i|Lgzor;PnMA>p9Bx%%{u+ zCmtUi7CnQx@qI*LZ!YPQYlWj;)6iMYi+?&e8J9Y0vsN>*ATA&m@*KsO@5iOA;HEhn z`}r8XJX%e^$nl`znhhVJp1RWFk5!K6G+fGA}2+Cw3)1i~J1ddTVwX!&~< zzWe^g&$U%l@zhsTZdRkJi?730!l7c0J;1tsx1ebmCHjnKIbm6+Ibf*rAR?UM?Ac3D#qn|mST0UICE<6Ex1uH!p@JkWxu-e;mkiTsBzne z#|!OXg}f@Bi<$wKwpD|T`X%hUatDSdnegK?h1icd-^lm>SlngBdBo22vhsO+_;Wq!yj+X>f4ahn&Be4J{~r3*1 z-bYjVeabF48!}{-QLanA*9BF1Puv9?ez;)ZBRd+NkPG8iCX&F|pRng1OVY2#5YH+3 zXlcF}A6y(Ey^1=xH`|{7A)y;zSWaU{#1r7K%?p0%WFh8W?P`#R!%!3}g;I`(;HL`b zfjRLBf_*N*m&x4yV#_$lqdwpL*lyg|=MI&cuV`YF8WZLnz?Z+W8RAuZ@j106MlxWr)FlF2R5wWFR z_&WO;7EZH4oyXj4^0<&HW{u!}LzYev7@+gNr%>OWE1@mHl3g$$%=*VE;k8n6R{AIB z>65Dh_ZQdE)!iP&lU8E%7lwSuR_X!1jyt1Z*|Nh*;tW@47;M4UR${Un71=PO}LnNPpRU6)DvM_dpWj#-*hJG zRW$#g+c7kxe183&igta+AYWC+?!_x8oXVZEo%whu=_tYZ`b@&? zVBD^t2V=>Z(B@^qoD1?pnL`I5LERZ5o8l;bQDWXW1;O?;3sB+|4_egyvCuc4c7@KO z7FDvaK7S*GewfJo*OUw|e->b``gIZ)uFfjU9!Jq11^gw}u{5sP1)f~1#zkRAVc|>} z=6P8^InsL!snNO-*bbk+MiC>J2=CF^KsyzUIUWB>GpDP<8DN z!v^&K#D1sGuu$KD3GJRmH$PuYT~P-%|KR3)jS(8Yh~pk}np3rD1De)ourXYYtZP<3 zuJFqzmXV&g>Gw^Tz4klEwexUYI)fQzPheT~BV7GfhB1HQ3;#7;fhc1xL$RTse$%eN zC&xa3*{(kLpxi>#o-~14-cj07>rWK5mB29X0$PrqhGCI+Fh0waXw4p^F)MWO#><(| z)XI6AhCe}Z>I1&UF>fp=sNtt@9G=V1zeE240P(MZWbnaayw9G*Lq5VxJ2z9GwI2b| z_Z4L3%~D=i@;6$dno9y7z2^A5r#P;f7IS;89d_!-vXTCe;eK5p#J&;6btST_zp^%D zO}$Kg1mB?FL=ooFP6;+&Wd+GO(ofb$wDbC%OZoda4RZKOJKC|+SpMdjIAh5>Jnhzu zo6aq!hlQsTkx?;RH(r8OPMp8nF@(l(9o#(+PQu2RT9}Xh7!tA@vN+Dgy9{6A9TWq_ zmoxdn*>QZOgaphkMq6J8PPYx&>CAQ{Y3)|2R4izncFqj<=_@6=?_=l|)kA_xVJU6`|}|Rz^k|gp_tk zdlxcWq!8WvJ|9Jkij-&>(H{CHl8k-l_2Hl*H#Bbs3}R?(7t zd3_1DNWDRYYwB?9sVig)TY_Q7c;4^L>AW4yA!Pm{G3;`h$P`a-z`)Pa?AAMdXvYlk z#CGYDHRd8Px@J4hQ82)Ph#bLL%LGC8(Y+YRlg6Lc8)<$2dS)BnAO2nvVSn@YlZV_~ zZr0N|#Kd6?S8Hi89j?F`T(z*kAO9=29$Y+sill5W*Cal1wP@VX^9N* zre1)Bwc1d#AQyfJZ1Aa{24l2InT@_4Ey#BApnFy{Li&%dpjqz2yET42Ja;W24U7RR zR%yn#6r?-s;%VXG!{); z3u(!n@2Hc|$@AM#53^+~ss6?g&IPg@FAZeli-uluX|q1MAJ~V|@CLFu=8(pQ(`aX8 z1t*VwfcxgPDA@NC&d<_ko*w3E_*d%mihd$bw(l9%{Pzeq&Y1`zYks5XGEaIpDRkVi5E8KG7CoA32ilW|$Xl1auysud3Hy2p`)$Xug-%zf(yU^%O_yaRU@K-u z{6}X_VzIdJIrdp;QmLtYnDy@rq>JeU23)EXrDG>oOht z;`nRwD)4#Lec1XzolX639}%kB49tTvqU2;xKOahfuog)OA3vGdU)n@x?bc!2XS_qj zD;mr%{r_lJR2nUNK9gBGJ_uYR#MxaRcF>$&VdmkAyC|w#3>UX5Fcs;43M;yQ^2ctf zu=d>%P@+`GWwxgae0A^A#)V>N?P9=+=SzU{-Rm^K#u>v~Gr{9qCrBN6&3TnXS>bJW zX>RZWB52g%#oz10qVit+z%f$_&pyRb-$(deViH!R)j`DOsgR+g#eUPA%#J&@7~RV~ z!K%IjE;<{NrVBdQQddo+=FTH0#4iaBtF4D3Z3-X$=F=fBAN&!fh)zDk=vMuRJm=is zyfb{d?R-3n%!mN%heGgmt1-J|pr7v3S7%(Z&6u^p6;Q#`f^VynAivZXX33qz?`NNb z|EzraI%p0PRiMD$T=hl}%k<-48F!pnkV0NrsY9IA6V8*m7{azHGC$;U1X`7SR=IQ_{MLk4uko>>LL2n4Ui%oU{I{ioH`jzw{I>-<)}z78mok|35Dpi z;WUUID}#ym4OshCzA&Ia0F7pc@y0ndwzreZIRzf4U03R9QcMe(b~7F)x{3;PJ(A!$ zUyd3!7eLKJO-9|l2trJ*f!O3c&UNDf9h3b)MrtoCJeWzCF9Gx>$G5j^S70wltbv6u zH9@;0QNYwrU@tbD=f})d$Bx^xaJQN?oI0=0?)_VaHftitngzCSaz2;MO_;Kq};uiKJ7Eb_uR~a-nl_O_8xmVB$v}-5Gp^H(%Vt>+N2MuD^wfP=KDioh zCy!^Zi0mcfxgFhYXXmoA;4Vno-6MEgF&o|YUxdIzoJT473~Zcv9ezGz=|K%iSaV?# zTBK+(E9xszEq^Lr(N5)z9G&D)%LvCj3Z!?s+p&;)YnEPbqca^h!oa_q@VsaqbE#!M zRr~gi8n=eQ$;qQs0mTj&TMT z_!8QQbjbe+-8^_58-i-^%h5Ra=J5ojtW;o!yf83Z7Lb({AvkV{7M#9S41XVMG4Ve| zSoOdTGBb2Kj>={Mxp5slbM=^?<3cfFL#ANDEFn_a63MHG<1rn@R>Yw51A!F(=B!m#pJ5Nwf(xy#QX&!Lld zF3=JZ#($^Q6?J56*H-i-j!!jEJNUoR{7SwU$w|JHC+)>@vpj&5_^iv%T!_YDq%b`Vhl}{rEqhn z0Xuy-0F>Go=10>xa*&7co-Nc#2or` z0hhcGW-snFhMSG^P%cA-^@-PJ%gYzgo6E{T`;j#98(9iFRaJ3?iyJAH&jX>A#BsmK)LRW7PS-oR0@?A-Au`CPDwiKhMry`UD$uma!qD<4)(2b8{U|SE%1Y*;p#sYM8qd}SL}9r12<|9310|D` z$$^Y9UVq;&(B7>;mU-TV*}IZq)7J((b5e`x{&)kYPN)RK7rS7_i6WdxCve<=P_$bl z#OPhF#YEk^@N)NDjH!;ro+lcNr{o#Vdp3bxYc>MCOQe~m?s?chH3>T;#>mv0^O@Bf zGR%i%Kk(+~s54pJr*UHS1KhNID+;Y{hDXz-*oPVCXzW{Y>Tx{>Vjso9uhMbsw_9(~ ze{ej?b;>fT=f>cB^d;V=7mfUxF+KQoc_;`EY=v=l3HZzAASk+~($u;I_&sI73C|Df;liZMPp8?!l{3G~Ks z-e@13;JKTyk2;C)rYYQP)eQtI-=L903I4rvi(HN9M9}|(9%nLPNPCQUe2Ilc3W<=h zRf_33e~WJ=!*E{C^TR%pi4X(p zuHxZqt5`#u@oeVN&0u0%3S)l0)Zv%fVI-gv06l{Emt=O(gp6E9Jj@&%~yUIKTh zd7#>(VHo-{4~r|4Foerf8*=|6?;IBK-aT9nOQQBe@#91N3YhO1ZNHLq!GgXtxUq5meJ z*fUoc4G_TK88v2U62r_?QiW~5>T!A20D66$MX%Rn($F$-_Jlz(3`$Re_8TcwtZ+7N z7Nq%mZkRPN#j`PV$2UDd?*a zL!+#ThH z#!oUVT;q%Ae~I}xQFIVil_o&?KVc?Krx$J~Dv`JObC~l&=W#*~$N1525ctJdgIG7$ z8!DD%{kc1?EoB{?d|E;S(`K;oxl`EvdI6w*#{w*lmO+a8D;$@z8orJT0hQU@Z)wB? zX>c&Fd--+L7QIYns#4-v@Dh7mFK~=FY3A@6U3%wAIH_741oGi)VaYf%&>BsFfp3Nw zyTTski{9ZK7&Nx`kVFezG- zNu6QNgiA}ow0E+s%kQU{@g$dMSB=2+lbg^*_6=37y^EIG9WX1V4{e2YFgfHOu3#_1 z$fsP+g&B>0D&NSj`31N=GMwH!8%p+eX2Yj>)fiQG9fpioz+v(RcGc(Mez$X|_HZI& zEL{ahc1O~Wg?y@DB~M!h|FS{q@x2a?c142m<3_Ug(-Ih+HxcKRt%IGRS@bfuQ-7%8miHh}fy_qk@{#n2rZZ~Df&^DZ>Cd>w0xr+<$WWo{HjW2T3@t#f- ztth`t=lgD8H9tk+8fOOU-Gk}l_oJY^>H*r#n8A+Q7Xmvkz9IFY-o*XBDSO389odx} z*G5T!eJCA+k(;zY?SeBt`7lH`q*7j_#xI<=WhoP4G=&K+a)#tPkx*Ydi5bv~Aq!I+ zd5MSn!Mu{@j%U8an z=6AW=y6X(cvht;}udmXu_YA(GO2Ge*Bf?yh0hg`WaQj;e9{YEJHwRPk_=la4IpWQ; zeqP3tE=k0?@k6AnR0_B3-pxpRB+>+XfS?H~c*SN3n=Nb%FAvHv;@r9V%3F*{d~1$> zfAwxu2$!bwI;2i`v+1$&>)XZj0gvx-aniEUdj{^MAazGv_8#Mofa zpEQlp=3Jq4-X+{+69n&ePh@6tb7{$jTjY-~kF=gOAg@;jkoB8(FjE&s(JL=E0PO?)DHCsrJ^OT+ z!T!C1KA18vfSy6+NUSDrz(?U zmU2Dd0aMj7t0ToHD9?4~dAx6Z z87}yVF{efnDgW{!VivE4o~QTF+gksy>&Z!+Un0T87C%It#1bm;>k}OXNrsrt$D^CL z_jx?rm#e?~!87YQs%edZ<%kX&kRM3JuNb2K;|y4MUm0p%a56>CH*D9nN8lNL2(?o< z&hFzBoP;L@PT3;N=GtY%-};&$UAha7>Mf-U?bbs>W)s@+HBDFC!qPE1A?E4rb@Vuge?7P{dIQ0SPhzaC&gI|(KyW_|JAHiVTPHY&yMn1h+ zBam?RBxl-Gm_Y6f-n8f*fBPR_(%Wl*y<;x~KfcJZI;W}yvOk@uFy9=`DG$=Q*~)Cm ztuCAt(*R#ooZyvJ4kqvJ=JL%BM08v}E;!jlJ*qxq?nACWRa%diyuXnxI}F(zvkubK zzYlqTc5(G-7}`Y7XO`~E#NuPGAm)k*{6N7GxR?c+IcP?MzH*Ph}z#jSWJ&KWHB zRMPb&!c`1UF}gAKAM7uw|s(uQ~5AO zuL)gW3b8`X+U%jVT$bGUH5T09_QadBc(bOeFseTHAvQP$MOR-UlHQW6QJ6H_TA)j6 zD^kd88wr;8tOUM$|Aw}GS25dY1jp65V|dA1x<5&R*&TI*UKhTPpd!RvFE|MkrtKlD zUK$+Y&Lt7I6fos-&_lluW85ioJfmI>?XPz53|)oUBhq`wu|<4*+wnqh`iBs^NU)ju z4Qhkl$`lYSdJxyl zYJ+mMbNG@y4+BT|c;|gIn5tby*M&ZC;yep_Kfcj#Intc>;W@6I+=I1$X0w~4xV+?# zICMSqiT;`~hG(zn(7+=PU~-5kJ8n`VuCQB<|0Fy?Vrv49EDgd6v2c9TqJnC*Yxxa( zoM`RMMVx0N5$;ZuqSX^9t2=_o6Y~OiyZtR) zuwW3p6|TbDZN6ro%v*T6ZyKOz!fcC$=?`FSZZ*BwUc~!-xB~x5#DGYr5KRfW07s0@ zA|2EODtiar9sF?iX%*J-WdLY;NTY088x-%ogzZ)8jGg5L-td}@_^P)bw0yR}H=!Wh zr8xuIvutroavxe&SumfQrJ3HyQ&?bifMZ*HrAuyeuJ`|dy{s?KY>8e>t=3k7*W$S# zBp(H6I2TRM#S8Aqe1a|D40~!Pvf7SwK*7+TJC94b5v?GqeJ@PIM9KfDa?eprMq zYyB+RzLb;l2a@Fa!aEo;{0fhlYa%6iC>|R?PRaT4xCt+cj=ZEs5x3x-%YAs)9ER>4 zS2;I%4&80*N?u?63svnZY`TOrobcKU-?@D``^>ZWUilwA`z#csA6%o>Vb;+3eiBoK z?R24GI1P2l;pxA>gK^I`g5ujJ(5LnfKM(JqlDjO>)St)nCp-qxJt?HB<|)zYDJ4-K z7Lu~@YoT=Q7W}nCgK-$?1+%0%Xm!F%@J1n-H<0Q@_l+IGWEzjF@`B-vyEH!0mxN8r zjuUr{Ofu9i#QwE90!bq;KsR6w6v-L$^i%)Aq1VxXz zWC89w7aq4-1;RW3LFSTcpdGmx2KgU&^#-x1srD2ySqZp7*gp1_2VE||H^ z3lGG0aBufM;Bj*R!?ZZM|I;y)3ckwi4j*9Fy$Xb4?%t=mW4vQ|nP{slit*3G1ZS;Z z3GAmwgZDJjag)q^-Xo_!czIwuS*lzIe^zL+C=!SP zAEa6BlaWN}d=jznTaBWjj%Gs7=HixBX&~J=i3yPXOuN5bBH@Fdp>oGvOlQp5flKFb zVWTkfO+JoJi!f&2j@QD&982M;s0>rNCJ}p2w4z(EGOX;DV*7K_s7Rd&u6nSOp4oj9 z{_C5}e$tjFlG)E-UY9%O-&ut|mrLoi6*(Ane>`Jq@EyAo&tl=a21pz%D=hosgsYc@ zf`P0Yo7mSvOV_P}^2&#_T=zWh+4BK7B)tiy<8B^jA4-8@pB&Fu9sqPVbesWJ@YczC#MI(g=O&CHWgk3{idx?UlO5b=TK*UF1;CANJ1kN z8Q*mq;Pzu7xcT-pKHKJt3-&&s9@XaX-+pn%xOEwRb8g0D4O!y2>M9n5{=)Bv{Xi{3 z28<_&v3{W;U^htuTGHm?BBydlyI2kd9t;G}GK19h-*8!^6Wm`p{viGpHrMgdRnTy`N&p z+z>^Ee-BZLeL?(m{Ag`lBsG=MK=YG7LE&aM*%ov{P;h-7j^CgOIUhcNhL;4Y6Jxg8 z=o*RhHepWe@xz0fd3b*Fag4SWV@rMIS^n~G^s8kszUW;-yScf-=GGj-OUOaf?j5kr z=mcE1s)Th`@x(jN2W<4WL6mwXtXb5RbEjRMVqS7hahLzo@b z39&Oe$?|hj78AW&U?91h=d)Fmz4EL?aCI;fs-E1(9?m&uur!e*E=`B9-@?pIj-Ra( zJ%x<3dx2*9;gJ7h5vAKj;Khoa=s#{N?Dk5-3oGT>);%97Dc5C^K1rX|tzrth@({0azpFNQlc0cVZB25}r8 zL#jN2PAYqaHT}xW(J7oZy;YW3(wTzBlZD8{6JfmV(HG#AW&!+rq>O*e=3;$V9Y48V zhbfrhN5kScw(W`g_|c}AWT(uak>zsC3B~!`>}on{lWFXml%+WFl`J#9QVq9E3Ielu z1AO^f1p@c^5eu0SvdP&9W}C+1Z6{|cly(r#NsYo2&MkSca0+v@JDDggmBal`QFv;d zID11xhN-C%W1qearnlXOu#?+m7hXA?4U9QU4(VToxGQzEC&mVc4jZwFB7SI<`Up)* zb)n&?Jgho;pC@`TksQ$}!5P(JY--P3Qhvmhyc4>L=g!Td9y{MqpRKcqU3VKo_c%6a zSpif$E8%&FN}zar73!AwgXh9O==wAO4=*hPhmu89!p#eVJrAik!8_2n1t5Pm7q+}4T_q! z7?5)aA-4ritMq{Hr;T(E$CKVGq`Ryav`uO?0m9Gl8eL788)4YZBe@VcVRY{opX&RHfC(2@V#dUl&uN-IO-h#I^K@f6K zl!+4?CF6HVqE(U%+?EuBT_&SoCiIl^u$@AeOCijI74dNQKg#7Iq-haWt}%_CD8TcxM;ib5+q3T(#3pN#3D^af(ONQ+TDah&GV>#+)Fi->g> zk{_X*gHGuS==g-#eIf%nfMa9(E5EUo1F!-FmKcx4WJ zyP6Hdft<%o^cIBAY7e-O3b6?X7SHGE#vVj^1=LeB}rZ2VevxeFR!G9FgliZ zP`lwcR;@_@_i_QuO4ep0TV8^-!81(A83QIX7-v3_$Jxs5uq+t^G(70*XX`VV8ciJ_3<7G1t!3V=xbc+ zdJiPNt1;a%0fc`}i0*`UztH1*_R=Ovr1Fd(>pg zaWQq+$aao(0m0P%{Sz?FI7nST$3UopD$8y5!sFX_ah{kjo*HM$`wb#|CsNP}PUhjCHFF zTjbk?u2$Kwn|B7T@3}}jzl2lYQ4hjgSOdnV;?UVJ0&j6H?UJrfr1G05zTcQde&6#Y zOP2ZJEVbomKkW#u${)lPzB^IQLzwNYeufW(T5y@JI{2Kv11WVUX%xr%b}#yd4sLRc zd22t`nsdRAn_HLGCxC{S1e56E3i5Kfcs!?r^SRZcccK|{^3F=I`CU)lY}J?# z(pjjNm5XN+USaL&Tg0=>j?0eLgV*c{ME|`o+#3aMeSc%iU|yy1#$u*RR6NueqbJFmwS> zj)Ae|^=Z`a*$8ixma~#hvTW}FVa+jmvS6m6c?(2o-oUQz_+<3gNITP#l2{3wcExwL* zA=RTI@SNjZ$q1q$X^u3g?Mj7$sgI!fkq*B7z}>??qCx-f4Y)9}9xKXr!;!;oFpr%D zGi^STj@jR#_tp&N%hazl&qyC%bloTRKdv?PZa*EqU^IpvO>*b(Yvk~3D z>ky3mQe^)~XQEUtAKq~J&ex95=;#wCyt$wRstfZ;WyxO>nsybAdu^ug;<@jmFo3^m zhc0yPmWSARcGN9w3OV7v8^)RUkZXfB;Ik+L?kE+Yb=6~fdS^FDuq`c=bMb@Z9|F31 z$qF=1a)Yjv`K(T$GCm4O$EVvRsC`v1&YKtjN>ZQj*{NVsbgdXw&OgKtiwcPInrpDg zS&zy14$QyqwOj^Ek_vPKNYuV2yz$eB6+~;omX8hO{qH$UTe$^h|1AYN@3G)!Qxx1$ zi$ni%N%s07VVKgj8bfyMhI`M2FL*yulDT-=f|>T_Ckzd^60PuPJb0-eH+6A4u-_b@vN(fW8B3sED;LAN z0)>kt5zYBTC(Nx}dad zBJ4@=5;%1}0H0-&Y@J~O#P>)-t6&{``%whm2ZeBnh&8%vHSn^c6`y7MaO7RP2CHR({0PvmN}oUE^)19Rcc+@Oal0#{S+{^i#VHvw{S4 zfo3Uclyf=Gv$pVdnk;xUOL6jRee`=IcbKi>Qy;9c?FijLDVAvsC~D-)Nn zJKd8p@OLItXEX$j1_2=SHVF#E1i0B{h}#Ey#@ou}la=np5FM#R+_7AX@z(7Ey>m|p zA)|sH!xq?i@iM+R6e`Hp%7rKURdBiRETn&A=(#8jXk4p~@ug#^_{fB9>6*YA#L1vr zdOmpUvJiOvs(?izDP+LEi!M~z3(mDC1>wyXaA@a4lIapcUph1FBAXuG?m|zn8T<>S zJXH+Ty@E$9JjqvA9ayp=m)rl7htQFS;3>g9m?G7n@kpd#N>2@FMjNx5Yp=nQPnt}! zLOm+f24LfbWb|5G#gk}l#}u{k=qTV5#S51)p4WqMN4AhI*U9)SEsa)NDYIKcO%Pi zX}CVRP%uklBmMLu9mrWnNcVe2qk~6j+4~O6l8+$99=GV=mp^n?bryu~T7U<`w-Hy@ zTKYXLA3nH@hxgawdG>)K7|( z%klhyVYHUq4ZB~9uy=}daig^@{?(LY-OlmYh_eNxx_LFTe3LxeW%?60=1gK=HUmzL zn*@Gl7cp;A9%QX>Lp?PGut@NN?nrL#(DoW$)z8A|ehbK3&xx4w_zIqqt|y^SwBgZ( zR_ed*51F2vLp2K@;@8bVV4%{CH(gKCwF5U$L`$CAiD|UBdMkl9bGsN5q1FzUPjGWU zeOnNHHH{ zeGfaZt`9>KRYBjgK``&X4}d3YQN9b%$g-ZQt_vgSADcP0jsuQ%RKkCgGtiyeXU~eh zi5GQmLtzz<&Jnp!iY~>&bKz59o+iP%-cw^g6&8Y$WdX6X+y$dr&AdNJ;A}7y?&!B~)#Tp`RknU~{0Rg>cSVI__o# z4mN)#v$p>y5Yrj~v*c-P%Pu`wlPbi%`>e+b4~a8&4_-oAQ8GQ?FT;)-W#D{rI&`gA zz^EyyK(28v-M%Xhr2puG@}eoYr`!g|EgD1Z^(t(ZPB(2ktH$&!zloQA7DB{nM^dD7 z0d%#pK=NfN!T*l&#O4jqV@I1YM&6sux%vhsx+ycY+EbVW?`^2NHGt;*+5r3pj>Ek_ zfvSAv`ukhgG5=04hU=T#d7`0V^nsENo8A2h#7_HwMtnSeHLe1i^HX3)w=1swkS=hI znhM=skEv+U12mLRhce+J^n7y{hGQjw=Uq(SiiUx!-DLLbvL;OIOs8y4B5HYAqVfcB zEbrIH-i71YTVs)6&t+P~pSsfd0VU99!0|2zDqwqfB}h(~57y|yn;~%(#5q>vc$Wk8 zSichqTr&+Dcnk3EIgUx0d4*RrxC5`51Q4+Ufts_M)iAZFv?#Q zDhCQMLwhazh|4iJSjJJ01w4Rax8Qk#ND+5 zo3IRsjJ|-Else({pby!Z?Sr$&`_Q)NaPECuiiey+dHpi^prpd>tlg$CZeRtuA!Y(b zJYC$9#1U^iAL3%KjplN@mB?b_FpxBC0QZ{gDsmttEkw6p@H0%*9#x z3^geKDWI~)oM6_rXwrQB9({Oy5MtiV6`T|KiY^~^z)DMTT+?@re!Te#Bz<$>?sgrv z^NuG9`gY;@;$5II2kF42Ly&Dak;&Gmz~$4_c-Nn5<01<=*7(g=LTM5!`yAE%)BxYcAfqY=;mB4thg+mG>oH3 z*Le8-{a#$|wG~+||F(2$3>YgvrRN15ogenizpg`_Ux8V+U_!iV%dsNiix4zFy$t2hBlD|LA$GZO^D(>k!e zKLvE$%mvy!F=nH4C2o1I2eS|BvQgG$R9@JZcA32a^}Ovw_NoqR9>}6V?ibE}8vxVu z6KL4W(-;vsmmRBlhtaF%;4L+MoVegF_u20Q-SZyKfBeoXDUxSSo#wuad74nueFnB% z{DN_1M=?vOk#7Ib8t+wYB*&s{@yJxp1EnX+j1GE1r{Ojn%DjphGt*(`s1)Xyf8;zx zE5R^h4UvL6o~KD2;8iO+w%3AYubqi5+a8edWjQEyDxP$o`bGAbJ3^ISCq}{sj*VLh zKm32t48;q)K6w%L;;XH6`Ee1ZcyS#rcPteIa9NQn_FB*;eVb=B@dMC^cA}eb6wEhV zK-KB-MDfUdoM##s3*ew_a6&o5T}vdSr-& zT<_-Es|!T$X#;VuO+c?HzEoikfi2c6F)vM)kcDI9Tl-qL=BPqWI4^>{T`nYcTq>-V zBQWFl7Z^R9OJ2oY=8aA!82tAZO`pAtz1EvUCoEYEL)4ft=4y?OOpc!`JdeC_48!Bk ze5uoxM`YFyDaPz{7LgPbpf@j$x7kO7iM*0brvA+$x8makOMVCA9g#hPIK_N=LCOO) z??;3BgM-v?M*&Xxo(!s6V{ml22bkP0fqT2JLR~56CiYIlCv#_jT8Iw&{Q54s+-;6P zQcHrl%DrXMj*GIcU#y7C%gY$?*^GW8$I)DICMK}%yi$Dy4E5kxG%eozN4h@f(vxO! z+v5_i#$f}`HR?WIic93zuem`qxt*lr!3o&-w17rQ0^7HV>w!f5ATLBG6B7*{JH9m@ zzOPfqHlI__HZu@Ua%==6izhhuEO(dHweX^+NiYgGd@#Gk8&+<-DR`jwf$UVSf)Dl` z=yNIpyL2?s*+z|F{Oft;mBws##&7s^4MEc|3w}(LWyV@f=$cd`01W}`H;)6(k`Cfy zsc4e15*H{}pjC7~fAzKLSU0W&HZ1bNwp$d-YE6)5r^@uFXOPKCv@pJo^W}KFh4@2> zu;~QnJNTW1$&E5l@j(GD7rnxcgTgp|wJh2PYcT_Z%W#{j6zfpM`DdLX;G&Q%6Q5N_ zJby^SDRuxBOi|+vehUE~{}lM<9)KFR%CRiG4GyHvh%;1|cuys%K6Z5)|Iw|tRdl$RPagVmgi@7rU% zyJ9`>9Wd-to-!+vHVFBSmQ?rFZOE0VAZL{?@$!AbNH)g_yhB$&YWi!`dmoLiSL%5G z!o=A|gC?x^8>al`C!|7Y5{cA*59tvP1!fxy$m18c$nL&jaJ%*dszaV(dEj-pGB_Vr zS--}VU`=NE)DUWr*98&#ifBz5R|A(v30|8!a-Kg`=;w1exAn7_>-{TOE$tk97yb~= zmX%S@S`)>$7 zdi;RJBjLE>G{;^oQecnGTZj4=li~7&U+`127XB=7BPP0~#Bah%JSDXlr5?4>P1k?I z=m?rdJE@*bK%>=EGV9r0xR|&f<@C) zXvgy#v?KWlwSTxD|44*_F4rgBf8B`rXKlcqg{kx$T0oqC8gA{2#%*#!tcp|xMmvi$ z7Y^QrY-2U3{^)~WV+*m|QH_0AErfr9-r$1fM^xhcHGq~^u$y~VeBWlk9J>#={Cg9$ z7;sXflaBFIxVD>v^;`KZDsK~9J&#OqzhXC;du5|rV^p%K)2@{_A) zs%fB=HI}KIg@Vv2f>xp3Fjd+S^&ACcrLYT~Jaz|0)jrYkf-H!f5Qw*;cEehS6o*p*uu*ScJJbI};fvJ?6pq zf4Fj82biVH!rmYo_8M2OA60Ea=HhI2<48W&-zcY>&3BVYi?evYCu_o5&u&4*NEWgE z@)lOt+(zpL6}I7Z3tiw{ic$Zy3PSmQVDESnd{=G2!}ni;TCg}%@r2_X?z|1pUz|tR zJ6g7nwz3D;~w6=QAv{zKgZuy4zP*Kop{*ffaMZ16t|rSS3ddi zzQ1{gB2zBFy4(WrZ_32N>iO*6Spu4uv642N$faFDFF1ZKzW822 z6E}9CcK>H0k}AU}Y%Yb32clr7$sQVWOAZ_L|G{vQJN)o+q8Uv&MACN|ex7~>tBj9PL)!TjjPZ>eIp(d{YI&+DEys!g*NoKpnA<6G}bVI*QO#=ceyX_ z+A7DYb#Scic46$Oeh0#({jktf1^3O7!krVU1m}`sk-aa*Jn&R!rn)~ugB`bcKcq)c z^q7DOWys;NPlI^Vtdur-hk(iK({y`{7Tk+k$Vy&sB0U_(QhnzTtccx)iUC*2Sgi=N zKV~0KJzbTy#pHvpEuZAv7~$!y;Sefb!LZ2s3rdLQlbdRByA=QLGd7Pg#t{rYiwnF&wxiGIS3QM*ZgUQ7|f)ZPO=40_^ zvVhq`-&RSG@Rpmj@YqCpca*#+1b1$Hn^43GOfhB;l0BwZ>A+6%u^(^b>)wd7kk zaPKPo6w1K*zxg;uJn8j^?{I#K6mugdo`*}s1P{Lr3(~8%!{g{m)LXoZiP?03Xop7- zZ~xzL^u#f)XVnIMwX^Wl>?{nP;)6To71;FSKZ)_?6u1#C#H#HC8HJH!sr zWp*_*_p7*>*U@pzV#6oo?pQ9qDVdJznpBt@OU8hl@IuLrw`pue17tsxW`FsP(gE8% zR2eP-BQ9Ha{(lUeXCPK>7{_fgviD9RC8ZLc`#Pnifd--1sHC*CXljy?B%zY5l%15# zb6+PaN+c1HP?1W*s3=nJ`Rt1i=ef_huj~K+{dUDcl(rQ6BKHc<=l4XCYY+}@Mk25( zrU!21-@tZe6}-*QMJbLsz2*xA$&n*)N3M?Q)1_3P{Wd>Hy$n*193nOwjnFfm4{JZk zq5O~_b6f3-_4^K0tE5j8$%D1}xWt;zQ=am?Ji9F!_bpDs9Zd#!V(U*L_EwC|NT1BK zhN&$N1y8?GTb{z+h|7Kc0fw3+T*3haS*pP(#Og5BpF1$rgIC^dIA z$_~%v-8t$3tn@9qb>s{zEurwk#g$xtGl$vi8UjzcOt_ukX*zh@oQ)gHK)upY_`Kp1 zF1_`S=NfDa3ommlL%mLX{@-F|q~!#j60{&e?e?&2Fp2+{b8)0hjz)`^Ci)zMh-T1z zawqLQZTTz#d0W4c_DV;*^CJxP8IJcB8k1|DE7^Y4!*Dah0!y2o z0IQ?QJScWWgJXv5;%|#sD=;1KFw*0@<^RWK~zz(fB=)Lp+ zOt36Rnw<~Ho7o~qY5 z2Bj4?$H}noJC&HHr&Dz7qntK zzcV@?FJ@+ zKR>L6yVIob*;pH_JDvnGiMKd!<024g7K6B)5pp|E1ka6|poU``pI5JicO*oBDkMYR z{1;Fu6G9fmW#Y0?D>PP4#;-!D#M2-fG_5q4rAx12&ulLgnxRS@o~bd;H^ON3eJ40D z-JA3WoWkkbG?*pj7g5?uis9YkIxY7&=Hnz2w*RmxYqhZ$_I+#RZ+KWmb-207*PKu+ zxi^JzQTYj%2F~HhyVRDvA87^evLnl|QCBEX8wDqnz^a~uu+$zr9Cw7KJ z?zj)f9^axbVvSMqpD;T^QXNkVEo2_89|p8IOtytm#A@uKN4NBRb& z4@zR<`k6|MSxX8r*e%A? zPK=2$%~F*J(5OVpg-!}Z$&jB1GxEVSJ~v%JGFt<29_qv0cD zowWng1|4!U^bPNJ$#%Rh=?MJjTB*OPb_LlGoaLjk)QgxLFc`p~zqpU&^-g;YTTHL~aN;j-H}5Zn#dd>zn- zX9tTmHSuJ-kHZh+x0G22B(}zaIr6cOe4d~P;cweWou)NT*~>Xo1MkwZ(VJv*bUIBo z86kpYuc1hO2KzVHo!YOJLaXExdo7(Q_$HX1b2l7+eWV>AMTBoe4( znKBfszu*{Fv&hHgQbg=a8oZPN-Vu%;dHC8+dRBWitO|LLVTF&WgyTV67NXA{UO5|N z{)w_J-c7J~XfA(&<1HYf_Qma|}Z#wH@U^*&E_F~@v7mrpYlnhFf?Kf?kl$$D?THc@kRV`-oVS4t_f-%SPtDBbQp= z^J;oe^LA|B%`vhR7{SdQWL)eG&JT+Q_IU$V@PnZI>SegNVmE1SMSRaWL2I=hL6q`1 z4l9VU>LKH#KiA1>cKI8=R;~tH{IrJm!SELmU1|=aC-;N$$pmb%zKguP0$%#b4|HG5 zA1jL(EAS3$fD{8q(r$&Y%XQQ`|X_y=wqZjBmj}ML54Wrv)wV##zOfo}hjL>6qk@h#fg?D5U%d4#eEWy1_a~ zOUOmN7%l8r&E5BfIe)x=5boQvg(!)ru-~p%lM4~2`6oDsux|M}cyMSgoo=Q?9xNHe zlC)>o>^2U}6s}(sX2=|WUkr2iEPyMvw_wyR7Oy^S$8-lpJbYb@_4hWyIZITnc@ft@ zUbqbx$2X!EDWOw#tFRN^8{o&-sZ8h73@Woj7VcQd!W8GnWOwOfTACriq_};-wcI|- z@WmviX!=c*RE&iLiBFh+Di_4oX~Vk2sVuWLiu;z#r6#r|WGMA0P5XP0h>t5`zVmHT z`=2ws(UD~WKB}U-lo-RTc?EVaf~acTR$!j;*e`!M9^OJOE32N(&Blz$_CZIc!>rYS?V5Pmak};8E)Va)t9?Yd^1nJ(*vzS7{MsP z^AhmRiX_74L`j*NI3ttxitgZMSmz@9sV&D@erusd+Khx@o6Kbt;aP*r&T#zQR}Lb% z`)P#pa(K>hV(r)T@(jcRKxLW&*Wqf=5C>|}`tCC(H7cqvxogFJ>x>yd?N z9?-65$ow^a1}`+`!ngGE@T|QGzR$=-jo-5D)wW7Jruh{meW!B0d=2*N#8bE^paJGe z>aow?9|Ys>F7(kG!CRHdm=kvw*Beb^N{^ee~I)qJQieSnQq ze!{?;yS%r0e<3uam7LH~!N!gVRJD+1E>6D=S^^hP=ZHz#utwChPA;xb5|f_WE^!>FZ4NT2uh>S@X%p zg_B61%v8)-Ux-V?ZJ@@t5$>Eh3dOd1&@{;9?WW7Hlo{o9zdQ>MxgMraU^a}*Qf0%p ziLiFBEjU(SFPH>SV$l7T=t^D0=#Tfw-8&y~y7^}GU$GjZg#*z{>=Im@5(G=kB{A9Q z0`Gv{cAn^1Es6Tz3VCW1*sXdDk>j!0edG$v3p!1v9I2x@?J+RA{sI%|Y!B`Qg6!@f z4fMUz%a>@oP1fiZ6L}iPcmFH^E3y@t-%JEJitDjV<~k-Yix6WtF&MOHO=Q=)K8KevwfIp$Ex*-n z%PtMINBaS3Mz7!)^Yj96oX|fMX3S#rZ${CPUKQ*O$-uMQPlKAe5pHOHNliq>N-}Ub#Wmcp7(M?;dYexvPBsu{qx%cMx=Qa3RItP9Jy@ZxZ z&i}RKDLmVkfP+JMWU1R>+86kk8f;Sq(X}qv7av3G_gbDRwi5hZ+EEJP$R(RR?z#Pg;UBK>X4eIhB3*#~$EVRyX&+9WtVRdh!l_c{TzI0S zL)#x&L3>U;D*DMYT)YsL9eItBwL_%v=meaqrp@e1uYfb2pK<$ z3txA`?jsF6-;6ety%0^Om2~2j4$jjxhwHmcjDSDGa(uTFQ^+2fWb)2VmRL58k%`?R zjQYn9P{%~-Y$=gV8*&ZNm*m-N#Wv>jkyqcBXOBA4sTjad}in1QU}v z3dS0xIQRKSUV7>*MzKJYX|h;B-_?I2iC^B)%-~d>Q4zNt++|{|k~x8$ZOY)p?OM#v z`mJ~+zXU$JEJxeq1pL0EpM2k_z)X;nhAZ!78L!nn9OG3O6?7NCzh`kc{LJ4BG5)jg>xBa}!>EIn zm{-!Yy^^$1KL%&%{6{xkSq@`w;&>I$Zox)+i8%P?a(zibV!HVtByfNG5nBt=0n*UW zbpwA{hU3%ceSC}FTvEATlMz_)2%95{$>Mei@Mv3)(=4@-S?NKgFGmq=H)*Dz&;*kE z=U{mEHJEmP5M*M?At_rEzn-2716u@`>mwX5&(;l+9GdB^Cx&dr{(Wfq-jb0iH^WcQ zj#C;F`gqr%WN^6z96T!;~2$L8(>Q*jMOE#o{C9S^0i1YYtku3LqBZs;*R zPH`M>a2CFlYqrk$v<;)p-r-5xP3WjJh?y_%Lvr?de)v*BjI9`h{CndtWmXZsb$J2V zYX-pA(3Eo{R1!InwQNY=FqJxT0ADODqxr3C;WEcabF5IMo{HtfpMJ+!Ga+E1le{edhV ze`6^5oa+mR2IsPiWF^=QzYc)$BT-Nbi2#?U(GbUReOK@7BWD%wqt8_#wsZC?@ZHbA zwf3`+X=)42eLu)M4?}R~1>zg&mFS*vo3zS{z!jScaFTmKT6Ne2G88MS; z{^1&7=I@yy0Dc+XylTe8OP+$X`h_f8Yt7`>sIg~{oPtFu2Do)BnH-`vO!s_Eg`O;o?21H_kzv4=DS7;S}5Fkz_) zwl8^(&I3;HQ?(pQ|4D(Ygf-(cZ3*xe_fx@@OPRm$xwP?1B+y%zXw?lh47w;zUYPQ$tOTz@H5n>}?#fqfGvf+nl{`C`v)ka_T$ zIyK4DvZ)g>;%6q=I>DVL%_+kC#qDsjE`;6=xIp(7D6ub6wdn^P9rm8VW(TpL4!BZZ4Fe zz}_`WDtG&HoVb}zq9N;ySqC3|Y`Zj-f9R4DTRgOsK8e={19N}QIkgU#d0KF=aYj$d1!Xl zirpP~1Feb^_?(i1_}89bvp3v_)>0ux^MO9ZDm0RL(NavejWSHnm1o(vijbW%4PWfs z0sPJS=={(TzYLs3N4^NWHC;{vnj3JL(hbfrR6;v;l!5pD$K2V#hu;r{nK|99_;UO^ z<_}K+uYFxGcw`xGb+IO!HgghN*^@~x8Hdrd9o#U5Fc*^?r7%C^19Zu@;MOR8+`Dl-uFSlK@-bI&fpQc~ zOx#~CcS;`mnvH1a!7*-!lqM^QDQ~)oapwZw(SU#@!iC(j~U3Y9cYQ39?fgAq8@Y}gK(!fI0N=nBtrH zi+BPnazN|(eYn>=7Zvpaz;1wH3Z-tLiF*XJ95li5TQx+km}6)4oB<=>rSRi|Kk96* zq#K=Yqqd+L(`r-*cAF&dXy_3b@y$aa&vDX`b`R2qT`_+BIh>tbM;3Ssz_nFc@GnD< z=|7=^ZT8N%)VCbW_O8OhsfUT%;xV%IiWu}l(s?T3DDkCEi{37p)`nQI@u zQd`ebbTzJm<9Bx8CK8Fg&vw8r&3N3o;vrnzG7JMwM(CmF1ZgpUse(U`Z}4p@<1Z}A zJYQdp<$vE`^`9f;R(29*UyA|N{nK&ljXKD9s>SeKLvi~*ZuhZJ0y>UN#<=!3B<)cV zw;#NOgWn=yZ%qn}i3ze3iihZQX(7gP1ZEBXL;044+Qs9LI9sXl`dcR%v|0 zB&b7wgMuO44<+0+21m4L%L$mPxhw8~D1ZPyoI)zl+N=Gj@SXMzUo5Wa&ZpPg~; zqg7Di=gfzraWu8;0XKJe0{&GhsBm$F|9s^f*6`3ny1u#@PwczRi;$lM-pAL$h+{IL zax?IPw-Wos;R)0}Oa@i=$q?8aXRRL|$^W=(67+=2GZK@2W6=gaY@W0Mf|hlIx>6mU zX8FAL@qT3Bj~$e*RwmiqA93cqR9^hj7LLE}gRY~qn2UAEBy;x@;>0#!uR|t|S1%_b zzo*jb%X6WNiZb?Lomlt!0Blij;y;=_m3dINk&Rrs2_m~6;a9^CVAkwN=IFix+k2{L z)^>x6e-VL@wx1|7l83&7|LFdh1i&K)v9!DqDioaXnfD{yDOLytbvIGGr5PvR*o$e& z9ACs!p8fP3(96ym`*MoGXz^!$nvXQ&Zt)79eYcjOFperl z;Fb&ZwEtNyOiof}%Qe*4)u-#x{)-@^^dcGK8~7L(*a25+9q`%Z$#7|$ca7MqC!S-X2Gc(t;;sIYQsbilWJKUzDb;l)r|{7lrQET5&NozUic%TDE_ilxxribuYc9dvTtHYpDC_OK4&ax+y(R|Tl z@K+bX$z1PhpIQ_~OdG(8p;;j8B@TN$Y;X$q4sw@qg6AevS)Dp_I-vCkQ=9ff+f8w{ zi0l1GB@R%nzjY-?iq)AqK}lS_z6-v*nuM3^Re@J;!&=SxMteRxv(BNl_}y$DZks*8 z%hM8NZvPm>-PXgfRp>0(M{u*Oe_T;oC5b1@MG1#qXtSTLsl(*FeuztL1Hw*bv^`p3 zuTdHFhCjejR}HS~vz8S{?u_H9d}QcONS zx?GJJF`o-}yam}=f=gk$nFs84=*BWNN#?s&5b3rV2i=E()aQX6e*d)(Uh2BS$V(-r z?W8rkGT(upXeL6El+{_I4XTW}U=#Vnb-2uo{_bGWwQvWlSW*g}XDVRUR1x@^m`EIS12E2_1^Hid;LE*Hax5SgT2!@J zSB}Sd%DE9{t;j+}1wm%vV;*g6_vE}bRiL!K5vPVov#SoupwY%CY+o+Ily3M6MC%dB z<%y%eMJ*QQNwCG{dEj4ZMM|y+V$Hv7C>r5Iuum?2{QM4aF<^#~F#8GDlGIDPQ8srm zJ$6}x>GCPUtfsv@my;7&gPO(E;q!WGRxle|m`L2wqKV7RM&Wf#BrZ;R3#vPVvF1Z6 zS>q7`e{Hil|H>^m{mTP$Fd16!q|#NJ>q-7Yt|O^746aSjK_ImsGvyS~qvQxt41Gct z-`q$ZIy2xor~sZvPIHbhj`t<24b^80h{=cm)BnvFcQ>fROdmtW`*8>!Ke(E`a94#X zZ=cLG_}k!6X%Pg!ucG@3PZ9m#Rp_!wi3!^IlR6Y%rN3t!!imq~@qSk=ZrS{Y^Y`=< zVbM3ZE^!r!WdyNIF$ACYEoW=KDl-RZJ>j)J0OK%Ga7;*t6U8y)QAZnH=w*Vudv}Rs zl^Irw2bDdal?<~}1R3q$63kycjvY2PomQ>aX7E)Fd^U3DTW7VPVdE|8%JHvsD<`oz zUkvd4GeyQlOBwEKuOfl>V(@{vC$(A6xuko?P`2ER-aNF5ZjuinHTf#6q@VygjHy~j z)=Gi;XfSPheg{@f`39*%uON{N?uWO+bG$gK&LP4M7I(@ z6mr@{s`m+@=)5zqDUqAG1;54{(k?KeKM8r=&q$$-9P3@NxLlzx7`~fNWK`dsq$YwJ ziO?Sb6nH3!6Fn|L)X{mM=cA44Z);%N!ZM=&i+c}$EudF#yrNIEilN7L9@uAQ!nPJU zc2(Op`ovNIrzy;b&Hs7grcVagzJ4Kga9tIRdS5uOJ(gopE3u;o6*_ zWj3lc1}gUG@Gakbz*~xP?7Nv;uFM+C=>5NI&>7XzRhC3pEkv(*V9lp-+|*} zuOo7rqj2MHGBFFz$CScmNc3^TPcOt+3olO?_j-lj`?|3DbtIOxXQ9xG=@1|wf%59q z`a{NTt3SQQ@bu0A21lwgM1te43}ukpOFj8UJN}_fK0x4t3Tv@jI&7!14NUyYV%Hm6 z9FNpzeLKx@>7932F*SyU^aVk<3dg37u7V(eiOgHCYIDdiDBA|qyY&i+NB7WsrIGZYpc7QCJ&uVFt6}k&Fz~r|ubWf1 zb?EyW^yJJvQ1pBh9)7MQ3VR(e((Y*aiRN&4oq7jkIxQfWW7Ag^m(r}qv9LY8iRi6y z!(;g`h|I-Wo`}B^tK`%KgXasN{cR7bPU4tGMJfF7g=*}~j*}#Fml2%jiDB-wQ`F0& z9&N6C<;dn7iw7Vee)!*5SZAlCB&Z!C|3-^47~mUshi1dm~UN)RkAn~Qocrjgg=8%0pgBPgmz2+e^Fec{`}u89eM*{h#+cz1K|bFrYabLFt_S%X6*hj3BM7dT zz|MSNOXobT1^;a|{Pi5C=v!3`aanVh{8`~bjrZxXYA4kgp}s~)DdRFGAz$dN?`3de zxh7NhE*kgD_X3LvQtX1u%509KFVX0C#ExBMI67T~waigvnWV2EBoPW1*Ce4#zaEpa zu9L_ao1psRFO>8O(3}*`6C`zsXC-Kg=KW9MbL)2+HP|CjV_m zI_kWN11Q%axV#u#1Qc2GJu=MJ)d5&AH6Hlh>tXYlGpUq}q-V5GL**uWoEwl%ZXP(u z`fVS>ihIAX?q(E>fAE2iYxcu)`z@HMItNySOS9tlg&89aL735LOIvBGMB|Q=f~;tA$9m>bq|&f*>gUrOV|-D$Zq;`7Oq(=hErc=vh5G| zg5t9=;MD}v2e$%f(n`*C^yxfqk=Vd_9$DgkOB^$1W~2DtWFlbyjno&JFsk1)!L+Lo z-$u8BysQ(@PYu)Mm*YSDd@I5qJIzfSn_+u%f#LB}7~3*;`v79INR~IzW@S zE#KMVWNkR-j|TmG$QfM?w{mRoMzWq+z?OXW!ws$Vbg9Zk)NivZXDhwXWTrOs zO7+s?$_lK*%BNt_cmPc63dp2=&0zO|fx>Dp{B!;ku8wrZy?+y7aE=xCeW%MidV%Zl zUEfcpEN#ITidQ%f$U01X_7#|eeuFIH}wWtykXkClvFT8_}h|5&^tSUryMZn>` z3XEE1H+grh3oZ+8APdX$IW~C<8T&p&<)T?II4VI`_gOQKXFLPR;c^(~tAo`J18ls^ zaTZ-RSsyYUCDMTm_s$x|ZE6qJM1xHED%0z;#hd+99ikONv!%j5$2?3I;@$z zf)|#`hsV)b7`gR6npYUITf|gAN=%o{J|oOL-Dl5tTl@mgH=Kc=D_(J2MR7(cQvrQa z)tP%U3IL)4$lrhjIHRKh=O0bMqzHA?5OL#~dn>TFPL9*HE?bC#$#?w0-4mi^yZOpj zg2?ZQ-Kc-yJ*h5j`PG}Oi2HmPf=G_!x z_Y`S^g!L-yjm*Y#YYg$*LIGCX^&INErQ+U}JT$%@hcX!nXi**v%++FkQi&Bi7FGK>}R)?wZ0G5-A*4&>j`3s_tD9VO>V7FH>RWqvcUZ=sJtH=T*{F^9ii8?l20w>cW*} z!0R#O6I1Rizv}xIuN{nr_$51`zOn-ToYI1}L>AnSRpQf}-BA6(lRX;{feC?w*m+nS zg(FniuXE&?qsOCBga(noK9(M?@PoXniR^|)_t4Bi7LJS$!QB3TM2X9a9BMxZ@}Iv# zZuxVNIG+wS6XS433JdcqL%?O=7rJHr#w}Gy>C7VV=-vS)(=URt%2OEc4CH$`+QDq< z4X0nqup5=^vGnUgMypp0CX^=deg8X6S4*rV%Qjtv`a!Ng?xulXt+d!k<$ChUT>}5R zP!Ahq(@9}K23@mLgw?(<10D^CumL9TNMYA9)c#`+AA}vCXx~}RldAzmW;txAdo4VF zKf?b#E`;}8j^M9n8D!THGuX}XZAzC9lINt6r>Qra-TE~bBp+Afk{e=}udR+Pr>~c9 z+8D`v4mafe_25|7=jK}JsuZA7`(eD@zL6cDEQ>o!R9TzB61ZI`$n?mWgMq+h6t`}t zx@z;84LW!6lj1m*{P&n2)A$j67t~>hcm%8HvjCFpr6I;omc7=&xg=k4ee;HRY?1s3 zIXV@%&fXfHzYxZN-_EFTJ`g|OET!wRp5QiBH8$nt5c)T<981`eo%c+Jc`_cw_0m1D zD5eJ)3ni%gti*9UBS0lunsM;{kDQXc2g~}p_%ZRRn4&t7*)a1Jd3Zsd{I|CpB~%u& ztEO=Ld5-V%!rB72mY>B-S0BKQi@Pz%>jgvyYnHnw_>qL_c>L>MgGLkXqJ;lvdV%AV zXlbv&(gRY=i_r71zs;BI|DjEntqenJ;bM#l_Tazm+{a}y#F<8y#jwZ55IW+XVSA`L za~ifX*(F27Yr7otW>*)9JMf1Nq(!385DPoek%4$uf}t2x^Q*RF?e!y8vW3>9zJw$hYr8r zSd;RU-!rB}@`XZ4*0=^Q$L=kb%ln~jLOp6c5G1iys~}=xJ37zl!9JDkXj8=b^x6~g zq;?3*%lQLFe9U?O~U#IUr|Dk6%&q_sy2>Vpy4|p(!B>l&Aj#aW3HaG8u=7^W@ z*DnSXG~{tq@*MvBlm!YI#pK}UHz?+H1D@q=;+ZTih687~wT{4(EcjM|ll-%q@T zJCpPAPIM^v7E2J#-e_FgJPQwb-LRHD`2_lJKA3Qx zF1h%a|EWQnxB0m^knk4jA-E0-4rW=)XPkn0eY0qO`U-?3hB_M?!h-5>?2dkp-UlCH z&~gE$@3tMp?X@IL!V}3U2`{3j9f%Rtn~0F^AjDoPM6rStylL!(qgUnG4=Tbq`e_Ev zx|W1lDt!F!?p}Ubn-)H~{qLoW$@>gidt3$v z%((2=$%Ty0M^Ed-BU7N&?*-gmpTiHDFbkuU9@Fpz2{>(F2}m`SksN^^aHNZ48j4#o zmsf~j>vC06pZ$aL9JxVu`~l(_T1JX4d!R$r8A6v%Mwiix#CcmPn4F%+R3+#_qG2h2 zVV4bKc;O^@lg}S1B!7$v}anJRO!SvASb+me_rJN7d&XWNkGp$;kAz z)alY;uosYK)F#&vxkgc@eEAIKYHbS{1r=CjuoP>8im7koY0ynjV{#r!vNQWaP~Xd( zY2PS^+qhZ7G=ux#$8p%b%Z1^(m=Q~4lj*SfcKRvr7e8g1BYI!eWHx3CGojN&S@Em= zWK+gjw9!(5k-_)yak3~AdiEQAdEJ!xD7F>Fixt@>adoQTkOhejXSp*l0~DfWkQ<^= zr0U5i%rZ7+ej1yxrqZooUaP{|7n$OZ=c0^AKrBuVxPUvB^uSc_5)kk@0xA2h0>5Yv z|J$b`Y9o|9XoqMfa61QP~;yY?*-o_2nY9Q*@ti;)|C8O5w=57iI65YQhg5gV$|d zAl$?C*;54A&q~UmF5^Q}l@E~>bK;2H$V~9I-;F=6sxlLgzJf>dX5&BE5^zyX#{}L3 zYip5ATsTV{8=w~~Rt}Q<`|j2iU4`KJrkOv>t(N@P?9bgL5AZ?+2Y^|59)7jea-NI3 zFc$U>v`9M?&Uirz6(7R;-@l0N!5R|nmyc(Eyob#Bl#0sPW47@XUgP*9Zbzv`54F^i z1;Vbjt3!TQ?37N`j*0|Gy0=-c9{w{AtcbfH%lHbTiHG&hz zfZ~6=N}urm(Aj=HxZuDfdc=_9Uns1`Xo)y@^d^Je`|5|Khq>9@X$96JUy%LlDa4-L zq0cjyyNPR^CCjC@E#@01#=`ec(b)TGn7se~isv7C2Cq!kWwxFZrPccl*?;Me%A&^p zaQpEGcvN;Zq-!E!f|bE?Y>ZbWzLKtT-3&egr>s1K&!Wj`KDpFj!Wb%MK&k*mvzZ`Q)pBQ8j+J$xDg3G$_iL@A^TUr|Po8TBWq!k^BBL5@Yx7I{|q! z&fx0%u|(K85Qk;{fyW*l6!4i&Hf{OBpY$vqk{#0VsK;rtrfDnG`Ya-~ZzZu}qZ~9# z{UK(ti-?btEdTwn1iY!M!Cti3%$J<>2DdwYPCh{pYT#{ex=LSsli)o4O~z(A7;<~j&B_s>4YmPkQ>j< zr%GGrwIprCaBeoGrPRf{JwFS#Jo1JW8}*oh_7wWb-H|wF7odRDC~@5($m;GGs&1*`!_iI%``(O-fsgU7@&#NGqQ|)W$iqWV)d1t&VEJY>yxDmZ1;2)a zk!}|)yflp5CnaC=w*;%#D~C;UN9cTc53*%Qn9bXl3~TNr!XD`kEYKC=98p}S@JJ^q1bbXy)dXsjIIrT?RJ5FB0P9=xaa7L_ zMZ7gIlFMZ{C@rDs?`DG3QBU-GGYJ#qGx*{=M8M<7bqoqN!BL<4D6am4SPXkXVeSrE zbWssjFY*T21(js5@*+e>{-Jn(D*NM2F}}WhAEwPogsI=3K-JX{9LZ0>0a1S#A@WSo z4k`A8JJ)&U_Pu?@F}RVP48PR-$-_wv_*CW=?k_q63z++SmC;yNy!2 z!ed}){n^^u&W|kLdzgeDD*&sWf2dX%LS>sTpwi;q=zUa&Ez|F$UvHHXkLK%;`NWgR zFMkWOR}I6gnXBll^K#6qO=Y~JW+Ld@c!wm~ti-!|t}y;chre`BHi&Td`YLTxMxuf*xv{vyGz~!|3obK71~jeAz=UkC3emFD-bh59_sR!q1J{xUZag2 z(|!3GDw4}|v_lV;@@|s{yif4iE0k0h19*PsT?k^LJQuZW0_lS%v%F{DY#`KgbpZQ@Ad~W5(?YpyHM}%t$MmCGi5yexAxbt@)$t#kQ)TmPG{9!yCOK1Z4?S`xu-asRyQ4-x)bb+K;av4= zjctf%MG6?$2r;`FL+IZRk8$Q}1~%x(Gh#aw@wr(BepAbZ8QKV%zs_LZuOE1Hx+%Nu z(j53!8-(tr{=~sdlLVOC!&WB+_UzCtDl!9jJ#-ekg|f-Ui}m!O zZ7QCdCyfrgbEwJjSNc^OaoM_JT$DMT91b*v$u}b5E0-^vGUGXX8Vx3|C)eQ0?>cNr z>Qs0XEXFiFoXG9rzTsbeC6X*YNWQFI&+M?dMKg_s!7%kN6or^zPPj8(eJ~AN`et)^ znl#*_9Yd@PY{B8mJ4|TpC6|};;T_kDTs!F)K1sR+uJ2Vyy>B+mx%3OX)8?|HlJbnx zddiRN>cC}E_28x@%VwN>j0@cJ;mBSt>$@|DbVN&mZG#f)Fd&R_#~OLA2Zmq?*Wdm& zAcZN~ePkK$AUZKQ)U3W1=YKQASDi`d+rd5SuG|h{&pdX#qaQaLrV)k1Q*rOy{fzy6 zO>}6uOj14O!Ki5tq)uG|=Z#lG-=b46eP1vNN=U-X;bPR1eu-~JzmnEvl0;9s1om!| z0!iykvU{%pt33(O)zKHGIIhMH;dd~R<1Y$!gi*EAl1%Cu2{wD3G}F&{zhzYvSUH|D zQ&xF`D6+xiflUNHvboBCrnrQc^6(~^+2O+T4%K42Jj#gH_e?l#9RSrXSMaBlJXy9? zls>5~fbOhuvi;pKa#Ugr*e}goFq;m?Qa6#!f7jvqUm0}cPHtv>{3Gw2u^&8U2BFDd z3Ys;Tvc<#s*mhoo@i#0XOU)*-Z}k_I|JKo=i#-87otX+=gGK zc@fMy1=+E6Vc5iRik@G%LocTaGdDV|sn?DMnvlt0va1riEq5E5KE6(#tvLk|s|RV* zzdU|GwJY|1e1oO8^k}~5H8?)x0a7QpOiSky98CAemVMm(J9db={`UqRZYn40an1bq zh3(cWvreNA8wW*#1DI-S$hZ~=!DrzgR0Qj&?Z?M>J*yP;?E*1#g#xH;6lQzhJ|RXH zA?W2E$k*6f0Z}y^Q&OT9)b>2*)jt+u$__;0g4EYENU{wwJ&#)J=>CQeVt44brBiXq zydrY5T%NrZd%=42kPFdF(u2^bXxy2k!Ym2c4QbXcWVdrFJPJEZ-fljP_csb-md9s7 zM3aF)xnj3Gr-)X(9d^d%~YPEg~kMSmUa_QJ>VX1cG5jsC^$|mW392o zpn;^!p3f|qPe^WU5R~i-q=&B;5mjy;5@nl)GPS>n#6d|`?!;T`N&c6x;m%H=lMAtE zeK<~%5Mhg7O(mDjIJWse4QBqTiLCY~5uBhJjT-ar;hys4#NDEu%-(v4o~R23w`^%_ z%%4%^f|$DruV`fj8%-qj&gSw38_Zy5tRdU)Eu6+qvN9-bOsnlVo0>)BwTr ziomE}2R2}U7Bh-arz_69u^PuiKZKYG{+T%EW(S_yR1DYeo5TBnb1*|Xm`+ps$8Qz) z!#^uRNlvaZ>D8#AmAmE0yWtz<@lD3)^pxZNf6xX;p-H%~RFm~6=|&@N_ac2Qp7vzl zM~QkHqBFb^4mHX%x{mRnxs~Fn^yxgePrl{lr&{PCt$*NaoD7*M_wc`(d;I={ub|cN zoE|j(4O4D>B#Z9(!PC7ti0xv`h2@>3eG1~xgJAd^EX;1WeH4es(uhX*5d6p$XBSvY zv$k@HIK7~oKlPX==!aDj`&&Iw-#P}rWTz3Cbs`|$5P*G)INoE|HVic$#!}B=n0ae0 zjY)K5j$OG;M>0g{k>yK>P>m>9wV89z|4k^(p2!#uRfFt?C~z-(Kn^y3#dXqNFz0DI zTv;THKXP43kwyTW#qH!ZM|8;4+j7j4)l%%EQ-aKd|6Y^q2nS$W`M9$q6r3w3Fvqt> z;nCZBOE;|&-3K@yQ``pJ!M6`>RC{1MaRcQUr?_c0O&pFS1U)Sdoj;8zzX#I8`b_)JP zH}hYAlHRFRZP)M|7Lt!P3}gQ0o62-_~EFmE{RE>d+W@ z-X4yhB3I*`Bn_&yxwCqCkO-@iCBT|J?1D|3_h6vfe;6tj!}lsPWV-xw=zQDBBxUb6 zvf-f==Tjaeh32(TW!Hh>;nn=+%VO-OZ42S)St0iIf3>9HFVfMEl~irj9{60Fgqgak z%t3u|rhK%E<2BoI->;_FJ>w2++fWKWpH0LA1DrqpTMxwU<~rfEX94~gV&gF+Ts!%KmTK!vS!Rlh%B5@ZIB?XwIDNFgA zMe^ys>4NaN-+^4-JqJv#=`-JUatsgsBM|mnkH5zujMNl#;oKw5uGtDXqW?jTii=NbNj3# z(Oxj3EDRkx#*iadK+GC7!fJ`2$NOpgv$c`fbi$Z?S@#{qH^+d|;)RTB(KzqxcVWml zumpQ{&II-TCsl3hbwI3KjD4>#huuGR6Hmu0Gy3(TG}S!`G`702xvl=Z`{7!aTVDl0 z>8gj&v_}~mu82Xj`6Tw5#YPA;tf00hw-A5Pbg1H7*;gy2*$St4>d-b5R*jyc1^SK9 z7pllSy{`p+yIj%M=nP~{bAvzCebtA?IsW6h2`q2pMtFqFnY@u z@Z8V~dXHJ89547v`Fou6Y~;lV0wJ z@-5k*$f52pA2dNdpCa;^Ov0@l-$-@k9lC*=efsi0p=yW}_{%PV?+c3f77Yk*H#(9> z7j&v%>^)ifRF$spuckRURy^5?F#cufPmuk^3-X-R7=xh@$le)-#UpjtShgSTR43x1 z4xr-2kMa7$a5%7;b6B`!VqBUPEcg+NxpR(kGi7V`(xyaAiT{fgnFj3Ji*L!Gb{+)h zC}HMqP3Fn8snmbAK67(p5&5ru19ZI;z_j04_(!}0&g)-?_ukSq<{jGXpMi1LA5+PfX+*sC36?n! z>a^k+?UffM)wS2LM5P-0Q|2>f90S|1XNc_cJ;17E*>Eo4AZn7Bj~{>C;8~_PGx5BA zxNg**o#grweUJ20|Acwe&Bv0F?HR|l#V!yoHVC=#@?1Bt299~}pwl8#ux86GdRF-p z=l$iLql9sOa{NLjiz%iC+qL2Jwh|uGvk>|YbdW12FGEX|D05FYjgHw5fNQ}=h+dS0 z8Fz0Gm%G!j=y3o{5>w_pUila$QwMJ!uvoWToL!qE&W6nOfPb&G8Ncm5a640w3a%~1 zc-v&YuAwVGoi${AZgaeY$GteOQ-GZ~mFv9cgkhs|J<*@nS=F4JNeqSm!`24wPQO%? z=`vnTxBgLOD)wIjISmyy#Xtz1Z5N{0VR=}8M-uF25n>cQg((cUM&8a5AR9jzv7I}v zP-lI4aNh6*&JRy#roM5-Uy1tA`MQtX2#kYMT)OUH$Plet`i#Hg-XhqLD1-?Y?vWQu zRGCN*DJE$DC$u5k$xY*55SYxjdXW2^UYq5Mt}D2+alQ!q=YSTx5)x%)Q>B^w-L??N z`39MpGVto?6kdu(HN1HFo%f$(E~#lLCXOSGR_@BP;934Gc1hg~+#Y3vc{@_!`@O|v z_`L+Ycawt;7t63{pceO~KF6(xx!x#u&uDzKnmu{Xlr1(FXO_H)$I6H&cqzFJZF^qf zz$J0UT&ETIb>6V{(PScOD8bq-PX0^ zRTdtbPooWY&7iqw2AkKUiosL}Ms4!&ZciB1T`0h84R{S&>!mT?bU#&`BF=w$(HC}R z39@NUoKy0L8XL`J7(HjrBFiK)Fk+Q3dtZ1qb`{4#Yt{l(Y?#fvlXM1u-T1-fAlvX$ zV<}uS4}`!6(}`c}Z{!H75H)!NMz)0E{FSlbr4&rBxgRFul4CUOBj*dMlfb-xF@HT#J znkkvCRtL`qr*roc33kB|D^^2#y;b{w6qB>x4mU~_VvTYHt$#a4E<^~B@sR-D z2$z|5d3cKyy{#j2yE|w}doawo*~7&zyTSCPqZ32yBg@FHt7RyE%7`qCvd2$#U-{ByeS%l$3%ZiAc4TcAle99w+8aYsY2;7}7z zJa~fa5a|QQ4`F0))nmfv0L0zu!zA%W3)c2E;a-PxJo}kaY>&1nUqyNm+%kCvgT^OF z@{kE`9Pfwh7CBJ)S4rIFEhJ7lT+Zx70cQ90?XTlQ<$bX6gDaMH zMWY5!j1id8h*783p;GU6*rn@;jc%D(6PgIGIR41jX%&#OL#A#~lAb`uG?@o?D`){r=>lj5-^JMs#`wTl%V}RcogJG?w$>ycPgb7RF7iiqZ z|L%@KqP#D@Hrg>fxx>3V2{I0zbZ;Cck<^x%Z+Lt3UXi zyp}lzds4Xn?_M!{dc^{JwI1OzF&{KAo4{EA_6GkjT_~)H!^mmE%(9=pbX@H{+`r3Z z=eU{EC$H6v@rn;PAfn6;_^6 z{RRUU|AP0$mwdm(QOy4R5>s^qsA%&fZWeu$w|kX4Xf~yibrbBtr%eOr49YTPwcL02 z)@jTkS0A((I*z|T|HHdQ!O(U}l@|P64xyh2Whw&#K;3d_Qa2@$7p@veb!=XMwZj=Ouie8QyfBwWi&a&-2wuilkEYSL_hvI9 z<1$RIwGOOWdX}b)*wQlzs-QMGl=NTW^N(y_1!w=8$(Wwqi?SlonEl)Z`|Hd=uHh4Y zIX8irXpF3Rhz>2Cu(D4>v?6{nP z4woUmc5?~NEVpGV-oB%qnZwv(R!+*_JLBGv0G@1OI8;wKi*4r`V9jJMZ#VV@N`J_L z)4s>BNP0H?r~8#kS{Sl6KZ{}E{3@I#6$#31qhKec$!M>yfa>4Z;rs?^JQdo&3wI&R zJWogHt{J9>`_gfhk~ZElVNq||TWH++7OfJ~F?w?ob^E6bW~EO}0ZMEugVi=7?2)56^sB2L=d5qS>JUlxR-`er z=r#inDwW`S1D~g2oq}dvAvkM6K8?%`rU(2b=%$Tjq^E8Vc(N>B$(;p*0ZOc^fef?E za5bd~i||j%JT&nC#(lrF;_mWGyvlKP>g#8~UYRqUIdb9!_#3Uj&xYB!z2qRIHp;Oc zD_z;Q%_?k(|6yGJLk+`qk}=SHF>|=phAF49C@FXi52e1u-R{50e^aEHjk!Bv;P5Bf zsp=19dR&iR_!cR#iHDih8vGA!n@Bb{*WP~n0sWkLmj09yhN0xc)GN>rdG7jb_0zo^ zSJ{TSUKdW;%&U;xw-EohtcJ+ByUG03{?xX|9;YPPF(2d+a-|1xTv`qK+neCC=PBGa z`6;Gf>!OdN9-*b08vE1ZDEw&GWYRo1=H?VJ#$}Bt6Z^9t+^?n)eyBGa@?i*dG>51& z2`1-kbopNQ6UKf3f%Vd19*jtHxyJe817MU^zrmxXeJ^}b8l1%U< zq`vxu%W5gHtNI_4-pOW+Of;YTQksqt68Fe4uU7mr&ce&+iTwHf+zexv1*mWOK~g+_ zQCQSQN;k}di7%A!ZP5yPydw&wK0d+C_L=nQK{F=9+8DK11*Y=BGdQLy${4q*vQv{j zlBp*efZ25g*u!4Dje2*8t4}WM`@{LroR)z4_+FmOrX;HPPl9ZiBTtfa8$J0 zpz(bXy!6foXX}3K*lt?Y({T%)8y%;2H0#mpxGg^`_ZLw*r@;PDv#hodt->|mIDUTj zdnkRYi$@)A;*74_Aope&&MQ(O{#F~|_T^|u3moM9V+AnX{wNlNszJ$mJ;r60EPE@W zfDC?!BX*-fH@B>oT5p}#3n=S#|lin%;Y_V2{+(6@OS@fEuTgHtly%equklHM0#8wKUnSVcs-EFpL-)yhfKPn@AnQIrqW`slA>MbB^Qt zE$iGs?3Qw~63#ys6V#>z7TgMoxluHak%_A2&H^P+2(my zNX4=`s~7xDIfP+@w=Q@XxS>*H7NqKjVyJ5`*A;j-+%qD^^q+YiHZK99Xp9Lzd>y2j6ZvI9Rmzs4HrZSY*ZfV>EuzXAZMBYo{@u?VrJnAAz4s9Kmw(Y3}a+3bZ!f!|*Lu zu7?qF7GxF3GmhauutLezYOaPaiaftdt#(ag3%=aPPYM&6KB*F} zC-e(WZC%ZD=G79Zy%qd@OX|rZ%*F-3zrfbj*MSXQgGVeJ@Xe49&RY8jI=^W$d%g=Z z?5kc{@^KuK12?fUock+mQxmrrlm)v1jz41=PgjX}p+c)QsS7ROJ$mHMf3+zNI>hyf za-uw&>c7Cs{p2^2rE!l;`%i|MHsd!hpan2Z!VKOIK7;AS-?<%-9E@qnGS;49? zc(4Z&*Wcp43yqmA+&kZ5L>8wWF=Xov`e1DFbTl)nKvk|slNIkkk_uAkxO@~<9hyNp zxNJw`YfCIiyo4(wbwQlth{P6KgY;e{{<%&+qRV*j6Al|=d{rs#wY7%9dLtZ=3?b)S zRq2L?CD^T;MwM*5)8OWv$uY!Van$ks58CJkDe{fTrujzX{+Rjk(C0nV+)8v1oyVDRKudG z`7p;tfN}bd$LsY=#of2W_#3TmV6AB(7JitFnwN(#fABp{nzEkwW{=Q4SrvGgUZ9JT z&!ThbCUiT{2M#V<;7;}&(q$qF-B(;u(61Q0wiH5KrxRS+rGPs9lkmRfX}a;FBfPYa zr@Iqw@aJ?(!jZ8okhfmP{jE3CilsH=&+fkJ7F2e7ta*f3!+}9=_B=zocsMJ?7J+^w##jS#UF0* zW@c<42d!n9f~0JieMpFGTznPU|D7kR?REJP`~mVHwhoGIZi0%17;AG^m0iBkmJZC{ zNP3$`;o|{4NQr8Nq3e3+KGp`hruJ4|+)hn8oj}HgTCzo=fOBJ*VL8_WyzVQ=Wc0S< zg&oeQI?ce!;>H!8<)dIY_|lk3+S!QBDPMVC-hG^Z_QD8_(HuwR%ZFjzx_zK8It~I# z(jX-+!JK|5#^3x%h~9ov>2bqv8Ci z86@~3=TE8c0!52_-o_I@Q7BEDh89039Vo|Uef_a|zFCh$bjRo1Q7q?@%`y=!{FAv?^F6*Bo=dv1B zV#Xv#NU@n0Jh>JFY38LQ%7g2+oeY4Z-LmZZJ88JzyNRss*-G>x7t@bvm88zLg}>+Q zY82n$4W?&ASmV56e&VDQ)&9MRd1Z=SZH@Xv7! zJ@XZ`{C~mMzmAyvr-?5eAqpvpg(&M3fjQ-$F~@%b{O*oI&u21B#Ll}IvwH{LvoK>u z`^#Wa!C@$UA^_%}*P+by2&~ijf#aj~&{fHKi3*k3q8J56%F_zNPZi?*5d~D{h*~=p z-}50CwLqNeOc!Kox9ws2kEz3HkApbxq8gJ>A;4G_?}zpT zJ=Qxc3l3I&fxGEW#4WfUlIQP)CBCjGX%S9+QjTHr+H-K{l_ZZl59t+KXj)l>6XIDsZy$@5zkKlicmUk&ALNZL5P;jyOF?3#D6>O2821TVqo*|Y z9RB6g(bfLw_pcSaR+iEa|6W%QYihBD?T6#9$Dj(ob;r zoLroJ-2&==j3c)Q2{3y*_V!>CyS3kJCB+~#|T2;7ZasifW4PZuS2uykB z43-r#Ysxn~}uH=(b*@?KTRGTf* z4Is_ZE6LIEO?+oDIb@lIFzwKhFQU!dp8CH|5ITNWj3=uvb8Aojbo$) zNijNIe=+5lEXx#Yvc41E^G19+Frz&J=2%%z5n@8eo>0w)HE8p#khfLwI!vD6%jK@>jjQzOEGK3o5*Ry zRTwe-CuaE1f@={I8OxqZGHBBYit00-*)o|GJueD*=1n}+wiN!eagMp-Je`@I zR*JHIT7XHD81K^-Am6zSbRMQb6j5hh2`qux$9F;i350>&a%_C#4?Mbe7}P%X;GP*r zdCf)+)h$QN=u)G0ST1=E#Fvj?gQXw8pH9q&#amK{ z_KY(0kXjGg2gKmAdnaCd)kfKoMo`EagNqTHd91oNH~Wkud$i;+z4$!sydz)TczXux z_^}x0eOG|&W=U3H>pMJ^6NRa=6PU=FKfGqS8+dbjG0$}&kL{U12f{Cv;!saI{4Ny6 z(YtjJeWDSgaS8hN?BKGk9?-*2#5Udh>gifKr0FAat~Om5VgAt%CX1=klzON%d_(SM zl%RlFJmjxiL+1Wmhr3i1*txGu>4>-p9QrdFVQ?Z#GKcvu-c zSe?aXquj}k+k4@wM=MY0m@Ew($OZYSGimK4Px8!HnWZL1)FWS}y0p^|P2yr8AWoRg zpZAm6@2G(ImCNXohyr+U<{5fbD&r+LQ!E}d04?XwSnBHnP1->)Y8wwpLt-$S_YW%u z6QJbA7%}1QtEK<$z>JqBC|j$63N@FAVdp!#A?6*O>vRsQ$1QNrO>vOWm4(sZJRG)H zV;=2%jw{30K~T^fZbm&7qZ7Duh?L-mhlRXN?}eCsdRs6?PK!MMRE6&ZHBdA zLrLpw&hL6L279y=*>6YVA!hGc2wn7qM)~WpxBm-*%|&wT-0<&kVBG?U5w^tj_J#ON zFPltUUk)FVhCnW=-bym*bM=Dg5=xKl=CTvUDBWd`&#ogmBee$Wt2068bPW7`$Ys%0 zmNKsz`cZ466%I5!fE`YCxP5^+Y+P}X-&|7*Vyo!~P*P3+cL_6UsrG;ttf++4sgHOS`|iWhMR9h5cnR8M7vSf} zTo`ozK)WVhg9{(aarlNIrpNrn8^IG{LdYa=&d9(l7c+jc(II;LNibbvDvTq072%&1 zccz@wW&9i-V)*7UR2%As!!cIO_7jtstAb*vyEK9x@N-7twSidssD#+v4+pU?LGYpZ zDlR-R}NR{TwWkT|t!A!_MK$wqr z#_>^*I{h5_f2Uyu?w}Kys|Frq;G!#>_=0q@cPHPJIg2^B{-L?JGRd0yj>>Lm1{qq4 z(@Z6pzAriC<;XMQ-k}Jq7q26>w{}8Ojsm1z_yb!e}urHK4B*9(+Yg4t;MvQ3C0sAt?~Y=i||Ka z19iAz4A1xPhQ6UVoP!9#!~UT7D-I6%rBb6gnkeJ{fNwC6h+PY}K!9%x8t?JKNz5bc zD44^3+4G%*S)}1fyoK*xZwHA3Z=vOTAiONuOA5L!LvZaSIIGb@o}Q zbi!#D!>O?JM!J2S23w?%j~hOxfMBRL%m1E^%D<-&so00qP)!dVpdJ-;YtZ-cQ`frUntiuO;0p^l`yrSVY?fxPn^ltnJ?>rL#4%^gC0Lgr9!5Vs z3W`~BY>0y~*Huf!r>_RkBH|@15QxHUJAYCEZ3p;KC=8}%|M+r!MHo^woq5yMPHkmN zP;EgVe}er?pf2LPX!i>IqZa_HPVy|vY|hi-g)&Tr<1uP}y@LpCnGT_)@$}P9Z}=Xz zgMYQ=6m@b}fJ4UxdEIxca7|J+oz)vp4Qyxfk6$>-2FDGd`&R|#f=e)tI@}^{A@^Yx z8v*wMMPUEYqY(Z(8{hO!fG^MdaZPpuFVDUlE*YpmgwHX^>+XZgiyTpWKZ`5p_wjts z|0B~9mhr?lE+BcaNf70BnLq2r1<;Y)M9Pv(==>Sn`M|xCUj)nJ(KtRg$9aS|xjyr} zz943(U676KE#&Q}{Yf+4666pd^!t!0tn|7>j>%>blY7%yne&2Zplig)3GLzbam6Hz z>wc|RvkxyEd;r3od5{`q$-4Ta!V`N5KHJbk%QhTjjxHBuP8=!$qs<2Vd#cWi2Mx#h z2c+1&X|d=!*`7SLnoR6dBjDXr4fbXYgVLoeeJW&!4@IkBIyVn|U!6+!vAVD)SA!KV zx{>wuOPyDK<4TeoN@LS9mr!a=7~IWhue+4_5X^W zu*>$DHz9-Yq5I8QnF^?O4Iay0!z{6SLFR4R zhU?SPL26wYbjmJa)?syEFow)1 z2RTPk_RY&P;Cv;A1TGOqq2hg@km^cjhRz{Dm_znH%^(j{(qPKjBaC=aDozy6r-ol7 z*-fMX!00Y6ElncXQ7ibjqnlAvu@CMi&&B{Qqqvrt15fWrvlkPVV&}_=5TjB^>w64v z-X49ln-v5Hq8f3+sx11`MiVkso#DGrKRp~#iLbA#fZOO}a{lWOOYu25(~MaE&To(P6!k$MJZNEo6Pn!(H)y=sWE^oLr@fmp>oE!#37%hzc>! zO|!}NsY=Ye%gN-~hBkQD{eb2>m%_P<4y@j>8X~U#!*c$AxbNpxG}sl2m6?}O<(>{p z6EEW0xuv+e(wCk&qsXMqDu842+!?Xj5Y!G`1IpZN(oy&~`8|c(xk*2QsrGN6C-()0 z1pdZLEBw)ss{LWKKI;ktR4UMP&%MJz&|Z4LETggaDJ>9Z0RvYqfh_g z-DXurvF#>tw%1^pphq)3S-&2NrfS`5+=a%6qT0NUM05C?iCkYTted%tdR`2M zipaObP@Z#C=~vSJmN6=&l8e7Si*wwkSNz6*_uxA(4xUBMWxY;6fm4a`xIFnhEdI=r zjr)$#S@(8Py(f)Ud0YOG`7)x6>L(uCVDbV^?25&kRs(p(PLFMLjE2K21YvFCd#rD) z$Afakyt&K){P@TZzb<-*rA1|Eef%uieeB|#iHeNKL}fHuzZ?FUw?T)gHPc+)g&CZa zEs!0?V?OI?j{i^it3D3thm5KEsrU5DKV2-@ERV@o$NBy%Lvh2cSoTDF67C2~$2`u@ zXy_7%A4`^^&A-LG?JfcI`-Nyyah`LMu2g0A{T0CDT;Ke1g*4};8l;{F?!xJqljw7% zgtn#SAurGrYm^S+`C=}ktZhtoZ*#|)zc}aA%^}=zvls8aXriZ6zu_k@H8PZP1Ipif z<9ACZo_ek!Bfl<#h%QySC2E|D^C~4+y`@j+%$7$uSE&_es|w_|mz|(#LNIPjM;?_xs_a`?JZUZMGbnrW(Kb zDw5dnzo44t22&P@vz-|LE8EUM(3DbM>dLj4=*n>dOQo58d#v%S>KS}|Xa!^HKZt$e zmFOVS#mihQ#hfZlrky|2K<(!M$EsNXRhg6|b9dW;p_R3cJvt|cQKYj`;Ot|hPW5xRM z^@*_TQoPS5;>za{ko4V*{dM^zSQh5v)tMUX$A3Iv*S68E64RK6ejFe4)e1I^_mLmH zvK~IE3N!OISYe+~4(A2Pg4IXVn715nax&Mq^xNA=i2oU?YI7gn)l0K0zG$*Kp@rz# zmjF*pEZ~9I0RC`V3_97j@xtIS+E`Auh}73T~IaLh;~78XmQa)zMLN<)8Q%&c40mDoIbzEeM1|gZN(s1S>7e9muHe6{{|p_K!_FCIwMnAiJ(HBOpgJHeR>PF2@j*{h7ZV|yJ~e)y&sjX z2|)7{F}BVroG0*HlGRCnj^`)oLCHCPx~`^+bon)q-isyVdCv&n!#@=N%8#M{oz<+) z`gE=rv>cxV%E8TBH(}=Mk6>evOw9xmF!rPxwyy}l_M7U=%$0*sB4tfKQ@{VIkz$g$zA+-^MWIZTS==EDLVFt4-^M!X-A52_1b!Pb84)aAi#2Vt0X zX)^t|Bo@{r#=?`{0r+x{$MIp-qke}dEAlHErD_+0WwsO}HHU#|c^stRwH&kjNDG}< z@D17cdekvBLr=kOy#BHP&I*{}(;->rzAZ*ETiM0!CcR3q6$-#sO7$i zOhH@|@mnFm=u}K)8ue^()8Qb(n8;(|hhOMaUyteQc9LD+xVu2m5u#_e6NgL(F&}o| zKd)*$r!yC4#&dgquV#2;_ZJUtii9=pY1Nr=5jeGwhxQL#=(($o-(SMExz0GC@)^IJ z-bSbX5M~WuD6mWSJf}ZCnV?g1J1Y3yhe6FRu*{=}yk6DEk1$fjdjaN*!LElmQ@#yr z<|cqg#|r#vx)dCL2{9?Xmawv#$7CsnoA9)q7%IiQ!n1p9-z(%s)NNx%aY z+ov!OGUH(Nupd=fWr?3=9){H4XCRHu2VahbHGE8ynij36x@8uun6NIo#D7Bhd3jiS zL!LA#u7@R#K{&cm6gTcQWWWA=1a^k8R`KiNt#a12;r^KqiKM3}Yg@mH?|M@M3uR}+ z#G!Pk*AW57bCVgdgHLHiogh2*ZY54SD9s#UV=#ETC;Q>H21@J{B|c}Zai7L>t3l4o z(|PwL_@r0iy5E-A7`+7t%fmVLSTcCqc0=Lj1Gpo1EAsD+VAd@qx=M2&e2$f3hg0R) z<`gkp{-hq~=$|E$R|j#k>M#kM@ECL#2;dp{hg4}Kmd=-v#tj1V*wstU!R8mb>^z$e z^6JeXEcCqt%0{*LLUcL?XCH)PL6Xe2LmbQ4&Wg(z z`(uUVOsFLF%TcDi$^LlU?9#k!2L+C6tb(iw=ZaWd4sF*SqBfT$)LT1-4{Y>c!@g%E z<9Rif{8~jmFZoH~1-CaDE~b9GHe`$)K=9yi&=*qYDYU*LQa21)UjXC(dU$u=<-pgX9=I0JOeL}vsoyD6 z*5h0W=icJ-%)Da!7U2mq8<%0OQ!c&E3&%gLzhOo9Q}mqhmokkv$m#<#7_ZPls&)Q9 zqEj~nvs};c*9#se6&FA9M09Q=a^CKMeFOXsMOB>kDhMwrroyB0XiR$<$o+2bk!#%w zOtYOjDrddK!Ge6~IwFXd<$=4${3bpoV$2p}TY7KZN$kGe27y8pzm-ZNv(6GgNRq!* z)Q}n0isJXz9OEC0TZ{2JJftd?GU0Go zEsp~T`+{?q^vOZd{2#E+<{Ef3?Srr9G|_EdELE#*z@c+p{FJw%C@Px;&4<)c;3^;1 zm!VaOb^|StH^y0_ktD6=JMYjBIp+13OSo!b2(FpL^#G1cVKW`f(QKC?`7Gx}_Z{vc z&9l~Fa!wk#qP8DmzeHeY+947%Az8k$?Ga$Q8Po7{jPv%hXz~whXHlv zNC+?Tf|Uj5!80U^)SM`RL_Z7Wr$rqKh!2pE8{MFGViNoMjufMoU(O>*PpIG14(yt6 z4oxb?;Uq5`Qp&ilOj90CUN8c7r*xUIi5wr#SBc16=*9Ws+`ZrxAC~4mgs#$2IGYNn z7I6;KdX-Qkxegk42k`_q*YSg@%P@hFW(#YsL9(g`xW zq2t5Qbvq5-`Mrc6@@BY5SroRbbr9vLKdF9=5VK`@EOBwuS6 z*=_lRhU+S@O`(@SdYd#GaxR19I;W6}pLWB|EKz0+*QF5^oXk$SZG>@exaY5XAH;mS zimErhz}3-4z=SMXQT~H`<7Tm~)@P7vc0kL~S-f^S02S?0Y?sAlY<7B0^OJJ;Ntu#3 zr&XM_zB-I|HkpzQUT66KMky><`2=#g8PMSpK_>d5GKL%7!Xu}eaQLVoTjxKQ^*(!s zdd21<|8ycvd$SyjJRie}pTQ`ZEduMP7fiJI4A5}|Wc)Rl&u){@z9AT0Qp|A0vuKc* z#LeAZC9tJVn#tkmqNaB*fBTDjWa_nvO!mKSw9nRoxU`3$xjO`|$JOKfqb6*Fl@Rt! z5W^h1(`f9>u>``a;Bj0SuH5+r{nI~#K-3@j^6MkK^fAQmsYhT!Z3S6F1JQF-55BBt zsQ-c@xb(CfQbJ6jR`owP`CS`^)D>yb&O~0?hGdxTR?FYG@fPprhKu~LMm2mCsZWmF z`2h9fi;2z&8OB~o5nDE0LMVELu~(h=ThqQ!^}F9-m4GHZ)2~9Ahf~?HmDkDp$-gk; zNDz6_F^66B+#Q$1Z+&?#9uw zE)u(5ka0B*!>Y^-dhQM%|1%H6-=vXR#cP1gB1^bX;|#@i+{`ci5Hij`G0p53Kj<>S z#cm2r>3us?dn?Zv+jN6QQZ(x9d3Q5%hfC;?7t* z*6{I4xOiWY{o9&N6uwE}$ka*fjCf1@E^Gq#cZ$m0vg3wV8UtXjObMG;(Sg%GM!=C>vuSl{9H=^1 zaB~GM;>kpEtdL05kV}CzMpoqTJ~wz}Dg$$lHNcXdM4IM2gVp!F--CixIfS4pa1V2o^}*uzU~!e@_&@$*1TtEyJP~Lp0gF*E`5eQ z+`FLk9D*~)cM+W^1;5`<0g=akbot+Y;%l&*+8H}z@z7@o_RJ=2%Vh9;KrUUhXcPDV#q}p%u@%2B4@lNJA-uezasJ4PvHF(BkFaa3$89PgsZM@jOt=3CMnv5 z#Qs+T-tOI)xBVgne)|LBhaM3^3jJxTNf67H* z*4|t?(MFiGXzhbrO$YH_#bU6!p~4hp=ki69Id>n=7QHkS*k9b-Ih_3jt4>eG;2)pC zGGYKHRqdz6J6v$VurmFa^oCsen+LA~hJkzbn0V4b369}ZqfVtli%!x9FKl*=gQ^Ww>IAtnREpZROlr^I7 zf*4xJbyjxm>4JGzmcZu{s@w2^xdyMfe86MzW{7*gbI=hTl39iC0_U`-*;u^IeAvzWr|=r^d$oS&5pfZTU9-C*jp*6KW7=i6at4 z@T~MCN&T%tu4Sk)Yu=oN4VN3}t)@yEsp^NNzrInmrRyP2Hv$xX-NaTy79AU|K>lMh zwo7j@yf0B;ug~UYK}(_@PLM3}NiiMaQ?GcQHsE74nY9N)^DGk#8L zu=1BK>38kG?CK}x$GM#73J|=XFwz&`Z>Ke+2%TTfzB~3~4SC1CRdB!RuDRyt85nr2KU+{^6b_ z&mE_ra(4+8|C0bQH#u$vm!Z({ZsBQ7FhqZ+UTm122phDyyWp_^5ctaH{Bs}Zh6C9| zR$G<+6~0I}-y8rJp#%6%&Ybt3$4&72Dad%V3Nh|{0~~sPnLddL$1vY2_}^^F?C*TA z%MQUubtC9@Op}%Vbrep#Y9hwB^JtoKD_V1&PUEpC^iO{b)2>8wIe;(xJt;AqzbS!+ z9596)9Vw8Wtbqd72JGYsGchjsEtl`|K;7O9=>2kvjOYOAdj*B%XQ5Ot5^o%jpi*6D@a*#vj-yiv+pN1tsYWh7S)j)rJL)QAsbjLEXa-p$WewdoVq9Cf+0|Q8 zhWe;;)1N%}dH|LM|AuSZxc9l|0m$p#2NI1Jp=DhXYWx32Mu8o{ac3u&@YTClv5TFmU#6Do>>QAJ5 z`UH?lTaMyaJz-blUp(a}fIIUJpj1^3F^l#>;fhdftu83q!b!i5s7wqMSCvM4F?J#R%Ut?hckN-$3=AZiIqS8BE&o5n?;| zH0{7B4Yl0Y@tjLp1&JScbG-Pd(UU&!M`W?S%KrE%ZBk!44L9FGgaEYON?V7PlM%8%y6vo z67Jc+5l?l`a7^tp{PJ6AIJj>nNN!Z+=I;iKI3ZZOc`fAs{z?=?D&fs}DV(U43nR)) zVfQh4CS;o#sJ=0#PbcXxVLgJ(#ry_*oO%LgPSeAb{9iEV3dc#x7GOiKc|s%C)o+Vg z4~FY1fyb9+E?f(T-R)uM<~oV47$~6^#u_l65o8Km6^BuAhw>?#<(MG5XEDu_qPhzq$JNo zW&ObgS>JF@uGet&DsNCE zi>THHkR**7yyc!rn{F&dKb`_+nJ*`f2e`GHV|Pk&U5TIzb5P(Q$BwvhoMV-Jg`iR? z-s`pduvA=-oe_~kHaH#!m8mn)-$ss^Wg)~w?$%+Q@-^7K1tg?g`V^iGc*B(}@I zoeF6lSpJ2ChkMfay~X!1AAeF~9T*W+hd^(VseO z$J}~cAfw0@JS-tCRpA)0r3o*8J_ctpxqSb^Cj2WT#=tZ_jeWw$+vWaT2Kg@04DEwO zy60)mp)$B?y@35`qr|8N%9E@`@%Yj3MzvO*InOWrAlALehxu0Be5+PTR^Hl%s@$D} zR~47Tf8!UpY(NRgpOMM?cQpyw9G&U|zRSU|T#a9#(hFw_OmM{QFgAR>WAiFl42RN% z*_T_^;O`y=KYsg(AEyL?kwFA{Kd02}%waM-76dQ$Ni!}-4nuO*6dF@8kDfDGL_hCq z0MEHYWSLtC8JCu0d}JkAl|G8s@he{=`wDzd4nwI+g?!z-zp%z>CD!OngW+vk;A&?I zmHc)Ib~d&0gf;)rBfk|`yN*(@KgO|ti66aZeu{+m8nbW2l^M}Rf~ap01Gk^&|zJ0xz&hoHol@k;{|vz_XGJZn8+I)DCatsJE{GoSJ?Ngg&bIt z1J7o^BlfGG@W<<_$ik=3;D~`5{`bcNr_x4ZxA6olkojga%gqs%7wVA|S5@}c6nXZ~ zpMR*#&0VvvJ*p@L-z#=PmcbyynzMhdb{hvPtWsS#5& zl27hwHo$|K%E&HwPs9RZ>3{oY(fCA;*Y|55nEM=ooBy39?KYf$VXYvuY@z@&7NCa5 zhR+ju;UCbOz^B_b&!;zQBv{AM3_1zd;)AGo{=*YzK;zvfkXJ#=BRIHK8n<5_rTw#Qm}m2)`TuTA z$F=b_7$#GNa&LX$ef0%&o-WKJBvn#dFhftREWG|{9%FXkCo~?mBiBdbA^N2#`}52l zXtS3fRjY>R-A!6}eA6WM_8NJHoT(=j89vzZ^8}Puw3GGPYM?OB5_%6lk;=>8Je)euge|I7M zka+?SjE~U`nbOp?t+D#{{U8v%S%S9|S@Po2Z+_C`a4r)(N}na4gDt0WY0xW2 z^e=pkDy$xDbJu0`kG{jV3%c;tN@aGtmp{sGK7qCtr)<`w4B)#Thp|0#I%WOe;!wjF z-|MwAY<7}oUi)3dMQM>(=hh6887IM7LyCRm@fwqkNMUf{8a6lSg^l~IDR@Gu2Bn+7 zk^jzL!99y~vD_VDC{PdlcJcTZi;$uoq0}`kKyLnaxyD@ zIu%jOEGb@ zLw**Us8;|geQ$VS-1==1H3OTCvPg$ODcZR^@OIb;P`|DzY(q4k?h6rO7-2r@9{CN? z-4hwX41MOFMoU%qVk6erd=U(qd9canyYM&Xkhw3jf=bLd1g$?mLdTh9xb4UeXqx|x z$nH^wmpboh;(t@wE4w^-*8AVvT&b%hb9DX4n_){TE_@4K&B#EP$SL6BRz<0wDHaA& znEvA=9G}N=7c+uz@~10g?@eX2@aQ4N_SZ<SEpBEcicQy@%$8!;qsuZ!Xk|GnHv10*hPo`z9rs%Mc_D~ z3up4bgZd$c@Y>$dymxnT%h(O{_W6dr-%?;PfbFpR9-YS8*^<+%L3H_gb zhV+e>@WS_LG-hx%#^i9ENAK6yi5yVZ~sobRhhdio!=bCD;{ebvR$@1>~f- zW0()nWB#}Cl5QEc(PjwedQAVzkN2%lfs| zo{`X(7tm*k3L}ykfNx#8@vXEWv!(79Mm8_TOW(OOo9{&;BQOZXht`Jt3EFTq&DdA5|`gYiw5pK_*oBX4iw@GQ#;&Y zAjUbrZ-VSMdz>U}59!N(!wtb=Y@D{vrlTvO>YuDB>%LYUU$&(4TvpA(Y)ctNMPwV! zdFcXHeuG?gM}wFIJtSEbQ`q^%iLiHvAdxW{xViCj5&h;8MhCBIVDHl;oRxb5_T(4v zXj2&EWq89D*J(gktibl10Gz*j3cY>45r-~u-ie_E_^rq?#JIUgMK_ocB8jlAQ(-t@6=9MLQe_lS$SbQ9+x94GR;1t$@JNulr z7^dolJBX}3A5O+?=4T&lz-dovaNT5KJjUJ8v4Kr+R>}>e9TMOLD+8ueCNR^oOqu<< z{y_DdfagCKCfwD-<9RyliVv08w{9I3Kc@;mMvBqS*A9QGd<3x(YnXnUV|D(BL5Hee z^mO`1___WxzKYXi#VY-A$0}!7(?OIac@G zK%0Y3*YMKIScq;v2`dG-j%bJ&%*qxfPP+5Zb>0bFu_YTN-GX4eI)MhNvuNTpfnf?I zS(#TnzO$b_ChLX6Mm_)P^Sp21r7X%$argr^%yi~Z(h1!6nZUF_F}VNL95l@+s@G3o zlDUp*@DF=3m#5E)&K71%=B>sDj0mdVsU+K@_R_1@@1e-RTAb2CBSIAAXt6A1ET8R`PUbH<)x+yk)qZOn9RJV z8}0Yg$ex)@U}`qX28*Ki5nXarH~|#eAEV;lkL2=;uf$}396g+>XY*D%04<+Vs=sXy zEYyks_38US**6KF3(R1*UbjOrEg4+8R1pN`+(EZ3_jyk>=Q3JdYN*^5N=z!Xapkpm z5F5(D_e=hQ*qK?prQ7;ACzm#TkSEOqbF;H$pG27br~X2sq5)Ny(1p2ubD0qTa1?RK z0vXqRn7>OM>$dcfopU_k#MV)?Y{c_N{e1UhwMgMwjqBK7JN#k z<@Q3%50MU%HC+T<0&-x|hdkPt&C-hYDK`BUk5Kk|9A5mKjCi%&ME|{6X z*AgRmWO@NVhpJJ>`f_?kNeR-e^)T*~a&?KdBZ%-da7BnZqyF?Ph|5Ni-$x#xa4k!N zi@1GIe>T2T$$|shCD7Zu37wL%VgHM9{u#p>s(Iiw{yu#L6C#?x@4+(28_T7A{Cyzm zGYA!<@$|^gNV1XZp-yDd=+%if?BJ$xm?0^|epy^W?!<{>^Zs~LsH*3yrhXzj#f?}$ z*#Xc_QD?R^x6q|B_T=||0y(%}b%XN1Dl1up!W6!m*u3K)s&pq(Csj~CY>N6%GGYHV=z8hLOX(9~e9C`Ywl&}2^~`2*rIZ@G%V7$M43uGy%s9*c z`N*7x+qp7}{P=TSzs8~dmRkNI8wvJ#kplA8P9ReL#=s5uV4=}4sq^dx>9&QqX}p~T zDsuY`uQGU^){7fjqHy1ok5pRIjF~@L!F%bv2UQ*^q3CTwq-3IT(RL9wbx{&btM|i~Tfai0 zQYMs3y@D?9n;Z}50=nE zn*-24D-spFBWP^AA>5j6i#dA1aAN6IwBI$A6{wFy{ausTkN^5@EKVLnk^Cj7CmYVO zmnXu<&^&yX^`5Yc?9s%{fE~(hKp(%IbnyZkoIIY!^;(8NqN{}WX+RHeKO5#>^Nz*m zVV@z{K?iTpQxG>aMBZwoQK3vZ_D7EzIrPPnOLy=^dveuS{n5S5UZnwy?Kq5HCsddhn-BB;zCX%#tB2#t z=54UecM3avU5#0!Bg$m>+=rUHbEwYoK$40LA-;JJ#{cU_Gx=uTkw*sjbMyq(SLrYh z<?i*OsRg4TLH;cHC=`*-#Im+* z@T=7%`>mvz4by{RlGIZEwRiDYedi@!DB$t;zgf-Bn{7>}-K)mVmFFNR!H4WuSA+$3 zWSQ+9U(w;C7Q_2jLY53pXN0V0!@*gmBxFGuXd2f;Qu0X*>dptx0*(RklR)_4YgD4v zoz$xGP+9#p-Bk7mK6(CvMu$|6ht1tFb*~_Ag74v?PjA5(XD}vzhH+!001iGC#W+<7 z`0`H|Hw^#5hIS41FxSg34`0SC7~V?9`4^yjdNR3uVw6_-TmaSnP0(+hibvwScx7G9 zxPM6|SVqmIas^NEifbp2cdH0`)^?NmGh4{FNj>C2Rw?v32V*LmK)08d61RgpAe zKTtfKSd47O8D(5nTPeiGvf~3-eGSf>m^Uu*F1_zGxW=S3@82jTV2Z;-x;>o7c4q~^DxVMlWi zEtZgFW<*+6C%iof4==}%$2%r5=}w8nC}0u!64}8onp40(eX<$@INzp@Y6hN;JqzYD zg-C|?OF~ZG$E&h;QP1ffc>GyNs&rbZNKYxPYurUtCu_20GAB`b{X;4=QcSM4%?93G z58gG$NL=`OFRr1_FuUtJF}{_H)d?IK%npak$!6 zkXa}G0M0a7;Ao*OtZVJ!yhBCkD`U#qzA|FNGW%eHco3&W+8uB}1IQOnNdo~>~GF*yj+H;+1dVYmp$FCqcz&W#bx$_1-9wx`H-i9rA z8OYkQ*2buz2FEVb4%ij=?(2tW{*y^j_c%E)SHyGY~o& zY^&1qgXr+uL{t^ZLN|3~aOdtRL!!PDlY9EHe#>k=48h+KLJJ93s z243e6LycGnuH+c*o5WR7GWs*LK9pt^eX{Y%69cB$R|r8)nmH?b9~SL=K{qH*#JVrt znZ@CWM!CZt#V_-+^v%F2Bb4 z-Ol|oq%Vw1VDi<8{2N)Z#8ET=cST3zYR_a|L|g*AZwbd=(?8+_kr-GebPcrVYdkqU zhb}5iMj7@syz5&^gR2+gf$cHGq3r_-6ok{&@~X`E;^$=C?+nKjTT2=XPJ^S(PT2hT z1sdj@qb4a2Xza5hvf#x+)X)6DpL5ca9G*t;aU910O5BVdX0asMT7;QZz8778t1(iy zM!=++%ahHmgBp(^=ty@XG7A`}kZQ%g*==z9oh)L@)Td>`a$i^;i?zbO7I9n;oj zlApY{)v=Ohu!wtJLe9D2=|n3~%D#;+B4@+uj8L#KdQAQN>*+Z*9^^GksHk@U&!Kw` z1c%p9g}IY3wX}_te!EKcG`%7>mm1R3y9dY$&M~<}YJ~T4x-4s%;s;jgPvPr60UVEc zf_HWKC@xq^?kuy0)iVY-=fZL(=j~1|KQ9YCjp^iU_e$6&bQ^V?H{vPY0}wgv2YUn` z!o}WJ*fmF-Q65NxqbGVHzC(hsV0-Y7y96)J?I!Ph|9L*^^@+Y&TaVZ6C_O$s1YA)8 z?021okJ83?J8dmmoDgT`cwN93u}Y*MxeAWv%!B`$bis6@70ecJX5O!pVCR;LGQJhM z?7_$^dci-K7D;BJp_VNiNC+d7>t!Ht({hp~Z-%)oheXcLcVQCarEd>`$KCTMDsLxtxk%AMXt(Ri@PClj{7ZjM%WfbxcUjmiO;&h4D9%|)M2p9hc@KUkGhz~!>j<<)I z-zs7t?(Tsnor^FmIRTU8kDyq^YS4~y<<!d(Peo2`U|?cw-SUpcQVT&{P3rIBibm1pwP8K!~;6;Jy@4CHw{t? zy)-b75&+YI|5!=uOdOqkm0Q;e;cR^jzI;E(*GZPgg|YX*hvO6!4kz=UY);vXa?XM-E=&6ZPI?vF!Hkce-%biJ<39t|Cq!{5p=ZVnTyZjOF3R&I6M!KCwnd3z)zfVe9Jlv1$ib79zsdE8M9=m zAMxnXKtumhv^*-rG#5Ok|BdJ4x>-t$k$66Ad6t3qbr`Jd9kISN3n69W3OuXv8=g0v zAicVxw3*&O+20SaX_7u~FaHX3zIui^UZ+?#HR9te4 z2PG3iaYM2(>b@(1FXM##?6hV_`!mqrqYD2-CBXEwmtY<44Kd5#!B#shyxq(3If8ys zWkXF;H!cl6fAit3XC%!3Wx~oS)zYh+Q%X*ig$R#gH2-=TgQB0|p>ztxO-o_UH>65i zY}qb<0{-_~>1plnc<@pv^7cHDq+Z+{_e>maP#|0Ud+R1_+d*FELva>Mt5cL;bF0%H+%WI0j+t?SpzwE~MKO$i3wsh3f=k7K8{HiDD z7Lo>&Xk;b$(7%M++k4$4_`VLUC#cY->)%1EY7Ln>5JNm4sIgZ2W!Qs9Rp9i8R9LVl z6%PHgp{$7#tvjZ{@-KgbT{G{(372-NI&gzJ`5!=o2Yh0>$dJn^#t{D;jw@C+3R@QG z-~-OHS#x0`R`>3P#-Zyt{eCd!MVukY8vk**DRX$lW%BR$zef?Nmw4w|1^gYm2i5j^ zxODe4n?k)-TB4rCcO0k(p4BY80%Giu-3uYg-W>L49;d0h6<~7V8~EVfPd_~IfuslV zuxsQy-QM$pCZ2pkJdIQtHRBDqBzr4&PU*s=uu`}leuXp{tmOSSGmpRCK!JtKP0&?i z4r|8cn4^-n;8Wpc*nd|M!zUWEbD28$cibPYMBPNu%eUZAX%}33p}@4AOh#LjWL%B> zG5t|2E|QH!W`72+nnApLw~i(%J_c8}5zw=E3S#!$d38?@esLVcMRT1|uUvffa?1$Nbm{;?U_zfPVWBtO6 z-AE1`8(+)F?;PUwOU_5(b!zOm?_Su)+Jooc19-r#nI77-4mOR82etjSB+@J#9t73#*Piaj=_mD= z!S=VQHJv2rK1pYR>2UTyyr3%9#a^fsg@+S^E@nkC(3rW zd?kA(%m-$|5F|gBW-t3y5QF{+%+bh~aO7q-&K-+{88$BCfsl_)#P#rSJ_0IV_O1i(vTKps8w2?=>bcXT`*5pipznBvT=1B=d(nK zNww<&vgirm>@TEeu@GAuyoCw;V#4}NEv(Kn-OEo9Tg*JvFUFW5B}VJh1-P`#nDNpz z#V?wZ;qFog8n|AxT6wV!=?HPAW2-hXx19Bv7kj>7VPpb6sm`MxcDh0I^;FJ-cpv7r zO=b-W7}9X?2HjPyg<^jyAo)@Z_Z@FzcHswJ`S3$*O;Ge_zkd3 zJ&?{keuYSAD>19brP*mVB5eJED%kY2nueGc0!u0c4RzHIM@LkxiiSL3-Y-B`6x9V zmSt6TA${+$30->UVvVT=vm)>kEzNQPpB-Dt@k()sy|VzP?Cj=0j&B2ZKW+B#GePFp zGe_LEFbMdGW!Rt@i4N7iCJYbF}^-PzFV!S-4Y61BV{>fZLWthjG>z6~2KAdE=E>#CL3$5W!UbyZLqwQ0pDnQ@O0}5s<0o>9uNKaj7h!gVEkMSjOI(S50gddy8&)?%e)3#OLN?PUm17kxT5+k5B&1d z55*wE(jE6T)qclmKN_`E4{l^4h%0Gm+ zl|~S8NE@G7PGyHj3|aF~KAQJ#0R`5UiaQ4349^L$u5vpVru5ky>(pQ;DO`jbGI!C? zXC33ey_ME)p1~|VJBfKRaW?QPIX8l#Gwx6fqzQwOxa#*zbQc|flTURZ_IxKTy(W&L zuTn5CQx(s7L=#)P+gM&6Mou=ohiCnvknSi!7O(WiBzKMre{Uc0in)TjxE$8IfT@sK z^$_0e*~`tze&Z6WJIFgd7jkd;&`&wJbXkllc0Q<}<;S$?os0kTT74bX21IwSU#4e5pkmQ@rpR=wG_6DzlZMkvK!}Xp}p>oDl#zCnT&9!80QsqyAqbJve+BgHZBt3#=sWNov z;W#+6bV(nXRPEqx1JmB6!AQy|u6}I**By^xT9PjN#U&0tubs*E?hBzGRin^o@mpFg z)lMa1OdzA!47VIUfVT_;NPx!>IqoQ(*YvJb8 zZuD_<0X<=>&#pmh=t-@D!>-wI^?n%KOZfnO<5MA0AsEi={Y#USE};i8fz{1ZnNyl# zti{+pT*a@$fA#HDYVmEVP`nz~>(+qpvNTNp@(h3Pd58f4p^)(>2~Q~tv%G;wqOB*u zZo9t)C!RcmIor1pbCvsG8vX{K?TE(=&#Aze_o0-w2{t+U!g<9x%(IpqRJ!gfPP7(f z24doPktQ*?UwbO6Hn__3Nggrn&>~Ztqq2GUEhpy^#s#ksO=Ash=(lREDlk1#sMWH`MEFWzQ~u<9_f)cGSA>xAOEu0-s2P-V0p$uh5F=99q|MMkkg2xj{Hz_1H< z@!y>(yxMyO0%Q*B1<*K^z*{14+6&gA&oTBtbXHd?RuM;CE!d%oZg4ZmASf4?h0o`n$i z89QK=?_&%wXR*JT>l?gQg#R|RfQsT|C|{I7{+0WY+6_ExDGsHE+wx#ke<$f(*anuy zGOT%YDL--r*S}@Gp+_$Q*2JhFt2mEzMxTNEGoN$0X*Ci)*$LYImEq#TIP3`uVpcvL zz&}e*(>q~XiL|L2Jh?lG5w{X&KMZLx^F=w{!N66@$hd(w%jN&g_ppzL17TN@5pzYm z5)8tZGosrs!=C-_xT`k_@0`1Wb-zN$>Ty}N;hF_{hrR+|t~dMS{cg;7Y0YjuV?cf^ zmS)z6%!K~ilX1*SnjN?GLDMy@)bH3G`2AW17w*i*LlZ+mq0)$RHEQuc99@hC8x}*> z6I194djKBg<z z_9Ya2&wxzXMldi@!2>u*r=?_pOJo7)+yoG9A4p5A;$ih6-l{qAFn+WWhLr{;mcqtUQ;!JS2j-IUZxFts_%LG{BMAB zLo~*Oo3jsWYH*^E7&~=d5w6Jmj+w2$VRpk0sF=5rmb@JyK2?*MMzt37G!{k;y9BWO z=M3YfOCYl%68nPA^Xd|w!ph?7TyF6MRWta#aBXTY*L}`(IWXn8nV!UA|Rh8_31kpNZI>Z3Wbtb0F3V|AD zIjS-`3vD(nz zXuzK3cnjB-i1DKrwxHJUW^{|a0@DOHqtcaWJo#D!eo#UO)fD?u{W&`lqhB*n*C@xT zh1%oa^`cAxuYgo6=Ntr!1lV_+hjz+wVHAyfh=ou3&_nnjSs*2X#WQk1&M}mK`SwKU zmagUTOH9~z4finpemQv(AceMLs;K)t7C!b;sP6Kkg01G<{n>nmq%`bM++ z=i$`7fsk}hlsPplg)*1#L41lbBO!GZ)>)aez6}}BUL!*cciHjIZg<3EZxnEHpBa1I zZ44tnwo*@(-=N;N1KTf(Gfh%2=zmLpfbJzR&^(lgq9Nt*h;t&8d=_QoFBx$jYZdZW zj$>iFNpkC^DEm)A2THt0Q1g5ub#h9o7Mk%H?9OqVBf;xLUoi{Jq*mbv=W_B&hfmnY zb(lFSht5@HoOjBG)NW)Ue*6uc6wmR_<(gr`WJO-GjU$#BnZl-sUi$ftICMmHVTS1f z#7t54oiz_9oXLi*`P!_$-7sMFCk)pl?)BQ$mTg z-^ZO<*4Lq{OC%IrTh9CEc?G*oCNf4ZimA#3j@#>c7xaDmz)w~~6UIz^^yi{V+xE(m&ChuRWD@Nvcn?h4an_4nn%-^C*Mbv5#w zifehYgWV9QD-King1FrDEu=-g0oTvpY2me{_|nIU1V0vIT5Ct}`-VHb(0>=`dMPn# zxAHwrx^o@EGsJn{W);Dyu&IpnSUNm0ZzL|N|9I}+Rp>reM(=se!?%e|pq;*pcIu4N zj)w+J>4tX5P+f_NUaB<6x&j^7n}U4(H4-~iM-}XoF*ZDdW05_^4F*Taz>HD&>X-rP z7l8TcTna8)l4!hn6kgZ}FvHVtkg5V3y!ck0-CuJT`rkGqkEYTzeL?n2l`uQGND8J} zY$gsH^3coh2lo744KDNn`nztYBGMLkHJi^{E4_r2#caoeo4(?ir8miq!Gn18&}VQ8 z=gv*Hdil57ACimv=R@6|2H#>k(poHi5iZl8Jm=1)(Ek)8j4X+DukS>4M5`+<#b)65*=@qqq|?PC80YfFeYL5aa*P_+FNj)zntZ; z=C~MRGee#clxpF>^a{bhFI)IACl7*UT^Fu}M*3$^lU>iv<;dGLU|K$#eaYn_>OM!~ zok{9^u^opQ%hVYBW77*i#oeL2gk#2>_y`*VJmCJmea!1WqaY<}$!s@`f_Ewu+#e2L zkFP$y8+Jko`+Rt2lw`B`_H*#+-obO)djvd+pMz=GdggdfS#{Gma%}x-Y`-QAZ@yk6 zJ5&6~se@CQ;INgL*K!Kq40Bylxe4sHC*0io$z;~*?KSM0TSf2AlINI8kFYFDng34M ziH*>j$T9}^aNGEK`bPT=w#E_mjQll-t?9?Eqrb^F%MTE!+yV1j%$W28SK!)+p-tnn zLEcQRkLqRL24`=5qsl>Fa6@(nl#U*!EI$>xH_s;`R~t#sVSUqbH}*C@YfMcTAs-d<~mt*Tt{EJNRTnm z=%ZyL$BB>eC#;@s2O1-*U|8=iI*Y{MV7(|)w5=N!Zd!s)PYlp~x+VSR*MZkLcGJ3q zh4Al{AC&y~j$*C{@IposDK)r9Pksr8MxD2`Ek_A+*QbGdNjbSvQj2$ZK|r58B!yN_ zFr=WHzfAKhjGnH=M-I_=dg6TiX%zrjPRktx1cvHqGZ>l$N3 zhMX5OgC|LmKXbgbPn{>8sQ_me^%JRCdW>OEKkocsNk2a} zU}sv)!+~*6@M~@dV}+(aJyCzJqFCkB6oiRb;nvDCv%6$&SKS_iTZ>`tu9b}ESz$bF9f&Ib}SJ5jlAQkL}q;M)q;Pm!Gl1@i<5BR5Z+bM(qHMJ-m$P|X}zsYlZEmCbjMydj0(ib7x@zmND#tHu6{5twEo#{+4bt~>2P6G1~c_#Iy7(RYuNxk<(;Y5Q*oah}(T03f~uqQdEKJDkiqdK zP6?mDbt`P~hhQ$eFVZ0b`BPbi|KsdD<8pk%|KC#Dn`kKweW{R??(?_`DYKLjLRK=0 zNMuKgrglk`XeTX=`#i3al2j5UO(K*{MHGJ5@9F>9|98J$_k;WKeO>1`KI1)~<8#PH z!Qr#Ez;DS0liF1NNW>r%A2nv;UQcIx6KBDsVmJIiLon;L5J>#oM)r)GpuGy0qt;iZ z!u#KW)yE`QZ=%H$`J>51bgzR&OVrqyYa+~t(r7a6v@tl%eP z1BuNSsk5E{_McUPf%0nZKbL^XO*(L9_eJ0d$#VPTM>KrYfev-aP6K=h!xN+dtrsF*{gj(7+px^F^ySzPP8-6c;W^M%STOT>arO*01pZ{ewxQCHNdZ zs_8+;ebOYO|2X9Bv!U-sKjKlY|MSZFYxqpS7xW|}$t1TAe224b5U?ngEW0AgYOfh4 zMtFql0zbxSQF$nKP8hnsPiA5jn@Q6tN#?vT*L%6HjcCYCgn4oWpc3bUV-6I1uIRIB zhjkdE^W)_GV+r=q6j!um<6#hwqfd%F4!?hgqP%vp@%jz)cGP1A2b&1hZ6~X){3Z(4 zsp$8m5nT==jH`^|s+1gJ(4qq0AHKsoT#i5OWGR$w^2Ni^Ih=Q$>$b(CWQxXhFthkY zOyxrG{tvP6vA-`+@Y8LWdDwD(&OIaCsj zD)s+CyOum#yE}%gOmD}nizKnhKN9Lhq?m^PxO-N8DLr$ig=3?b(fOWgFza+Nw*Jkd zgA2tlwJ~#%Z4OW!Q{STk5-+HU_O>o8}6*M>G~#|KQ<9m7RJEB=?7?Cco>=I z<_U&O0u`Kmm$(!s;hvv;C<1Y~taLNDM22CkqYz^cf{ftVP;BQ_aBP@NtjW!XV@9gX zx{EB~hpi>fnYXcjwi^`Bv4uMq<=LEp8BCgF7cic|r1OjjYZf$trm@jv2EBlj+8v?k z`gc4gQbAS$*R^`ljqI-e0eiID;d5goIqmfYV^o)e!R1aWG`yI3Ts({JqTVQ9bd=-; z=zyTo2Pjeh$gu!5nDbGy+23w8Sgg{H6EdAaK`|a-#smELbSlU_xkp`|Nr7)A!e`e( z9FNvvqMu(xp;h%nL2VC;rE9_+ks)$Uw+kFP(kaX6;Dcm8JP+O&y|NzWz4D?;=7>6=75%2Xn(- z!-=Rw3~GOjPMeP7QuR4#bw3=#Ty~*dbrarL`iF?yaBPb!Na<-?axkj^geM?$%l@PL zeqSQ@Z%&4tO>wyT-x82_N#gxE_JEiBIS@Cra!eHMK{%vv2gT3cgXe4IkHUfJaMrVAZX18vSHy zMR7$kSsKUbX*avj@;BkxxS!*1TQP&V{@+i0oz!yB$DvsO zzI#@pqrog@YeYG9n)n_S7GK6=tJN5ZA~8rG6NLF*2VrkZH}0wOB2AnfdzwQJrg2?%EmzPp=mpdni-GP6IdHakM&#|(m}|DVc+0B*m@_d@dS@Xd%145g zl{S00fMXlQYhwHg%F`~9h2z6_@neWb#c$uO7QCbY_QqHdq;`kF&;2bV@3uVlYA=CZ z{@2KE9S`iARtLl*1(qHQfxv8zNv$f+JiMe$i&Vv!Sl9Wq`i*$S&%ST??7A39SjRDk zbd^}&fFd$H|2%nkCVgWwi^|KeRw~0 z5>Up?o)!i#hWwe+;lgbl_`%cXmwNW1bIJ(u*?t`z502s4>4kLj-pS0mEBkQALv^%F z$V2Iu`%xnT6{~ON@h>=a^Q|ATAoIi+j82@hm~*LzSPtrf z-V$lBZLNVjJ-PVapbL(UR^u_p*)-R&5UVBrL9)9Bcmh7pC1ieEiP487F#nG&?%G{K+8h@$85_okPx)H(&-dcp z{GdS#)}O}!q3P_}(YJ)3Qx31ETm|Qr5z=^q>Wzh)NaFlse^dZF%%x0 zb74QKi-Di^0W7)p4~-6egY7o&;SQH^*LN?*O)D0#%Vqg+Bv=ghhbgi@)~<#I0bMk6 zHR1_m>;=ojP^>Jgr3x!#m_)aue3v_tus-tw|H2YJoVzs!;p;N_Z)3&Tyt;d!?4}L& zB~MWOOhAQ7VhxGh!tt3ZuOk&RV%|1(lHng;fTytwyDY?T^oR0hNM`5K-8hk2VPGw)d#Qa0IsEGDCP^1;)rD71N9XdkQ3S=2u zH*qF%_f%%+Vi0M)!zZIVUt(lwF?2Y#LzA);V^`P%vG+{C&tMdH?z}^185P5sD^cj; zBF?t{k;1M!7f|LN!+I9aPq`+Z2+AXMx9tbbgEH9CG|dIGE+_qVLyggK4!kn90=Q z&5S(k$sK?>$O{5+^#eiE1?O>(AV~=d?EY=hxSzH|mb4OEY;D9bOFoj1D=w4r?kjL> zZz#UlB9E8HGf~1WmZ;81wb1(@HJB6F5Nq z9p0f*aSYna&tV*|w?d(UAMDMq!5v)3`rw{0SUUL#6?F^YMGk()>{3}qp)#W4ky9b$ zXivgP<2PVdj1#e|dV|lp7vaY5&A1^-mX(Wph2w8@*w+TStlacJc;XYl?YXn)R+n?w zm@|Sd8+Jl;NfMN9nF&iu#&}TzL*?OfkS>th0b0G`pp;cru4Si*S%Z^UBZ)|=y`=?q z*;&I#Knjgqd;u$ONVA&h%1m*lGOWsZ3EE20#Q&NmT-sFv!(8v@hN;1DWy~C{ixk)i z*-uHbqaiD?V=WzhIEU`r_!(T9g!#Q!PayYB(BTg(`4s1kMMZ+lUM>&nn=QabJ*}oM zj~RkYvMeiU{f}tHFzlPcI3o1al2PrgBqy~ZsFcYJ)+IWM2xX6hSTx1Wo6Bfl+Y^|$ zCjd^HtHOYu7kIz~Sm)jaWs0t3r?VbA`{!I34L*S{{Uz8v1$SZDN<#Rh8pQtQGw`mP zNec!oc4uU-s-}ssl~W8RhUsYH%vbbd!fF#7~9|d1SWCk z(h{i_s=G&uDfhdKo~!w|;!Zfe)X0Ww`wpYuj%r-k7X%0T{m7Uac@;J3wQjaPZSAvVd1vs3c4Bkg5MEALZ)#rPlRg@0B zvjv#Vp7ZDt2ta1iJJ@k4iaI<33~K8Ijr)aw^4sz0L^T{25N708HDkweA$CP&8Vb%& z<~OLOa-DsZuvTr{;`>Aj%cC~p{FU?B)J$Raw(ne=YH|&ACTBqOF=6^%WD$taLb6WE z1A^WvvHP<`nfTfweDYVH&DpS>jW@S}8;#YxS$QR7?q3n+sa^(rRS;)1w5q9ukRDs+ zM#)m;1T4L3NHntpU`KE$&U3p4WFN=z8af18E(NHzw*v2dxdNYucG9sNDfYhN8N~v~d|8K4Ob!ho>-~ZYMz9#SR<{3CBsXSy232nhEIpif?ZvqQTu{dgw1=tN#{6Dig?QX<$XSY2yTsWAMl? zhAvzv%YVXYTidRt;N*uURO9_NAU5s5I}rqmCNuC-vL5uDuZDsl1swH^gh9`EI_X#r zeCf2r0~Zw8^dmoz9N~BrKAL!MWj|reJc*lGDxK4v4T&WTJF$5)Re0S2ygVJUa*`kU zxpEd`sWO?x)kVBtngLud)?E;tEzK@7QlO7tKLv}H5K^@u8fSgiVP(Cq@Q?a-(T{^4 zAw*1piO_g&;q|4R9@kdros?=!E%z1g49^GX8jaDD>LSNRzBH3<}r^l-l4 zIW+ulEruDEf$V@B)BLUiMLE8pz1ehL)AhG-Yw$YpS`~<95oVa}nTczE)pEWBd#F*7 z=KQRBY}+JmPSt9I7q2a*6}Q7_?|+Sm#t-pRu{utk-_3h0&UtAH;_!>73Nxyr$N3#I zEsWq7p2|z%SQm%k;MZ8L1)0ToJ*@-uTI;Cl3^RP} znGa7p!mxhq7-{|64&=X=C?hkB2epsVz!4s9e)^HrjLD3V$xZnp>41^K2@|XxD;up~?_6H=gfqW6ExJ zWO4LmDP8kbiT!uTk)IIHd8Y%va(V5Q5dESYS8r5iWw}1=y^0%{@5|Cjj-)n@Nxk9i z+jko5U#64$Q)Z)Tvk!RL3NiD8L*bx`FK;N<4X0XH)7ah}@Mu#L-T1>ErS`d#RbfeR zeaB_k)5gtSc=HJ-+f!K=S&%CY2jjhjW4cdgTzw*-D!33B-#`3hXasUY3xDjdL(Qmd zc>h)_Sha`YpohPibV@mmDd9ozuMzM&E=&pnQ?WiM6KYRpA^R{F{@Up=N-Kov`t$QJ z_m(zfJg{N@Z8T)YRd-|R?r3`S=oVDfPNjC<|B<$sJ_6UjQKi=+OwEsKnm)Sd7Uctxb|IydqccWC{0RE6aQL*W`2*`Q} zuJXf-U;cxZ)S$Wy0>^d28zV9Gp)~fe!zL7%6pYH+Z{Do-2^-OB^QIt75UkuBO|M8Ag_n}3+5`x8i zR#3^1(R6ph&O#A1;`-f%65n8BhAf?!Y)PiHeMDIuY3A8;MW$!z1B_b0d6=K^$Xugo zAam0cjG{`=@b_vigR}y32a56Oy7w5eLmRT&!tlZAeaypRT~>HQDHVu+ithHVJOiI} zP_#Y>=P%{ro@rc;{Od)uofbpaSYCs~d3soIdmMVy&XIXef5>t5EzFHDV-%NCK!`}D ze^zVJT)Sj4e_sJuM+8CnJ1?^8ST9jJR6s`jU(SW-~S}a-g}o6PQ^|EAU+9EuwmEsKWf@Zwxfxyj&|{Aa`&foWCOER|2h44SOGrHp8%&GSisJudQ4H{J=FSj4$2Jt!FOgI zmo>W%CwDDp2DUXp*|#WovPhNnFVSb4zWER%doSYFs?CyWYxWr{$ToEq;fbAz{P$8F zXi=@sdNE0;x*-BaYfH%8`a9rlID{J0BymkuF!H7ygX3=o=%?fqoNf{TC0q|mcc}*s zesRGo=J(0x{x=mzReaDc`aA@lMmoVZ0}Fnx!`vrppy17KTnr&N%H_EGIIdw|RW)Je zNq{D&EeI{YiamFi($~g0Fjq&4Z3(5MQ|l(a+R{c3KF&qy?*k|rRgIa=a^SLMI$N{n zIeO^NU{=y-*S8xe+Ac1;%1rd<7A*igM6=4!9%4< z^c8nkmGfdr_xKkYIc|vyS7vj(RC9bMDMo_w$B2_-1N?aI4&RN%Q9XYFJ8-v;U!~qd ze;oAVKZtPTy=pDR2F}y*%Ks!RR+z#jNqr)YTOCle$^z$EbwJ&@CQ3{nP$OeQPFI=$ zb(^)(#9RR9METH8zgciCCk~bsroj4qamGdZ8a>}^$Ots7!J(Yb;O9Mp)(xL|m7`%6 zC71Vs;R;P68ZeVRInfvv2j0LE{wX-pRz)|MDzRo$>iKqYa_m&GHTZYocX(KE0#sFw zLuvUT^0ws@{`2v|*)#nxGAkKW{e&>IQ5OAjg;^)rTAcLz8V(ANS*&PT%TA5hj|Q{F zK`J8-PK7Q(yR$PYj#lX~!l&F|HU7ed+xp0uvLG0CGGpXD!Q7tUXeT_v-bFCVLkyPp-@+%C;5J5Y{0KljsIxgw%(WQ`Gm`t*zX zLtfnG9^&UE51&kLqEuuWT+8KrW_suZ&IUVwKS&(*b@1 zy(*Yw%Y)MRKk&WgO=OMYu{*aH9zR&YGwZxsal7guiqA`g-?}nz?_)5O%vq1OZMgqN z>K^gq`ZOQ3`oVM8GkEs?6#VbD4pZMhfssBmgE?lk2&Xzdgi8}uShriIs1QGcICPAX zGTG&D;JH69U6AANJgx$dTnkvLIEu@Bd&ywK1m^8^|8RPbo4dIA5DU!BZ&d5Jcz0B5<=`j#-!Ykj8xs0@JbStaoh)y|?ToK3-)2BR?*} z^U7RwTQ9?S4|QY8t;-lcyamdCFN3E`{h{dkIcS_|!sd#{@j`cSy$5rOkiN5K%OBi> zC9ZsEqqQI=-wNN8I&mx}6DCW2%UJBrBj@ zZ(zN|Y-aEBb#(76LAF765t-j{h$ckL12ctj+Q|0u);hJ5Q9)3ytXXI;G;T%~O7sqiOGS`3N^%uopQ(*#& zr^&I8EPqi)Ck1@8g!5(0S0$gloT$($d;Bqzhbq(M*$t~?$*m17Ag8(k9=i3B3pu?o zmE;1i#+EtK;g3rhY4)*1EG*Ggf!G!sxZGMsV)t_Vj6czsx$6e;SgOMFe)|{4wARw9 zkzmkB%*4f$3sBO&0Yb-3cq`r?=5?)I%J$szz_CvmxIXnBUQE%%9KDBBNS%U26+((Z z6kN97fpfX6`)c{gcrYfFXkE>Njpw)yYh^p^Z4zY9eKNq!?mCdw)koy-1kfRU&X+lP z4F*o1fUm`DKuJ`!rd zvB5@cDimL*Vgw_`uIN%{svQNHtEbek>AWHD>fL+v_}4tXvCatD&5Pv+s1Kr_62)@A zX>3AT7VmT09O@go71U-e#+f{AKd>O~I$xOUh6s?qP4?z&Lt@UoN2{J=*mg_Ib{?bi&y4W* z&7BIC+qq2Cw#^vBb>eKORw45>)i{pk6gcyaV-Cy@!wosXBx&wsHv85|FmS#MfyVwc zKF%KQk2>RnGGQD$#jSB?3sHG>HM)dX;El0KtmrDPKimE}Zrc5cEcA+jLHk=4A9=?( zE|oIq|$NmOT5A{44NqOqDPtq_%9GM7z69Btdu=gS-vWpcY(bM@JjWsxrWn~i?=K~MX{?cx^q?1p??r<3u zzByFI=HblY0PM2gk8ik6nGahVagQ9IxFEh#*|+2m85pppi=StsaP~yzw8=9}t;`@s$u6Kj znGZky8^N|91m06&=y7d=HMY;`*V@T+%-xAz>s&^H)%>9MxC`fT+Y6eydTd&)A!Dwx zojmSTNArL&VC^PD$F1b@mp0O@w&PYpw-mzQaZRRh@gJyF7lr3n2xA?o%+v(gfS8E} zyL3>OtTna4kKfMV04gvCZU`_(ME?+1{o5d1p-Zi&tKgn1r$|s>G(5TOfbJ3${sl$w zN5<8dbi2uPI=>VrPm?Bt>3LMQA_L-{{DPz_8Z6KE2TG?@l0wr0u(_KJZ9GAotKC3V zt$gw0Ap>lY%7UDe6X3UY6pp5-vX_?g>5%7lFi4+*xAr!|&E`&co~ufo&P=uFx%UEh zHBDt>7XcCQ_L~C%&)#GHmoGfm zKn=!VMjXvr8h}qbCbM^&P2uB~8zAQDPrq=QsaxVl+|PMMMTc7OjN}de!k$^omDgX1 zl>Rn6lwFE72gDg(m@F)u(@!=D*Wvk&yRao)kl!z%41hr2;=Q|w zPJ$x)a_3XnmN9|pkyOFvl;aETFYrfb=^zs4?3vcMNf_rk7w21qf&RmnJgX12G)a@8 z6I`c~Yd=Tn{@N*Q?Z`KH^09`eeZ~{#Bpo4}BJ_9~7hYj@@_F2U@&dNJQULb35F65( z4^t~PfY!ud(yjLd-qL6g6AZvP?L{D??+MDR2&f$ra?{R8eDh8mPrh&ra!j?lIy=Z@$p7~k|kA3 zN4pBhpoSz<^t6T)3w%Mz4iP5oYAMJHs=@^Ycet^xoRq|UBJB^#DU&mi@o+ef_08i@ z-=GRV&aA}&?tHaSJc_0tR%Liyk$Aevl#LX<3SO_e!Q=E6dVkVM@;<&84Qi$FV(%81 zX?GB3CZ4Chr@BdpiaJX0&!Mn`I{jMq8TTxeV$*Z#$lE8$R9WC9tSei^3#?S&GH*qw zz9$26ug!;5Urxj8u4%Ab+yW20-$ZXV#gJF?D$y+v%0I5bHF zcNvwEC~iJvpi~IDRqgb!80WQgjm6edVOFH82D%RX<{1WsV41xPW8?pb*Z-*r5A`=x z3^bia!C|h~711v(c9|)_WSJfudnXGMHm;}I3v>`piL=|jN-!Gz84$J3 z6+Epyq4n8EtjW*hf9N>_(~V1Um7_eXYAeppT_}n}g(B=O0|~~oLjS_0X z|LE|wxiIOPHI)86Mx^$n!3~jg{B`Fn7G3M*ubJ};j3-YadN+lbj}7*;Z&DfD)Hh_p z@83i>E`PU(V?p0pGlvZe?{$Uwb;k8R7s@(!*fUnl_{?&&3#lc z>mGuWX*1Mma(!nHP2t=TAMKF7)xKl#s!V({KnV>b3k6>WY$N;j7d;ArFwcxR=>1SqSrMdjfrtsI1Yma{=n;xUQi zap$wI#zg**5L_Rtp-!qdam6t)c4R>WeAU)xzDtK;-_7%=aCQI=r`W?9i35224X64o z4}{vMB8*w@1@x5eMu~?R@L+ugwn-;}@M~c3r50T>mrrG%x?qaWd7NUM#A}=K6uSRC zf(1%7k>kJNwRjfNNzait#}tf*W-tv46d>$Y z4g~#^V^+U(0xUQs)v|8aVeBjnmrFm)iYkdX?j@YA}?MpbyF@F^6^JwaG%8#N= zbdi-IDu0^H_-Kg0feK5|r(qy=X(m<;H9^qznee5;3fITy!Ql<*f*S&Zjs6Z)p-w zq<0mpRy+(tQ{UhT&Y!o(M;~5V>oODk-$2j43G6ejC-=Z3E$s7~$?CWoGpn`^!eO1K z#C%#C#tqlOuNUIj@$?x;e^OxA+XT>~?Gcbu(vBe}GVl!cli6)!FwrIpuZ@Z^hjI)m z1}|MDUu?OKuQkaiE-{tbSViIhxe4d5g@S|ncTRsT$Hhl}VVr^x^XIV{!0;$M8}6Zh z%eH~zYHp@`aGWldHG&J9SMa8A^H|{)9&t_<n({nj^_W%?M7 z{!l;(8DnDbrVaL}9R}Cdr&LAgFFZ7iz{F{hkl-%B*323p9kUdLA7SV>nW%zar6@%JdYRmf9K z=>Sq^H9!t3NVBo56IN_WgwnUwpm|Y@C2tr!`qL3khc{UWx1A-g-`wF<-4}%QM{Lk- zWfbsaW-~tL#z@7PC-lZbeV&1-6r-Z$z$jU3v86>p^wq9rqAWRwHB3oCgAYTrTJH;G z^74@E+YUm*g?K*X2l?dGj_%@1;bF!B6j8bgFBi;W?{2wG1-Q=PtloEI`k)bO7tjQs za%!M9H^AC(emzyecQj+Tst(gZ? z<^*AZ-48NTl;9(w&E#|l4_D>%p~G26C|kc31|D8U?L!ow>8@fn!5Ub;Bnq1p(>VqP z*UKp8jK@`9QK5t&U>a64>U!eLa#e(?qc7o8crOW_6iQu^Q^C6QJT^91vDe*8EN)sY zMJLSw98@@fr#uot@>3Z#v|WasdL1}raV6Q7ZH_OLu0Wco5?>ZI*y`$cFfvJz%g7(4 zJDQ`(^sUlN%8Cel@LPxZd$<}_LOW5-UW>Dr>d_}{#Yr@UTOmcE}I$IkbEeju{7L=+jqfrA@z zXR%u@&*Zd@aC~m@0L885FmdO9^9~P{!KaqzxW!(8o{nP|q$Gsncjd!yMkpSCIc#Bz zy8c)kHL8PjA1-fkI0UzKZ$Puv+pygE0-WXe<-XpoxVK|Iag(JOEggYVQ@(Q@EnRSL zdpwPIDu({n2Cg7<0mOXTfbJf@;h{h+Y>qgC;r2P8IkgQ|oSDF0`IgAf;^tn<_f3Wk ziPezJ<`Ut`9CAam1jaWx!HW_xXi5_z7cy&M`9B^K2OTE-{1x2)v>BG3Q3Ktnk1GU< zeQ0Z-3Ix|S&}rhLOhSMx8@Mf7ai&%b z;bpxfTWgenXX$!aI3NUN8mnPS@@9x@5XNI50h=}MkdlU*JlC(qXwveMb_&mfzk2#? z%BH!@=>>L-a>G=d|DOTf=G}v>3Gy7jTMT;?-|$b!ek9Gq+HCl*RNOaq3%gGwQpRK$ z-jZP)1Wtq|S65K4fQ;Su4pAB~dLlFyBfU0IQf7`x3Ue;g|jXd<09{Nk{TDR%^CAYF4T4HD-tbC%3xs;eveT}llDkrmpfvg_WXQY#UCnOX?ma}K zMJF?hHMLn4w?{PMZz@c`@BkL}p|U%osL+mT=vkM@`~C0$PeE-8R4+4O zPPr@vvw8RN(w1DXsoD$q+6<>tgyVaKOpN@^F`Y+JR^ok}!7Kzlnad>HX$Io}Nto6q z#^!BOWUVdyQQ6E0UFcl)&XNzPqPz=_WUkz`QM z8ML;jK%9vORJ)DAvSAB6D1HNGmc5{!cmCj;5i8jD#)n2u*^5V1dU*%MipUGuIHF~C z2gfXn>A>zyplES|(?LR@%^`sA?c0cdkEpSs78@bVU4~ubWkJs#=%#;^bU95>fms|7 z2Y*BC$;KbjjJRz+KD#Z>uKoHJl?*PzisWIw)6>h)_jUyL$XA2=;52rAc@d6@?u3?R zb-bN&5RVEs(%Q9W>DFDdV8gDVivEWGz^La02&KF02(g#N@L0)PSnf0c0mH8#)2tBSm8uVRq(6 zI_l<563x#-^EOfDm2n!a&AJGh?;qplj;BOniV>T-+!W+$gE+9JDzpg=QxkV1E+Z8J z{t6}7AtuPyX^XScv1S-(G@B;X&Bf>HM{#t27Iw*%!6ma?dd}7tJehNRowarl@boGy z9k5zp(38XYSuCj`znvPohv724Y0QkZz2K^&g~tW^(ADiWe|Tv&J_@meqZJ>)v}G8^ zm5<=al|A(FkLh&h`cx{NvxgjCroc)>Y2(pIX=Z@zD-0TmL3q$pR8nH~3;?pAC> zp?rS`$U6kiyTVX>E@c|Umh z&6?~{i9oy{^a331-q3}Tf9SQFbJ>l?BIqT&m|BOJV2ze8C_Kr;pU!Gn!4rXEr&w?a z9-uQHHDSV}Q@rMBPS8^+2I!s4vrjUIf3>&xe&4@Q>3@>2`)dOpH%z3DcPKF{o&<9~ zkxO_ZP6eOjpTW$B6pGK-!uLtfffu&{t=1IcBikfc$lRqO+}TTYoY#UIK|fYtfhU;yrV0r*K;b zf7is4CS4`mX}1b$N7gZ0QVf~N;`JD|_BK|;DKY^+#8_`(?%jcReEZZ<*c-DKCX{W* zC#!UMKl(aA=Xx|O@fat4$?5cD{3qgL$EQ0Z{=w5YWArarNF?Lqq3z}rCWZ5@{~&eL z*3yPi@lZr*Pg%CN-yQ6PL&>lGtC9*)fgFglLqWhi?u%kZ(OD`Ey{Y?PoiqqK{U9a%HVFl=n z7=Q%V6X;G}lh2(s(5)H=W!v_nc=8|Ep;L~_?9ISa@HqXvsFio~T?~x)M!<#>ro`!u zJbg6$4kcE1ROE&XL%#PQu9+mt91PbZ4kgYGv-hZtNrnXDi`=LI_Ze76q)>mUhZ_EXkJ!yEY@IK!q zD+nxqPGO~<)WK$54M@1^fm%1cF>UAx{rgXlSvI>6RX`sgBb3TVQohE~kkza5Vq zUkd3PI3`SgA~C5NMT4X~i^`h=#PxMJw7z~s>wcOem3HH;o3zRN{P+iGio<*8afqr z4_qhRXTm{TRe%vYnTp#tX2DdIcCfs-8_$b|kmJbt^bXb0ait6JKrVv%_Q%pqt>qY| z?0_vkvApYnWw>v(8qBQi1c!PPqE@KOOl=4wQXdm>U&>bu*_y`tG<=z=OmZO7}C_~+z^XCodFvDg&q-&=#)9+pnCMnSJs2= zR>t4J-E)+?%djWZ9^SYY!mZvMSoO1u%h9RB`^Ad*&~Q5_H18%V)3Pd_ao&;p6}#Z) zk3oL%N?Qoki^lfVESZ;G05kXeg>}~NP+D{|2(jFJ`j8H>Eo>9dKw-^Wkh?j+tyd#p|05GZpSF>P7_NVK-UIl(=LR*K zCeE6z3&OjSaTo&sA>VTX6I2>Q=KbAIR#h*><4!>p7gJ-wU%VR^xulTw2k*n=s9Gq_ z>VZ$@LsWO4K3ia2#rt(P5d3&%7@QdhJcC8x#`*uVvJl5C3h1{btvvmcH;MM`X>|VI zX0GjhAKqOzgE_gZo@5_b2xG4(>B%sesAuI7SxcP4g70mdI4aUbI?XNDrxC_X$#{fwi~J^CD2A00u>#7pE1If7b6mN4}8G8yK5hOYxk5dKIDE}s}9 zinpW~m)QldU-ba}>vx!VE|^6gKf6WGYG`wwh4dxo0e)^5ZPLRMdo%J-%KC#N-Z5t9oo8oqOy|)Mcxgw6hoF1`q*&5U@zMi0QZxck_)F0|t1T`BtQ+BI0^F9Z5#o1uE_71{<> zQagiO@CZ6cw&`2K;HpW?_QdUIqgIU@`8`7*gb@RySiGtGMl@}zU=K@ZMC%U5D86k;px+`d7CPPT*Stt+6GzYKTDrlR*J zAx1hx6!?>b*adfPz_Kz=bPI{b;@6xvY3Xz(G;IX$t4##?DZbc$$c1|z@6dH2dSs{0 zFyC0t4JGf?bNr74GXC2D?PY8D1~Fq`+Lgp*VxD2UKs1$FTZTfd-#{p~3Z0wM@#?rf zp57*i9>;?*?gHl(bn1hDof6EN#^W&SRU6?Ymyim}s}&C>6rxB`6Y%O)n4HDy`7Vyf zz+&toioUhsWveZRYmeN?r=A3UT5&E=Yc=-58a24DYmS@zG;s9_v5A+x)`trS2nqb} zcl8Qk5dndT6S*J%&qr0jOkn%roqP5kbv53#{m6FX1t#WZrt=rfGnqGkw)t$EMJ589 z{{KIA$EwK4+70k-?{rwR=psMr<$YeKOg*lebsYb$ID&Dny5)aiAdzKG;OSzFS}D zBEu0%Vr6m6R1*3HEik{)gT5~K0S<5DP_f(qM-P9bZKM+BERe*3)SEb2Aq6~YxjWp@ zH@a1^dO`7jT<*#^7T9N#xy;%V*sfC!%|g|XS;?`*^@_=>#oOTPXM1LncQv(JT?|Cx zBP3*oV!6;qFpfWg=QHxD+*mk0)_xV@-%rJ2hu64udo^$Qf(CMJmpo&#`U%gm#e;uD zyBc_P9Fv-xCpd|z!ai$%c<%oP6x<8QjG)`N=2t3lG*-c%oAoes-%W@-p-PX%roeAW z8OW$B0zN%P1`d~Dnz9}-37p6r*gneb2QPT%u1GQTjye8r{f?L4ufh47L~w?>CbqA? z2i?zlFn-5>OryFi6kAxLxtk2Rz!-Ac=r}1=naE6Qx`Ewyzw=l1h0tM%C*XhG3D|^* z>>j1*tn=*~v@8D{)x9PU3A5!8BzJ@NxiY$X)lV|`TaG9V-63B-=Rjse3Jn#!L8HTc zFyN6hv`pL$ZHWUFcJBq?m-1X_5Z(gM>feCbV%YbZZi1i2M zakAblnqf3T1me1hfuSwzpMQb6FZ)LIo`sZKNUDHe!PT;zF&5CKx0@Jt8gOfj0KVkE zCT?#t=^FQ;ii``Ia44Vi4aJn=v3bq(nMDfUrRy>-NgATb&R+N|Pz7(i%*Mpv=U|^j zNaiG6-ZFkOz16pxKOEFdMvgzFVfTfwc})P6#wp{}rarP{DaXlBuA#P5%`Aqx9C1cK zDs;b`hlji+i9JyA_%wrG@73{i?w7-e*jD0k{VLGW<6!A@9|u_@Dz)VqkW-4d%;P+~ z2=j%J&FX{=X{Tz#3G|VB6lTp0CkK{>&<~QQpw^z-%l^4x!+;HqJ}SeAsQ#tWEpNf} zl?`YN2p;L84jIqk!-+(gRPc{lXnle8pQ`b!_+y$IxSka2`r$9D zWPE($HT7OJ35C9d)Bjz6X3f8FQGi=@{`dQTT7S4@$o&7f{?tTYu-u;RZh7ikkY!p? zprv)Um!D9fQn=6KIwOj9N}HsK5(;U^-g}S8Oq8_4eI1t-LW@+IXlQ7st@>Zj@ALV;{QX`$ z&kHYjaev&`ecs1;p2zrpgJ{x(J@nNIFZx5wmrh$AOXpcc(2NQXy6SK!l^W$u51$C9 zv7USAa^rA%X?qwQcQk@}{)(sB_7QZJTo|3H?n9fM_R_W-Z`!_P7iA7c(9v=}wBnIJ z{dypr?%(T0rCvqRO-H?`h-*Bp`yNg;CBmqc$v%3pCY*LZjHIba+i1E1U(G6Yr{}fy zPzCvI^q_kry|LY!8f@B4w?5uYS4Qrkqx^j6tC%pVXT6UuHIJl%%oJKbCy@RlvDC5K zht9Q$p!ZdMXyN>I^uR=ST0XRk{&Weawiou$W0i-fr}HlAo)kj6uI{7zT*By_SrK$z zZWQhEkD?2FchLo}{bkp?(xqs1BjG6l3VU5gs(VEQ-d; zMAF8ap>*d0{_n$K^g4~DXCC{|h7I0y$16{Ia8D$CPBgdXs^Jt(7y9^6sgDy(%9}hktodXWKpW^ot03F^_+(e;)K>kr!2Y z?@rh1dQ$FM5S?WgL-SU6(+@+DRAY7&6`kiz9in5X*o#Q2oE<^`v+hGf&feM2Z@d5b z`G2i@`hVMZ&1cNw*S+As*?0f{ow|8ApO%S6(rMw5)PG?-g{W{kBRGq?9?76`gNgL? z^GteXXg9Ur;z^Tp6DSNGqZ5yZ)52Bp^u~i&N~c#*N>9r(3Ss}eyaG!y9?>P<}sYMnYV{N+Pj^4rY)i$3gf7Td?@|W7eJdjw^Nb* zd#F4cM{m{m)3G+e^khXGwKrKuO|R{weiHt40!g8t=f}~%bsMQcXBd?<52c&3V`!CI zFlA(Y>6Hs<^aa0`?sx>z$;OHF;-_G0QRhM5u1cXx%Kd5J&UhMI5@_C|4Rd5I`rTMNoL?M;G(oC-Ghn8aUIB zUjE=opWNF>-(GT}A|VIp*?VDhxp*{PE#XHWN5;~>W(o9SnlH^-n?<8GBv93>N9enr zXiCcx=%2Y4=ir4a?`bm7Dh+B-Rb+Fat_%eG@QQW!(OpYx%U48rNQxe+wMW&^eEj-!{hL{WL) z5IQ5>iyn&2rf1xvDAyWC7iam=+~y#9q4^Lcy$5ObSvM-P&X;cZ9z~i)B*Zhbra28 zokf4NY^K)*ZZs}Gk}hwFpaY)+srHdg^qSEYI$nJXO*xc8&!&gc+amFF^Yo2Wc+ZzM zP7k2ce5{q>W7Z4V2&(-pfNnKCLM{0Bv2$c5RoN0ow>>>TPZ}rD`mTfYsaQPKFNvpf zSNc)+SqJHyv~W7@%wZ}$+J|a|uwQ`&3 ziVhFzT(X(EUgcx0+h)3Ncpnu>+)v;CNu;g1v2^DZ54zdQ{r|+FIgPiw|EK-eVvdRF zf4TpzIHb;d7p}wcyq93@>&o~PoMWH7y9iyyLV>-LH*@U1Dr22lBA941h$Gzt;ncfL zB-tn*&MXdvo0!8GH?%O-JAaU6k7uCQz(kN8DrN3l6#-kD&YaPvoUzh;uJv~fDbUJc zVpe};p1nSXi#>qo+845$a^$&&KvkwcS&ymbHgIE46kwayIPCpf%J;vtu@19Ka9igJ zW_8(q_My8w9JvyS$4)Fjp`ko8;C+%=R9^vO7>e@SZZelz9pHkD2lHy|C1x2L&aIh| z$q46fV=^v(fMT8>H^)ztn@{hS9%-eee zSFYsy6Zb5~HzxD&yyY{z^RR_z?vcdL(s9rqEW%mlDzK03ta*p90!rJ9Fq?k`g5!@w zi2QsNpI(<_Mk)HjO-l{lA3Y3b>Z16*`f|1=a2I=G{|Pwhdl70kT0%ia95l{d33vM) z*;qdB`>Jm{*_JBAaqC*ZbDKTWypYe)tn*{Gd^2V?i{uN$48}4U-Cm4VQW;2P9fL@@ z13Z%}6rY3}!0v)V)^7cD*lTzW|e>2(o)X z4zjhK@So{nrZA|Une(X|4tg6QUY*GF>O|t3;(E-CkcRq%`|SE6S4Pw>1v0Xl*`8-B z8OOp&(BdQw5hY_7sXs=Xg_aC#tny@ir8Sw-N$wE8CWEOM?}_r`PO^`aOyE-OWr+Fx znXz9sAHqydaa*P)F=BE1d9TrNc9NDE`+RvYhOBypR*w8U)IFZPJ3odf4tBy7%!KJL zr$fnDMJ{7}9b5OY4L{{vfRIV^SZS+QXnB7Iy6vcEW36hy^-U}|--yFgmAPzervrQK zH{kYEQIdY%cSSyYbaI=2c>x0%6unf)ltnammXrPkyzN$ebF zaaeM-oxL(coEs^#3h!lBq1%rvv}rbg?@H=ix}83GKKnd89$yFNUsu6;+h;h?;)jol z?1|yBbR4jj<3#dLU~o_m>h@MbqMrf$=Ny#x{D8^-5`WB0X3m-YU&bH7ga`0!{wCby zyAm5VjpN?=wBaP#KAbw%nDcs+!Whrq1fEJkNJn17J)I{=x<&+PKQje(_{ed>+cOzg znL>vB?#i$hXUHji6=u_)pYV82G@py>1hEYTsA^Y_jYB+t(fzy7imz?i4@ojI8%E*O zGdA3N^G=?7^b3~pdFxRF65Q3Sb9l&IhI6W41?pD8VxLbi+)Or;bh0W#2h%)dQsDrZ463m{3jh5o>qR=BgirL;E$=z|M5Fil;-L@|f zl*fQd(rpNO5=z|S^&mG-lv^&RjZ0ocV!P86jDE3+S^ln2cvp5QUS9YCrkE^*eKpIl z>HJ2}outjw4pj&@dffuC*=m@`J5WCFTaMn4FYqkc&X~CTz%>EiA$NHP`Ouq46gBq1 z-cvtN{oEMl&Aw#P(5%6DG+J^aRtxZC#6}#Iu>$A6kYIjkPGozNWuQ7vhx0wU6dR{& z!MB10ZeZ}f<@aiBCgi8JU}~Zvv*6u3DD8ZMpNePH-^*mcBd;?HjH@=om@n_72{& zb08f>T^@ms;SLCUHw<(-}xqR@3c7gKzk9-wjRL!YH!)=TM?|6hcYQMf>5LEF-m?} z$o;w&#HP(T%IyF68YI7~vAS2P;rh=>u;cw*5bUZ)&zXGRMZOZ(pBurdude4gPybM3 z#}t$@Yr)d^59B}b=i7qr>HkywnQdzR-{v32*q*~u)8+7^DjTYn7;#xQwz0{_>#;iF zsNm_Mv5dsC>G)N13%uRZ3QLVvhe9GsqCDUnP8}W37>V{fjM5rxTyIMs<<45*&ijC1J-3|cp@4`Ei!@$ao&7y zw+SPvC(red)x=pp0#Um}4}G!^)z)r&j%5z>xsc%{Fyrz7G5?7h*E>^v)bthl%nhEA5DwqYJ_K4Qqt6+Z=LR>&dm9ov zT_5h1O@^!Gk$i1sHV);xu`lx7aHmj)TX5qHbl&+3u{q}j9lK8vBaITAY&Z?o7Rw3; zn|+}By$S{w{3Y=QTd_WHm{o|7rX zs$tVY-v9IRqu{MmI?qo#3U*Np%n_Zyv?n$bLwilethAe5ekmK*k9T0**2)Rr@r0~J zoB$$Uw37zs?+~Z+np{ZjsbK>z;?47toTghD*q408y9zvCc6S7u(EbMYgbjdJbt+yy z6+^E1NpiVV1QS}<)@hC4)8O!b>MzzwGoAmZ z_%mm=$$xwP$t|5m^)roW_m5Z_x%3r1vQLj@EeoKQH-?x?{9W_tMJK90>MX6BSxCda z=+WT?Z<)G@_Ze$_XPV|DexM8e3dRFJ2!S9Tw9O_m$}b^rDq7 z7t`Gqy-dNkING^k6@6EvP6t0vr|;IJ(`)O+Im$&pj@qcxp4feO{XOLmZvy z>O|k_gi?nHL;CyoB-$Z0n~LnVparJ7)Mr^B?K)sion2;8?{!x6O8j4@z($FFn?Hss zb}y&nB45#olL)<~Jclk_u@HeBWwVS?Qa*!@HoIz)0>QP&l(^T#Eep-;8P7mjp(at%O zXwhYFnis1~zv^~TKWBA%qAr|@4BVg=Q8AW=!W_^)JyCaqjA%Ks?R+~^|dP~H+2$yIq^8XJs3?Db?Rxi z@^tD_F^LXsW@-9VecCornO+|^mgXxAFmJzZr@GtIY2)%`)aZ>7T^D?YURbe}cab5gIv8n|dc1P*W{O`eXJPnlw&=2HUNoTd!HreT7Hp zvLU&->pSLATM(cUoB-%UdN@u*-LEVD9sI`0rO@8r; z`TW9-9#uR3_3*wgT@>Ip7)ShB0GhV0r8u zX4u&QRCG((jU{*Boo9yN&*~dES)m_}t(PRbzwv!iw@zY`UNw7gnigI*@q@+YJcmNA zob{Zk$P{kA2?6X|cF0?ZLpD;(pm^={nrKbl|2eA5$|Bex&l7lf59Vbj*t`c zx0C%<((I*6GRXXDWk0W42q$)Ig$4XPc%sKo?zWPZVBv2FPD&JW8eopHbv zyoHhD^o3m2IL7Vi2jSQIEZftli@$VtvRC}au^-x>;njRg)Uob^nTldutnebrO;msm0!8QYq8m7aEE2*rFxCFDjP7Tuy{h(ukGIy?OHT11^A&p(T@y0%> zn$&&2*b7Mu+0*>pD*TobH?Qdp+wO55J|6i2b#5`3I;t9fmz-yl#O1-x?Huv0+kg`p zMK0_0Pa^rd86Hc-kyjPP!ieLs=y~=YmMNACmH1~hcsGh%uV^QwU1g9{nF7mRWWfAQ zZ{VrMef)d)A%s7v$Jr*2$u##aynFT{``IuYU!0pl4t(=w6LYVzg+AH15w4S+$IY14 z?k1p9lM4G*HByo2WT%0@ye+21)$?{lXW~~79841hMAR}(ggIl>!CAO3s~ z9>*lO-yPF%s;vYz+`b2A7U-b=fp1U}mIswDtZ~orcwyUCY3N#Z8qQbdW7PAH>>E)< z7^e}!_nFFZcB^hf`i+-t)y$PBeK$y;|L z4(!7ofEM_oePb~G=KGN^xx1q3rAHu6X2R0Dh#GTlu2b@@}~Ao!&$` zBQL>)D}P~cVgnWr+Jml?I8pQ~M2#FX9D8ObNRH6s|EI0EaLQu%w@!@n-_d|#&_EXL zpTxC}+0WWuYZK%qzh#}S3}9uDDgRspYlBKdVNSFX6Mo!*xQSsQIxdetE=D-QNj~Fvvi8(wuo1b%0L8H5x+|2M| zG)%pP6%Gfnv7#LJ>8LQ~&IGE8Rk=gy2eI5s$ku8cgJPj6({?u>)w;}Z#dH=8v^&7` z-86Wd5=BxPrMOI)7;vcb1Bu*?pz~%j_d-XRc{0xoP8}HwXCt1Yy~s#r^~MEw=XnDA zv3xSmQhv&w=zAcTA^Z!AtOsGWun70fG_}-~{eo5lJFsQO2-wmsh0)!`VEwR@MDueR zZtmOh$jdUpC6#)zz;hNf7^T4vmy2w86op5Z!%@2PA9!4mW#~mm_UPoV_?D!br=g?oDm-1IFYFej7J0B9rr7@lLU8hU^2LYtXUw! zeY6_Ss+}E$t2P_4gP|R`(x;o<@m2ue$J%0i$SwBo^kH_Iu`IWxayrT>gtJO+&v4SR z3Zgw_4A*5=0tF(W>=Vy!-m7i|2TtDRp$dyI>97=MZFB=2{GQ?-YeVkJyKEpUGhmrX zZ*6mQ67Djb&PB<1LiLkOwx?x2&QsMwmzROir*#*4niRNqBhJ8;rxkGcxeW$8orY|$ zNZ9&)1Nsc=VZXvy?y!-DP`N@#Tz8nV?*d;6M)9sqF_&o8@zPeK`Ws ztB3q>lWsA%s7wXJE7D9?k_?PGr^MOEDll$e`jC|sfMlB@CO^}Gc~45NPHCmP3gP2JXI66!S2~9Uy;mTtu<$4%Q#oKW8iVE0!tgK z8jA;ANGV8iHUL7J+sIO?=IG6{VR)ny{E(``6cN~{s2u1BFtVv8%`e1 zW!uMmAU#{Y;`{rPn9s@YAvLrTPF|l3p+6Nl&0G7RskH>JA3lV&6XNhqz(bh+L>i~= zKE>Aj_#}8E&d)ncRtBljlVOE_8A!a5hifDGI!t~NKK^P8TY?-}tDC35?}Y$#-c~}a z${9#q>#Yjj%=JiLgOzGE>wh3x;_boW^`Byta1^qu$91 zl9tZoc+@E@QEkKZ^KS{Q0$-3EYcV1>@QmoJ5P=@1aRK3Fxkk~JJxLZS>OVgfyd z>l1}w;9e};uu+-&r*Mp{`@0SdkGL>1_VCQ{QOD5tRv;<~Gg!3~KT-X#G*@vFmnqAHguS>!9>@4jW9E6P78c3{p;)OJm)AKK6;b5eVYcTUsEzMuz!Odb75Bx5jFqAI=cL1 zZz~5d{zMtv`u-DN%lTYsANp^}XBRGAN{(lZ0>Pf~WOza_Ne=J>yu1o_&8UU+(apTa zaXjw?U&#bFKgETw0TwCmWsR@=0L$=07;~8C)2gR}P?`5w7rL?L-_&7o01n@t z1M`j@g8EzE+0i*Xs8(E!Ic(#=%075WylYCJ-QW~h41B~TM;~H@^)>ds=NTx?nLs?1 zSp$V; ztO@*3#XXFQE+$RxuEa%g6zA9zB#@F+V7xvr0F8*rR1iSIS++3kw%-fn3BVU%UI$sL@uJ`*OK%tiKlIPTz`nwE||?9X3@LcP2D z;9LsNpZ{16hSv`XTP*DadzQ*E*I%8(3{4k!@i7<=S;T?)vCWWxr(qp!#Kzkz@R(u< z9#~~SQq9s}bc-u&t(p(T615lgZ-d4c8KsTkfhMk993U!Wujk8aU-I{xtqGq?49f0 z@ToHZ*B$)DJLPl0`rkL!x-SNNTU59yZRd#?ttWo^31t1`L%3$Lt?*S_B8hXK$^Enn zB+fU-aB}Sr*dI+bn3FYw$v&$H)=#5hI6H>zm6u1)NBKg{Kf`Ee6A5)^ZsEuK>(NCl z1Z%hdAz3wh*;j8@!}Vtx+-$xN{eFrwNP`9pkwLJu9+cK<+n~YJX$<U9YKFlc~>3Ji<-?;O{j)Dm8E2dwkC{>W66ojdpw!{3b zTR=Q~3uaiUa7EK3n6mE)#Jf5Ps)HB7vfaU8d)*Hgv{vCa$NjM4of}9M@fg6o(p;w@*4cl7GunXN6ZzB-!w)sc-4UrvLi!%xVeADL|U zVkxGq|B>aLw=2=xZ!b=(IZMPEgII4fP0+cU3RMR(NxqdPW+xm)8NXK8cclVL-6t>; zWY@ro6+dA0fkN1?>@E-;XALVpOL8I12OJ%g4u`D1L!(QjK+SXtYTF4QWk7`Y*Qs(A zF&a=XzZtyuYBOVse(`7dyCmIZ4A1v+z&ondC=)8f7Fbk6-DxSX%&vm>ZBxdJdG+4p+^(>9VWmzt$a^f@UwN3R3P|z2yfSuKKux?K&eoSvhZLSoLO-;l*9=>>~C>OjsUqYkuM@zv+ zBUGBnJ0;DxLrq0L)(>})$$SlbqS+tIua$XF)*pf|PN&q~pAyO59`%*KHeLOPP%UCQ zQ#U3Y`Q$3+_2WEj9H+!N6%T-gT?Di$yd}9(BZYq++0=R!T!f|mqD)Rz7dv7qKMU<9 z%}ETaGLj0CjO6SHRz~6^3Ah`Hq$!WAEti7|3rQ};BLG^LtYTx@KR~~EH`^}q9iE(( zV4mxa1I3YkuxCpcyqdZXR*s*@Y?&s)mqD+w)eA}lC+JZjGcrs#`fE8R%;#`;)+Y9B z+yqXkMv|-C{@8N=+H)vZm@F{6zZYjEPUn{Ab@M#s)8P3poo#RHEI3ihho8g>l60TpcZrAMjXbgtFuYDrIsn7>Ffbh1#YlahY?jT5{f$Xqo7xc zDN=30g~DZIPwx$=JaQ2CF1o^Yq^NR%Z!<|qdnhZC{RuY-s)^x6XB0mfPCWXwxt&H+ zG3$IET;~qKsCi8&8K%t~EK>*dK)!ChDFMrFo(KKu3pn-tpGZ=>CAxlG$J({0vG=CB z3q9=p$X>1IFc?3D+0?xizFt=2GRQ(`8xV&(WhH|7#s+w~@jiY}m4p18SFlI<9e;-L zf_=4m-0XuAmiK{i3 zoQPB3>oYMe=KNkH%k`Ek;IEImf)qPT)=BF-8jq9Vs_zd99N*gu#wPv-8)bXQt5RYP z4i|vELOk|P&&FsF=gJ@45ID^F1O6YCar6umw48YsV?JKMSn<=sUr7szi+QU82tH z90&()3eSLCeiR;jMX*U(kAIZ!VKJW{ml``8N>$@gcSQsqDs;pxUBP&3whFi4kv=&( zriR^CHV%y{zY7|3C`i~%M$H*U9%9dCq~Cr*~o8+ANl2d9sxz z=3x9Mlej9Uf^pJYxMcJOqjxK_agvgFI4_OO4t@?pZR5CO6N`wg#Z zm^Gh}B)I({1Rh*F4gK$Z$TEz?Ct_s+s|*X+9N>+Sh5f|wu#-@-5=#!OL)A8}T&_Gul);ieZzpUTjDYY1z9F7Vd-6a^& z`_JK)(^uhJ=ZCm=T?8qO`Xi82e~QnqYrwsX^LT6SS=M;)7mCjvMTV>!EL(GVri_m_ zZ1iaaV{dbGNr+~B_l@DMJRXMWx_3ci)-BdEo1b%hZ38;525`CKcHU*Jje`?DKxbYb z=$fA;mAwN*d|@6L2oh&T=@ua)w^dNxA`1!4w~0}PD*oua%AWN2TqEdAhDA$x2H*NV zK8wE-x?H8X3;PtAVA+veRdkTx)`$|UJ$Dn@ABb?*+g?F^U>xtD7D0`1;qXsyxlo#h zlINQ=nS|pvg`x(s+&m?|u2A$Id(Cgd--B~;Zu&&b2$`s;EZ#AZ9V4I3AW?DRC{cist|BfnQvD#Ci@9#s{mUe-C6ITE(cR!L1zltFFZxxJx{u+`; z$}vG}9|=$WGvwZq>-I%>IA%BO_$LAn zmx#h+!B6(l$|azDx&z^FKW42s5ArLMQLp6#>|1C6*(d)I?c9-&J3|V_ANwG@+}jIg zxl)ibgxStcgf{~{)}|&cRLMr>Q8Xz*(!nQ zgHcR(;Y=J`+XXXsl!2GVH`FoK6YQ}Ja?yuYgZYcX`I(4U~MgkY_^fA?IsqaY6qzX#Z4%WXf1(qCqzP_|Bh!!mV)i-%d!7 zJz-uw>pT82O||%YU@6>~CdW*<>BzgwOtDew1q3yOL#>z;<91h$dv?DIAFDB->p7Yo zxV4d}I7l-E0NkMw9;EVb13T+o7BM*{&8d1L9=tV|G%ePE9?ZmpdIun4^?VG!C(G67 zYjF$t&#g?F=c?XLCI=c4;HJtKHbeZjfZe|pO>QZ0x$BNV|B51_vv40Sw>XT3UdM5M zc`5tD;WDe#=FV20tHyX3fm0XMk+tA|&P51aS(UN3Axo#Mqe6XHf_-PB9 z=RcRIZAgSMHV#0?oP*B77woDRn~2-oQH;lPU6>iZ3rz;(S>NwdQ0@UohHnV5XJs3> zSn$uuya5bW>__w3B$W2of$8c;!RMMO%3i+*SD)>|D697vzO01EdwnHFPc%5$-<_bf zq!8R=uamUo7+j>Vm`zJ;hI5_c@ofHWp=+uQ7(csS!@;%jn0Z2r=gF0z=!k0AR4K;{+;}Q%^E882ztNoO)DGg9 z#rHTBT!2xgGkKq3A5q+X12nE21}xhOH*gFn6i?vDq3x`$&sgG1unYJAFg6H z7D=B%Ek#xCn&=qLdTkJX*&)p+?aU@2$7aFsIt23R9b0F(Sg>YZ44HYdP`IR`R5)6< z2+Zb+a*MTcP|o)&EVN&WdW)yQ%9<^3B)NmEShg9BCTifboLR6pQ-wA141vm+Zox)3 zX~yIA7$!dLAq@8f!|@vlY`DS*=80UP<$LWQyfRXXOB>8ZrY!@X?H&!&?}Q7|@4f`t zZUg4!!#JVaD&7fv_>zT;?jf|9?+Qhx^32C!WpGaeR(s7OeD*9=cx&niMrEZFUYDH% zQ~Ki3w0#|G+cKZLc1dDCoht_0)8TkJqnMOU8U*X&TeWKwC*t(97#QwWV;0-b;A*m` zb3D%C2nJx^vHr2My>_^oHbMf(T z3Wl6o3qvPT;pobR=+IV$!6t>|&&nn2wJvc~e$3Zd0!mS)!wT95i_opChz)cL5zLK~ zgN{ILEUfed^%ajuYH}TPt;<2{_Lca&PYVLB?SNa2Wd0h-eDxc|8_^ET z${YLGg+WUourm!Ac_fk#`XRYD3_TYa306(iWStdj@y5^;?ycx@-euhd%VVb2nrFU4 zU$b|xqtl4II$1(0!(>rVKN>=w`oO@l1aMfN0tN*Ee6L3^2&*)>I)}Baxo9_N?eBnV zd3Qnjm zvp$0Gz-KZ(OBAbumcsbza=bN0ggHO%w&41gJNRe&6G(wqaDI@%>5}4{)uFp2@Q)Ji zFe>DqZ490}GXo7Q^g*v?8uZ2OBcuE4@n%Iao4fV`#D7zPTBj?5yz~V`*#8`sCR@VG z2R+yx{R+CW^7wx9%a~m|*W9*#3%-gphBco8SX1p$%u5FqX2S;FD^}D+9)@0LU8BFE zeZ_M)H+%{%A4$f~_s$D1ZsY5B7nU%ui&uh7!&f%Jc^%g~gt&g#kWmbFLM5quc82{t zRQmi7r8SO|W-CQvT6Y`NWwc1K$}ODG7J`L4H$(9mgilNPt_fC@%a<;N9dV|@IP;PC zRR5>o*41TbdSD@jOfEr>Tea{LbD`-$CN8r$PgDaugsvnFCzSX?k?@tU+vO|UaZ8yg za=wd#$`2SasL33$Uj;_ijY7TE_xKvZbl zc@ioOy+V6$SuUkA7$)al1qI|;QTAVP;f!#GLRVaCbXJ&7+V}JXe#^rNE+2%9y zjBBP5w>$6^vAyU5Cj1ngzUF-XeBi}%!AEf7xidL#;b{Ey?e;=kf_Qma1(RCj*^(+6p+MO!J1f3p)J3~JHmrZl&DX(p;aJi^{lk$~_; zYH;gc9a-ZXLrs>w&UjYN?hrA zF+9cTFs^N)+#RiIxV+;V__n982ldME3-7dE2C_Na4S zhUpS-$1QFW0wcR^7OL#x-XJQNI1Kn9m!8$-hL!Ka}@%jO5mRvSckQ<6t_^ zgiNyi$-apHVqwxP5DYC0h8=;E$o@ZkUCShnbUL<@Rr6QEbjy*<+jA*6%aQj|)Ky{g zxm+CIQb#&#Sy0&42mN0yNPBn%zTobVr9HCvE8+qBsZ0a=Vwb@o>mk8uO0Zm1i8DB% z1y*xAN&H*|?%WM6Ok6(`|MpCfy^l4IiNa; z@NJeN^KV}ZnK4ERg1%^?$QxS}S3eHJr&7Rhaxr`D=2oE}`<6%?55StiP*gwiiN9s4 z;MKF^xI@7e!rO9(5hTZg{M~;1UiyJO7S;=gRMT;SUykz!kQQ{imES&TJ5!>%(_f*85CC@rxU zW3wzBlLGyypTfer{p?$-C_0G->Ylvu1pIlM`m^?10a<29Ro=O~O6eA;8y` zagjZREqhFurCR0uoL3MT{a%L2ls93jsUape>hrn4aDj8{6nN=sg%T4JQGa5Gu=AZS zn`-!&ym)X3l*Frfo^=iwOH9I$_jRy{cTUDnKFe|rr6gpr3U~jt2=mRoqec+1fb3ZH zn0<3}B2Jodk?3t51=c2uiQh6SCe|bt^jj;?`RX0wD>at+lv>A{OW6rjp4Y>g!3MOD z8_kV*qsy&wQfDjjMstOqjIqL00mOeifao>TIPH+jD9y`#&Rm!aCgJLgn0yXO{ap(0 z!qibKNeb8O7m#h`-R!FaxA9YpPEd@WWIAPNXaVDmxgpbiXguP}Pi0N~RF+a`F_HZ#|{R{)2 z4Z#>V^*k&+Ukf*)-oc2xYl7&|g-oJZ1!lUK!k#Z(AlSSX?LPbk-|hO0Me0#YM|~6A ztH?8RDtRZ{hQ;W>^TKz35s(|gBcw`-L+|DQ@V$|Try?3)NJI%9)O16%LIj&=K9-AL zGnT!t_>2sVmxS^cvdlsJ|0p^Se=6TMj@w(wmQ6xJq{O+er$K2GX`wx&6iv-H9nuuyAmwRujA0` zymf=o{d-{Q%XYfvP8eAq6G-nQd%*OG$*3y#luq#9jEC0?GPe!nA$+YbI0eY?n5=NH ztzL!}#pmH>vy=G-DWwnwx_7~1saO<15$4-lP3B&38;;6bLdRhxx}kf7 zIPILt}f{(H{pDaSx9<6Xs`zsZU>+AC^##s%H*i52i_79c0D&} z%v>Z4_A#~PLU%6^m6dYr^d>)gG1HLIYpg(zrDOck+t&2--Z{L4wPLLAfiApXcMyGt zB$>~nx4C;llPoaH!5=zJ5dTVw(f|GdZ(B8>#;T_zb=ntD&TgVXy+!1ZVG=KK_$S_6 z;Z9VKf5e&udE}80IO5$-ZR+F!x8}nRi5z~l?hU{OHD+Ll^Yp9^z=eAQv0&;1)_!CI zR6WvUKJIhJvFJFMKev%ccF*T^sGNX?F>^YnF9}=bNa3w7UEJRJkl|sDU1VEkIb_1io^^}MI1=GBdfzxU>Me*a%(s!0&Lksq_~d!_N|e5_1S@t` z(!3+8tk1e5C@{4J<$o+Angxb%KII08_HTfPuVXRdTP8~D%tq(!>clBk9r7f&ygj}u z`~6fG9@b;9-S;4r>W|RSPp)uz!CR74w}WpODZ$G6r@*t9AE>mgGO8?E%hfCr>?ZeB z;AqQ|TjH1b4r$GBGpr6Kr%JFIj}?FL_-FHc;z}5+42AF8Zo}1kV{qE%3FqM| zfpex`!9f2x=Kd$e3^uQXEvLoUlJDc?1@S9!bJ@i5q=X(DnPa|XOE&al%0(l3Z0||f zZ!nn=@-?TI);96vv+^i!UnWXz=tRwTVr=NaX!H@~|P>l}b zG|r%wgB46(mV)+4HPp?c2G&0G2k{yn%31+C@X!Nq&n_co#}G zzSue`n=aqT?T6Br;G>uyu)+Nyt~I(yrhe*!-ABhD{qQ4v{bv~MYE;?5HR*8lY%X5k z^B+|cy-2sl%CZp&O<;L_C5pwzgTgm6+Rlqb|3y-)V@CmBG;Sed`|uf&EL{P5>{+z= z{T}icOu>{d4MI=dc{J582({*Dm+7xm?jtlh{w(@!L$ z@g=#I>K1AlG)3EdmG9gfdNT9m$s+<}wj=9UR0!sb0+W^Ok6jy2Ki z)?49;Vkin8i^5)80<(0j@%|E+0>fk^XiUIP*BR><)mpQpqI9;4bOR z<@jsTv-m~ZqoB}w5Vp;eMB(^o`0$G3M_ovS&#kv0^_L+IEN3C-d?4=p1o$E30vx?y z1y8TdMeiMs_(X9T({yVHY=Ul}Mw~Hgdu=PfNtVw)`>+Tygtvg-6eYO$^9#>T;4`8Z zh16(i)HB(N@d6H@#@+xSJvj*QvSicl>q1?+c=s(WOz7cQCm8PqoCd2X7TC85X29k9EGcp1=#`u0%=f-JDi*M8I1$SZYSRe7& zFU@uYJF=IfZo^i`KeWJRGhapL7Fhpq0*AZO>;o>xHZ}7l-HlOP=BXF17rqO1cO;o; z9U~ysx@>c~6fB+)NKYSFgOY;BLAF|(Il4%OU4Q%@zBazh<&nCQ>kLOL*=S6*G@QpP z=k}AVeUs_Ix{t*9xD5RA7htY8JSC6!xG}b|9n|-eGCN1)0NMPC@c9$--~x9C3hREi zjg`=2J0%MtXU7BF|Fo9oAAfl z@OUy=WVwVMUpj^FBvjAumO6!6M#6C1-OKiJ!9UvaTpR9739|VO>Zs&Ziyk_S*gZv^ z-MH~I_`T1;Y3=$TJNYr0nEZem>m@?)ws6!vkxB;btT8RB2~R5hgfFXX;JEQ7Dw4Gj z43ehuO$88lU)>EdhQf^aDGA1Fa5g@x*#oG18vY*o&GQ;JWZv94M-!)Pg6PK&@O<8C zU>qjHKRaEVczX+NZIocsHX`0W8HV@IsXmF%`OZP!s{>nFeOo* zp~I%^f|4*QzE6UkQo_x(v%H|fPKg~p84b@*D6;n}{vh#;fIEHXh;lxshs@GsbMF)r zp_~JFc2N%R^^u#@W#A5WF_&Q7OksANh&{U?=ore{c+v6TSI|5Wm z$+MAU^0YMpUM3GU!1~)jmox zG0#Pq$CCFbyZ<9>n_v$e0gLchtp%*{>jkg%^Fbq!z?M2Yvj1~F9=gFXBvaq=jV5w) z&j)kKqLR0$A|MK)Q>U;>Z~Rf*`vhHI*N3%>Etq91lKAGaxoBv44w|hK$d5fQvFGVA z$oQZNE7xDZJ~MmPbJa37yQYwTTV{l)Nfp7(#X=xj5&%7AF=V3$zg%|CVHElHgdV$a z5?>WYLZIk7Iw9m3EMC$BGbTCU?`Hv!vr>eaFsKaXOXuKg*%s;>-vtlnUB~=8=A`s^ zKdw6S1Qg%&fr;BATlpE){G>h7Op`+`tZubMfma`>?4tQRn^XF{W7$=FS9KBCsv(Ud zVHwn*q7v2_aD48Kui$k^C($c6!qk{VaOwSob#-lEzOE3iy-J~C7In0Eo(?RueU2YX zLrG^n5Z@o32E8k8Vw3cK=u=*Z^-m|TX%h0xiwrJ9J%vH_OjGhe z&4@LY<#x&~Q~4?u$}G(mXBM#?;{WvXU-rks&Ql*j{OEIBD?5v{ zfA&G&VUFRo!3Ar#)KQ+U2}$bROU_y;Gy1h9baAj1zJD=^)p4HykyjL0SUQ!S?47`R zy?%yODtRPn@h)mHzlJv`bQ30C)xhi>42S%)o1mrZBS zm2&fQ_w!t4`(l{Ewt&s!r&tr02}NukXg< z?X$sW)D*1Oyylnv7e#Zqe)NmOKDtGv4GkWQ)1~p95PyC)*v&Gd0gFV~XFrr-(gqRc zK|de&U)+UNipucinIyJL>9JYtbarXaQM%Pq8l97KY3uZN z%wcDI@WY)vT$4*RALQ`0A_Umk3#T!|etEFxt~0feCA>~?1;$ZPo2jfY!G|>h>=5^U zah^hI?4!YsoX-P3_k7*!NPrzLX28%HSz5PYB@Vv*PJDNB=b_pIvZ$`bcGaw0h)ay6 z$$H|&dIOb1_Kl^ud3$DQ8b>;s)ad1$F^hO$SzupxXI>-?vi_oy=zJ<9z_xPu}y zD*l!}nOwpfb>B;bG~eJvyB*|a-DV;eJA;uQodvO7G2rkg1(~^vao1mlO}P3KS@)B~ zdutELYW{?D{VqJ%ex8ovREU_mjE+6o&7QiHOf5Zf@sF|;c8aG_RUZd%;_Kku_FSA$ z6pGnHR-ixQKmPXo^K{p`@v=$FtH}1|RZx6o3!66<4nBWGnH}7_E4v>k?Y#$BI)S+? zUrh4yALHErG;nZ4kiFd*!*^X#$G6S0WLBJRqnp;u!+Y7Ku-EVn-Ep-Z{g!M3Htsa( zR(L_=j&qv0R8P>X5M{>gf7yunoq*Blt^A2$!#Klz3KZEyQV;FrDB-CMqUQ~m88f>v zqWct)&ko>+yl5v6kF3Rc=dVJ<)@N{{Zz0oi`YxH=f2l0NQWj4dsW71d6WJ?@k!05O z2(lw3A9&Gmv_<_aDY|38oc+mVnI%YpO0E>^v`mM$HPRF}WPgHs#v6)-&vEYjiu1>7cY3h9^ap>Bt||U4 zswa!4pMtjHH}LvM3OL9yaO71!);xSiUUiG(Vc}Gw{q!OJy4H&!iHq35X~uZPw;4Ya zpQ61+yK&R%r+8bk4z(p8+IGCEz{u^5$hlx4J^2mXcrZZb2PPBPyN&r*@R&%1+p>c; zhWuZ84m?m7{F$!+9Mj|NsA{6ag@x!!pRr#bf73pXT+;J^@%X4#Bl zymcHdc*5-{TW;c(cY$QEr-l^Vo`>mCzBpn3U3~j|5fy4NVDpMXf%W&N)~nRmqpK3o zd-N2%<7FZ{U4a)gmwR3=O=EtTyyIP6oduTe+BjJ2%r;gjvrQ{C*{fd?NiFX^y6v=w z{pZSwF7Fy$BXA8Q(z^LcN!>WG@jI10wu#L-U5MXy9|ilRDy;3O2-6}OKwezVfq=bD zD6@4O*9G@Lv$QyUCK(A|N`8{*mp>x=Uo}{*_(=5PgkY+VITM-l2Prp4)Ym8glMQyizJeiF$jgw_1yD{-yy= z@?_Z6qa(zRn^B1R?P4V?SYEKhXUsF>?o-ETsP6E_zI7%jl-dk?;^skOyC(ZmYaf(< zTh9L$WXWk6?}D@BIDP*pg!tz7^Fm7>k~LM<=(3sXuQxcOxls<}>gzDyzL?$3nRTDI ze7*9lRR{KNX3Co`@c>4rDxD$qz)sG2ZdjoJJ& z0^*<@kqI0=4g!tN^Zss;VAkE8OKzPKWA5{l_|7|zLzS~QemNOJMf+R8kYnH4@9_bP zA16`LZj6^XeJ+S^(}tNR%V6e_c4Ayqh9S$%d4X9|L49~NF}WL$8Y@JZoNpg-clQy9 zY}!IHj|&mq{as*mDF_m`Jje4&(#$buV_2+3Mg>M*Xk&GE>V3A3eM9k8%OmuRxZAo^H@`LjzNZ;0Lp46uR7aU-@-Mu9czbb`D6 zlOZd09o8jr-h{)O;m6B3T6Ja~imm&}cPYJ!2QsH}+5E-O8gT$rlo__#LlNfbRlygZ zllW;o7ME_{$$254<6*^5HUcy79za{B5&JBk4T|;qDLN{MLMWPj;3s_{>`iaI zy-BOjeuJ=@bRLMcVvyF8AJZ-4|J5I&sDY7YZTyR@n zKfIf#2;Y6Hc{Lg>@MDV{>)-u{f5mSOy?@Yyh@7^><;xfGLWDvgT;@Cx@biEx5q>1b zOad>TNrzc-f}j|0n%_nuhdLW%FB!k@d>_`XoHSA^NePk|Rw-RNr| z$7E$qgs#&wNQh7#we9VI>CdEz^qj+d8OQIKf6*S?hjxHh-*ozJ<`C8O3+5?RJ;#uf ziV$-#msF0)Fn>yc1-%Z?8n3{z=Sr z4;%RNup0Mr`{=T+g%CJ$r#$#`61|=Inwp*GdTU)JoaUiU1b-Is_KOHI55#F@=Wh&EV&s}_F(W+~avsUC3a7S1g6jqHt8x}5a#<5}|i0XZq+0%m=kGWpaG=pm2)r9a9JdD+TS^hqM8oJ)MVorBR zvEuu@Xx#cI*fG6?-@so2xuO%<;hBH&lp?}JZwXdCaW$si-i(e5a`+}2+EBvw2NtO9 z!{yr&Y%H#Mfd7{ix-jb@PsdOOBjRM(CBDTpjXO(!YklEn&Rd{a>k3sBQzeG6)0vIj z%n44~A#?OF9G6~5XWQ9BaA6m`+@eC84jl%ui_MVaIEt2EdSGBhS!vf=UA9X2GDOsO zkdNLX%+xo^xctX$a=wT2`%Y@XSvSXs@&zu_Ze=`X-&sfNlx0~vAxTDdfg!iwFk{7c zZGoc2aX6>$6^`HgM>HO5G8OL+(VfoQNQ2!H{_xzNwAr$aE^j^$tzQy($M==M=*7?E zjBpel%_!y9CT2j;bP?QV)xk;grvh0rTe;(79+TYr11Eo?hyY z$9v<+y%oz~kGBU795>*eVM{c#^d%=bKg@p$TY%emLuM~G!~P+Rr`i?qk(w;i{QD*U zQNShsSWYJftLNa}XV%2|{@n6y^MB!V?QUSkvZ4CIK`O-MimXVR&P3?lMmL!qm?`!a z?*tprrp8dZ%uj^fCuLK-aZ9Iqm+E zIDBDrjchp+hTB(gpU?L~cI7Yzv+bC!E6LydAr*dAw4l@6nQ)l*=XF&U)0Rt^SBR#5dy5oYFBj^}(k7bd_J94oQG zKO`M(F9pD269a5ADZ)p8vtV%WERjr~0gWHFlCQ-kc+#g5EL?x^U5B|dY}Q`zRPKk2 z(IN3pbW3vILJJTU=2pke(BHp|rD-r?!!T$oQQRJ4%^ zP6ESbX?F1bHc;siVJ3Z7gT}iRxVkcdjNW=gA~TBUl1E$~)P#$u`*8~T_o%QtH;J># zTwU&A6-5rbSx@_pohSOA#2CfieIWE{E4Z7a;Qk2)_~gH8Y85C1w~vg`P>!=RQR@(P zMSX>*Qx@UCx-QzIBF*Z=7{h4HKM=9~47&~9!R(-QG~uofEfx;u?|czX9?xa@XZ%u8 z@JR~)qQ?)v1^t1`G;Fdv8>Xhmdeu5nH6Ilyi2i^R z?9cP;n|6{R$3YnSeiYV}nKN4+Sg`G;FGzEHAGLS#hrZSt@RAwi{PDLi^j$TWW$>6` zdoBEzaF&kms^zUQj-{r4vvE$`Ewn9aAaApjnAc6BQ1GGw{JHGQSIv{)!dyP25^?m} z*h*(E>Vo&Q2Hm{J%A2Zf;P1jQlvu98_}wgrEK?J9OTkT~9{s$JpKjo+{Tdi{rv{nJ zPhgdaI8*FVhZl=1n6ev2ESCuheJ8W1|Iv3Oqe%+RZR~?9$qZ_uKHo8NHNJc4Nr%@) zlM-mhzJxi<`Wr*&^*#U=&glh}epzOMVk5oK$%nk3PS7QM+16&b7k6D%f!6UpSaKl% z6C|x6CHf>d#NNRNBX4MnUNLzd^p86JnT`j~RAXUa6;66p01n&5&?2=F+;pa+)Paif z!&XzUv*tWC5lhBXF`Nt3A(8CewT`d1^)cV@iz738K|Z)tzrwsJ6{yq9X~8vTvopHl zAoa~xkc<&zcY9cZ*j-Ibd3h41NsN`hem@6HCN5-^R~O=zssQ-;Z5FV?ufU%3d)ACL z;l{=9$n^LYT(aO6Z_279EKKmASALAZVly=+s-gBj+o`R@=5JpI^>@or zRfvzTKShwArIr|#pA33$yU3yA53%Sr2iC*gSYKAqg~o=Yv}D1#0Qiz|E%jz}J5)e0s@gjb)$k zZ3^sh!S?w~z-)bX{)|(+m8OsMsu>Ht8{57b8s{Sev zuIvnzY5VBQ!|!3${I!titjTt*naaH4o*9XvPSjGp&9BigWW9f9z^!+4m^JA~xQvAB z^x4V>MB7CeA4$2xgVS%Yh4`{wm zfIL)S{YKMyTN~!U?C2WMu>63D(wSGsH`cec!`3&85`Vn{9C2LrFT*<;-%^fPjTPnX9@a_MAn zN^-z|dbfz1a3WM5d`%h_D)4?kS0jg$$5H!{1N_;kL@!^efs|k3xUg#g9htXiZB|6H zxj9}{SRLJbsTv&*PiBLwSJ916wDI4))nLAV9xA%KVUhI^Zrd)3`*-h~~a*Kh5 zhYrEUcUAbSR2GlAE=B*tqRcXx2`GK?62BxX5DlDu;~}XSl-;HR7o7&7?5hf?%L(UK zEfXWh;?B}hmpC#}KNqz`b3tQP8%nv$Fj`yGSw(AEsGB^Qb$^foU7Tj=y@(v%x#0r! zXGUT1$B($rX&=TmxZ}(??tk}gC#U2`2vo%q@%2r(Agd92Z@njqNiuANRSy58m>?Uy z$eJB+d<|yd-?3`x9o(&&fq^bE?8B@{4NgFnX&qLMe z7xBjl9r(U@GVJ#~i>;dJ^x?=CEIh~cKyJfuYtk&vhbT!O`RxYvN2cg7yd2KFzkwm; zDV$!V70>KIYGs@O+ov~y%llF;uSyEFLoT3Z634j~C`TvvrTB}zhfSH5_^hyzMi&@> zLxm>p35_DM0*UD9_JoROufkM%36J(wVhxpKGB4F(vri+=cxDBA?#(8KykMOFa5Yuu z&P{h;KY06OCrq;fMwy*UJY9n*K679*mt~=&5XIAJv#5%O2uO#gV6B53JPoZOtF(W^ z@2lgeCfEXDf`zD6wurjl=iBx=d?0JIim_U&zpSm}25$9fqN*m|C|Sz!F((C}>xHM} z-a}QUc-j?CN0>#rJ7dX}z;=3e7q`#2u>&iN>!I(2II|{DiD&wC8`zEKVCJt#nrU_c zvU+PV_K_@}m3>z|WQ`El~vMVyvBcmYTC>-oYz%J9&csl4P-6$n~; z8?N8_4zqX+T>2~y9^6h_u+;%x?8`I4;_-e}#_^E``_e3#%X()qrAH2hq=bNOYJvF+$7u0~OSnoY3-hAQnIf%W z*j#FW>r;d9ET_wjxTk;>BSF+o<|%ZCYOzL&>u5=)8rU~l!s~WZ&|L2b^URU}>^SeI zX&{{|l#AgHoGCwOGMk^}&PeNRf^)^8#5wN_jHL!cq0LU%nYIr)O?f2#`9Ji&L15{o z+xR9?klpk=14au9$*m!1!-%~IPdN073& zLP?wF6lUS?YTmWBKw1!&4_!CPv3lziHn~od5g41nIJCQx`(I@kR&y?y>Q;{jC#qm2KGnjORJol3iXN2$6-q=n=Ix+iM?l$c#!m@HyT_&-C?^ z9bV^g{*)qmWT^xc%3nimwPa$T@)y26`o(e9-_lfVWv2418B^5s{! zV|UH~DOc$R<3~Ty>~ag}d)0u&{iSfPUV;gjH3_004&u%Rd1mw58n`n_g_)Mt3ifmK z(dwxwTX`)2hP75>vX~RvFLfwy(mP6qbVOi-rYOd6-n$kDWt{!u5e%P6f<+s`kcb9> zpie8^CbJ%j+s)au?Z%uJy_p82dlNB_P*A$oPQ~WD-Fj z>wO(n^<-e#pIPx<$jPwMyc3g$^`%j;4 zpWIF;rvv&Zo=fi87&GeUWbmuOwWF~#UJ?4l<1w^D5(8iF!vNunL|t5;h|VmB+a9jW*q&<4Ie*nQse z3I&;}jx%thKMB($`>9pYY#d*>l#FosBQ~wtsQqFh6K}?&AKv&9hg)a)A38fg=|6v7 z{kRbDv;eaPm6?T;#hBxgLR2F70og0=L#wwPM9!It^okv{2%SDLZY~CoV{E5?eYe2WavXnAjVK4vSW!i(44V zWc>v*+pSQp)UR{v@fnWzTub?n~&IwH< ztZCrqIq+lgAS^Qwq8^u@gL*CZ{hGmWQNW*AXxl>g`!>?EF_m7uHz}r7Mi_tcs(BV4D&W7XlI%>|f9P;R zhwG^X8Sy{YG5Av&{90HCW1LRgUVk$xMZJNp9UH+@s2Gl$sF8oVZTNAj7J4k3#Og{t zC*>PDpma+VHIx-4d#?#F5z&$4SDrq5S!)74;`j{bT;aT8SG1_$-a@kFz&L%rbUhnm z{0eVQki+{I3viZ`4hVkUiZ8!hgmV8Zj6bjrpHHkO)ts+m-)$u>52zO|c8IV|ehTOn zm`6;xjN++_WtcY~-(t%@c`yn64y}(SFlW~kV5@8by)N*8H2yk6@(pxYRVfcD6jlH) zYPB(=VKd0Q|47#v>oWVq&f~5(kz~&@MJC(@pm7l;lg}L;UKHvEsT*jC+m%mZoc#eieZHBR$R#Ft$jgvS2 zfJ3DhV6^2EitSuU!@ne8_h(sl^oB7zZ1Mnq1b(H1r3diw!aNLIZisHX0`T^2Q;38_ zyka29Yi@o+9Jv3)c%nSJX;KnNPs>IT*L^Vc#CkA|ZNcZ9hCVM!7LI+)hL}hpls&A@ zB&r+2&R69$@!UJmJLnAVpK9R!#Y{Au_l}OBC2Kd-LB`U0@IQ+$=wj!`)d?khO;ZmH zsOqF8#c_DKU^-l$vH%1R{{_BlCYBVBq2H7&8uDy0v+*;RHSog@hnnufx6NtvL)Q=d z{Pqs-xIV|_s+&jCb#nM;*DR+)FJzdd-!rH_7-7ZyGZ11P%e!oH0fhZ^n6xm?W9k4+|~^kN(|E)E30{WWxl8>i{~E5_LWyARR#Dv9T%*LZ8`Vvi`pG0R0*I>hNw zXSKk;jw{f~kDylS|M7e4qj6?>6!}+K4Xb|VKtk6N8L@|QQyJ=FMS>ZsoZWdelX8wOS=U<_wp6WU6}zQ&-@^KY8ZUd zYd{~Vm$0f+oSAk}3eO$8f=a_7PE?}A*++b;uN`$Fi)oG^Tvy&4y+noV3- zM=bofkjz+J43p%w7}d$+kZw3iE86dq#AX53eT56}?T>C~9^OS`K03nITkYV=^=>^f zN61@Fhsu6zqes=0NVvskSo?V^edyBx{aNPdxg!YMH*ucU*a3KU{|0~AVo@x)`(H zl;7|)1v1(+n5H|T?DL0GFq6yc>N(1X@s2!5aMQuLvN7O)Op@b^bF9VjcshUob-X73 z8e+>0*ms$2a3gCCl%y13T}voD50|E|qx^Bwr)<11EXpjBTn2C3Q;5d>zu3QhDLE$) zjvGe?VZ-qm;QiQ^`Yw5gS_F9tQ+~iTrxZH-Q97D!*I^HSoy5G59>be%L8Q6!5e}~~ zfe+F)Fn?e!VT^9#isc`{<{sMi=bVFYzckoGnOkY)^0QQJ;xpW`ZwaXWH=mr_GmIy0 zd%=%RE;nBBGM>01%g)HQ2Gjah`mJUjo$H{)_g-qw_qGr)UIi$1Ip+^_S?zXrrQ(IwH3Z>SIn?kW8=;j0eA-uO<(uSQ^`n{*!9t#D=FJF|H5JN;ko+G8bf57J#nDr}cse$D$XugNG+PKDEkiVS(H zhKD!zL(2{^cwcq~4t%ZUoF3VWEP$V`*&N?3AF9`Ur80RbaOprP?lQB$ zXEUUkEu1R&RhA6nqMieng|dmhYz!KhABC$nQT%#wO@8jwIxOj(L=tXBVe39cW?JE4 zT-tkv0>)p1V+ME0KVp%@bo2~L#l-e<9Q!$En)UJY&Sxd3c1mjPFk$*9E6?UI6r4=Fea5}@pXkKu^H)gQ23t;{{5`L#?AJH zdFg3T6QImw9{7tP{pEOSE9W(xD8>XIy+?cR3(>7{I-vV{BJPsh3zm(}P{?I7E?#$) z$VY?&8?+tg4cXIdmGwBDdkLA|J-9E*8*D|Cc;}tcsLq~akbd7CRBlXXLrmLfK}RRq z`Z5?!h56!tedW;Zlmwm$7O-7W4DN0!gU8aVV6*CNOjuI~tb7IhzGKFE?YW4LEDpiH zxv93v&t!S1Ai`@gwD4{pmnGp z4sK9_Pl3L;QhhgGa2tWlt--xdVD(G|Gz+I%jP!w@~q-7uhAfXUXI2JtD}Ojmj}`kvSiqx)tu z<|{hz@aSP&uwwwcub}f$xqQ| z^u$zHM~>yCZM`2-OYNXdQH)s_*NJDPr5L4;t(<0IDyMf9;HzJ*;g@a^V6SKZnKES# zPRDBc^y+=MaPA46&|wd+joR^r_zTD?yIn3S@E@#^?B^GXI>Uywr^r~!b-eh^7rd6p z!ad?ny;oborEikVkBcQ#Z?P#CbH45z7 zzq(A+nR5L4Gze3EeTUtvIgfPhJNP7dXJ)(+Pl`bHZTW zP!n;lZ@}$bj_yw0Q!p|8hhqvx=(QB#s%Ad?{?co6=gbAasc0KQs-?K>xM(y+!#h{ zoC-#GfoohU78vTXHBXK4BzMQ^H@zp`>ntHO;3)+ADWYB*mr1cdp5Cs02NBl|nax){ zuxYm>$N8B}-Fv^l^{HA!^jHU7U^o$u&uQYj-k1q1bShxcpW9F~{U@H;yc0W@JVFKe zY#8H5(bfsk@U~G2iZ*W|KUb`vZenx!wJs-_5HDGZAp)@Vq$m?~Sb#lL*v&t()`K^_ zP!4``Y?7ck)9}9V8%}e-3gUlGBJmyP@O9Q>tcbTOpH~%48dYwQnm1LryPo5#I90=^ zSV5eo5rmaoZ7wszw>;CRgv2kMfDKg!kn0l<@dlQ3POJhs9JC9LHW=ZV;i+tUa0!G@ z6b0`n6DS;&2f9)KJx^<}PPYqrZeb#@PjetJ^3|p}!vJO;uT`E#$K-QZJ~^JC0}p2%Hz5|j7vZg@AeLNG!kj72FwIPg zUHAMGe^Nsk?d>=Ld4Cizc}vl|jMa3;3^nIA`GSGNRn@Kzj@p*VHLBB!^ketzs#ctO@=*mU# zkv#kiu--gOynt53mzWiLSB%4EhoM2;YUBNuWTz!j{%&qODs4EEHY?kN=h+wdtXW!GA~%8j?Bl$H?YY z?d7rEU0{~i3H9n~tbprVx?b9lS@^~aTLQ9idh7- za(>=z`RI0Rh_@~2A^rKQ4Oc5C;BKzgS7}^D+f7O^&an&^@YNZw3~OwAD}b}iU2$S? zB>(mDX>9SeVEBAvBlO@Tj>X=G)Sw2{mE__2l#}>htuDKbE3tp>YN11j{+v^?%k6W!r|8zbs2pwo9D zrnSMG6%Tzzp3RFyXjfqQ`&w!JxvThmT|N5OPh!t11@RWbEx1zfvV5M!BUD=>&nUMV z5l|9f_b=x%PzCB~fmQ*nTDOS==$SHpDthQwYfkM`JK>${N51&WU)Ysp&fBqkF}PwO zoOtC5PgIt|>%YQm3bEq--Cm4$pB?7iu;p0KOd&nw$itFQ1vXxLGPvItf&{Hz{2xW< z9fVsd(S=ReO|8*+rnvI8|PU6?FU9)+}-z@JM)ao=pC<{{2aAdowqaCvG}K+YNqoAe!;`bY5Y?IhAw`9>W3K@7J*S;2v|WJCDJ!7! z@;)%un#Jv6i{i-Im6%?X25nJu`8!>&Vo2XAoU-v2aMn8z+|=z{-l*uy8^=blE&50$fjd{9g=s+xg)E<0x2kAf3)%YRFp3EMsk< z$)egnt^!cuGCC$;k$xC=F8zu2*Je;No*)dq%7y)N9PlDn6A0SYVe$-7SeY=L{k_H_@ftEFJQGeza^5n72i&vZ4@Ug9fmc}q?EZ76 z_;HIj&t>v@IK=&ZmY3h=|6sVD-*yRRs(C$ie!iFJFEFFz{Wkciz81^49!2?r47j+> z5!#C-*v!5=pnu2&7u->S^lh_flSUR#PUU?3zhB#~gUSbRS=|`5N5)7f;VEKZc|0 z+VBoEV3+nIn7vIJPt8cA?&3$WM}2j;o{*ImT=Z3@iv zxSJp$;SPnbg;+zGZh9~47st-OMRs*R1d)I-vYgw~&tEVXY!buJe2qKocpikSBPr1| zVu+QtI`b6M_;Rvbuk@1(-gK2>7Fdg;VftZ&&DGbJ zdU56yU5E||0-;X};bB5JoqBT$^J2qMx_r4G{@f7H_cIQ|;*DP9ZtX1AjQqekoBUvb z(Gol@xe&UoSCIyX06ODfA;(fSf`&0uX3jTV{@koG$TmHM&K&P|)|fNDZq6S(RnWk1 z3Q=Sg2gHG#&mj%Rnjt`O51psmj@n@w%Mne`Hs-9O^M7A(3gH)2UY=beRtC%$_uG+Oh(E^!$R#C(>-1sV-ZnF3m)L zp2*_DFZg7YDRb9oBdVobhx1=T;o@inUOs9E{ci?57Ofb@6X6~)y znRsN9q4@{EYr6sNbM}BzA#HZvy>sYP^c>rzenZ(%9dvHJVI!y6Y8{t0jd9DrjGk^y zJfGRSV1C^^)OnXcYAQ=0?^QlDl}ZxoY7aHD55j`e(Rij+f-RQ)Ltd#2f`ae^{-VM+ z{3BfbxqH=js(y4F&Nsip1&xA?`br@ZBcsIhn%>2|uYIBPtOXMs@_=_(eFqej%tO1S zCt>=>UT`t*BNg375b9ZoHbUNDZ$FLWJp~}!7=^C06j@(|wPZH8=ycQY2CQ2z&RE@# zBzSwAREle{=9A=5_GT^Si-u8e$7LMv$e%x&c!koh(a`YO7Wc0Xg*|tLaLbNbn!py~ z=Gpda{Hg-9WhXM9_U?xRK314+%(?FB0;&7g*)~`G#Lz}VkOYP==LL9jBS1K4f3{M_7JXnAO%8!qZOAc;|n< z#Vz0D`Pam@WA*k3NG{w74c)7;cg11OTXY(qw++FgN7`WTkw|`TsKAlI3IV;OWVoPv4%WPQ zPv$)IArlSm@Sm5IOB6J0_r{xdynt*JK+` z`%`JLwRooCE?!x?&}J}PgBi|dQMPG_Y)<|OjqmK>!nqOt{(pdjy#B@{#7b9or9NdxmYJdAL8fDgN$VeJ)fSnN~`bCr9c%q0tjUc4m4 zrW=k*sWW-p_cG`5N|MnLi(%z2V9Fr}=8IAUPCYJwZX|`b`r=$rvyX$(k|_X(DWzcNa|GX=0&&1DGz3!;&cvdE3rz zK&|!tJdX&DQN1ajOz`6qE8fL&{SZawU+)PJUE))2ROt`Lj|I^V@gq28`ALASUA$ci zhcRo&A7$dFFdd&b%lLDyZYxFTOkWBPCO-j+CNjVNox=vTXqt5|9f~hx!g9$KSi$>F z*YsS686JQ|nuts1h_ctWw4wL5Q^adh7hIdy4n@y$@s(3Hzg>P0-r=$nwbJseGxHTf zR*m4GUJ{IJOECkhJ;6vdi0t=$0B_QynAI6`Q1DSZ3glSPMQdl`mW(XexLy;sb_as; z%H_PRuQsB~_e%1#;1d{$>tUnLOv2vHrn>g?@l|y<@11c8Hn_3?(TCvQ&K5FO@DE0g z+Tl!G3YQ+=$C#NRR7CC>i86PAgOEr%ZYisxDSUPMhnY1K*xqV0 z#^T-?Zs%B&b$BYkx400CojuXi`%x~>PB)CVXX$O2pr?xBFVk_qk|g|kE{RoCRfY+zgp}`I@>R~I!WXV!okv@STZBk60mK~h_mThxc zHX4QG%wcbGGCi4d3*Wr`Kqho~;E_|)z(G!o>FL(N`v)J;v{wu9nUo8ho#Y5j0o-h3 z{t&4XmdB;{V(^G@I~lsBPL?E9qdqr_>$H$yPu~j0>;nsMBr+T9Jlpv;@hmxAIZU!o ziZEOB5^;B^FFQA2CNO)XnAu<5v14v5IU;%vHVZEV+iAyeRc<`?tRoFVON9D#k17Nv_^Ge)hSc7aYn2^&5JE98U`mSW?yCKTp>quDfTN)H>F2EMS z$8^^wKIc#{K|jwx@N2$|Q$$R##IFG4zn$d;1ib{K$YvriKN$}=En(OCj?#&Hbh+&D zN6xWWhO<9yXI*2)@V;v;$_Kr}wlsa#vwbEVYu`%Ng#MvNw{FHg-;`jyY7-Qd9%07B z$8o5>hy=g?&0~!$q1vbd*Lk1gi70Kx?Q>M|U+#C9H#kn#CF-N`_a&h4Y67F+-2=kI zQrN%vJqjpAaIWI7#KXo5ReFnH?{F8@oa%>HMRl0@4%+MuF=M=$BhF0tIf?z#d4=ZO zFy?j)xdyzO46B%@&JG`xW+u)kfiDF%@Qh3dxGdBR3;JqoJ9rd6R~+&_H(_!(o^J*+eh5> zE(EhT4DlM><8j+9C2}T_As428qvA6EuyvUXq^=DouEh^gM<@lh&y9os{_}z5j1C^^ zB6OO98eMx{nzi#T010Dl8pCC&9aU9`{|6&n>$(wCoVuX$iaHKn`+>(^$dlPvPd>ev z!rG7^@bL+Q>sFTRvZR41`xD&erLcn@h%X@G_Am6(LbuB2L8 zih2A|4YLB);#_lc9N2jq*CpSwnHl&JiH$j%Dk#X9hogn=gQ}v!9`30LKQ@i-H@M^_UY4qO6H{ z4CbA&WLoos@rUky&I7iXjJVl=i}*_t*QJip2}}9>0w1&v<@^rsKaocfER6KEV*BGX z{@_1KHNMwi?H?&tzfggt3KjfylSFZg+e>I)tjyeWFW?m`OklD-SD_L2`)-cB3`u8~ zf^ZiD&Z|>t$kpXwW2?-bvl~O#gfS{HP)#S6WWs#?S`6BA7j@P8k+(8{Y-gWhQiT-b zd|3nK!a8t=&UKu7*dEB%Myf4l2#OIFkb5qkn4VB$bw6&xkAC6ANsiB7Ae#*rZKL3V zsv>*Y_!@L65AnU+W9Z|Bllk*lC^vcif*7R~V8rZxxLD zSSoRwb_rB>JO}%~f=tjXf?C866g1QrayS#rO9N19`$FdRJ}WxO={f(jlO4)lQpcvw z9^TmIOL)>Gn*8E+P!s(wVQV1m3=ftSdsW5D(`Dk!`0_VgS zq8v7mByHFT3;w7vmyKEp z;rur-*3jt$C2P3-(iN!?<6cGuvH-iU?*PN|d>&D(gK^K3^wjSsaBgKT&1&I+^_9;! zvEUk27ZU;NU4N){qaJ>ECjfry8zEa%ih2Gv6mLtp@YkQaPc3Ix@r1>>nn2?XWc_}J z{HQPl2P9!$H}QO+5}O>U!MZrE!_w0n*Izsgj)D{j^=L3B-f&rgsbbt4u7yM-b>k(w zpVa?ODCu>nMhgP4Yv~+Rsz}9$J0sxFmI|tA`HL9$b8g-`AG+-1M@X8ii7ua0Fk^Wg z)qi^h?B6LdrB5!y^2ZF@9@LFdvdj1hC&kzq3Kn>oaJ*UGDG>Pa1!_(gf^Vxmf6K9Q zICb(pSS}J_TGc-i6N?zy@8w92Sa9C4f*W}7mo|j|t$+a+3z(}PL&TI*(Cv2)+O6A; zB_V5}Go%9-cuZg?2Xl#*>{NU6nApsc@n-96~{PFQD#XQSF79_rPY>e;Ez9-7rWC3$L_hK zjR(g8+;5D3LZ#`~Z}!ZqVj(7Wr!Lz#7!Mn#iom=h55QN7PZdi)5&d(GB;bA~syP}n zteHNTz)n(FwHsRwm-D~BSi^W)&Ia|d6;v&akF#`QXym>EbdTK)-^(sw@S-j-_Y!7L z-Iis*Vm{;4R7#^uE>W|$^Ks82NyaDq6@IH-gbNqeW8E!n=G*1@s8M5y<=d~~i&fj{ zgq{b)xsAt;gt}t%hO1m|G!10jyEvxBd-$>KF`cF=#XRfd*xIY5na^su`2FH^K7OsI zrYG-!7e5L!gbhJ|Y!Bow+=?}0h2(dq4LHvf=60aRp#RV#jBb%6=W~P5#9jj}BBJn6 z%6nXLri1_JvNvvPng>I7(id_5oc9{YS^wziJHJRx z{6aEekv8e?&_?%T(VV}o5?pS@L77!Cn&cMZYqkiAERVsx6&cul>K17~7emWRg*X@0 z5wLT)!$V^!w4MKpzs@=jbbeN2yty1(rph^1-CIdukOc}P_2T&2_f)h)jodZTWgg1Q zqJ(cV-W%ZlSI=W%1DB0Ri!oztUaX~mWz3*yg9}C+KTU!(u3@Lj7R*pQ2tQv|@a3sC zv#s3{mlnx0iSqe$k%B0^PKv|P4KF}cI~B#XInMUoLNr4k+!eyoYr-mw{J|0^yPbnm zz3i~lXFu9XHG%jFL1>ra{AMSVafNaQUQu3vqxBp48Gq;{7v7(ILZq7s2u@a7L>4m+#L^Q0)hV2iyJ?yhNSdnSP zBzpYeqn{b$;8#g<>nhPgbSGLKje=d;8mt@lj=QP95F&1KZwj$4V)CsQz9s$SKQ~$p z0R_fPCs&8Iofcs3E_h7~!UeH@U>I-Mod@y3+w|I%+i>i28SaSHVpar4lb3xr090h? z0|!;qFOXJ%T;A&Q6_jwg&1;nwgKcdK$Q(Eq5 zcJw=u-Oo9R_M6c4oA!gxJ#T9J>IW(q#NjjNTG%?Po7>y&f}!XK(7j9!a^}_XHg^}& znm1PLl5d^##_=D#8-7mAf10w)#lT>^E;^0w^5EvVj}^H$oe;!UC3Cg#ATEEc$C}@? zN5vyyV6ITcTl-ZKyNk`>N9}I1X?i?$k@e-?x)Cs~Q-IxN<4=5K92iL@e^i~D30d=( z5`lT#uB1~87W;~`nYn&s_-;8^l*W-F?ZuF-c#wz*h_JayH#jDrD4UxWfQvfgAT2ot zwd{SVM4>dB_$v*3?=*l$nigv`^CEn&_{h7io(K~=e^Buj2HrCvM5QDR!c6MPtUZev zBl`dts@7r5U*wXc?a^?S^B@+i4Mnxb7VK`JNF2-Dh6fdOsM&mmjXa^qmeN}woOuSr zI+j7@%bD;Y;v6KHUV)qCSwzoe8>aD62)T2VyebxCl&ktM^|3fMi7%)5PpV+*DKn}N z>rd*9M`2xfG-jNh$gI=}#->#%_{r-zu?=lQ-QIK{Z8P9PAekk+bNtb zlV^{NYlEYIAnZMsO0!~T;RVfDo|LK_bGOn0!}UvvgtHpneE$``SyGxcc?p_Zmx95} zXk5U}cvcsWQo)F?boN7K`qTO%B;hS?we_@GU+AKy$W0+%u$}!0&VhQI{f}2a`z+uS) zHq%xIVta8Yq!{TjJ7@jE3}+qY%3&SWtEd29+ouuxcjip#Y#W^ZUjPj3Sj6p{?S<#T zvzXrGIA~^C@J9PS6#uQr$SQ9^@w1%!*06(q-tUP!tx{m9!UGqWrD6#G4L#M^Ud}H1 zK@^wgVEViO5dE(PTG~4>rzD!())irHPu#{nKKPsTwsN`SYz^k~?wQQFUyp27Wd@Mb zL%-0=&z3}-=iHY_s$tGX#EK) z+&uiorbv(rC__

`J2=MDs|GNyf_Yjb8o4Q>3$^3DF+V< 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℞ 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�L2hmvoSe9vT|1#h4$sVlEj6xC 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�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 z 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

Tab)*^_1A@?}X_j(`a6w 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

=z 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