1
+ from importlib .util import find_spec
1
2
from typing import Callable , Dict , Optional
2
3
3
- import selfies as sf
4
- from rdkit import Chem
4
+ _SELFIES_AVAILABLE = False
5
+ _RDKIT_AVAILABLE = False
6
+
7
+ if find_spec ("selfies" ):
8
+ import selfies as sf
9
+ _SELFIES_AVAILABLE = True
10
+
11
+ if find_spec ("rdkit" ):
12
+ from rdkit import Chem
13
+ _RDKIT_AVAILABLE = True
5
14
6
15
7
16
def convert_nt_to_aa (
@@ -51,6 +60,8 @@ def convert_aa_to_nt(
51
60
52
61
53
62
def convert_aa_to_smiles (aa_seq : str , allowed_aa : set ) -> Optional [str ]:
63
+ assert _RDKIT_AVAILABLE , "rdkit not available. This dependency is part of the mgm extra"
64
+
54
65
if not aa_seq .isupper ():
55
66
aa_seq = aa_seq .upper ()
56
67
@@ -69,6 +80,8 @@ def convert_aa_to_smiles(aa_seq: str, allowed_aa: set) -> Optional[str]:
69
80
def convert_smiles_to_aa (
70
81
smiles_seq : str ,
71
82
) -> Optional [str ]:
83
+ assert _RDKIT_AVAILABLE , "rdkit not available. This dependency is part of the mgm extra"
84
+
72
85
try :
73
86
mol = Chem .MolFromSmiles (smiles_seq )
74
87
aa_seq = Chem .MolToSequence (mol )
@@ -81,6 +94,7 @@ def convert_smiles_to_aa(
81
94
def convert_smiles_to_selfies (
82
95
smiles_seq : str ,
83
96
) -> Optional [str ]:
97
+ assert _SELFIES_AVAILABLE , "selfies not available. This dependency is part of the mgm extra"
84
98
try :
85
99
sf_seq = sf .encoder (smiles_seq )
86
100
return sf_seq
@@ -92,6 +106,7 @@ def convert_selfies_to_smiles(
92
106
selfies_seq : str ,
93
107
) -> Optional [str ]:
94
108
# TODO: add conversion of unknown selfies tokens to Ala selfies
109
+ assert _SELFIES_AVAILABLE , "selfies not available. This dependency is part of the mgm extra"
95
110
try :
96
111
smiles_seq = sf .decoder (selfies_seq )
97
112
return smiles_seq
0 commit comments