@@ -159,16 +159,6 @@ def _redux_allele(
159159 self , allele : str , redux_type : VALID_REDUCTION_TYPE , re_ping = True
160160 ) -> str :
161161 """Core allele reduction with ping logic"""
162- # Handle HLA- prefix
163- if HLA_regex .search (allele ):
164- hla , allele_name = allele .split ("-" )
165- redux_allele = self ._redux_allele (allele_name , redux_type )
166- if redux_allele :
167- if "/" in redux_allele :
168- return "/" .join ([f"HLA-{ ra } " for ra in redux_allele .split ("/" )])
169- return f"HLA-{ redux_allele } "
170- return redux_allele
171-
172162 if not self ._config ["strict" ]:
173163 allele = self ._get_non_strict_allele (allele )
174164
@@ -217,31 +207,32 @@ def redux(self, glstring: str, redux_type: VALID_REDUCTION_TYPE = "lgx") -> str:
217207 if processed_gl != glstring or self .is_glstring (processed_gl ):
218208 return processed_gl
219209
210+ # Remove HLA- prefix for processing the allele
211+ is_hla_prefix = HLA_regex .search (glstring )
212+ if is_hla_prefix :
213+ allele = glstring .split ("-" )[1 ]
214+ else :
215+ allele = glstring
220216 # Handle ignored allele suffixes
221217 if self ._config ["ignore_allele_with_suffixes" ]:
222- _ , fields = glstring .split ("*" )
218+ _ , fields = allele .split ("*" )
223219 if fields in self ._config ["ignore_allele_with_suffixes" ]:
224- return glstring
220+ return allele
225221
226222 # Handle V2 to V3 mapping
227- if self .v2_handler .is_v2 (glstring ):
228- glstring = self .v2_handler .map_v2_to_v3 (glstring )
229- return self .redux (glstring , redux_type )
223+ if self .v2_handler .is_v2 (allele ):
224+ allele = self .v2_handler .map_v2_to_v3 (allele )
225+ return self .redux (allele , redux_type )
230226
231227 # Handle Serology
232228 if self ._config ["reduce_serology" ] and self .serology_handler .is_serology (
233- glstring
229+ allele
234230 ):
235- alleles = self .serology_handler .get_alleles_from_serology (glstring )
231+ alleles = self .serology_handler .get_alleles_from_serology (allele )
236232 if alleles :
237233 return self .redux ("/" .join (alleles ), redux_type )
238234 return ""
239235
240- is_hla_prefix = HLA_regex .search (glstring )
241- if is_hla_prefix :
242- allele = glstring .split ("-" )[1 ]
243- else :
244- allele = glstring
245236 # Validate format
246237 if ":" in allele :
247238 loc_allele = allele .split (":" )
@@ -259,7 +250,7 @@ def redux(self, glstring: str, redux_type: VALID_REDUCTION_TYPE = "lgx") -> str:
259250 if "*" in allele :
260251 locus , _ = allele .split ("*" )
261252 if locus not in G_GROUP_LOCI :
262- return glstring
253+ return allele
263254 raise InvalidTypingError (
264255 f"{ glstring } is not a valid V2 or Serology typing."
265256 )
@@ -289,11 +280,17 @@ def redux(self, glstring: str, redux_type: VALID_REDUCTION_TYPE = "lgx") -> str:
289280
290281 # Handle short nulls
291282 if self ._config ["reduce_shortnull" ] and self .shortnull_handler .is_shortnull (
292- glstring
283+ allele
293284 ):
294- return self .redux ("/" .join (self .shortnulls [glstring ]), redux_type )
285+ return self .redux ("/" .join (self .shortnulls [allele ]), redux_type )
295286
296- return self ._redux_allele (glstring , redux_type )
287+ redux_allele = self ._redux_allele (allele , redux_type )
288+ # Add back 'HLA-' prefix when redux is done if needed
289+ if is_hla_prefix :
290+ if "/" in redux_allele :
291+ return "/" .join ([f"HLA-{ ra } " for ra in redux_allele .split ("/" )])
292+ redux_allele = f"HLA-{ redux_allele } "
293+ return redux_allele
297294
298295 @staticmethod
299296 def is_glstring (gl_string : str ) -> bool :
0 commit comments