Mimi Lavin commited on
Commit ·
eefbde9
1
Parent(s): 5d5ac48
upgrade to single-graph model v2 with N/O/S radical support
Browse files- mimis_featurizer.py +110 -102
- mimis_featurizer_v2.py +223 -0
- mimis_inference.py +35 -54
- philicity_model_v2.json +1 -0
- philicity_model_v2/fingerprint.pb +3 -0
- philicity_model_v2/saved_model.pb +3 -0
- philicity_model_v2/variables/variables.data-00000-of-00001 +3 -0
- philicity_model_v2/variables/variables.index +3 -0
mimis_featurizer.py
CHANGED
|
@@ -1,26 +1,35 @@
|
|
| 1 |
from __future__ import annotations
|
|
|
|
| 2 |
from typing import Dict, Any, Optional, Tuple
|
| 3 |
import numpy as np
|
| 4 |
import pandas as pd
|
| 5 |
import nfp
|
| 6 |
from nfp.preprocessing.features import get_ring_size
|
| 7 |
from rdkit import Chem
|
|
|
|
| 8 |
from rdkit import RDLogger
|
| 9 |
import joblib
|
| 10 |
-
from
|
| 11 |
|
| 12 |
-
RDLogger.DisableLog("rdApp.*")
|
| 13 |
|
| 14 |
-
from pathlib import Path
|
| 15 |
BASE_DIR = Path(__file__).resolve().parent
|
|
|
|
| 16 |
|
| 17 |
-
def featurize_atom(atom):
|
| 18 |
-
"""
|
| 19 |
-
Return an integer hash representing the atom type
|
| 20 |
-
:param atom: atom in an RDKit mol object
|
| 21 |
-
:return: string with atom features, like atom symbol, number of radical electrons, etc.
|
| 22 |
-
"""
|
| 23 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
return str(
|
| 25 |
(
|
| 26 |
atom.GetSymbol(),
|
|
@@ -31,16 +40,12 @@ def featurize_atom(atom):
|
|
| 31 |
get_ring_size(atom, max_size=6),
|
| 32 |
atom.GetDegree(),
|
| 33 |
atom.GetTotalNumHs(includeNeighbors=True),
|
|
|
|
| 34 |
)
|
| 35 |
)
|
| 36 |
|
|
|
|
| 37 |
def featurize_bond(bond, flipped=False):
|
| 38 |
-
"""
|
| 39 |
-
Return an integer hash representing the bond type
|
| 40 |
-
:param bond: RDKit bond object
|
| 41 |
-
:param flipped: whether to flip the begin and end atoms
|
| 42 |
-
:return: string with bond features, like atom types, bond type, ring size, etc.
|
| 43 |
-
"""
|
| 44 |
if not flipped:
|
| 45 |
atoms = "{}-{}".format(
|
| 46 |
*tuple((bond.GetBeginAtom().GetSymbol(), bond.GetEndAtom().GetSymbol()))
|
|
@@ -55,19 +60,16 @@ def featurize_bond(bond, flipped=False):
|
|
| 55 |
|
| 56 |
return " ".join([atoms, btype, ring]).strip()
|
| 57 |
|
| 58 |
-
|
|
|
|
| 59 |
atom_features=featurize_atom,
|
| 60 |
bond_features=featurize_bond,
|
| 61 |
explicit_hs=True,
|
| 62 |
output_dtype="int64",
|
| 63 |
)
|
| 64 |
|
|
|
|
| 65 |
def get_radical_center_index(radical_smiles: str) -> int:
|
| 66 |
-
"""
|
| 67 |
-
returns the atom index of the radical center
|
| 68 |
-
:param radical_smiles: smiles string of the radical
|
| 69 |
-
:return: integer index of the radical center atom
|
| 70 |
-
"""
|
| 71 |
mol = Chem.MolFromSmiles(radical_smiles, sanitize=True)
|
| 72 |
if mol is None:
|
| 73 |
raise ValueError(f"Invalid radical SMILES: {radical_smiles}")
|
|
@@ -80,67 +82,108 @@ def get_radical_center_index(radical_smiles: str) -> int:
|
|
| 80 |
|
| 81 |
return int(rad_atoms[0])
|
| 82 |
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
|
|
|
|
|
|
|
| 93 |
if canonicalize:
|
| 94 |
-
original_smiles = canonicalize_smiles(original_smiles)
|
| 95 |
radical_smiles = canonicalize_smiles(radical_smiles)
|
| 96 |
-
if
|
| 97 |
-
raise ValueError("Invalid SMILES
|
| 98 |
|
| 99 |
kwargs = {}
|
| 100 |
if max_num_edges is not None:
|
| 101 |
kwargs["max_num_edges"] = int(max_num_edges)
|
| 102 |
|
| 103 |
-
|
|
|
|
| 104 |
|
| 105 |
-
|
| 106 |
-
feats_r = preprocessor_shared(radical_smiles, train=False, **kwargs)
|
| 107 |
|
| 108 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
|
| 110 |
return {
|
| 111 |
-
"
|
| 112 |
-
"radical": feats_r,
|
| 113 |
"radical_center": np.int64(rad_center),
|
| 114 |
-
"
|
|
|
|
|
|
|
| 115 |
"radical_smiles": radical_smiles,
|
| 116 |
}
|
| 117 |
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
:
|
| 123 |
-
:
|
| 124 |
-
:
|
| 125 |
-
:
|
| 126 |
-
:
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
"""
|
| 131 |
|
| 132 |
features_list = []
|
| 133 |
ys = []
|
| 134 |
keep_rows = []
|
| 135 |
|
| 136 |
for i, row in df.iterrows():
|
| 137 |
-
o = row.get(original_col)
|
| 138 |
r = row.get(radical_col)
|
| 139 |
|
| 140 |
try:
|
| 141 |
-
feats =
|
| 142 |
-
o, r, canonicalize=canonicalize, max_num_edges=max_num_edges
|
| 143 |
-
)
|
| 144 |
features_list.append(feats)
|
| 145 |
|
| 146 |
if y_col is not None:
|
|
@@ -161,55 +204,20 @@ def featurize_smiles_dataframe(df: pd.DataFrame, *, original_col: str = "canonic
|
|
| 161 |
|
| 162 |
return features_list, y, kept_df
|
| 163 |
|
| 164 |
-
def save_shared_vocab(df, original_col="original_smiles", radical_col="radical_smiles", out_path="/Users/mimis_stuff/Documents/GitHub/alfabet/data/philicity_model_v1.json"):
|
| 165 |
-
"""
|
| 166 |
-
builds and saves a shared vocabulary preprocessor from a dataframe with two smiles columns
|
| 167 |
-
:param df: pandas dataframe with smiles columns
|
| 168 |
-
:param original_col: name of the column containing the original smiles strings
|
| 169 |
-
:param radical_col: name of the column containing the radical smiles strings
|
| 170 |
-
:param out_path: path to save the preprocessor json file
|
| 171 |
-
:return: none, just save the preprocessor to the specified location
|
| 172 |
-
"""
|
| 173 |
|
| 174 |
-
|
| 175 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
r = df[radical_col].apply(canonicalize_smiles)
|
| 177 |
-
all_smiles =
|
| 178 |
|
| 179 |
-
# build vocab
|
| 180 |
for s in all_smiles:
|
| 181 |
-
|
| 182 |
|
| 183 |
-
|
| 184 |
-
preprocessor_shared.to_json(out_path)
|
| 185 |
print("Saved:", out_path)
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
if __name__ == "__main__":
|
| 189 |
-
|
| 190 |
-
# read in the smiles dataframe
|
| 191 |
-
df = pd.read_csv('/Users/mimis_stuff/PycharmProjects/PythonProject/philicity_prediction/data/all_philicities_canonicalized.csv')
|
| 192 |
-
|
| 193 |
-
save_shared_vocab(df)
|
| 194 |
-
|
| 195 |
-
# just restrict to necessary columns
|
| 196 |
-
df = df[['original_smiles', 'radical_smiles', 'philicity']]
|
| 197 |
-
|
| 198 |
-
feats_list, y, kept = featurize_smiles_dataframe(
|
| 199 |
-
df,
|
| 200 |
-
original_col="original_smiles",
|
| 201 |
-
radical_col="radical_smiles",
|
| 202 |
-
y_col="philicity",
|
| 203 |
-
canonicalize=True,
|
| 204 |
-
drop_invalid=True,
|
| 205 |
-
)
|
| 206 |
-
|
| 207 |
-
# save feature dictionary and target array
|
| 208 |
-
joblib.dump(feats_list, "/Users/mimis_stuff/Documents/GitHub/alfabet/data/features_two_graphs.joblib")
|
| 209 |
-
np.save("/Users/mimis_stuff/Documents/GitHub/alfabet/data/targets_philicity.npy", y)
|
| 210 |
-
|
| 211 |
-
# inspect one example
|
| 212 |
-
ex = feats_list[1]
|
| 213 |
-
print("original keys:", ex["original"].keys())
|
| 214 |
-
print("radical keys:", ex["radical"].keys())
|
| 215 |
-
print("radical_center:", ex["radical_center"])
|
|
|
|
| 1 |
from __future__ import annotations
|
| 2 |
+
|
| 3 |
from typing import Dict, Any, Optional, Tuple
|
| 4 |
import numpy as np
|
| 5 |
import pandas as pd
|
| 6 |
import nfp
|
| 7 |
from nfp.preprocessing.features import get_ring_size
|
| 8 |
from rdkit import Chem
|
| 9 |
+
from rdkit.Chem import AllChem
|
| 10 |
from rdkit import RDLogger
|
| 11 |
import joblib
|
| 12 |
+
from pathlib import Path
|
| 13 |
|
| 14 |
+
RDLogger.DisableLog("rdApp.*")
|
| 15 |
|
|
|
|
| 16 |
BASE_DIR = Path(__file__).resolve().parent
|
| 17 |
+
PREPROCESSOR_PATH = BASE_DIR / "data" / "philicity_model_v2_single.json"
|
| 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
| 20 |
+
def canonicalize_smiles(smiles: str):
|
| 21 |
+
if not isinstance(smiles, str):
|
| 22 |
+
return None
|
| 23 |
+
try:
|
| 24 |
+
mol = Chem.MolFromSmiles(smiles, sanitize=True)
|
| 25 |
+
if mol is None:
|
| 26 |
+
return None
|
| 27 |
+
return Chem.MolToSmiles(mol, canonical=True)
|
| 28 |
+
except Exception:
|
| 29 |
+
return None
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def featurize_atom(atom):
|
| 33 |
return str(
|
| 34 |
(
|
| 35 |
atom.GetSymbol(),
|
|
|
|
| 40 |
get_ring_size(atom, max_size=6),
|
| 41 |
atom.GetDegree(),
|
| 42 |
atom.GetTotalNumHs(includeNeighbors=True),
|
| 43 |
+
atom.GetHybridization(),
|
| 44 |
)
|
| 45 |
)
|
| 46 |
|
| 47 |
+
|
| 48 |
def featurize_bond(bond, flipped=False):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
if not flipped:
|
| 50 |
atoms = "{}-{}".format(
|
| 51 |
*tuple((bond.GetBeginAtom().GetSymbol(), bond.GetEndAtom().GetSymbol()))
|
|
|
|
| 60 |
|
| 61 |
return " ".join([atoms, btype, ring]).strip()
|
| 62 |
|
| 63 |
+
|
| 64 |
+
preprocessor = nfp.SmilesBondIndexPreprocessor(
|
| 65 |
atom_features=featurize_atom,
|
| 66 |
bond_features=featurize_bond,
|
| 67 |
explicit_hs=True,
|
| 68 |
output_dtype="int64",
|
| 69 |
)
|
| 70 |
|
| 71 |
+
|
| 72 |
def get_radical_center_index(radical_smiles: str) -> int:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
mol = Chem.MolFromSmiles(radical_smiles, sanitize=True)
|
| 74 |
if mol is None:
|
| 75 |
raise ValueError(f"Invalid radical SMILES: {radical_smiles}")
|
|
|
|
| 82 |
|
| 83 |
return int(rad_atoms[0])
|
| 84 |
|
| 85 |
+
|
| 86 |
+
def load_preprocessor(path: Optional[str] = None) -> None:
|
| 87 |
+
"""Load the shared vocab into the preprocessor. Call once before featurizing."""
|
| 88 |
+
preprocessor.from_json(str(path or PREPROCESSOR_PATH))
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
def featurize_radical(
|
| 92 |
+
radical_smiles: str,
|
| 93 |
+
*,
|
| 94 |
+
canonicalize: bool = True,
|
| 95 |
+
max_num_edges: Optional[int] = None,
|
| 96 |
+
) -> Dict[str, Any]:
|
| 97 |
"""
|
| 98 |
+
Featurizes a single radical SMILES string.
|
| 99 |
+
|
| 100 |
+
Returns a dict with:
|
| 101 |
+
- "radical": NFP graph features
|
| 102 |
+
- "radical_center": integer index of the radical center atom
|
| 103 |
+
- "radical_center_mask": float32 array of shape (n_atoms,), 1.0 at radical center
|
| 104 |
+
- "topo_dist_to_rc": float32 array, topological distance from each atom to radical center
|
| 105 |
+
- "gasteiger_charges": float32 array of Gasteiger partial charges, one per atom
|
| 106 |
+
- "radical_smiles": the (canonicalized) SMILES string
|
| 107 |
|
| 108 |
+
Requires load_preprocessor() to have been called first.
|
| 109 |
+
"""
|
| 110 |
if canonicalize:
|
|
|
|
| 111 |
radical_smiles = canonicalize_smiles(radical_smiles)
|
| 112 |
+
if radical_smiles is None:
|
| 113 |
+
raise ValueError("Invalid radical SMILES after canonicalization.")
|
| 114 |
|
| 115 |
kwargs = {}
|
| 116 |
if max_num_edges is not None:
|
| 117 |
kwargs["max_num_edges"] = int(max_num_edges)
|
| 118 |
|
| 119 |
+
feats = preprocessor(radical_smiles, train=False, **kwargs)
|
| 120 |
+
rad_center = get_radical_center_index(radical_smiles)
|
| 121 |
|
| 122 |
+
n_atoms = len(feats["atom"])
|
|
|
|
| 123 |
|
| 124 |
+
mol = Chem.MolFromSmiles(radical_smiles, sanitize=True)
|
| 125 |
+
mol_h = Chem.AddHs(mol)
|
| 126 |
+
|
| 127 |
+
# per-atom binary flag for the radical center
|
| 128 |
+
radical_center_mask = np.zeros(n_atoms, dtype=np.float32)
|
| 129 |
+
radical_center_mask[rad_center] = 1.0
|
| 130 |
+
|
| 131 |
+
# topological distance to radical center (H-explicit mol so indices match)
|
| 132 |
+
dist_matrix = Chem.GetDistanceMatrix(mol_h)
|
| 133 |
+
topo_dist_to_rc = dist_matrix[rad_center].astype(np.float32)
|
| 134 |
+
|
| 135 |
+
if len(topo_dist_to_rc) != n_atoms:
|
| 136 |
+
raise ValueError(
|
| 137 |
+
f"Topo dist length mismatch for {radical_smiles}: "
|
| 138 |
+
f"dist {len(topo_dist_to_rc)} vs feats atom {n_atoms}"
|
| 139 |
+
)
|
| 140 |
+
|
| 141 |
+
# Gasteiger partial charges (H-explicit mol so indices match)
|
| 142 |
+
AllChem.ComputeGasteigerCharges(mol_h)
|
| 143 |
+
gasteiger_charges = np.array(
|
| 144 |
+
[atom.GetDoubleProp("_GasteigerCharge") for atom in mol_h.GetAtoms()],
|
| 145 |
+
dtype=np.float32,
|
| 146 |
+
)
|
| 147 |
+
# Replace NaN/inf that can arise for unusual valence states
|
| 148 |
+
gasteiger_charges = np.nan_to_num(gasteiger_charges, nan=0.0, posinf=0.0, neginf=0.0)
|
| 149 |
+
|
| 150 |
+
if len(gasteiger_charges) != n_atoms:
|
| 151 |
+
raise ValueError(
|
| 152 |
+
f"Gasteiger charge length mismatch for {radical_smiles}: "
|
| 153 |
+
f"{len(gasteiger_charges)} vs {n_atoms}"
|
| 154 |
+
)
|
| 155 |
|
| 156 |
return {
|
| 157 |
+
"radical": feats,
|
|
|
|
| 158 |
"radical_center": np.int64(rad_center),
|
| 159 |
+
"radical_center_mask": radical_center_mask,
|
| 160 |
+
"topo_dist_to_rc": topo_dist_to_rc,
|
| 161 |
+
"gasteiger_charges": gasteiger_charges,
|
| 162 |
"radical_smiles": radical_smiles,
|
| 163 |
}
|
| 164 |
|
| 165 |
+
|
| 166 |
+
def featurize_smiles_dataframe(
|
| 167 |
+
df: pd.DataFrame,
|
| 168 |
+
*,
|
| 169 |
+
radical_col: str = "radical_smiles",
|
| 170 |
+
y_col: Optional[str] = "philicity",
|
| 171 |
+
canonicalize: bool = False,
|
| 172 |
+
drop_invalid: bool = True,
|
| 173 |
+
max_num_edges: Optional[int] = None,
|
| 174 |
+
) -> Tuple[list[Dict[str, Any]], Optional[np.ndarray], pd.DataFrame]:
|
| 175 |
+
|
| 176 |
+
load_preprocessor() # load vocab once for the entire dataframe
|
|
|
|
| 177 |
|
| 178 |
features_list = []
|
| 179 |
ys = []
|
| 180 |
keep_rows = []
|
| 181 |
|
| 182 |
for i, row in df.iterrows():
|
|
|
|
| 183 |
r = row.get(radical_col)
|
| 184 |
|
| 185 |
try:
|
| 186 |
+
feats = featurize_radical(r, canonicalize=canonicalize, max_num_edges=max_num_edges)
|
|
|
|
|
|
|
| 187 |
features_list.append(feats)
|
| 188 |
|
| 189 |
if y_col is not None:
|
|
|
|
| 204 |
|
| 205 |
return features_list, y, kept_df
|
| 206 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 207 |
|
| 208 |
+
def save_shared_vocab(
|
| 209 |
+
df,
|
| 210 |
+
radical_col: str = "radical_smiles",
|
| 211 |
+
out_path: Optional[str] = None,
|
| 212 |
+
):
|
| 213 |
+
if out_path is None:
|
| 214 |
+
out_path = str(PREPROCESSOR_PATH)
|
| 215 |
+
|
| 216 |
r = df[radical_col].apply(canonicalize_smiles)
|
| 217 |
+
all_smiles = r.dropna().unique().tolist()
|
| 218 |
|
|
|
|
| 219 |
for s in all_smiles:
|
| 220 |
+
preprocessor(s, train=True)
|
| 221 |
|
| 222 |
+
preprocessor.to_json(out_path)
|
|
|
|
| 223 |
print("Saved:", out_path)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mimis_featurizer_v2.py
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from __future__ import annotations
|
| 2 |
+
|
| 3 |
+
from typing import Dict, Any, Optional, Tuple
|
| 4 |
+
import numpy as np
|
| 5 |
+
import pandas as pd
|
| 6 |
+
import nfp
|
| 7 |
+
from nfp.preprocessing.features import get_ring_size
|
| 8 |
+
from rdkit import Chem
|
| 9 |
+
from rdkit.Chem import AllChem
|
| 10 |
+
from rdkit import RDLogger
|
| 11 |
+
import joblib
|
| 12 |
+
from pathlib import Path
|
| 13 |
+
|
| 14 |
+
RDLogger.DisableLog("rdApp.*")
|
| 15 |
+
|
| 16 |
+
BASE_DIR = Path(__file__).resolve().parent
|
| 17 |
+
PREPROCESSOR_PATH = BASE_DIR / "data" / "philicity_model_v2_single.json"
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def canonicalize_smiles(smiles: str):
|
| 21 |
+
if not isinstance(smiles, str):
|
| 22 |
+
return None
|
| 23 |
+
try:
|
| 24 |
+
mol = Chem.MolFromSmiles(smiles, sanitize=True)
|
| 25 |
+
if mol is None:
|
| 26 |
+
return None
|
| 27 |
+
return Chem.MolToSmiles(mol, canonical=True)
|
| 28 |
+
except Exception:
|
| 29 |
+
return None
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
def featurize_atom(atom):
|
| 33 |
+
return str(
|
| 34 |
+
(
|
| 35 |
+
atom.GetSymbol(),
|
| 36 |
+
atom.GetNumRadicalElectrons(),
|
| 37 |
+
atom.GetFormalCharge(),
|
| 38 |
+
atom.GetChiralTag(),
|
| 39 |
+
atom.GetIsAromatic(),
|
| 40 |
+
get_ring_size(atom, max_size=6),
|
| 41 |
+
atom.GetDegree(),
|
| 42 |
+
atom.GetTotalNumHs(includeNeighbors=True),
|
| 43 |
+
atom.GetHybridization(),
|
| 44 |
+
)
|
| 45 |
+
)
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
def featurize_bond(bond, flipped=False):
|
| 49 |
+
if not flipped:
|
| 50 |
+
atoms = "{}-{}".format(
|
| 51 |
+
*tuple((bond.GetBeginAtom().GetSymbol(), bond.GetEndAtom().GetSymbol()))
|
| 52 |
+
)
|
| 53 |
+
else:
|
| 54 |
+
atoms = "{}-{}".format(
|
| 55 |
+
*tuple((bond.GetEndAtom().GetSymbol(), bond.GetBeginAtom().GetSymbol()))
|
| 56 |
+
)
|
| 57 |
+
|
| 58 |
+
btype = str((bond.GetBondType(), bond.GetIsConjugated()))
|
| 59 |
+
ring = "R{}".format(get_ring_size(bond, max_size=6)) if bond.IsInRing() else ""
|
| 60 |
+
|
| 61 |
+
return " ".join([atoms, btype, ring]).strip()
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
preprocessor = nfp.SmilesBondIndexPreprocessor(
|
| 65 |
+
atom_features=featurize_atom,
|
| 66 |
+
bond_features=featurize_bond,
|
| 67 |
+
explicit_hs=True,
|
| 68 |
+
output_dtype="int64",
|
| 69 |
+
)
|
| 70 |
+
|
| 71 |
+
|
| 72 |
+
def get_radical_center_index(radical_smiles: str) -> int:
|
| 73 |
+
mol = Chem.MolFromSmiles(radical_smiles, sanitize=True)
|
| 74 |
+
if mol is None:
|
| 75 |
+
raise ValueError(f"Invalid radical SMILES: {radical_smiles}")
|
| 76 |
+
|
| 77 |
+
rad_atoms = [a.GetIdx() for a in mol.GetAtoms() if a.GetNumRadicalElectrons() > 0]
|
| 78 |
+
if len(rad_atoms) == 0:
|
| 79 |
+
raise ValueError(f"No radical center found in: {radical_smiles}")
|
| 80 |
+
if len(rad_atoms) > 1:
|
| 81 |
+
raise ValueError(f"Multiple radical centers found in: {radical_smiles}")
|
| 82 |
+
|
| 83 |
+
return int(rad_atoms[0])
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
def load_preprocessor(path: Optional[str] = None) -> None:
|
| 87 |
+
"""Load the shared vocab into the preprocessor. Call once before featurizing."""
|
| 88 |
+
preprocessor.from_json(str(path or PREPROCESSOR_PATH))
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
def featurize_radical(
|
| 92 |
+
radical_smiles: str,
|
| 93 |
+
*,
|
| 94 |
+
canonicalize: bool = True,
|
| 95 |
+
max_num_edges: Optional[int] = None,
|
| 96 |
+
) -> Dict[str, Any]:
|
| 97 |
+
"""
|
| 98 |
+
Featurizes a single radical SMILES string.
|
| 99 |
+
|
| 100 |
+
Returns a dict with:
|
| 101 |
+
- "radical": NFP graph features
|
| 102 |
+
- "radical_center": integer index of the radical center atom
|
| 103 |
+
- "radical_center_mask": float32 array of shape (n_atoms,), 1.0 at radical center
|
| 104 |
+
- "topo_dist_to_rc": float32 array, topological distance from each atom to radical center
|
| 105 |
+
- "gasteiger_charges": float32 array of Gasteiger partial charges, one per atom
|
| 106 |
+
- "radical_smiles": the (canonicalized) SMILES string
|
| 107 |
+
|
| 108 |
+
Requires load_preprocessor() to have been called first.
|
| 109 |
+
"""
|
| 110 |
+
if canonicalize:
|
| 111 |
+
radical_smiles = canonicalize_smiles(radical_smiles)
|
| 112 |
+
if radical_smiles is None:
|
| 113 |
+
raise ValueError("Invalid radical SMILES after canonicalization.")
|
| 114 |
+
|
| 115 |
+
kwargs = {}
|
| 116 |
+
if max_num_edges is not None:
|
| 117 |
+
kwargs["max_num_edges"] = int(max_num_edges)
|
| 118 |
+
|
| 119 |
+
feats = preprocessor(radical_smiles, train=False, **kwargs)
|
| 120 |
+
rad_center = get_radical_center_index(radical_smiles)
|
| 121 |
+
|
| 122 |
+
n_atoms = len(feats["atom"])
|
| 123 |
+
|
| 124 |
+
mol = Chem.MolFromSmiles(radical_smiles, sanitize=True)
|
| 125 |
+
mol_h = Chem.AddHs(mol)
|
| 126 |
+
|
| 127 |
+
# per-atom binary flag for the radical center
|
| 128 |
+
radical_center_mask = np.zeros(n_atoms, dtype=np.float32)
|
| 129 |
+
radical_center_mask[rad_center] = 1.0
|
| 130 |
+
|
| 131 |
+
# topological distance to radical center (H-explicit mol so indices match)
|
| 132 |
+
dist_matrix = Chem.GetDistanceMatrix(mol_h)
|
| 133 |
+
topo_dist_to_rc = dist_matrix[rad_center].astype(np.float32)
|
| 134 |
+
|
| 135 |
+
if len(topo_dist_to_rc) != n_atoms:
|
| 136 |
+
raise ValueError(
|
| 137 |
+
f"Topo dist length mismatch for {radical_smiles}: "
|
| 138 |
+
f"dist {len(topo_dist_to_rc)} vs feats atom {n_atoms}"
|
| 139 |
+
)
|
| 140 |
+
|
| 141 |
+
# Gasteiger partial charges (H-explicit mol so indices match)
|
| 142 |
+
AllChem.ComputeGasteigerCharges(mol_h)
|
| 143 |
+
gasteiger_charges = np.array(
|
| 144 |
+
[atom.GetDoubleProp("_GasteigerCharge") for atom in mol_h.GetAtoms()],
|
| 145 |
+
dtype=np.float32,
|
| 146 |
+
)
|
| 147 |
+
# Replace NaN/inf that can arise for unusual valence states
|
| 148 |
+
gasteiger_charges = np.nan_to_num(gasteiger_charges, nan=0.0, posinf=0.0, neginf=0.0)
|
| 149 |
+
|
| 150 |
+
if len(gasteiger_charges) != n_atoms:
|
| 151 |
+
raise ValueError(
|
| 152 |
+
f"Gasteiger charge length mismatch for {radical_smiles}: "
|
| 153 |
+
f"{len(gasteiger_charges)} vs {n_atoms}"
|
| 154 |
+
)
|
| 155 |
+
|
| 156 |
+
return {
|
| 157 |
+
"radical": feats,
|
| 158 |
+
"radical_center": np.int64(rad_center),
|
| 159 |
+
"radical_center_mask": radical_center_mask,
|
| 160 |
+
"topo_dist_to_rc": topo_dist_to_rc,
|
| 161 |
+
"gasteiger_charges": gasteiger_charges,
|
| 162 |
+
"radical_smiles": radical_smiles,
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
|
| 166 |
+
def featurize_smiles_dataframe(
|
| 167 |
+
df: pd.DataFrame,
|
| 168 |
+
*,
|
| 169 |
+
radical_col: str = "radical_smiles",
|
| 170 |
+
y_col: Optional[str] = "philicity",
|
| 171 |
+
canonicalize: bool = False,
|
| 172 |
+
drop_invalid: bool = True,
|
| 173 |
+
max_num_edges: Optional[int] = None,
|
| 174 |
+
) -> Tuple[list[Dict[str, Any]], Optional[np.ndarray], pd.DataFrame]:
|
| 175 |
+
|
| 176 |
+
load_preprocessor() # load vocab once for the entire dataframe
|
| 177 |
+
|
| 178 |
+
features_list = []
|
| 179 |
+
ys = []
|
| 180 |
+
keep_rows = []
|
| 181 |
+
|
| 182 |
+
for i, row in df.iterrows():
|
| 183 |
+
r = row.get(radical_col)
|
| 184 |
+
|
| 185 |
+
try:
|
| 186 |
+
feats = featurize_radical(r, canonicalize=canonicalize, max_num_edges=max_num_edges)
|
| 187 |
+
features_list.append(feats)
|
| 188 |
+
|
| 189 |
+
if y_col is not None:
|
| 190 |
+
ys.append(float(row[y_col]))
|
| 191 |
+
|
| 192 |
+
keep_rows.append(i)
|
| 193 |
+
|
| 194 |
+
except Exception:
|
| 195 |
+
if not drop_invalid:
|
| 196 |
+
raise
|
| 197 |
+
continue
|
| 198 |
+
|
| 199 |
+
kept_df = df.loc[keep_rows].reset_index(drop=True)
|
| 200 |
+
|
| 201 |
+
y = None
|
| 202 |
+
if y_col is not None:
|
| 203 |
+
y = np.asarray(ys, dtype=np.float32)
|
| 204 |
+
|
| 205 |
+
return features_list, y, kept_df
|
| 206 |
+
|
| 207 |
+
|
| 208 |
+
def save_shared_vocab(
|
| 209 |
+
df,
|
| 210 |
+
radical_col: str = "radical_smiles",
|
| 211 |
+
out_path: Optional[str] = None,
|
| 212 |
+
):
|
| 213 |
+
if out_path is None:
|
| 214 |
+
out_path = str(PREPROCESSOR_PATH)
|
| 215 |
+
|
| 216 |
+
r = df[radical_col].apply(canonicalize_smiles)
|
| 217 |
+
all_smiles = r.dropna().unique().tolist()
|
| 218 |
+
|
| 219 |
+
for s in all_smiles:
|
| 220 |
+
preprocessor(s, train=True)
|
| 221 |
+
|
| 222 |
+
preprocessor.to_json(out_path)
|
| 223 |
+
print("Saved:", out_path)
|
mimis_inference.py
CHANGED
|
@@ -1,80 +1,61 @@
|
|
| 1 |
-
import json
|
| 2 |
import numpy as np
|
| 3 |
import tensorflow as tf
|
| 4 |
-
from
|
| 5 |
-
import nfp
|
| 6 |
from rdkit import RDLogger
|
| 7 |
from pathlib import Path
|
| 8 |
-
from rdkit import Chem
|
| 9 |
|
| 10 |
RDLogger.DisableLog("rdApp.*")
|
| 11 |
|
| 12 |
BASE_DIR = Path(__file__).resolve().parent
|
| 13 |
-
MODEL_DIR = str(BASE_DIR / "philicity_model_v1")
|
| 14 |
-
PREPROCESSOR_JSON = str(BASE_DIR / "philicity_model_v1.json")
|
| 15 |
-
METADATA_JSON = str(BASE_DIR / "philicity_model_v1.metadata.json")
|
| 16 |
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
_fn = _sm.signatures["serving_default"] # or "serve"
|
| 20 |
-
|
| 21 |
-
# create preprocessor
|
| 22 |
-
preprocessor_shared = nfp.SmilesBondIndexPreprocessor(
|
| 23 |
-
atom_features=featurize_atom,
|
| 24 |
-
bond_features=featurize_bond,
|
| 25 |
-
explicit_hs=True,
|
| 26 |
-
output_dtype="int64",
|
| 27 |
-
)
|
| 28 |
|
| 29 |
-
# load preprocessor
|
| 30 |
-
|
| 31 |
|
| 32 |
-
|
| 33 |
-
|
|
|
|
| 34 |
|
| 35 |
-
# load preprocessor metadata
|
| 36 |
-
with open(METADATA_JSON, "r") as f:
|
| 37 |
-
metadata = json.load(f)
|
| 38 |
|
| 39 |
def predict_philicity(original_smiles: str, radical_smiles: str) -> float:
|
| 40 |
"""
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
:return:
|
| 45 |
"""
|
|
|
|
| 46 |
|
| 47 |
-
|
| 48 |
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
"orig_bond": pair_feats["original"]["bond"],
|
| 52 |
-
"orig_connectivity": pair_feats["original"]["connectivity"],
|
| 53 |
-
"rad_atom": pair_feats["radical"]["atom"],
|
| 54 |
-
"rad_bond": pair_feats["radical"]["bond"],
|
| 55 |
-
"rad_connectivity": pair_feats["radical"]["connectivity"],
|
| 56 |
-
"radical_center": pair_feats["radical_center"],
|
| 57 |
-
}
|
| 58 |
-
|
| 59 |
-
x_batched = {}
|
| 60 |
-
for k, v in x_flat.items():
|
| 61 |
-
arr = np.asarray(v)
|
| 62 |
if arr.ndim == 0:
|
| 63 |
arr = arr.reshape(1,)
|
| 64 |
else:
|
| 65 |
-
arr = arr[None, ...]
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
|
| 68 |
-
y = _fn(**x_batched)
|
| 69 |
-
y = y[
|
| 70 |
|
| 71 |
-
|
|
|
|
| 72 |
|
| 73 |
-
if __name__ == "__main__":
|
| 74 |
|
| 75 |
-
|
| 76 |
orig = "CCO"
|
| 77 |
-
rad
|
| 78 |
-
phi
|
| 79 |
-
print(f"philicity of {rad} from {orig} = {phi}")
|
| 80 |
-
|
|
|
|
|
|
|
| 1 |
import numpy as np
|
| 2 |
import tensorflow as tf
|
| 3 |
+
from RaPTOR.mimis_featurizer_v2 import featurize_radical, load_preprocessor
|
|
|
|
| 4 |
from rdkit import RDLogger
|
| 5 |
from pathlib import Path
|
|
|
|
| 6 |
|
| 7 |
RDLogger.DisableLog("rdApp.*")
|
| 8 |
|
| 9 |
BASE_DIR = Path(__file__).resolve().parent
|
|
|
|
|
|
|
|
|
|
| 10 |
|
| 11 |
+
MODEL_DIR = str(BASE_DIR / "philicity_model_v2")
|
| 12 |
+
PREPROCESSOR_JSON = str(BASE_DIR / "philicity_model_v2.json")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
|
| 14 |
+
# load preprocessor vocab
|
| 15 |
+
load_preprocessor(PREPROCESSOR_JSON)
|
| 16 |
|
| 17 |
+
# load the saved model
|
| 18 |
+
_sm = tf.saved_model.load(MODEL_DIR)
|
| 19 |
+
_fn = _sm.signatures["serving_default"]
|
| 20 |
|
|
|
|
|
|
|
|
|
|
| 21 |
|
| 22 |
def predict_philicity(original_smiles: str, radical_smiles: str) -> float:
|
| 23 |
"""
|
| 24 |
+
Given a closed-shell SMILES and a radical SMILES, returns the philicity value.
|
| 25 |
+
original_smiles is accepted for API compatibility but not used by this model
|
| 26 |
+
(the new model is single-graph: radical only).
|
|
|
|
| 27 |
"""
|
| 28 |
+
feats = featurize_radical(radical_smiles, canonicalize=True)
|
| 29 |
|
| 30 |
+
rad = feats["radical"]
|
| 31 |
|
| 32 |
+
def to_batched(arr, dtype):
|
| 33 |
+
arr = np.asarray(arr)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
if arr.ndim == 0:
|
| 35 |
arr = arr.reshape(1,)
|
| 36 |
else:
|
| 37 |
+
arr = arr[None, ...] # add batch dim
|
| 38 |
+
return tf.convert_to_tensor(arr, dtype=dtype)
|
| 39 |
+
|
| 40 |
+
x_batched = {
|
| 41 |
+
"rad_atom": to_batched(rad["atom"], tf.int64),
|
| 42 |
+
"rad_bond": to_batched(rad["bond"], tf.int64),
|
| 43 |
+
"rad_connectivity": to_batched(rad["connectivity"], tf.int64),
|
| 44 |
+
"radical_center": to_batched(feats["radical_center"], tf.int64),
|
| 45 |
+
"radical_center_mask": to_batched(feats["radical_center_mask"], tf.float32),
|
| 46 |
+
"topo_dist_to_rc": to_batched(feats["topo_dist_to_rc"], tf.float32),
|
| 47 |
+
"gasteiger_charges": to_batched(feats["gasteiger_charges"], tf.float32),
|
| 48 |
+
}
|
| 49 |
|
| 50 |
+
y = _fn(**x_batched)
|
| 51 |
+
y = list(y.values())[0] # get the single output tensor regardless of key name
|
| 52 |
|
| 53 |
+
# model was trained on log1p(philicity) — convert back to original scale
|
| 54 |
+
return float(np.expm1(y.numpy().squeeze()))
|
| 55 |
|
|
|
|
| 56 |
|
| 57 |
+
if __name__ == "__main__":
|
| 58 |
orig = "CCO"
|
| 59 |
+
rad = "C[C]O"
|
| 60 |
+
phi = predict_philicity(orig, rad)
|
| 61 |
+
print(f"philicity of {rad} from {orig} = {phi:.4f}")
|
|
|
philicity_model_v2.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"output_dtype": "int64", "atom_tokenizer": {"_data": {"unk": 1, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 2, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 3, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 4, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 5, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 6, "('Br', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 7, "('H', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.UNSPECIFIED)": 8, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 3, rdkit.Chem.rdchem.HybridizationType.SP3)": 9, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 10, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 11, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 12, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 13, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 14, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 15, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 16, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 17, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 18, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 19, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 20, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 21, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 22, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 23, "('Cl', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 24, "('F', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 25, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 26, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 27, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 28, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 2, rdkit.Chem.rdchem.HybridizationType.SP2)": 29, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 30, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 31, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 2, rdkit.Chem.rdchem.HybridizationType.SP2)": 32, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 33, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP)": 34, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP)": 35, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 36, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 37, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 38, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 39, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 40, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 4, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 41, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 42, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 43, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 44, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 45, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 46, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 47, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 4, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 48, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 49, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 50, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 51, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 52, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 3, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 53, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 54, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 55, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 3, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 56, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 57, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 58, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 59, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 'max', 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 60, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 61, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 3, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 62, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 'max', 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 63, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 3, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 64, "('I', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 65, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 66, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 67, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 68, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 69, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 5, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 70, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 71, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 72, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 5, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 73, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 74, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 75, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 76, "('C', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 77, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 78, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 79, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 80, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 81, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 82, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 83, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 84, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 85, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 86, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 87, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 88, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 89, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 90, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 91, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 92, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 93, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 94, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 95, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 96, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 97, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 98, "('N', 0, 1, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 99, "('O', 0, -1, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 100, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP)": 101, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 102, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 103, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 104, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 105, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 106, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP)": 107, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 108, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 109, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 110, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 111, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 112, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 113, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 114, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 115, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 116, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 117, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 118, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 119, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 120, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 121, "('B', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 122, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 123, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 124, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 125, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 126, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 127, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 128, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 129, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3D)": 130, "('O', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 131, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 132, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 133, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 134, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 135, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 136, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 137, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 138, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 139, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 140, "('N', 0, 1, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 141, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 142, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 143, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 144, "('B', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 145, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 146, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 147, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 148, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 149, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 150, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 151, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 152, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 153, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 154, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 155, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 156, "('C', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 157, "('B', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 158, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 159, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 160, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 161, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 3, rdkit.Chem.rdchem.HybridizationType.SP3)": 162, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 163, "('C', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 164, "('C', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 165, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 166, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 167, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 168, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 169, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 170, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 171, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 172, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 173, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 174, "('C', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 175, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 176, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 177, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 178, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3D)": 179, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 180, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 181, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 182, "('N', 1, 1, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 183, "('O', 0, -1, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 184, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 185, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 186, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 187, "('C', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 188, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 189, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 190, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 191, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 192, "('Si', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 193, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 194, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 195, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 196, "('N', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 197, "('Se', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 198, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 3, rdkit.Chem.rdchem.HybridizationType.SP3)": 199, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 200, "('O', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 201, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 202, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 203, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 204, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 205, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 206, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 207, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 208, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 209, "('Se', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 210, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 211, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 212, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 213, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 214, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 215, "('Se', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 216, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 217, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 218, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 219, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 220, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3D)": 221, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 222, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 223, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 224, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 225, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 226, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 227, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 228, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 229, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 230, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 231, "('C', 3, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 232, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 233, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 234, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 235, "('C', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 3, rdkit.Chem.rdchem.HybridizationType.SP3)": 236, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 237, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 238, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 239, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 2, 0, rdkit.Chem.rdchem.HybridizationType.SP)": 240, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 2, rdkit.Chem.rdchem.HybridizationType.SP2)": 241, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 242, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 243, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 244, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 5, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 245, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 246, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3D)": 247, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 248, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 249, "('O', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 0, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 250, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 251, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 252, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 'max', 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 253, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP2)": 254, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 255, "('Si', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 256, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 257, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 258, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 4, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 259, "('P', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 4, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 260, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 261, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 262, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 263, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 264, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 265, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 'max', 3, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 266, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 267, "('Cl', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 268, "('N', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 269, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 'max', 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 270, "('Cl', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 0, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 271, "('S', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP)": 272, "('S', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 273, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 5, 5, 0, rdkit.Chem.rdchem.HybridizationType.SP3D)": 274, "('N', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 275, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 4, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 276, "('F', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 0, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 277, "('F', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 278, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 3, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 279, "('C', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 280, "('I', 1, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 0, 0, rdkit.Chem.rdchem.HybridizationType.SP3)": 281, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 4, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 282, "('C', 2, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 1, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 283, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CCW, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 284, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_TETRAHEDRAL_CW, False, 0, 4, 1, rdkit.Chem.rdchem.HybridizationType.SP3)": 285, "('N', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 3, 3, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 286, "('O', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, True, 3, 2, 0, rdkit.Chem.rdchem.HybridizationType.SP2)": 287, "('P', 0, 0, rdkit.Chem.rdchem.ChiralType.CHI_UNSPECIFIED, False, 0, 4, 2, rdkit.Chem.rdchem.HybridizationType.SP3)": 288}, "num_classes": 288, "train": true, "unknown": []}, "bond_tokenizer": {"_data": {"unk": 1, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 2, "C-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 3, "C-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 4, "C-N (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 5, "N-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 6, "N-N (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 7, "N-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 8, "C-Br (rdkit.Chem.rdchem.BondType.SINGLE, False)": 9, "Br-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 10, "H-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 11, "H-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 12, "C-O (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 13, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, True)": 14, "C-O (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 15, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, True)": 16, "O-C (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 17, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, True)": 18, "O-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 19, "O-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 20, "H-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 21, "O-N (rdkit.Chem.rdchem.BondType.SINGLE, True)": 22, "N-O (rdkit.Chem.rdchem.BondType.SINGLE, True)": 23, "C-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 24, "C-N (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 25, "N-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 26, "O-N (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 27, "N-O (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 28, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 29, "C-S (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 30, "S-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 31, "C-Cl (rdkit.Chem.rdchem.BondType.SINGLE, False)": 32, "Cl-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 33, "F-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 34, "C-F (rdkit.Chem.rdchem.BondType.SINGLE, False)": 35, "C-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 36, "S-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 37, "S-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 38, "H-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 39, "N-S (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 40, "S-N (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 41, "O-S (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 42, "S-O (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 43, "S-Cl (rdkit.Chem.rdchem.BondType.SINGLE, False)": 44, "Cl-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 45, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, True)": 46, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, True)": 47, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 48, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 49, "N-C (rdkit.Chem.rdchem.BondType.TRIPLE, True)": 50, "C-N (rdkit.Chem.rdchem.BondType.TRIPLE, True)": 51, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 52, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 53, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 54, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 55, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 56, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 57, "N-C (rdkit.Chem.rdchem.BondType.DOUBLE, True) R5": 58, "C-N (rdkit.Chem.rdchem.BondType.DOUBLE, True) R5": 59, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, True) R5": 60, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R5": 61, "N-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 62, "N-N (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 63, "N-C (rdkit.Chem.rdchem.BondType.TRIPLE, False)": 64, "C-N (rdkit.Chem.rdchem.BondType.TRIPLE, False)": 65, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 66, "C-S (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 67, "S-C (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 68, "S-S (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 69, "C-I (rdkit.Chem.rdchem.BondType.SINGLE, False)": 70, "I-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 71, "N-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 72, "O-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 73, "O-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 74, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 75, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, False) R5": 76, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 77, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 78, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 79, "C-O (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 80, "O-C (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 81, "N-C (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 82, "C-N (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 83, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, True) Rmax": 84, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, True) Rmax": 85, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, True) Rmax": 86, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R5": 87, "S-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 88, "N-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 89, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, True) Rmax": 90, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, True) Rmax": 91, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, True) Rmax": 92, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 93, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 94, "N-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 95, "O-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 96, "Si-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 97, "Si-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 98, "C-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 99, "N-N (rdkit.Chem.rdchem.BondType.SINGLE, True)": 100, "N-O (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 101, "O-N (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 102, "C-C (rdkit.Chem.rdchem.BondType.TRIPLE, True)": 103, "C-S (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 104, "S-C (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 105, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, True) R5": 106, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, True) R5": 107, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R5": 108, "O-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 109, "P-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 110, "P-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 111, "P-Cl (rdkit.Chem.rdchem.BondType.SINGLE, False)": 112, "S-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 113, "Cl-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 114, "C-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 115, "S-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 116, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 117, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 118, "Cl-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 119, "Si-Cl (rdkit.Chem.rdchem.BondType.SINGLE, False)": 120, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 121, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 122, "C-C (rdkit.Chem.rdchem.BondType.TRIPLE, False)": 123, "C-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 124, "P-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 125, "N-B (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 126, "B-N (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 127, "B-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 128, "H-B (rdkit.Chem.rdchem.BondType.SINGLE, False)": 129, "S-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 130, "Si-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 131, "H-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 132, "C-N (rdkit.Chem.rdchem.BondType.DOUBLE, True) Rmax": 133, "N-C (rdkit.Chem.rdchem.BondType.DOUBLE, True) Rmax": 134, "N-N (rdkit.Chem.rdchem.BondType.SINGLE, True) R5": 135, "N-Cl (rdkit.Chem.rdchem.BondType.SINGLE, False)": 136, "Cl-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 137, "N-Br (rdkit.Chem.rdchem.BondType.SINGLE, False)": 138, "Br-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 139, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 140, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 141, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, False) Rmax": 142, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 143, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 144, "S-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 145, "O-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 146, "S-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 147, "C-O (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 148, "O-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 149, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R4": 150, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, True) R4": 151, "N-S (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 152, "S-N (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 153, "O-P (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 154, "P-O (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 155, "S-P (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 156, "P-S (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 157, "S-F (rdkit.Chem.rdchem.BondType.SINGLE, False)": 158, "F-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 159, "N-N (rdkit.Chem.rdchem.BondType.SINGLE, True) Rmax": 160, "P-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 161, "N-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 162, "N-I (rdkit.Chem.rdchem.BondType.SINGLE, False)": 163, "I-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 164, "N-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 165, "Si-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 166, "O-B (rdkit.Chem.rdchem.BondType.SINGLE, False)": 167, "B-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 168, "B-O (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 169, "O-B (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 170, "N-O (rdkit.Chem.rdchem.BondType.SINGLE, True) R5": 171, "O-N (rdkit.Chem.rdchem.BondType.SINGLE, True) R5": 172, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 173, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 174, "S-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 175, "C-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 176, "N-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 177, "C-S (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 178, "S-C (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 179, "P-O (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 180, "O-P (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 181, "N-N (rdkit.Chem.rdchem.BondType.DOUBLE, True) Rmax": 182, "C-B (rdkit.Chem.rdchem.BondType.SINGLE, False)": 183, "B-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 184, "F-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 185, "Si-F (rdkit.Chem.rdchem.BondType.SINGLE, False)": 186, "O-Si (rdkit.Chem.rdchem.BondType.SINGLE, True)": 187, "Si-O (rdkit.Chem.rdchem.BondType.SINGLE, True)": 188, "Si-O (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 189, "O-Si (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 190, "S-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 191, "O-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 192, "N-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 193, "O-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 194, "N-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 195, "S-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 196, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, True) R4": 197, "N-N (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 198, "N-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 199, "S-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 200, "Si-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 201, "C-Si (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 202, "Si-C (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 203, "Si-O (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 204, "C-Si (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 205, "O-Si (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 206, "P-F (rdkit.Chem.rdchem.BondType.SINGLE, False)": 207, "F-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 208, "O-S (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 209, "S-O (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 210, "C-P (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 211, "P-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 212, "N-O (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 213, "O-N (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 214, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R4": 215, "P-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 216, "H-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 217, "P-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 218, "Si-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 219, "P-C (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 220, "C-P (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 221, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, False) R3": 222, "N-F (rdkit.Chem.rdchem.BondType.SINGLE, False)": 223, "F-N (rdkit.Chem.rdchem.BondType.SINGLE, False)": 224, "N-N (rdkit.Chem.rdchem.BondType.DOUBLE, False) R5": 225, "Si-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 226, "C-Si (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 227, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, False) R4": 228, "N-N (rdkit.Chem.rdchem.BondType.DOUBLE, True) R5": 229, "C-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R3": 230, "C-Se (rdkit.Chem.rdchem.BondType.SINGLE, False)": 231, "Se-C (rdkit.Chem.rdchem.BondType.SINGLE, False)": 232, "P-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 233, "O-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 234, "P-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 235, "C-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 236, "N-P (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 237, "P-N (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 238, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, True) R4": 239, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R4": 240, "P-Br (rdkit.Chem.rdchem.BondType.SINGLE, False)": 241, "Br-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 242, "Si-Br (rdkit.Chem.rdchem.BondType.SINGLE, False)": 243, "Br-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 244, "Si-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 245, "S-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 246, "C-Se (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 247, "Se-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 248, "N-C (rdkit.Chem.rdchem.BondType.DOUBLE, False) R5": 249, "C-N (rdkit.Chem.rdchem.BondType.DOUBLE, False) R5": 250, "O-O (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 251, "N-O (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 252, "O-N (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 253, "N-C (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 254, "C-N (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 255, "Se-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 256, "H-Se (rdkit.Chem.rdchem.BondType.SINGLE, False)": 257, "C-S (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 258, "S-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 259, "C-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R4": 260, "P-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 261, "C-P (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 262, "C-N (rdkit.Chem.rdchem.BondType.DOUBLE, False) Rmax": 263, "N-C (rdkit.Chem.rdchem.BondType.DOUBLE, False) Rmax": 264, "P-P (rdkit.Chem.rdchem.BondType.SINGLE, False)": 265, "O-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R3": 266, "C-O (rdkit.Chem.rdchem.BondType.SINGLE, True) R3": 267, "S-S (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 268, "C-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 269, "S-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 270, "C-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 271, "P-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 272, "N-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 273, "P-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 274, "Si-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 275, "S-Si (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 276, "S-Br (rdkit.Chem.rdchem.BondType.SINGLE, False)": 277, "Br-S (rdkit.Chem.rdchem.BondType.SINGLE, False)": 278, "Si-I (rdkit.Chem.rdchem.BondType.SINGLE, False)": 279, "I-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 280, "O-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 281, "P-N (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 282, "N-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 283, "Si-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 284, "O-Si (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 285, "O-Cl (rdkit.Chem.rdchem.BondType.SINGLE, False)": 286, "Cl-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 287, "Si-Si (rdkit.Chem.rdchem.BondType.SINGLE, False)": 288, "C-Si (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 289, "Si-C (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 290, "O-F (rdkit.Chem.rdchem.BondType.SINGLE, False)": 291, "F-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 292, "N-C (rdkit.Chem.rdchem.BondType.SINGLE, True) R3": 293, "C-N (rdkit.Chem.rdchem.BondType.SINGLE, True) R3": 294, "S-C (rdkit.Chem.rdchem.BondType.DOUBLE, False) R5": 295, "C-S (rdkit.Chem.rdchem.BondType.DOUBLE, False) R5": 296, "C-C (rdkit.Chem.rdchem.BondType.DOUBLE, True) R3": 297, "S-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 298, "C-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 299, "P-C (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 300, "S-S (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 301, "P-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 302, "S-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 303, "P-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 304, "S-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R5": 305, "O-I (rdkit.Chem.rdchem.BondType.SINGLE, False)": 306, "I-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 307, "S-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 308, "C-S (rdkit.Chem.rdchem.BondType.SINGLE, True)": 309, "S-C (rdkit.Chem.rdchem.BondType.SINGLE, True)": 310, "C-S (rdkit.Chem.rdchem.BondType.DOUBLE, False) Rmax": 311, "S-C (rdkit.Chem.rdchem.BondType.DOUBLE, False) Rmax": 312, "Cl-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 313, "H-Cl (rdkit.Chem.rdchem.BondType.SINGLE, False)": 314, "O-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 315, "N-N (rdkit.Chem.rdchem.BondType.DOUBLE, False)": 316, "P-O (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 317, "O-P (rdkit.Chem.rdchem.BondType.AROMATIC, True) Rmax": 318, "C-S (rdkit.Chem.rdchem.BondType.TRIPLE, False)": 319, "S-C (rdkit.Chem.rdchem.BondType.TRIPLE, False)": 320, "S-N (rdkit.Chem.rdchem.BondType.SINGLE, True)": 321, "N-S (rdkit.Chem.rdchem.BondType.SINGLE, True)": 322, "P-S (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 323, "S-P (rdkit.Chem.rdchem.BondType.AROMATIC, True) R5": 324, "C-N (rdkit.Chem.rdchem.BondType.DOUBLE, True) R4": 325, "N-C (rdkit.Chem.rdchem.BondType.DOUBLE, True) R4": 326, "N-O (rdkit.Chem.rdchem.BondType.SINGLE, True) Rmax": 327, "O-N (rdkit.Chem.rdchem.BondType.SINGLE, True) Rmax": 328, "N-N (rdkit.Chem.rdchem.BondType.DOUBLE, True)": 329, "F-H (rdkit.Chem.rdchem.BondType.SINGLE, False)": 330, "H-F (rdkit.Chem.rdchem.BondType.SINGLE, False)": 331, "P-N (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 332, "N-P (rdkit.Chem.rdchem.BondType.SINGLE, False) Rmax": 333, "C-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R3": 334, "O-S (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 335, "S-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R3": 336, "C-O (rdkit.Chem.rdchem.BondType.AROMATIC, True) R4": 337, "O-C (rdkit.Chem.rdchem.BondType.AROMATIC, True) R4": 338, "O-O (rdkit.Chem.rdchem.BondType.AROMATIC, True) R4": 339, "O-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 340, "N-O (rdkit.Chem.rdchem.BondType.AROMATIC, True) R3": 341, "O-N (rdkit.Chem.rdchem.BondType.AROMATIC, True) R3": 342, "O-O (rdkit.Chem.rdchem.BondType.AROMATIC, True) R3": 343, "P-O (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 344, "O-P (rdkit.Chem.rdchem.BondType.SINGLE, False) R4": 345, "O-Br (rdkit.Chem.rdchem.BondType.SINGLE, False)": 346, "Br-O (rdkit.Chem.rdchem.BondType.SINGLE, False)": 347}, "num_classes": 347, "train": true, "unknown": []}, "atom_features": {}, "bond_features": {}, "explicit_hs": true}
|
philicity_model_v2/fingerprint.pb
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:206ed91d2597ce4735f865dc85b37f6eebab43a94069c0042033c5d8082e8cce
|
| 3 |
+
size 57
|
philicity_model_v2/saved_model.pb
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4f0cf645bf6c72bc508f9f88efffdadcb502b1d1fd7a009e314fc28d17a16699
|
| 3 |
+
size 2688736
|
philicity_model_v2/variables/variables.data-00000-of-00001
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:84150dc220d5fb40c3054737ac77b76d5637c12c6a6ddef70ccecadac1897a0d
|
| 3 |
+
size 15046801
|
philicity_model_v2/variables/variables.index
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7d953ae6a834bf20998634aae8458523ed5f72636d69f11210f7c1a9721d0c68
|
| 3 |
+
size 19360
|