@@ -46,6 +46,17 @@ class ValidationError(Exception):
46
46
"""TODO: Add issue structure."""
47
47
48
48
49
+ _DATATYPE_MAP = {}
50
+
51
+
52
+ def datatype_to_modality (datatype : str , schema : Namespace ) -> str :
53
+ """Generate a global map for datatype to modality."""
54
+ if not _DATATYPE_MAP :
55
+ for mod_name , mod_dtypes in schema .rules .modalities .items ():
56
+ _DATATYPE_MAP |= dict .from_keys (mod_dtypes , mod_name )
57
+ return _DATATYPE_MAP [datatype ]
58
+
59
+
49
60
@cache
50
61
def load_tsv (file : FileTree , * , max_rows = 0 ) -> Namespace :
51
62
"""Load TSV contents into a Namespace."""
@@ -130,14 +141,7 @@ def dataset_description(self) -> Namespace:
130
141
@cached_property
131
142
def modalities (self ) -> list [str ]:
132
143
"""List of modalities found in the dataset."""
133
- result = set ()
134
-
135
- modalities = self .schema .rules .modalities
136
- for datatype in self .datatypes :
137
- for mod_name , mod_dtypes in modalities .items ():
138
- if datatype in mod_dtypes .datatypes :
139
- result .add (mod_name )
140
-
144
+ result = {datatype_to_modality (datatype , self .schema ) for datatype in self .datatypes }
141
145
return list (result )
142
146
143
147
@cached_property
@@ -344,10 +348,7 @@ def extension(self) -> str | None:
344
348
@property
345
349
def modality (self ) -> str | None :
346
350
"""Modality of current file, for examples, MRI."""
347
- modalities = self .schema .rules .modalities
348
- for mod_name , mod_dtypes in modalities .items ():
349
- if self .datatype in mod_dtypes .datatypes :
350
- return mod_name
351
+ return datatype_to_modality (self .datatype , self .schema )
351
352
352
353
@property
353
354
def size (self ) -> int :
0 commit comments