Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 30 additions & 10 deletions SofaRegressionProgram.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,15 @@
regression_file_extension = ".regression-tests"

class RegressionProgram:
def __init__(self, input_folder, disable_progress_bar = False, verbose = False):
def __init__(self, input_folder, filter = None, disable_progress_bar = False, verbose = False):
"""Initialize the RegressionProgram

Args:
input_folder (str): Path to the folder containing regression test files.
filter (str): Regex pattern to filter scene files (e.g., '^demo.*.scn$'). If None, no filter is applied. Defaults to None.
disable_progress_bar (bool, optional): If True, disable progress bars. Defaults to False.
verbose (bool, optional): If True, enable verbose output. Defaults to False.
"""
self.scene_sets = [] # List <RegressionSceneList>
self.disable_progress_bar = disable_progress_bar
self.verbose = verbose
Expand All @@ -29,7 +37,7 @@ def __init__(self, input_folder, disable_progress_bar = False, verbose = False):
if file.endswith(regression_file_extension):
file_path = os.path.join(root, file)

scene_list = RegressionSceneList.RegressionSceneList(file_path, self.disable_progress_bar, verbose)
scene_list = RegressionSceneList.RegressionSceneList(file_path, filter, self.disable_progress_bar, verbose)

scene_list.process_file()
self.scene_sets.append(scene_list)
Expand Down Expand Up @@ -88,12 +96,13 @@ def replay_references(self, id_set=0):



def parse_args():
def make_parser():
"""
Parse input arguments
"""
parser = argparse.ArgumentParser(
description='Regression arguments')
description='Regression arguments',
formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('--input',
dest='input',
help=f'The input folder containing {regression_file_extension} files that describe scenes to be'
Expand All @@ -104,6 +113,11 @@ def parse_args():
dest='output',
help="Directory where to export data preprocessed",
type=str)

parser.add_argument('--filter',
dest='filter',
help="A regex filter to select scenes to test (e.g., '^demo.*.scn$')",
type=str)

parser.add_argument('--replay',
dest='replay',
Expand All @@ -128,20 +142,26 @@ def parse_args():
help='If set, will display more information',
action='store_true'
)

cmdline_args = parser.parse_args()

return cmdline_args
parser.epilog = '''
Examples:
python SofaRegressionProgram.py --input ./scenes
python SofaRegressionProgram.py --input ./scenes --filter \"$demo.*.scn\"
'''

return parser



if __name__ == '__main__':
# 1- Parse arguments to get folder path
args = parse_args()
parser = make_parser()
args = parser.parse_args()

# 2- Process file
if args.input is not None:
reg_prog = RegressionProgram(args.input, args.progress_bar_is_disabled, args.verbose)
reg_prog = RegressionProgram(args.input, args.filter, args.progress_bar_is_disabled, args.verbose)
else:
parser.print_help()
exit("Error: Argument is required ! Quitting.")

nbr_scenes = 0
Expand Down
22 changes: 14 additions & 8 deletions tools/RegressionSceneList.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
import os
import tools.RegressionSceneData as RegressionSceneData
from tqdm import tqdm
import re


## This class is responsible for loading a file.regression-tests to gather the list of scene to test with all arguments
## It will provide the API to launch the tests or write refs on all scenes contained in this file
class RegressionSceneList:
def __init__(self, file_path, disable_progress_bar = False, verbose = False):
def __init__(self, file_path, filter, disable_progress_bar = False, verbose = False):
"""
/// Path to the file.regression-tests containing the list of scene to tests with all arguments
std::string filePath;
"""
self.file_path = file_path
self.filter = filter
self.file_dir = os.path.dirname(file_path)
self.scenes_data_sets = [] # List<RegressionSceneData>
self.nbr_errors = 0
Expand Down Expand Up @@ -62,16 +64,20 @@ def process_file(self):
print ("line read has not 5 arguments: " + str(len(values)) + " -> " + line)
continue

if self.filter is not None and re.search(self.filter, values[0]) is None:
if self.verbose:
print (f'Filtered out {self.filter}: {values[0]}')
continue

full_file_path = os.path.join(self.file_dir, values[0])
full_ref_file_path = os.path.join(self.ref_dir_path, values[0])

if len(values) == 5:
scene_data = RegressionSceneData.RegressionSceneData(full_file_path, full_ref_file_path,
values[1], values[2], values[3], values[4],
self.disable_progress_bar)

#scene_data.printInfo()
self.scenes_data_sets.append(scene_data)
scene_data = RegressionSceneData.RegressionSceneData(full_file_path, full_ref_file_path,
values[1], values[2], values[3], values[4],
self.disable_progress_bar)

#scene_data.printInfo()
self.scenes_data_sets.append(scene_data)


def write_references(self, id_scene, print_log = False):
Expand Down