Skip to content

Commit 806c75e

Browse files
authored
Merge pull request #69 from epernod/new_regression
New regression in python
2 parents ad40f3a + fce1432 commit 806c75e

File tree

3 files changed

+547
-0
lines changed

3 files changed

+547
-0
lines changed

SofaRegressionProgram.py

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
import os
2+
import argparse
3+
import sys
4+
import numpy as np
5+
6+
from tqdm import tqdm
7+
8+
if "SOFA_ROOT" not in os.environ:
9+
print('SOFA_ROOT environment variable has not been detected, quitting.')
10+
exit(1)
11+
else:
12+
sofapython3_path = os.environ["SOFA_ROOT"] + "/lib/python3/site-packages"
13+
sys.path.append(sofapython3_path)
14+
15+
import Sofa
16+
import SofaRuntime # importing SofaRuntime will add the py3 loader to the scene loaders
17+
import tools.RegressionSceneList as RegressionSceneList
18+
19+
20+
class RegressionProgram:
21+
def __init__(self, input_folder, disable_progress_bar = False, verbose = False):
22+
self.scene_sets = [] # List <RegressionSceneList>
23+
self.disable_progress_bar = disable_progress_bar
24+
self.verbose = verbose
25+
26+
for root, dirs, files in os.walk(input_folder):
27+
for file in files:
28+
if file.endswith(".regression-tests"):
29+
file_path = os.path.join(root, file)
30+
31+
scene_list = RegressionSceneList.RegressionSceneList(file_path, self.disable_progress_bar, verbose)
32+
33+
scene_list.process_file()
34+
self.scene_sets.append(scene_list)
35+
36+
def nbr_error_in_sets(self):
37+
nbr_errors = 0
38+
for scene_list in self.scene_sets:
39+
nbr_errors = nbr_errors + scene_list.get_nbr_errors()
40+
return nbr_errors
41+
42+
def log_errors_in_sets(self):
43+
for scene_list in self.scene_sets:
44+
scene_list.log_scenes_errors()
45+
46+
def write_sets_references(self, id_set=0):
47+
scene_list = self.scene_sets[id_set]
48+
nbr_scenes = scene_list.write_all_references()
49+
return nbr_scenes
50+
51+
def write_all_sets_references(self):
52+
nbr_sets = len(self.scene_sets)
53+
pbar_sets = tqdm(total=nbr_sets, disable=self.disable_progress_bar)
54+
pbar_sets.set_description("Write All sets")
55+
56+
nbr_scenes = 0
57+
for i in range(0, nbr_sets):
58+
nbr_scenes = nbr_scenes + self.write_sets_references(i)
59+
pbar_sets.update(1)
60+
61+
pbar_sets.close()
62+
63+
return nbr_scenes
64+
65+
def compare_sets_references(self, id_set=0):
66+
scene_list = self.scene_sets[id_set]
67+
nbr_scenes = scene_list.compare_all_references()
68+
return nbr_scenes
69+
70+
def compare_all_sets_references(self):
71+
nbr_sets = len(self.scene_sets)
72+
pbar_sets = tqdm(total=nbr_sets, disable=self.disable_progress_bar)
73+
pbar_sets.set_description("Compare All sets")
74+
75+
nbr_scenes = 0
76+
for i in range(0, nbr_sets):
77+
nbr_scenes = nbr_scenes + self.compare_sets_references(i)
78+
pbar_sets.update(1)
79+
80+
pbar_sets.close()
81+
82+
return nbr_scenes
83+
84+
def replay_references(self, id_set=0):
85+
scene_list = self.scene_sets[id_set]
86+
scene_list.replay_references(0)
87+
88+
89+
90+
def parse_args():
91+
"""
92+
Parse input arguments
93+
"""
94+
parser = argparse.ArgumentParser(
95+
description='Regression arguments')
96+
parser.add_argument('--input',
97+
dest='input',
98+
help='help input',
99+
type=str)
100+
101+
parser.add_argument('--output',
102+
dest='output',
103+
help="Directory where to export data preprocessed",
104+
type=str)
105+
106+
parser.add_argument('--replay',
107+
dest='replay',
108+
help="test option to replay reference",
109+
type=int)
110+
111+
parser.add_argument(
112+
"--write-references",
113+
dest="write_mode",
114+
help='If set, will generate new reference files',
115+
action='store_true'
116+
)
117+
parser.add_argument(
118+
"--disable-progress-bar",
119+
dest="progress_bar_is_disabled",
120+
help='If set, will disable progress bars',
121+
action='store_true'
122+
)
123+
parser.add_argument(
124+
"--verbose",
125+
dest="verbose",
126+
help='If set, will display more information',
127+
action='store_true'
128+
)
129+
130+
cmdline_args = parser.parse_args()
131+
132+
return cmdline_args
133+
134+
135+
136+
if __name__ == '__main__':
137+
# 1- Parse arguments to get folder path
138+
args = parse_args()
139+
# 2- Process file
140+
if args.input is not None:
141+
reg_prog = RegressionProgram(args.input, args.progress_bar_is_disabled, args.verbose)
142+
else:
143+
exit("Error: Argument is required ! Quitting.")
144+
145+
nbr_scenes = 0
146+
147+
replay = bool(args.replay)
148+
if replay:
149+
reg_prog.replay_references()
150+
sys.exit()
151+
152+
if args.write_mode:
153+
nbr_scenes = reg_prog.write_all_sets_references()
154+
else:
155+
nbr_scenes = reg_prog.compare_all_sets_references()
156+
157+
np.set_printoptions(legacy='1.25') # revert printing floating-point type in numpy (concretely remove np.array when displaying a list of np.float)
158+
159+
print ("### Number of sets Done: " + str(len(reg_prog.scene_sets)))
160+
print ("### Number of scenes Done: " + str(nbr_scenes))
161+
if args.write_mode is False:
162+
print ("### Number of scenes failed: " + str(reg_prog.nbr_error_in_sets()))
163+
reg_prog.log_errors_in_sets()
164+
if reg_prog.nbr_error_in_sets() > 0:
165+
sys.exit(1) # exit with error(s)
166+
167+
sys.exit(0) # exit without error
168+
169+

0 commit comments

Comments
 (0)