Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
8bc76e7
Add new regression script fully in python
epernod Jun 12, 2024
e3b9e30
Add structure to store Scenedata and parse regression-test files.
epernod Jun 13, 2024
f6e7a17
start work on mechanicalState search
epernod Jun 13, 2024
dd2f779
Add scene ref path computation
epernod Jun 13, 2024
624e9ec
Backup work on saving data
epernod Jun 14, 2024
cd09082
Update code to dump directly a map and add code to reload files. Not …
epernod Jun 18, 2024
ea5e979
Fix python scene support in new_regression script
epernod Aug 15, 2024
476fffc
Fix export of numpy data
epernod Aug 15, 2024
9ce9190
Add file compression
epernod Aug 15, 2024
97fd6cc
backup work on comparison
epernod Aug 15, 2024
cd7f598
clean code
epernod Aug 19, 2024
f36e015
Fix period export
epernod Aug 19, 2024
8c25afe
Fix comparison pipeline and add number of tested scene
epernod Aug 19, 2024
33c8ed2
Fix compare mode and store the total error and errorByDofs
epernod Aug 19, 2024
6d546aa
Add method to print results at end and remove intermediate prints
epernod Aug 21, 2024
c3cd349
Split new script into 3 files
epernod Sep 11, 2024
edae2f6
backup work on replay mode
epernod Sep 11, 2024
8ca4bd3
fixes and usability upgrades
fredroy Nov 19, 2024
4078d6f
massive renaming
fredroy Dec 23, 2024
b09dc4b
add option to disable progress bars
fredroy Dec 23, 2024
e2811f1
fix crash
fredroy Dec 23, 2024
af52c40
add some safeguards
fredroy Dec 23, 2024
548e14d
fix writting references (check dir)
fredroy Dec 23, 2024
c479684
fix printing list of np.float
fredroy Dec 23, 2024
0bf507b
set error code when exiting
fredroy Dec 24, 2024
d40d86a
add verbose option
fredroy Dec 24, 2024
5d2e4b8
remove hardcoded paths
fredroy Dec 26, 2024
58ecc43
Merge branch 'sofa-framework:master' into new_regression
epernod Aug 8, 2025
0235716
remove unnecessary code
epernod Aug 8, 2025
c0989f2
Merge branch 'master' into new_regression
epernod Dec 29, 2025
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
169 changes: 169 additions & 0 deletions new_regression.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
import os
import argparse
import sys
import numpy as np

from tqdm import tqdm

if "SOFA_ROOT" not in os.environ:
print('SOFA_ROOT environment variable has not been detected, quitting.')
exit(1)
else:
sofapython3_path = os.environ["SOFA_ROOT"] + "/lib/python3/site-packages"
sys.path.append(sofapython3_path)

import Sofa
import SofaRuntime # importing SofaRuntime will add the py3 loader to the scene loaders
import tools.RegressionSceneParsing as RegressionSceneParsing


class RegressionProgram:
def __init__(self, input_folder, disable_progress_bar = False, verbose = False):
self.scene_sets = [] # List <RegressionSceneList>
self.disable_progress_bar = disable_progress_bar
self.verbose = verbose

for root, dirs, files in os.walk(input_folder):
for file in files:
if file.endswith(".regression-tests"):
file_path = os.path.join(root, file)

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

scene_list.process_file()
self.scene_sets.append(scene_list)

def nbr_error_in_sets(self):
nbr_errors = 0
for scene_list in self.scene_sets:
nbr_errors = nbr_errors + scene_list.get_nbr_errors()
return nbr_errors

def log_errors_in_sets(self):
for scene_list in self.scene_sets:
scene_list.log_scenes_errors()

def write_sets_references(self, id_set=0):
scene_list = self.scene_sets[id_set]
nbr_scenes = scene_list.write_all_references()
return nbr_scenes

def write_all_sets_references(self):
nbr_sets = len(self.scene_sets)
pbar_sets = tqdm(total=nbr_sets, disable=self.disable_progress_bar)
pbar_sets.set_description("Write All sets")

nbr_scenes = 0
for i in range(0, nbr_sets):
nbr_scenes = nbr_scenes + self.write_sets_references(i)
pbar_sets.update(1)

pbar_sets.close()

return nbr_scenes

def compare_sets_references(self, id_set=0):
scene_list = self.scene_sets[id_set]
nbr_scenes = scene_list.compare_all_references()
return nbr_scenes

def compare_all_sets_references(self):
nbr_sets = len(self.scene_sets)
pbar_sets = tqdm(total=nbr_sets, disable=self.disable_progress_bar)
pbar_sets.set_description("Compare All sets")

nbr_scenes = 0
for i in range(0, nbr_sets):
nbr_scenes = nbr_scenes + self.compare_sets_references(i)
pbar_sets.update(1)

pbar_sets.close()

return nbr_scenes

def replay_references(self, id_set=0):
scene_list = self.scene_sets[id_set]
scene_list.replay_references(0)



def parse_args():
"""
Parse input arguments
"""
parser = argparse.ArgumentParser(
description='Regression arguments')
parser.add_argument('--input',
dest='input',
help='help input',
type=str)

parser.add_argument('--output',
dest='output',
help="Directory where to export data preprocessed",
type=str)

parser.add_argument('--replay',
dest='replay',
help="test option to replay reference",
type=int)

parser.add_argument(
"--write-references",
dest="write_mode",
help='If set, will generate new reference files',
action='store_true'
)
parser.add_argument(
"--disable-progress-bar",
dest="progress_bar_is_disabled",
help='If set, will disable progress bars',
action='store_true'
)
parser.add_argument(
"--verbose",
dest="verbose",
help='If set, will display more information',
action='store_true'
)

cmdline_args = parser.parse_args()

return cmdline_args



if __name__ == '__main__':
# 1- Parse arguments to get folder path
args = parse_args()
# 2- Process file
if args.input is not None:
reg_prog = RegressionProgram(args.input, args.progress_bar_is_disabled, args.verbose)
else:
exit("Error: Argument is required ! Quitting.")

nbr_scenes = 0

replay = bool(args.replay)
if replay:
reg_prog.replay_references()
sys.exit()

if args.write_mode:
nbr_scenes = reg_prog.write_all_sets_references()
else:
nbr_scenes = reg_prog.compare_all_sets_references()

np.set_printoptions(legacy='1.25') # revert printing floating-point type in numpy (concretely remove np.array when displaying a list of np.float)

print ("### Number of sets Done: " + str(len(reg_prog.scene_sets)))
print ("### Number of scenes Done: " + str(nbr_scenes))
if args.write_mode is False:
print ("### Number of scenes failed: " + str(reg_prog.nbr_error_in_sets()))
reg_prog.log_errors_in_sets()
if reg_prog.nbr_error_in_sets() > 0:
sys.exit(1) # exit with error(s)

sys.exit(0) # exit without error


Loading