6
6
from collections import defaultdict
7
7
from .utils import has_numbers , replace_multiple
8
8
9
+ # Exclude 0
10
+ single_sign_minutes = set ()
11
+ for i in range (1 , 20 ):
12
+ single_sign_minutes .add (i )
13
+
14
+ for i in range (2 , 6 ):
15
+ single_sign_minutes .add (i * 10 ) # Tens
16
+ single_sign_minutes .add (i * 11 ) # Repdigits
17
+
18
+ print (f'single_sign_minutes: { single_sign_minutes } ' )
9
19
10
20
class TimeData :
11
21
def __init__ (self ):
12
22
self .hour_str = None
13
- self .minute_str = None
14
- self .minute_tens_str = None
23
+ self .minute1_str = None
24
+ self .minute2_str = None
15
25
self .hour_int = None
16
26
self .minute_int = None
17
27
self .hour_line = None
18
- self .minute_line = None
19
- self .minute_tens_line = None
28
+ self .minute1_line = None
29
+ self .minute2_line = None
20
30
self .hour_is_separate = None
21
31
22
32
def is_valid (self ):
@@ -47,7 +57,7 @@ def set_hour(self, hour_str, line_num=None):
47
57
self .hour_line = line_num
48
58
49
59
def set_minute_mms (self , minute_str , line_num ):
50
- if self .minute_str is not None and self . minute_tens_str is not None :
60
+ if self .minute2_str is not None :
51
61
raise Exception ('ERROR: minute was already set' )
52
62
if minute_str == '' :
53
63
raise Exception ('ERROR: minute is empty' )
@@ -58,26 +68,29 @@ def set_minute_mms(self, minute_str, line_num):
58
68
if minute_int < 0 :
59
69
raise Exception (f'ERROR: minute is negative: { minute_int } ' )
60
70
61
- # If self.minute_int is None then this function was called for the first time
62
- if self .minute_int is None and minute_int <= 12 :
63
- self .minute_str = minute_str
64
- self .minute_line = line_num
71
+ if self .minute1_str is None :
72
+ if minute_int not in single_sign_minutes :
73
+ print (f'WARNING: minute1 is not a valid single sign value: { minute_str } ' )
74
+ self .minute1_str = minute_str
75
+ self .minute1_line = line_num
65
76
else :
66
- if minute_str not in ['10' , '20' , '30' , '40' , '50' ]:
67
- print (f'WARNING: minute_tens is not a valid tens value: { minute_str } ' )
68
- self .minute_tens_str = minute_str
69
- self .minute_tens_line = line_num
77
+ if minute_str not in ['20' , '30' , '40' , '50' ]:
78
+ print (f'WARNING: minute2 is not a valid value: { minute_str } ' )
79
+ if self .minute_int not in range (1 , 10 ):
80
+ print (f'WARNING: minute1 is not a valid value: { self .minute1_str } ' )
81
+ self .minute2_str = minute_str
82
+ self .minute2_line = line_num
70
83
71
84
if self .minute_int is None :
72
85
self .minute_int = 0
73
86
self .minute_int += minute_int
74
87
75
88
def set_minute_text (self , minute_str ):
76
- if self .minute_str is not None :
89
+ if self .minute1_str is not None :
77
90
raise Exception ('ERROR: minute was already set' )
78
91
if minute_str == '' :
79
92
raise Exception ('ERROR: minute is empty' )
80
- self .minute_str = minute_str
93
+ self .minute1_str = minute_str
81
94
try :
82
95
minute_int = int (minute_str )
83
96
except ValueError :
@@ -93,7 +106,7 @@ def set_hour_is_separate(self, hour_is_separate):
93
106
def get_line_numbers (self ):
94
107
if self .hour_line is None :
95
108
raise Exception ('ERROR: hour has not been set yet' )
96
- return (self .hour_line , self .minute_line , self .minute_tens_line )
109
+ return (self .hour_line , self .minute1_line , self .minute2_line )
97
110
98
111
def get_time_int (self ):
99
112
if self .hour_int is None :
@@ -136,11 +149,11 @@ def process_time(state, time_data, time_positions):
136
149
if not time_data .is_valid ():
137
150
return (state , time_positions )
138
151
# Here we know that the time is valid
139
- (hour_line , minute_line , minute_tens_line ) = time_data .get_line_numbers ()
152
+ (hour_line , minute1_line , minute2_line ) = time_data .get_line_numbers ()
140
153
(hour_int , minute_int ) = time_data .get_time_int ()
141
154
hour_is_separate = time_data .get_hour_is_separate ()
142
- print (f'Found time: { hour_int } :{ minute_int } , lines: { hour_line } , { minute_line } , { minute_tens_line } (file_number: { file_number } )' )
143
- time_position = (hour_line , minute_line , minute_tens_line , hour_int , minute_int , hour_is_separate )
155
+ print (f'Found time: { hour_int } :{ minute_int } , lines: { hour_line } , { minute1_line } , { minute2_line } (file_number: { file_number } )' )
156
+ time_position = (hour_line , minute1_line , minute2_line , hour_int , minute_int , hour_is_separate )
144
157
time_positions_list = time_positions .get (file_number , [])
145
158
time_positions_list .append (time_position )
146
159
time_positions [file_number ] = time_positions_list
@@ -209,35 +222,35 @@ def process_time(state, time_data, time_positions):
209
222
210
223
for file_number , time_infos in time_positions .items ():
211
224
for time_info in time_infos :
212
- (hour_line , minute_line , minute_tens_line , old_hour , old_minute , hour_is_separate ) = time_info
225
+ (hour_line , minute1_line , minute2_line , old_hour , old_minute , hour_is_separate ) = time_info
213
226
old_time = (old_hour , old_minute )
214
227
if old_time not in time_mappings [file_number ]:
215
228
new_hour = random .randrange (24 )
216
- new_minute = None
217
- new_minute_tens = None
218
- if minute_line is not None and minute_tens_line is None :
219
- new_minute = random .randrange ( 13 )
220
- elif minute_line is not None and minute_tens_line is not None :
221
- new_minute = random .randrange (10 )
222
- if minute_tens_line is not None :
223
- new_minute_tens = ( random .randrange ( 5 ) + 1 ) * 10 # 10, 20, 30, 40, 50
224
- new_time = (new_hour , new_minute , new_minute_tens )
229
+ new_minute1 = None
230
+ new_minute2 = None
231
+ if minute1_line is not None and minute2_line is None :
232
+ new_minute1 = random .choice ( tuple ( single_sign_minutes ) )
233
+ elif minute1_line is not None and minute2_line is not None :
234
+ new_minute1 = random .randrange (1 , 10 )
235
+ if minute2_line is not None :
236
+ new_minute2 = random .choice ([ 20 , 30 , 40 , 50 ])
237
+ new_time = (new_hour , new_minute1 , new_minute2 )
225
238
else :
226
239
new_time = time_mappings [file_number ][old_time ]
227
240
228
- (new_hour , new_minute , new_minute_tens ) = new_time
241
+ (new_hour , new_minute1 , new_minute2 ) = new_time
229
242
if hour_is_separate :
230
243
new_hour_str = f'num:{ new_hour } '
231
244
else :
232
245
new_hour_str = f'uhr:{ new_hour } '
233
246
new_mms_data [hour_line ]['maingloss' ] = new_hour_str
234
- if new_minute is not None :
235
- new_mms_data [minute_line ]['maingloss' ] = f'num:{ new_minute } '
236
- if new_minute_tens is not None :
237
- if minute_tens_line < len (new_mms_data ):
238
- new_mms_data [minute_tens_line ]['maingloss' ] = f'num:{ new_minute_tens } '
247
+ if new_minute1 is not None :
248
+ new_mms_data [minute1_line ]['maingloss' ] = f'num:{ new_minute1 } '
249
+ if new_minute2 is not None :
250
+ if minute2_line < len (new_mms_data ):
251
+ new_mms_data [minute2_line ]['maingloss' ] = f'num:{ new_minute2 } '
239
252
else :
240
- print (f'WARNING: minute_tens_line { minute_tens_line } not found in file { file_number } ' )
253
+ print (f'WARNING: minute2_line { minute2_line } not found in file { file_number } ' )
241
254
for line_num , row in enumerate (new_mms_data ):
242
255
print (f'line { line_num } : { row ["maingloss" ]} ' )
243
256
@@ -287,21 +300,16 @@ def process_time(state, time_data, time_positions):
287
300
if old_time not in time_mapping :
288
301
print (f'WARNING: old_time { old_time } not found in time_mapping (file: { folder_name } )' )
289
302
continue
290
- (new_hour , new_minute , new_minute_tens ) = time_mapping [old_time ]
291
- if new_minute is None :
292
- new_minute = 0
293
- if new_minute_tens is not None :
294
- new_minute += new_minute_tens
295
- if new_minute is None and new_minute_tens is None and time_format != TimeFormat .JUST_HOUR :
296
- print (f'WARNING: new_minute and new_minute_tens are None but time_format is { time_format } (file: { folder_name } )' )
303
+ (new_hour , new_minute1 , new_minute2 ) = time_mapping [old_time ]
304
+ if new_minute2 is not None :
305
+ new_minute1 += new_minute2
306
+ if new_minute1 is None and new_minute2 is None and time_format != TimeFormat .JUST_HOUR :
307
+ print (f'WARNING: new_minute1 and new_minute2 are None but time_format is { time_format } (file: { folder_name } )' )
297
308
continue
298
- new_whole_time = assemble_time (time_format , new_hour , new_minute )
309
+ new_whole_time = assemble_time (time_format , new_hour , new_minute1 )
299
310
whole_time_mapping [old_whole_time ] = new_whole_time
300
311
time_mapping_str_to_tuple [old_whole_time ] = old_time
301
312
302
- #if folder_name == '0003':
303
- # print(f'whole_time_mapping: {whole_time_mapping}, all_distinct_times_in_file: {all_distinct_times_in_file}')
304
-
305
313
306
314
new_text_data = []
307
315
replaced_counts = defaultdict (int )
0 commit comments