From 7c734a8d0d271d8c4c56a479e4255e5b4b50449b Mon Sep 17 00:00:00 2001 From: Minh Vu Date: Wed, 10 Jun 2026 23:39:05 +0200 Subject: [PATCH 1/2] Fix routing YAML best results export --- python/cuopt/cuopt/routing/utils.py | 6 +++--- python/cuopt/cuopt/tests/routing/test_solver_settings.py | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/python/cuopt/cuopt/routing/utils.py b/python/cuopt/cuopt/routing/utils.py index 942e0018a6..3060c8634e 100644 --- a/python/cuopt/cuopt/routing/utils.py +++ b/python/cuopt/cuopt/routing/utils.py @@ -789,9 +789,9 @@ def save_data_model_to_yaml(data_model, solver_settings, solution, fname): b_r_fp = solver_settings.get_best_results_file_path() b_r_i = solver_settings.get_best_results_interval() if b_r_fp: - if b_r_i: - yamldict.update({"best_result_path", b_r_fp}) - yamldict.update({"best_result_interval", b_r_i}) + if b_r_i is not None: + yamldict["best_result_path"] = b_r_fp + yamldict["best_result_interval"] = b_r_i if solution.get_status() == 0: sol_df = solution.get_route() diff --git a/python/cuopt/cuopt/tests/routing/test_solver_settings.py b/python/cuopt/cuopt/tests/routing/test_solver_settings.py index 0472b10a8b..8a79530332 100644 --- a/python/cuopt/cuopt/tests/routing/test_solver_settings.py +++ b/python/cuopt/cuopt/tests/routing/test_solver_settings.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import numpy as np +import yaml import cudf @@ -52,7 +53,9 @@ def test_dump_config(): """Test SolverSettings solve with config file""" s = routing.SolverSettings() config_file = "solver_cfg.yaml" + best_results_file = "best_results.txt" s.dump_config_file(config_file) + s.dump_best_results(best_results_file, 0) assert s.get_config_file_name() == config_file # Small example data model: 3 locations, 1 vehicle @@ -66,6 +69,11 @@ def test_dump_config(): routing_solution = routing.Solve(dm, s) assert routing_solution.get_status() == 0 + with open(config_file) as f: + config = yaml.safe_load(f) + assert config["best_result_path"] == best_results_file + assert config["best_result_interval"] == 0 + # Load from written solver_cfg.yaml and solve again dm_from_yaml, s_from_yaml = utils.create_data_model_from_yaml(config_file) solution_from_yaml = routing.Solve(dm_from_yaml, s_from_yaml) From 823638f92d948692ccedd0a223fd2d6454046a28 Mon Sep 17 00:00:00 2001 From: Minh Vu Date: Wed, 22 Jul 2026 20:04:50 +0200 Subject: [PATCH 2/2] Use temporary paths in routing config test Signed-off-by: Minh Vu --- python/cuopt/cuopt/routing/utils.py | 2 +- python/cuopt/cuopt/tests/routing/test_solver_settings.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/python/cuopt/cuopt/routing/utils.py b/python/cuopt/cuopt/routing/utils.py index 3060c8634e..add96b495e 100644 --- a/python/cuopt/cuopt/routing/utils.py +++ b/python/cuopt/cuopt/routing/utils.py @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 import glob diff --git a/python/cuopt/cuopt/tests/routing/test_solver_settings.py b/python/cuopt/cuopt/tests/routing/test_solver_settings.py index 8a79530332..c850b1570d 100644 --- a/python/cuopt/cuopt/tests/routing/test_solver_settings.py +++ b/python/cuopt/cuopt/tests/routing/test_solver_settings.py @@ -49,11 +49,11 @@ def test_solver_settings_getters(): assert s.get_time_limit() == time_limit -def test_dump_config(): +def test_dump_config(tmp_path): """Test SolverSettings solve with config file""" s = routing.SolverSettings() - config_file = "solver_cfg.yaml" - best_results_file = "best_results.txt" + config_file = str(tmp_path / "solver_cfg.yaml") + best_results_file = str(tmp_path / "best_results.txt") s.dump_config_file(config_file) s.dump_best_results(best_results_file, 0) assert s.get_config_file_name() == config_file