From f50e2d153a95d3d471f526198a11bee7329657f9 Mon Sep 17 00:00:00 2001
From: Hahnbee Lee <55263191+hahnbeelee@users.noreply.github.com>
Date: Tue, 10 Oct 2023 21:52:58 -0700
Subject: [PATCH 01/22] Revert "undo all mintlify assets"
This reverts commit e272e576e8bcd2fa2c66476fd9324f18ffcc9a24.
---
.github/workflows/build-docs.yaml | 41 ++
README.md | 334 +++++++-------
action_files/final-formatting.bash | 11 +
nbs/_extensions/mintlify/_extension.yml | 30 ++
nbs/_extensions/mintlify/mintlify.lua | 71 +++
.../mintlify/mintlify_renderers.lua | 3 +
nbs/_extensions/mintlify/mintlify_utils.lua | 47 ++
nbs/_extensions/mintlify/mintlify_writer.lua | 133 ++++++
nbs/_quarto.yml | 59 +--
nbs/custom.yml | 22 -
nbs/favicon.png | Bin 0 -> 208747 bytes
nbs/favicon.svg | 5 +
nbs/favicon_png.png | Bin 0 -> 177981 bytes
nbs/mint.json | 122 +++++
nbs/styles.css | 431 ------------------
preview-mintlify-docs.bash | 27 ++
settings.ini | 5 +-
17 files changed, 673 insertions(+), 668 deletions(-)
create mode 100644 .github/workflows/build-docs.yaml
create mode 100755 action_files/final-formatting.bash
create mode 100644 nbs/_extensions/mintlify/_extension.yml
create mode 100644 nbs/_extensions/mintlify/mintlify.lua
create mode 100644 nbs/_extensions/mintlify/mintlify_renderers.lua
create mode 100644 nbs/_extensions/mintlify/mintlify_utils.lua
create mode 100644 nbs/_extensions/mintlify/mintlify_writer.lua
delete mode 100644 nbs/custom.yml
create mode 100644 nbs/favicon.png
create mode 100644 nbs/favicon.svg
create mode 100644 nbs/favicon_png.png
create mode 100644 nbs/mint.json
delete mode 100644 nbs/styles.css
create mode 100644 preview-mintlify-docs.bash
diff --git a/.github/workflows/build-docs.yaml b/.github/workflows/build-docs.yaml
new file mode 100644
index 000000000..d50ea4104
--- /dev/null
+++ b/.github/workflows/build-docs.yaml
@@ -0,0 +1,41 @@
+name: "build-docs"
+on:
+ push:
+ branches: ["main"]
+ workflow_dispatch:
+jobs:
+ build-docs:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-python@v4
+ with:
+ cache: "pip"
+ cache-dependency-path: settings.ini
+ - name: Install Dependencies
+ shell: bash
+ run: |
+ set -ux
+ python -m pip install --upgrade pip
+ pip install -Uq nbdev
+ test -f setup.py && pip install -e ".[dev]"
+ nbdev_docs
+ - name: Apply final formats
+ shell: bash
+ run: bash ./action_files/final-formatting.bash
+ - name: Copy over necessary assets
+ run: |
+ cp nbs/mint.json _docs/mint.json
+ cp nbs/imgs/logo/dark.png _docs/dark.png
+ cp nbs/imgs/logo/light.png _docs/light.png
+ cp nbs/favicon.svg _docs/favicon.svg
+ - name: Deploy to Mintlify Docs
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_branch: docs
+ publish_dir: ./_docs
+ # The following lines assign commit authorship to the official GH-Actions bot for deploys to `docs` branch.
+ # You can swap them out with your own user credentials.
+ user_name: github-actions[bot]
+ user_email: 41898282+github-actions[bot]@users.noreply.github.com
diff --git a/README.md b/README.md
index 96a610ead..72627afbe 100644
--- a/README.md
+++ b/README.md
@@ -1,32 +1,46 @@
-# StatsForecast ⚡️
-
-
+# Nixtla [](https://twitter.com/intent/tweet?text=Statistical%20Forecasting%20Algorithms%20by%20Nixtla%20&url=https://github.com/Nixtla/statsforecast&via=nixtlainc&hashtags=StatisticalModels,TimeSeries,Forecasting) [](https://join.slack.com/t/nixtlacommunity/shared_invite/zt-1pmhan9j5-F54XR20edHk0UtYAPcW4KQ)
+
+[](#contributors-)
+
+
+
+

+
Statistical ⚡️ Forecast
+
Lightning fast forecasting with statistical and econometric models
+
+[](https://github.com/Nixtla/statsforecast/actions/workflows/ci.yaml)
+[](https://pypi.org/project/statsforecast/)
+[](https://pypi.org/project/statsforecast/)
+[](https://anaconda.org/conda-forge/statsforecast)
+[](https://github.com/Nixtla/statsforecast/blob/main/LICENSE)
+[](https://nixtla.github.io/statsforecast/)
+[](https://pepy.tech/project/statsforecast)
+
+**StatsForecast** offers a collection of widely used univariate time series forecasting models, including automatic `ARIMA`, `ETS`, `CES`, and `Theta` modeling optimized for high performance using `numba`. It also includes a large battery of benchmarking models.
+
## Installation
-You can install
-[`StatsForecast`](https://Nixtla.github.io/statsforecast/src/core/core.html#statsforecast)
-with:
+You can install `StatsForecast` with:
-``` python
+```python
pip install statsforecast
```
-or
+or
-``` python
+```python
conda install -c conda-forge statsforecast
-```
+```
-Vist our [Installation
-Guide](./docs/getting-started/0_Installation.ipynb) for further
-instructions.
+
+Vist our [Installation Guide](https://nixtla.github.io/statsforecast/docs/getting-started/installation.html) for further instructions.
## Quick Start
**Minimal Example**
-``` python
+```python
from statsforecast import StatsForecast
from statsforecast.models import AutoARIMA
@@ -39,201 +53,144 @@ sf.fit(df)
sf.predict(h=12, level=[95])
```
-**Get Started with this [quick
-guide](../nbs/docs/getting-started/1_Getting_Started_short.ipynb).**
+**Get Started with this [quick guide](https://nixtla.github.io/statsforecast/docs/getting-started/getting_started_short.html).**
-**Follow this [end-to-end
-walkthrough](../nbs/docs/getting-started/2_Getting_Started_complete.ipynb)
-for best practices.**
+**Follow this [end-to-end walkthrough](https://nixtla.github.io/statsforecast/docs/getting-started/getting_started_complete.html) for best practices.**
-## Why?
+## Why?
-Current Python alternatives for statistical models are slow, inaccurate
-and don’t scale well. So we created a library that can be used to
-forecast in production environments or as benchmarks.
-[`StatsForecast`](https://Nixtla.github.io/statsforecast/src/core/core.html#statsforecast)
-includes an extensive battery of models that can efficiently fit
-millions of time series.
+Current Python alternatives for statistical models are slow, inaccurate and don't scale well. So we created a library that can be used to forecast in production environments or as benchmarks. `StatsForecast` includes an extensive battery of models that can efficiently fit millions of time series.
## Features
-- Fastest and most accurate implementations of
- [`AutoARIMA`](https://Nixtla.github.io/statsforecast/src/core/models.html#autoarima),
- [`AutoETS`](https://Nixtla.github.io/statsforecast/src/core/models.html#autoets),
- [`AutoCES`](https://Nixtla.github.io/statsforecast/src/core/models.html#autoces),
- [`MSTL`](https://Nixtla.github.io/statsforecast/src/core/models.html#mstl)
- and
- [`Theta`](https://Nixtla.github.io/statsforecast/src/core/models.html#theta)
- in Python.
-- Out-of-the-box compatibility with Spark, Dask, and Ray.
-- Probabilistic Forecasting and Confidence Intervals.
-- Support for exogenous Variables and static covariates.
-- Anomaly Detection.
-- Familiar sklearn syntax: `.fit` and `.predict`.
+* Fastest and most accurate implementations of `AutoARIMA`, `AutoETS`, `AutoCES`, `MSTL` and `Theta` in Python.
+* Out-of-the-box compatibility with Spark, Dask, and Ray.
+* Probabilistic Forecasting and Confidence Intervals.
+* Support for exogenous Variables and static covariates.
+* Anomaly Detection.
+* Familiar sklearn syntax: `.fit` and `.predict`.
## Highlights
-- Inclusion of `exogenous variables` and `prediction intervals` for
- ARIMA.
-- 20x
- [faster](https://github.com/Nixtla/statsforecast/tree/main/experiments/arima)
- than `pmdarima`.
-- 1.5x faster than `R`.
-- 500x faster than `Prophet`.
-- 4x
- [faster](https://github.com/Nixtla/statsforecast/tree/main/experiments/ets)
- than `statsmodels`.
-- Compiled to high performance machine code through
- [`numba`](https://numba.pydata.org/).
-- 1,000,000 series in [30
- min](https://github.com/Nixtla/statsforecast/tree/main/experiments/ray)
- with [ray](https://github.com/ray-project/ray).
-- Replace FB-Prophet in two lines of code and gain speed and accuracy.
- Check the experiments
- [here](https://github.com/Nixtla/statsforecast/tree/main/experiments/arima_prophet_adapter).
-- Fit 10 benchmark models on **1,000,000** series in [under **5
- min**](https://github.com/Nixtla/statsforecast/tree/main/experiments/benchmarks_at_scale).
-
-Missing something? Please open an issue or write us in
-[](https://join.slack.com/t/nixtlaworkspace/shared_invite/zt-135dssye9-fWTzMpv2WBthq8NK0Yvu6A)
+* Inclusion of `exogenous variables` and `prediction intervals` for ARIMA.
+* 20x [faster](./experiments/arima/) than `pmdarima`.
+* 1.5x faster than `R`.
+* 500x faster than `Prophet`.
+* 4x [faster](./experiments/ets/) than `statsmodels`.
+* Compiled to high performance machine code through [`numba`](https://numba.pydata.org/).
+* 1,000,000 series in [30 min](https://github.com/Nixtla/statsforecast/tree/main/experiments/ray) with [ray](https://github.com/ray-project/ray).
+* Replace FB-Prophet in two lines of code and gain speed and accuracy. Check the experiments [here](https://github.com/Nixtla/statsforecast/tree/main/experiments/arima_prophet_adapter).
+* Fit 10 benchmark models on **1,000,000** series in [under **5 min**](./experiments/benchmarks_at_scale/).
+
+
+Missing something? Please open an issue or write us in [](https://join.slack.com/t/nixtlaworkspace/shared_invite/zt-135dssye9-fWTzMpv2WBthq8NK0Yvu6A)
## Examples and Guides
-📚 [End to End
-Walkthrough](https://nixtla.github.io/statsforecast/docs/getting-started/getting_started_complete.html):
-Model training, evaluation and selection for multiple time series
+📚 [End to End Walkthrough](https://nixtla.github.io/statsforecast/docs/getting-started/getting_started_complete.html): Model training, evaluation and selection for multiple time series
+
+🔎 [Anomaly Detection](https://nixtla.github.io/statsforecast/docs/tutorials/anomalydetection.html): detect anomalies for time series using in-sample prediction intervals.
-🔎 [Anomaly
-Detection](https://nixtla.github.io/statsforecast/docs/tutorials/anomalydetection.html):
-detect anomalies for time series using in-sample prediction intervals.
+👩🔬 [Cross Validation](https://nixtla.github.io/statsforecast/docs/tutorials/crossvalidation.html): robust model’s performance evaluation.
-👩🔬 [Cross
-Validation](https://nixtla.github.io/statsforecast/docs/tutorials/crossvalidation.html):
-robust model’s performance evaluation.
+❄️ [Multiple Seasonalities](https://nixtla.github.io/statsforecast/docs/tutorials/multipleseasonalities.html): how to forecast data with multiple seasonalities using an MSTL.
-❄️ [Multiple
-Seasonalities](https://nixtla.github.io/statsforecast/docs/tutorials/multipleseasonalities.html):
-how to forecast data with multiple seasonalities using an MSTL.
+🔌 [Predict Demand Peaks](https://nixtla.github.io/statsforecast/docs/tutorials/electricitypeakforecasting.html): electricity load forecasting for detecting daily peaks and reducing electric bills.
-🔌 [Predict Demand
-Peaks](https://nixtla.github.io/statsforecast/docs/tutorials/electricitypeakforecasting.html):
-electricity load forecasting for detecting daily peaks and reducing
-electric bills.
+📈 [Intermittent Demand](https://nixtla.github.io/statsforecast/docs/tutorials/intermittentdata.html): forecast series with very few non-zero observations.
-📈 [Intermittent
-Demand](https://nixtla.github.io/statsforecast/docs/tutorials/intermittentdata.html):
-forecast series with very few non-zero observations.
+🌡️ [Exogenous Regressors](https://nixtla.github.io/statsforecast/docs/how-to-guides/exogenous.html): like weather or prices
-🌡️ [Exogenous
-Regressors](https://nixtla.github.io/statsforecast/docs/how-to-guides/exogenous.html):
-like weather or prices
## Models
### Automatic Forecasting
+Automatic forecasting tools search for the best parameters and select the best possible model for a group of time series. These tools are useful for large collections of univariate time series.
-Automatic forecasting tools search for the best parameters and select
-the best possible model for a group of time series. These tools are
-useful for large collections of univariate time series.
-
-| Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
-|:-----------------------------------------------------------------------------------|:--------------:|:----------------------:|:----------------------:|:---------------------------:|
-| [AutoARIMA](https://nixtla.github.io/statsforecast/src/core/models.html#autoarima) | ✅ | ✅ | ✅ | ✅ |
-| [AutoETS](https://nixtla.github.io/statsforecast/src/core/models.html#autoets) | ✅ | ✅ | ✅ | ✅ |
-| [AutoCES](https://nixtla.github.io/statsforecast/src/core/models.html#autoces) | ✅ | ✅ | ✅ | ✅ |
-| [AutoTheta](https://nixtla.github.io/statsforecast/src/core/models.html#autotheta) | ✅ | ✅ | ✅ | ✅ |
+|Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
+|:------|:-------------:|:----------------------:|:---------------------:|:----------------------------:|
+|[AutoARIMA](https://nixtla.github.io/statsforecast/src/core/models.html#autoarima)|✅|✅|✅|✅|✅|
+|[AutoETS](https://nixtla.github.io/statsforecast/src/core/models.html#autoets)|✅|✅|✅|✅|✅|
+|[AutoCES](https://nixtla.github.io/statsforecast/src/core/models.html#autoces)|✅|✅|✅|✅|✅|
+|[AutoTheta](https://nixtla.github.io/statsforecast/src/core/models.html#autotheta)|✅|✅|✅|✅|✅|
## ARIMA Family
-
These models exploit the existing autocorrelations in the time series.
-| Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
-|:---------------------------------------------------------------------------------------------|:--------------:|:----------------------:|:----------------------:|:---------------------------:|
-| [ARIMA](https://nixtla.github.io/statsforecast/src/core/models.html#arima) | ✅ | ✅ | ✅ | ✅ |
-| [AutoRegressive](https://nixtla.github.io/statsforecast/src/core/models.html#autoregressive) | ✅ | ✅ | ✅ | ✅ |
+|Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
+|:------|:-------------:|:----------------------:|:---------------------:|:----------------------------:|
+|[ARIMA](https://nixtla.github.io/statsforecast/src/core/models.html#arima)|✅|✅|✅|✅|✅|
+|[AutoRegressive](https://nixtla.github.io/statsforecast/src/core/models.html#autoregressive)|✅|✅|✅|✅|✅|
### Theta Family
+Fit two theta lines to a deseasonalized time series, using different techniques to obtain and combine the two theta lines to produce the final forecasts.
-Fit two theta lines to a deseasonalized time series, using different
-techniques to obtain and combine the two theta lines to produce the
-final forecasts.
-
-| Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
-|:-----------------------------------------------------------------------------------------------------------|:--------------:|:----------------------:|:----------------------:|:---------------------------:|
-| [Theta](https://nixtla.github.io/statsforecast/src/core/models.html#theta) | ✅ | ✅ | ✅ | ✅ |
-| [OptimizedTheta](https://nixtla.github.io/statsforecast/src/core/models.html#optimizedtheta) | ✅ | ✅ | ✅ | ✅ |
-| [DynamicTheta](https://nixtla.github.io/statsforecast/src/core/models.html#dynamictheta) | ✅ | ✅ | ✅ | ✅ |
-| [DynamicOptimizedTheta](https://nixtla.github.io/statsforecast/src/core/models.html#dynamicoptimizedtheta) | ✅ | ✅ | ✅ | ✅ |
+|Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
+|:------|:-------------:|:----------------------:|:---------------------:|:----------------------------:|
+|[Theta](https://nixtla.github.io/statsforecast/src/core/models.html#theta)|✅|✅|✅|✅|✅|
+|[OptimizedTheta](https://nixtla.github.io/statsforecast/src/core/models.html#optimizedtheta)|✅|✅|✅|✅|✅|
+|[DynamicTheta](https://nixtla.github.io/statsforecast/src/core/models.html#dynamictheta)|✅|✅|✅|✅|✅|
+|[DynamicOptimizedTheta](https://nixtla.github.io/statsforecast/src/core/models.html#dynamicoptimizedtheta)|✅|✅|✅|✅|✅|
### Multiple Seasonalities
+Suited for signals with more than one clear seasonality. Useful for low-frequency data like electricity and logs.
-Suited for signals with more than one clear seasonality. Useful for
-low-frequency data like electricity and logs.
+|Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
+|:------|:-------------:|:----------------------:|:---------------------:|:----------------------------:|
+|[MSTL](https://nixtla.github.io/statsforecast/src/core/models.html#mstl)|✅|✅|✅|✅|✅|
-| Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
-|:-------------------------------------------------------------------------|:--------------:|:----------------------:|:----------------------:|:---------------------------:|
-| [MSTL](https://nixtla.github.io/statsforecast/src/core/models.html#mstl) | ✅ | ✅ | ✅ | ✅ |
+### GARCH and ARCH Models
+Suited for modeling time series that exhibit non-constant volatility over time. The ARCH model is a particular case of GARCH.
-### GARCH and ARCH Models
+|Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
+|:------|:-------------:|:----------------------:|:---------------------:|:----------------------------:|
+|[GARCH](https://nixtla.github.io/statsforecast/src/core/models.html#garch)|✅|✅|✅|✅|✅|
+|[ARCH](https://nixtla.github.io/statsforecast/src/core/models.html#arch)|✅|✅|✅|✅|✅|
-Suited for modeling time series that exhibit non-constant volatility
-over time. The ARCH model is a particular case of GARCH.
-
-| Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
-|:---------------------------------------------------------------------------|:--------------:|:----------------------:|:----------------------:|:---------------------------:|
-| [GARCH](https://nixtla.github.io/statsforecast/src/core/models.html#garch) | ✅ | ✅ | ✅ | ✅ |
-| [ARCH](https://nixtla.github.io/statsforecast/src/core/models.html#arch) | ✅ | ✅ | ✅ | ✅ |
### Baseline Models
-
Classical models for establishing baseline.
-| Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
-|:-----------------------------------------------------------------------------------------------------------|:--------------:|:----------------------:|:----------------------:|:---------------------------:|
-| [HistoricAverage](https://nixtla.github.io/statsforecast/src/core/models.html#historicaverage) | ✅ | ✅ | ✅ | ✅ |
-| [Naive](https://nixtla.github.io/statsforecast/src/core/models.html#naive) | ✅ | ✅ | ✅ | ✅ |
-| [RandomWalkWithDrift](https://nixtla.github.io/statsforecast/src/core/models.html#randomwalkwithdrift) | ✅ | ✅ | ✅ | ✅ |
-| [SeasonalNaive](https://nixtla.github.io/statsforecast/src/core/models.html#seasonalnaive) | ✅ | ✅ | ✅ | ✅ |
-| [WindowAverage](https://nixtla.github.io/statsforecast/src/core/models.html#windowaverage) | ✅ | | | |
-| [SeasonalWindowAverage](https://nixtla.github.io/statsforecast/src/core/models.html#seasonalwindowaverage) | ✅ | | | |
+|Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
+|:------|:-------------:|:----------------------:|:---------------------:|:----------------------------:|
+|[HistoricAverage](https://nixtla.github.io/statsforecast/src/core/models.html#historicaverage)|✅|✅|✅|✅|✅|
+|[Naive](https://nixtla.github.io/statsforecast/src/core/models.html#naive)|✅|✅|✅|✅|✅|
+|[RandomWalkWithDrift](https://nixtla.github.io/statsforecast/src/core/models.html#randomwalkwithdrift)|✅|✅|✅|✅|✅|
+|[SeasonalNaive](https://nixtla.github.io/statsforecast/src/core/models.html#seasonalnaive)|✅|✅|✅|✅|✅|
+|[WindowAverage](https://nixtla.github.io/statsforecast/src/core/models.html#windowaverage)|✅|||||
+|[SeasonalWindowAverage](https://nixtla.github.io/statsforecast/src/core/models.html#seasonalwindowaverage)|✅|||||
### Exponential Smoothing
+Uses a weighted average of all past observations where the weights decrease exponentially into the past. Suitable for data with clear trend and/or seasonality. Use the `SimpleExponential` family for data with no clear trend or seasonality.
-Uses a weighted average of all past observations where the weights
-decrease exponentially into the past. Suitable for data with clear trend
-and/or seasonality. Use the `SimpleExponential` family for data with no
-clear trend or seasonality.
+|Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
+|:------|:-------------:|:----------------------:|:---------------------:|:----------------------------:|
+|[SimpleExponentialSmoothing](https://nixtla.github.io/statsforecast/src/core/models.html#simpleexponentialsmoothing)|✅|||||
+|[SimpleExponentialSmoothingOptimized](https://nixtla.github.io/statsforecast/src/core/models.html#simpleexponentialsmoothingoptimized)|✅|||||
+|[SeasonalExponentialSmoothing](https://nixtla.github.io/statsforecast/src/core/models.html#seasonalexponentialsmoothing)|✅|||||
+|[SeasonalExponentialSmoothingOptimized](https://nixtla.github.io/statsforecast/src/core/models.html#seasonalexponentialsmoothingoptimized)|✅|||||
+|[Holt](https://nixtla.github.io/statsforecast/src/core/models.html#holt)|✅|✅|✅|✅|✅|
+|[HoltWinters](https://nixtla.github.io/statsforecast/src/core/models.html#holtwinters)|✅|✅|✅|✅|✅|
-| Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
-|:-------------------------------------------------------------------------------------------------------------------------------------------|:--------------:|:----------------------:|:----------------------:|:---------------------------:|
-| [SimpleExponentialSmoothing](https://nixtla.github.io/statsforecast/src/core/models.html#simpleexponentialsmoothing) | ✅ | | | |
-| [SimpleExponentialSmoothingOptimized](https://nixtla.github.io/statsforecast/src/core/models.html#simpleexponentialsmoothingoptimized) | ✅ | | | |
-| [SeasonalExponentialSmoothing](https://nixtla.github.io/statsforecast/src/core/models.html#seasonalexponentialsmoothing) | ✅ | | | |
-| [SeasonalExponentialSmoothingOptimized](https://nixtla.github.io/statsforecast/src/core/models.html#seasonalexponentialsmoothingoptimized) | ✅ | | | |
-| [Holt](https://nixtla.github.io/statsforecast/src/core/models.html#holt) | ✅ | ✅ | ✅ | ✅ |
-| [HoltWinters](https://nixtla.github.io/statsforecast/src/core/models.html#holtwinters) | ✅ | ✅ | ✅ | ✅ |
-
-### Sparse or Inttermitent
+### Sparse or Intermittent
Suited for series with very few non-zero observations
-| Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
-|:-------------------------------------------------------------------------------------------------|:--------------:|:----------------------:|:----------------------:|:---------------------------:|
-| [ADIDA](https://nixtla.github.io/statsforecast/src/core/models.html#adida) | ✅ | | | |
-| [CrostonClassic](https://nixtla.github.io/statsforecast/src/core/models.html#crostonclassic) | ✅ | | | |
-| [CrostonOptimized](https://nixtla.github.io/statsforecast/src/core/models.html#crostonoptimized) | ✅ | | | |
-| [CrostonSBA](https://nixtla.github.io/statsforecast/src/core/models.html#crostonsba) | ✅ | | | |
-| [IMAPA](https://nixtla.github.io/statsforecast/src/core/models.html#imapa) | ✅ | | | |
-| [TSB](https://nixtla.github.io/statsforecast/src/core/models.html#tsb) | ✅ | | | |
-
-## How to contribute
+|Model | Point Forecast | Probabilistic Forecast | Insample fitted values | Probabilistic fitted values |
+|:------|:-------------:|:----------------------:|:---------------------:|:----------------------------:|
+|[ADIDA](https://nixtla.github.io/statsforecast/src/core/models.html#adida)|✅|||||
+|[CrostonClassic](https://nixtla.github.io/statsforecast/src/core/models.html#crostonclassic)|✅|||||
+|[CrostonOptimized](https://nixtla.github.io/statsforecast/src/core/models.html#crostonoptimized)|✅|||||
+|[CrostonSBA](https://nixtla.github.io/statsforecast/src/core/models.html#crostonsba)|✅|||||
+|[IMAPA](https://nixtla.github.io/statsforecast/src/core/models.html#imapa)|✅|||||
+|[TSB](https://nixtla.github.io/statsforecast/src/core/models.html#tsb)|✅|||||
-See
-[CONTRIBUTING.md](https://github.com/Nixtla/statsforecast/blob/main/CONTRIBUTING.md).
+## 🔨 How to contribute
+See [CONTRIBUTING.md](https://github.com/Nixtla/statsforecast/blob/main/CONTRIBUTING.md).
## Citing
-``` bibtex
+```bibtex
@misc{garza2022statsforecast,
author={Federico Garza, Max Mergenthaler Canseco, Cristian Challú, Kin G. Olivares},
title = {{StatsForecast}: Lightning fast forecasting with statistical and econometric models},
@@ -242,3 +199,64 @@ See
url={https://github.com/Nixtla/statsforecast}
}
```
+
+## Contributors ✨
+
+Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
+
+
+
+
+
+
+
+
+
+
+
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
diff --git a/action_files/final-formatting.bash b/action_files/final-formatting.bash
new file mode 100755
index 000000000..451850326
--- /dev/null
+++ b/action_files/final-formatting.bash
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+for file in $(find _docs -type f -name "*mdx"); do
+ if [[ "$OSTYPE" == "darwin"* ]]; then
+ sed -i '' -e 's/style="float:right; font-size:smaller"/style={{ float: "right", fontSize: "smaller" }}/g' $file
+ sed -i '' -e 's/
/
/g' $file
+ else
+ sed -i -e 's/style="float:right; font-size:smaller"/style={{ float: "right", fontSize: "smaller" }}/g' $file
+ sed -i -e 's/
/
/g' $file
+ fi
+done
\ No newline at end of file
diff --git a/nbs/_extensions/mintlify/_extension.yml b/nbs/_extensions/mintlify/_extension.yml
new file mode 100644
index 000000000..663084de9
--- /dev/null
+++ b/nbs/_extensions/mintlify/_extension.yml
@@ -0,0 +1,30 @@
+title: Mintlify
+author: Mintlify, Inc
+organization: Mintlify
+contributes:
+ project:
+ project:
+ type: default
+ detect:
+ - ["mint.json"]
+ render:
+ - "**/*.md"
+ - "**/*.qmd"
+ - "**/*.ipynb"
+ format: mintlify-md
+ formats:
+ md:
+ # Although we use a custom writer, we still need the variants here the lua filters to render correctly.
+ # Ideally, we would forward the variants to the custom writer.
+ variant: gfm+pipe_tables+tex_math_dollars+raw_html+all_symbols_escapable+backtick_code_blocks+space_in_atx_header+intraword_underscores+lists_without_preceding_blankline+shortcut_reference_links
+ writer: mintlify_writer.lua
+ output-ext: mdx
+ inline-includes: true
+ preserve-yaml: true
+ wrap: none
+ fig-format: retina
+ fig-width: 8
+ fig-height: 5
+ html-math-method: webtex
+ filters:
+ - mintlify.lua
diff --git a/nbs/_extensions/mintlify/mintlify.lua b/nbs/_extensions/mintlify/mintlify.lua
new file mode 100644
index 000000000..a1e464013
--- /dev/null
+++ b/nbs/_extensions/mintlify/mintlify.lua
@@ -0,0 +1,71 @@
+-- mintlify.lua
+
+local kQuartoRawHtml = "quartoRawHtml"
+local rawHtmlVars = pandoc.List()
+
+function Pandoc(doc)
+ -- insert exports at the top if we have them
+ if #rawHtmlVars > 0 then
+ local exports = ("export const %s =\n[%s];"):format(kQuartoRawHtml,
+ table.concat(
+ rawHtmlVars:map(function(var) return '`'.. var .. '`' end),
+ ","
+ )
+ )
+ doc.blocks:insert(1, pandoc.RawBlock("markdown", exports .. "\n"))
+ end
+
+ return doc
+end
+
+
+-- strip image attributes (which may result from
+-- fig-format: retina) as they will result in an
+-- img tag which won't hit the asset pipeline
+function Image(el)
+ el.attr = pandoc.Attr()
+ return el
+end
+
+-- header attributes only support id
+function Header(el)
+ el.attr = pandoc.Attr(el.identifier)
+ return el
+end
+
+Block = function(node)
+ if node.text ~= nil and string.find(node.text, "")
+ :format(kQuartoRawHtml, #rawHtmlVars-1) .. "\n"
+ return pandoc.RawBlock("html", html)
+ end
+end
diff --git a/nbs/_extensions/mintlify/mintlify_renderers.lua b/nbs/_extensions/mintlify/mintlify_renderers.lua
new file mode 100644
index 000000000..2597fbbf1
--- /dev/null
+++ b/nbs/_extensions/mintlify/mintlify_renderers.lua
@@ -0,0 +1,3 @@
+local codeBlock = require('mintlify_utils').codeBlock
+
+return {} -- return an empty table as a hack to pretend we're a shortcode handler for now
diff --git a/nbs/_extensions/mintlify/mintlify_utils.lua b/nbs/_extensions/mintlify/mintlify_utils.lua
new file mode 100644
index 000000000..42e8776c7
--- /dev/null
+++ b/nbs/_extensions/mintlify/mintlify_utils.lua
@@ -0,0 +1,47 @@
+-- local scriptCount = 0
+-- local printItem = 5
+
+function codeBlock(el, filename)
+ local lang = el.attr.classes[1]
+ -- scriptCount = scriptCount + 1
+ -- if printItem == scriptCount then
+ -- quarto.utils.dump(el)
+ -- end
+ -- quarto.log.output('---Code block---')
+ -- quarto.utils.dump(el.output)
+ -- quarto.utils.dump({})
+ -- quarto.log.output('------')
+ local title = filename or el.attr.attributes["filename"] or el.attr.attributes["title"]
+ local showLineNumbers = el.attr.classes:includes('number-lines')
+ if lang or title or showLineNumbers then
+ if not lang then
+ lang = 'text'
+ end
+ local code = "\n```" .. lang
+ if showLineNumbers then
+ code = code .. " showLineNumbers"
+ end
+ if title then
+ code = code .. " title=\"" .. title .. "\""
+ end
+ code = code .. "\n" .. el.text .. "\n```\n"
+
+ -- quarto.log.output('------')
+ -- quarto.log.output(code)
+ -- quarto.log.output('------')
+ -- docusaures code block attributes don't conform to any syntax
+ -- that pandoc natively understands, so return the CodeBlock as
+ -- "raw" markdown (so it bypasses pandoc processing entirely)
+ return pandoc.RawBlock("markdown", code)
+
+ elseif #el.attr.classes == 0 then
+ el.attr.classes:insert('text')
+ return el
+ end
+
+ return nil
+end
+
+return {
+ codeBlock = codeBlock
+}
\ No newline at end of file
diff --git a/nbs/_extensions/mintlify/mintlify_writer.lua b/nbs/_extensions/mintlify/mintlify_writer.lua
new file mode 100644
index 000000000..9fa2d7110
--- /dev/null
+++ b/nbs/_extensions/mintlify/mintlify_writer.lua
@@ -0,0 +1,133 @@
+local codeBlock = require('mintlify_utils').codeBlock
+
+local reactPreamble = pandoc.List()
+
+function capitalizeFirstLetter(str)
+ return (str:gsub("^%l", string.upper))
+end
+
+function castToMintlifyCallout(str)
+ if str == "caution" or str == "danger" then
+ return "Warning"
+ else
+ return capitalizeFirstLetter(str)
+ end
+end
+
+local function addPreamble(preamble)
+ if not reactPreamble:includes(preamble) then
+ reactPreamble:insert(preamble)
+ end
+end
+
+local function jsx(content)
+ return pandoc.RawBlock("markdown", content)
+end
+
+local function tabset(node, filter)
+ -- note groupId
+ local groupId = ""
+ local group = node.attr.attributes["group"]
+ if group then
+ groupId = ([[ groupId="%s"]]):format(group)
+ end
+
+ -- create tabs
+ local tabs = pandoc.Div({})
+ tabs.content:insert(jsx(""))
+
+ -- iterate through content
+ for i = 1, #node.tabs do
+ local content = node.tabs[i].content
+ local title = node.tabs[i].title
+
+ tabs.content:insert(jsx(([[]]):format(pandoc.utils.stringify(title))))
+ local result = quarto._quarto.ast.walk(content, filter)
+ if type(result) == "table" then
+ tabs.content:extend(result)
+ else
+ tabs.content:insert(result)
+ end
+ tabs.content:insert(jsx(""))
+ end
+
+ -- end tab and tabset
+ tabs.content:insert(jsx(""))
+
+ -- ensure we have required deps
+ addPreamble("import Tabs from '@theme/Tabs';")
+ addPreamble("import TabItem from '@theme/TabItem';")
+
+ return tabs
+end
+
+function Writer(doc, opts)
+ local filter
+ filter = {
+ CodeBlock = codeBlock,
+
+ DecoratedCodeBlock = function(node)
+ local el = node.code_block
+ return codeBlock(el, node.filename)
+ end,
+
+ Tabset = function(node)
+ return tabset(node, filter)
+ end,
+
+ RawBlock = function (rawBlock)
+ -- We just "pass-through" raw blocks of type "confluence"
+ if(rawBlock.format == 'plotly') then
+ quarto.utils.dump("Plotly in filter")
+ return pandoc.RawBlock('html', rawBlock.text)
+ end
+
+ -- Raw blocks inclding arbirtary HTML like JavaScript are not supported in CSF
+ return ""
+ end,
+
+ Callout = function(node)
+ local admonition = pandoc.Div({})
+ local mintlifyCallout = castToMintlifyCallout(node.type)
+ admonition.content:insert(jsx("<" .. mintlifyCallout .. ">"))
+ if node.title then
+ admonition.content:insert(pandoc.Header(3, node.title))
+ end
+ local content = node.content
+ if type(content) == "table" then
+ admonition.content:extend(content)
+ else
+ admonition.content:insert(content)
+ end
+ admonition.content:insert(jsx("" .. mintlifyCallout .. ">"))
+ return admonition
+ end
+ }
+
+ doc = quarto._quarto.ast.walk(doc, filter)
+
+ -- insert react preamble if we have it
+ if #reactPreamble > 0 then
+ local preamble = table.concat(reactPreamble, "\n")
+ doc.blocks:insert(1, pandoc.RawBlock("markdown", preamble .. "\n"))
+ end
+
+ local extensions = {
+ yaml_metadata_block = true,
+ pipe_tables = true,
+ footnotes = true,
+ tex_math_dollars = true,
+ raw_html = true,
+ all_symbols_escapable = true,
+ backtick_code_blocks = true,
+ space_in_atx_header = true,
+ intraword_underscores = true,
+ lists_without_preceding_blankline = true,
+ shortcut_reference_links = true,
+ }
+
+ return pandoc.write(doc, {
+ format = 'markdown_strict',
+ extensions = extensions
+ }, opts)
+end
diff --git a/nbs/_quarto.yml b/nbs/_quarto.yml
index 60097036f..37fb3652a 100644
--- a/nbs/_quarto.yml
+++ b/nbs/_quarto.yml
@@ -1,59 +1,8 @@
project:
- type: website
+ type: mintlify
format:
- html:
- theme: cosmo
- fontsize: 1em
- linestretch: 1.7
- css: styles.css
- toc: true
+ mintlify-md:
+ code-fold: true
-website:
- twitter-card:
- image: "https://farm6.staticflickr.com/5510/14338202952_93595258ff_z.jpg"
- site: "@Nixtlainc"
- open-graph:
- image: "https://github.com/Nixtla/styles/blob/2abf51612584169874c90cd7c4d347e3917eaf73/images/Banner%20Github.png"
- google-analytics: "G-NXJNCVR18L"
- repo-actions: [issue]
- favicon: favicon_png.png
- navbar:
- background: primary
- search: true
- collapse-below: lg
- left:
- - text: "Get Started"
- href: docs/getting-started/getting_started_short.html
- - text: "NixtlaVerse"
- menu:
- - text: "StatsForecast ⚡️"
- href: https://github.com/nixtla/statsforecast
- - text: "MLForecast 🤖"
- href: https://github.com/nixtla/mlforecast
- - text: "NeuralForecast 🧠"
- href: https://github.com/nixtla/neuralforecast
- - text: "HierarchicalForecast 👑"
- href: https://github.com/nixtla/hierarchicalforecast
-
- - text: "Help"
- menu:
- - text: "Report an Issue"
- icon: bug
- href: https://github.com/nixtla/statsforecast/issues/new/choose
- - text: "Join our Slack"
- icon: chat-right-text
- href: https://join.slack.com/t/nixtlaworkspace/shared_invite/zt-135dssye9-fWTzMpv2WBthq8NK0Yvu6A
- right:
- - icon: github
- href: "https://github.com/nixtla/statsforecast"
- - icon: twitter
- href: https://twitter.com/nixtlainc
- aria-label: Nixtla Twitter
-
- sidebar:
- style: floating
- body-footer: |
- Give us a ⭐ on [Github](https://github.com/nixtla/statsforecast)
-
-metadata-files: [nbdev.yml, sidebar.yml]
+metadata-files: [nbdev.yml]
diff --git a/nbs/custom.yml b/nbs/custom.yml
deleted file mode 100644
index 1b2c854c2..000000000
--- a/nbs/custom.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-website:
- logo: https://github.com/Nixtla/styles/blob/b9ea432cfa2dae20fc84d8634cae6db902f9ca3f/images/Nixtla_Blanco.png
- reader-mode: false
- navbar:
- collapse-below: lg
- left:
- - text: "Get Started"
- href: examples/Getting_Started_with_Auto_Arima_and_ETS.ipynb
- - text: "Experiments"
- href: https://github.com/Nixtla/statsforecast/tree/main/experiments
- - text: "Help"
- menu:
- - text: "Report an Issue"
- icon: bug
- href: https://github.com/nixtla/statsforecast/issues
- - text: "Slack Nixtla"
- icon: chat-right-text
- href: https://join.slack.com/t/nixtlaworkspace/shared_invite/zt-135dssye9-fWTzMpv2WBthq8NK0Yvu6A
- right:
- - icon: twitter
- href: https://twitter.com/nixtlainc
- aria-label: Nixtla Twitter
diff --git a/nbs/favicon.png b/nbs/favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..9fb85089d6ed81fee60833b5637849f4345291ce
GIT binary patch
literal 208747
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