Skip to content

Commit 315f4d3

Browse files
authored
Refactor Python examples with a new "util.py" file (#347)
* [examples/python] Add util.py file, move "generate_mixed_qp" function to it give reg a meaning * update CHANGELOG * apply suggestion
1 parent 25827f6 commit 315f4d3

17 files changed

+54
-397
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
1313
* Fix cereal include directory in cmake ([#340](https://github.com/Simple-Robotics/proxsuite/pull/340))
1414
* Extend doc with hint for conda installation from source ([#340](https://github.com/Simple-Robotics/proxsuite/pull/340))
1515

16+
### Changed
17+
18+
* Refactor Python examples with a new "util.py" file ([#347](https://github.com/Simple-Robotics/proxsuite/pull/347))
19+
1620
## [0.6.6] - 2024-06-15
1721

1822
### Fixed

examples/python/estimate_nonconvex_eigenvalue.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
import proxsuite
22
import numpy as np
33
import scipy.sparse as spa
4-
5-
6-
def generate_mixed_qp(n, seed=1, reg=-2.0):
7-
# A function for generating sparse random convex qps in dense format
8-
9-
np.random.seed(seed)
10-
n_eq = int(n / 4)
11-
n_in = int(n / 4)
12-
m = n_eq + n_in
13-
14-
P = spa.random(
15-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
16-
).toarray()
17-
P = (P + P.T) / 2.0
18-
19-
s = max(np.absolute(np.linalg.eigvals(P)))
20-
P += (abs(s) + 1e-02) * spa.eye(n)
21-
P = spa.coo_matrix(P)
22-
q = np.random.randn(n)
23-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc").toarray()
24-
v = np.random.randn(n) # Fictitious solution
25-
delta = np.random.rand(m) # To get inequality
26-
u = A @ v
27-
l = -1.0e20 * np.ones(m)
28-
29-
return P.toarray(), q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
4+
from util import generate_mixed_qp
305

316

327
# load a qp object using qp problem dimensions

examples/python/init_dense_qp.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
import proxsuite
22
import numpy as np
33
import scipy.sparse as spa
4-
5-
6-
def generate_mixed_qp(n, seed=1):
7-
# A function for generating random convex qps
8-
9-
np.random.seed(seed)
10-
n_eq = int(n / 4)
11-
n_in = int(n / 4)
12-
m = n_eq + n_in
13-
14-
P = spa.random(
15-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
16-
).toarray()
17-
P = (P + P.T) / 2.0
18-
19-
s = max(np.absolute(np.linalg.eigvals(P)))
20-
P += (abs(s) + 1e-02) * spa.eye(n)
21-
P = spa.coo_matrix(P)
22-
q = np.random.randn(n)
23-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc").toarray()
24-
v = np.random.randn(n) # Fictitious solution
25-
delta = np.random.rand(m) # To get inequality
26-
u = A @ v
27-
l = -1.0e20 * np.ones(m)
28-
29-
return P.toarray(), q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
4+
from util import generate_mixed_qp
305

316

327
# load a qp object using qp problem dimensions

examples/python/init_dense_qp_with_box.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
import proxsuite
22
import numpy as np
33
import scipy.sparse as spa
4-
5-
6-
def generate_mixed_qp(n, seed=1):
7-
# A function for generating random convex qps
8-
9-
np.random.seed(seed)
10-
n_eq = int(n / 4)
11-
n_in = int(n / 4)
12-
m = n_eq + n_in
13-
14-
P = spa.random(
15-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
16-
).toarray()
17-
P = (P + P.T) / 2.0
18-
19-
s = max(np.absolute(np.linalg.eigvals(P)))
20-
P += (abs(s) + 1e-02) * spa.eye(n)
21-
P = spa.coo_matrix(P)
22-
q = np.random.randn(n)
23-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc").toarray()
24-
v = np.random.randn(n) # Fictitious solution
25-
delta = np.random.rand(m) # To get inequality
26-
u = A @ v
27-
l = -1.0e20 * np.ones(m)
28-
29-
return P.toarray(), q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
4+
from util import generate_mixed_qp
305

316

327
# load a qp object using qp problem dimensions

examples/python/init_dense_qp_with_other_options.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
import proxsuite
22
import numpy as np
33
import scipy.sparse as spa
4-
5-
6-
def generate_mixed_qp(n, seed=1):
7-
# A function for generating random convex qps
8-
9-
np.random.seed(seed)
10-
n_eq = int(n / 4)
11-
n_in = int(n / 4)
12-
m = n_eq + n_in
13-
14-
P = spa.random(
15-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
16-
).toarray()
17-
P = (P + P.T) / 2.0
18-
19-
s = max(np.absolute(np.linalg.eigvals(P)))
20-
P += (abs(s) + 1e-02) * spa.eye(n)
21-
P = spa.coo_matrix(P)
22-
q = np.random.randn(n)
23-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc").toarray()
24-
v = np.random.randn(n) # Fictitious solution
25-
delta = np.random.rand(m) # To get inequality
26-
u = A @ v
27-
l = -1.0e20 * np.ones(m)
28-
29-
return P.toarray(), q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
4+
from util import generate_mixed_qp
305

316

327
# load a qp object using qp problem dimensions

examples/python/init_dense_qp_with_timings.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
import proxsuite
22
import numpy as np
33
import scipy.sparse as spa
4-
5-
6-
def generate_mixed_qp(n, seed=1):
7-
# A function for generating random convex qps
8-
9-
np.random.seed(seed)
10-
n_eq = int(n / 4)
11-
n_in = int(n / 4)
12-
m = n_eq + n_in
13-
14-
P = spa.random(
15-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
16-
).toarray()
17-
P = (P + P.T) / 2.0
18-
19-
s = max(np.absolute(np.linalg.eigvals(P)))
20-
P += (abs(s) + 1e-02) * spa.eye(n)
21-
P = spa.coo_matrix(P)
22-
q = np.random.randn(n)
23-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc").toarray()
24-
v = np.random.randn(n) # Fictitious solution
25-
delta = np.random.rand(m) # To get inequality
26-
u = A @ v
27-
l = -1.0e20 * np.ones(m)
28-
29-
return P.toarray(), q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
4+
from util import generate_mixed_qp
305

316

327
# load a qp object using qp problem dimensions

examples/python/init_with_default_options.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
import proxsuite
22
import numpy as np
33
import scipy.sparse as spa
4-
5-
6-
def generate_mixed_qp(n, seed=1):
7-
# A function for generating random convex qps
8-
9-
np.random.seed(seed)
10-
n_eq = int(n / 4)
11-
n_in = int(n / 4)
12-
m = n_eq + n_in
13-
14-
P = spa.random(
15-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
16-
).toarray()
17-
P = (P + P.T) / 2.0
18-
19-
s = max(np.absolute(np.linalg.eigvals(P)))
20-
P += (abs(s) + 1e-02) * spa.eye(n)
21-
P = spa.coo_matrix(P)
22-
q = np.random.randn(n)
23-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc").toarray()
24-
v = np.random.randn(n) # Fictitious solution
25-
delta = np.random.rand(m) # To get inequality
26-
u = A @ v
27-
l = -1.0e20 * np.ones(m)
28-
29-
return P.toarray(), q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
4+
from util import generate_mixed_qp
305

316

327
# load a qp object using qp problem dimensions

examples/python/loading_sparse_qp.py

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,11 @@
88

99
import numpy as np
1010
import scipy.sparse as spa
11-
12-
13-
def generate_mixed_qp(n, seed=1):
14-
# A function for generating random convex qps
15-
16-
np.random.seed(seed)
17-
n_eq = int(n / 4)
18-
n_in = int(n / 4)
19-
m = n_eq + n_in
20-
21-
P = spa.random(
22-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
23-
).toarray()
24-
P = (P + P.T) / 2.0
25-
26-
s = max(np.absolute(np.linalg.eigvals(P)))
27-
P += (abs(s) + 1e-02) * spa.eye(n)
28-
P = spa.coo_matrix(P)
29-
q = np.random.randn(n)
30-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc")
31-
v = np.random.randn(n) # Fictitious solution
32-
delta = np.random.rand(m) # To get inequality
33-
u = A @ v
34-
l = -1.0e20 * np.ones(m)
35-
36-
return P, q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
11+
from util import generate_mixed_qp
3712

3813

3914
# load a qp2 object using matrix masks
40-
H, g, A, b, C, u, l = generate_mixed_qp(n)
15+
H, g, A, b, C, u, l = generate_mixed_qp(n, True)
4116

4217
H_ = H != 0.0
4318
A_ = A != 0.0

examples/python/overview-simple.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
import proxsuite
22
import numpy as np
33
import scipy.sparse as spa
4-
5-
6-
def generate_mixed_qp(n, seed=1):
7-
# A function for generating sparse random convex qps in dense format
8-
9-
np.random.seed(seed)
10-
n_eq = int(n / 4)
11-
n_in = int(n / 4)
12-
m = n_eq + n_in
13-
14-
P = spa.random(
15-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
16-
).toarray()
17-
P = (P + P.T) / 2.0
18-
19-
s = max(np.absolute(np.linalg.eigvals(P)))
20-
P += (abs(s) + 1e-02) * spa.eye(n)
21-
P = spa.coo_matrix(P)
22-
q = np.random.randn(n)
23-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc").toarray()
24-
v = np.random.randn(n) # Fictitious solution
25-
delta = np.random.rand(m) # To get inequality
26-
u = A @ v
27-
l = -1.0e20 * np.ones(m)
28-
29-
return P.toarray(), q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
4+
from util import generate_mixed_qp
305

316

327
# generate a qp problem

examples/python/solve_dense_qp.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,7 @@
11
import proxsuite
22
import numpy as np
33
import scipy.sparse as spa
4-
5-
6-
def generate_mixed_qp(n, seed=1):
7-
# A function for generating sparse random convex qps in dense format
8-
9-
np.random.seed(seed)
10-
n_eq = int(n / 4)
11-
n_in = int(n / 4)
12-
m = n_eq + n_in
13-
14-
P = spa.random(
15-
n, n, density=0.075, data_rvs=np.random.randn, format="csc"
16-
).toarray()
17-
P = (P + P.T) / 2.0
18-
19-
s = max(np.absolute(np.linalg.eigvals(P)))
20-
P += (abs(s) + 1e-02) * spa.eye(n)
21-
P = spa.coo_matrix(P)
22-
q = np.random.randn(n)
23-
A = spa.random(m, n, density=0.15, data_rvs=np.random.randn, format="csc").toarray()
24-
v = np.random.randn(n) # Fictitious solution
25-
delta = np.random.rand(m) # To get inequality
26-
u = A @ v
27-
l = -1.0e20 * np.ones(m)
28-
29-
return P.toarray(), q, A[:n_eq, :], u[:n_eq], A[n_in:, :], u[n_in:], l[n_in:]
4+
from util import generate_mixed_qp
305

316

327
# load a qp object using qp problem dimensions

0 commit comments

Comments
 (0)