scs 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/scs/ffi.rb +2 -0
  4. data/lib/scs/version.rb +1 -1
  5. data/vendor/scs/CITATION.cff +2 -2
  6. data/vendor/scs/CMakeLists.txt +136 -6
  7. data/vendor/scs/Makefile +53 -3
  8. data/vendor/scs/README.md +1 -1
  9. data/vendor/scs/include/cones.h +47 -2
  10. data/vendor/scs/include/glbopts.h +1 -1
  11. data/vendor/scs/include/scs.h +29 -0
  12. data/vendor/scs/include/scs_blas.h +4 -0
  13. data/vendor/scs/include/scs_types.h +3 -1
  14. data/vendor/scs/include/util_spectral_cones.h +45 -0
  15. data/vendor/scs/linsys/cpu/direct/private.c +3 -3
  16. data/vendor/scs/linsys/cpu/direct/private.h +2 -1
  17. data/vendor/scs/linsys/csparse.c +1 -1
  18. data/vendor/scs/linsys/cudss/direct/private.c +279 -0
  19. data/vendor/scs/linsys/cudss/direct/private.h +63 -0
  20. data/vendor/scs/linsys/external/qdldl/qdldl_types.h +1 -1
  21. data/vendor/scs/linsys/gpu/indirect/private.c +14 -21
  22. data/vendor/scs/scs.mk +17 -2
  23. data/vendor/scs/src/aa.c +8 -12
  24. data/vendor/scs/src/cones.c +783 -12
  25. data/vendor/scs/src/rw.c +15 -1
  26. data/vendor/scs/src/scs.c +4 -0
  27. data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_IPM.c +660 -0
  28. data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_Newton.c +279 -0
  29. data/vendor/scs/src/spectral_cones/logdeterminant/log_cone_wrapper.c +205 -0
  30. data/vendor/scs/src/spectral_cones/logdeterminant/logdet_cone.c +143 -0
  31. data/vendor/scs/src/spectral_cones/nuclear/ell1_cone.c +221 -0
  32. data/vendor/scs/src/spectral_cones/nuclear/nuclear_cone.c +99 -0
  33. data/vendor/scs/src/spectral_cones/sum-largest/sum_largest_cone.c +196 -0
  34. data/vendor/scs/src/spectral_cones/sum-largest/sum_largest_eval_cone.c +140 -0
  35. data/vendor/scs/src/spectral_cones/util_spectral_cones.c +52 -0
  36. data/vendor/scs/test/problems/complex_PSD.h +83 -0
  37. data/vendor/scs/test/rng.h +4 -4
  38. data/vendor/scs/test/run_tests.c +25 -0
  39. data/vendor/scs/test/spectral_cones_problems/exp_design.h +141 -0
  40. data/vendor/scs/test/spectral_cones_problems/graph_partitioning.h +275 -0
  41. data/vendor/scs/test/spectral_cones_problems/robust_pca.h +253 -0
  42. data/vendor/scs/test/spectral_cones_problems/several_logdet_cones.h +222 -0
  43. data/vendor/scs/test/spectral_cones_problems/several_nuc_cone.h +285 -0
  44. data/vendor/scs/test/spectral_cones_problems/several_sum_largest.h +420 -0
  45. metadata +21 -2
@@ -0,0 +1,285 @@
1
+ #include "glbopts.h"
2
+ #include "linalg.h"
3
+ #include "minunit.h"
4
+ #include "problem_utils.h"
5
+ #include "rw.h"
6
+ #include "scs.h"
7
+ #include "scs_matrix.h"
8
+ #include "util.h"
9
+
10
+ // for SpectralSCS
11
+ static const char *several_nuc_cone(void) {
12
+ ScsCone *k = (ScsCone *)scs_calloc(1, sizeof(ScsCone));
13
+ ScsData *d = (ScsData *)scs_calloc(1, sizeof(ScsData));
14
+ ScsSettings *stgs = (ScsSettings *)scs_calloc(1, sizeof(ScsSettings));
15
+ ScsSolution *sol = (ScsSolution *)scs_calloc(1, sizeof(ScsSolution));
16
+ ScsInfo info = {0};
17
+ scs_int exitflag;
18
+ scs_float perr, derr;
19
+ scs_int success;
20
+ const char *fail;
21
+
22
+ /* data */
23
+ scs_float Ax[] = {
24
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
25
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
26
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
27
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
28
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
29
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
30
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
31
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
32
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
33
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
34
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
35
+ 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1., 1., -1., -1.,
36
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
37
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
38
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
39
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
40
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
41
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
42
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
43
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
44
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
45
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
46
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
47
+ 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1., 1., 1., -1.,
48
+ -1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
49
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
50
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
51
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
52
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
53
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
54
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
55
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
56
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
57
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
58
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
59
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
60
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
61
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
62
+ 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1.,
63
+ -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1., 1., -1.,
64
+ 1., -1.};
65
+ scs_int Ai[] = {
66
+ 60, 61, 121, 60, 62, 122, 60, 63, 123, 60, 64, 124, 60, 65, 125,
67
+ 60, 66, 126, 60, 67, 127, 60, 68, 128, 60, 69, 129, 60, 70, 130,
68
+ 60, 71, 131, 60, 72, 132, 60, 73, 133, 60, 74, 134, 60, 75, 135,
69
+ 60, 76, 136, 60, 77, 137, 60, 78, 138, 60, 79, 139, 60, 80, 140,
70
+ 60, 81, 141, 60, 82, 142, 60, 83, 143, 60, 84, 144, 60, 85, 145,
71
+ 60, 86, 146, 60, 87, 147, 60, 88, 148, 60, 89, 149, 60, 90, 150,
72
+ 60, 91, 151, 60, 92, 152, 60, 93, 153, 60, 94, 154, 60, 95, 155,
73
+ 60, 96, 156, 60, 97, 157, 60, 98, 158, 60, 99, 159, 60, 100, 160,
74
+ 60, 101, 161, 60, 102, 162, 60, 103, 163, 60, 104, 164, 60, 105, 165,
75
+ 60, 106, 166, 60, 107, 167, 60, 108, 168, 60, 109, 169, 60, 110, 170,
76
+ 60, 111, 171, 60, 112, 172, 60, 113, 173, 60, 114, 174, 60, 115, 175,
77
+ 60, 116, 176, 60, 117, 177, 60, 118, 178, 60, 119, 179, 60, 120, 180,
78
+ 0, 61, 121, 1, 62, 122, 2, 63, 123, 3, 64, 124, 4, 65, 125,
79
+ 5, 66, 126, 6, 67, 127, 7, 68, 128, 8, 69, 129, 9, 70, 130,
80
+ 10, 71, 131, 11, 72, 132, 12, 73, 133, 13, 74, 134, 14, 75, 135,
81
+ 15, 76, 136, 16, 77, 137, 17, 78, 138, 18, 79, 139, 19, 80, 140,
82
+ 20, 81, 141, 21, 82, 142, 22, 83, 143, 23, 84, 144, 24, 85, 145,
83
+ 25, 86, 146, 26, 87, 147, 27, 88, 148, 28, 89, 149, 29, 90, 150,
84
+ 30, 91, 151, 31, 92, 152, 32, 93, 153, 33, 94, 154, 34, 95, 155,
85
+ 35, 96, 156, 36, 97, 157, 37, 98, 158, 38, 99, 159, 39, 100, 160,
86
+ 40, 101, 161, 41, 102, 162, 42, 103, 163, 43, 104, 164, 44, 105, 165,
87
+ 45, 106, 166, 46, 107, 167, 47, 108, 168, 48, 109, 169, 49, 110, 170,
88
+ 50, 111, 171, 51, 112, 172, 52, 113, 173, 53, 114, 174, 54, 115, 175,
89
+ 55, 116, 176, 56, 117, 177, 57, 118, 178, 58, 119, 179, 59, 120, 180,
90
+ 181, 242, 0, 182, 1, 183, 2, 184, 3, 185, 4, 186, 5, 187, 6,
91
+ 188, 7, 189, 8, 190, 9, 191, 10, 192, 11, 193, 12, 194, 13, 195,
92
+ 14, 196, 15, 197, 16, 198, 17, 199, 18, 200, 19, 201, 20, 202, 21,
93
+ 203, 22, 204, 23, 205, 24, 206, 25, 207, 26, 208, 27, 209, 28, 210,
94
+ 29, 211, 30, 212, 31, 213, 32, 214, 33, 215, 34, 216, 35, 217, 36,
95
+ 218, 37, 219, 38, 220, 39, 221, 40, 222, 41, 223, 42, 224, 43, 225,
96
+ 44, 226, 45, 227, 46, 228, 47, 229, 48, 230, 49, 231, 50, 232, 51,
97
+ 233, 52, 234, 53, 235, 54, 236, 55, 237, 56, 238, 57, 239, 58, 240,
98
+ 59, 241, 0, 243, 1, 244, 2, 245, 3, 246, 4, 247, 5, 248, 6,
99
+ 249, 7, 250, 8, 251, 9, 252, 10, 253, 11, 254, 12, 255, 13, 256,
100
+ 14, 257, 15, 258, 16, 259, 17, 260, 18, 261, 19, 262, 20, 263, 21,
101
+ 264, 22, 265, 23, 266, 24, 267, 25, 268, 26, 269, 27, 270, 28, 271,
102
+ 29, 272, 30, 273, 31, 274, 32, 275, 33, 276, 34, 277, 35, 278, 36,
103
+ 279, 37, 280, 38, 281, 39, 282, 40, 283, 41, 284, 42, 285, 43, 286,
104
+ 44, 287, 45, 288, 46, 289, 47, 290, 48, 291, 49, 292, 50, 293, 51,
105
+ 294, 52, 295, 53, 296, 54, 297, 55, 298, 56, 299, 57, 300, 58, 301,
106
+ 59, 302};
107
+ scs_int Ap[] = {
108
+ 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42,
109
+ 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87,
110
+ 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 123, 126, 129, 132,
111
+ 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, 174, 177,
112
+ 180, 183, 186, 189, 192, 195, 198, 201, 204, 207, 210, 213, 216, 219, 222,
113
+ 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267,
114
+ 270, 273, 276, 279, 282, 285, 288, 291, 294, 297, 300, 303, 306, 309, 312,
115
+ 315, 318, 321, 324, 327, 330, 333, 336, 339, 342, 345, 348, 351, 354, 357,
116
+ 360, 361, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 386,
117
+ 388, 390, 392, 394, 396, 398, 400, 402, 404, 406, 408, 410, 412, 414, 416,
118
+ 418, 420, 422, 424, 426, 428, 430, 432, 434, 436, 438, 440, 442, 444, 446,
119
+ 448, 450, 452, 454, 456, 458, 460, 462, 464, 466, 468, 470, 472, 474, 476,
120
+ 478, 480, 482, 484, 486, 488, 490, 492, 494, 496, 498, 500, 502, 504, 506,
121
+ 508, 510, 512, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 534, 536,
122
+ 538, 540, 542, 544, 546, 548, 550, 552, 554, 556, 558, 560, 562, 564, 566,
123
+ 568, 570, 572, 574, 576, 578, 580, 582, 584, 586, 588, 590, 592, 594, 596,
124
+ 598, 600, 602};
125
+
126
+ scs_float b[] = {
127
+ 1.00346258, 1.058972, 1.3338978, 0.95502671, 0.76639009, 0.61628772,
128
+ 1.42111113, 1.03841293, 0.44615864, 0.85861969, 0.90243625, 0.72213324,
129
+ 0.94699689, 0.81716838, 1.01510945, 0.13007678, 1.198153, 0.95044553,
130
+ 0.4949946, 1.07831368, 1.32720261, 1.07903274, 1.68375286, 1.27474549,
131
+ 1.18000824, 0.61398833, 1.82853889, 1.27952122, 0.75345835, 1.20492083,
132
+ 1.2038308, 1.03174759, 1.68585985, 1.11247234, 1.00162586, 0.62169897,
133
+ 1.69182118, 1.29236728, 0.59968048, 1.17087666, 0.39423923, 0.29843035,
134
+ 0.53155946, 0.40310646, 0.3583775, 0.18407451, 0.53328188, 0.34513123,
135
+ 0.26243805, 0.37141265, 0.72923936, 0.60496262, 0.78424416, 0.6510247,
136
+ 0.76451821, 0.16999683, 0.98700998, 0.79590066, 0.37119843, 0.86498628,
137
+ 0.58937813, 0., 0., 0., 0., 0.,
138
+ 0., 0., 0., 0., 0., 0.,
139
+ 0., 0., 0., 0., 0., 0.,
140
+ 0., 0., 0., 0., 0., 0.,
141
+ 0., 0., 0., 0., 0., 0.,
142
+ 0., 0., 0., 0., 0., 0.,
143
+ 0., 0., 0., 0., 0., 0.,
144
+ 0., 0., 0., 0., 0., 0.,
145
+ 0., 0., 0., 0., 0., 0.,
146
+ 0., 0., 0., 0., 0., 0.,
147
+ 0., 0., 0., 0., 0., 0.,
148
+ 0., 0., 0., 0., 0., 0.,
149
+ 0., 0., 0., 0., 0., 0.,
150
+ 0., 0., 0., 0., 0., 0.,
151
+ 0., 0., 0., 0., 0., 0.,
152
+ 0., 0., 0., 0., 0., 0.,
153
+ 0., 0., 0., 0., 0., 0.,
154
+ 0., 0., 0., 0., 0., 0.,
155
+ 0., 0., 0., 0., 0., 0.,
156
+ 0., 0., 0., 0., 0., 0.,
157
+ 0., 0., 0., 0., 0., 0.,
158
+ 0., 0., 0., 0., 0., 0.,
159
+ 0., 0., 0., 0., 0., 0.,
160
+ 0., 0., 0., 0., 0., 0.,
161
+ 0., 0., 0., 0., 0., 0.,
162
+ 0., 0., 0., 0., 0., 0.,
163
+ 0., 0., 0., 0., 0., 0.,
164
+ 0., 0., 0., 0., 0., 0.,
165
+ 0., 0., 0., 0., 0., 0.,
166
+ 0., 0., 0., 0., 0., 0.,
167
+ 0., 0., 0., 0., 0., 0.,
168
+ 0., 0., 0., 0., 0., 0.,
169
+ 0., 0., 0., 0., 0., 0.,
170
+ 0., 0., 0., 0., 0., 0.,
171
+ 0., 0., 0., 0., 0., 0.,
172
+ 0., 0., 0., 0., 0., 0.,
173
+ 0., 0., 0., 0., 0., 0.,
174
+ 0., 0., 0., 0., 0., 0.,
175
+ 0., 0., 0., 0., 0., 0.,
176
+ 0., 0., 0., 0., 0., 0.,
177
+ 0., 0., 0.};
178
+ scs_float c[] = {
179
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
180
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
181
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
182
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
183
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
184
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
185
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0.,
186
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
187
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
188
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
189
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
190
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
191
+ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
192
+ 0., 0., 0., 0., 0., 0., 0., 0.};
193
+ scs_int m = 303;
194
+ scs_int n = 242;
195
+
196
+ scs_int z = 60;
197
+ scs_int l = 121;
198
+ scs_int *q = SCS_NULL;
199
+ scs_int qsize = 0;
200
+ scs_int *s = SCS_NULL;
201
+ scs_int ssize = 0;
202
+ scs_int ep = 0;
203
+ scs_int ed = 0;
204
+ scs_float *p = SCS_NULL;
205
+ scs_int psize = 0;
206
+ scs_int *d_array = SCS_NULL;
207
+ scs_int dsize = 0;
208
+ scs_int nuc_m[] = {10, 10};
209
+ scs_int nuc_n[] = {6, 6};
210
+ scs_int nucsize = 2;
211
+ scs_int *ell1 = SCS_NULL;
212
+ scs_int ell1_size = 0;
213
+ scs_int *sl_n = SCS_NULL;
214
+ scs_int *sl_k = SCS_NULL;
215
+ scs_int sl_size = 0;
216
+
217
+ // computed using mosek (the input of Ax is truncated, and mosek solved
218
+ // the problem with the non-truncated data)
219
+ scs_float opt = 8.046737935264606;
220
+ /* end data */
221
+
222
+ d->m = m;
223
+ d->n = n;
224
+ d->b = b;
225
+ d->c = c;
226
+
227
+ d->A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
228
+
229
+ d->A->m = m;
230
+ d->A->n = n;
231
+ d->A->x = Ax;
232
+ d->A->i = Ai;
233
+ d->A->p = Ap;
234
+
235
+ k->z = z;
236
+ k->l = l;
237
+ k->q = q;
238
+ k->qsize = qsize;
239
+ k->s = s;
240
+ k->ssize = ssize;
241
+ k->ep = ep;
242
+ k->ed = ed;
243
+ k->p = p;
244
+ k->psize = psize;
245
+ k->d = d_array;
246
+ k->dsize = dsize;
247
+ k->nuc_m = nuc_m;
248
+ k->nuc_n = nuc_n;
249
+ k->nucsize = nucsize;
250
+ k->ell1 = ell1;
251
+ k->ell1_size = ell1_size;
252
+ k->sl_n = sl_n;
253
+ k->sl_k = sl_k;
254
+ k->sl_size = sl_size;
255
+
256
+ scs_set_default_settings(stgs);
257
+ stgs->eps_abs = 1e-7;
258
+ stgs->eps_rel = 1e-7;
259
+ stgs->eps_infeas = 1e-9;
260
+
261
+ exitflag = scs(d, k, stgs, sol, &info);
262
+
263
+ perr = SCS(dot)(d->c, sol->x, d->n) - opt;
264
+ derr = -SCS(dot)(d->b, sol->y, d->m) - opt;
265
+
266
+ scs_printf("primal obj error %4e\n", perr);
267
+ scs_printf("dual obj error %4e\n", derr);
268
+
269
+ success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
270
+
271
+ mu_assert("robust_pca: SCS failed to produce outputflag SCS_SOLVED", success);
272
+
273
+ fail = verify_solution_correct(d, k, stgs, &info, sol, exitflag);
274
+ if (fail)
275
+ return fail;
276
+
277
+ /* kill data */
278
+ scs_free(d->A);
279
+ scs_free(k);
280
+ scs_free(stgs);
281
+ scs_free(d);
282
+ SCS(free_sol)(sol);
283
+
284
+ return fail;
285
+ }