PVNet 5.0.1__tar.gz → 5.2.3__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.
Files changed (42) hide show
  1. {pvnet-5.0.1 → pvnet-5.2.3}/PKG-INFO +51 -99
  2. {pvnet-5.0.1 → pvnet-5.2.3}/PVNet.egg-info/PKG-INFO +51 -99
  3. {pvnet-5.0.1 → pvnet-5.2.3}/PVNet.egg-info/SOURCES.txt +2 -4
  4. {pvnet-5.0.1 → pvnet-5.2.3}/PVNet.egg-info/requires.txt +1 -2
  5. {pvnet-5.0.1 → pvnet-5.2.3}/README.md +48 -95
  6. pvnet-5.2.3/pvnet/datamodule.py +142 -0
  7. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/load_model.py +2 -0
  8. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/base_model.py +10 -67
  9. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/encoders/basic_blocks.py +1 -0
  10. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/encoders/encoders3d.py +24 -11
  11. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/late_fusion.py +15 -24
  12. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/training/lightning_module.py +20 -19
  13. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/training/train.py +1 -23
  14. pvnet-5.2.3/pvnet/utils.py +169 -0
  15. {pvnet-5.0.1 → pvnet-5.2.3}/pyproject.toml +2 -3
  16. pvnet-5.2.3/tests/test_datamodule.py +15 -0
  17. pvnet-5.2.3/tests/test_end2end.py +33 -0
  18. pvnet-5.0.1/pvnet/data/__init__.py +0 -3
  19. pvnet-5.0.1/pvnet/data/base_datamodule.py +0 -166
  20. pvnet-5.0.1/pvnet/data/site_datamodule.py +0 -29
  21. pvnet-5.0.1/pvnet/data/uk_regional_datamodule.py +0 -29
  22. pvnet-5.0.1/pvnet/utils.py +0 -88
  23. pvnet-5.0.1/tests/test_end2end.py +0 -21
  24. {pvnet-5.0.1 → pvnet-5.2.3}/LICENSE +0 -0
  25. {pvnet-5.0.1 → pvnet-5.2.3}/PVNet.egg-info/dependency_links.txt +0 -0
  26. {pvnet-5.0.1 → pvnet-5.2.3}/PVNet.egg-info/top_level.txt +0 -0
  27. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/__init__.py +0 -0
  28. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/__init__.py +0 -0
  29. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/ensemble.py +0 -0
  30. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/__init__.py +0 -0
  31. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/basic_blocks.py +0 -0
  32. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/encoders/__init__.py +0 -0
  33. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/linear_networks/__init__.py +0 -0
  34. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/linear_networks/basic_blocks.py +0 -0
  35. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/linear_networks/networks.py +0 -0
  36. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/site_encoders/__init__.py +0 -0
  37. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/site_encoders/basic_blocks.py +0 -0
  38. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/models/late_fusion/site_encoders/encoders.py +0 -0
  39. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/optimizers.py +0 -0
  40. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/training/__init__.py +0 -0
  41. {pvnet-5.0.1 → pvnet-5.2.3}/pvnet/training/plots.py +0 -0
  42. {pvnet-5.0.1 → pvnet-5.2.3}/setup.cfg +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PVNet
3
- Version: 5.0.1
3
+ Version: 5.2.3
4
4
  Summary: PVNet
5
5
  Author-email: Peter Dudfield <info@openclimatefix.org>
6
- Requires-Python: >=3.10
6
+ Requires-Python: <3.14,>=3.11
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
- Requires-Dist: ocf-data-sampler>=0.2.32
9
+ Requires-Dist: ocf-data-sampler>=0.6.0
10
10
  Requires-Dist: numpy
11
11
  Requires-Dist: pandas
12
12
  Requires-Dist: matplotlib
@@ -14,7 +14,6 @@ Requires-Dist: xarray
14
14
  Requires-Dist: h5netcdf
15
15
  Requires-Dist: torch>=2.0.0
16
16
  Requires-Dist: lightning
17
- Requires-Dist: torchvision
18
17
  Requires-Dist: typer
19
18
  Requires-Dist: sqlalchemy
20
19
  Requires-Dist: fsspec[s3]
@@ -30,7 +29,7 @@ Dynamic: license-file
30
29
 
31
30
  # PVNet
32
31
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
33
- [![All Contributors](https://img.shields.io/badge/all_contributors-19-orange.svg?style=flat-square)](#contributors-)
32
+ [![All Contributors](https://img.shields.io/badge/all_contributors-21-orange.svg?style=flat-square)](#contributors-)
34
33
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
35
34
 
36
35
  [![tags badge](https://img.shields.io/github/v/tag/openclimatefix/PVNet?include_prereleases&sort=semver&color=FFAC5F)](https://github.com/openclimatefix/PVNet/tags)
@@ -143,120 +142,71 @@ pip install -e <PATH-TO-ocf-data-sampler-REPO>
143
142
  If you install the local version of `ocf-data-sampler` that is more recent than the version
144
143
  specified in `PVNet` it is not guarenteed to function properly with this library.
145
144
 
146
- ## Pre-saving samples of data for training/validation of PVNet
147
145
 
148
- PVNet contains a script for generating samples of data suitable for training the PVNet models. To run the script you will need to make some modifications to the datamodule configuration.
146
+ ### Set up and config example for streaming
149
147
 
150
- Make sure you have copied the example configs (as already stated above):
151
- ```
152
- cp -r configs.example configs
153
- ```
154
-
155
- ### Set up and config example for sample creation
156
-
157
- We will use the following example config file for creating samples: `/PVNet/configs/datamodule/configuration/example_configuration.yaml`. Ensure that the file paths are set to the correct locations in `example_configuration.yaml`: search for `PLACEHOLDER` to find where to input the location of the files. You will need to comment out or delete the parts of `example_configuration.yaml` pertaining to the data you are not using.
158
-
159
-
160
- When creating samples, an additional datamodule config located in `PVNet/configs/datamodule` is passed into the sample creation script: `streamed_samples.yaml`. Like before, a placeholder variable is used when specifying which configuration to use:
161
-
162
- ```yaml
163
- configuration: "PLACEHOLDER.yaml"
164
- ```
148
+ We will use the following example config file to describe your data sources: `/PVNet/configs/datamodule/configuration/example_configuration.yaml`. Ensure that the file paths are set to the correct locations in `example_configuration.yaml`: search for `PLACEHOLDER` to find where to input the location of the files. Delete or comment the parts for data you are not using.
165
149
 
166
- This should be given the whole path to the config on your local machine, for example:
150
+ At run time, the datamodule config `PVNet/configs/datamodule/streamed_samples.yaml` points to your chosen configuration file:
167
151
 
168
- ```yaml
169
152
  configuration: "/FULL-PATH-TO-REPO/PVNet/configs/datamodule/configuration/example_configuration.yaml"
170
- ```
171
-
172
- Where `FULL-PATH-TO-REPO` represent the whole path to the PVNet repo on your local machine.
173
-
174
- This is also where you can update the train, val & test periods to cover the data you have access to.
175
-
176
- ### Running the sample creation script
177
153
 
178
- Run the `save_samples.py` script to create samples with the parameters specified in the datamodule config (`streamed_samples.yaml` in this example):
179
-
180
- ```bash
181
- python scripts/save_samples.py
182
- ```
183
- PVNet uses
184
- [hydra](https://hydra.cc/) which enables us to pass variables via the command
185
- line that will override the configuration defined in the `./configs` directory, like this:
186
-
187
- ```bash
188
- python scripts/save_samples.py datamodule=streamed_samples datamodule.sample_output_dir="./output" datamodule.num_train_samples=10 datamodule.num_val_samples=5
189
- ```
190
-
191
- `scripts/save_samples.py` needs a config under `PVNet/configs/datamodule`. You can adapt `streamed_samples.yaml` or create your own in the same folder.
154
+ You can also update train/val/test time ranges here to match the period you have access to.
192
155
 
193
156
  If downloading private data from a GCP bucket make sure to authenticate gcloud (the public satellite data does not need authentication):
194
157
 
195
- ```
196
158
  gcloud auth login
197
- ```
198
-
199
- Files stored in multiple locations can be added as a list. For example, in the `example_configuration.yaml` file we can supply a path to satellite data stored on a bucket:
200
-
201
- ```yaml
202
- satellite:
203
- zarr_path: gs://solar-pv-nowcasting-data/satellite/EUMETSAT/SEVIRI_RSS/v4/2020_nonhrv.zarr
204
- ```
205
159
 
206
- Or to satellite data hosted by Google:
160
+ You can provide multiple storage locations as a list. For example:
207
161
 
208
- ```yaml
209
162
  satellite:
210
- zarr_path:
211
- - "gs://public-datasets-eumetsat-solar-forecasting/satellite/EUMETSAT/SEVIRI_RSS/v4/2020_nonhrv.zarr"
212
- - "gs://public-datasets-eumetsat-solar-forecasting/satellite/EUMETSAT/SEVIRI_RSS/v4/2021_nonhrv.zarr"
213
- ```
163
+ zarr_path:
164
+ - "gs://public-datasets-eumetsat-solar-forecasting/satellite/EUMETSAT/SEVIRI_RSS/v4/2020_nonhrv.zarr"
165
+ - "gs://public-datasets-eumetsat-solar-forecasting/satellite/EUMETSAT/SEVIRI_RSS/v4/2021_nonhrv.zarr"
214
166
 
215
- ocf-data-sampler is currently set up to use 11 channels from the satellite data, the 12th of which is HRV and is not included in these.
167
+ `ocf-data-sampler` is currently set up to use 11 channels from the satellite data (the 12th, HRV, is not used).
216
168
 
169
+ ⚠️ NB: Our publicly accessible satellite data is currently saved with a blosc2 compressor, which is not supported by the tensorstore backend PVNet relies on now. We are in the process of updating this; for now, the paths above cannot be used with this codebase.
217
170
 
218
171
  ### Training PVNet
219
172
 
220
- How PVNet is run is determined by the extensive configuration in the config
221
- files. The configs stored in `PVNet/configs.example` should work with samples created using the steps and sample creation config mentioned above.
173
+ How PVNet is run is determined by the configuration files. The example configs in `PVNet/configs.example` work with **streamed_samples** using `datamodule/streamed_samples.yaml`.
222
174
 
223
- Make sure to update the following config files before training your model:
175
+ Update the following before training:
224
176
 
225
- 1. In `configs/datamodule/presaved_samples.yaml`:
226
- - update `sample_dir` to point to the directory you stored your samples in during sample creation
227
- 2. In `configs/model/late_fusion.yaml`:
228
- - update the list of encoders to reflect the data sources you are using. If you are using different NWP sources, the encoders for these should follow the same structure with two important updates:
229
- - `in_channels`: number of variables your NWP source supplies
230
- - `image_size_pixels`: spatial crop of your NWP data. It depends on the spatial resolution of your NWP; should match `image_size_pixels_height` and/or `image_size_pixels_width` in `datamodule/configuration/site_example_configuration.yaml` for the NWP, unless transformations such as coarsening was applied (e. g. as for ECMWF data)
231
- 3. In `configs/trainer/default.yaml`:
232
- - set `accelerator: 0` if running on a system without a supported GPU
177
+ 1. In `configs/model/late_fusion.yaml`:
178
+ - Update the list of encoders to match the data sources you are using. For different NWP sources, keep the same structure but ensure:
179
+ - `in_channels`: the number of variables your NWP source supplies
180
+ - `image_size_pixels`: spatial crop matching your NWP resolution and the settings in your datamodule configuration (unless you coarsened, e.g. for ECMWF)
181
+ 2. In `configs/trainer/default.yaml`:
182
+ - Set `accelerator: 0` if running on a system without a supported GPU
183
+ 3. In `configs/datamodule/streamed_samples.yaml`:
184
+ - Point `configuration:` to your local `example_configuration.yaml` (or your custom one)
185
+ - Adjust the train/val/test time ranges to your available data
233
186
 
234
- If creating copies of the config files instead of modifying existing ones, update `defaults` in the main `./configs/config.yaml` file to use
235
- your customised config files:
187
+ If you create custom config files, update the main `./configs/config.yaml` defaults:
236
188
 
237
- ```yaml
238
189
  defaults:
239
190
  - trainer: default.yaml
240
191
  - model: late_fusion.yaml
241
- - datamodule: presaved_samples.yaml
192
+ - datamodule: streamed_samples.yaml
242
193
  - callbacks: null
243
194
  - experiment: null
244
195
  - hparams_search: null
245
196
  - hydra: default.yaml
246
- ```
247
197
 
248
- Assuming you ran the `save_samples.py` script to generate some presaved train and
249
- val data samples, you can now train PVNet by running:
198
+ Now train PVNet:
250
199
 
251
- ```
252
200
  python run.py
253
- ```
201
+
202
+ You can override any setting with Hydra, e.g.:
203
+
204
+ python run.py datamodule=streamed_samples datamodule.configuration="/FULL-PATH/PVNet/configs/datamodule/configuration/example_configuration.yaml"
254
205
 
255
206
  ## Backtest
256
207
 
257
208
  If you have successfully trained a PVNet model and have a saved model checkpoint you can create a backtest using this, e.g. forecasts on historical data to evaluate forecast accuracy/skill. This can be done by running one of the scripts in this repo such as [the UK GSP backtest script](scripts/backtest_uk_gsp.py) or the [the pv site backtest script](scripts/backtest_sites.py), further info on how to run these are in each backtest file.
258
209
 
259
-
260
210
  ## Testing
261
211
 
262
212
  You can use `python -m pytest tests` to run tests
@@ -271,29 +221,31 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
271
221
  <table>
272
222
  <tbody>
273
223
  <tr>
274
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/felix-e-h-p"><img src="https://avatars.githubusercontent.com/u/137530077?v=4?s=100" width="100px;" alt="Felix"/><br /><sub><b>Felix</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=felix-e-h-p" title="Code">💻</a></td>
275
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Sukh-P"><img src="https://avatars.githubusercontent.com/u/42407101?v=4?s=100" width="100px;" alt="Sukhil Patel"/><br /><sub><b>Sukhil Patel</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=Sukh-P" title="Code">💻</a></td>
276
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/dfulu"><img src="https://avatars.githubusercontent.com/u/41546094?v=4?s=100" width="100px;" alt="James Fulton"/><br /><sub><b>James Fulton</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=dfulu" title="Code">💻</a></td>
277
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/AUdaltsova"><img src="https://avatars.githubusercontent.com/u/43303448?v=4?s=100" width="100px;" alt="Alexandra Udaltsova"/><br /><sub><b>Alexandra Udaltsova</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=AUdaltsova" title="Code">💻</a> <a href="https://github.com/openclimatefix/PVNet/pulls?q=is%3Apr+reviewed-by%3AAUdaltsova" title="Reviewed Pull Requests">👀</a></td>
278
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/zakwatts"><img src="https://avatars.githubusercontent.com/u/47150349?v=4?s=100" width="100px;" alt="Megawattz"/><br /><sub><b>Megawattz</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=zakwatts" title="Code">💻</a></td>
279
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/peterdudfield"><img src="https://avatars.githubusercontent.com/u/34686298?v=4?s=100" width="100px;" alt="Peter Dudfield"/><br /><sub><b>Peter Dudfield</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=peterdudfield" title="Code">💻</a></td>
224
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/felix-e-h-p"><img src="https://avatars.githubusercontent.com/u/137530077?v=4?s=100" width="100px;" alt="Felix"/><br /><sub><b>Felix</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=felix-e-h-p" title="Code">💻</a></td>
225
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Sukh-P"><img src="https://avatars.githubusercontent.com/u/42407101?v=4?s=100" width="100px;" alt="Sukhil Patel"/><br /><sub><b>Sukhil Patel</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=Sukh-P" title="Code">💻</a></td>
226
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/dfulu"><img src="https://avatars.githubusercontent.com/u/41546094?v=4?s=100" width="100px;" alt="James Fulton"/><br /><sub><b>James Fulton</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=dfulu" title="Code">💻</a></td>
227
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/AUdaltsova"><img src="https://avatars.githubusercontent.com/u/43303448?v=4?s=100" width="100px;" alt="Alexandra Udaltsova"/><br /><sub><b>Alexandra Udaltsova</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=AUdaltsova" title="Code">💻</a> <a href="https://github.com/openclimatefix/pvnet/pulls?q=is%3Apr+reviewed-by%3AAUdaltsova" title="Reviewed Pull Requests">👀</a></td>
228
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/zakwatts"><img src="https://avatars.githubusercontent.com/u/47150349?v=4?s=100" width="100px;" alt="Megawattz"/><br /><sub><b>Megawattz</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=zakwatts" title="Code">💻</a></td>
229
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/peterdudfield"><img src="https://avatars.githubusercontent.com/u/34686298?v=4?s=100" width="100px;" alt="Peter Dudfield"/><br /><sub><b>Peter Dudfield</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=peterdudfield" title="Code">💻</a></td>
280
230
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mahdilamb"><img src="https://avatars.githubusercontent.com/u/4696915?v=4?s=100" width="100px;" alt="Mahdi Lamb"/><br /><sub><b>Mahdi Lamb</b></sub></a><br /><a href="#infra-mahdilamb" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
281
231
  </tr>
282
232
  <tr>
283
- <td align="center" valign="top" width="14.28%"><a href="https://www.jacobbieker.com"><img src="https://avatars.githubusercontent.com/u/7170359?v=4?s=100" width="100px;" alt="Jacob Prince-Bieker"/><br /><sub><b>Jacob Prince-Bieker</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=jacobbieker" title="Code">💻</a></td>
284
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/codderrrrr"><img src="https://avatars.githubusercontent.com/u/149995852?v=4?s=100" width="100px;" alt="codderrrrr"/><br /><sub><b>codderrrrr</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=codderrrrr" title="Code">💻</a></td>
285
- <td align="center" valign="top" width="14.28%"><a href="https://chrisxbriggs.com"><img src="https://avatars.githubusercontent.com/u/617309?v=4?s=100" width="100px;" alt="Chris Briggs"/><br /><sub><b>Chris Briggs</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=confusedmatrix" title="Code">💻</a></td>
286
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/tmi"><img src="https://avatars.githubusercontent.com/u/147159?v=4?s=100" width="100px;" alt="tmi"/><br /><sub><b>tmi</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=tmi" title="Code">💻</a></td>
287
- <td align="center" valign="top" width="14.28%"><a href="https://rdrn.me/"><img src="https://avatars.githubusercontent.com/u/19817302?v=4?s=100" width="100px;" alt="Chris Arderne"/><br /><sub><b>Chris Arderne</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=carderne" title="Code">💻</a></td>
288
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Dakshbir"><img src="https://avatars.githubusercontent.com/u/144359831?v=4?s=100" width="100px;" alt="Dakshbir"/><br /><sub><b>Dakshbir</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=Dakshbir" title="Code">💻</a></td>
289
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/MAYANK12SHARMA"><img src="https://avatars.githubusercontent.com/u/145884197?v=4?s=100" width="100px;" alt="MAYANK SHARMA"/><br /><sub><b>MAYANK SHARMA</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=MAYANK12SHARMA" title="Code">💻</a></td>
233
+ <td align="center" valign="top" width="14.28%"><a href="https://www.jacobbieker.com"><img src="https://avatars.githubusercontent.com/u/7170359?v=4?s=100" width="100px;" alt="Jacob Prince-Bieker"/><br /><sub><b>Jacob Prince-Bieker</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=jacobbieker" title="Code">💻</a></td>
234
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/codderrrrr"><img src="https://avatars.githubusercontent.com/u/149995852?v=4?s=100" width="100px;" alt="codderrrrr"/><br /><sub><b>codderrrrr</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=codderrrrr" title="Code">💻</a></td>
235
+ <td align="center" valign="top" width="14.28%"><a href="https://chrisxbriggs.com"><img src="https://avatars.githubusercontent.com/u/617309?v=4?s=100" width="100px;" alt="Chris Briggs"/><br /><sub><b>Chris Briggs</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=confusedmatrix" title="Code">💻</a></td>
236
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/tmi"><img src="https://avatars.githubusercontent.com/u/147159?v=4?s=100" width="100px;" alt="tmi"/><br /><sub><b>tmi</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=tmi" title="Code">💻</a></td>
237
+ <td align="center" valign="top" width="14.28%"><a href="https://rdrn.me/"><img src="https://avatars.githubusercontent.com/u/19817302?v=4?s=100" width="100px;" alt="Chris Arderne"/><br /><sub><b>Chris Arderne</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=carderne" title="Code">💻</a></td>
238
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Dakshbir"><img src="https://avatars.githubusercontent.com/u/144359831?v=4?s=100" width="100px;" alt="Dakshbir"/><br /><sub><b>Dakshbir</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=Dakshbir" title="Code">💻</a></td>
239
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/MAYANK12SHARMA"><img src="https://avatars.githubusercontent.com/u/145884197?v=4?s=100" width="100px;" alt="MAYANK SHARMA"/><br /><sub><b>MAYANK SHARMA</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=MAYANK12SHARMA" title="Code">💻</a></td>
290
240
  </tr>
291
241
  <tr>
292
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/lambaaryan011"><img src="https://avatars.githubusercontent.com/u/153702847?v=4?s=100" width="100px;" alt="aryan lamba "/><br /><sub><b>aryan lamba </b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=lambaaryan011" title="Code">💻</a></td>
293
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/michael-gendy"><img src="https://avatars.githubusercontent.com/u/64384201?v=4?s=100" width="100px;" alt="michael-gendy"/><br /><sub><b>michael-gendy</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=michael-gendy" title="Code">💻</a></td>
294
- <td align="center" valign="top" width="14.28%"><a href="https://adityasuthar.github.io/"><img src="https://avatars.githubusercontent.com/u/95685363?v=4?s=100" width="100px;" alt="Aditya Suthar"/><br /><sub><b>Aditya Suthar</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=adityasuthar" title="Code">💻</a></td>
295
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/markus-kreft"><img src="https://avatars.githubusercontent.com/u/129367085?v=4?s=100" width="100px;" alt="Markus Kreft"/><br /><sub><b>Markus Kreft</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=markus-kreft" title="Code">💻</a></td>
242
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/lambaaryan011"><img src="https://avatars.githubusercontent.com/u/153702847?v=4?s=100" width="100px;" alt="aryan lamba "/><br /><sub><b>aryan lamba </b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=lambaaryan011" title="Code">💻</a></td>
243
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/michael-gendy"><img src="https://avatars.githubusercontent.com/u/64384201?v=4?s=100" width="100px;" alt="michael-gendy"/><br /><sub><b>michael-gendy</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=michael-gendy" title="Code">💻</a></td>
244
+ <td align="center" valign="top" width="14.28%"><a href="https://adityasuthar.github.io/"><img src="https://avatars.githubusercontent.com/u/95685363?v=4?s=100" width="100px;" alt="Aditya Suthar"/><br /><sub><b>Aditya Suthar</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=adityasuthar" title="Code">💻</a></td>
245
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/markus-kreft"><img src="https://avatars.githubusercontent.com/u/129367085?v=4?s=100" width="100px;" alt="Markus Kreft"/><br /><sub><b>Markus Kreft</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=markus-kreft" title="Code">💻</a></td>
296
246
  <td align="center" valign="top" width="14.28%"><a href="http://jack-kelly.com"><img src="https://avatars.githubusercontent.com/u/460756?v=4?s=100" width="100px;" alt="Jack Kelly"/><br /><sub><b>Jack Kelly</b></sub></a><br /><a href="#ideas-JackKelly" title="Ideas, Planning, & Feedback">🤔</a></td>
247
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/zaryab-ali"><img src="https://avatars.githubusercontent.com/u/85732412?v=4?s=100" width="100px;" alt="zaryab-ali"/><br /><sub><b>zaryab-ali</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=zaryab-ali" title="Code">💻</a></td>
248
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Lex-Ashu"><img src="https://avatars.githubusercontent.com/u/181084934?v=4?s=100" width="100px;" alt="Lex-Ashu"/><br /><sub><b>Lex-Ashu</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=Lex-Ashu" title="Code">💻</a></td>
297
249
  </tr>
298
250
  </tbody>
299
251
  </table>
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PVNet
3
- Version: 5.0.1
3
+ Version: 5.2.3
4
4
  Summary: PVNet
5
5
  Author-email: Peter Dudfield <info@openclimatefix.org>
6
- Requires-Python: >=3.10
6
+ Requires-Python: <3.14,>=3.11
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
- Requires-Dist: ocf-data-sampler>=0.2.32
9
+ Requires-Dist: ocf-data-sampler>=0.6.0
10
10
  Requires-Dist: numpy
11
11
  Requires-Dist: pandas
12
12
  Requires-Dist: matplotlib
@@ -14,7 +14,6 @@ Requires-Dist: xarray
14
14
  Requires-Dist: h5netcdf
15
15
  Requires-Dist: torch>=2.0.0
16
16
  Requires-Dist: lightning
17
- Requires-Dist: torchvision
18
17
  Requires-Dist: typer
19
18
  Requires-Dist: sqlalchemy
20
19
  Requires-Dist: fsspec[s3]
@@ -30,7 +29,7 @@ Dynamic: license-file
30
29
 
31
30
  # PVNet
32
31
  <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
33
- [![All Contributors](https://img.shields.io/badge/all_contributors-19-orange.svg?style=flat-square)](#contributors-)
32
+ [![All Contributors](https://img.shields.io/badge/all_contributors-21-orange.svg?style=flat-square)](#contributors-)
34
33
  <!-- ALL-CONTRIBUTORS-BADGE:END -->
35
34
 
36
35
  [![tags badge](https://img.shields.io/github/v/tag/openclimatefix/PVNet?include_prereleases&sort=semver&color=FFAC5F)](https://github.com/openclimatefix/PVNet/tags)
@@ -143,120 +142,71 @@ pip install -e <PATH-TO-ocf-data-sampler-REPO>
143
142
  If you install the local version of `ocf-data-sampler` that is more recent than the version
144
143
  specified in `PVNet` it is not guarenteed to function properly with this library.
145
144
 
146
- ## Pre-saving samples of data for training/validation of PVNet
147
145
 
148
- PVNet contains a script for generating samples of data suitable for training the PVNet models. To run the script you will need to make some modifications to the datamodule configuration.
146
+ ### Set up and config example for streaming
149
147
 
150
- Make sure you have copied the example configs (as already stated above):
151
- ```
152
- cp -r configs.example configs
153
- ```
154
-
155
- ### Set up and config example for sample creation
156
-
157
- We will use the following example config file for creating samples: `/PVNet/configs/datamodule/configuration/example_configuration.yaml`. Ensure that the file paths are set to the correct locations in `example_configuration.yaml`: search for `PLACEHOLDER` to find where to input the location of the files. You will need to comment out or delete the parts of `example_configuration.yaml` pertaining to the data you are not using.
158
-
159
-
160
- When creating samples, an additional datamodule config located in `PVNet/configs/datamodule` is passed into the sample creation script: `streamed_samples.yaml`. Like before, a placeholder variable is used when specifying which configuration to use:
161
-
162
- ```yaml
163
- configuration: "PLACEHOLDER.yaml"
164
- ```
148
+ We will use the following example config file to describe your data sources: `/PVNet/configs/datamodule/configuration/example_configuration.yaml`. Ensure that the file paths are set to the correct locations in `example_configuration.yaml`: search for `PLACEHOLDER` to find where to input the location of the files. Delete or comment the parts for data you are not using.
165
149
 
166
- This should be given the whole path to the config on your local machine, for example:
150
+ At run time, the datamodule config `PVNet/configs/datamodule/streamed_samples.yaml` points to your chosen configuration file:
167
151
 
168
- ```yaml
169
152
  configuration: "/FULL-PATH-TO-REPO/PVNet/configs/datamodule/configuration/example_configuration.yaml"
170
- ```
171
-
172
- Where `FULL-PATH-TO-REPO` represent the whole path to the PVNet repo on your local machine.
173
-
174
- This is also where you can update the train, val & test periods to cover the data you have access to.
175
-
176
- ### Running the sample creation script
177
153
 
178
- Run the `save_samples.py` script to create samples with the parameters specified in the datamodule config (`streamed_samples.yaml` in this example):
179
-
180
- ```bash
181
- python scripts/save_samples.py
182
- ```
183
- PVNet uses
184
- [hydra](https://hydra.cc/) which enables us to pass variables via the command
185
- line that will override the configuration defined in the `./configs` directory, like this:
186
-
187
- ```bash
188
- python scripts/save_samples.py datamodule=streamed_samples datamodule.sample_output_dir="./output" datamodule.num_train_samples=10 datamodule.num_val_samples=5
189
- ```
190
-
191
- `scripts/save_samples.py` needs a config under `PVNet/configs/datamodule`. You can adapt `streamed_samples.yaml` or create your own in the same folder.
154
+ You can also update train/val/test time ranges here to match the period you have access to.
192
155
 
193
156
  If downloading private data from a GCP bucket make sure to authenticate gcloud (the public satellite data does not need authentication):
194
157
 
195
- ```
196
158
  gcloud auth login
197
- ```
198
-
199
- Files stored in multiple locations can be added as a list. For example, in the `example_configuration.yaml` file we can supply a path to satellite data stored on a bucket:
200
-
201
- ```yaml
202
- satellite:
203
- zarr_path: gs://solar-pv-nowcasting-data/satellite/EUMETSAT/SEVIRI_RSS/v4/2020_nonhrv.zarr
204
- ```
205
159
 
206
- Or to satellite data hosted by Google:
160
+ You can provide multiple storage locations as a list. For example:
207
161
 
208
- ```yaml
209
162
  satellite:
210
- zarr_path:
211
- - "gs://public-datasets-eumetsat-solar-forecasting/satellite/EUMETSAT/SEVIRI_RSS/v4/2020_nonhrv.zarr"
212
- - "gs://public-datasets-eumetsat-solar-forecasting/satellite/EUMETSAT/SEVIRI_RSS/v4/2021_nonhrv.zarr"
213
- ```
163
+ zarr_path:
164
+ - "gs://public-datasets-eumetsat-solar-forecasting/satellite/EUMETSAT/SEVIRI_RSS/v4/2020_nonhrv.zarr"
165
+ - "gs://public-datasets-eumetsat-solar-forecasting/satellite/EUMETSAT/SEVIRI_RSS/v4/2021_nonhrv.zarr"
214
166
 
215
- ocf-data-sampler is currently set up to use 11 channels from the satellite data, the 12th of which is HRV and is not included in these.
167
+ `ocf-data-sampler` is currently set up to use 11 channels from the satellite data (the 12th, HRV, is not used).
216
168
 
169
+ ⚠️ NB: Our publicly accessible satellite data is currently saved with a blosc2 compressor, which is not supported by the tensorstore backend PVNet relies on now. We are in the process of updating this; for now, the paths above cannot be used with this codebase.
217
170
 
218
171
  ### Training PVNet
219
172
 
220
- How PVNet is run is determined by the extensive configuration in the config
221
- files. The configs stored in `PVNet/configs.example` should work with samples created using the steps and sample creation config mentioned above.
173
+ How PVNet is run is determined by the configuration files. The example configs in `PVNet/configs.example` work with **streamed_samples** using `datamodule/streamed_samples.yaml`.
222
174
 
223
- Make sure to update the following config files before training your model:
175
+ Update the following before training:
224
176
 
225
- 1. In `configs/datamodule/presaved_samples.yaml`:
226
- - update `sample_dir` to point to the directory you stored your samples in during sample creation
227
- 2. In `configs/model/late_fusion.yaml`:
228
- - update the list of encoders to reflect the data sources you are using. If you are using different NWP sources, the encoders for these should follow the same structure with two important updates:
229
- - `in_channels`: number of variables your NWP source supplies
230
- - `image_size_pixels`: spatial crop of your NWP data. It depends on the spatial resolution of your NWP; should match `image_size_pixels_height` and/or `image_size_pixels_width` in `datamodule/configuration/site_example_configuration.yaml` for the NWP, unless transformations such as coarsening was applied (e. g. as for ECMWF data)
231
- 3. In `configs/trainer/default.yaml`:
232
- - set `accelerator: 0` if running on a system without a supported GPU
177
+ 1. In `configs/model/late_fusion.yaml`:
178
+ - Update the list of encoders to match the data sources you are using. For different NWP sources, keep the same structure but ensure:
179
+ - `in_channels`: the number of variables your NWP source supplies
180
+ - `image_size_pixels`: spatial crop matching your NWP resolution and the settings in your datamodule configuration (unless you coarsened, e.g. for ECMWF)
181
+ 2. In `configs/trainer/default.yaml`:
182
+ - Set `accelerator: 0` if running on a system without a supported GPU
183
+ 3. In `configs/datamodule/streamed_samples.yaml`:
184
+ - Point `configuration:` to your local `example_configuration.yaml` (or your custom one)
185
+ - Adjust the train/val/test time ranges to your available data
233
186
 
234
- If creating copies of the config files instead of modifying existing ones, update `defaults` in the main `./configs/config.yaml` file to use
235
- your customised config files:
187
+ If you create custom config files, update the main `./configs/config.yaml` defaults:
236
188
 
237
- ```yaml
238
189
  defaults:
239
190
  - trainer: default.yaml
240
191
  - model: late_fusion.yaml
241
- - datamodule: presaved_samples.yaml
192
+ - datamodule: streamed_samples.yaml
242
193
  - callbacks: null
243
194
  - experiment: null
244
195
  - hparams_search: null
245
196
  - hydra: default.yaml
246
- ```
247
197
 
248
- Assuming you ran the `save_samples.py` script to generate some presaved train and
249
- val data samples, you can now train PVNet by running:
198
+ Now train PVNet:
250
199
 
251
- ```
252
200
  python run.py
253
- ```
201
+
202
+ You can override any setting with Hydra, e.g.:
203
+
204
+ python run.py datamodule=streamed_samples datamodule.configuration="/FULL-PATH/PVNet/configs/datamodule/configuration/example_configuration.yaml"
254
205
 
255
206
  ## Backtest
256
207
 
257
208
  If you have successfully trained a PVNet model and have a saved model checkpoint you can create a backtest using this, e.g. forecasts on historical data to evaluate forecast accuracy/skill. This can be done by running one of the scripts in this repo such as [the UK GSP backtest script](scripts/backtest_uk_gsp.py) or the [the pv site backtest script](scripts/backtest_sites.py), further info on how to run these are in each backtest file.
258
209
 
259
-
260
210
  ## Testing
261
211
 
262
212
  You can use `python -m pytest tests` to run tests
@@ -271,29 +221,31 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
271
221
  <table>
272
222
  <tbody>
273
223
  <tr>
274
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/felix-e-h-p"><img src="https://avatars.githubusercontent.com/u/137530077?v=4?s=100" width="100px;" alt="Felix"/><br /><sub><b>Felix</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=felix-e-h-p" title="Code">💻</a></td>
275
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Sukh-P"><img src="https://avatars.githubusercontent.com/u/42407101?v=4?s=100" width="100px;" alt="Sukhil Patel"/><br /><sub><b>Sukhil Patel</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=Sukh-P" title="Code">💻</a></td>
276
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/dfulu"><img src="https://avatars.githubusercontent.com/u/41546094?v=4?s=100" width="100px;" alt="James Fulton"/><br /><sub><b>James Fulton</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=dfulu" title="Code">💻</a></td>
277
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/AUdaltsova"><img src="https://avatars.githubusercontent.com/u/43303448?v=4?s=100" width="100px;" alt="Alexandra Udaltsova"/><br /><sub><b>Alexandra Udaltsova</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=AUdaltsova" title="Code">💻</a> <a href="https://github.com/openclimatefix/PVNet/pulls?q=is%3Apr+reviewed-by%3AAUdaltsova" title="Reviewed Pull Requests">👀</a></td>
278
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/zakwatts"><img src="https://avatars.githubusercontent.com/u/47150349?v=4?s=100" width="100px;" alt="Megawattz"/><br /><sub><b>Megawattz</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=zakwatts" title="Code">💻</a></td>
279
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/peterdudfield"><img src="https://avatars.githubusercontent.com/u/34686298?v=4?s=100" width="100px;" alt="Peter Dudfield"/><br /><sub><b>Peter Dudfield</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=peterdudfield" title="Code">💻</a></td>
224
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/felix-e-h-p"><img src="https://avatars.githubusercontent.com/u/137530077?v=4?s=100" width="100px;" alt="Felix"/><br /><sub><b>Felix</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=felix-e-h-p" title="Code">💻</a></td>
225
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Sukh-P"><img src="https://avatars.githubusercontent.com/u/42407101?v=4?s=100" width="100px;" alt="Sukhil Patel"/><br /><sub><b>Sukhil Patel</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=Sukh-P" title="Code">💻</a></td>
226
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/dfulu"><img src="https://avatars.githubusercontent.com/u/41546094?v=4?s=100" width="100px;" alt="James Fulton"/><br /><sub><b>James Fulton</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=dfulu" title="Code">💻</a></td>
227
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/AUdaltsova"><img src="https://avatars.githubusercontent.com/u/43303448?v=4?s=100" width="100px;" alt="Alexandra Udaltsova"/><br /><sub><b>Alexandra Udaltsova</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=AUdaltsova" title="Code">💻</a> <a href="https://github.com/openclimatefix/pvnet/pulls?q=is%3Apr+reviewed-by%3AAUdaltsova" title="Reviewed Pull Requests">👀</a></td>
228
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/zakwatts"><img src="https://avatars.githubusercontent.com/u/47150349?v=4?s=100" width="100px;" alt="Megawattz"/><br /><sub><b>Megawattz</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=zakwatts" title="Code">💻</a></td>
229
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/peterdudfield"><img src="https://avatars.githubusercontent.com/u/34686298?v=4?s=100" width="100px;" alt="Peter Dudfield"/><br /><sub><b>Peter Dudfield</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=peterdudfield" title="Code">💻</a></td>
280
230
  <td align="center" valign="top" width="14.28%"><a href="https://github.com/mahdilamb"><img src="https://avatars.githubusercontent.com/u/4696915?v=4?s=100" width="100px;" alt="Mahdi Lamb"/><br /><sub><b>Mahdi Lamb</b></sub></a><br /><a href="#infra-mahdilamb" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a></td>
281
231
  </tr>
282
232
  <tr>
283
- <td align="center" valign="top" width="14.28%"><a href="https://www.jacobbieker.com"><img src="https://avatars.githubusercontent.com/u/7170359?v=4?s=100" width="100px;" alt="Jacob Prince-Bieker"/><br /><sub><b>Jacob Prince-Bieker</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=jacobbieker" title="Code">💻</a></td>
284
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/codderrrrr"><img src="https://avatars.githubusercontent.com/u/149995852?v=4?s=100" width="100px;" alt="codderrrrr"/><br /><sub><b>codderrrrr</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=codderrrrr" title="Code">💻</a></td>
285
- <td align="center" valign="top" width="14.28%"><a href="https://chrisxbriggs.com"><img src="https://avatars.githubusercontent.com/u/617309?v=4?s=100" width="100px;" alt="Chris Briggs"/><br /><sub><b>Chris Briggs</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=confusedmatrix" title="Code">💻</a></td>
286
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/tmi"><img src="https://avatars.githubusercontent.com/u/147159?v=4?s=100" width="100px;" alt="tmi"/><br /><sub><b>tmi</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=tmi" title="Code">💻</a></td>
287
- <td align="center" valign="top" width="14.28%"><a href="https://rdrn.me/"><img src="https://avatars.githubusercontent.com/u/19817302?v=4?s=100" width="100px;" alt="Chris Arderne"/><br /><sub><b>Chris Arderne</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=carderne" title="Code">💻</a></td>
288
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/Dakshbir"><img src="https://avatars.githubusercontent.com/u/144359831?v=4?s=100" width="100px;" alt="Dakshbir"/><br /><sub><b>Dakshbir</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=Dakshbir" title="Code">💻</a></td>
289
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/MAYANK12SHARMA"><img src="https://avatars.githubusercontent.com/u/145884197?v=4?s=100" width="100px;" alt="MAYANK SHARMA"/><br /><sub><b>MAYANK SHARMA</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=MAYANK12SHARMA" title="Code">💻</a></td>
233
+ <td align="center" valign="top" width="14.28%"><a href="https://www.jacobbieker.com"><img src="https://avatars.githubusercontent.com/u/7170359?v=4?s=100" width="100px;" alt="Jacob Prince-Bieker"/><br /><sub><b>Jacob Prince-Bieker</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=jacobbieker" title="Code">💻</a></td>
234
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/codderrrrr"><img src="https://avatars.githubusercontent.com/u/149995852?v=4?s=100" width="100px;" alt="codderrrrr"/><br /><sub><b>codderrrrr</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=codderrrrr" title="Code">💻</a></td>
235
+ <td align="center" valign="top" width="14.28%"><a href="https://chrisxbriggs.com"><img src="https://avatars.githubusercontent.com/u/617309?v=4?s=100" width="100px;" alt="Chris Briggs"/><br /><sub><b>Chris Briggs</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=confusedmatrix" title="Code">💻</a></td>
236
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/tmi"><img src="https://avatars.githubusercontent.com/u/147159?v=4?s=100" width="100px;" alt="tmi"/><br /><sub><b>tmi</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=tmi" title="Code">💻</a></td>
237
+ <td align="center" valign="top" width="14.28%"><a href="https://rdrn.me/"><img src="https://avatars.githubusercontent.com/u/19817302?v=4?s=100" width="100px;" alt="Chris Arderne"/><br /><sub><b>Chris Arderne</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=carderne" title="Code">💻</a></td>
238
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Dakshbir"><img src="https://avatars.githubusercontent.com/u/144359831?v=4?s=100" width="100px;" alt="Dakshbir"/><br /><sub><b>Dakshbir</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=Dakshbir" title="Code">💻</a></td>
239
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/MAYANK12SHARMA"><img src="https://avatars.githubusercontent.com/u/145884197?v=4?s=100" width="100px;" alt="MAYANK SHARMA"/><br /><sub><b>MAYANK SHARMA</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=MAYANK12SHARMA" title="Code">💻</a></td>
290
240
  </tr>
291
241
  <tr>
292
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/lambaaryan011"><img src="https://avatars.githubusercontent.com/u/153702847?v=4?s=100" width="100px;" alt="aryan lamba "/><br /><sub><b>aryan lamba </b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=lambaaryan011" title="Code">💻</a></td>
293
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/michael-gendy"><img src="https://avatars.githubusercontent.com/u/64384201?v=4?s=100" width="100px;" alt="michael-gendy"/><br /><sub><b>michael-gendy</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=michael-gendy" title="Code">💻</a></td>
294
- <td align="center" valign="top" width="14.28%"><a href="https://adityasuthar.github.io/"><img src="https://avatars.githubusercontent.com/u/95685363?v=4?s=100" width="100px;" alt="Aditya Suthar"/><br /><sub><b>Aditya Suthar</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=adityasuthar" title="Code">💻</a></td>
295
- <td align="center" valign="top" width="14.28%"><a href="https://github.com/markus-kreft"><img src="https://avatars.githubusercontent.com/u/129367085?v=4?s=100" width="100px;" alt="Markus Kreft"/><br /><sub><b>Markus Kreft</b></sub></a><br /><a href="https://github.com/openclimatefix/PVNet/commits?author=markus-kreft" title="Code">💻</a></td>
242
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/lambaaryan011"><img src="https://avatars.githubusercontent.com/u/153702847?v=4?s=100" width="100px;" alt="aryan lamba "/><br /><sub><b>aryan lamba </b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=lambaaryan011" title="Code">💻</a></td>
243
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/michael-gendy"><img src="https://avatars.githubusercontent.com/u/64384201?v=4?s=100" width="100px;" alt="michael-gendy"/><br /><sub><b>michael-gendy</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=michael-gendy" title="Code">💻</a></td>
244
+ <td align="center" valign="top" width="14.28%"><a href="https://adityasuthar.github.io/"><img src="https://avatars.githubusercontent.com/u/95685363?v=4?s=100" width="100px;" alt="Aditya Suthar"/><br /><sub><b>Aditya Suthar</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=adityasuthar" title="Code">💻</a></td>
245
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/markus-kreft"><img src="https://avatars.githubusercontent.com/u/129367085?v=4?s=100" width="100px;" alt="Markus Kreft"/><br /><sub><b>Markus Kreft</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=markus-kreft" title="Code">💻</a></td>
296
246
  <td align="center" valign="top" width="14.28%"><a href="http://jack-kelly.com"><img src="https://avatars.githubusercontent.com/u/460756?v=4?s=100" width="100px;" alt="Jack Kelly"/><br /><sub><b>Jack Kelly</b></sub></a><br /><a href="#ideas-JackKelly" title="Ideas, Planning, & Feedback">🤔</a></td>
247
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/zaryab-ali"><img src="https://avatars.githubusercontent.com/u/85732412?v=4?s=100" width="100px;" alt="zaryab-ali"/><br /><sub><b>zaryab-ali</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=zaryab-ali" title="Code">💻</a></td>
248
+ <td align="center" valign="top" width="14.28%"><a href="https://github.com/Lex-Ashu"><img src="https://avatars.githubusercontent.com/u/181084934?v=4?s=100" width="100px;" alt="Lex-Ashu"/><br /><sub><b>Lex-Ashu</b></sub></a><br /><a href="https://github.com/openclimatefix/pvnet/commits?author=Lex-Ashu" title="Code">💻</a></td>
297
249
  </tr>
298
250
  </tbody>
299
251
  </table>
@@ -7,13 +7,10 @@ PVNet.egg-info/dependency_links.txt
7
7
  PVNet.egg-info/requires.txt
8
8
  PVNet.egg-info/top_level.txt
9
9
  pvnet/__init__.py
10
+ pvnet/datamodule.py
10
11
  pvnet/load_model.py
11
12
  pvnet/optimizers.py
12
13
  pvnet/utils.py
13
- pvnet/data/__init__.py
14
- pvnet/data/base_datamodule.py
15
- pvnet/data/site_datamodule.py
16
- pvnet/data/uk_regional_datamodule.py
17
14
  pvnet/models/__init__.py
18
15
  pvnet/models/base_model.py
19
16
  pvnet/models/ensemble.py
@@ -33,4 +30,5 @@ pvnet/training/__init__.py
33
30
  pvnet/training/lightning_module.py
34
31
  pvnet/training/plots.py
35
32
  pvnet/training/train.py
33
+ tests/test_datamodule.py
36
34
  tests/test_end2end.py
@@ -1,4 +1,4 @@
1
- ocf-data-sampler>=0.2.32
1
+ ocf-data-sampler>=0.6.0
2
2
  numpy
3
3
  pandas
4
4
  matplotlib
@@ -6,7 +6,6 @@ xarray
6
6
  h5netcdf
7
7
  torch>=2.0.0
8
8
  lightning
9
- torchvision
10
9
  typer
11
10
  sqlalchemy
12
11
  fsspec[s3]