@@ -147,14 +147,39 @@ def retro_search_compound(
147147 from retromol .fingerprint import (
148148 FingerprintGenerator ,
149149 NameSimilarityConfig ,
150- polyketide_family_of
150+ polyketide_family_of ,
151+ polyketide_ancestors_of ,
151152 )
152153 from retromol .rules import get_path_default_matching_rules
153154 except ImportError :
154155 logger .error ("RetroMol library is not installed. Please install it to use retro_search." )
155156 return []
156157
157- raise RuntimeError ("Please update generator setup to match recent changes in retromol ETL code; centralize generator setup?" )
158+ COLLAPSE_BY_NAME = {
159+ "glycosylation" : ["glycosyltransferase" ],
160+ "methylation" : ["methyltransferase" ],
161+ }
162+
163+ def _setup_fingerprint_generator (yaml_path : str ) -> FingerprintGenerator :
164+ """
165+ Setup and return a FingerprintGenerator instance.
166+
167+ :return: FingerprintGenerator instance
168+ """
169+ collapse_by_name : list [str ] = list (COLLAPSE_BY_NAME .keys ())
170+ cfg = NameSimilarityConfig (
171+ # family_of=polyketide_family_of,
172+ # family_repeat_scale=1,
173+ ancestors_of = polyketide_ancestors_of ,
174+ ancestor_repeat_scale = 1 ,
175+ symmetric = True ,
176+ )
177+ generator = FingerprintGenerator (
178+ matching_rules_yaml = yaml_path ,
179+ collapse_by_name = collapse_by_name ,
180+ name_similarity = cfg
181+ )
182+ return generator
158183
159184 # limit top-k to 500 for performance reasons
160185 if top_k > 500 :
@@ -168,13 +193,14 @@ def retro_search_compound(
168193 logger .info (f"RetroMol coverage for input compound: { coverage :.2%} " )
169194
170195 # Setup generator
171- collapse_by_name = ["glycosylation" , "methylation" ]
172- cfg = NameSimilarityConfig (family_of = polyketide_family_of , symmetric = True , family_repeat_scale = 1 )
173- generator = FingerprintGenerator (
174- matching_rules_yaml = get_path_default_matching_rules (),
175- collapse_by_name = collapse_by_name ,
176- name_similarity = cfg
177- )
196+ # collapse_by_name = ["glycosylation", "methylation"]
197+ # cfg = NameSimilarityConfig(family_of=polyketide_family_of, symmetric=True, family_repeat_scale=1)
198+ # generator = FingerprintGenerator(
199+ # matching_rules_yaml=get_path_default_matching_rules(),
200+ # collapse_by_name=collapse_by_name,
201+ # name_similarity=cfg
202+ # )
203+ generator = _setup_fingerprint_generator (get_path_default_matching_rules ())
178204 logger .info (f"Initialized RetroMol FingerprintGenerator: { generator } " )
179205
180206 # Calculate fingerprints of shape (N, 512)
@@ -183,6 +209,10 @@ def retro_search_compound(
183209 logger .warning ("No RetroMol fingerprints could be generated for the input compound." )
184210 return []
185211
212+ for fp in fps :
213+ print (fp .sum ())
214+ exit ("CHK" )
215+
186216 vec_col = "fp_retro_b512_vec_counted" if counted else "fp_retro_b512_vec_binary"
187217
188218 # Cosine distance operator in pgvector is '<=>'; cosine similarity = 1 - distance
0 commit comments