@@ -582,28 +582,6 @@ def _check_consistency(self, prepend_error=''):
582
582
raise RuntimeError ('%sinfo["meas_date"] must be a datetime '
583
583
'object in UTC or None, got "%r"'
584
584
% (prepend_error , repr (self ['meas_date' ]),))
585
- meas_date_stamp = _dt_to_stamp (meas_date )
586
- if (meas_date_stamp [0 ] < np .iinfo ('>i4' ).min or
587
- meas_date_stamp [0 ] > np .iinfo ('>i4' ).max ):
588
- raise RuntimeError (
589
- '%sinfo["meas_date"] seconds must be between "%r" '
590
- 'and "%r", got "%r"'
591
- % (prepend_error , (np .iinfo ('>i4' ).min , 0 ),
592
- (np .iinfo ('>i4' ).max , 0 ), meas_date_stamp [0 ],))
593
-
594
- for key in ('file_id' , 'meas_id' ):
595
- value = self .get (key )
596
- if value is not None :
597
- assert 'msecs' not in value
598
- for key_2 in ('secs' , 'usecs' ):
599
- if (value [key_2 ] < np .iinfo ('>i4' ).min or
600
- value [key_2 ] > np .iinfo ('>i4' ).max ):
601
- raise RuntimeError ('%sinfo[%s][%s] must be between '
602
- '"%r" and "%r", got "%r"'
603
- % (prepend_error , key , key_2 ,
604
- np .iinfo ('>i4' ).min ,
605
- np .iinfo ('>i4' ).max ,
606
- value [key_2 ]),)
607
585
608
586
chs = [ch ['ch_name' ] for ch in self ['chs' ]]
609
587
if len (self ['ch_names' ]) != len (chs ) or any (
@@ -1290,6 +1268,40 @@ def read_meas_info(fid, tree, clean_bads=False, verbose=None):
1290
1268
return info , meas
1291
1269
1292
1270
1271
+ def _check_dates (info , prepend_error = '' ):
1272
+ """Check dates before writing as fif files.
1273
+
1274
+ It's needed because of the limited integer precision
1275
+ of the fix standard.
1276
+ """
1277
+ for key in ('file_id' , 'meas_id' ):
1278
+ value = info .get (key )
1279
+ if value is not None :
1280
+ assert 'msecs' not in value
1281
+ for key_2 in ('secs' , 'usecs' ):
1282
+ if (value [key_2 ] < np .iinfo ('>i4' ).min or
1283
+ value [key_2 ] > np .iinfo ('>i4' ).max ):
1284
+ raise RuntimeError ('%sinfo[%s][%s] must be between '
1285
+ '"%r" and "%r", got "%r"'
1286
+ % (prepend_error , key , key_2 ,
1287
+ np .iinfo ('>i4' ).min ,
1288
+ np .iinfo ('>i4' ).max ,
1289
+ value [key_2 ]),)
1290
+
1291
+ meas_date = info .get ('meas_date' )
1292
+ if meas_date is None :
1293
+ return
1294
+
1295
+ meas_date_stamp = _dt_to_stamp (meas_date )
1296
+ if (meas_date_stamp [0 ] < np .iinfo ('>i4' ).min or
1297
+ meas_date_stamp [0 ] > np .iinfo ('>i4' ).max ):
1298
+ raise RuntimeError (
1299
+ '%sinfo["meas_date"] seconds must be between "%r" '
1300
+ 'and "%r", got "%r"'
1301
+ % (prepend_error , (np .iinfo ('>i4' ).min , 0 ),
1302
+ (np .iinfo ('>i4' ).max , 0 ), meas_date_stamp [0 ],))
1303
+
1304
+
1293
1305
def write_meas_info (fid , info , data_type = None , reset_range = True ):
1294
1306
"""Write measurement info into a file id (from a fif file).
1295
1307
@@ -1311,6 +1323,7 @@ def write_meas_info(fid, info, data_type=None, reset_range=True):
1311
1323
Tags are written in a particular order for compatibility with maxfilter.
1312
1324
"""
1313
1325
info ._check_consistency ()
1326
+ _check_dates (info )
1314
1327
1315
1328
# Measurement info
1316
1329
start_block (fid , FIFF .FIFFB_MEAS_INFO )
@@ -2082,10 +2095,13 @@ def anonymize_info(info, daysback=None, keep_his=False, verbose=None):
2082
2095
if di .get (k ) is not None :
2083
2096
di [k ] = default_str
2084
2097
2085
- err_mesg = ('anonymize_info generated an inconsistent info object. Most '
2086
- 'often this is because daysback parameter was too large. '
2098
+ err_mesg = ('anonymize_info generated an inconsistent info object. '
2087
2099
'Underlying Error:\n ' )
2088
2100
info ._check_consistency (prepend_error = err_mesg )
2101
+ err_mesg = ('anonymize_info generated an inconsistent info object. '
2102
+ 'daysback parameter was too large.'
2103
+ 'Underlying Error:\n ' )
2104
+ _check_dates (info , prepend_error = err_mesg )
2089
2105
2090
2106
return info
2091
2107
0 commit comments