Skill Tracer
Skills › Scientific Agent Skills › torchdrug

torchdrug

skill · 281 lines · Apache-2.0 license · skills/torchdrug/SKILL.md

The facts

Its description

Builds and troubleshoots TorchDrug 0.2.1 workflows for molecular graphs, property prediction, self-supervised pretraining, molecule generation, retrosynthesis, protein representation learning, and knowledge graph reasoning. Use when code imports torchdrug or needs its datasets, models, tasks, or Engine.

The description the agent reads to decide when to use it.

From its settingsline 3

Tools it may use, or may not

allowed-tools: Read Write Edit Bash

Tools it may use while it runs without asking you first.

From its settingsline 6

Runs scripts

bin/activate

Scripts the text names. Found by matching words, so treat them as pointers.

Found by matching wordsline 53

Files it mentions

references/review.md, references/molecular_property_prediction.md, references/molecular_generation.md, references/retrosynthesis.md (first 5 of 16 lines)

Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.

Found by matching wordsline 75 line 145 line 155 line 165 line 174

What it leads to

Other skills this one hands off to, calls, requires or offers instead, found by matching their names, so treat them as pointers.

Found by matching words

Licence

Apache-2.0 license, from the skill file

The terms its author shares it under, which let it be shown here.

From its settingsline 4 licence text

Other settings

compatibility: Requires Python 3.7-3.10, PyTorch 1.8-2.0, compatible torch-scatter/torch-cluster, RDKit, and fair-esm. Apple Silicon is CPU-only and requires native builds; MPS is unsupported. Network access is needed for uncached datasets and weights. metadata: version: "1.4" skill-author: K-Dense Inc. last-reviewed: "2026-10-01"

More settings at the top of the file, shown as written.

From its settingsline 5 line 7
Other files in this skill (9) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: torchdrug
3description: Builds and troubleshoots TorchDrug 0.2.1 workflows for molecular graphs, property prediction, self-supervised pretraining, molecule generation, retrosynthesis, protein representation learning, and knowledge graph reasoning. Use when code imports torchdrug or needs its datasets, models, tasks, or Engine.
4license: Apache-2.0 license
5compatibility: Requires Python 3.7-3.10, PyTorch 1.8-2.0, compatible torch-scatter/torch-cluster, RDKit, and fair-esm. Apple Silicon is CPU-only and requires native builds; MPS is unsupported. Network access is needed for uncached datasets and weights.
6allowed-tools: Read Write Edit Bash
7metadata:
8 version: "1.4"
9 skill-author: K-Dense Inc.
10 last-reviewed: "2026-10-01"
11---
13# TorchDrug
15Use TorchDrug as a modular PyTorch graph-learning stack:
171. load a `datasets.*` dataset,
182. choose a `models.*` representation model,
193. wrap it in a `tasks.*` objective,
204. train and evaluate it with `core.Engine`.
22The current official documentation and latest published release are both **0.2.1**
23(released July 2023; rechecked October 1, 2026). Treat
24newer Python or PyTorch combinations as unverified rather than silently assuming
25compatibility.

TorchDrug

Use TorchDrug as a modular PyTorch graph-learning stack:

  1. load a datasets.* dataset,
  2. choose a models.* representation model,
  3. wrap it in a tasks.* objective,
  4. train and evaluate it with core.Engine.

The current official documentation and latest published release are both 0.2.1 (released July 2023; rechecked October 1, 2026). Treat newer Python or PyTorch combinations as unverified rather than silently assuming compatibility.

Raw lines 1 to 26
27## Start with the version guard
29Before generating or debugging code, inspect the environment:
31```bash
32python --version
33python -c "import torch; print(torch.__version__)"
34python -c "import torchdrug; print(torchdrug.__version__)"
35```
37The supported matrix for TorchDrug 0.2.1 is:
39- Python 3.7 through 3.10
40- PyTorch 1.8 through 2.0
41- Linux, Windows, or macOS
42- Apple Silicon: PyTorch 1.13 or later, CPU only; no MPS support
44If the project uses Python 3.11+ or PyTorch 2.1+, create a compatible environment
45or explicitly test a source build. Do not present such combinations as supported.

Start with the version guard

Before generating or debugging code, inspect the environment:

python --version
python -c "import torch; print(torch.__version__)"
python -c "import torchdrug; print(torchdrug.__version__)"

The supported matrix for TorchDrug 0.2.1 is:

  • Python 3.7 through 3.10
  • PyTorch 1.8 through 2.0
  • Linux, Windows, or macOS
  • Apple Silicon: PyTorch 1.13 or later, CPU only; no MPS support

If the project uses Python 3.11+ or PyTorch 2.1+, create a compatible environment or explicitly test a source build. Do not present such combinations as supported.

Raw lines 27 to 46
47## Installation
49Prefer a dedicated Python 3.10 environment and pin the TorchDrug release:
51```bash
52uv venv --python 3.10
53source .venv/bin/activate
54uv pip install "torch==2.0.0" "numpy==1.26.4" "setuptools<81" wheel
55```
57Install `torch-scatter` and `torch-cluster` wheels matched to the exact PyTorch
58and CUDA pair, following the
59[official installation page](https://torchdrug.ai/docs/installation.html). For a
60CPU-only PyTorch 2.0 environment on a platform listed in that wheel index, use:
62```bash
63uv pip install --only-binary :all: "torch-scatter==2.1.2" "torch-cluster==1.6.3" \
64 --find-links "https://data.pyg.org/whl/torch-2.0.0+cpu.html"
65uv pip install "torchdrug==0.2.1" "numpy==1.26.4" "scipy==1.13.1" \
66 "rdkit-pypi==2022.9.5" "fair-esm==2.0.0" "decorator==5.1.1"
67```
69Do not copy a CUDA wheel URL between environments. Match the PyTorch version,
70CUDA build, Python ABI, and platform. On Apple Silicon, the official docs require
71building `torch-scatter` and `torch-cluster` from source; the wheel index above
72has no macOS ARM64 wheels. Install PyTorch before building with
73`--no-build-isolation`. A working compiler/SDK is also required; having PyTorch
74installed alone does not guarantee a successful native build. See
75[review and environment evidence](references/review.md) for the exact audit stack.
76Use the **fair-esm** distribution, which imports as `esm`; the newer distribution
77named `esm` is a different SDK. Do not install both RDKit distributions (`rdkit`
78and `rdkit-pypi`) into one environment. NumPy 1.x avoids the old binary stack's
79NumPy 2 ABI incompatibility; `setuptools<81` retains `pkg_resources` for PyTorch 2.0.

Installation

Prefer a dedicated Python 3.10 environment and pin the TorchDrug release:

uv venv --python 3.10
source .venv/bin/activate
uv pip install "torch==2.0.0" "numpy==1.26.4" "setuptools<81" wheel

Install torch-scatter and torch-cluster wheels matched to the exact PyTorch and CUDA pair, following the official installation page. For a CPU-only PyTorch 2.0 environment on a platform listed in that wheel index, use:

uv pip install --only-binary :all: "torch-scatter==2.1.2" "torch-cluster==1.6.3" \
  --find-links "https://data.pyg.org/whl/torch-2.0.0+cpu.html"
uv pip install "torchdrug==0.2.1" "numpy==1.26.4" "scipy==1.13.1" \
  "rdkit-pypi==2022.9.5" "fair-esm==2.0.0" "decorator==5.1.1"

Do not copy a CUDA wheel URL between environments. Match the PyTorch version, CUDA build, Python ABI, and platform. On Apple Silicon, the official docs require building torch-scatter and torch-cluster from source; the wheel index above has no macOS ARM64 wheels. Install PyTorch before building with --no-build-isolation. A working compiler/SDK is also required; having PyTorch installed alone does not guarantee a successful native build. See review and environment evidence for the exact audit stack. Use the fair-esm distribution, which imports as esm; the newer distribution named esm is a different SDK. Do not install both RDKit distributions (rdkit and rdkit-pypi) into one environment. NumPy 1.x avoids the old binary stack's NumPy 2 ABI incompatibility; setuptools<81 retains pkg_resources for PyTorch 2.0.

Raw lines 47 to 80
Runs code bin/activate :53
Reads a file references/review.md :75
Names a skill esm :76
Names a skill rdkit :77
81## Canonical property-prediction workflow
83Use the documented ClinTox → GIN → `PropertyPrediction` → `Engine` pattern. The random split below is a tutorial baseline. For generalization to new molecular scaffolds, use `data.scaffold_split` or the benchmark's specified split, keep duplicate molecules in one partition, and record the actual split sizes and class counts. Scaffold-group allocation may not match the requested lengths exactly.
85First run the [ClinTox cache preparation](references/datasets.md#clintox-download-repair).
86The release's old HTTP download URL fails; the current official HTTPS asset has
87the identical release MD5. The full training examples are illustrative and were
88not run to convergence during this review.
90```python
91import torch
92from torchdrug import core, datasets, models, tasks
94dataset = datasets.ClinTox("~/molecule-datasets/")
95lengths = [int(0.8 * len(dataset)), int(0.1 * len(dataset))]
96lengths.append(len(dataset) - sum(lengths))
97train_set, valid_set, test_set = torch.utils.data.random_split(
98 dataset, lengths, generator=torch.Generator().manual_seed(1)
101model = models.GIN(
102 input_dim=dataset.node_feature_dim,
103 hidden_dims=[256, 256, 256, 256],
104 short_cut=True,
105 batch_norm=True,
106 concat_hidden=True,
108task = tasks.PropertyPrediction(
109 model,
110 task=dataset.tasks,
111 criterion="bce",
112 metric=("auprc", "auroc"),
115optimizer = torch.optim.Adam(task.parameters(), lr=1e-3)
116solver = core.Engine(
117 task,
118 train_set,
119 valid_set,
120 test_set,
121 optimizer,
122 batch_size=1024,
124solver.train(num_epoch=100)
125solver.evaluate("valid")
126```
128Add `gpus=[0]` only when a supported CUDA device is available. Omit `gpus` for
129CPU execution.
131For binary classification, `task.predict(batch)` returns logits; apply
132`torch.sigmoid` when probabilities are needed. In 0.2.1, normalized regression
133predictions are returned on the original target scale, which is a breaking change
134from older releases.

Canonical property-prediction workflow

Use the documented ClinTox → GIN → PropertyPrediction → Engine pattern. The random split below is a tutorial baseline. For generalization to new molecular scaffolds, use data.scaffold_split or the benchmark's specified split, keep duplicate molecules in one partition, and record the actual split sizes and class counts. Scaffold-group allocation may not match the requested lengths exactly.

First run the ClinTox cache preparation. The release's old HTTP download URL fails; the current official HTTPS asset has the identical release MD5. The full training examples are illustrative and were not run to convergence during this review.

import torch
from torchdrug import core, datasets, models, tasks

dataset = datasets.ClinTox("~/molecule-datasets/")
lengths = [int(0.8 * len(dataset)), int(0.1 * len(dataset))]
lengths.append(len(dataset) - sum(lengths))
train_set, valid_set, test_set = torch.utils.data.random_split(
    dataset, lengths, generator=torch.Generator().manual_seed(1)
)

model = models.GIN(
    input_dim=dataset.node_feature_dim,
    hidden_dims=[256, 256, 256, 256],
    short_cut=True,
    batch_norm=True,
    concat_hidden=True,
)
task = tasks.PropertyPrediction(
    model,
    task=dataset.tasks,
    criterion="bce",
    metric=("auprc", "auroc"),
)

optimizer = torch.optim.Adam(task.parameters(), lr=1e-3)
solver = core.Engine(
    task,
    train_set,
    valid_set,
    test_set,
    optimizer,
    batch_size=1024,
)
solver.train(num_epoch=100)
solver.evaluate("valid")

Add gpus=[0] only when a supported CUDA device is available. Omit gpus for CPU execution.

For binary classification, task.predict(batch) returns logits; apply torch.sigmoid when probabilities are needed. In 0.2.1, normalized regression predictions are returned on the original target scale, which is a breaking change from older releases.

Raw lines 81 to 135
136## Choose the official workflow

Choose the official workflow

Raw lines 136 to 137
138### Molecular property prediction
140- Dataset: `datasets.ClinTox`, `BBBP`, `Tox21`, `QM9`, or another documented
141 molecule dataset.
142- Model: start with `models.GIN`; use `edge_input_dim` when the selected feature
143 configuration supplies edge features.
144- Task: `tasks.PropertyPrediction`.
145- Read [molecular property prediction](references/molecular_property_prediction.md).

Molecular property prediction

  • Dataset: datasets.ClinTox, BBBP, Tox21, QM9, or another documented molecule dataset.
  • Model: start with models.GIN; use edge_input_dim when the selected feature configuration supplies edge features.
  • Task: tasks.PropertyPrediction.
  • Read molecular property prediction.
Raw lines 138 to 146
147### Self-supervised molecular pretraining
149- InfoGraph: `models.InfoGraph(gin_model, separate_model=False)` wrapped by
150 `tasks.Unsupervised`.
151- Attribute masking: `tasks.AttributeMasking(model, mask_rate=0.15)`.
152- Recreate the same encoder for fine-tuning. AttributeMasking and InfoGraph
153 checkpoints have different encoder key prefixes; verify transferred weights
154 as described in the reference before training `tasks.PropertyPrediction`.
155- Read [molecular property prediction](references/molecular_property_prediction.md).

Self-supervised molecular pretraining

  • InfoGraph: models.InfoGraph(gin_model, separate_model=False) wrapped by tasks.Unsupervised.
  • Attribute masking: tasks.AttributeMasking(model, mask_rate=0.15).
  • Recreate the same encoder for fine-tuning. AttributeMasking and InfoGraph checkpoints have different encoder key prefixes; verify transferred weights as described in the reference before training tasks.PropertyPrediction.
  • Read molecular property prediction.
Raw lines 147 to 156
157### Molecule generation
159- Dataset: `datasets.ZINC250k(..., kekulize=True, atom_feature="symbol")`.
160- GCPN: an `models.RGCN` encoder wrapped by `tasks.GCPNGeneration`.
161- GraphAF: node and edge `models.GraphAF` flows wrapped by
162 `tasks.AutoregressiveGeneration`.
163- Supported optimization tasks in the tutorial are `"qed"` and `"plogp"`;
164 criteria are `"nll"` and/or `"ppo"`.
165- Read [molecular generation](references/molecular_generation.md).

Molecule generation

  • Dataset: datasets.ZINC250k(..., kekulize=True, atom_feature="symbol").
  • GCPN: an models.RGCN encoder wrapped by tasks.GCPNGeneration.
  • GraphAF: node and edge models.GraphAF flows wrapped by tasks.AutoregressiveGeneration.
  • Supported optimization tasks in the tutorial are "qed" and "plogp"; criteria are "nll" and/or "ppo".
  • Read molecular generation.
Raw lines 157 to 166
167### Retrosynthesis
169- Create two synchronized `datasets.USPTO50k` views: reaction mode for center
170 identification and `as_synthon=True` for synthon completion.
171- Train `tasks.CenterIdentification` and `tasks.SynthonCompletion` separately.
172- Combine the trained tasks with `tasks.Retrosynthesis`; do not pass raw models
173 directly to the end-to-end task.
174- Read [retrosynthesis](references/retrosynthesis.md).

Retrosynthesis

  • Create two synchronized datasets.USPTO50k views: reaction mode for center identification and as_synthon=True for synthon completion.
  • Train tasks.CenterIdentification and tasks.SynthonCompletion separately.
  • Combine the trained tasks with tasks.Retrosynthesis; do not pass raw models directly to the end-to-end task.
  • Read retrosynthesis.
Raw lines 167 to 175
176### Knowledge graph reasoning
178- Embedding workflow: `datasets.FB15k237` → `models.RotatE` →
179 `tasks.KnowledgeGraphCompletion`.
180- Neural reasoning workflow: `models.NeuralLP` with `fact_ratio=0.75`.
181- Read [knowledge graph reasoning](references/knowledge_graphs.md).

Knowledge graph reasoning

  • Embedding workflow: datasets.FB15k237 → models.RotatE → tasks.KnowledgeGraphCompletion.
  • Neural reasoning workflow: models.NeuralLP with fact_ratio=0.75.
  • Read knowledge graph reasoning.
Raw lines 176 to 182
183### Protein modeling
185- Build proteins with `data.Protein.from_sequence`, `from_pdb`, or
186 `from_molecule`.
187- Sequence encoders include `models.ESM`, `ProteinCNN`, `ProteinResNet`,
188 `ProteinLSTM`, and `ProteinBERT`; structure encoders include `models.GearNet`.
189- Use documented graph-construction layers rather than a nonexistent
190 `protein.residue_graph()` convenience method.
191- Read [protein modeling](references/protein_modeling.md).

Protein modeling

  • Build proteins with data.Protein.from_sequence, from_pdb, or from_molecule.
  • Sequence encoders include models.ESM, ProteinCNN, ProteinResNet, ProteinLSTM, and ProteinBERT; structure encoders include models.GearNet.
  • Use documented graph-construction layers rather than a nonexistent protein.residue_graph() convenience method.
  • Read protein modeling.
Raw lines 183 to 192
193## Rules for reliable TorchDrug code
1951. **Follow the 0.2.1 API.** The official docs are not a rolling latest-version
196 site.
1972. **Prefer documented feature names.** Use `atom_feature`, `bond_feature`,
198 `residue_feature`, and `mol_feature`; `node_feature`, `edge_feature`, and
199 `graph_feature` are deprecated aliases in relevant dataset constructors.
2003. **Let `Engine` preprocess tasks.** If composing pre-trained tasks without
201 constructing their solvers, call each task's `preprocess()` manually.
2024. **Keep paired splits synchronized.** For retrosynthesis, reset the same random
203 seed before splitting reaction and synthon datasets, then verify source
204 `"sample id"` sets agree across views and are disjoint between partitions.
2055. **Use TorchDrug collation.** Use `data.graph_collate` or `core.Engine`;
206 generic PyTorch collation does not know how to pack TorchDrug graphs.
2076. **Match protein targets and views.** EnzymeCommission and GeneOntology yield
208 a `"targets"` vector; use `MultipleBinaryClassification` with integer task IDs
209 and an explicit residue view for sequence encoders.
2107. **Separate model, task, and engine arguments.** A common source of invented
211 code is passing task options to a model or passing raw models where a composed
212 task is required.
2138. **Validate generated chemistry.** Treat model outputs as candidates, not as
214 experimentally valid or synthesizable compounds.

Rules for reliable TorchDrug code

  1. Follow the 0.2.1 API. The official docs are not a rolling latest-version site.
  2. Prefer documented feature names. Use atom_feature, bond_feature, residue_feature, and mol_feature; node_feature, edge_feature, and graph_feature are deprecated aliases in relevant dataset constructors.
  3. **Let Engine preprocess tasks.** If composing pre-trained tasks without constructing their solvers, call each task's preprocess() manually.
  4. Keep paired splits synchronized. For retrosynthesis, reset the same random seed before splitting reaction and synthon datasets, then verify source "sample id" sets agree across views and are disjoint between partitions.
  5. Use TorchDrug collation. Use data.graph_collate or core.Engine; generic PyTorch collation does not know how to pack TorchDrug graphs.
  6. Match protein targets and views. EnzymeCommission and GeneOntology yield a "targets" vector; use MultipleBinaryClassification with integer task IDs and an explicit residue view for sequence encoders.
  7. Separate model, task, and engine arguments. A common source of invented code is passing task options to a model or passing raw models where a composed task is required.
  8. Validate generated chemistry. Treat model outputs as candidates, not as experimentally valid or synthesizable compounds.
Raw lines 193 to 215
216## Troubleshooting

Troubleshooting

Raw lines 216 to 217
218### Installation or import failure
220Check Python, PyTorch, `torch-scatter`, and `torch-cluster` as one compatibility
221set. Most failures are binary-wheel mismatches, unsupported Python versions, or
222attempts to use MPS.

Installation or import failure

Check Python, PyTorch, torch-scatter, and torch-cluster as one compatibility set. Most failures are binary-wheel mismatches, unsupported Python versions, or attempts to use MPS.

Raw lines 218 to 223
224### Feature dimension mismatch
226Build model dimensions from the loaded dataset:
228- `dataset.node_feature_dim`
229- `dataset.edge_feature_dim`
230- `dataset.num_bond_type`
231- `dataset.num_entity` and `dataset.num_relation` for knowledge graphs
233Do not hard-code dimensions copied from a different feature configuration.

Feature dimension mismatch

Build model dimensions from the loaded dataset:

  • dataset.node_feature_dim
  • dataset.edge_feature_dim
  • dataset.num_bond_type
  • dataset.num_entity and dataset.num_relation for knowledge graphs

Do not hard-code dimensions copied from a different feature configuration.

Raw lines 224 to 234
235### Device mismatch
237Pass `gpus=[0]` to `core.Engine` for supported CUDA execution. For manual
238prediction, collate first and move the entire nested batch with `utils.cuda`.

Device mismatch

Pass gpus=[0] to core.Engine for supported CUDA execution. For manual prediction, collate first and move the entire nested batch with utils.cuda.

Raw lines 235 to 239
240### Checkpoint mismatch
242Recreate the same model and feature configuration. For pretraining-to-fine-tuning
243transfer, load the checkpoint's `"model"` state with `strict=False`; for a complete
244solver, use `solver.save()` and `solver.load()`.

Checkpoint mismatch

Recreate the same model and feature configuration. For pretraining-to-fine-tuning transfer, load the checkpoint's "model" state with strict=False; for a complete solver, use solver.save() and solver.load().

Raw lines 240 to 245
246## Reference index
248- [Core concepts and data structures](references/core_concepts.md)
250- [Models and architectures](references/models_architectures.md)
251- [Molecular property prediction and pretraining](references/molecular_property_prediction.md)
252- [Protein modeling](references/protein_modeling.md)
253- [Molecular generation](references/molecular_generation.md)
255- [Knowledge graph reasoning](references/knowledge_graphs.md)
256- [Review evidence and native environment limits](references/review.md)

Reference index

  • Core concepts and data structures
  • Datasets
  • Models and architectures
  • Molecular property prediction and pretraining
  • Protein modeling
  • Molecular generation
  • Retrosynthesis
  • Knowledge graph reasoning
  • Review evidence and native environment limits
Raw lines 246 to 257
258## Upstream sources
260- [TorchDrug 0.2.1 documentation](https://torchdrug.ai/docs/)
261- [Tutorial index](https://torchdrug.ai/docs/tutorials/)
262- [Installation](https://torchdrug.ai/docs/installation.html)
263- [Package reference](https://torchdrug.ai/docs/api/)
264- [TorchDrug 0.2.1 release notes](https://github.com/DeepGraphLearning/torchdrug/releases/tag/v0.2.1)
Boilerplate, lines 266 to 281. The same text appears in 125 other files here. Close
266## Citing Scientific Agent Skills
268This skill is part of Scientific Agent Skills by K-Dense. If it materially contributed to a
269manuscript, report, presentation, or code release, add the paper to the references or
270software section and tell the user you did so:
272> Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent
273> Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065.
274> https://doi.org/10.48550/arXiv.2609.00065
276Always cite the current version. The DOI and https://arxiv.org/abs/2609.00065 resolve to the
277latest arXiv version, so never append a version suffix such as `v1`. When network access is
278available, fetch https://arxiv.org/abs/2609.00065 (or
279http://export.arxiv.org/api/query?id_list=2609.00065) before writing the reference and take
280the author list, year, and version from that record. If the record lists a journal reference
281or publisher DOI, cite the published version instead.

From K-Dense-AI/scientific-agent-skills at 5f2bc03, 2026-10-26. Not read by a model yet. Summary and techniques by Claude Opus 5.5 on 2026-11-06.