"""Download released source files with retries and streamed checksum verification.""" import argparse import hashlib from pathlib import Path import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry p=argparse.ArgumentParser() p.add_argument('dataset',choices=['tahoe','sciplex']) p.add_argument('--output',required=True) p.add_argument('--shards',type=int,default=2) p.add_argument('--indices',type=int,nargs='+',help='Explicit official Tahoe shard indices') a=p.parse_args() out=Path(a.output);out.mkdir(parents=True,exist_ok=True) s=requests.Session() s.mount('https://',HTTPAdapter(max_retries=Retry(total=5,backoff_factor=2,status_forcelist=[429,500,502,503,504],respect_retry_after_header=True))) base='https://huggingface.co/datasets/tahoebio/Tahoe-100M/resolve/main/' files=[(base+'metadata/'+n+'.parquet',n+'.parquet',None) for n in ['sample_metadata','gene_metadata','drug_metadata']] if a.dataset=='tahoe': files += [(base+f'data/train-{i:05d}-of-03388.parquet',f'train-{i:05d}-of-03388.parquet',None) for i in (a.indices if a.indices is not None else range(a.shards))] else: files += [('https://zenodo.org/records/13350497/files/SrivatsanTrapnell2020_sciplex3.h5ad?download=1','sciplex3.h5ad','c9e70629505d98c7ca1a837f62b14e89')] for url,name,expected in files: path=out/name if path.exists(): if expected and hashlib.file_digest(path.open('rb'),'md5').hexdigest()!=expected: raise ValueError(f'Checksum mismatch for {name}') print(f'Using {path}',flush=True);continue temp=path.with_suffix(path.suffix+'.part') with s.get(url,stream=True,timeout=(30,180)) as r: r.raise_for_status() with temp.open('wb') as f: for block in r.iter_content(8*1024*1024):f.write(block) if expected: with temp.open('rb') as f:digest=hashlib.file_digest(f,'md5').hexdigest() if digest!=expected:raise ValueError(f'Checksum mismatch for {name}') temp.replace(path) print(f'Downloaded {path} ({path.stat().st_size:,} bytes)',flush=True)