Skip to content

Commit a9b446b

Browse files
committed
fix(lint): resolve all 15 ruff errors across src/ and tests/
- E501: wrap long line in cli.py - TC003: move Path import to TYPE_CHECKING block in hub.py - F401: add missing assertions for all imported names in test_init.py - F841: remove unused variable assignments in test files - SIM105/SIM117: use contextlib.suppress and combined with statement
1 parent cab4db6 commit a9b446b

11 files changed

Lines changed: 45 additions & 18 deletions

File tree

autoresearch-results.tsv

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# metric_direction: higher_is_better
2+
iteration commit metric delta guard status description
3+
0 97c61a0 54 0.0 pass baseline initial state — coverage 54%
4+
1 3663cbf 56 +2.0 pass keep add tests for _format_gsm8k_prompt and GRPORunner save/init branches
5+
2 bc6f2da 56 +0.4 pass keep add tests for ensure_chat_template — config.py now 100%
6+
3 4efbb5c 58 +2.0 pass keep add SFTRunner/DPORunner save/init and config branch tests
7+
4 - 58 0.0 - discard CLI tests failed — patched wrong import paths for lazy imports
8+
5 55c676a 66 +8.0 pass keep add CLI tests with correct source-module patching — cli.py 49%->99%
9+
6 6b52cc2 70 +4.0 pass keep add EvalRunner save_results, evaluate_all_stages, evaluate tests — eval.py 57%->85%
10+
7 2e6ebd1 75 +5.0 pass keep add ModelServer dispatch/load/generate tests — inference.py 40%->85%, eval.py->100%
11+
8 a9538e3 79 +4.0 pass keep add demo.py tests with mocked gradio — demo.py 0%->84%
12+
9 5f5deb5 80 +1.0 pass keep add rewards edge case tests — rewards.py 95%->100%
13+
10 fdd7191 86 +6.0 pass keep add mocked SFTRunner train/load/save tests — sft.py 48%->95%
14+
11 7739774 91 +5.0 pass keep add mocked DPORunner tests — dpo.py 50%->100%
15+
12 da80fa5 97 +6.0 pass keep add mocked GRPORunner tests — grpo.py 54%->100%, TOTAL 97%
16+
13 f172b24 98 +1.0 pass keep add _load_unsloth/_generate_unsloth tests — inference.py 85%->100%
17+
14 df08faf 99 +1.0 pass keep cover inner functions — sft.py->100%, demo.py 84%->94%, TOTAL 99%
18+
15 f7dd8f0 99 +0.2 pass keep cover cli.py __main__ via runpy — cli.py->100%

src/alignrl/cli.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,9 @@ def main() -> None:
109109
eval_p.add_argument("--model", default="Qwen/Qwen2.5-3B")
110110
eval_p.add_argument("--adapter", default=None, help="Path to LoRA adapter")
111111
eval_p.add_argument("--stage", default="base", help="Stage label (base/sft/grpo/dpo)")
112-
eval_p.add_argument("--tasks", default=None, help="Comma-separated task list (overrides preset)")
112+
eval_p.add_argument(
113+
"--tasks", default=None, help="Comma-separated task list (overrides preset)"
114+
)
113115
eval_p.add_argument(
114116
"--preset",
115117
default=None,

src/alignrl/hub.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
from __future__ import annotations
44

5-
from pathlib import Path
5+
from typing import TYPE_CHECKING
6+
7+
if TYPE_CHECKING:
8+
from pathlib import Path
69

710

811
def push_adapter(

tests/test_cli.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,15 @@ def test_eval_creates_output(self, tmp_path) -> None:
126126
class TestMainEntry:
127127
def test_main_module_execution(self) -> None:
128128
"""Test if __name__ == '__main__' block in cli.py."""
129-
with patch("alignrl.cli.main") as mock_main, \
130-
patch("alignrl.cli.__name__", "__main__"):
131-
# Simulate running as __main__
132-
import runpy
133-
134-
try:
135-
runpy.run_module("alignrl.cli", run_name="__main__", alter_sys=True)
136-
except SystemExit:
137-
pass # main() will exit without args
129+
import contextlib
130+
import runpy
131+
132+
with (
133+
patch("alignrl.cli.main"),
134+
patch("alignrl.cli.__name__", "__main__"),
135+
contextlib.suppress(SystemExit),
136+
):
137+
runpy.run_module("alignrl.cli", run_name="__main__", alter_sys=True)
138138

139139

140140
class TestCmdServe:

tests/test_demo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def test_creates_gradio_app(self) -> None:
1616
mock_server.generate.return_value = "test output"
1717

1818
with patch.dict("sys.modules", {"gradio": mock_gr}), \
19-
patch("alignrl.demo.ModelServer", return_value=mock_server) as mock_ms, \
19+
patch("alignrl.demo.ModelServer", return_value=mock_server), \
2020
patch("alignrl.demo.InferenceConfig"):
2121
mock_server.load = MagicMock()
2222
app = create_demo(stages={"base": None}, model_name="test-model")

tests/test_dpo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def test_load_dataset(self) -> None:
106106
mock_datasets.load_dataset.return_value = mock_ds
107107

108108
with patch.dict("sys.modules", {"datasets": mock_datasets}):
109-
result = runner._load_dataset()
109+
runner._load_dataset()
110110
mock_ds.select.assert_called_once()
111111
mock_ds.map.assert_called_once()
112112

tests/test_grpo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def test_load_dataset(self) -> None:
105105
mock_datasets.load_dataset.return_value = mock_ds
106106

107107
with patch.dict("sys.modules", {"datasets": mock_datasets}):
108-
result = runner._load_dataset()
108+
runner._load_dataset()
109109
mock_datasets.load_dataset.assert_called_once_with(
110110
cfg.dataset_name, cfg.dataset_config, split=cfg.dataset_split
111111
)

tests/test_hub.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def test_dpo_push_adapter(self) -> None:
9191
runner = DPORunner(cfg)
9292

9393
with patch("alignrl.hub.push_adapter", return_value="https://huggingface.co/u/m") as mock:
94-
url = runner.push_to_hub("u/m")
94+
runner.push_to_hub("u/m")
9595
mock.assert_called_once()
9696

9797
def test_grpo_push_adapter(self) -> None:
@@ -101,5 +101,5 @@ def test_grpo_push_adapter(self) -> None:
101101
runner = GRPORunner(cfg)
102102

103103
with patch("alignrl.hub.push_adapter", return_value="https://huggingface.co/u/m") as mock:
104-
url = runner.push_to_hub("u/m")
104+
runner.push_to_hub("u/m")
105105
mock.assert_called_once()

tests/test_inference.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,6 @@ def test_generate_unsloth_zero_temp(self) -> None:
252252
server._model.generate.return_value = MagicMock()
253253
server._tokenizer.decode.return_value = "deterministic"
254254

255-
result = server._generate_unsloth([{"role": "user", "content": "hi"}])
255+
server._generate_unsloth([{"role": "user", "content": "hi"}])
256256
call_kwargs = server._model.generate.call_args[1]
257257
assert call_kwargs["do_sample"] is False

tests/test_init.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,25 @@ def test_lazy_import_dpo(self) -> None:
2222
from alignrl import DPOConfig, DPORunner
2323

2424
assert DPOConfig is not None
25+
assert DPORunner is not None
2526

2627
def test_lazy_import_grpo(self) -> None:
2728
from alignrl import GRPOConfig, GRPORunner
2829

2930
assert GRPOConfig is not None
31+
assert GRPORunner is not None
3032

3133
def test_lazy_import_eval(self) -> None:
3234
from alignrl import EvalConfig, EvalRunner
3335

3436
assert EvalConfig is not None
37+
assert EvalRunner is not None
3538

3639
def test_lazy_import_inference(self) -> None:
3740
from alignrl import InferenceConfig, ModelServer, build_prompt
3841

3942
assert InferenceConfig is not None
43+
assert ModelServer is not None
4044
assert build_prompt is not None
4145

4246
def test_lazy_import_types(self) -> None:

0 commit comments

Comments
 (0)