11from __future__ import annotations
2+
3+ import copy
4+ import re
5+ from typing import Dict , List
6+
27from somadata import Adat
38from somadata .tools .errors import AdatConcatError
4- from typing import List , Dict
9+
510from . import adat_concatenation_utils
6- import copy
7- import re
811
912
1013def _set_addition (key , value1 , value2 ):
@@ -17,7 +20,9 @@ def _set_addition(key, value1, value2):
1720
1821def _exact_match (key , value1 , value2 ):
1922 if value1 != value2 :
20- raise AdatConcatError (f'Header metadata mismatch where exact match is required. Key: { key } , Values: { value1 } , { value2 } ' )
23+ raise AdatConcatError (
24+ f'Header metadata mismatch where exact match is required. Key: { key } , Values: { value1 } , { value2 } '
25+ )
2126 return value1
2227
2328
@@ -69,7 +74,6 @@ def _concat_header_metadata(adats: List[Adat], merge_strategy=None):
6974 # Add the rest of the adats' headers
7075 for adat in adats [1 :]:
7176 for key , value in adat .header_metadata .items ():
72-
7377 # If key is not in the base_header, add it
7478 if key not in base_header :
7579 base_header [key ] = value
@@ -95,11 +99,17 @@ def _concat_column_metadata(adats: List[Adat]) -> Dict(str, List):
9599 for name in adat .columns .names :
96100 values = list (adat .columns .get_level_values (name ))
97101 if name == 'ColCheck' :
98- col_checks .append ([True if value == 'PASS' else False for value in values ])
102+ col_checks .append (
103+ [True if value == 'PASS' else False for value in values ]
104+ )
99105 col_metadata ['ColCheck' ] = []
100106 elif name in col_metadata :
101107 if col_metadata [name ] != values :
102- raise AdatConcatError ('Mismatching column metadata in: ' + name )
108+ raise AdatConcatError (
109+ f'Mismatching column metadata in: { name } \n '
110+ f'Existing values: { col_metadata [name ]} \n '
111+ f'New values: { values } '
112+ )
103113 else :
104114 col_metadata [name ] = values
105115
@@ -122,7 +132,10 @@ def _concat_row_metadata(adats: List[Adat]) -> Dict(str, List):
122132 symmetric_difference = symmetric_difference .union (names ^ set (adat .index .names ))
123133 names = names .union (symmetric_difference )
124134 if len (symmetric_difference ) > 0 :
125- raise AdatConcatError ('Mismatching index name, ensure row metadata columns match. Names: ' + ', ' .join (sorted (symmetric_difference )))
135+ raise AdatConcatError (
136+ 'Mismatching index name, ensure row metadata columns match. Names: '
137+ + ', ' .join (sorted (symmetric_difference ))
138+ )
126139
127140 # Get Row Metadata
128141 row_metadata = {}
@@ -181,12 +194,16 @@ def concatenate_adats(adats: List[Adat], header_merge_strategy: Dict = None) ->
181194 >>> adat = concatenate_adats([adat1, adat2, adat3], header_merge_strategy={'default_action': 'null', 'properties': {'AdatId': 'exact'}})
182195 """
183196
184- header_metadata = _concat_header_metadata (adats , merge_strategy = header_merge_strategy )
197+ header_metadata = _concat_header_metadata (
198+ adats , merge_strategy = header_merge_strategy
199+ )
185200 column_metadata = _concat_column_metadata (adats )
186201 row_metadata = _concat_row_metadata (adats )
187202 rfu_matrix = _concat_rfus (adats )
188203
189- adat = Adat .from_features (rfu_matrix , row_metadata , column_metadata , header_metadata )
204+ adat = Adat .from_features (
205+ rfu_matrix , row_metadata , column_metadata , header_metadata
206+ )
190207 return adat
191208
192209
@@ -200,7 +217,7 @@ def _quick_concat(adats):
200217 data = rfu_matrix ,
201218 index = row_multiindex ,
202219 columns = adats [0 ].columns ,
203- header_metadata = adats [0 ].header_metadata
220+ header_metadata = adats [0 ].header_metadata ,
204221 )
205222
206223
@@ -233,21 +250,23 @@ def smart_adat_concatenation(adats, somamer_source_adat=None):
233250 # About to change the adats somamer metadata. Make sure their seqids are the same.
234251 if type (somamer_source_adat ) == Adat :
235252 adats = adats + [somamer_source_adat ]
236-
253+
237254 adats = adat_concatenation_utils .prepare_rfu_matrix_for_inner_merge (adats )
238255
239256 # Unpack & update if we're updating
240257 if type (somamer_source_adat ) == Adat :
241258 somamer_source_adat = adats [- 1 ]
242259 adats = adats [0 :- 1 ]
243- adats = adat_concatenation_utils .convert_somamer_metadata_to_source (adats , somamer_source_adat )
260+ adats = adat_concatenation_utils .convert_somamer_metadata_to_source (
261+ adats , somamer_source_adat
262+ )
244263
245264 header_merge_strategy = {
246265 'default_action' : 'exact_match' ,
247266 'properties' : {
248267 'AdatId' : 'null' ,
249268 '!AdatId' : 'null' ,
250- }
269+ },
251270 }
252271
253272 adats = adat_concatenation_utils .robust_merge_adat_headers (adats )
0 commit comments