SynDE
Interpretable 2D ranking of constitutional isomers by GFN2-xTB energy.
Online documentation is hosted at synde.readthedocs.io.
Overview
SynDE ranks constitutional isomers using a coordinate-free linear model over two-dimensional molecular-graph descriptors. The default model is packaged directly with its trained weights, enabling isomer ranking without conformer generation or xTB execution at inference time.
- Inference speed: Ranks constitutional isomers in milliseconds from 2D molecular graphs.
- Interpretable terms: Each prediction decomposes into exact signed linear components that sum to the total score.
- Self-contained: Pre-trained model weights are bundled into the package; no external semiempirical quantum binaries are required for graph scoring.
- Provenance tracking: Includes model cards, validation records, and feature-distance diagnostic warnings.
Navigation
Installation
Standard Installation
git clone https://github.com/TieuLongPhan/SynDE.git
cd SynDE
python -m pip install -e .
Development Dependencies
The supplied Conda environment includes optional empirical, semiempirical, benchmark, test, and documentation dependencies, including the xTB executable:
conda env create -f env.yml
conda activate synde
python -m pip install -e .
Optional Python backends can instead be installed individually:
python -m pip install -e '.[empirical]' # Joback terms via thermo
python -m pip install -e '.[semiempirical]' # GFN2 single points via tblite
python -m pip install -e '.[benchmark,dev]' # calibration and developer tools
Quickstart
1. Rank Isomer Groups
from synde.energy import SynDEScorer
from synde.graph import GraphBuilder
scorer = SynDEScorer.load_default()
molecules = [
GraphBuilder.from_smiles("CCCCC"),
GraphBuilder.from_smiles("CC(C)CC"),
GraphBuilder.from_smiles("CC(C)(C)C"),
]
outputs = scorer.score_group(molecules)
ranking = sorted(zip(molecules, outputs), key=lambda item: item[1].score)
for position, (molecule, output) in enumerate(ranking, start=1):
print(f"{position} {molecule.canonical_smiles} {output.score:.4f} {output.status}")
Note: Lower scores indicate lower predicted relative energy within the input group. All candidates passed to score_group() must share the exact same molecular formula and formal charge.
2. Single Molecule Scoring
molecule = GraphBuilder.from_smiles("CC(=O)NC")
output = scorer.score(molecule)
print(output.score)
3. Inspect Output Attributes
output = outputs[0]
print("Status:", output.status)
print("Score:", output.score)
print("Units:", output.units)
print("Components:", output.components)
print("Descriptors:", output.descriptors)
print("Warnings:", output.warnings)
print("Provenance:", output.provenance)
data_dict = output.to_dict()
Scope and Domain Constraints
- Supported Elements: Connected, neutral, closed-shell structures containing B, C, N, O, F, Si, S, Cl, Br, or I.
- Isomer Class: Constitutional isomers (same formula, different atom connectivity).
- Target Metric: Model scores correspond to GFN2-xTB ranking targets. They represent relative statistical predictions rather than physical conformer populations or free energies.
Package Structure
| Directory | Description |
|---|---|
synde/graph/ |
Graph normalization, topological invariants, and $\pi$-system assignments. |
synde/energy/ |
SynDEScorer, model cards, feature attribution, and score dataclasses. |
synde/geometry/ |
Conformer generation and semiempirical xTB workflow utilities. |
synde/integration/ |
Workflow adapters and reaction/ITS scoring tools. |
synde/models/ |
Bundled default model resources and weights. |
doc/ |
Sphinx documentation source files. |
Documentation
Hosted documentation is available at synde.readthedocs.io.
To build HTML documentation locally:
sphinx-build -b html doc docs
The output will be rendered in docs/index.html.
Testing
pytest -q
bash lint.sh
License
SynDE is distributed under the MIT License. See LICENSE.
Acknowledgments
This project received funding from the European Union's Horizon Europe Doctoral Network programme under Marie Skłodowska-Curie grant agreement No. 101072930 (TACsy).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file synde-0.2.0.tar.gz.
File metadata
- Download URL: synde-0.2.0.tar.gz
- Upload date:
- Size: 157.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e676773a85f585b01be8e7c72a124fdff222bd4559545df5f6209c86fd0488b
|
|
| MD5 |
673a2ddad1d7e71e087314f921a5671f
|
|
| BLAKE2b-256 |
f7122868d7d8a4dd56607fe5824a189b66aac5d02c708013d554cf861a61036c
|
Provenance
The following attestation bundles were made for synde-0.2.0.tar.gz:
Publisher:
publish-package.yml on TieuLongPhan/SynDE
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
synde-0.2.0.tar.gz -
Subject digest:
2e676773a85f585b01be8e7c72a124fdff222bd4559545df5f6209c86fd0488b - Sigstore transparency entry: 2323112118
- Sigstore integration time:
-
Permalink:
TieuLongPhan/SynDE@0c5fc08940931e3d33c882cd02b3a956eb142df4 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/TieuLongPhan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-package.yml@0c5fc08940931e3d33c882cd02b3a956eb142df4 -
Trigger Event:
release
-
Statement type:
File details
Details for the file synde-0.2.0-py3-none-any.whl.
File metadata
- Download URL: synde-0.2.0-py3-none-any.whl
- Upload date:
- Size: 156.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6668ee41999bdaf71eccfc67282da31b343c9f0b073ade65a7e29f4d3a06f0c5
|
|
| MD5 |
80694b2c2ad39ed99b5b1dfaa75a7eac
|
|
| BLAKE2b-256 |
62fef122fe214e3224cdf3f5363f7c33e868d15d5a588e1f9136403228f43ca5
|
Provenance
The following attestation bundles were made for synde-0.2.0-py3-none-any.whl:
Publisher:
publish-package.yml on TieuLongPhan/SynDE
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
synde-0.2.0-py3-none-any.whl -
Subject digest:
6668ee41999bdaf71eccfc67282da31b343c9f0b073ade65a7e29f4d3a06f0c5 - Sigstore transparency entry: 2323112180
- Sigstore integration time:
-
Permalink:
TieuLongPhan/SynDE@0c5fc08940931e3d33c882cd02b3a956eb142df4 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/TieuLongPhan
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-package.yml@0c5fc08940931e3d33c882cd02b3a956eb142df4 -
Trigger Event:
release
-
Statement type: