Pytdc
Use Therapeutics Data Commons through the PyTDC Python package for registry discovery, approved dataset access, task-aware splits, evaluator metrics, benchmark groups, and bounded molecular-oracle workflows.
- Skill ID
- k-dense-ai/scientific-agent-skills/pytdc
- Publisher
- k-dense-ai
- Repository
- scientific-agent-skills
- Installs
- 0
- Files
- 11
- License
- MIT
- Requires
- Requires uv, CPython 3.11, PyTDC 1.1.15, and setuptools 80.9.0 for its legacy pkg_resources runtime import. Dataset, benchmark, checkpoint, and remote-oracle operations require network/storage review and explicit user approval.
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
k-dense-ai/scientific-agent-skills/pytdcInstalls these files- SKILL.md
- references/datasets.md
- references/oracles.md
- references/sources.md
- references/utilities.md
- scripts/_common.py
- scripts/benchmark_evaluation.py
- scripts/cache_audit.py
- scripts/discover_metadata.py
- scripts/load_and_split_data.py
- scripts/molecular_generation.py
What this skill tells the agent
PyTDC (Therapeutics Data Commons)
Use the official PyTDC distribution (import tdc) to discover therapeutic ML tasks, load approved datasets, apply task-appropriate splits, evaluate predictions, and work with curated benchmark groups. Prefer package metadata over copied dataset lists, and plan network/storage effects before constructing any loader.
Verified snapshot
- Research date: 2026-07-23
- PyPI stable: PyTDC 1.1.15, released 2025-03-31
- Package/source repository:
mims-harvard/TDC - Code license: MIT
- PyPI supplies only a source distribution and declares no
Requires-Python - The dependency graph makes CPython 3.11 the reproducible target used here:
cellxgene-census==1.15.0excludes Python 3.12, and PyTDC's constrained RDKit release has no CPython 3.13 wheel - PyTDC imports deprecated
pkg_resourcesat runtime. Setuptools 82 removed that module; pin the verified compatibility release setuptools 80.9.0. tdc.readthedocs.iostill identifies itself as TDC 0.4.1; use it as API cross-reference, not as release-version evidence- Upstream publishes no GitHub tags/releases or maintained changelog. Treat undocumented migration claims as uncertainty and verify against the installed 1.1.15 source/metadata.
See references/sources.md for dated evidence and known documentation conflicts.
Installation
Use an isolated CPython 3.11 environment and pin the reviewed snapshot:
uv venv --python 3.11 .venv-pytdc
uv pip install --dry-run --python .venv-pytdc/bin/python \
"setuptools==80.9.0" "PyTDC==1.1.15"
uv pip install --python .venv-pytdc/bin/python \
"setuptools==80.9.0" "PyTDC==1.1.15"The tested macOS ARM64 resolution installed 123 packages, including large scientific/ML dependencies, so the environment itself can transfer and occupy hundreds of megabytes before any dataset is downloaded. Review the dry run and available disk first. The direct pins identify the reviewed API snapshot; generate a platform-specific uv.lock in the user's project when every transitive version must also be frozen.
For an ephemeral command:
uv run --python 3.11 \
--with "setuptools==80.9.0" --with "PyTDC==1.1.15" \
python scripts/discover_metadata.py --kind tasksTo check for a newer release, inspect the PyPI release history at <https://pypi.org/project/pytdc/>. Before changing the pin, compare its source distribution, dependencies, official repository, task registries, and smoke tests; do not silently substitute the separate pytdc-nextml package.
Non-negotiable data and network policy
- Discover first. Reading
tdc.metadataor usingscripts/discover_metadata.pydoes not instantiate a loader or download data. - Plan second. Record the exact task/dataset, official task page, license, expected size, cache directory, split, metric, and reproducibility seed.
- Ask the user before downloading. Loader constructors fetch missing data. Some datasets and benchmark-group archives are large; model-backed oracles can fetch checkpoints; remote/docking oracles can transmit molecular structures.
- Execute only after approval. In bundled CLIs,
--executeacknowledges execution and--downloadis additionally required for MolGen corpora or supported oracle checkpoints. - Keep outputs bounded. Emit counts, schema, and small previews rather than full datasets, sequences, prediction arrays, or molecule corpora.
Cache and cost behavior
- Ordinary loaders default to
path="./data"and save files beneath that path. The bundled scripts instead default to explicit.pytdc-*directories. - Core downloads use Harvard Dataverse file endpoints when a local filename is absent. Newer resource classes may use other upstream services.
admet_group(path=...)and other benchmark-group constructors download and extract the group archive when<path>/<group>is absent.- Download-backed
Oracle(...)construction uses./oracleinternally. The bundled oracle CLI changes into a safe runtime directory before approved calls. - PyTDC 1.1.15 does not provide a universal cache quota, eviction policy, or dataset-wide checksum manifest. Use
scripts/cache_audit.pyand manage disk retention explicitly. - Network transfer, local storage, decompression, parsing, feature generation, docking, and external service calls can all incur time or monetary cost.
The PyTDC code is MIT. Dataset/task licenses are heterogeneous: official task pages include per-dataset terms ranging from Creative Commons licenses to non-commercial restrictions or “Not Specified.” Verify the exact dataset's page and original source terms before download, redistribution, publication, or commercial use. Cite both TDC and the original dataset.
Start with metadata-only discovery
From this skill directory:
uv run --python 3.11 --with "setuptools==80.9.0" --with "PyTDC==1.1.15" \
python scripts/discover_metadata.py --kind datasets --task ADME --limit 50
uv run --python 3.11 --with "setuptools==80.9.0" --with "PyTDC==1.1.15" \
python scripts/discover_metadata.py --kind benchmarks --limit 50
uv run --python 3.11 --with "setuptools==80.9.0" --with "PyTDC==1.1.15" \
python scripts/discover_metadata.py --kind evaluators --limit 100The package API is also metadata-only:
from tdc.utils import retrieve_dataset_names, retrieve_benchmark_names
adme_names = retrieve_dataset_names("ADME")
admet_benchmarks = retrieve_benchmark_names("admet_group")Use exact returned names. PyTDC performs fuzzy matching internally, but explicit matching avoids silently selecting the wrong dataset/oracle.
Dataset workflow
Plan a split without downloading:
uv run --python 3.11 --with "setuptools==80.9.0" --with "PyTDC==1.1.15" \
python scripts/load_and_split_data.py \
--task ADME --dataset Caco2_Wang --method scaffold \
--seed 42 --data-dir .pytdc-dataAfter the user approves the dataset, license, transfer, and storage:
uv run --python 3.11 --with "setuptools==80.9.0" --with "PyTDC==1.1.15" \
python scripts/load_and_split_data.py \
--task ADME --dataset Caco2_Wang --method scaffold \
--seed 42 --data-dir .pytdc-data --executeVerified public import patterns include:
from tdc.single_pred import ADME, Tox
from tdc.multi_pred import DDI, DTI
from tdc.generation import MolGen, Reaction, RetroSynConstructors perform data access, so do not run them before approval:
data = ADME(name="Caco2_Wang", path=".pytdc-data")
frame = data.get_data(format="df")
split = data.get_split(
method="scaffold",
seed=42,
frac=[0.7, 0.1, 0.2],
)
# split keys are: train, valid, testRead references/datasets.md before choosing a task or dataset.
Split selection without overclaiming leakage control
random: default for loaders; default seed 42 and fractions 0.7/0.1/0.2.scaffold: documented generic support for molecule-based ADME, Tox, and HTS. PyTDC groups RDKit Bemis–Murcko scaffold strings (chirality disabled), but that does not prove absence of analog, duplicate, label, temporal, or provenance leakage.cold_split: multi-instance API. Pass exact dataframe columns, for examplemethod="cold_split", column_name=["Drug", "Target"]. Multi-column splitting can discard cross-partition rows and need not preserve requested row fractions.combination: built-in DrugSyn combination split.time: pair-loader API requiringtime_column; the verified built-in case isBindingDB_Patentwith itsYearcolumn. The API spelling istime, nottemporal.
Do not use undocumented cold_drug_target, temporal, or stratified=True examples. For every split, record PyTDC version, parameters, row counts, and exact entity overlap audits. PyTDC 1.1.15's random splitter uses the supplied seed for
More from k-dense-ai
Use this skill in a project
Open any RiverX project, search the Skills panel for k-dense-ai/scientific-agent-skills/pytdc, and install it in one click.
