@@ -96,8 +96,10 @@ def get_item(self, sequence: str | bytes) -> np.ndarray:
9696 return api .result_decode (data )
9797
9898
99- Score = namedtuple ("Score" , ["name" , "sequence" , "score" ])
100- SingleSiteScore = namedtuple ("SingleSiteScore" , ["mut_code" , "score" ])
99+ Score = namedtuple ("Score" , ["name" , "sequence" , "score" , "query_id" ])
100+ Score .__new__ .__defaults__ = (None ,)
101+ SingleSiteScore = namedtuple ("SingleSiteScore" , ["mut_code" , "score" , "query_id" ])
102+ SingleSiteScore .__new__ .__defaults__ = (None ,)
101103S = TypeVar ("S" , bound = Union [Score , SingleSiteScore ])
102104
103105
@@ -132,13 +134,18 @@ class EmbeddingsScoreFuture(BaseScoreFuture[Score]):
132134
133135 def stream (self ) -> Iterator [Score ]:
134136 stream = api .request_get_score_result (session = self .session , job_id = self .id )
135- # name, sequence, ...
136- next ( stream ) # ignore header
137+ header = next ( stream )
138+ has_query_id = len ( header ) > 0 and header [ 0 ]. strip (). lower () == "query_id"
137139 for line in stream :
138- # combine scores into numpy array
139- scores = np .array ([float (s ) for s in line [2 :]])
140- output = Score (name = line [0 ], sequence = line [1 ], score = scores )
141- yield output
140+ if has_query_id :
141+ query_id = line [0 ] if line [0 ] else None
142+ name , sequence = line [1 ], line [2 ]
143+ scores = np .array ([float (s ) for s in line [3 :]])
144+ else :
145+ query_id = None
146+ name , sequence = line [0 ], line [1 ]
147+ scores = np .array ([float (s ) for s in line [2 :]])
148+ yield Score (name = name , sequence = sequence , score = scores , query_id = query_id )
142149
143150
144151class EmbeddingsScoreSingleSiteFuture (BaseScoreFuture [SingleSiteScore ]):
@@ -148,13 +155,18 @@ class EmbeddingsScoreSingleSiteFuture(BaseScoreFuture[SingleSiteScore]):
148155
149156 def stream (self ) -> Iterator [SingleSiteScore ]:
150157 stream = api .request_get_score_result (session = self .session , job_id = self .id )
151- # name, sequence, ...
152- next ( stream ) # ignore header
158+ header = next ( stream )
159+ has_query_id = len ( header ) > 0 and header [ 0 ]. strip (). lower () == "query_id"
153160 for line in stream :
154- # combine scores into numpy array
155- scores = np .array ([float (s ) for s in line [1 :]])
156- output = SingleSiteScore (mut_code = line [0 ], score = scores )
157- yield output
161+ if has_query_id :
162+ query_id = line [0 ] if line [0 ] else None
163+ mut_code = line [1 ]
164+ scores = np .array ([float (s ) for s in line [2 :]])
165+ else :
166+ query_id = None
167+ mut_code = line [0 ]
168+ scores = np .array ([float (s ) for s in line [1 :]])
169+ yield SingleSiteScore (mut_code = mut_code , score = scores , query_id = query_id )
158170
159171
160172class EmbeddingsGenerateFuture (BaseScoreFuture [Score ]):
@@ -164,17 +176,18 @@ class EmbeddingsGenerateFuture(BaseScoreFuture[Score]):
164176
165177 def stream (self ) -> Iterator [Score ]:
166178 stream = api .request_get_generate_result (session = self .session , job_id = self .id )
167- # name, sequence, ...
168179 header = next (stream )
169- has_query_id = (
170- len (header ) > 2 and header [- 1 ].strip ().lower () == "query_id"
171- )
180+ has_query_id = len (header ) > 0 and header [0 ].strip ().lower () == "query_id"
172181 for line in stream :
173- # combine scores into numpy array
174- score_values = line [2 :- 1 ] if has_query_id else line [2 :]
175- scores = np .array ([float (s ) for s in score_values ])
176- output = Score (name = line [0 ], sequence = line [1 ], score = scores )
177- yield output
182+ if has_query_id :
183+ query_id = line [0 ] if line [0 ] else None
184+ name , sequence = line [1 ], line [2 ]
185+ scores = np .array ([float (s ) for s in line [3 :]])
186+ else :
187+ query_id = None
188+ name , sequence = line [0 ], line [1 ]
189+ scores = np .array ([float (s ) for s in line [2 :]])
190+ yield Score (name = name , sequence = sequence , score = scores , query_id = query_id )
178191
179192 @property
180193 def sequences (self ):
0 commit comments