Skip to content

Commit 4c27d96

Browse files
Feiyang472feiyang-prismfp
authored andcommitted
test stub syntax
1 parent 33c0252 commit 4c27d96

File tree

1 file changed

+63
-1
lines changed

1 file changed

+63
-1
lines changed

tests/test_stub_gen.py

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,79 @@
1+
import ast
12
import itertools
3+
import logging
4+
from io import StringIO
5+
from tempfile import TemporaryDirectory
26
from unittest import TestCase
7+
8+
import cvxpy as cp
39
import test_E2E_LP
410
import test_E2E_QP
511
import test_E2E_SOCP
612

13+
from cvxpygen.cpg import (
14+
get_configuration,
15+
get_constraint_info,
16+
get_dual_variable_info,
17+
get_interface_class,
18+
get_parameter_info,
19+
get_variable_info,
20+
handle_sparsity,
21+
)
22+
from cvxpygen.utils import write_interface
23+
24+
725
class test_stub_gen(TestCase):
826
def setUp(self) -> None:
927
self.all_problems = itertools.chain(
1028
test_E2E_LP.name_to_prob.items(),
1129
test_E2E_QP.name_to_prob.items(),
1230
test_E2E_SOCP.name_to_prob.items(),
1331
)
32+
self.tempdir = TemporaryDirectory()
1433
return super().setUp()
34+
35+
def tearDown(self) -> None:
36+
self.tempdir.cleanup()
37+
return super().tearDown()
1538

39+
def get_codegen_context(self, problem: cp.Problem):
40+
# problem data
41+
data, solving_chain, inverse_data = problem.get_problem_data(
42+
solver=None,
43+
)
44+
param_prob = data['param_prob']
45+
solver_name = solving_chain.solver.name()
46+
interface_class, cvxpy_interface_class = get_interface_class(solver_name)
47+
48+
# configuration
49+
configuration = get_configuration(self.tempdir, solver_name, False, "")
50+
51+
# cone problems check
52+
if hasattr(param_prob, 'cone_dims'):
53+
cone_dims = param_prob.cone_dims
54+
interface_class.check_unsupported_cones(cone_dims)
55+
56+
handle_sparsity(param_prob)
57+
58+
solver_interface = interface_class(data, param_prob, []) # noqa
59+
variable_info = get_variable_info(problem, inverse_data)
60+
dual_variable_info = get_dual_variable_info(inverse_data, solver_interface, cvxpy_interface_class)
61+
parameter_info = get_parameter_info(param_prob)
62+
constraint_info = get_constraint_info(solver_interface)
63+
return dict(
64+
configuration=configuration,
65+
solver_interface=solver_interface,
66+
variable_info=variable_info,
67+
dual_variable_info=dual_variable_info,
68+
parameter_info=parameter_info,
69+
)
70+
1671
def test_stub_valid(self):
17-
...
72+
for name, problem in self.all_problems:
73+
with StringIO() as f:
74+
write_interface(f=f, **self.get_codegen_context(problem))
75+
try:
76+
ast.parse(f.read())
77+
except SyntaxError:
78+
logging.exception(f"Generated stub file for problem {name} has incoorect syntax")
79+
raise

0 commit comments

Comments
 (0)