mirror of
https://github.com/smyalygames/FiniteVolumeGPU.git
synced 2025-11-27 22:51:47 +01:00
63 lines
2.0 KiB
Python
63 lines
2.0 KiB
Python
import logging
|
|
import time
|
|
|
|
import numpy as np
|
|
|
|
|
|
def time_string(seconds):
|
|
seconds = int(max(seconds, 1))
|
|
minutes, seconds = divmod(seconds, 60)
|
|
hours, minutes = divmod(minutes, 60)
|
|
periods = [('h', hours), ('m', minutes), ('s', seconds)]
|
|
return_string = ' '.join('{}{}'.format(value, name)
|
|
for name, value in periods
|
|
if value)
|
|
return return_string
|
|
|
|
|
|
def progress_bar(step, total_steps, width=30):
|
|
progress = np.round(width * step / total_steps).astype(np.int32)
|
|
progressbar = "0% [" + "#" * progress + "=" * (width - progress) + "] 100%"
|
|
return progressbar
|
|
|
|
|
|
class ProgressPrinter(object):
|
|
"""
|
|
Small helper class for creating a progress bar
|
|
"""
|
|
|
|
def __init__(self, total_steps, print_every=5):
|
|
self.logger = logging.getLogger(__name__)
|
|
self.start = time.time()
|
|
self.total_steps = total_steps
|
|
self.print_every = print_every
|
|
self.next_print_time = self.print_every
|
|
self.last_step = 0
|
|
self.secs_per_iter = None
|
|
|
|
def get_print_string(self, step):
|
|
elapsed = time.time() - self.start
|
|
if elapsed > self.next_print_time:
|
|
dt = elapsed - (self.next_print_time - self.print_every)
|
|
dsteps = step - self.last_step
|
|
steps_remaining = self.total_steps - step
|
|
|
|
if dsteps == 0:
|
|
return None
|
|
|
|
self.last_step = step
|
|
self.next_print_time = elapsed + self.print_every
|
|
|
|
if not self.secs_per_iter:
|
|
self.secs_per_iter = dt / dsteps
|
|
self.secs_per_iter = 0.2 * self.secs_per_iter + 0.8 * (dt / dsteps)
|
|
|
|
remaining_time = steps_remaining * self.secs_per_iter
|
|
|
|
return (f"{progress_bar(step, self.total_steps)}. "
|
|
+ f"Total: {time_string(elapsed + remaining_time)}, "
|
|
+ f"elapsed: {time_string(elapsed)}, "
|
|
+ f"remaining: {time_string(remaining_time)}")
|
|
|
|
return None
|