Skip to content

Commit 9a9b709

Browse files
committed
fix(osqp-interface): fix the pointer integration with c
1 parent fca3b0a commit 9a9b709

File tree

3 files changed

+14
-37
lines changed

3 files changed

+14
-37
lines changed

example/basic/main.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,26 @@
11
package main
22

33
import (
4-
"fmt"
5-
64
"github.com/jerensl/osqp.go"
75
)
86

97
func main() {
108
newOSQP := osqp.NewOSQP()
119

12-
p_mat := osqp.NewCSCMat(2, 2, [][]float64{{4.0, 1.0}, {0.0, 2.0}})
13-
a_mat := osqp.NewCSCMat(3, 2, [][]float64{{1.0, 1.0}, {1.0, 0.0}, {0.0, 1.0}})
10+
p_mat := osqp.NewCSCMat(2, 2, [][]float64{{4, 1}, {0, 2}})
11+
a_mat := osqp.NewCSCMat(3, 2, [][]float64{{1, 1}, {1, 0}, {0, 1}})
1412

15-
fmt.Println(p_mat)
16-
fmt.Println(a_mat)
1713
data := osqp.Data{
1814
P_mat: p_mat,
19-
A_mat: a_mat,
2015
Q: []float64{1.0, 1.0},
16+
A_mat: a_mat,
2117
L: []float64{1.0, 0.0, 0.0},
2218
U: []float64{1.0, 0.7, 0.7},
2319
N: 2,
2420
M: 3,
2521
}
2622

27-
newOSQP.SetData(data)
28-
29-
newOSQP.Setup()
23+
newOSQP.Setup(data)
3024

3125
newOSQP.Solve()
3226

internal/pkg/binding/c.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,30 +46,31 @@ func NewOSQP() *OSQPWorkSpace {
4646
}
4747

4848
// settings.verbose = 0
49-
settings.alpha = 1.0
49+
// settings.alpha = 1.60
5050

5151

5252
return &OSQPWorkSpace{
5353
settings: settings,
5454
}
5555
}
5656

57-
func (o *OSQPWorkSpace) Setup() {
57+
func (o *OSQPWorkSpace) Setup(newData Data) {
58+
o.setData(newData)
5859
C.osqp_setup(&o.work, o.data, o.settings)
5960
}
6061

6162
func (o *OSQPWorkSpace) Solve() {
6263
C.osqp_solve(o.work)
6364
}
6465

65-
func (o *OSQPWorkSpace) SetData(newData Data) {
66+
func (o *OSQPWorkSpace) setData(newData Data) {
6667
data := (*C.OSQPData)(C.c_malloc(C.sizeof_OSQPData))
6768

6869
data.n = (C.c_int)(newData.N)
6970
data.m = (C.c_int)(newData.M)
7071

7172
data.P = C.csc_matrix(data.n, data.n, (C.c_int)(newData.P_nnz), (*C.c_float)(unsafe.Pointer(&newData.P_x[0])), (*C.c_int)(unsafe.Pointer(&newData.P_i[0])), (*C.c_int)(unsafe.Pointer(&newData.P_p[0])))
72-
data.q = (*C.c_float)(unsafe.Pointer(&newData.Q))
73+
data.q = (*C.c_float)(unsafe.Pointer(&newData.Q[0]))
7374
data.A = C.csc_matrix(data.m, data.n, (C.c_int)(newData.A_nnz), (*C.c_float)(unsafe.Pointer(&newData.A_x[0])), (*C.c_int)(unsafe.Pointer(&newData.A_i[0])), (*C.c_int)(unsafe.Pointer(&newData.A_p[0])))
7475

7576
data.l = (*C.c_float)(unsafe.Pointer(&newData.L[0]))

osqp.go

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ func NewCSCMat(m, n int, matrix [][]float64) *sparse.CSC {
1717
}
1818
}
1919

20-
return doxMatrix.ToCSC()
20+
csc := doxMatrix.ToCSC()
21+
22+
return csc
2123
}
2224

2325
type Data struct {
@@ -44,8 +46,7 @@ func NewOSQP() *OSQPConfig {
4446
return newOSQP
4547
}
4648

47-
48-
func (o *OSQPConfig) SetData(newData Data) {
49+
func (o OSQPConfig) Setup(newData Data) {
4950
currData := binding.Data{
5051
M: newData.M,
5152
N: newData.N,
@@ -62,26 +63,7 @@ func (o *OSQPConfig) SetData(newData Data) {
6263
U: newData.U,
6364
}
6465

65-
// currData := binding.Data{
66-
// M: newData.M,
67-
// N: newData.N,
68-
// P_x: newData.P_mat.Data,
69-
// P_i: newData.P_mat.Ind,
70-
// P_p: newData.P_mat.IdxPtr,
71-
// P_nnz: int64(newData.P_mat.NNZ),
72-
// A_x: newData.A_mat.Data,
73-
// A_i: newData.A_mat.Ind,
74-
// A_p: newData.A_mat.IdxPtr,
75-
// A_nnz: int64(newData.A_mat.NNZ),
76-
// Q: newData.Q,
77-
// L: newData.L,
78-
// U: newData.U,
79-
// }
80-
o.bind.SetData(currData)
81-
}
82-
83-
func (o OSQPConfig) Setup() {
84-
o.bind.Setup()
66+
o.bind.Setup(currData)
8567
}
8668

8769
func (o OSQPConfig) Solve() {

0 commit comments

Comments
 (0)