Synthesis Module
The synkit.Synthesis
package offers tools for both reaction prediction and chemical reaction network (CRN) exploration.
Reaction Prediction: Reactor
The synkit.Synthesis.Reactor
submodule supports two backends:
NetworkX-based reactor
SynReactor
MØD-based reactor
MODReactor
[3].
Reactor parameters
Name |
Type |
Default |
Description |
---|---|---|---|
|
bool |
|
Use |
|
bool |
|
When |
|
str |
|
Graph-matching strategy to enumerate transformations:
- |
Example: Forward Prediction
1from synkit.Synthesis.Reactor.syn_reactor import SynReactor
2
3input_fw = 'CC=O.CC=O'
4template = '[C:2]=[O:3].[C:4]([H:7])[H:8]>>[C:2]=[C:4].[O:3]([H:7])[H:8]'
5
6reactor = SynReactor(
7 substrate=input_fw,
8 template=template,
9 invert=False, # forward prediction
10 explicit_h=True, # show H in reaction center
11 strategy='bt' # try component search, then exhaustive
12)
13
14smarts_list = reactor.smarts_list
15print(smarts_list)
16# >> ['[CH3:1][CH:2]=[O:3].[CH:4]([CH:5]=[O:6])([H:7])[H:8]>>[CH3:1][CH:2]=[CH:4][CH:5]=[O:6].[O:3]([H:7])[H:8]', '[CH3:4][CH:5]=[O:6].[CH:1]([CH:2]=[O:3])([H:7])[H:8]>>[CH:1]([CH:2]=[O:3])=[CH:5][CH3:4].[O:6]([H:7])[H:8]']
Example: Backward Prediction
1from synkit.Synthesis.Reactor.syn_reactor import SynReactor
2
3target = 'CC=CC=O.O'
4template = '[C:2]=[O:3].[C:4]([H:7])[H:8]>>[C:2]=[C:4].[O:3]([H:7])[H:8]'
5
6reactor_bw = SynReactor(
7 substrate=target,
8 template=template,
9 invert=True, # backward prediction
10 explicit_h=False, # hydrogens implicit
11 strategy='comp' # component-aware search
12)
13
14precursors = reactor_bw.smarts_list
15print(precursors)
16# >> ['[CH3:1][CH:2]=[O:6].[CH3:3][CH:4]=[O:5]>>[CH3:1][CH:2]=[CH:3][CH:4]=[O:5].[OH2:6]', '[CH3:1][CH3:2].[CH:3]([CH:4]=[O:5])=[O:6]>>[CH3:1][CH:2]=[CH:3][CH:4]=[O:5].[OH2:6]']
Example: Implicit Hydrogen (NetworkX)
In some cases you may want to use an implicit-H template. Set implicit_temp=True and explicit_h=False:
1from synkit.Synthesis.Reactor.syn_reactor import SynReactor
2
3target = 'CC=CC=O.O'
4template = '[C:2]=[O:3].[CH2:4]>>[C:2]=[C:4].[OH2:3]'
5
6reactor_imp = SynReactor(
7 substrate=target,
8 template=template,
9 invert=True, # backward prediction
10 explicit_h=False, # hydrogens implicit
11 strategy='comp', # component-aware search
12 implicit_temp=True # use implicit-H template
13)
14
15precursors = reactor_imp.smarts_list
16print(precursors)
17# >> ['[CH3:1][CH:2]=[O:6].[CH3:3][CH:4]=[O:5]>>[CH3:1][CH:2]=[CH:3][CH:4]=[O:5].[OH2:6]', '[CH3:1][CH3:2].[CH:3]([CH:4]=[O:5])=[O:6]>>[CH3:1][CH:2]=[CH:3][CH:4]=[O:5].[OH2:6]']
Example: Forward Prediction (MØD)
1from synkit.Synthesis.Reactor.mod_reactor import MODReactor
2
3input_fw = 'CC=O.CC=O'
4template = '[C:2]=[O:3].[C:4]([H:7])[H:8]>>[C:2]=[C:4].[O:3]([H:7])[H:8]'
5
6reactor_mod = MODReactor(
7 substrate=input_fw,
8 rule_file=template,
9 invert=False, # forward direction
10 strategy='bt' # component-aware, then exhaustive
11)
12
13reaction_list = reactor_mod.reaction_smiles
14print(reaction_list)
15# >> ['CC=O.CC=O>>CC=CC=O.O']
Example: Backward Prediction with AAM (MØD)
1from synkit.Synthesis.Reactor.mod_reactor import MODReactor
2from synkit.Synthesis.Reactor.mod_aam import MODAAM
3from synkit.IO import smart_to_gml
4
5input_bw = 'CC=CC=O.O'
6rule_gml = smart_to_gml(
7 '[C:2]=[O:3].[C:4]([H:7])[H:8]>>[C:2]=[C:4].[O:3]([H:7])[H:8]',
8 core=True
9)
10
11reactor_bw = MODAAM(
12 substrate=input_bw,
13 rule_file=rule_gml,
14 invert=True,
15 strategy='bt'
16)
17
18smarts_list = reactor_bw.get_smarts()
19print(smarts_list)
20# >> [
21# '[CH3:1][CH:2]=[O:3].[CH:4]([CH:5]=[O:6])([H:7])[H:8]>>[CH3:1][CH:2]=[CH:4][CH:5]=[O:6].[O:3]([H:7])[H:8]',
22# '[CH3:1][CH:2]([H:3])[H:4].[CH:5]([CH:6]=[O:7])=[O:8]>>[CH3:1][CH:2]=[CH:5][CH:6]=[O:7].[H:3][O:8][H:4]'
23# ]
Chemical Reaction Networks: CRN
The synkit.Synthesis.CRN
submodule provides classes for constructing,
analyzing, and exploring chemical reaction networks derived from reaction rules.
- class synkit.Synthesis.CRN.mod_crn.MODCRN(rule_db_path: str | List[str], initial_smiles: List[str], n_repeats: int = 2)
Bases:
object
MODCRN ======
High-level class for constructing, inspecting, and reporting a chemical reaction network using the MØD derivation graph (DG) API.
Key Features
Flexible rule loading: accept a JSON database path or a list of GML strings.
Initial molecule deduplication via graph isomorphism.
Customizable iterative strategy for rule applications.
Built-in summary and external report export.
Parameters
- rule_db_pathUnion[str, List[str]]
Path to a JSON rule database or list of GML rule strings.
- initial_smilesList[str]
SMILES strings of the seed molecules.
- repeatsint, default=2
Number of repeat cycles for rule application.
Properties
- rulesList[Rule]
Loaded Rule objects for network construction.
- graphsList[Graph]
Deduplicated initial Graph objects.
- derivation_graphDG
The active derivation graph instance.
- num_verticesint
Number of molecules in the derivation graph.
- num_edgesint
Number of reactions in the derivation graph.
Methods
- build() -> None
Populate the derivation graph with the configured strategy.
- print_summary() -> None
Print and save a concise summary of the derivation graph.
- export_report(path: str) -> None
Generate an external report via the mod_post CLI.
- help() -> None
Print usage examples and API summarylog.
- build() None
Populate the derivation graph using: addSubset(initial) >> repeat[repeats](rules)
- property derivation_graph: None
The active derivation graph instance.
- export_report() None
Generate an external report via the mod_post CLI.
- property graphs: List[None]
Deduplicated initial Graph objects.
- help() None
Print usage examples and API summary for MODCRN.
- property num_edges: int
Number of reactions in the derivation graph.
- property num_vertices: int
Number of molecules in the derivation graph.
- print_summary() None
Print and save a concise summary of the derivation graph.
- property rules: List[None]
Loaded Rule objects for network construction.
See Also
synkit.IO
— format conversion utilitiessynkit.Graph
— graph data structures and transformations