5 def __init__(self, elapsed_time, progress, index, count):
11 def time_remaining(self):
16 def format_time(seconds):
17 hours = int(seconds // 3600)
18 minutes = int((seconds % 3600) // 60)
19 seconds = int(seconds % 60)
20 return "%02d:%02d:%02d" % ( hours, minutes, seconds )
22 def progress_info(progress_info, set_progress=None):
24 set_progress(progress_info)
26 return "{:>05.2f}%, {:s} of {:s}".format(
27 progress_info.progress * 100, format_time( progress_info.elapsed_time ), format_time( progress_info.time_remaining() ) )
31 def __init__(self, prefix_text):
35 def __call__(self, progress_info):
38 def set_progress(self, progress_info):
39 self.
progress =
"{:>05.2f}%, {:s}".format( progress_info.progress * 100, format_time( progress_info.time_remaining() ) )
44 def range(n, info_frequency=0):
50 if now - if_counter > info_frequency:
52 if_counter += info_frequency
58 def sequence_timer(sequence, info_frequency=0, length=None):
60 Yields tuples (item, progress_info) objects 62 @param `length` if the `sequence` parameter is a generator, it does not have __len__ 63 defined, then, if you know its length, you can pass it as this parameter. 68 length = length
if length
else len(sequence)
71 if now - if_counter < info_frequency:
74 pi =
ProgressInfo(now - start, float(i)/length, i, length)
75 if_counter += info_frequency
79 def file_timer(in_file, info_frequency=0):
84 length = in_file.tell()
88 line = in_file.readline()
93 if now - if_counter < info_frequency:
96 pi =
ProgressInfo(now - start, float(in_file.tell())/length, i, length)
97 if_counter += info_frequency
101 def format_seconds(seconds):
105 hours = math.floor(seconds / (60*60))
106 seconds -= hours*60*60
107 out_string +=
'%g hours'%hours
109 minutes = math.floor(seconds / 60)
110 seconds -= minutes*60
113 out_string +=
'%g minutes'%minutes
114 if round(seconds) > 1:
117 out_string +=
'%g seconds'%round(seconds)