Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions docs/api/gift-eval/gift-eval.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
# `timecopilot.gift_eval`
# `timecopilot_gift_eval`

::: timecopilot.gift_eval.eval
GIFT-Eval integration lives in the standalone [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) package on PyPI. Install it with TimeCopilot via:

```bash
pip install "timecopilot[gift-eval]"
```

## Migration from `timecopilot.gift_eval`

The in-repo module `timecopilot.gift_eval` was removed in favor of the standalone package. Update imports as follows:

| Before | After |
|--------|-------|
| `from timecopilot.gift_eval.eval import GIFTEval` | `from timecopilot_gift_eval import GIFTEval` |
| `from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor` | `from timecopilot_gift_eval import GluonTSPredictor` |
| `from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS` | `from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS` |

No compatibility shim is provided — install `timecopilot-gift-eval` (or `timecopilot[gift-eval]`) and switch to the `timecopilot_gift_eval` import path.

::: timecopilot_gift_eval.eval
options:
members:
- GIFTEval

::: timecopilot.gift_eval.gluonts_predictor
::: timecopilot_gift_eval.gluonts_predictor
options:
members:
- GluonTSPredictor

::: timecopilot_gift_eval.protocol
options:
members:
- GluonTSPredictor
- ForecasterProtocol
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.31](v0.0.31.md)
- [v0.0.30](v0.0.30.md)
- [v0.0.29](v0.0.29.md)
- [v0.0.28](v0.0.28.md)
Expand Down
22 changes: 22 additions & 0 deletions docs/changelogs/v0.0.31.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
### Breaking Changes

* **GIFT-Eval moved to standalone package**: The in-repo `timecopilot.gift_eval` module was removed. GIFT-Eval integration now lives in the [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) PyPI package (`timecopilot_gift_eval` import path). Install via `pip install "timecopilot[gift-eval]"` or `pip install timecopilot-gift-eval>=0.3.0`.

**Migration:**

```text
from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
```

```python
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS
```

See the [GIFT-Eval API docs](../api/gift-eval/gift-eval.md) for details.

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.30...v0.0.31
15 changes: 7 additions & 8 deletions docs/examples/gift-eval.ipynb
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@
},
"outputs": [],
"source": [
"%pip install \"timecopilot>=0.0.22\""
"%pip install \"timecopilot[gift-eval]>=0.0.22\""
]
},
{
Expand All@@ -64,7 +64,7 @@
"source": [
"## Dataset Setup\n",
"\n",
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) for dataset handling:"
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) for dataset handling:"
]
},
{
Expand All@@ -76,7 +76,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot_gift_eval import GIFTEval\n",
"\n",
"# TimeCopilot's built-in GIFT-Eval dataset downloader\n",
"# Handles the complete benchmark dataset with all 97 configurations\n",
Expand DownExpand Up@@ -156,7 +156,7 @@
"id": "M2YcjoDF5NH7"
},
"source": [
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) integration."
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) integration."
]
},
{
Expand All@@ -168,8 +168,7 @@
"outputs": [],
"source": [
"import pandas as pd\n",
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor\n",
"from timecopilot_gift_eval import GIFTEval, GluonTSPredictor\n",
"\n",
"\n",
"def evaluate_forecaster(\n",
Expand DownExpand Up@@ -710,7 +709,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS"
"from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS"
]
},
{
Expand DownExpand Up@@ -789,7 +788,7 @@
"id": "g0-oVisu6XX3"
},
"source": [
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion experiments/gift-eval/pyproject.toml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,13 +2,14 @@
dependencies = [
"modal>=1.0.5",
"s3fs>=2023.12.1",
"timecopilot-gift-eval>=0.3.0",
"timecopilot>=0.0.21",
"transformers<4.54",
"transformers==4.40.1 ; python_full_version < '3.12'",
"typer>=0.16.0",
]
description = "TimeCopilot experiments for GIFT-Eval"
name = "timecopilot-gift-eval"
name = "timecopilot-gift-eval-experiments"
readme = "README.md"
requires-python = ">=3.11"
version = "0.2.0"
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/download_results.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,7 @@
from pathlib import Path

import pandas as pd

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_modal.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,8 +59,7 @@ def main():
import logging

import fsspec

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_timecopilot.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,8 @@
from typing import Annotated

import typer
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor

from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.models.ensembles.median import MedianEnsemble
from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.timesfm import TimesFM
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions docs/api/gift-eval/gift-eval.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
# `timecopilot.gift_eval`
# `timecopilot_gift_eval`

::: timecopilot.gift_eval.eval
GIFT-Eval integration lives in the standalone [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) package on PyPI. Install it with TimeCopilot via:

```bash
pip install "timecopilot[gift-eval]"
```

## Migration from `timecopilot.gift_eval`

The in-repo module `timecopilot.gift_eval` was removed in favor of the standalone package. Update imports as follows:

| Before | After |
|--------|-------|
| `from timecopilot.gift_eval.eval import GIFTEval` | `from timecopilot_gift_eval import GIFTEval` |
| `from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor` | `from timecopilot_gift_eval import GluonTSPredictor` |
| `from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS` | `from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS` |

No compatibility shim is provided — install `timecopilot-gift-eval` (or `timecopilot[gift-eval]`) and switch to the `timecopilot_gift_eval` import path.

::: timecopilot_gift_eval.eval
options:
members:
- GIFTEval

::: timecopilot.gift_eval.gluonts_predictor
::: timecopilot_gift_eval.gluonts_predictor
options:
members:
- GluonTSPredictor

::: timecopilot_gift_eval.protocol
options:
members:
- GluonTSPredictor
- ForecasterProtocol
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.31](v0.0.31.md)
- [v0.0.30](v0.0.30.md)
- [v0.0.29](v0.0.29.md)
- [v0.0.28](v0.0.28.md)
Expand Down
22 changes: 22 additions & 0 deletions docs/changelogs/v0.0.31.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
### Breaking Changes

* **GIFT-Eval moved to standalone package**: The in-repo `timecopilot.gift_eval` module was removed. GIFT-Eval integration now lives in the [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) PyPI package (`timecopilot_gift_eval` import path). Install via `pip install "timecopilot[gift-eval]"` or `pip install timecopilot-gift-eval>=0.3.0`.

**Migration:**

```text
from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
```

```python
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS
```

See the [GIFT-Eval API docs](../api/gift-eval/gift-eval.md) for details.

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.30...v0.0.31
15 changes: 7 additions & 8 deletions docs/examples/gift-eval.ipynb
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@
},
"outputs": [],
"source": [
"%pip install \"timecopilot>=0.0.22\""
"%pip install \"timecopilot[gift-eval]>=0.0.22\""
]
},
{
Expand All@@ -64,7 +64,7 @@
"source": [
"## Dataset Setup\n",
"\n",
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) for dataset handling:"
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) for dataset handling:"
]
},
{
Expand All@@ -76,7 +76,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot_gift_eval import GIFTEval\n",
"\n",
"# TimeCopilot's built-in GIFT-Eval dataset downloader\n",
"# Handles the complete benchmark dataset with all 97 configurations\n",
Expand DownExpand Up@@ -156,7 +156,7 @@
"id": "M2YcjoDF5NH7"
},
"source": [
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) integration."
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) integration."
]
},
{
Expand All@@ -168,8 +168,7 @@
"outputs": [],
"source": [
"import pandas as pd\n",
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor\n",
"from timecopilot_gift_eval import GIFTEval, GluonTSPredictor\n",
"\n",
"\n",
"def evaluate_forecaster(\n",
Expand DownExpand Up@@ -710,7 +709,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS"
"from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS"
]
},
{
Expand DownExpand Up@@ -789,7 +788,7 @@
"id": "g0-oVisu6XX3"
},
"source": [
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion experiments/gift-eval/pyproject.toml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,13 +2,14 @@
dependencies = [
"modal>=1.0.5",
"s3fs>=2023.12.1",
"timecopilot-gift-eval>=0.3.0",
"timecopilot>=0.0.21",
"transformers<4.54",
"transformers==4.40.1 ; python_full_version < '3.12'",
"typer>=0.16.0",
]
description = "TimeCopilot experiments for GIFT-Eval"
name = "timecopilot-gift-eval"
name = "timecopilot-gift-eval-experiments"
readme = "README.md"
requires-python = ">=3.11"
version = "0.2.0"
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/download_results.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,7 @@
from pathlib import Path

import pandas as pd

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_modal.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,8 +59,7 @@ def main():
import logging

import fsspec

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_timecopilot.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,8 @@
from typing import Annotated

import typer
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor

from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.models.ensembles.median import MedianEnsemble
from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.timesfm import TimesFM
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions docs/api/gift-eval/gift-eval.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
# `timecopilot.gift_eval`
# `timecopilot_gift_eval`

::: timecopilot.gift_eval.eval
GIFT-Eval integration lives in the standalone [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) package on PyPI. Install it with TimeCopilot via:

```bash
pip install "timecopilot[gift-eval]"
```

## Migration from `timecopilot.gift_eval`

The in-repo module `timecopilot.gift_eval` was removed in favor of the standalone package. Update imports as follows:

| Before | After |
|--------|-------|
| `from timecopilot.gift_eval.eval import GIFTEval` | `from timecopilot_gift_eval import GIFTEval` |
| `from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor` | `from timecopilot_gift_eval import GluonTSPredictor` |
| `from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS` | `from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS` |

No compatibility shim is provided — install `timecopilot-gift-eval` (or `timecopilot[gift-eval]`) and switch to the `timecopilot_gift_eval` import path.

::: timecopilot_gift_eval.eval
options:
members:
- GIFTEval

::: timecopilot.gift_eval.gluonts_predictor
::: timecopilot_gift_eval.gluonts_predictor
options:
members:
- GluonTSPredictor

::: timecopilot_gift_eval.protocol
options:
members:
- GluonTSPredictor
- ForecasterProtocol
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.31](v0.0.31.md)
- [v0.0.30](v0.0.30.md)
- [v0.0.29](v0.0.29.md)
- [v0.0.28](v0.0.28.md)
Expand Down
22 changes: 22 additions & 0 deletions docs/changelogs/v0.0.31.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
### Breaking Changes

* **GIFT-Eval moved to standalone package**: The in-repo `timecopilot.gift_eval` module was removed. GIFT-Eval integration now lives in the [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) PyPI package (`timecopilot_gift_eval` import path). Install via `pip install "timecopilot[gift-eval]"` or `pip install timecopilot-gift-eval>=0.3.0`.

**Migration:**

```text
from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
```

```python
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS
```

See the [GIFT-Eval API docs](../api/gift-eval/gift-eval.md) for details.

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.30...v0.0.31
15 changes: 7 additions & 8 deletions docs/examples/gift-eval.ipynb
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@
},
"outputs": [],
"source": [
"%pip install \"timecopilot>=0.0.22\""
"%pip install \"timecopilot[gift-eval]>=0.0.22\""
]
},
{
Expand All@@ -64,7 +64,7 @@
"source": [
"## Dataset Setup\n",
"\n",
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) for dataset handling:"
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) for dataset handling:"
]
},
{
Expand All@@ -76,7 +76,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot_gift_eval import GIFTEval\n",
"\n",
"# TimeCopilot's built-in GIFT-Eval dataset downloader\n",
"# Handles the complete benchmark dataset with all 97 configurations\n",
Expand DownExpand Up@@ -156,7 +156,7 @@
"id": "M2YcjoDF5NH7"
},
"source": [
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) integration."
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) integration."
]
},
{
Expand All@@ -168,8 +168,7 @@
"outputs": [],
"source": [
"import pandas as pd\n",
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor\n",
"from timecopilot_gift_eval import GIFTEval, GluonTSPredictor\n",
"\n",
"\n",
"def evaluate_forecaster(\n",
Expand DownExpand Up@@ -710,7 +709,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS"
"from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS"
]
},
{
Expand DownExpand Up@@ -789,7 +788,7 @@
"id": "g0-oVisu6XX3"
},
"source": [
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion experiments/gift-eval/pyproject.toml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,13 +2,14 @@
dependencies = [
"modal>=1.0.5",
"s3fs>=2023.12.1",
"timecopilot-gift-eval>=0.3.0",
"timecopilot>=0.0.21",
"transformers<4.54",
"transformers==4.40.1 ; python_full_version < '3.12'",
"typer>=0.16.0",
]
description = "TimeCopilot experiments for GIFT-Eval"
name = "timecopilot-gift-eval"
name = "timecopilot-gift-eval-experiments"
readme = "README.md"
requires-python = ">=3.11"
version = "0.2.0"
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/download_results.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,7 @@
from pathlib import Path

import pandas as pd

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_modal.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,8 +59,7 @@ def main():
import logging

import fsspec

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_timecopilot.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,8 @@
from typing import Annotated

import typer
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor

from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.models.ensembles.median import MedianEnsemble
from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.timesfm import TimesFM
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions docs/api/gift-eval/gift-eval.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
# `timecopilot.gift_eval`
# `timecopilot_gift_eval`

::: timecopilot.gift_eval.eval
GIFT-Eval integration lives in the standalone [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) package on PyPI. Install it with TimeCopilot via:

```bash
pip install "timecopilot[gift-eval]"
```

## Migration from `timecopilot.gift_eval`

The in-repo module `timecopilot.gift_eval` was removed in favor of the standalone package. Update imports as follows:

| Before | After |
|--------|-------|
| `from timecopilot.gift_eval.eval import GIFTEval` | `from timecopilot_gift_eval import GIFTEval` |
| `from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor` | `from timecopilot_gift_eval import GluonTSPredictor` |
| `from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS` | `from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS` |

No compatibility shim is provided — install `timecopilot-gift-eval` (or `timecopilot[gift-eval]`) and switch to the `timecopilot_gift_eval` import path.

::: timecopilot_gift_eval.eval
options:
members:
- GIFTEval

::: timecopilot.gift_eval.gluonts_predictor
::: timecopilot_gift_eval.gluonts_predictor
options:
members:
- GluonTSPredictor

::: timecopilot_gift_eval.protocol
options:
members:
- GluonTSPredictor
- ForecasterProtocol
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.31](v0.0.31.md)
- [v0.0.30](v0.0.30.md)
- [v0.0.29](v0.0.29.md)
- [v0.0.28](v0.0.28.md)
Expand Down
22 changes: 22 additions & 0 deletions docs/changelogs/v0.0.31.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
### Breaking Changes

* **GIFT-Eval moved to standalone package**: The in-repo `timecopilot.gift_eval` module was removed. GIFT-Eval integration now lives in the [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) PyPI package (`timecopilot_gift_eval` import path). Install via `pip install "timecopilot[gift-eval]"` or `pip install timecopilot-gift-eval>=0.3.0`.

**Migration:**

```text
from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
```

```python
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS
```

See the [GIFT-Eval API docs](../api/gift-eval/gift-eval.md) for details.

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.30...v0.0.31
15 changes: 7 additions & 8 deletions docs/examples/gift-eval.ipynb
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@
},
"outputs": [],
"source": [
"%pip install \"timecopilot>=0.0.22\""
"%pip install \"timecopilot[gift-eval]>=0.0.22\""
]
},
{
Expand All@@ -64,7 +64,7 @@
"source": [
"## Dataset Setup\n",
"\n",
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) for dataset handling:"
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) for dataset handling:"
]
},
{
Expand All@@ -76,7 +76,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot_gift_eval import GIFTEval\n",
"\n",
"# TimeCopilot's built-in GIFT-Eval dataset downloader\n",
"# Handles the complete benchmark dataset with all 97 configurations\n",
Expand DownExpand Up@@ -156,7 +156,7 @@
"id": "M2YcjoDF5NH7"
},
"source": [
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) integration."
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) integration."
]
},
{
Expand All@@ -168,8 +168,7 @@
"outputs": [],
"source": [
"import pandas as pd\n",
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor\n",
"from timecopilot_gift_eval import GIFTEval, GluonTSPredictor\n",
"\n",
"\n",
"def evaluate_forecaster(\n",
Expand DownExpand Up@@ -710,7 +709,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS"
"from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS"
]
},
{
Expand DownExpand Up@@ -789,7 +788,7 @@
"id": "g0-oVisu6XX3"
},
"source": [
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion experiments/gift-eval/pyproject.toml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,13 +2,14 @@
dependencies = [
"modal>=1.0.5",
"s3fs>=2023.12.1",
"timecopilot-gift-eval>=0.3.0",
"timecopilot>=0.0.21",
"transformers<4.54",
"transformers==4.40.1 ; python_full_version < '3.12'",
"typer>=0.16.0",
]
description = "TimeCopilot experiments for GIFT-Eval"
name = "timecopilot-gift-eval"
name = "timecopilot-gift-eval-experiments"
readme = "README.md"
requires-python = ">=3.11"
version = "0.2.0"
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/download_results.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,7 @@
from pathlib import Path

import pandas as pd

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_modal.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,8 +59,7 @@ def main():
import logging

import fsspec

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_timecopilot.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,8 @@
from typing import Annotated

import typer
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor

from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.models.ensembles.median import MedianEnsemble
from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.timesfm import TimesFM
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions docs/api/gift-eval/gift-eval.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
# `timecopilot.gift_eval`
# `timecopilot_gift_eval`

::: timecopilot.gift_eval.eval
GIFT-Eval integration lives in the standalone [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) package on PyPI. Install it with TimeCopilot via:

```bash
pip install "timecopilot[gift-eval]"
```

## Migration from `timecopilot.gift_eval`

The in-repo module `timecopilot.gift_eval` was removed in favor of the standalone package. Update imports as follows:

| Before | After |
|--------|-------|
| `from timecopilot.gift_eval.eval import GIFTEval` | `from timecopilot_gift_eval import GIFTEval` |
| `from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor` | `from timecopilot_gift_eval import GluonTSPredictor` |
| `from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS` | `from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS` |

No compatibility shim is provided — install `timecopilot-gift-eval` (or `timecopilot[gift-eval]`) and switch to the `timecopilot_gift_eval` import path.

::: timecopilot_gift_eval.eval
options:
members:
- GIFTEval

::: timecopilot.gift_eval.gluonts_predictor
::: timecopilot_gift_eval.gluonts_predictor
options:
members:
- GluonTSPredictor

::: timecopilot_gift_eval.protocol
options:
members:
- GluonTSPredictor
- ForecasterProtocol
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.31](v0.0.31.md)
- [v0.0.30](v0.0.30.md)
- [v0.0.29](v0.0.29.md)
- [v0.0.28](v0.0.28.md)
Expand Down
22 changes: 22 additions & 0 deletions docs/changelogs/v0.0.31.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
### Breaking Changes

* **GIFT-Eval moved to standalone package**: The in-repo `timecopilot.gift_eval` module was removed. GIFT-Eval integration now lives in the [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) PyPI package (`timecopilot_gift_eval` import path). Install via `pip install "timecopilot[gift-eval]"` or `pip install timecopilot-gift-eval>=0.3.0`.

**Migration:**

```text
from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
```

```python
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS
```

See the [GIFT-Eval API docs](../api/gift-eval/gift-eval.md) for details.

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.30...v0.0.31
15 changes: 7 additions & 8 deletions docs/examples/gift-eval.ipynb
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@
},
"outputs": [],
"source": [
"%pip install \"timecopilot>=0.0.22\""
"%pip install \"timecopilot[gift-eval]>=0.0.22\""
]
},
{
Expand All@@ -64,7 +64,7 @@
"source": [
"## Dataset Setup\n",
"\n",
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) for dataset handling:"
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) for dataset handling:"
]
},
{
Expand All@@ -76,7 +76,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot_gift_eval import GIFTEval\n",
"\n",
"# TimeCopilot's built-in GIFT-Eval dataset downloader\n",
"# Handles the complete benchmark dataset with all 97 configurations\n",
Expand DownExpand Up@@ -156,7 +156,7 @@
"id": "M2YcjoDF5NH7"
},
"source": [
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) integration."
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) integration."
]
},
{
Expand All@@ -168,8 +168,7 @@
"outputs": [],
"source": [
"import pandas as pd\n",
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor\n",
"from timecopilot_gift_eval import GIFTEval, GluonTSPredictor\n",
"\n",
"\n",
"def evaluate_forecaster(\n",
Expand DownExpand Up@@ -710,7 +709,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS"
"from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS"
]
},
{
Expand DownExpand Up@@ -789,7 +788,7 @@
"id": "g0-oVisu6XX3"
},
"source": [
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion experiments/gift-eval/pyproject.toml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,13 +2,14 @@
dependencies = [
"modal>=1.0.5",
"s3fs>=2023.12.1",
"timecopilot-gift-eval>=0.3.0",
"timecopilot>=0.0.21",
"transformers<4.54",
"transformers==4.40.1 ; python_full_version < '3.12'",
"typer>=0.16.0",
]
description = "TimeCopilot experiments for GIFT-Eval"
name = "timecopilot-gift-eval"
name = "timecopilot-gift-eval-experiments"
readme = "README.md"
requires-python = ">=3.11"
version = "0.2.0"
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/download_results.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,7 @@
from pathlib import Path

import pandas as pd

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_modal.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,8 +59,7 @@ def main():
import logging

import fsspec

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_timecopilot.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,8 @@
from typing import Annotated

import typer
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor

from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.models.ensembles.median import MedianEnsemble
from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.timesfm import TimesFM
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions docs/api/gift-eval/gift-eval.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
# `timecopilot.gift_eval`
# `timecopilot_gift_eval`

::: timecopilot.gift_eval.eval
GIFT-Eval integration lives in the standalone [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) package on PyPI. Install it with TimeCopilot via:

```bash
pip install "timecopilot[gift-eval]"
```

## Migration from `timecopilot.gift_eval`

The in-repo module `timecopilot.gift_eval` was removed in favor of the standalone package. Update imports as follows:

| Before | After |
|--------|-------|
| `from timecopilot.gift_eval.eval import GIFTEval` | `from timecopilot_gift_eval import GIFTEval` |
| `from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor` | `from timecopilot_gift_eval import GluonTSPredictor` |
| `from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS` | `from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS` |

No compatibility shim is provided — install `timecopilot-gift-eval` (or `timecopilot[gift-eval]`) and switch to the `timecopilot_gift_eval` import path.

::: timecopilot_gift_eval.eval
options:
members:
- GIFTEval

::: timecopilot.gift_eval.gluonts_predictor
::: timecopilot_gift_eval.gluonts_predictor
options:
members:
- GluonTSPredictor

::: timecopilot_gift_eval.protocol
options:
members:
- GluonTSPredictor
- ForecasterProtocol
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.31](v0.0.31.md)
- [v0.0.30](v0.0.30.md)
- [v0.0.29](v0.0.29.md)
- [v0.0.28](v0.0.28.md)
Expand Down
22 changes: 22 additions & 0 deletions docs/changelogs/v0.0.31.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
### Breaking Changes

* **GIFT-Eval moved to standalone package**: The in-repo `timecopilot.gift_eval` module was removed. GIFT-Eval integration now lives in the [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) PyPI package (`timecopilot_gift_eval` import path). Install via `pip install "timecopilot[gift-eval]"` or `pip install timecopilot-gift-eval>=0.3.0`.

**Migration:**

```text
from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
```

```python
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS
```

See the [GIFT-Eval API docs](../api/gift-eval/gift-eval.md) for details.

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.30...v0.0.31
15 changes: 7 additions & 8 deletions docs/examples/gift-eval.ipynb
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@
},
"outputs": [],
"source": [
"%pip install \"timecopilot>=0.0.22\""
"%pip install \"timecopilot[gift-eval]>=0.0.22\""
]
},
{
Expand All@@ -64,7 +64,7 @@
"source": [
"## Dataset Setup\n",
"\n",
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) for dataset handling:"
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) for dataset handling:"
]
},
{
Expand All@@ -76,7 +76,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot_gift_eval import GIFTEval\n",
"\n",
"# TimeCopilot's built-in GIFT-Eval dataset downloader\n",
"# Handles the complete benchmark dataset with all 97 configurations\n",
Expand DownExpand Up@@ -156,7 +156,7 @@
"id": "M2YcjoDF5NH7"
},
"source": [
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) integration."
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) integration."
]
},
{
Expand All@@ -168,8 +168,7 @@
"outputs": [],
"source": [
"import pandas as pd\n",
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor\n",
"from timecopilot_gift_eval import GIFTEval, GluonTSPredictor\n",
"\n",
"\n",
"def evaluate_forecaster(\n",
Expand DownExpand Up@@ -710,7 +709,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS"
"from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS"
]
},
{
Expand DownExpand Up@@ -789,7 +788,7 @@
"id": "g0-oVisu6XX3"
},
"source": [
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion experiments/gift-eval/pyproject.toml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,13 +2,14 @@
dependencies = [
"modal>=1.0.5",
"s3fs>=2023.12.1",
"timecopilot-gift-eval>=0.3.0",
"timecopilot>=0.0.21",
"transformers<4.54",
"transformers==4.40.1 ; python_full_version < '3.12'",
"typer>=0.16.0",
]
description = "TimeCopilot experiments for GIFT-Eval"
name = "timecopilot-gift-eval"
name = "timecopilot-gift-eval-experiments"
readme = "README.md"
requires-python = ">=3.11"
version = "0.2.0"
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/download_results.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,7 @@
from pathlib import Path

import pandas as pd

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_modal.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,8 +59,7 @@ def main():
import logging

import fsspec

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_timecopilot.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,8 @@
from typing import Annotated

import typer
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor

from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.models.ensembles.median import MedianEnsemble
from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.timesfm import TimesFM
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions docs/api/gift-eval/gift-eval.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
# `timecopilot.gift_eval`
# `timecopilot_gift_eval`

::: timecopilot.gift_eval.eval
GIFT-Eval integration lives in the standalone [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) package on PyPI. Install it with TimeCopilot via:

```bash
pip install "timecopilot[gift-eval]"
```

## Migration from `timecopilot.gift_eval`

The in-repo module `timecopilot.gift_eval` was removed in favor of the standalone package. Update imports as follows:

| Before | After |
|--------|-------|
| `from timecopilot.gift_eval.eval import GIFTEval` | `from timecopilot_gift_eval import GIFTEval` |
| `from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor` | `from timecopilot_gift_eval import GluonTSPredictor` |
| `from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS` | `from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS` |

No compatibility shim is provided — install `timecopilot-gift-eval` (or `timecopilot[gift-eval]`) and switch to the `timecopilot_gift_eval` import path.

::: timecopilot_gift_eval.eval
options:
members:
- GIFTEval

::: timecopilot.gift_eval.gluonts_predictor
::: timecopilot_gift_eval.gluonts_predictor
options:
members:
- GluonTSPredictor

::: timecopilot_gift_eval.protocol
options:
members:
- GluonTSPredictor
- ForecasterProtocol
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.31](v0.0.31.md)
- [v0.0.30](v0.0.30.md)
- [v0.0.29](v0.0.29.md)
- [v0.0.28](v0.0.28.md)
Expand Down
22 changes: 22 additions & 0 deletions docs/changelogs/v0.0.31.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
### Breaking Changes

* **GIFT-Eval moved to standalone package**: The in-repo `timecopilot.gift_eval` module was removed. GIFT-Eval integration now lives in the [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) PyPI package (`timecopilot_gift_eval` import path). Install via `pip install "timecopilot[gift-eval]"` or `pip install timecopilot-gift-eval>=0.3.0`.

**Migration:**

```text
from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
```

```python
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS
```

See the [GIFT-Eval API docs](../api/gift-eval/gift-eval.md) for details.

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.30...v0.0.31
15 changes: 7 additions & 8 deletions docs/examples/gift-eval.ipynb
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@
},
"outputs": [],
"source": [
"%pip install \"timecopilot>=0.0.22\""
"%pip install \"timecopilot[gift-eval]>=0.0.22\""
]
},
{
Expand All@@ -64,7 +64,7 @@
"source": [
"## Dataset Setup\n",
"\n",
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) for dataset handling:"
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) for dataset handling:"
]
},
{
Expand All@@ -76,7 +76,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot_gift_eval import GIFTEval\n",
"\n",
"# TimeCopilot's built-in GIFT-Eval dataset downloader\n",
"# Handles the complete benchmark dataset with all 97 configurations\n",
Expand DownExpand Up@@ -156,7 +156,7 @@
"id": "M2YcjoDF5NH7"
},
"source": [
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) integration."
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) integration."
]
},
{
Expand All@@ -168,8 +168,7 @@
"outputs": [],
"source": [
"import pandas as pd\n",
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor\n",
"from timecopilot_gift_eval import GIFTEval, GluonTSPredictor\n",
"\n",
"\n",
"def evaluate_forecaster(\n",
Expand DownExpand Up@@ -710,7 +709,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS"
"from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS"
]
},
{
Expand DownExpand Up@@ -789,7 +788,7 @@
"id": "g0-oVisu6XX3"
},
"source": [
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion experiments/gift-eval/pyproject.toml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,13 +2,14 @@
dependencies = [
"modal>=1.0.5",
"s3fs>=2023.12.1",
"timecopilot-gift-eval>=0.3.0",
"timecopilot>=0.0.21",
"transformers<4.54",
"transformers==4.40.1 ; python_full_version < '3.12'",
"typer>=0.16.0",
]
description = "TimeCopilot experiments for GIFT-Eval"
name = "timecopilot-gift-eval"
name = "timecopilot-gift-eval-experiments"
readme = "README.md"
requires-python = ">=3.11"
version = "0.2.0"
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/download_results.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,7 @@
from pathlib import Path

import pandas as pd

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_modal.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,8 +59,7 @@ def main():
import logging

import fsspec

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_timecopilot.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,8 @@
from typing import Annotated

import typer
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor

from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.models.ensembles.median import MedianEnsemble
from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.timesfm import TimesFM
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 27 additions & 4 deletions docs/api/gift-eval/gift-eval.md
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
# `timecopilot.gift_eval`
# `timecopilot_gift_eval`

::: timecopilot.gift_eval.eval
GIFT-Eval integration lives in the standalone [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) package on PyPI. Install it with TimeCopilot via:

```bash
pip install "timecopilot[gift-eval]"
```

## Migration from `timecopilot.gift_eval`

The in-repo module `timecopilot.gift_eval` was removed in favor of the standalone package. Update imports as follows:

| Before | After |
|--------|-------|
| `from timecopilot.gift_eval.eval import GIFTEval` | `from timecopilot_gift_eval import GIFTEval` |
| `from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor` | `from timecopilot_gift_eval import GluonTSPredictor` |
| `from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS` | `from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS` |

No compatibility shim is provided — install `timecopilot-gift-eval` (or `timecopilot[gift-eval]`) and switch to the `timecopilot_gift_eval` import path.

::: timecopilot_gift_eval.eval
options:
members:
- GIFTEval

::: timecopilot.gift_eval.gluonts_predictor
::: timecopilot_gift_eval.gluonts_predictor
options:
members:
- GluonTSPredictor

::: timecopilot_gift_eval.protocol
options:
members:
- GluonTSPredictor
- ForecasterProtocol
1 change: 1 addition & 0 deletions docs/changelogs/index.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,7 @@

Welcome to the TimeCopilot Changelog. Here, you will find a comprehensive list of all the changes, updates, and improvements made to the TimeCopilot project. This section is designed to keep you informed about the latest features, bug fixes, and enhancements as we continue to develop and refine the TimeCopilot experience. Stay tuned for regular updates and feel free to explore the details of each release below.

- [v0.0.31](v0.0.31.md)
- [v0.0.30](v0.0.30.md)
- [v0.0.29](v0.0.29.md)
- [v0.0.28](v0.0.28.md)
Expand Down
22 changes: 22 additions & 0 deletions docs/changelogs/v0.0.31.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
### Breaking Changes

* **GIFT-Eval moved to standalone package**: The in-repo `timecopilot.gift_eval` module was removed. GIFT-Eval integration now lives in the [`timecopilot-gift-eval`](https://pypi.org/project/timecopilot-gift-eval/) PyPI package (`timecopilot_gift_eval` import path). Install via `pip install "timecopilot[gift-eval]"` or `pip install timecopilot-gift-eval>=0.3.0`.

**Migration:**

```text
from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
```

```python
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS
```

See the [GIFT-Eval API docs](../api/gift-eval/gift-eval.md) for details.

---

**Full Changelog**: https://github.com/TimeCopilot/timecopilot/compare/v0.0.30...v0.0.31
15 changes: 7 additions & 8 deletions docs/examples/gift-eval.ipynb
Original file line numberDiff line numberDiff line change
Expand Up@@ -53,7 +53,7 @@
},
"outputs": [],
"source": [
"%pip install \"timecopilot>=0.0.22\""
"%pip install \"timecopilot[gift-eval]>=0.0.22\""
]
},
{
Expand All@@ -64,7 +64,7 @@
"source": [
"## Dataset Setup\n",
"\n",
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) for dataset handling:"
"TimeCopilot includes built-in [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) for dataset handling:"
]
},
{
Expand All@@ -76,7 +76,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot_gift_eval import GIFTEval\n",
"\n",
"# TimeCopilot's built-in GIFT-Eval dataset downloader\n",
"# Handles the complete benchmark dataset with all 97 configurations\n",
Expand DownExpand Up@@ -156,7 +156,7 @@
"id": "M2YcjoDF5NH7"
},
"source": [
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) integration."
"With TimeCopilot you can evaluate any [Forecaster](https://timecopilot.dev/api/models/utils/forecaster/#timecopilot.models.utils.forecaster.Forecaster) in a standardized way using its [GIFT-Eval](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) integration."
]
},
{
Expand All@@ -168,8 +168,7 @@
"outputs": [],
"source": [
"import pandas as pd\n",
"from timecopilot.gift_eval.eval import GIFTEval\n",
"from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor\n",
"from timecopilot_gift_eval import GIFTEval, GluonTSPredictor\n",
"\n",
"\n",
"def evaluate_forecaster(\n",
Expand DownExpand Up@@ -710,7 +709,7 @@
},
"outputs": [],
"source": [
"from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS"
"from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS"
]
},
{
Expand DownExpand Up@@ -789,7 +788,7 @@
"id": "g0-oVisu6XX3"
},
"source": [
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot.gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
"The TimeCopilot's [GIFT-Eval integration](https://timecopilot.dev/api/gift-eval/gift-eval/#timecopilot_gift_eval.eval.GIFTEval) was designed considering reproducibility as one of its main features. The library can replicate the official results provided by the mantainers of the benchmark for the [`SeasonalNaive`](https://huggingface.co/spaces/Salesforce/GIFT-Eval/tree/main/results/seasonal_naive) method. The following code replicates the Seasonal Naive performance for the datasets evaluated in this notebook. The reproducibility of the results for the rest of the datasets are tested continuously in the [library's repo](https://github.com/TimeCopilot/timecopilot/blob/main/tests/gift_eval/test_evaluation.py)."
]
},
{
Expand Down
3 changes: 2 additions & 1 deletion experiments/gift-eval/pyproject.toml
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,13 +2,14 @@
dependencies = [
"modal>=1.0.5",
"s3fs>=2023.12.1",
"timecopilot-gift-eval>=0.3.0",
"timecopilot>=0.0.21",
"transformers<4.54",
"transformers==4.40.1 ; python_full_version < '3.12'",
"typer>=0.16.0",
]
description = "TimeCopilot experiments for GIFT-Eval"
name = "timecopilot-gift-eval"
name = "timecopilot-gift-eval-experiments"
readme = "README.md"
requires-python = ">=3.11"
version = "0.2.0"
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/download_results.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,8 +2,7 @@
from pathlib import Path

import pandas as pd

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_modal.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -59,8 +59,7 @@ def main():
import logging

import fsspec

from timecopilot.gift_eval.utils import DATASETS_WITH_TERMS
from timecopilot_gift_eval.utils import DATASETS_WITH_TERMS

logging.basicConfig(level=logging.INFO)

Expand Down
3 changes: 1 addition & 2 deletions experiments/gift-eval/src/run_timecopilot.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,8 @@
from typing import Annotated

import typer
from timecopilot_gift_eval import GIFTEval, GluonTSPredictor

from timecopilot.gift_eval.eval import GIFTEval
from timecopilot.gift_eval.gluonts_predictor import GluonTSPredictor
from timecopilot.models.ensembles.median import MedianEnsemble
from timecopilot.models.foundation.chronos import Chronos
from timecopilot.models.foundation.timesfm import TimesFM
Expand Down
Loading
Loading