Metadata-Version: 2.2
Name: directmultistep
Version: 1.0.0
Author-email: Anton Morgunov <anton@ischemist.com>, Yu Shee <yu.shee@yale.edu>, Haote Li <haote.li@yale.edu>
License: MIT
Project-URL: Homepage, https://github.com/batistagroup/DirectMultiStep
Project-URL: Issues, https://github.com/batistagroup/DirectMultiStep/issues
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy==1.26.4
Requires-Dist: pandas==1.5.3
Requires-Dist: pdoc3==0.11.5
Requires-Dist: plotly==5.24.1
Requires-Dist: lightning==2.2.5
Requires-Dist: pyyaml==6.0.1
Requires-Dist: rdkit==2023.9.3
Requires-Dist: torch==2.3.0
Requires-Dist: torchmetrics==1.6.0
Requires-Dist: tqdm==4.67.1
Requires-Dist: svgwrite==1.4.3
Requires-Dist: svglib==1.5.1
Requires-Dist: tomli>=2.2.1
Provides-Extra: dev
Requires-Dist: ipykernel>=6.29.5; extra == "dev"
Requires-Dist: nbformat>=5.10.4; extra == "dev"
Requires-Dist: rich>=13.9.4; extra == "dev"
Requires-Dist: kaleido==0.2.1; extra == "dev"
Requires-Dist: pre-commit==4.0.1; extra == "dev"
Requires-Dist: mkdocs==1.6.1; extra == "dev"
Requires-Dist: mkdocstrings-python==1.12.2; extra == "dev"
Requires-Dist: mkdocs-material==9.5.49; extra == "dev"
Requires-Dist: pytest==8.3.4; extra == "dev"
Requires-Dist: ruff==0.4.7; extra == "dev"
Requires-Dist: mypy==1.13.0; extra == "dev"
Requires-Dist: isort==5.13.2; extra == "dev"
Requires-Dist: typing-extensions==4.12.2; extra == "dev"
Requires-Dist: mypy-extensions==1.0.0; extra == "dev"
Requires-Dist: types-pyyaml; extra == "dev"
Requires-Dist: types-tqdm; extra == "dev"
Requires-Dist: types-requests; extra == "dev"

# DirectMultiStep: Direct Route Generation for Multi-Step Retrosynthesis

[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![Checked with mypy](https://www.mypy-lang.org/static/mypy_badge.svg)](https://mypy-lang.org/)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/batistagroup/DirectMultiStep/blob/main/LICENSE)
[![arXiv](https://img.shields.io/badge/arXiv-2405.13983-b31b1b.svg)](https://arxiv.org/abs/2405.13983)

## Overview

The preprint for this work is posted on [arXiv](https://arxiv.org/abs/2405.13983).

## How to use

Here's a quick example to generate a retrosynthesis route (you can get relevant checkpoints by running `bash download_files.sh`).

```python
from directmultistep.generate import generate_routes
from pathlib import Path

data_path = Path(__file__).resolve().parents[1] / "data"
ckpt_path = data_path / "checkpoints"
fig_path = data_path / "figures"
config_path = data_path / "configs" / "dms_dictionary.yaml"

# Generate a route for a target molecule
target = "CNCc1cc(-c2ccccc2F)n(S(=O)(=O)c2cccnc2)c1"
starting_material = "CN"

# Find routes with different models:
# Using flash model with starting material
paths = generate_routes(
    target, 
    n_steps=2, 
    starting_material=starting_material, 
    model="flash", beam_size=5,
    config_path=config_path, ckpt_dir=ckpt_path
)

# Or use explorer model to automatically determine steps
paths = generate_routes(
    target,
    starting_material=starting_material,
    model="explorer",
    beam_size=5,
    config_path=config_path, ckpt_dir=ckpt_path
)
```

See `use-examples/generate-route.py` to see more examples with other models. Other example scripts include:

- `train-model.py`: Train a new model with customizable configuration for local or cluster environments
- `eval-subset.py`: Evaluate a trained model on a subset of data
- `paper-figures.py`: Reproduce figures from the paper
- `visualize-train-curves.py`: Plot training curves and metrics

## Licenses

All code is licensed under MIT License. The content of the [pre-print on arXiv](https://arxiv.org/abs/2405.13983) is licensed under CC-BY 4.0.
