From fe36d3c2157f3aefd8ca2fcbe46baa85257638bd Mon Sep 17 00:00:00 2001 From: Rio Yu <52408936+rioyu123@users.noreply.github.com> Date: Sat, 10 Oct 2026 15:45:03 +0800 Subject: [PATCH] fix: preserve punctuation in job metric names Signed-off-by: Rio Yu <52408936+rioyu123@users.noreply.github.com> --- .../jobs/metrics_data/log_metrics_parser.py | 2 +- .../metrics_data/test_log_metrics_parser.py | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/braket/jobs/metrics_data/log_metrics_parser.py b/src/braket/jobs/metrics_data/log_metrics_parser.py index 0d30ef1ec..7acc2774a 100644 --- a/src/braket/jobs/metrics_data/log_metrics_parser.py +++ b/src/braket/jobs/metrics_data/log_metrics_parser.py @@ -25,7 +25,7 @@ class LogMetricsParser: convenient format. """ - METRICS_DEFINITIONS = re.compile(r"(\w+)\s*=\s*([^;]+)\s*;") + METRICS_DEFINITIONS = re.compile(r"([^\s=;]+)\s*=\s*([^;]+)\s*;") TIMESTAMP = "timestamp" ITERATION_NUMBER = "iteration_number" NODE_ID = "node_id" diff --git a/test/unit_tests/braket/jobs/metrics_data/test_log_metrics_parser.py b/test/unit_tests/braket/jobs/metrics_data/test_log_metrics_parser.py index 4d9ca9dce..d8843d0ea 100644 --- a/test/unit_tests/braket/jobs/metrics_data/test_log_metrics_parser.py +++ b/test/unit_tests/braket/jobs/metrics_data/test_log_metrics_parser.py @@ -13,6 +13,7 @@ import pytest +from braket.jobs.metrics import log_metric from braket.jobs.metrics_data import LogMetricsParser from braket.jobs.metrics_data.definitions import MetricStatistic, MetricType @@ -202,3 +203,26 @@ def test_get_all_metrics_complete_results(log_events, metric_type, metric_stat, for log_event in log_events: parser.parse_log_message(log_event.get("timestamp"), log_event.get("message")) assert parser.get_parsed_metrics(metric_type, metric_stat) == metrics_results + + +@pytest.mark.parametrize("statistic", [MetricStatistic.MIN, MetricStatistic.MAX]) +def test_logged_metric_names_are_preserved(capsys, statistic): + values = { + "train/loss": 0.8, + "eval/loss": 0.2, + "energy-error": -0.5, + "energy.mean": 1.5, + "energy_mean": 2.5, + } + for name, value in values.items(): + log_metric(name, value, timestamp=1.0, iteration_number=3) + + parser = LogMetricsParser() + for line in capsys.readouterr().out.splitlines(): + parser.parse_log_message("fallback timestamp", line) + + assert parser.get_parsed_metrics(MetricType.ITERATION_NUMBER, statistic) == { + "timestamp": [1.0], + "iteration_number": [3.0], + **{name: [value] for name, value in values.items()}, + }