1717from __future__ import annotations
1818
1919import os
20- from collections import namedtuple
20+ import typing
21+ from dataclasses import dataclass , field
2122
2223import numpy as np
2324import xlrd
2627 LMS_ConeFundamentals ,
2728 XYZ_ColourMatchingFunctions ,
2829)
29- from colour .hints import Dict , NDArrayFloat
30+
31+ if typing .TYPE_CHECKING :
32+ from colour .hints import Dict
33+
3034from colour .utilities import as_float_array , tstack
3135
3236from colour_datasets .loaders import AbstractDatasetLoader
4751]
4852
4953
50- class Specification_Asano2015 (
51- namedtuple (
52- "Specification_Asano2015" ,
53- ("XYZ_2" , "XYZ_10" , "LMS_2" , "LMS_10" , "parameters" , "others" ),
54- )
55- ):
54+ @dataclass (frozen = True )
55+ class Specification_Asano2015 :
5656 """
5757 Define the *Asano (2015)* specification for an observer.
5858
@@ -74,24 +74,14 @@ class Specification_Asano2015(
7474 References
7575 ----------
7676 :cite:`Asano2015`
77- """ # noqa: D405, D407, D410, D411
78-
79- def __new__ (
80- cls ,
81- XYZ_2 : XYZ_ColourMatchingFunctions ,
82- XYZ_10 : XYZ_ColourMatchingFunctions ,
83- LMS_2 : LMS_ConeFundamentals ,
84- LMS_10 : LMS_ConeFundamentals ,
85- parameters : NDArrayFloat ,
86- others : Dict | None = None ,
87- ):
88- """
89- Return a new instance of the
90- :class:`colour_datasets.loaders.asano2015.Specification_Asano2015`
91- class.
92- """
77+ """
9378
94- return super ().__new__ (cls , XYZ_2 , XYZ_10 , LMS_2 , LMS_10 , parameters , others )
79+ XYZ_2 : XYZ_ColourMatchingFunctions
80+ XYZ_10 : XYZ_ColourMatchingFunctions
81+ LMS_2 : LMS_ConeFundamentals
82+ LMS_10 : LMS_ConeFundamentals
83+ parameters : Dict
84+ others : Dict = field (default_factory = dict )
9585
9686
9787class DatasetLoader_Asano2015 (AbstractDatasetLoader ):
@@ -199,7 +189,7 @@ def load(self) -> Dict[str, Dict[int, Specification_Asano2015]]:
199189 observer ["LMS_2" ],
200190 observer ["LMS_10" ],
201191 observer ["parameters" ],
202- dict (zip (header , values [i ])),
192+ dict (zip (header , values [i ], strict = False )),
203193 )
204194
205195 return self ._content
@@ -284,7 +274,9 @@ def parse_workbook_Asano2015(
284274
285275 for i in range (observers [1 ]):
286276 observer = i + 1
287- data [observer ]["parameters" ] = dict (zip (header , as_float_array (values [i ])))
277+ data [observer ]["parameters" ] = dict (
278+ zip (header , as_float_array (values [i ]), strict = False )
279+ )
288280
289281 return data
290282
0 commit comments