Skip to content

Commit 602027f

Browse files
committed
update main.py
- main.py: using new API - update docs
1 parent 6a9ff79 commit 602027f

5 files changed

Lines changed: 31 additions & 19 deletions

File tree

docs/python-bindings.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ response = solver.run(p=[20., 1.])
8484
if not response.is_ok():
8585
raise RuntimeError(response.get().message)
8686

87-
status = response.get()
88-
u_star = status.solution
87+
result = response.get()
88+
u_star = result.solution
8989
```
9090

9191
In the first line, `solver = rosenbrock.solver()`, we obtain an instance of
@@ -107,8 +107,8 @@ the socket transport layer.
107107
```python
108108
response = solver.run(p=[20., 1.])
109109
if response.is_ok():
110-
status = response.get()
111-
u_star = status.solution
110+
result = response.get()
111+
u_star = result.solution
112112
else:
113113
error = response.get()
114114
print(error.code, error.message)

open-codegen/main.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,23 +44,23 @@ def get_open_local_absolute_path():
4444
meta,
4545
build_config,
4646
solver_cfg)
47-
builder.build()
47+
# builder.build()
4848

4949
sys.path.insert(1, os.path.join(optimizers_dir, optimizer_name))
5050
rosenbrock = __import__(optimizer_name)
5151

5252
solver = rosenbrock.solver()
53-
result = solver.run(p=[0.5, 8.5], initial_guess=[1, 2, 3, 4, 0])
54-
print(" ")
55-
print(f"solution = {result.solution}")
56-
print(f"time = {result.solve_time_ms} ms")
57-
print(f"penalty = {result.penalty}")
58-
print(f"infeasibility f1 = {result.f1_infeasibility}")
59-
print(f"infeasibility f2 = {result.f2_norm}")
60-
print(f"status = {result.exit_status}")
61-
print(f"inner = {result.num_inner_iterations}")
62-
print(f"outer = {result.num_outer_iterations}")
63-
print(f"cost = {result.cost}")
53+
response = solver.run(p=[0.5, 8.5, 1.], initial_guess=[1, 2, 3, 4, 0])
54+
55+
if response.is_ok():
56+
# SolverResponse
57+
result = response.get()
58+
print(result)
59+
else:
60+
# SolverError
61+
error = response.get()
62+
print(type(error))
63+
6464

6565
# Preconditioned Non-preconditioned
6666
# -------------------------------------

open-codegen/opengen/ocp/builder.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ def backend_kind(self):
114114
return self.__backend_kind
115115

116116
def __repr__(self):
117+
"""Return a concise summary of the generated optimizer wrapper."""
117118
return (
118119
"GeneratedOptimizer("
119120
f"optimizer_name={self.__optimizer_name!r}, "
@@ -343,8 +344,10 @@ def solve(
343344
:param initial_penalty: optional initial penalty parameter
344345
:param parameter_values: named parameter values
345346
:return: :class:`OcpSolution`
347+
:raises ValueError: if required named parameters are missing or have
348+
incompatible dimensions
346349
:raises RuntimeError: if the backend is unavailable or the low-level
347-
solve call fails
350+
solve call fails; backend-specific error messages are propagated
348351
"""
349352
packed_parameters = self.__pack_parameters(parameter_values)
350353

open-codegen/opengen/tcp/solver_error.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class SolverError:
2-
"""Class for storing solver status in the event of an error."""
2+
"""Structured solver error returned by TCP or direct Python bindings."""
33

44
def __init__(self, error):
55
"""Constructs instance of :class:`~opengen.tcp.solver_error.SolverError`
@@ -40,4 +40,5 @@ def message(self):
4040
return self.__dict__["__message"]
4141

4242
def __repr__(self):
43+
"""Return a concise one-line representation of the error."""
4344
return f"SolverError(code={self.code}, message={self.message!r})"

open-codegen/opengen/tcp/solver_response.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@
33

44

55
class SolverResponse:
6-
"""Stores a solver response of type SolverStatus or SolverError."""
6+
"""Stores a solver response of type SolverStatus or SolverError.
7+
8+
This wrapper is used by both the TCP interface and the direct Python
9+
bindings generated by OpEn. Call :meth:`is_ok` first, then
10+
:meth:`get` to obtain either a :class:`SolverStatus` or a
11+
:class:`SolverError`.
12+
"""
713

814
def __init__(self, d):
915
"""Constructs instance of :class:`~opengen.tcp.solver_response.SolverResponse`
@@ -38,9 +44,11 @@ def get(self):
3844
return self.__response
3945

4046
def __getitem__(self, key):
47+
"""Proxy attribute access to the wrapped status or error object."""
4148
return getattr(self.__response, key)
4249

4350
def __repr__(self):
51+
"""Return a concise one-line summary suitable for debugging."""
4452
if self.is_ok():
4553
status = self.get()
4654
return (

0 commit comments

Comments
 (0)