python-esios 2.3.0__tar.gz → 2.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- python_esios-2.4.0/.release-please-manifest.json +3 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/CHANGELOG.md +7 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/PKG-INFO +1 -1
- {python_esios-2.3.0 → python_esios-2.4.0}/pyproject.toml +7 -1
- python_esios-2.4.0/src/esios/constants.py +30 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/managers/indicators.py +99 -20
- python_esios-2.3.0/.release-please-manifest.json +0 -3
- python_esios-2.3.0/src/esios/constants.py +0 -20
- {python_esios-2.3.0 → python_esios-2.4.0}/.github/workflows/release-please.yml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/.gitignore +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/CLAUDE.md +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/LICENSE +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/README.md +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/.gitignore +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/01_Quickstart/01_Setup and First Query.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/01_Search Indicators.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/02_Historical Data.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/03_Multi-Geography Indicators.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/04_Compare Indicators.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/05_Market Prices.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/06_Generation and Demand.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/03_Archives/01_Download Archives.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/03_Archives/02_I90 Settlement Files.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/04_Caching/01_Cache Management.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/05_Advanced/01_Ad-hoc Pandas Expressions.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/05_Advanced/02_Async Client.ipynb +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/01_Quickstart/01_Setup and First Query.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/01_Search Indicators.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/02_Historical Data.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/03_Multi-Geography Indicators.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/04_Compare Indicators.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/05_Market Prices.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/06_Generation and Demand.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/03_Archives/01_Download Archives.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/03_Archives/02_I90 Settlement Files.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/04_Caching/01_Cache Management.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/05_Advanced/01_Ad-hoc Pandas Expressions.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/05_Advanced/02_Async Client.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/examples/generate.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/release-please-config.json +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/.agents/skills/esios/SKILL.md +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/__init__.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/async_client.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cache.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/catalog.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/__init__.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/app.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/archives.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/cache_cmd.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/catalog_cmd.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/config.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/config_cmd.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/exec_cmd.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/cli/indicators.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/client.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/data/__init__.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/data/archives.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/data/geos.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/data/indicators.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/data/magnitudes.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/data/time_periods.yaml +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/exceptions.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/managers/__init__.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/managers/archives.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/managers/base.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/managers/offer_indicators.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/models/__init__.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/models/archive.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/models/indicator.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/models/offer_indicator.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/processing/__init__.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/processing/dataframes.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/processing/i90.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/src/esios/processing/zip.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/__init__.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/conftest.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/test_cache.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/test_client.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/test_dataframes.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/test_exceptions.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/test_i90.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/test_managers.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/test_models.py +0 -0
- {python_esios-2.3.0 → python_esios-2.4.0}/tests/test_zip.py +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.4.0](https://github.com/datons/python-esios/compare/python-esios-v2.3.0...python-esios-v2.4.0) (2026-03-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* concurrent & adaptive chunk fetching for indicators ([1ef2590](https://github.com/datons/python-esios/commit/1ef2590cf870e13e57792cbb734e10f8d6449744))
|
|
9
|
+
|
|
3
10
|
## [2.3.0](https://github.com/datons/python-esios/compare/python-esios-v2.2.0...python-esios-v2.3.0) (2026-03-16)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-esios
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: A Python wrapper for the ESIOS API (Spanish electricity market)
|
|
5
5
|
Project-URL: Homepage, https://github.com/datons/python-esios
|
|
6
6
|
Project-URL: Repository, https://github.com/datons/python-esios
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-esios"
|
|
7
|
-
version = "2.
|
|
7
|
+
version = "2.4.0"
|
|
8
8
|
description = "A Python wrapper for the ESIOS API (Spanish electricity market)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "GPL-3.0-only"
|
|
@@ -53,3 +53,9 @@ packages = ["src/esios"]
|
|
|
53
53
|
[tool.pytest.ini_options]
|
|
54
54
|
testpaths = ["tests"]
|
|
55
55
|
pythonpath = ["src"]
|
|
56
|
+
|
|
57
|
+
[dependency-groups]
|
|
58
|
+
dev = [
|
|
59
|
+
"kaleido>=1.2.0",
|
|
60
|
+
"plotly>=6.6.0",
|
|
61
|
+
]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Constants for the ESIOS API client."""
|
|
2
|
+
|
|
3
|
+
ESIOS_API_URL = "https://api.esios.ree.es"
|
|
4
|
+
|
|
5
|
+
DEFAULT_HEADERS = {
|
|
6
|
+
"Accept": "application/json; application/vnd.esios-api-v1+json",
|
|
7
|
+
"Content-Type": "application/json",
|
|
8
|
+
"Host": "api.esios.ree.es",
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
DEFAULT_TIMEOUT = 30.0 # seconds
|
|
12
|
+
|
|
13
|
+
MAX_RETRIES = 3
|
|
14
|
+
RETRY_MIN_WAIT = 2 # seconds
|
|
15
|
+
RETRY_MAX_WAIT = 10 # seconds
|
|
16
|
+
|
|
17
|
+
# ESIOS API chunk sizes for historical data fetching.
|
|
18
|
+
# High-geo indicators (40+ geos) timeout (504) at >21 days.
|
|
19
|
+
# Low-geo indicators handle 6+ months per request in <0.1s.
|
|
20
|
+
CHUNK_SIZE_DAYS = 21 # Legacy default, kept for backward compat
|
|
21
|
+
CHUNK_SIZE_DAYS_LOW_GEO = 180 # 6 months for indicators with few geos
|
|
22
|
+
CHUNK_SIZE_DAYS_HIGH_GEO = 21 # Conservative for indicators with many geos
|
|
23
|
+
HIGH_GEO_THRESHOLD = 15 # Indicators with >= this many geos use smaller chunks
|
|
24
|
+
|
|
25
|
+
# Concurrent chunk fetching within a single indicator.
|
|
26
|
+
# 4 workers gives ~17-95x speedup over sequential with no errors.
|
|
27
|
+
# Diminishing returns past 4 (ESIOS server becomes the bottleneck).
|
|
28
|
+
DEFAULT_CHUNK_WORKERS = 4
|
|
29
|
+
|
|
30
|
+
TIMEZONE = "Europe/Madrid"
|
|
@@ -3,13 +3,20 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
+
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
6
7
|
from datetime import timedelta
|
|
7
8
|
from typing import Any
|
|
8
9
|
|
|
9
10
|
import pandas as pd
|
|
10
11
|
|
|
11
12
|
from esios.cache import CacheStore
|
|
12
|
-
from esios.constants import
|
|
13
|
+
from esios.constants import (
|
|
14
|
+
CHUNK_SIZE_DAYS_HIGH_GEO,
|
|
15
|
+
CHUNK_SIZE_DAYS_LOW_GEO,
|
|
16
|
+
DEFAULT_CHUNK_WORKERS,
|
|
17
|
+
HIGH_GEO_THRESHOLD,
|
|
18
|
+
TIMEZONE,
|
|
19
|
+
)
|
|
13
20
|
from esios.managers.base import BaseManager
|
|
14
21
|
from esios.models.indicator import Indicator
|
|
15
22
|
from esios.processing.dataframes import to_dataframe
|
|
@@ -131,6 +138,88 @@ class IndicatorHandle:
|
|
|
131
138
|
f"Available: {', '.join(available)}"
|
|
132
139
|
)
|
|
133
140
|
|
|
141
|
+
@property
|
|
142
|
+
def _chunk_days(self) -> int:
|
|
143
|
+
"""Choose chunk size based on indicator's geo count.
|
|
144
|
+
|
|
145
|
+
ESIOS API times out (504) for high-geo indicators (40+ geos) with
|
|
146
|
+
windows larger than ~3 weeks. Low-geo indicators handle 6+ months
|
|
147
|
+
per request in <0.1s.
|
|
148
|
+
|
|
149
|
+
When geos are unknown (empty metadata), uses the conservative
|
|
150
|
+
chunk size to avoid timeouts on first fetch.
|
|
151
|
+
"""
|
|
152
|
+
geo_count = len(self.geos)
|
|
153
|
+
if geo_count == 0:
|
|
154
|
+
# Unknown geo count — be conservative
|
|
155
|
+
return CHUNK_SIZE_DAYS_HIGH_GEO
|
|
156
|
+
if geo_count >= HIGH_GEO_THRESHOLD:
|
|
157
|
+
return CHUNK_SIZE_DAYS_HIGH_GEO
|
|
158
|
+
return CHUNK_SIZE_DAYS_LOW_GEO
|
|
159
|
+
|
|
160
|
+
def _fetch_one(
|
|
161
|
+
self, start: str, end: str, base_params: dict[str, Any],
|
|
162
|
+
) -> list[dict]:
|
|
163
|
+
"""Fetch a single date-range chunk from the ESIOS API."""
|
|
164
|
+
params = {
|
|
165
|
+
**base_params,
|
|
166
|
+
"start_date": start,
|
|
167
|
+
"end_date": end + "T23:59:59",
|
|
168
|
+
}
|
|
169
|
+
logger.debug("Fetch %s → %s", start, end)
|
|
170
|
+
data = self._manager._get(f"indicators/{self.id}", params=params)
|
|
171
|
+
return data.get("indicator", {}).get("values", [])
|
|
172
|
+
|
|
173
|
+
def _fetch_chunks(
|
|
174
|
+
self,
|
|
175
|
+
gaps: list,
|
|
176
|
+
base_params: dict[str, Any],
|
|
177
|
+
max_workers: int = DEFAULT_CHUNK_WORKERS,
|
|
178
|
+
) -> list[dict]:
|
|
179
|
+
"""Fetch all gap chunks concurrently, return values in order.
|
|
180
|
+
|
|
181
|
+
Builds a list of (start, end) chunks from the gaps, then fetches
|
|
182
|
+
them in parallel using a thread pool. Results are reassembled in
|
|
183
|
+
chronological order.
|
|
184
|
+
"""
|
|
185
|
+
chunk_delta = timedelta(days=self._chunk_days)
|
|
186
|
+
|
|
187
|
+
# Build chunk list
|
|
188
|
+
chunks: list[tuple[str, str]] = []
|
|
189
|
+
for gap in gaps:
|
|
190
|
+
current = gap.start
|
|
191
|
+
while current <= gap.end:
|
|
192
|
+
chunk_end = min(current + chunk_delta, gap.end)
|
|
193
|
+
chunks.append((
|
|
194
|
+
current.strftime("%Y-%m-%d"),
|
|
195
|
+
chunk_end.strftime("%Y-%m-%d"),
|
|
196
|
+
))
|
|
197
|
+
current = chunk_end + timedelta(days=1)
|
|
198
|
+
|
|
199
|
+
if not chunks:
|
|
200
|
+
return []
|
|
201
|
+
|
|
202
|
+
if len(chunks) == 1:
|
|
203
|
+
return self._fetch_one(chunks[0][0], chunks[0][1], base_params)
|
|
204
|
+
|
|
205
|
+
# Fetch concurrently, preserve order
|
|
206
|
+
results: list[list[dict] | None] = [None] * len(chunks)
|
|
207
|
+
with ThreadPoolExecutor(max_workers=max_workers) as pool:
|
|
208
|
+
futures = {
|
|
209
|
+
pool.submit(self._fetch_one, s, e, base_params): i
|
|
210
|
+
for i, (s, e) in enumerate(chunks)
|
|
211
|
+
}
|
|
212
|
+
for future in as_completed(futures):
|
|
213
|
+
idx = futures[future]
|
|
214
|
+
results[idx] = future.result()
|
|
215
|
+
|
|
216
|
+
# Flatten in chronological order
|
|
217
|
+
all_values: list[dict] = []
|
|
218
|
+
for chunk_values in results:
|
|
219
|
+
if chunk_values:
|
|
220
|
+
all_values.extend(chunk_values)
|
|
221
|
+
return all_values
|
|
222
|
+
|
|
134
223
|
def historical(
|
|
135
224
|
self,
|
|
136
225
|
start: str,
|
|
@@ -143,11 +232,15 @@ class IndicatorHandle:
|
|
|
143
232
|
time_trunc: str | None = None,
|
|
144
233
|
geo_trunc: str | None = None,
|
|
145
234
|
column_name: str | None = None,
|
|
235
|
+
chunk_workers: int = DEFAULT_CHUNK_WORKERS,
|
|
146
236
|
) -> pd.DataFrame:
|
|
147
237
|
"""Fetch historical values as a DataFrame with DatetimeIndex.
|
|
148
238
|
|
|
149
239
|
Uses local parquet cache when enabled. Only fetches missing date ranges
|
|
150
|
-
from the API. Automatically chunks requests
|
|
240
|
+
from the API. Automatically chunks requests and fetches concurrently.
|
|
241
|
+
|
|
242
|
+
Chunk size adapts to the indicator's geo count: 180 days for low-geo
|
|
243
|
+
indicators, 21 days for high-geo (≥15 geos) to avoid ESIOS timeouts.
|
|
151
244
|
|
|
152
245
|
When multiple geo_ids are present (e.g. indicator 600 returns data for
|
|
153
246
|
several countries), the result is pivoted so each geo becomes a column
|
|
@@ -158,6 +251,8 @@ class IndicatorHandle:
|
|
|
158
251
|
Useful for single-column results where a stable name like
|
|
159
252
|
``"value"`` is preferred over the default geo_name or
|
|
160
253
|
indicator ID.
|
|
254
|
+
chunk_workers: Number of concurrent threads for fetching chunks.
|
|
255
|
+
Defaults to 4. Set to 1 for sequential fetching.
|
|
161
256
|
"""
|
|
162
257
|
base_params: dict[str, Any] = {
|
|
163
258
|
"locale": locale,
|
|
@@ -211,24 +306,8 @@ class IndicatorHandle:
|
|
|
211
306
|
from esios.cache import DateRange
|
|
212
307
|
gaps = [DateRange(start_date, end_date)]
|
|
213
308
|
|
|
214
|
-
# -- Fetch missing ranges
|
|
215
|
-
all_values
|
|
216
|
-
chunk_delta = timedelta(days=CHUNK_SIZE_DAYS)
|
|
217
|
-
|
|
218
|
-
for gap in gaps:
|
|
219
|
-
current = gap.start
|
|
220
|
-
gap_end = gap.end
|
|
221
|
-
while current <= gap_end:
|
|
222
|
-
chunk_end = min(current + chunk_delta, gap_end)
|
|
223
|
-
params = {
|
|
224
|
-
**base_params,
|
|
225
|
-
"start_date": current.strftime("%Y-%m-%d"),
|
|
226
|
-
"end_date": chunk_end.strftime("%Y-%m-%d") + "T23:59:59",
|
|
227
|
-
}
|
|
228
|
-
logger.debug("Fetch %s → %s", params["start_date"], params["end_date"])
|
|
229
|
-
data = self._manager._get(f"indicators/{self.id}", params=params)
|
|
230
|
-
all_values.extend(data.get("indicator", {}).get("values", []))
|
|
231
|
-
current = chunk_end + timedelta(days=1)
|
|
309
|
+
# -- Fetch missing ranges (concurrent + adaptive chunk size) -----------
|
|
310
|
+
all_values = self._fetch_chunks(gaps, base_params, max_workers=chunk_workers)
|
|
232
311
|
|
|
233
312
|
# Learn any new geo mappings from the response
|
|
234
313
|
self._enrich_geo_map(all_values)
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"""Constants for the ESIOS API client."""
|
|
2
|
-
|
|
3
|
-
ESIOS_API_URL = "https://api.esios.ree.es"
|
|
4
|
-
|
|
5
|
-
DEFAULT_HEADERS = {
|
|
6
|
-
"Accept": "application/json; application/vnd.esios-api-v1+json",
|
|
7
|
-
"Content-Type": "application/json",
|
|
8
|
-
"Host": "api.esios.ree.es",
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
DEFAULT_TIMEOUT = 30.0 # seconds
|
|
12
|
-
|
|
13
|
-
MAX_RETRIES = 3
|
|
14
|
-
RETRY_MIN_WAIT = 2 # seconds
|
|
15
|
-
RETRY_MAX_WAIT = 10 # seconds
|
|
16
|
-
|
|
17
|
-
# ESIOS API limits responses to ~3 weeks of data per request
|
|
18
|
-
CHUNK_SIZE_DAYS = 21
|
|
19
|
-
|
|
20
|
-
TIMEZONE = "Europe/Madrid"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/01_Quickstart/01_Setup and First Query.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/03_Multi-Geography Indicators.ipynb
RENAMED
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/04_Compare Indicators.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/02_Indicators/06_Generation and Demand.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/03_Archives/02_I90 Settlement Files.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/05_Advanced/01_Ad-hoc Pandas Expressions.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/01_Search Indicators.yaml
RENAMED
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/02_Historical Data.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/04_Compare Indicators.yaml
RENAMED
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/02_Indicators/05_Market Prices.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/03_Archives/01_Download Archives.yaml
RENAMED
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/03_Archives/02_I90 Settlement Files.yaml
RENAMED
|
File without changes
|
{python_esios-2.3.0 → python_esios-2.4.0}/examples/_specs/04_Caching/01_Cache Management.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|