11import time
22
3+ from tqdm import tqdm
4+
35import RATapi .rat_core
46from RATapi .inputs import make_input
57from RATapi .outputs import make_results
68from RATapi .utils .enums import Display
79
810
11+ class ProgressBar :
12+ """Creates a progress bar that gets updates from the progress event during a
13+ calculation
14+
15+ Parameters
16+ ----------
17+ display : bool, default: True
18+ Indicates if displaying is allowed
19+
20+ """
21+
22+ def __init__ (self , display = True ):
23+ self .display = display
24+
25+ def __enter__ (self ):
26+ if self .display :
27+ RATapi .events .register (RATapi .events .EventTypes .Progress , self .updateProgress )
28+ self .pbar = tqdm (total = 100 , desc = "" , delay = 1 , bar_format = "{l_bar}{bar}" , ncols = 90 , disable = not self .display )
29+ self .pbar .delay = 0
30+ return self .pbar
31+
32+ def updateProgress (self , event ):
33+ """Callback for the progress event.
34+
35+ Parameters
36+ ----------
37+ event: ProgressEventData
38+ The progress event data.
39+ """
40+
41+ value = event .percent * 100
42+ self .pbar .desc = event .message
43+ self .pbar .update (value - self .pbar .n )
44+
45+ def __exit__ (self , _exc_type , _exc_val , _traceback ):
46+ self .pbar .leave = False
47+ if self .display :
48+ RATapi .events .clear (RATapi .events .EventTypes .Progress , self .updateProgress )
49+
50+
951def run (project , controls ):
1052 """Run RAT for the given project and controls inputs."""
1153 parameter_field = {
@@ -19,23 +61,24 @@ def run(project, controls):
1961 }
2062
2163 horizontal_line = "\u2500 " * 107 + "\n "
22-
64+ display_on = controls . display != Display . Off
2365 problem_definition , cells , limits , priors , cpp_controls = make_input (project , controls )
2466
25- if controls . display != Display . Off :
67+ if display_on :
2668 print ("Starting RAT " + horizontal_line )
2769
2870 start = time .time ()
29- problem_definition , output_results , bayes_results = RATapi .rat_core .RATMain (
30- problem_definition ,
31- cells ,
32- limits ,
33- cpp_controls ,
34- priors ,
35- )
71+ with ProgressBar (display = display_on ):
72+ problem_definition , output_results , bayes_results = RATapi .rat_core .RATMain (
73+ problem_definition ,
74+ cells ,
75+ limits ,
76+ cpp_controls ,
77+ priors ,
78+ )
3679 end = time .time ()
3780
38- if controls . display != Display . Off :
81+ if display_on :
3982 print (f"Elapsed time is { end - start :.3f} seconds\n " )
4083
4184 results = make_results (controls .procedure , output_results , bayes_results )
@@ -45,7 +88,7 @@ def run(project, controls):
4588 for index , value in enumerate (getattr (problem_definition , parameter_field [class_list ])):
4689 getattr (project , class_list )[index ].value = value
4790
48- if controls . display != Display . Off :
91+ if display_on :
4992 print ("Finished RAT " + horizontal_line )
5093
5194 return project , results
0 commit comments