# Core (needed for the data/scoring/Indonesia stack -- climatology.py, # indonesia_zones.py, backtest_indonesia.py, era5_data_pipeline.py, # zone_observation.py, crop_risk_scorer.py, hierarchical_search.py) numpy>=1.24 # RL training stack (train_curriculum.py, train_kaggle.py, # weather_forecast_env.py, gru_weather_policy.py) torch>=2.0 gymnasium>=0.29 stable-baselines3>=2.0 sb3-contrib>=2.0 # Hyperparameter sweeps (sweep_reward_shaping.py) -- this file was temporarily # created to assess optimal hyperparameters. Train_kaggle.py's best values # dict (learning_rate=6.916624987609979e-05, ent_coef=0.08779238696445962, # etc.) was "found by the Optuna sweep (trial 6 of the 20-trial run against # n_zones=3 / max_steps=250)" and hardcoded as the CLI defaults -- # consistent with this having been a one-time iteration tool whose winning # trial's output was captured inline, rather than a script meant to persist # in the repo. optuna is essential if you wish to reexplore optimal parameters. optuna>=3.5 # Edge export (mnn_export.py) -- MNN itself has no pip package; build/install # per https://github.com/alibaba/MNN, this only covers the ONNX/export side. onnx>=1.15 # Real-data fetching (era5_data_pipeline.py, climatology.py) -- all optional; # each degrades to synthetic/cached data gracefully without it, but any real # (non-synthetic) fetch needs at least `requests`. The comment at the top of # this file listing era5_data_pipeline.py under "Core -- numpy>=1.24" is # incomplete: numpy alone is enough for the module to import, not for its # real-data code paths to work. requests>=2.31 cdsapi>=0.6 # ERA5 reanalysis tier only earthengine-api # `import ee` -- IMERG/CHIRPS/SMAP satellite tier only netCDF4>=1.6 # ERA5 NetCDF reads -- tried first xarray>=2023.1 # ERA5 NetCDF reads -- fallback if netCDF4 unavailable # LocalTimesFMBackend only (timesfm_wrapper.py) -- a deliberately opt-in # forecast tier gated behind a manually downloaded, SHA256-verified # checkpoint (see LocalTimesFMBackend.__post_init__); most users won't hit # this path. Note: timesfm_wrapper.py imports pandas without a try/except # guard (unlike its `import timesfm` a few lines above, which does have # one) -- if pandas is missing, this fails with an unhelpful raw # ImportError rather than the graceful message the rest of this codebase # uses for optional deps. timesfm pandas>=2.0 # TensorBoard training logs (train_kaggle.py) -- optional; training runs # fine without it, just without tfevents output. Listed here despite being # wrapped in a try/except in code because train_kaggle.py's own quickstart # docstring tells users to install it, and every verified training run in # this project's history had it installed. tensorboard>=2.14 # Optional -- only needed if you actually connect to a broker # (node_transport.py's MQTTTransport falls back to LocalTransport without it) paho-mqtt>=1.6 # Testing pytest>=7.0