Source code for geopfa.datasets

"""Functions to fetch sample data for geoPFA."""

from pathlib import Path
import shutil

import pooch
from pooch.processors import Unzip


dogbert_newberry = pooch.create(
    path=pooch.os_cache("geoPFA"),
    base_url="https://github.com/NatLabRockies/geoPFA/releases/download/{version}/",
    version="v0.0.20",
    registry={
        "newberry_tutorial_data.zip": "sha256:d9168678b1e63f52a2e73b18d8b26e93ac502b3025e197391ccb26f3081f6c4c",
    },
)


[docs] def setup_newberry_tutorial_data(target_dir: Path) -> None: """ Download and extract the Newberry tutorial dataset into a target directory. The contents of the zip are copied into `target_dir` exactly as structured. """ filename = "newberry_tutorial_data.zip" target_dir = Path(target_dir) target_dir.mkdir(parents=True, exist_ok=True) extracted_files = dogbert_newberry.fetch(filename, processor=Unzip()) if not extracted_files: raise RuntimeError(f"No files extracted from {filename}") extracted_paths = [Path(p).resolve() for p in extracted_files] # Find the common extraction root of all extracted files common_root = Path( __import__("os").path.commonpath([str(p) for p in extracted_paths]) ) # If the zip contains a single top-level folder (for example "data/"), # unwrap that folder so we do not create data/data/. top_level_items = list(common_root.iterdir()) if len(top_level_items) == 1 and top_level_items[0].is_dir(): source_dir = top_level_items[0] else: source_dir = common_root # Copy the full directory structure into target_dir for item in source_dir.iterdir(): dest = target_dir / item.name if dest.exists(): continue if item.is_dir(): shutil.copytree(item, dest) else: shutil.copy2(item, dest) print(f"Data extracted to: {target_dir}")