From e867b97443d3a16035b7fb66ad43c8ad1f8481e7 Mon Sep 17 00:00:00 2001 From: Cyril Vallez Date: Tue, 21 Jan 2025 09:38:48 +0100 Subject: [PATCH] Deterministic sorting in modular converter when adding new functions (#35795) deterministic sort --- utils/modular_model_converter.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/utils/modular_model_converter.py b/utils/modular_model_converter.py index 9730b6d2cb3c..e75393364ff0 100644 --- a/utils/modular_model_converter.py +++ b/utils/modular_model_converter.py @@ -773,6 +773,9 @@ def compute_relative_order(self, missing_dependencies: set[str]) -> dict[str, in original_dependencies.append(class_dep) else: merged_dependencies.append(class_dep) + # We need to sort deterministically before actual sorting, so that entries missing (i.e. with value 1e10) + # will always get the same order independently of the system (they come from a set, which has no deterministic order) + original_dependencies = sorted(original_dependencies, reverse=True) # Sort both list according to the order in their respective file original_dependencies = sorted(original_dependencies, key=lambda x: self.start_lines.get(x, 1e10)) merged_dependencies = sorted(merged_dependencies, key=lambda x: self.modular_file_start_lines[x]) @@ -798,6 +801,9 @@ def compute_relative_order(self, missing_dependencies: set[str]) -> dict[str, in merged_dependencies.append(dep) else: original_dependencies.append(dep) + # We need to sort deterministically before actual sorting, so that entries missing (i.e. with value 1e10) + # will always get the same order independently of the system (they come from a set, which has no deterministic order) + original_dependencies = sorted(original_dependencies, reverse=True) # Sort both list according to the order in their respective file original_dependencies = sorted(original_dependencies, key=lambda x: self.start_lines.get(x, 1e10)) merged_dependencies = sorted(merged_dependencies, key=lambda x: self.modular_file_start_lines[x])