Add your description here
Project description
Sorcerer Forecasts
A Python library for fetching and processing weather forecast data with automatic caching and region selection. Designed for simulations and applications that need efficient access to spatio-temporal forecast data.
Features
- Automatic Forecast Management: The service automatically determines when to fetch new forecast data based on your query location and time
- Local Caching: Downloaded forecasts are cached locally as NetCDF files for fast repeated access
- Smart Region Selection: Automatically selects the appropriate forecast region based on query coordinates
- 4D Querying: Query forecasts at specific points in space (latitude, longitude, altitude) and time
- Simulation-Friendly: Ideal for running simulations - no need to manually check if new data is needed
Installation
pip install sorcerer-forecasts
Quick Start
from datetime import datetime
from sorcerer_forecasts import ForecastService
from sorcerer_forecasts.sources import Stratocast
# Initialize the forecast source with your API key
source = Stratocast(api_key='YOUR_API_KEY')
# Create the forecast service with local caching
forecast_service = ForecastService(source=source, cache_dir='./.cache')
# Query forecast data at a specific 4D point
forecast = forecast_service.get({
'time': datetime.fromisoformat('2025-08-26T00:00:00Z'),
'latitude': 40,
'longitude': 30,
'altitude': 14625 # meters
})
# Access forecast variables
if forecast:
print(f"Pressure: {forecast['pres']}")
print(f"U wind: {forecast['u']}")
print(f"V wind: {forecast['v']}")
print(f"Height: {forecast['h']}")
How It Works
Automatic Forecast Management
The ForecastService intelligently manages forecast data:
- First Request: When you query a point, the service checks if it has the relevant forecast in memory
- Cache Check: If not in memory, it checks the local cache directory for a saved NetCDF file
- Fetch if Needed: Only fetches from the remote source if the data isn't available locally
- Reuse Loaded Data: Subsequent queries within the same forecast region and time period use the already-loaded data
This makes it perfect for simulations where a vehicle might be moving through space and time - the service will:
- Reuse the same forecast data when the vehicle moves within one time step
- Automatically fetch new forecasts only when crossing into a new time period or region
- Keep multiple forecasts in memory when needed
Example: Running a Simulation
from time import time
from datetime import datetime, timedelta
source = Stratocast(api_key='API_KEY')
forecast_service = ForecastService(source=source, cache_dir='./.cache')
# Simulate 10 time steps
base_time = datetime.fromisoformat('2025-08-26T00:00:00Z')
for i in range(10):
start = time()
# Query moves slightly in space and time
forecast = forecast_service.get({
'time': base_time + timedelta(minutes=i*15),
'latitude': 40 + i * 0.1,
'longitude': 30 + i * 0.1,
'altitude': 14625
})
end = time()
print(f"Step {i}: {end - start:.3f}s")
# First query will be slower (fetching), subsequent queries within
# the same forecast will be nearly instant
Supported Regions
The library automatically selects the appropriate forecast region based on your coordinates (requires proper permissions):
- CONUS: Continental United States
- EU-Central: Central Europe
- AF-East: Eastern Africa
- Region4: Extended North America
- Global: Worldwide coverage
Caching
Cached forecasts are stored as NetCDF files in the specified cache directory. The cache structure is:
cache_dir/
- YYYYMMDD.tHHz.stratocast.0p25.ml80.wind.{region}.nc
Cache files persist between sessions, so restarting your application won't require re-downloading previously fetched forecasts.
API Reference
ForecastService
ForecastService(source: ForecastSource, cache_dir: str | None = None)
source: A forecast source implementation (e.g.,Stratocast)cache_dir: Directory for caching forecast files (optional)
Methods
get(location: Point4) -> ForecastData | None: Retrieve forecast data at a 4D point- Returns
Noneif the location is outside available forecast bounds
- Returns
Point4 Dictionary Structure
{
'time': datetime, # UTC datetime
'latitude': float, # Degrees
'longitude': float, # Degrees
'altitude': float # Meters
}
License
See LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sorcerer_forecasts-0.1.1.tar.gz.
File metadata
- Download URL: sorcerer_forecasts-0.1.1.tar.gz
- Upload date:
- Size: 49.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1abaa251388271cf55bb950030241ae728c03aeaa7a7cb7d1d9ec5841244e096
|
|
| MD5 |
1a93a39c2d482a53a0fdcc493285f01c
|
|
| BLAKE2b-256 |
54432a4cab08092c51865199c8bee0f1ba0c4920d811d340b9c06c784072de3d
|
File details
Details for the file sorcerer_forecasts-0.1.1-py3-none-any.whl.
File metadata
- Download URL: sorcerer_forecasts-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1532ffba31bc3be19979980e80d33bc829fa1ff90aef2e4dff9dbc4f6a87a393
|
|
| MD5 |
ae970cf7086b9d1c478c2da26c2e6e82
|
|
| BLAKE2b-256 |
e485553da99dd967d6a7aabb3cebfaaa5ed6fd8e62ef4b6d86a04be7f0ad0a0a
|