@@ -119,14 +119,64 @@ def check_scattering_table_dir(scattering_table_dir: str):
119119
120120
121121def check_measurement_interval (measurement_interval ):
122- """Check measurement interval validity."""
122+ """Check measurement interval validity.
123+
124+ The measurement interval must be a positive natural number.
125+ It can be specified as an int or a float (but must represent a whole number)
126+
127+ Parameters
128+ ----------
129+ measurement_interval : int or float
130+ The measurement interval value to validate.
131+
132+ Returns
133+ -------
134+ int
135+ The validated measurement interval as an integer.
136+
137+ Raises
138+ ------
139+ ValueError
140+ If the measurement interval is not a valid positive natural number.
141+ TypeError
142+ If the measurement interval has an invalid type.
143+ """
144+ # Check for None
145+ if measurement_interval is None :
146+ raise ValueError ("'measurement_interval' cannot be None." )
147+
148+ # Check for empty string
123149 if isinstance (measurement_interval , str ) and measurement_interval == "" :
124- raise ValueError ("measurement_interval' must be specified as an integer value." )
125- if isinstance (measurement_interval , type (None )):
126- raise ValueError ("measurement_interval' can not be None." )
127- if isinstance (measurement_interval , str ) and not measurement_interval .isdigit ():
128- raise ValueError ("measurement_interval' is not a positive digit." )
129- return int (measurement_interval )
150+ raise ValueError ("'measurement_interval' must be specified as an integer value." )
151+
152+ # Check for boolean (bool is subclass of int, so check before int)
153+ if isinstance (measurement_interval , bool ):
154+ raise TypeError ("'measurement_interval' cannot be a boolean." )
155+
156+ # Handle string input
157+ if isinstance (measurement_interval , str ):
158+ if not measurement_interval .isdigit ():
159+ raise ValueError ("'measurement_interval' is not a positive integer." )
160+ raise ValueError ("'measurement_interval' must be specified as number, not as string'" )
161+
162+ # Handle numeric input (int or float)
163+ if isinstance (measurement_interval , (int , float )):
164+ # Check if positive
165+ if measurement_interval <= 0 :
166+ raise ValueError ("'measurement_interval' must be a positive number." )
167+
168+ # Check if it's a whole number (no decimals)
169+ if measurement_interval != int (measurement_interval ):
170+ raise ValueError (
171+ f"'measurement_interval' must be a natural number without decimals. Got { measurement_interval } ." ,
172+ )
173+
174+ return int (measurement_interval )
175+
176+ # Invalid type
177+ raise TypeError (
178+ f"'measurement_interval' must be an int or float. Got { type (measurement_interval ).__name__ } ." ,
179+ )
130180
131181
132182def check_measurement_intervals (measurement_intervals ):
@@ -611,7 +661,7 @@ def check_time(time):
611661 if isinstance (time , np .ndarray ):
612662 if np .issubdtype (time .dtype , np .datetime64 ):
613663 if time .size == 1 :
614- time = time [0 ].astype ("datetime64[s]" ).tolist ()
664+ time = np . atleast_1d ( time ) [0 ].astype ("datetime64[s]" ).tolist ()
615665 else :
616666 raise ValueError ("Expecting a single timestep!" )
617667 else :
0 commit comments