1+ import io
12import subprocess
23import sys
4+ from contextlib import redirect_stderr , redirect_stdout
35
6+ import pytest
47
8+ from qml .__main__ import main
9+
10+
11+ def _run_cli_in_process (monkeypatch : pytest .MonkeyPatch , args : list [str ]) -> tuple [int , str , str ]:
12+ stdout = io .StringIO ()
13+ stderr = io .StringIO ()
14+
15+ monkeypatch .setattr (sys , "argv" , ["python -m qml" , * args ])
16+
17+ with redirect_stdout (stdout ), redirect_stderr (stderr ):
18+ returncode = main ()
19+
20+ return returncode , stdout .getvalue (), stderr .getvalue ()
21+
22+
23+ @pytest .mark .slow
524def test_cli_vqc_runs ():
625 result = subprocess .run (
726 [
@@ -25,53 +44,43 @@ def test_cli_vqc_runs():
2544 assert "Test accuracy" in result .stdout
2645
2746
28- def test_cli_kernel_runs ():
29- result = subprocess .run (
47+ def test_cli_kernel_runs (monkeypatch : pytest .MonkeyPatch ):
48+ returncode , stdout , _ = _run_cli_in_process (
49+ monkeypatch ,
3050 [
31- sys .executable ,
32- "-m" ,
33- "qml" ,
3451 "kernel" ,
3552 "--samples" ,
3653 "20" ,
3754 ],
38- capture_output = True ,
39- text = True ,
4055 )
4156
42- assert result . returncode == 0
43- assert "Train accuracy" in result . stdout
44- assert "Test accuracy" in result . stdout
57+ assert returncode == 0
58+ assert "Train accuracy" in stdout
59+ assert "Test accuracy" in stdout
4560
4661
47- def test_cli_qcnn_runs ():
48- result = subprocess .run (
62+ def test_cli_qcnn_runs (monkeypatch : pytest .MonkeyPatch ):
63+ returncode , stdout , _ = _run_cli_in_process (
64+ monkeypatch ,
4965 [
50- sys .executable ,
51- "-m" ,
52- "qml" ,
5366 "qcnn" ,
5467 "--samples" ,
5568 "20" ,
5669 "--steps" ,
5770 "2" ,
5871 ],
59- capture_output = True ,
60- text = True ,
6172 )
6273
63- assert result . returncode == 0
64- assert "Train accuracy" in result . stdout
65- assert "Test accuracy" in result . stdout
66- assert "Final loss" in result . stdout
74+ assert returncode == 0
75+ assert "Train accuracy" in stdout
76+ assert "Test accuracy" in stdout
77+ assert "Final loss" in stdout
6778
6879
69- def test_cli_regression_runs ():
70- result = subprocess .run (
80+ def test_cli_regression_runs (monkeypatch : pytest .MonkeyPatch ):
81+ returncode , stdout , _ = _run_cli_in_process (
82+ monkeypatch ,
7183 [
72- sys .executable ,
73- "-m" ,
74- "qml" ,
7584 "regression" ,
7685 "--samples" ,
7786 "20" ,
@@ -80,62 +89,50 @@ def test_cli_regression_runs():
8089 "--layers" ,
8190 "1" ,
8291 ],
83- capture_output = True ,
84- text = True ,
8592 )
8693
87- assert result . returncode == 0
88- assert "Train MSE" in result . stdout
89- assert "Test MSE" in result . stdout
90- assert "Final loss" in result . stdout
94+ assert returncode == 0
95+ assert "Train MSE" in stdout
96+ assert "Test MSE" in stdout
97+ assert "Final loss" in stdout
9198
9299
93- def test_cli_logistic_runs ():
94- result = subprocess .run (
100+ def test_cli_logistic_runs (monkeypatch : pytest .MonkeyPatch ):
101+ returncode , stdout , _ = _run_cli_in_process (
102+ monkeypatch ,
95103 [
96- sys .executable ,
97- "-m" ,
98- "qml" ,
99104 "logistic" ,
100105 "--samples" ,
101106 "20" ,
102107 ],
103- capture_output = True ,
104- text = True ,
105108 )
106109
107- assert result . returncode == 0
108- assert "Train accuracy" in result . stdout
109- assert "Test accuracy" in result . stdout
110+ assert returncode == 0
111+ assert "Train accuracy" in stdout
112+ assert "Test accuracy" in stdout
110113
111114
112- def test_cli_ridge_runs ():
113- result = subprocess .run (
115+ def test_cli_ridge_runs (monkeypatch : pytest .MonkeyPatch ):
116+ returncode , stdout , _ = _run_cli_in_process (
117+ monkeypatch ,
114118 [
115- sys .executable ,
116- "-m" ,
117- "qml" ,
118119 "ridge" ,
119120 "--samples" ,
120121 "20" ,
121122 ],
122- capture_output = True ,
123- text = True ,
124123 )
125124
126- assert result . returncode == 0
127- assert "Train MSE" in result . stdout
128- assert "Test MSE" in result . stdout
129- assert "Train MAE" in result . stdout
130- assert "Test MAE" in result . stdout
125+ assert returncode == 0
126+ assert "Train MSE" in stdout
127+ assert "Test MSE" in stdout
128+ assert "Train MAE" in stdout
129+ assert "Test MAE" in stdout
131130
132131
133- def test_cli_trainable_kernel_runs ():
134- result = subprocess .run (
132+ def test_cli_trainable_kernel_runs (monkeypatch : pytest .MonkeyPatch ):
133+ returncode , stdout , _ = _run_cli_in_process (
134+ monkeypatch ,
135135 [
136- sys .executable ,
137- "-m" ,
138- "qml" ,
139136 "trainable-kernel" ,
140137 "--samples" ,
141138 "20" ,
@@ -146,12 +143,10 @@ def test_cli_trainable_kernel_runs():
146143 "--embedding-layers" ,
147144 "1" ,
148145 ],
149- capture_output = True ,
150- text = True ,
151146 )
152147
153- assert result . returncode == 0
154- assert "Train accuracy" in result . stdout
155- assert "Test accuracy" in result . stdout
156- assert "Final alignment" in result . stdout
157- assert "Final loss" in result . stdout
148+ assert returncode == 0
149+ assert "Train accuracy" in stdout
150+ assert "Test accuracy" in stdout
151+ assert "Final alignment" in stdout
152+ assert "Final loss" in stdout
0 commit comments