Download make_data.py from EugeneBoondock/sponge-compsearch: direct link, hf CLI and curl.
- Browser
- Download file 2.37 kB
-
https://huggingface.co/EugeneBoondock/sponge-compsearch/resolve/main/make_data.py
- Command line
-
hf download hf://EugeneBoondock/sponge-compsearch/make_data.py
-
curl -L -o make_data.py https://huggingface.co/EugeneBoondock/sponge-compsearch/resolve/main/make_data.py
2.37 kB
| """Build the two byte streams the search needs: one to search on, one held out. | |
| Default source is text already on this machine (Python's own standard library), so no | |
| download is needed. For a standard benchmark instead, download enwik8 yourself | |
| (http://mattmahoney.net/dc/enwik8.zip, 36 MB), unzip it, and pass --from-file enwik8. | |
| python make_data.py # 1 MB search + 1 MB held out, local text | |
| python make_data.py --from-file enwik8 # same sizes, cut from enwik8 | |
| python make_data.py --size-mb 4 # bigger streams (slower evaluations) | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import random | |
| import sysconfig | |
| from pathlib import Path | |
| MB = 1024 * 1024 | |
| MAX_SIZE_MB = 64 | |
| def gather_local_text(root: Path, wanted_bytes: int) -> bytes: | |
| files = sorted(path for path in root.rglob("*.py") if "test" not in path.parts) | |
| random.Random(0).shuffle(files) | |
| chunks, total = [], 0 | |
| for path in files: | |
| try: | |
| chunk = path.read_bytes() | |
| except OSError: | |
| continue | |
| chunks.append(chunk) | |
| total += len(chunk) | |
| if total >= wanted_bytes: | |
| break | |
| return b"".join(chunks) | |
| def main() -> int: | |
| parser = argparse.ArgumentParser(description=__doc__, | |
| formatter_class=argparse.RawDescriptionHelpFormatter) | |
| parser.add_argument("--from-file", help="cut both streams from this file") | |
| parser.add_argument("--size-mb", type=float, default=1.0, help="size of each stream") | |
| parser.add_argument("--out", default="data") | |
| args = parser.parse_args() | |
| if not 0 < args.size_mb <= MAX_SIZE_MB: | |
| parser.error(f"--size-mb must be between 0 and {MAX_SIZE_MB}") | |
| size = int(args.size_mb * MB) | |
| if args.from_file: | |
| raw = Path(args.from_file).read_bytes()[: 2 * size] | |
| else: | |
| raw = gather_local_text(Path(sysconfig.get_paths()["stdlib"]), 2 * size) | |
| if len(raw) < 2 * size: | |
| parser.error(f"source has only {len(raw)} bytes; need {2 * size}") | |
| out = Path(args.out) | |
| out.mkdir(parents=True, exist_ok=True) | |
| (out / "search.bin").write_bytes(raw[:size]) | |
| (out / "holdout.bin").write_bytes(raw[size: 2 * size]) | |
| print(f"wrote {out / 'search.bin'} and {out / 'holdout.bin'} ({size} bytes each)") | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |