README / README.md
klamike's picture
Update README.md
a3c2bb4 verified
|
Raw
History Blame Contribute Delete
3.59 kB
---
title: README
emoji: 🌍
colorFrom: indigo
colorTo: red
sdk: static
pinned: false
---
# PGLearn Datasets
This HuggingFace organization hosts the PGLearn datasets, described in https://arxiv.org/abs/2505.22825.
| Collection | Link | #feasible | #samples |
|------------------------------|---------------------------------------------------------------|-----------|----------|
| Small (#buses ≤ 1000) | https://huggingface.co/collections/PGLearn/pglearn-small | ~5.749M | 6M |
| Medium (#buses ≤ 5000) | https://huggingface.co/collections/PGLearn/pglearn-medium | ~1.573M | 1.75M |
| Large (#buses ≤ 10000) | https://huggingface.co/collections/PGLearn/pglearn-large | ~253.6K | 300K |
| Extra-Large (#buses > 10000) | https://huggingface.co/collections/PGLearn/pglearn-extralarge | ~69.9K | 75K |
| N-1 contingency cases | https://huggingface.co/collections/PGLearn/pglearn-n-1 | ~3.575M | 4.2M |
## Citation
```bibtex
@article{klamkin2025pglearn,
title={PGLearn--An Open-Source Learning Toolkit for Optimal Power Flow},
author={Klamkin, Michael and Tanneau, Mathieu and Van Hentenryck, Pascal},
journal={arXiv preprint arXiv:2505.22825},
year={2025}
}
```
## Instructions
<details> <summary>Click to open usage instructions. </summary>
The datasets are available in two formats: Parquet and HDF5.
- Parquet: Use the HuggingFace [datasets](https://github.com/huggingface/datasets) package as usual, see their documentation for further instructions.
- HDF5: Use the `snapshot_download` function from [huggingface_hub](https://github.com/huggingface/huggingface_hub):
```python
from huggingface_hub import snapshot_download
snapshot_download(
"PGLearn/PGLearn-Small-14_ieee",
repo_type="dataset",
local_dir="./14_ieee", # where to put it
revision="script", # IMPORTANT: grab the HDF5 files, not the parquet files
# you can set filters, e.g. if we only want the DC samples:
allow_patterns=[
"*/DCOPF/*", "*input*", "case.json.gz", "config.toml",
],
ignore_patterns=[
"infeasible/*"
],
)
```
Then, you can load them with `h5py`. Note that for some large cases, the dual solution data had to be split up into multiple files. The below helper can decompress and reconstruct these files:
```python
from pathlib import Path
import gzip, shutil
def open_maybe_gzip_cat(path: str | list):
if isinstance(path, list):
dest = Path(path[0]).parent.with_suffix(".h5")
if not dest.exists():
with open(dest, "wb") as dest_f:
for piece in path:
with open(piece, "rb") as piece_f:
shutil.copyfileobj(piece_f, dest_f)
shutil.rmtree(Path(piece).parent)
path = dest.as_posix()
return gzip.open(path, "rb") if path.endswith(".gz") else open(path, "rb")
primal = h5py.File(open_maybe_gzip_cat("data/SOCOPF/primal.h5.gz"))
dual = h5py.File(open_maybe_gzip_cat(
["data/SOCOPF/dual/xaa","data/SOCOPF/dual/xab","data/SOCOPF/dual/xac"]
), "r")
```
If using the HDF5 dataset more than once, it is recommended to pre-decompress the files. The following helper can do this:
```python
from pathlib import Path
import gzip, shutil
for src in Path("./14_ieee").rglob("*.h5.gz"):
dest = src.with_suffix("")
with gzip.open(src, "rb") as fsrc, open(dest, "wb") as fdest:
shutil.copyfileobj(fsrc, fdest)
src.unlink() # optional; delete the compressed files
```
</details>