diff --git a/i18n/en.yml b/i18n/en.yml index 0ac3060dadf3..de1ae9ce3106 100644 --- a/i18n/en.yml +++ b/i18n/en.yml @@ -486,6 +486,7 @@ en: stocks/pred/lstm: Long-Short Term Memory stocks/pred/conv1d: 1D Convolutional Neural Network stocks/pred/mc: Monte-Carlo simulations + stocks/pred/expo: Probabilistic Exponential Smoothing crypto/load: load a specific cryptocurrency for analysis crypto/find: find coins crypto/_coin: Coin diff --git a/openbb_terminal/README.md b/openbb_terminal/README.md index 87a7f9d64611..200aeb7a544d 100644 --- a/openbb_terminal/README.md +++ b/openbb_terminal/README.md @@ -186,17 +186,41 @@ Several features in this project utilize Machine Learning. Machine Learning Pyth To enable the `prediction` menu install additional dependencies after installing main dependencies: - - On M1 mac + - On Intel mac ```bash conda install -c conda-forge tensorflow==2.7.0 + conda install -c conda-forge -c pytorch u8darts-torch poetry install -E prediction ``` + - On M1 mac (make sure you are using miniconda3 or miniforge3) + + ```bash + brew install cmake + brew install gcc + conda install -c apple tensorflow-deps + conda install -c apple tensorflow-deps==2.8.0 + python -m pip install tensorflow-metal + conda update pip + conda update -c defaults numpy + export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 + export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 + wget https://raw.githubusercontent.com/Homebrew/homebrew-core/fb8323f2b170bd4ae97e1bac9bf3e2983af3fdb0/Formula/libomp.rb + brew unlink libomp + brew install libomp.rb + pip3 install -r requirements.txt + conda install -c conda-forge tensorflow==2.8.0 + conda install -c conda-forge -c pytorch u8darts-torch + python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))" + ``` + - On all other systems ```bash poetry install -E prediction + conda install -c conda-forge -c pytorch u8darts-torch + ``` If you are having trouble with Poetry (e.g. on a Windows system), simply install requirements.txt with pip diff --git a/openbb_terminal/common/prediction_techniques/ets_view.py b/openbb_terminal/common/prediction_techniques/ets_view.py index aba5a9cd15a1..0bf62bef7a5d 100644 --- a/openbb_terminal/common/prediction_techniques/ets_view.py +++ b/openbb_terminal/common/prediction_techniques/ets_view.py @@ -43,7 +43,7 @@ def display_exponential_smoothing( n_predict: int, trend: str = "N", seasonal: str = "N", - seasonal_periods: int = 5, + seasonal_periods: int = 7, s_end_date: str = "", export: str = "", time_res: str = "", diff --git a/openbb_terminal/common/prediction_techniques/expo_model.py b/openbb_terminal/common/prediction_techniques/expo_model.py new file mode 100644 index 000000000000..83b6999ed7e0 --- /dev/null +++ b/openbb_terminal/common/prediction_techniques/expo_model.py @@ -0,0 +1,137 @@ +"""Probabilistic Exponential Smoothing Model""" +__docformat__ = "numpy" + +import logging +from typing import Any, Tuple, Union + +import numpy as np +import pandas as pd +from darts import TimeSeries +from darts.models import ExponentialSmoothing +from darts.dataprocessing.transformers import MissingValuesFiller +from darts.utils.utils import ModelMode, SeasonalityMode +from darts.metrics import mape + +from openbb_terminal.decorators import log_start_end +from openbb_terminal.rich_config import console + + +TRENDS = ["N", "A", "M"] +SEASONS = ["N", "A", "M"] +PERIODS = [4, 5, 7] +DAMPEN = ["T", "F"] + +logger = logging.getLogger(__name__) + + +@log_start_end(log=logger) +def get_expo_data( + data: Union[pd.Series, pd.DataFrame], + trend: str = "A", + seasonal: str = "A", + seasonal_periods: int = 7, + dampen: str = "F", + n_predict: int = 30, + start_window: float = 0.65, + forecast_horizon: int = 3, +) -> Tuple[Any, Any, Any, Any, Any]: + + """Performs Probabilistic Exponential Smoothing forecasting + This is a wrapper around statsmodels Holt-Winters' Exponential Smoothing; + we refer to this link for the original and more complete documentation of the parameters. + + https://unit8co.github.io/darts/generated_api/darts.models.forecasting.exponential_smoothing.html?highlight=exponential + + Parameters + ---------- + data : Union[pd.Series, np.ndarray] + Input data. + trend: str + Trend component. One of [N, A, M] + Defaults to ADDITIVE. + seasonal: str + Seasonal component. One of [N, A, M] + Defaults to ADDITIVE. + seasonal_periods: int + Number of seasonal periods in a year (7 for daily data) + If not set, inferred from frequency of the series. + dampen: str + Dampen the function + n_predict: int + Number of days to forecast + start_window: float + Size of sliding window from start of timeseries and onwards + forecast_horizon: int + Number of days to forecast when backtesting and retraining historical + + Returns + ------- + List[float] + Adjusted Data series + List[float] + List of predicted values + Any + Fit Prob. Expo model object. + """ + + filler = MissingValuesFiller() + data["date"] = data.index # add temp column since we need to use index col for date + ticker_series = TimeSeries.from_dataframe( + data, + time_col="date", + value_cols=["AdjClose"], + freq="B", + fill_missing_dates=True, + ) + + ticker_series = filler.transform(ticker_series) + ticker_series = ticker_series.astype(np.float32) + _, val = ticker_series.split_before(0.85) + + if trend == "M": + trend = ModelMode.MULTIPLICATIVE + elif trend == "N": + trend = ModelMode.NONE + else: # Default + trend = ModelMode.ADDITIVE + + if seasonal == "M": + seasonal = SeasonalityMode.MULTIPLICATIVE + elif seasonal == "N": + seasonal = SeasonalityMode.NONE + else: # Default + seasonal = SeasonalityMode.ADDITIVE + + damped = True + if dampen == "F": + damped = False + + # Model Init + model_es = ExponentialSmoothing( + trend=trend, + seasonal=seasonal, + seasonal_periods=int(seasonal_periods), + damped=damped, + random_state=42, + ) + + # Training model based on historical backtesting + historical_fcast_es = model_es.historical_forecasts( + ticker_series, + start=float(start_window), + forecast_horizon=int(forecast_horizon), + verbose=True, + ) + + # Show forecast over validation # and then +n_predict afterwards sampled 10 times per point + probabilistic_forecast = model_es.predict(int(n_predict), num_samples=500) + precision = mape(val, probabilistic_forecast) # mape = mean average precision error + console.print(f"model {model_es} obtains MAPE: {precision:.2f}% \n") # TODO + + return ( + ticker_series, + historical_fcast_es, + probabilistic_forecast, + precision, + model_es, + ) diff --git a/openbb_terminal/common/prediction_techniques/expo_view.py b/openbb_terminal/common/prediction_techniques/expo_view.py new file mode 100644 index 000000000000..807d81c8033f --- /dev/null +++ b/openbb_terminal/common/prediction_techniques/expo_view.py @@ -0,0 +1,118 @@ +"""Probabilistic Exponential Smoothing View""" +__docformat__ = "numpy" + +import logging +import os +from typing import Union + +import matplotlib.pyplot as plt +import pandas as pd + +from openbb_terminal.config_terminal import theme +from openbb_terminal.common.prediction_techniques import expo_model +from openbb_terminal.config_plot import PLOT_DPI +from openbb_terminal.decorators import log_start_end +from openbb_terminal.helper_funcs import ( + export_data, + plot_autoscale, +) +from openbb_terminal.rich_config import console +from openbb_terminal.common.prediction_techniques.pred_helper import ( + print_pretty_prediction, +) + +logger = logging.getLogger(__name__) +# pylint: disable=too-many-arguments + + +@log_start_end(log=logger) +def display_expo_forecast( + data: Union[pd.DataFrame, pd.Series], + ticker_name: str, + trend: str, + seasonal: str, + seasonal_periods: int, + dampen: str, + n_predict: int, + start_window: float, + forecast_horizon: int, + export: str = "", +): + """Display Probabilistic Exponential Smoothing forecast + + Parameters + ---------- + data : Union[pd.Series, np.array] + Data to forecast + trend: str + Trend component. One of [N, A, M] + Defaults to ADDITIVE. + seasonal: str + Seasonal component. One of [N, A, M] + Defaults to ADDITIVE. + seasonal_periods: int + Number of seasonal periods in a year + If not set, inferred from frequency of the series. + dampen: str + Dampen the function + n_predict: int + Number of days to forecast + start_window: float + Size of sliding window from start of timeseries and onwards + forecast_horizon: int + Number of days to forecast when backtesting and retraining historical + export: str + Format to export data + external_axes : Optional[List[plt.Axes]], optional + External axes (2 axis is expected in the list), by default None + """ + ( + ticker_series, + historical_fcast_es, + predicted_values, + precision, + _, + ) = expo_model.get_expo_data( + data, + trend, + seasonal, + seasonal_periods, + dampen, + n_predict, + start_window, + forecast_horizon, + ) + + # Plotting with Matplotlib + external_axes = None + if not external_axes: + fig, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI) + else: + if len(external_axes) != 1: + logger.error("Expected list of one axis item.") + console.print("[red]Expected list of one axis item.\n[/red]") + return + ax = external_axes + + # ax = fig.get_axes()[0] # fig gives list of axes (only one for this case) + ticker_series.plot(label="Actual AdjClose", figure=fig) + historical_fcast_es.plot( + label="Back-test 3-Days ahead forecast (Exp. Smoothing)", figure=fig + ) + predicted_values.plot( + label="Probabilistic Forecast", low_quantile=0.1, high_quantile=0.9, figure=fig + ) + ax.set_title( + f"PES for ${ticker_name} for next [{n_predict}] days (Model MAPE={round(precision,2)}%)" + ) + ax.set_ylabel("Adj. Closing") + ax.set_xlabel("Date") + theme.style_primary_axis(ax) + + if not external_axes: + theme.visualize_output() + + numeric_forecast = predicted_values.quantile_df()["AdjClose_0.5"].tail(n_predict) + print_pretty_prediction(numeric_forecast, data["AdjClose"].iloc[-1]) + + export_data(export, os.path.dirname(os.path.abspath(__file__)), "expo") diff --git a/openbb_terminal/common/prediction_techniques/pred_helper.py b/openbb_terminal/common/prediction_techniques/pred_helper.py index 1dc3a84d60ac..cd31e83a8105 100644 --- a/openbb_terminal/common/prediction_techniques/pred_helper.py +++ b/openbb_terminal/common/prediction_techniques/pred_helper.py @@ -557,7 +557,6 @@ def lambda_price_prediction_color(val: float, last_val: float) -> str: def print_pretty_prediction(df_pred: pd.DataFrame, last_price: float): """Print predictions""" - console.print("") if rich_config.USE_COLOR: df_pred = pd.DataFrame(df_pred) df_pred.columns = ["pred"] diff --git a/openbb_terminal/stocks/prediction_techniques/pred_api.py b/openbb_terminal/stocks/prediction_techniques/pred_api.py index 8f263cd300bf..9b6a54c89d07 100644 --- a/openbb_terminal/stocks/prediction_techniques/pred_api.py +++ b/openbb_terminal/stocks/prediction_techniques/pred_api.py @@ -35,5 +35,9 @@ display_mc_forecast as mc, ) +from openbb_terminal.common.prediction_techniques.expo_view import ( + display_expo_forecast as expo, +) + # Models models = _models(os.path.abspath(os.path.dirname(prediction_techniques.__file__))) diff --git a/openbb_terminal/stocks/prediction_techniques/pred_controller.py b/openbb_terminal/stocks/prediction_techniques/pred_controller.py index cf105382bf2a..8350f2095652 100644 --- a/openbb_terminal/stocks/prediction_techniques/pred_controller.py +++ b/openbb_terminal/stocks/prediction_techniques/pred_controller.py @@ -22,6 +22,8 @@ neural_networks_view, pred_helper, regression_view, + expo_view, + expo_model, ) from openbb_terminal.decorators import log_start_end from openbb_terminal.helper_funcs import ( @@ -54,6 +56,7 @@ class PredictionTechniquesController(BaseController): "lstm", "conv1d", "mc", + "expo", ] PATH = "/stocks/pred/" @@ -90,6 +93,10 @@ def __init__( choices["ets"]["-s"] = {c: {} for c in ets_model.SEASONS} choices["arima"]["-i"] = {c: {} for c in arima_model.ICS} choices["mc"]["--dist"] = {c: {} for c in mc_model.DISTRIBUTIONS} + choices["expo"]["-t"] = {c: {} for c in expo_model.TRENDS} + choices["expo"]["-s"] = {c: {} for c in expo_model.SEASONS} + choices["expo"]["-p"] = {c: {} for c in expo_model.PERIODS} + choices["expo"]["-dp"] = {c: {} for c in expo_model.DAMPEN} self.completer = NestedCompleter.from_nested_dict(choices) def print_help(self): @@ -119,6 +126,7 @@ def print_help(self): mt.add_cmd("lstm") mt.add_cmd("conv1d") mt.add_cmd("mc") + mt.add_cmd("expo") console.print(text=mt.menu_text, menu="Stocks - Prediction Techniques") def custom_reset(self): @@ -713,3 +721,99 @@ def call_mc(self, other_args: List[str]): use_log=ns_parser.dist == "lognormal", export=ns_parser.export, ) + + @log_start_end(log=logger) + def call_expo(self, other_args: List[str]): + """Process expo command""" + parser = argparse.ArgumentParser( + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + add_help=False, + prog="expo", + description=""" + Perform Probabilistic Exponential Smoothing forecast + Trend: N: None, A: Additive, M: Multiplicative + Seasonality: N: None, A: Additive, M: Multiplicative + Dampen: T: True, F: False + """, + ) + parser.add_argument( + "-n", + "--n_days", + action="store", + dest="n_days", + type=check_positive, + default=5, + help="prediction days.", + ) + parser.add_argument( + "-t", + "--trend", + action="store", + dest="trend", + choices=expo_model.TRENDS, + default="A", + help="Trend: N: None, A: Additive, M: Multiplicative.", + ) + parser.add_argument( + "-s", + "--seasonal", + action="store", + dest="seasonal", + choices=expo_model.SEASONS, + default="A", + help="Seasonality: N: None, A: Additive, M: Multiplicative.", + ) + parser.add_argument( + "-p", + "--periods", + action="store", + dest="seasonal_periods", + type=check_positive, + default=7, + help="Seasonal periods: 4: Quarterly, 7: Daily", + ) + parser.add_argument( + "-d", + "--dampen", + action="store", + dest="dampen", + default="F", + help="Dampening", + ) + parser.add_argument( + "-w", + "--window", + action="store", + dest="start_window", + default=0.65, + help="Start point for rolling training and forecast window. 0.0-1.0", + ) + parser.add_argument( + "-f", + "--forecasthorizon", + action="store", + dest="forecast_horizon", + default=3, + help="Days/Points to forecast when training and performing historical back-testing", + ) + + ns_parser = parse_known_args_and_warn( + parser, other_args, export_allowed=EXPORT_ONLY_FIGURES_ALLOWED + ) + + if ns_parser: + if self.target != "AdjClose": + console.print("Expo Prediction designed for AdjClose prices\n") + + expo_view.display_expo_forecast( + data=self.stock, + ticker_name=self.ticker, + n_predict=ns_parser.n_days, + trend=ns_parser.trend, + seasonal=ns_parser.seasonal, + seasonal_periods=ns_parser.seasonal_periods, + dampen=ns_parser.dampen, + start_window=ns_parser.start_window, + forecast_horizon=ns_parser.forecast_horizon, + export=ns_parser.export, + ) diff --git a/openbb_terminal/stocks/stocks_helper.py b/openbb_terminal/stocks/stocks_helper.py index 39216a45d195..4ea56d52f1ab 100644 --- a/openbb_terminal/stocks/stocks_helper.py +++ b/openbb_terminal/stocks/stocks_helper.py @@ -5,6 +5,7 @@ import os from datetime import datetime, timedelta, date from typing import List, Union, Optional, Iterable +import warnings import financedatabase as fd import matplotlib.pyplot as plt @@ -1064,6 +1065,7 @@ def additional_info_about_ticker(ticker: str) -> str: extra_info += "\n[param]Currency: [/param]USD" extra_info += "\n[param]Market: [/param]" calendar = mcal.get_calendar("NYSE") + warnings.filterwarnings("ignore") sch = calendar.schedule( start_date=(datetime.now() - timedelta(days=3)).strftime("%Y-%m-%d"), end_date=(datetime.now() + timedelta(days=3)).strftime("%Y-%m-%d"), diff --git a/poetry.lock b/poetry.lock index 011b0889645d..236d1f6722f8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1768,6 +1768,22 @@ category = "main" optional = true python-versions = "*" +[[package]] +name = "lightgbm" +version = "3.3.2" +description = "LightGBM Python Package" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +numpy = "*" +scikit-learn = "!=0.22.0" +scipy = "*" + +[package.extras] +dask = ["dask[array] (>=2.0.0)", "dask[dataframe] (>=2.0.0)", "dask[distributed] (>=2.0.0)", "pandas"] + [[package]] name = "linearmodels" version = "4.26" @@ -1789,6 +1805,14 @@ scipy = ">=1.2" setuptools-scm = ">=6.4.2,<7.0.0" statsmodels = ">=0.11" +[[package]] +name = "llvmlite" +version = "0.38.1" +description = "lightweight wrapper around basic LLVM functionality" +category = "main" +optional = false +python-versions = ">=3.7,<3.11" + [[package]] name = "lxml" version = "4.8.0" @@ -2132,6 +2156,19 @@ doc = ["sphinx (>=4.5)", "pydata-sphinx-theme (>=0.8.1)", "sphinx-gallery (>=0.1 extra = ["lxml (>=4.6)", "pygraphviz (>=1.9)", "pydot (>=1.4.2)", "sympy (>=1.10)"] test = ["pytest (>=7.1)", "pytest-cov (>=3.0)", "codecov (>=2.1)"] +[[package]] +name = "nfoursid" +version = "1.0.0" +description = "Implementation of N4SID, Kalman filtering and state-space models" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +matplotlib = ">=3.3" +numpy = ">=1.19" +pandas = ">=1.1" + [[package]] name = "nodeenv" version = "1.6.0" @@ -2184,6 +2221,18 @@ jupyter-server = ">=1.8,<2.0" [package.extras] test = ["pytest", "pytest-tornasync", "pytest-console-scripts"] +[[package]] +name = "numba" +version = "0.55.1" +description = "compiling Python code using LLVM" +category = "main" +optional = false +python-versions = ">=3.7,<3.11" + +[package.dependencies] +llvmlite = ">=0.38.0rc1,<0.39" +numpy = ">=1.18,<1.22" + [[package]] name = "numpy" version = "1.21.2" @@ -3830,6 +3879,24 @@ anyio = ">=3.0.0,<4" [package.extras] full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"] +[[package]] +name = "statsforecast" +version = "0.5.5" +description = "Time series forecasting suite using statistical models" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +numba = "*" +numpy = "*" +pandas = "*" +scipy = "*" +statsmodels = "*" + +[package.extras] +ray = ["ray"] + [[package]] name = "statsmodels" version = "0.13.2" @@ -4083,6 +4150,17 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "torch" +version = "1.11.0" +description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" +category = "main" +optional = false +python-versions = ">=3.7.0" + +[package.dependencies] +typing-extensions = "*" + [[package]] name = "tornado" version = "6.1" @@ -4264,6 +4342,37 @@ tzdata = {version = "*", markers = "platform_system == \"Windows\""} devenv = ["black", "pyroma", "pytest-cov", "zest.releaser"] test = ["pytest-mock (>=3.3)", "pytest (>=4.3)"] +[[package]] +name = "u8darts" +version = "0.19.0" +description = "A python library for easy manipulation and forecasting of time series." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +holidays = ">=0.11.1" +ipython = ">=7.0.0" +joblib = ">=0.16.0" +lightgbm = ">=2.2.3" +matplotlib = ">=3.3.0" +nfoursid = ">=1.0.0" +numpy = ">=1.19.0" +pandas = ">=1.0.5" +requests = ">=2.22.0" +scikit-learn = ">=1.0.1" +scipy = ">=1.3.2" +statsforecast = ">=0.5.2" +statsmodels = ">=0.13.0" +tqdm = ">=4.60.0" +xarray = ">=0.17.0" + +[package.extras] +all = ["holidays (>=0.11.1)", "ipython (>=7.0.0)", "joblib (>=0.16.0)", "lightgbm (>=2.2.3)", "matplotlib (>=3.3.0)", "nfoursid (>=1.0.0)", "numpy (>=1.19.0)", "pandas (>=1.0.5)", "requests (>=2.22.0)", "scikit-learn (>=1.0.1)", "scipy (>=1.3.2)", "statsforecast (>=0.5.2)", "statsmodels (>=0.13.0)", "tqdm (>=4.60.0)", "xarray (>=0.17.0)", "pmdarima (>=1.8.0)", "tbats (>=1.1.0)", "pytorch-lightning (>=1.5.0)", "torch (>=1.8.0)", "prophet (>=1.0.0)", "pystan (>=2.19.1.1,<3.0.0.0)"] +pmdarima = ["pmdarima (>=1.8.0)", "tbats (>=1.1.0)"] +prophet = ["prophet (>=1.0.0)", "pystan (>=2.19.1.1,<3.0.0.0)"] +torch = ["pytorch-lightning (>=1.5.0)", "torch (>=1.8.0)"] + [[package]] name = "ujson" version = "5.2.0" @@ -4507,6 +4616,27 @@ python-versions = ">=3.7.0" [package.dependencies] h11 = ">=0.9.0,<1" +[[package]] +name = "xarray" +version = "2022.3.0" +description = "N-D labeled arrays and datasets in Python" +category = "main" +optional = false +python-versions = ">=3.8" + +[package.dependencies] +numpy = ">=1.18" +packaging = ">=20.0" +pandas = ">=1.1" + +[package.extras] +accel = ["scipy", "bottleneck", "numbagg"] +complete = ["netcdf4", "h5netcdf", "scipy", "pydap", "zarr", "fsspec", "cftime", "rasterio", "cfgrib", "pooch", "bottleneck", "numbagg", "dask", "matplotlib", "seaborn", "nc-time-axis"] +docs = ["netcdf4", "h5netcdf", "scipy", "pydap", "zarr", "fsspec", "cftime", "rasterio", "cfgrib", "pooch", "bottleneck", "numbagg", "dask", "matplotlib", "seaborn", "nc-time-axis", "sphinx-autosummary-accessors", "sphinx-rtd-theme", "ipython", "ipykernel", "jupyter-client", "nbsphinx", "scanpydoc"] +io = ["netcdf4", "h5netcdf", "scipy", "pydap", "zarr", "fsspec", "cftime", "rasterio", "cfgrib", "pooch"] +parallel = ["dask"] +viz = ["matplotlib", "seaborn", "nc-time-axis"] + [[package]] name = "xlsxwriter" version = "3.0.3" @@ -4576,7 +4706,7 @@ prediction = ["tensorflow"] [metadata] lock-version = "1.1" python-versions = "^3.8,<3.10" -content-hash = "00f97c4c48a0181981e02ef5002d7f4f97ee8d81c02d4b6ede9918dc29b849fd" +content-hash = "160f2dde26257f63f0eb4335e1d31aa95e24070fac8afd8f50cef3986cb6e52f" [metadata.files] absl-py = [ @@ -5702,6 +5832,13 @@ libclang = [ {file = "libclang-11.1.0-py2.py3-none-manylinux2014_aarch64.whl", hash = "sha256:39d07c8965a3c963fb2686496339b6dbacf42acbd32e4bc7361373a45e98cebe"}, {file = "libclang-11.1.0-py2.py3-none-win_amd64.whl", hash = "sha256:8cb0082a30b9e1e615d7f4211b0c428b607a9bd1e43ddc6c0cabdd9ea5b244bf"}, ] +lightgbm = [ + {file = "lightgbm-3.3.2-py3-none-macosx_10_14_x86_64.macosx_10_15_x86_64.macosx_11_0_x86_64.whl", hash = "sha256:2e94bd1b3ab29d173102c9c1d80db2e27ad7e43b8ff5a74c5cb7984b37d19f45"}, + {file = "lightgbm-3.3.2-py3-none-manylinux1_x86_64.whl", hash = "sha256:f4cba3b4f29336ad7e801cb32d9b948ea4cc5300dda650b78bcdfe36b3e2c4b2"}, + {file = "lightgbm-3.3.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8e788c56853316fc5d35db726d81bd002c721038c856853952287f68082e0158"}, + {file = "lightgbm-3.3.2-py3-none-win_amd64.whl", hash = "sha256:e4f1529cad416066964f9af0efad208787861e9f2181b7f9ee7fc9bacc082d4f"}, + {file = "lightgbm-3.3.2.tar.gz", hash = "sha256:5d25d16e77c844c297ece2044df57651139bc3c8ad8c4108916374267ac68b64"}, +] linearmodels = [ {file = "linearmodels-4.26-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9511653d58a213ad611680b826e7dcdfc03131b5db722390aa9fb50b0395b3af"}, {file = "linearmodels-4.26-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52ac13bfa5765155a03f3bbc9bd68f8f9991ed58a75a53951a8767df87906b2c"}, @@ -5722,6 +5859,36 @@ linearmodels = [ {file = "linearmodels-4.26-cp39-cp39-win_amd64.whl", hash = "sha256:2a00b73dabde87949bc221c5f080371ada62604976fa119381d542cbf6bb83ee"}, {file = "linearmodels-4.26.tar.gz", hash = "sha256:687194fc9a51d9119c32a94b5a1061dfc13398eac3d25e086bd06f80d8fda76b"}, ] +llvmlite = [ + {file = "llvmlite-0.38.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7dd2bd1d6406e7789273e3f8a304ed5d9adcfaa5768052fca7dc233a857be98"}, + {file = "llvmlite-0.38.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a5e0ed215a576f0f872f47a70b8cb49864e0aefc8586aff5ce83e3bff47bc23"}, + {file = "llvmlite-0.38.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:633c9026eb43b9903cc4ffbc1c7d5293b2e3ad95d06fa9eab0f6ce6ff6ea15b3"}, + {file = "llvmlite-0.38.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b98da8436dbc29013ea301f1fdb0d596ab53bf0ab65c976d96d00bb6faa0b479"}, + {file = "llvmlite-0.38.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0adce1793d66d009c554809f27baeb6258bf13f6fbaa12eff7443500caec25"}, + {file = "llvmlite-0.38.1-cp310-cp310-win32.whl", hash = "sha256:8c64c90a8b0b7b7e1ed1912ba82c1a3f43cf25affbe06aa3c56c84050edee8ac"}, + {file = "llvmlite-0.38.1-cp310-cp310-win_amd64.whl", hash = "sha256:ab070266f0f51304789a6c20d4be91a9e69683ad9bd4861eb89980e8eb613b3a"}, + {file = "llvmlite-0.38.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:ed7528b8b85de930b76407e44b080e4f376b7a007c2879749599ff8e2fe32753"}, + {file = "llvmlite-0.38.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7db018da2863034ad9c73c946625637f3a89635bc70576068bab4bd085eea90d"}, + {file = "llvmlite-0.38.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c1e5805c92e049b4956ed01204c6647de6160ab9aefb0d67ea83ca02a1d889a"}, + {file = "llvmlite-0.38.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5559e46c79b4017c3c25edc3b9512d11adc3689b9046120c685b0905c08d48a5"}, + {file = "llvmlite-0.38.1-cp37-cp37m-win32.whl", hash = "sha256:ef9aa574eff2e15f8c47b255da0db5dab326dc7f76384c307ae35490e2d2489a"}, + {file = "llvmlite-0.38.1-cp37-cp37m-win_amd64.whl", hash = "sha256:84d5a0163c172db2b2ae561d2fc0866fbd9f716cf13f92c0d41ca4338e682672"}, + {file = "llvmlite-0.38.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a263252a68d85450110ec1f2b406c0414e49b04a4d216d31c0515ea1d59c3882"}, + {file = "llvmlite-0.38.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:de8bd61480173930f2a029673e7cd0738fbbb5171dfe490340839ad7301d4cf0"}, + {file = "llvmlite-0.38.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fbfbe546394c39db39a6898a51972aa131c8d6b0628517728b350552f58bdc19"}, + {file = "llvmlite-0.38.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c4f26c6c370e134a909ac555a671fa1376e74c69af0208f25c0979472577a9d"}, + {file = "llvmlite-0.38.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95f455697c44d7c04ef95fdfce04629f48df08a832d0a0d9eb2363186dbb969"}, + {file = "llvmlite-0.38.1-cp38-cp38-win32.whl", hash = "sha256:41e638a71c85a9a4a33f279c4cd812bc2f84122505b1f6ab8984ec7debb8548b"}, + {file = "llvmlite-0.38.1-cp38-cp38-win_amd64.whl", hash = "sha256:5c07d63df4578f31b39b764d3b4291f70157af7f42e171a8884ae7aaf989d1f7"}, + {file = "llvmlite-0.38.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4e11bd9929dcbd55d5eb5cd7b08bf71b0097ea48cc192b69d102a90dd6e9816f"}, + {file = "llvmlite-0.38.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:edfa2c761cfa56cf76e783290d82e117f829bb691d8d90aa375505204888abac"}, + {file = "llvmlite-0.38.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e609f7312a439b53b6f622d99180c3ff6a3e1e4ceca4d18aca1c5b46f4e3664"}, + {file = "llvmlite-0.38.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9f53c3448410cc84d0e1af84dbc0d60ad32779853d40bcc8b1ee3c67ebbe94b1"}, + {file = "llvmlite-0.38.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c8fac4edbadefa4dddf5dc6cca76bc2ae81df211dcd16a6638d60cc41249e56"}, + {file = "llvmlite-0.38.1-cp39-cp39-win32.whl", hash = "sha256:3d76c0fa42390bef56979ed213fbf0150c3fef36f5ea68d3d780d5d725da8c01"}, + {file = "llvmlite-0.38.1-cp39-cp39-win_amd64.whl", hash = "sha256:66462d768c30d5f648ca3361d657b434efa8b09f6cf04d6b6eae66e62e993644"}, + {file = "llvmlite-0.38.1.tar.gz", hash = "sha256:0622a86301fcf81cc50d7ed5b4bebe992c030580d413a8443b328ed4f4d82561"}, +] lxml = [ {file = "lxml-4.8.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:e1ab2fac607842ac36864e358c42feb0960ae62c34aa4caaf12ada0a1fb5d99b"}, {file = "lxml-4.8.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28d1af847786f68bec57961f31221125c29d6f52d9187c01cd34dc14e2b29430"}, @@ -6026,6 +6193,10 @@ networkx = [ {file = "networkx-2.8-py3-none-any.whl", hash = "sha256:1a1e8fe052cc1b4e0339b998f6795099562a264a13a5af7a32cad45ab9d4e126"}, {file = "networkx-2.8.tar.gz", hash = "sha256:4a52cf66aed221955420e11b3e2e05ca44196b4829aab9576d4d439212b0a14f"}, ] +nfoursid = [ + {file = "nfoursid-1.0.0-py3-none-any.whl", hash = "sha256:5714b25a978b4505b818ec79e1e69aa3c41664f4687e176ae49ae125771eabf0"}, + {file = "nfoursid-1.0.0.tar.gz", hash = "sha256:9dc20edeaf0203ebbff9ef6ccad6ff125d9ab73d6c1ab48934fdb24b37f5f097"}, +] nodeenv = [ {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, @@ -6038,6 +6209,33 @@ notebook-shim = [ {file = "notebook_shim-0.1.0-py3-none-any.whl", hash = "sha256:02432d55a01139ac16e2100888aa2b56c614720cec73a27e71f40a5387e45324"}, {file = "notebook_shim-0.1.0.tar.gz", hash = "sha256:7897e47a36d92248925a2143e3596f19c60597708f7bef50d81fcd31d7263e85"}, ] +numba = [ + {file = "numba-0.55.1-1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:be56fb78303973e6c19c7c2759996a5863bac69ca87570543d9f18f2f287a441"}, + {file = "numba-0.55.1-1-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ee71407be9cba09b4f68afa668317e97d66d5f83c37ab4caa20d8abcf5fad32b"}, + {file = "numba-0.55.1-1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39a109efc317e8eb786feff0a29476036971ce08e3280be8153c3b6c1ccba415"}, + {file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0dc8294b2b6b2dbe3a709787bbb1e6f9dcef62197429de8daaa714d77052eefe"}, + {file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:bcd5e09dba5e19ff7a1b9716a1ce58f0931cec09515683011e57415c6a33ac3d"}, + {file = "numba-0.55.1-1-cp37-cp37m-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:64209d71b1e33415d5b1b177ed218d679062f844667dd279ee9094c4e3e2babc"}, + {file = "numba-0.55.1-1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff5ed5c7665f8a5405af53332d224caca68358909abde9ca8dfef3495cdea789"}, + {file = "numba-0.55.1-1-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:d80afc5618e66af2d101eff0e6214acb865136ae886d8b01414ca3dedd9166d6"}, + {file = "numba-0.55.1-1-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6d0042371880fa56ed58be27502b11a08bff0b6335f0ebde82af1a7aef5e1287"}, + {file = "numba-0.55.1-1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4a5cb8930e729aeed96809524ca4df41b6f2432b379f220014ef4fdff21dbfe6"}, + {file = "numba-0.55.1-1-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:fee529ddc9c0584b932f7885735162e52344eded8c01c78c17e2768aa6787780"}, + {file = "numba-0.55.1-1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:230e542649c7087454bc851d2e22b5e15694b6cf0549a27234d1baea6c2e0a87"}, + {file = "numba-0.55.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:adc88fe64f5235c8b1e7230ae29476a08ffb61a65e9f79f745bd357f215e2d52"}, + {file = "numba-0.55.1-cp310-cp310-win32.whl", hash = "sha256:a5af7f1d30f56029d1b9ea288372f924f9dcb322f0e6358f6d5203b20eb6f7a0"}, + {file = "numba-0.55.1-cp310-cp310-win_amd64.whl", hash = "sha256:71815c501b2f6309c432e98ff93a582a9bfb61da943e0cb9a52595fadbb1131d"}, + {file = "numba-0.55.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:53909143917ea4962cfbfae7038ac882987ff54cb2c408538ce71f83b356f106"}, + {file = "numba-0.55.1-cp37-cp37m-win32.whl", hash = "sha256:cddc13939e2b27782258826686800ae9c2e90b35c36ef1ab5ccfae7cedca0516"}, + {file = "numba-0.55.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ac6ae19ff5093a42bf8b365550322a2e39650d608daa379dff71571272d88d93"}, + {file = "numba-0.55.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:77187ed09e6b25ae24b840e1acc4b5f9886b551cdc5f919ddad8e5933a6027d5"}, + {file = "numba-0.55.1-cp38-cp38-win32.whl", hash = "sha256:53ee562b873e00eaa26390690ac5d36b706782d429e5a18b255161f607f13c17"}, + {file = "numba-0.55.1-cp38-cp38-win_amd64.whl", hash = "sha256:02fb0ecd218ab1e1171cbaee11235a3a1f7dcf79dee3fa786243a2a6411f2fea"}, + {file = "numba-0.55.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:6aa8f18a003a0e4876826fe080e6038fc6da083899873b77172ec29c32e49b56"}, + {file = "numba-0.55.1-cp39-cp39-win32.whl", hash = "sha256:d5ee721ce884f8313802295633fdd3e7c83541e0917bafea2bdfed6aabab93bf"}, + {file = "numba-0.55.1-cp39-cp39-win_amd64.whl", hash = "sha256:b72350160eb9a73a36aa17d808f954353a263a0295d495497c87439d79bdaec7"}, + {file = "numba-0.55.1.tar.gz", hash = "sha256:03e9069a2666d1c84f93b00dbd716fb8fedde8bb2c6efafa2f04842a46442ea3"}, +] numpy = [ {file = "numpy-1.21.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52a664323273c08f3b473548bf87c8145b7513afd63e4ebba8496ecd3853df13"}, {file = "numpy-1.21.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a7b9db0a2941434cd930dacaafe0fc9da8f3d6157f9d12f761bbde93f46218"}, @@ -7212,6 +7410,10 @@ starlette = [ {file = "starlette-0.17.1-py3-none-any.whl", hash = "sha256:26a18cbda5e6b651c964c12c88b36d9898481cd428ed6e063f5f29c418f73050"}, {file = "starlette-0.17.1.tar.gz", hash = "sha256:57eab3cc975a28af62f6faec94d355a410634940f10b30d68d31cb5ec1b44ae8"}, ] +statsforecast = [ + {file = "statsforecast-0.5.5-py3-none-any.whl", hash = "sha256:f04affa6fcae9d9fae0be74f19bef043c18d80483060971c72975c9bfcdbd63d"}, + {file = "statsforecast-0.5.5.tar.gz", hash = "sha256:6a81ae36568f12aa64f862bdff5518da43e1a1fc14ced9b5d6917259fa9a362f"}, +] statsmodels = [ {file = "statsmodels-0.13.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:3e7ca5b7e678c0bb7a24f5c735d58ac104a50eb61b17c484cce0e221a095560f"}, {file = "statsmodels-0.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:066a75d5585378b2df972f81a90b9a3da5e567b7d4833300c1597438c1a35e29"}, @@ -7338,6 +7540,27 @@ toolz = [ {file = "toolz-0.11.2-py3-none-any.whl", hash = "sha256:a5700ce83414c64514d82d60bcda8aabfde092d1c1a8663f9200c07fdcc6da8f"}, {file = "toolz-0.11.2.tar.gz", hash = "sha256:6b312d5e15138552f1bda8a4e66c30e236c831b612b2bf0005f8a1df10a4bc33"}, ] +torch = [ + {file = "torch-1.11.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:62052b50fffc29ca7afc0c04ef8206b6f1ca9d10629cb543077e12967e8d0398"}, + {file = "torch-1.11.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:866bfba29ac98dec35d893d8e17eaec149d0ac7a53be7baae5c98069897db667"}, + {file = "torch-1.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:951640fb8db308a59d9b510e7d1ad910aff92913323bbe4bc75435347ddd346d"}, + {file = "torch-1.11.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:5d77b5ece78fdafa5c7f42995ff9474399d22571cd6b2de21a5d666306a2ff8c"}, + {file = "torch-1.11.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:b5a38682769b544c875ecc34bcb81fbad5c922139b61319aacffcfd8a32f528c"}, + {file = "torch-1.11.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f82d77695a60626f2b7382d85bc566de8a6b3e50d32080755abc040db802e419"}, + {file = "torch-1.11.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b96654d42566080a134e784705f33f8536b3b95b5dcde357ed7879b1692a5f78"}, + {file = "torch-1.11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8ee7c2e8d7f7020d5bfbc1bb91b9591044c26bbd0cee5e4f694cfd7ed8649260"}, + {file = "torch-1.11.0-cp37-none-macosx_10_9_x86_64.whl", hash = "sha256:6860b1d1bf0bb0b67a6bd47f85a0e4c825b518eea13b5d6101999dbbcbd5bc0c"}, + {file = "torch-1.11.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:4322aa29f50da7f404db06cdf30896ea67b09f673af4a985afc7162bc897864d"}, + {file = "torch-1.11.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:e4d2e0ddd652f30e94cff750220324ec45705d4ecc69658f773b3cb1c7a28dd0"}, + {file = "torch-1.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:34ce5ea4d8d85da32cdbadb50d4585106901e9f8a3527991daa70c13a09de1f7"}, + {file = "torch-1.11.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0ccc85cd06227a3edf809e2c795fd5762c3d4e8a38b5c9f744c6e7cf841361bb"}, + {file = "torch-1.11.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c1554e49d74f1b2c3e7202d77056ba2dd7465437585bac64062b580f714a44e9"}, + {file = "torch-1.11.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:58c7814502b1c129a650d7092033bbb0bbd64faf1a7941631aaa1aeaddc37570"}, + {file = "torch-1.11.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:831cf588f01dda9409e75576741d2823453990dee2983d670f2584b37a01adf7"}, + {file = "torch-1.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:44a1d02fd20f827f0f36dc26fdcfc45e793806a6ad52769a22260655a77a4369"}, + {file = "torch-1.11.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:50fd9bf85c578c871c28f1cb0ace9dfc6024401c7f399b174fb0f370899f4454"}, + {file = "torch-1.11.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:0e48af66ad755f0f9c5f2664028a414f57c49d6adc37e77e06fe0004da4edb61"}, +] tornado = [ {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"}, @@ -7445,6 +7668,10 @@ tzlocal = [ {file = "tzlocal-4.2-py3-none-any.whl", hash = "sha256:89885494684c929d9191c57aa27502afc87a579be5cdd3225c77c463ea043745"}, {file = "tzlocal-4.2.tar.gz", hash = "sha256:ee5842fa3a795f023514ac2d801c4a81d1743bbe642e3940143326b3a00addd7"}, ] +u8darts = [ + {file = "u8darts-0.19.0-py3-none-any.whl", hash = "sha256:8b9073afa0bf36ec4036ca176fbe5426772475455e6cba46be1f63cb2197f953"}, + {file = "u8darts-0.19.0.tar.gz", hash = "sha256:9cb55ab1ed8d634d93348ae046beadea4bdd12f2b2e49f1d1829841994d200ca"}, +] ujson = [ {file = "ujson-5.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:754e9da96a24535ae5ab2a52e1d1dfc65a6a717c14063855b83f327fdf2173ea"}, {file = "ujson-5.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6227597d0201ceadc902d1a8edaffaeb244050b197368ed25e6f6be0df170a6f"}, @@ -7680,6 +7907,10 @@ wsproto = [ {file = "wsproto-1.1.0-py3-none-any.whl", hash = "sha256:2218cb57952d90b9fca325c0dcfb08c3bda93e8fd8070b0a17f048e2e47a521b"}, {file = "wsproto-1.1.0.tar.gz", hash = "sha256:a2e56bfd5c7cd83c1369d83b5feccd6d37798b74872866e62616e0ecf111bda8"}, ] +xarray = [ + {file = "xarray-2022.3.0-py3-none-any.whl", hash = "sha256:560f36eaabe7a989d5583d37ec753dd737357aa6a6453e55c80bb4f92291a69e"}, + {file = "xarray-2022.3.0.tar.gz", hash = "sha256:398344bf7d170477aaceff70210e11ebd69af6b156fe13978054d25c48729440"}, +] xlsxwriter = [ {file = "XlsxWriter-3.0.3-py3-none-any.whl", hash = "sha256:df0aefe5137478d206847eccf9f114715e42aaea077e6a48d0e8a2152e983010"}, {file = "XlsxWriter-3.0.3.tar.gz", hash = "sha256:e89f4a1d2fa2c9ea15cde77de95cd3fd8b0345d0efb3964623f395c8c4988b7f"}, diff --git a/pyproject.toml b/pyproject.toml index bd78b5f83c62..ded65417d630 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,6 +14,7 @@ openbb = 'terminal:terminal' [tool.poetry.dependencies] python = "^3.8,<3.10" iso8601 = "^0.1.14" +FundamentalAnalysis = "^0.2.6" requests = "^2.25.1" alpha-vantage = "^2.3.1" finviz = "^1.3.4" @@ -102,7 +103,10 @@ Jinja2 = "3.0.3" # Remove pinned version when Voila supports 3.1 click = "8.0.1" # Remove pinned version when Black supports 8.1 kaleido = {version = "<=0.2.1", optional = true, extras = ["bots"]} Riskfolio-Lib = "^3.1.1" -fundamentalanalysis = "^0.2.14" +llvmlite = {version = "^0.38.1", extras = ["prediction"]} +torch = {version = "^1.11.0", extras = ["prediction"]} +u8darts = {extras = ["prediction"], version = "^0.19.0"} +fundamentalanalysis = {version = "^0.2.14", extras = ["prediction"]} [tool.poetry.dev-dependencies] diff --git a/requirements-full.txt b/requirements-full.txt index 7727d79c7e19..ccb36c94749c 100644 --- a/requirements-full.txt +++ b/requirements-full.txt @@ -36,7 +36,7 @@ cfgv==3.3.1; python_full_version >= "3.6.1" and python_version >= "3.7" charset-normalizer==2.0.12; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4.0" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") click==8.0.1; python_version >= "3.6" codespell==2.1.0; python_version >= "3.5" -colorama==0.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and platform_system == "Windows" and python_version >= "3.8" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0") and sys_platform == "win32" and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0") and (python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.5.0" and platform_system == "Windows" and python_version >= "3.6") and (python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0") +colorama==0.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and platform_system == "Windows" and python_version >= "3.8" and (python_version >= "3.6" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.6" and python_full_version >= "3.5.0") and sys_platform == "win32" and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or platform_system == "Windows" and python_version >= "3.7" and python_full_version >= "3.5.0") and (python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.5.0") commonmark==0.9.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0" convertdate==2.4.0; python_version >= "3.7" and python_version < "4" coverage==6.3.2; python_version >= "3.7" @@ -88,7 +88,7 @@ google-pasta==0.2.0 grpcio==1.45.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.6" h11==0.13.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0" h5py==3.6.0; python_version >= "3.7" -hijri-converter==2.2.3; python_version >= "3.6" +hijri-converter==2.2.3; python_version >= "3.7" holidays==0.11.3.1; python_version >= "3.6" identify==2.4.12; python_version >= "3.7" idna==3.3; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") @@ -125,7 +125,9 @@ kiwisolver==1.4.2; python_version >= "3.7" korean-lunar-calendar==0.2.1; python_version >= "3.7" and python_full_version >= "3.7.0" lazy-object-proxy==1.7.1; python_version >= "3.6" and python_full_version >= "3.6.2" libclang==11.1.0 +lightgbm==3.3.2; python_version >= "3.7" linearmodels==4.26; python_version >= "3.8" +llvmlite==0.38.1; python_version >= "3.7" and python_version < "3.11" lxml==4.8.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0" markdown==3.3.6; python_version >= "3.6" @@ -149,9 +151,11 @@ nbconvert==6.5.0; python_version >= "3.7" nbformat==5.3.0; python_full_version >= "3.7.0" and python_version >= "3.7" nest-asyncio==1.5.5; python_full_version >= "3.7.0" and python_version >= "3.7" networkx==2.8; python_version >= "3.8" +nfoursid==1.0.0; python_version >= "3.7" nodeenv==1.6.0; python_version >= "3.7" notebook-shim==0.1.0; python_version >= "3.7" notebook==6.4.11; python_version >= "3.7" +numba==0.55.1; python_version >= "3.7" and python_version < "3.11" numpy==1.21.2; python_version >= "3.7" and python_version < "3.11" oandapyv20==0.6.3 oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" @@ -270,6 +274,7 @@ sphinxcontrib-serializinghtml==1.1.5; python_version >= "3.6" squarify==0.4.3 sseclient==0.0.27 stack-data==0.2.0; python_full_version >= "3.6.2" and python_version >= "3.8" +statsforecast==0.5.5; python_version >= "3.7" statsmodels==0.13.2; python_version >= "3.7" stevedore==3.5.0; python_version >= "3.7" tabulate==0.8.9; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" @@ -291,8 +296,9 @@ tokenize-rt==4.2.1; python_full_version >= "3.6.2" and python_version >= "3.7" toml==0.10.2; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7" tomli==2.0.1; python_version >= "3.8" and python_full_version >= "3.6.2" and python_version < "3.11" toolz==0.11.2; python_version >= "3.7" and python_full_version >= "3.7.0" +torch==1.11.0; python_full_version >= "3.7.0" tornado==6.1; python_full_version >= "3.7.0" and python_version >= "3.7" -tqdm==4.64.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" +tqdm==4.64.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" tradingview-ta==3.2.10; python_version >= "3.6" traitlets==5.1.1; python_full_version >= "3.7.0" and python_version >= "3.8" trio-websocket==0.9.2; python_version >= "3.7" and python_version < "4.0" @@ -304,9 +310,10 @@ types-requests==2.27.20 types-setuptools==57.4.14 types-six==1.16.15 types-urllib3==1.26.13 -typing-extensions==4.2.0; python_version < "3.10" and python_full_version >= "3.6.2" and python_version >= "3.7" +typing-extensions==4.2.0; python_version < "3.10" and python_full_version >= "3.7.0" and python_version >= "3.7" tzdata==2022.1; platform_system == "Windows" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") tzlocal==4.2; python_version >= "3.6" +u8darts==0.19.0; python_version >= "3.7" ujson==5.2.0; python_version >= "3.7" unidecode==1.3.4; python_version >= "3.7" update-checker==0.18.0; python_version >= "3.6" and python_version < "4.0" @@ -325,6 +332,7 @@ werkzeug==2.1.1; python_version >= "3.7" widgetsnbextension==3.6.0 wrapt==1.14.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and python_version >= "3.8" wsproto==1.1.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0" +xarray==2022.3.0; python_version >= "3.8" xlsxwriter==3.0.3; python_version >= "3.7" yarl==1.7.2; python_version >= "3.6" yfinance==0.1.70 diff --git a/requirements.txt b/requirements.txt index f76af2971a62..e3746f817b8c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -27,7 +27,7 @@ certifi==2021.10.8; python_full_version >= "3.7.1" and python_version < "4" and cffi==1.15.0; python_version >= "3.7" charset-normalizer==2.0.12; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4.0" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") click==8.0.1; python_version >= "3.6" -colorama==0.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and platform_system == "Windows" and python_version >= "3.8" and (python_version >= "3.6" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.5.0" and platform_system == "Windows" and python_version >= "3.6") and sys_platform == "win32" +colorama==0.4.4; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and platform_system == "Windows" and python_version >= "3.8" and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.5.0" and platform_system == "Windows" and python_version >= "3.7") and sys_platform == "win32" commonmark==0.9.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0" convertdate==2.4.0; python_version >= "3.7" and python_version < "4" cryptography==36.0.2; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7" @@ -67,7 +67,7 @@ gitdb==4.0.9; python_version >= "3.7" gitpython==3.1.27; python_version >= "3.7" grpcio==1.45.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.6" h11==0.13.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0" -hijri-converter==2.2.3; python_version >= "3.6" +hijri-converter==2.2.3; python_version >= "3.7" holidays==0.11.3.1; python_version >= "3.6" idna==3.3; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "4" and python_full_version < "4.0.0" and (python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") importlib-metadata==4.11.3; python_version < "3.10" and python_version >= "3.7" @@ -96,7 +96,9 @@ jupyterlab-widgets==1.1.0; python_version >= "3.6" jupyterlab==3.3.4; python_version >= "3.7" kiwisolver==1.4.2; python_version >= "3.7" korean-lunar-calendar==0.2.1; python_version >= "3.7" and python_full_version >= "3.7.0" +lightgbm==3.3.2; python_version >= "3.7" linearmodels==4.26; python_version >= "3.8" +llvmlite==0.38.1; python_version >= "3.7" and python_version < "3.11" lxml==4.8.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7" markupsafe==2.1.1; python_version >= "3.7" matplotlib-inline==0.1.3; python_full_version >= "3.6.2" and python_version >= "3.8" @@ -114,8 +116,10 @@ nbconvert==6.5.0; python_version >= "3.7" nbformat==5.3.0; python_full_version >= "3.7.0" and python_version >= "3.7" nest-asyncio==1.5.5; python_full_version >= "3.7.0" and python_version >= "3.7" networkx==2.8; python_version >= "3.8" +nfoursid==1.0.0; python_version >= "3.7" notebook-shim==0.1.0; python_version >= "3.7" notebook==6.4.11; python_version >= "3.7" +numba==0.55.1; python_version >= "3.7" and python_version < "3.11" numpy==1.21.2; python_version >= "3.7" and python_version < "3.11" oandapyv20==0.6.3 oauthlib==3.2.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" @@ -211,6 +215,7 @@ soupsieve==2.3.2.post1; python_version >= "3.6" and python_full_version >= "3.6. squarify==0.4.3 sseclient==0.0.27 stack-data==0.2.0; python_full_version >= "3.6.2" and python_version >= "3.8" +statsforecast==0.5.5; python_version >= "3.7" statsmodels==0.13.2; python_version >= "3.7" tabulate==0.8.9; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" temporal-cache==0.1.4 @@ -222,15 +227,17 @@ threadpoolctl==3.1.0; python_version >= "3.7" and python_full_version < "3.0.0" tinycss2==1.1.1; python_version >= "3.7" tomli==2.0.1; python_version >= "3.8" and python_full_version >= "3.6.2" toolz==0.11.2; python_version >= "3.7" and python_full_version >= "3.7.0" +torch==1.11.0; python_full_version >= "3.7.0" tornado==6.1; python_full_version >= "3.7.0" and python_version >= "3.7" -tqdm==4.64.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" +tqdm==4.64.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7" tradingview-ta==3.2.10; python_version >= "3.6" traitlets==5.1.1; python_full_version >= "3.7.0" and python_version >= "3.8" trio-websocket==0.9.2; python_version >= "3.7" and python_version < "4.0" trio==0.20.0; python_version >= "3.7" and python_version < "4.0" -typing-extensions==4.2.0; python_version < "3.10" and python_full_version >= "3.6.2" and python_version >= "3.7" +typing-extensions==4.2.0; python_version < "3.10" and python_full_version >= "3.7.0" and python_version >= "3.7" tzdata==2022.1; platform_system == "Windows" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6") tzlocal==4.2; python_version >= "3.6" +u8darts==0.19.0; python_version >= "3.7" ujson==5.2.0; python_version >= "3.7" unidecode==1.3.4; python_version >= "3.7" update-checker==0.18.0; python_version >= "3.6" and python_version < "4.0" @@ -246,6 +253,7 @@ websockets==10.3; python_version >= "3.7" widgetsnbextension==3.6.0 wrapt==1.14.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8" wsproto==1.1.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0" +xarray==2022.3.0; python_version >= "3.8" xlsxwriter==3.0.3; python_version >= "3.7" yarl==1.7.2; python_version >= "3.6" yfinance==0.1.70 diff --git a/scripts/test_stocks_pred.openbb b/scripts/test_stocks_pred.openbb index d2a52ee3e944..b4f3afe57832 100644 --- a/scripts/test_stocks_pred.openbb +++ b/scripts/test_stocks_pred.openbb @@ -11,4 +11,5 @@ rnn lstm conv1d mc +expo exit \ No newline at end of file diff --git a/website/content/terminal/common/prediction_techniques/expo/_index.md b/website/content/terminal/common/prediction_techniques/expo/_index.md new file mode 100755 index 000000000000..684dc704a05a --- /dev/null +++ b/website/content/terminal/common/prediction_techniques/expo/_index.md @@ -0,0 +1,30 @@ +``` +usage: ets [-n N_DAYS] [-t TREND] [-s SEASONAL] [-p SEASONAL_PERIODS] [-e S_END_DATE] [-d DAMPED][-w START_WINDOW][-f FORECAST_HORIZON][-h] +``` + +Performs Probabalistic Exponential Smoothing forecasting. This is a wrapper around statsmodels Holt-Winters' Exponential Smoothing; +https://unit8co.github.io/darts/generated_api/darts.models.forecasting.exponential_smoothing.html + + +``` +optional arguments: + -n N_DAYS, --n_days N_DAYS + prediction days. (default: 5) + -t {N,A,M}, --trend {N,A,M} + Trend: N: None, A: Additive, M: Multiplicative. (default: A) + -s {N,A,M}, --seasonal {N,A,M} + Seasonality: N: None, A: Additive, M: Multiplicative. (default: A) + -p SEASONAL_PERIODS, --periods SEASONAL_PERIODS + Seasonal periods: 4: Quarters, 5: Business Days, 7: Weekly (default: 5) + -d DAMPED, --damped DAMPED + Dampening (default: F) + -w START_WINDOW, --window START_WINDOW + Start point for rolling training and forecast window. 0.0-1.0 (default: 0.65) + -f FORECAST_HORIZON, --forecasthorizon FORECAST_HORIZON + Days/Points to forecast when training and performing historical back-testing + (default: 3) + -h, --help show this help message (default: False) + --export EXPORT Export figure into png, jpg, pdf, svg (default: ) +``` + +![EXPO](https://user-images.githubusercontent.com/105685594/169634909-30864d44-e607-4e6f-8d59-ac49dafa2e2c.png) diff --git a/website/data/menu/main.yml b/website/data/menu/main.yml index d454641583be..54ac77038a51 100755 --- a/website/data/menu/main.yml +++ b/website/data/menu/main.yml @@ -660,6 +660,8 @@ main: ref: "/terminal/common/prediction_techniques/conv1d" - name: mc ref: "/terminal/common/prediction_techniques/mc" + - name: expo + ref: "/terminal/common/prediction_techniques/expo" - name: Cryptocurrency ref: "/terminal/cryptocurrency" sub: @@ -1654,4 +1656,4 @@ main: - name: "Slack" ref: "/bots/slack" - name: "GroupMe" - ref: "/bots/groupme" + ref: "/bots/groupme" \ No newline at end of file