@@ -302,11 +302,15 @@ def is_complex(self) -> bool:
302
302
@computed_field
303
303
@cached_property
304
304
def is_non_additive (self ) -> bool :
305
- # simple check: do any of the weight dosage columns have data?
306
- for x in self .non_additive_columns :
307
- if getattr (self , x ) is not None :
308
- return True
309
- return False
305
+ if self .effect_weight is not None :
306
+ # if there's an effect weight value, we can work with it
307
+ non_additive = False
308
+ else :
309
+ # dosage columns are trickier
310
+ non_additive = any (
311
+ getattr (self , col ) is not None for col in self .non_additive_columns
312
+ )
313
+ return non_additive
310
314
311
315
@computed_field
312
316
@cached_property
@@ -355,8 +359,6 @@ def check_effect_weights(self) -> Self:
355
359
):
356
360
case None , None , None , None :
357
361
raise ValueError ("All effect weight fields are missing" )
358
- case str (), str (), str (), str ():
359
- raise ValueError ("Additive and non-additive fields are present" )
360
362
case None , zero , one , two if any (x is None for x in (zero , one , two )):
361
363
raise ValueError ("Dosage missing effect weight" )
362
364
case _:
@@ -417,7 +419,7 @@ class ScoreVariant(CatalogScoreVariant):
417
419
>>> harmonised_variant.is_harmonised
418
420
True
419
421
420
- >>> variant_nonadditive = ScoreVariant(**{"rsID": None, "chr_name": "1", "chr_position": 1, "effect_allele": "A", "effect_weight ": 0.5 , "dosage_0_weight ": 0, "dosage_1_weight ": 1, "row_nr": 0, "accession": "test"})
422
+ >>> variant_nonadditive = ScoreVariant(**{"rsID": None, "chr_name": "1", "chr_position": 1, "effect_allele": "A", "dosage_0_weight ": 0, "dosage_1_weight ": 1, "dosage_2_weight ": 0, "row_nr": 0, "accession": "test"})
421
423
>>> variant_nonadditive.is_non_additive
422
424
True
423
425
>>> variant_nonadditive.is_complex
0 commit comments