scs 0.2.2 → 0.3.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 (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/LICENSE.txt +18 -18
  4. data/README.md +19 -14
  5. data/lib/scs/ffi.rb +31 -20
  6. data/lib/scs/solver.rb +32 -9
  7. data/lib/scs/version.rb +1 -1
  8. data/vendor/scs/CITATION.cff +39 -0
  9. data/vendor/scs/CMakeLists.txt +320 -0
  10. data/vendor/scs/Makefile +32 -23
  11. data/vendor/scs/README.md +9 -218
  12. data/vendor/scs/include/aa.h +67 -23
  13. data/vendor/scs/include/cones.h +22 -19
  14. data/vendor/scs/include/glbopts.h +107 -79
  15. data/vendor/scs/include/linalg.h +3 -4
  16. data/vendor/scs/include/linsys.h +58 -44
  17. data/vendor/scs/include/normalize.h +6 -5
  18. data/vendor/scs/include/rw.h +8 -2
  19. data/vendor/scs/include/scs.h +257 -141
  20. data/vendor/scs/include/scs_types.h +34 -0
  21. data/vendor/scs/include/scs_work.h +83 -0
  22. data/vendor/scs/include/util.h +3 -15
  23. data/vendor/scs/linsys/cpu/direct/private.c +241 -232
  24. data/vendor/scs/linsys/cpu/direct/private.h +13 -7
  25. data/vendor/scs/linsys/cpu/indirect/private.c +194 -118
  26. data/vendor/scs/linsys/cpu/indirect/private.h +7 -4
  27. data/vendor/scs/linsys/csparse.c +87 -0
  28. data/vendor/scs/linsys/csparse.h +34 -0
  29. data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +6 -6
  30. data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +6 -1
  31. data/vendor/scs/linsys/external/amd/amd_internal.h +1 -1
  32. data/vendor/scs/linsys/external/amd/amd_order.c +5 -5
  33. data/vendor/scs/linsys/external/qdldl/changes +2 -0
  34. data/vendor/scs/linsys/external/qdldl/qdldl.c +29 -46
  35. data/vendor/scs/linsys/external/qdldl/qdldl.h +33 -41
  36. data/vendor/scs/linsys/external/qdldl/qdldl_types.h +11 -3
  37. data/vendor/scs/linsys/gpu/gpu.c +58 -21
  38. data/vendor/scs/linsys/gpu/gpu.h +70 -35
  39. data/vendor/scs/linsys/gpu/indirect/private.c +394 -157
  40. data/vendor/scs/linsys/gpu/indirect/private.h +27 -12
  41. data/vendor/scs/linsys/scs_matrix.c +478 -0
  42. data/vendor/scs/linsys/scs_matrix.h +70 -0
  43. data/vendor/scs/scs.mk +14 -10
  44. data/vendor/scs/src/aa.c +394 -110
  45. data/vendor/scs/src/cones.c +497 -359
  46. data/vendor/scs/src/ctrlc.c +15 -5
  47. data/vendor/scs/src/linalg.c +107 -26
  48. data/vendor/scs/src/normalize.c +30 -72
  49. data/vendor/scs/src/rw.c +202 -27
  50. data/vendor/scs/src/scs.c +769 -571
  51. data/vendor/scs/src/scs_version.c +11 -3
  52. data/vendor/scs/src/util.c +37 -106
  53. data/vendor/scs/test/minunit.h +22 -8
  54. data/vendor/scs/test/problem_utils.h +180 -25
  55. data/vendor/scs/test/problems/degenerate.h +130 -0
  56. data/vendor/scs/test/problems/hs21_tiny_qp.h +124 -0
  57. data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +116 -0
  58. data/vendor/scs/test/problems/infeasible_tiny_qp.h +100 -0
  59. data/vendor/scs/test/problems/qafiro_tiny_qp.h +199 -0
  60. data/vendor/scs/test/problems/random_prob +0 -0
  61. data/vendor/scs/test/problems/random_prob.h +45 -0
  62. data/vendor/scs/test/problems/rob_gauss_cov_est.h +188 -31
  63. data/vendor/scs/test/problems/small_lp.h +14 -13
  64. data/vendor/scs/test/problems/small_qp.h +352 -0
  65. data/vendor/scs/test/problems/test_validation.h +43 -0
  66. data/vendor/scs/test/problems/unbounded_tiny_qp.h +82 -0
  67. data/vendor/scs/test/random_socp_prob.c +54 -53
  68. data/vendor/scs/test/rng.h +109 -0
  69. data/vendor/scs/test/run_from_file.c +20 -11
  70. data/vendor/scs/test/run_tests.c +35 -2
  71. metadata +29 -98
  72. data/vendor/scs/linsys/amatrix.c +0 -305
  73. data/vendor/scs/linsys/amatrix.h +0 -36
  74. data/vendor/scs/linsys/amatrix.o +0 -0
  75. data/vendor/scs/linsys/cpu/direct/private.o +0 -0
  76. data/vendor/scs/linsys/cpu/indirect/private.o +0 -0
  77. data/vendor/scs/linsys/external/amd/SuiteSparse_config.o +0 -0
  78. data/vendor/scs/linsys/external/amd/amd_1.o +0 -0
  79. data/vendor/scs/linsys/external/amd/amd_2.o +0 -0
  80. data/vendor/scs/linsys/external/amd/amd_aat.o +0 -0
  81. data/vendor/scs/linsys/external/amd/amd_control.o +0 -0
  82. data/vendor/scs/linsys/external/amd/amd_defaults.o +0 -0
  83. data/vendor/scs/linsys/external/amd/amd_dump.o +0 -0
  84. data/vendor/scs/linsys/external/amd/amd_global.o +0 -0
  85. data/vendor/scs/linsys/external/amd/amd_info.o +0 -0
  86. data/vendor/scs/linsys/external/amd/amd_order.o +0 -0
  87. data/vendor/scs/linsys/external/amd/amd_post_tree.o +0 -0
  88. data/vendor/scs/linsys/external/amd/amd_postorder.o +0 -0
  89. data/vendor/scs/linsys/external/amd/amd_preprocess.o +0 -0
  90. data/vendor/scs/linsys/external/amd/amd_valid.o +0 -0
  91. data/vendor/scs/linsys/external/qdldl/qdldl.o +0 -0
  92. data/vendor/scs/src/aa.o +0 -0
  93. data/vendor/scs/src/cones.o +0 -0
  94. data/vendor/scs/src/ctrlc.o +0 -0
  95. data/vendor/scs/src/linalg.o +0 -0
  96. data/vendor/scs/src/normalize.o +0 -0
  97. data/vendor/scs/src/rw.o +0 -0
  98. data/vendor/scs/src/scs.o +0 -0
  99. data/vendor/scs/src/scs_version.o +0 -0
  100. data/vendor/scs/src/util.o +0 -0
  101. data/vendor/scs/test/data/small_random_socp +0 -0
  102. data/vendor/scs/test/problems/small_random_socp.h +0 -33
  103. data/vendor/scs/test/run_tests +0 -2
metadata CHANGED
@@ -1,73 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-22 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: minitest
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '5'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '5'
55
- - !ruby/object:Gem::Dependency
56
- name: numo-narray
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- description:
70
- email: andrew@chartkick.com
11
+ date: 2022-01-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email: andrew@ankane.org
71
15
  executables: []
72
16
  extensions:
73
17
  - ext/scs/extconf.rb
@@ -81,6 +25,8 @@ files:
81
25
  - lib/scs/ffi.rb
82
26
  - lib/scs/solver.rb
83
27
  - lib/scs/version.rb
28
+ - vendor/scs/CITATION.cff
29
+ - vendor/scs/CMakeLists.txt
84
30
  - vendor/scs/LICENSE.txt
85
31
  - vendor/scs/Makefile
86
32
  - vendor/scs/README.md
@@ -94,94 +40,79 @@ files:
94
40
  - vendor/scs/include/rw.h
95
41
  - vendor/scs/include/scs.h
96
42
  - vendor/scs/include/scs_blas.h
43
+ - vendor/scs/include/scs_types.h
44
+ - vendor/scs/include/scs_work.h
97
45
  - vendor/scs/include/util.h
98
- - vendor/scs/linsys/amatrix.c
99
- - vendor/scs/linsys/amatrix.h
100
- - vendor/scs/linsys/amatrix.o
101
46
  - vendor/scs/linsys/cpu/direct/private.c
102
47
  - vendor/scs/linsys/cpu/direct/private.h
103
- - vendor/scs/linsys/cpu/direct/private.o
104
48
  - vendor/scs/linsys/cpu/indirect/private.c
105
49
  - vendor/scs/linsys/cpu/indirect/private.h
106
- - vendor/scs/linsys/cpu/indirect/private.o
50
+ - vendor/scs/linsys/csparse.c
51
+ - vendor/scs/linsys/csparse.h
107
52
  - vendor/scs/linsys/external/amd/LICENSE.txt
108
53
  - vendor/scs/linsys/external/amd/SuiteSparse_config.c
109
54
  - vendor/scs/linsys/external/amd/SuiteSparse_config.h
110
- - vendor/scs/linsys/external/amd/SuiteSparse_config.o
111
55
  - vendor/scs/linsys/external/amd/amd.h
112
56
  - vendor/scs/linsys/external/amd/amd_1.c
113
- - vendor/scs/linsys/external/amd/amd_1.o
114
57
  - vendor/scs/linsys/external/amd/amd_2.c
115
- - vendor/scs/linsys/external/amd/amd_2.o
116
58
  - vendor/scs/linsys/external/amd/amd_aat.c
117
- - vendor/scs/linsys/external/amd/amd_aat.o
118
59
  - vendor/scs/linsys/external/amd/amd_control.c
119
- - vendor/scs/linsys/external/amd/amd_control.o
120
60
  - vendor/scs/linsys/external/amd/amd_defaults.c
121
- - vendor/scs/linsys/external/amd/amd_defaults.o
122
61
  - vendor/scs/linsys/external/amd/amd_dump.c
123
- - vendor/scs/linsys/external/amd/amd_dump.o
124
62
  - vendor/scs/linsys/external/amd/amd_global.c
125
- - vendor/scs/linsys/external/amd/amd_global.o
126
63
  - vendor/scs/linsys/external/amd/amd_info.c
127
- - vendor/scs/linsys/external/amd/amd_info.o
128
64
  - vendor/scs/linsys/external/amd/amd_internal.h
129
65
  - vendor/scs/linsys/external/amd/amd_order.c
130
- - vendor/scs/linsys/external/amd/amd_order.o
131
66
  - vendor/scs/linsys/external/amd/amd_post_tree.c
132
- - vendor/scs/linsys/external/amd/amd_post_tree.o
133
67
  - vendor/scs/linsys/external/amd/amd_postorder.c
134
- - vendor/scs/linsys/external/amd/amd_postorder.o
135
68
  - vendor/scs/linsys/external/amd/amd_preprocess.c
136
- - vendor/scs/linsys/external/amd/amd_preprocess.o
137
69
  - vendor/scs/linsys/external/amd/amd_valid.c
138
- - vendor/scs/linsys/external/amd/amd_valid.o
139
70
  - vendor/scs/linsys/external/amd/changes
140
71
  - vendor/scs/linsys/external/qdldl/LICENSE
141
72
  - vendor/scs/linsys/external/qdldl/README.md
142
73
  - vendor/scs/linsys/external/qdldl/changes
143
74
  - vendor/scs/linsys/external/qdldl/qdldl.c
144
75
  - vendor/scs/linsys/external/qdldl/qdldl.h
145
- - vendor/scs/linsys/external/qdldl/qdldl.o
146
76
  - vendor/scs/linsys/external/qdldl/qdldl_types.h
147
77
  - vendor/scs/linsys/gpu/gpu.c
148
78
  - vendor/scs/linsys/gpu/gpu.h
149
79
  - vendor/scs/linsys/gpu/indirect/private.c
150
80
  - vendor/scs/linsys/gpu/indirect/private.h
81
+ - vendor/scs/linsys/scs_matrix.c
82
+ - vendor/scs/linsys/scs_matrix.h
151
83
  - vendor/scs/scs.mk
152
84
  - vendor/scs/src/aa.c
153
- - vendor/scs/src/aa.o
154
85
  - vendor/scs/src/cones.c
155
- - vendor/scs/src/cones.o
156
86
  - vendor/scs/src/ctrlc.c
157
- - vendor/scs/src/ctrlc.o
158
87
  - vendor/scs/src/linalg.c
159
- - vendor/scs/src/linalg.o
160
88
  - vendor/scs/src/normalize.c
161
- - vendor/scs/src/normalize.o
162
89
  - vendor/scs/src/rw.c
163
- - vendor/scs/src/rw.o
164
90
  - vendor/scs/src/scs.c
165
- - vendor/scs/src/scs.o
166
91
  - vendor/scs/src/scs_version.c
167
- - vendor/scs/src/scs_version.o
168
92
  - vendor/scs/src/util.c
169
- - vendor/scs/src/util.o
170
- - vendor/scs/test/data/small_random_socp
171
93
  - vendor/scs/test/minunit.h
172
94
  - vendor/scs/test/problem_utils.h
95
+ - vendor/scs/test/problems/degenerate.h
96
+ - vendor/scs/test/problems/hs21_tiny_qp.h
97
+ - vendor/scs/test/problems/hs21_tiny_qp_rw.h
98
+ - vendor/scs/test/problems/infeasible_tiny_qp.h
99
+ - vendor/scs/test/problems/qafiro_tiny_qp.h
100
+ - vendor/scs/test/problems/random_prob
101
+ - vendor/scs/test/problems/random_prob.h
173
102
  - vendor/scs/test/problems/rob_gauss_cov_est.h
174
103
  - vendor/scs/test/problems/small_lp.h
175
- - vendor/scs/test/problems/small_random_socp.h
104
+ - vendor/scs/test/problems/small_qp.h
105
+ - vendor/scs/test/problems/test_validation.h
106
+ - vendor/scs/test/problems/unbounded_tiny_qp.h
176
107
  - vendor/scs/test/random_socp_prob.c
108
+ - vendor/scs/test/rng.h
177
109
  - vendor/scs/test/run_from_file.c
178
- - vendor/scs/test/run_tests
179
110
  - vendor/scs/test/run_tests.c
180
- homepage: https://github.com/ankane/scs
111
+ homepage: https://github.com/ankane/scs-ruby
181
112
  licenses:
182
113
  - MIT
183
114
  metadata: {}
184
- post_install_message:
115
+ post_install_message:
185
116
  rdoc_options: []
186
117
  require_paths:
187
118
  - lib
@@ -196,8 +127,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
127
  - !ruby/object:Gem::Version
197
128
  version: '0'
198
129
  requirements: []
199
- rubygems_version: 3.1.2
200
- signing_key:
130
+ rubygems_version: 3.3.3
131
+ signing_key:
201
132
  specification_version: 4
202
133
  summary: SCS - the splitting conic solver - for Ruby
203
134
  test_files: []
@@ -1,305 +0,0 @@
1
- /* contains routines common to direct and indirect sparse solvers */
2
- #include "amatrix.h"
3
-
4
- #include "linsys.h"
5
-
6
- #define MIN_SCALE (1e-4)
7
- #define MAX_SCALE (1e4)
8
- #define NUM_SCALE_PASSES 10 /* additional passes don't help much */
9
-
10
- scs_int SCS(copy_a_matrix)(ScsMatrix **dstp, const ScsMatrix *src) {
11
- scs_int Anz = src->p[src->n];
12
- ScsMatrix *A = (ScsMatrix *)scs_calloc(1, sizeof(ScsMatrix));
13
- if (!A) {
14
- return 0;
15
- }
16
- A->n = src->n;
17
- A->m = src->m;
18
- A->x = (scs_float *)scs_malloc(sizeof(scs_float) *
19
- Anz); /* A values, size: NNZ A */
20
- A->i = (scs_int *)scs_malloc(sizeof(scs_int) *
21
- Anz); /* A row index, size: NNZ A */
22
- A->p = (scs_int *)scs_malloc(sizeof(scs_int) *
23
- (src->n + 1)); /* A column pointer, size: n+1 */
24
- if (!A->x || !A->i || !A->p) {
25
- return 0;
26
- }
27
- memcpy(A->x, src->x, sizeof(scs_float) * Anz);
28
- memcpy(A->i, src->i, sizeof(scs_int) * Anz);
29
- memcpy(A->p, src->p, sizeof(scs_int) * (src->n + 1));
30
- *dstp = A;
31
- return 1;
32
- }
33
-
34
- scs_int SCS(validate_lin_sys)(const ScsMatrix *A) {
35
- scs_int i, r_max, Anz;
36
- if (!A->x || !A->i || !A->p) {
37
- scs_printf("data incompletely specified\n");
38
- return -1;
39
- }
40
- /* detects some errors in A col ptrs: */
41
- Anz = A->p[A->n];
42
- if (Anz > 0) {
43
- for (i = 0; i < A->n; ++i) {
44
- if (A->p[i] == A->p[i + 1]) {
45
- scs_printf(
46
- "WARN: A->p (column pointers) not strictly increasing, "
47
- "column %li empty\n",
48
- (long)i);
49
- } else if (A->p[i] > A->p[i + 1]) {
50
- scs_printf("ERROR: A->p (column pointers) decreasing\n");
51
- return -1;
52
- }
53
- }
54
- }
55
- if (((scs_float)Anz / A->m > A->n) || (Anz < 0)) {
56
- scs_printf("Anz (nonzeros in A) = %li, outside of valid range\n",
57
- (long)Anz);
58
- return -1;
59
- }
60
- r_max = 0;
61
- for (i = 0; i < Anz; ++i) {
62
- if (A->i[i] > r_max) {
63
- r_max = A->i[i];
64
- }
65
- }
66
- if (r_max > A->m - 1) {
67
- scs_printf("number of rows in A inconsistent with input dimension\n");
68
- return -1;
69
- }
70
- return 0;
71
- }
72
-
73
- void SCS(free_a_matrix)(ScsMatrix *A) {
74
- if (A) {
75
- scs_free(A->x);
76
- scs_free(A->i);
77
- scs_free(A->p);
78
- scs_free(A);
79
- }
80
- }
81
-
82
- #if EXTRA_VERBOSE > 0
83
- static void print_a_matrix(const ScsMatrix *A) {
84
- scs_int i, j;
85
- /* TODO: this is to prevent clogging stdout */
86
- if (A->p[A->n] < 2500) {
87
- scs_printf("\n");
88
- for (i = 0; i < A->n; ++i) {
89
- scs_printf("Col %li: ", (long)i);
90
- for (j = A->p[i]; j < A->p[i + 1]; j++) {
91
- scs_printf("A[%li,%li] = %4f, ", (long)A->i[j], (long)i, A->x[j]);
92
- }
93
- scs_printf("norm col = %4f\n",
94
- SCS(norm)(&(A->x[A->p[i]]), A->p[i + 1] - A->p[i]));
95
- }
96
- scs_printf("norm A = %4f\n", SCS(norm)(A->x, A->p[A->n]));
97
- }
98
- }
99
- #endif
100
-
101
- void SCS(_normalize_a)(ScsMatrix *A, const ScsSettings *stgs, const ScsCone *k,
102
- ScsScaling *scal) {
103
- scs_float *D = (scs_float *)scs_malloc(A->m * sizeof(scs_float));
104
- scs_float *E = (scs_float *)scs_malloc(A->n * sizeof(scs_float));
105
- scs_float *Dt = (scs_float *)scs_malloc(A->m * sizeof(scs_float));
106
- scs_float *Et = (scs_float *)scs_malloc(A->n * sizeof(scs_float));
107
- scs_float *nms = (scs_float *)scs_calloc(A->m, sizeof(scs_float));
108
- scs_int i, j, l, count, delta, *boundaries;
109
- scs_int num_boundaries = SCS(get_cone_boundaries)(k, &boundaries);
110
- scs_float wrk;
111
-
112
- #if EXTRA_VERBOSE > 0
113
- SCS(timer) normalize_timer;
114
- SCS(tic)(&normalize_timer);
115
- scs_printf("normalizing A\n");
116
- print_a_matrix(A);
117
- #endif
118
-
119
- for (l = 0; l < NUM_SCALE_PASSES; ++l) {
120
- memset(D, 0, A->m * sizeof(scs_float));
121
- memset(E, 0, A->n * sizeof(scs_float));
122
- /* calculate row norms */
123
- for (i = 0; i < A->n; ++i) {
124
- for (j = A->p[i]; j < A->p[i + 1]; ++j) {
125
- D[A->i[j]] = MAX(D[A->i[j]], ABS(A->x[j]));
126
- }
127
- }
128
- for (i = 0; i < A->m; ++i) {
129
- D[i] = SQRTF(D[i]);
130
- D[i] = D[i] < MIN_SCALE ? 1.0 : D[i];
131
- D[i] = D[i] > MAX_SCALE ? MAX_SCALE : D[i];
132
- }
133
- /* calculate col norms, E */
134
- for (i = 0; i < A->n; ++i) {
135
- E[i] = SCS(norm_inf)(&(A->x[A->p[i]]), A->p[i + 1] - A->p[i]);
136
- E[i] = SQRTF(E[i]);
137
- E[i] = E[i] < MIN_SCALE ? 1.0 : E[i];
138
- E[i] = E[i] > MAX_SCALE ? MAX_SCALE : E[i];
139
- }
140
-
141
- /* mean of D across each cone */
142
- count = boundaries[0];
143
- for (i = 1; i < num_boundaries; ++i) {
144
- wrk = 0;
145
- delta = boundaries[i];
146
- for (j = count; j < count + delta; ++j) {
147
- wrk += D[j];
148
- }
149
- wrk /= delta;
150
- for (j = count; j < count + delta; ++j) {
151
- D[j] = wrk;
152
- }
153
- count += delta;
154
- }
155
-
156
- /* scale the rows with D */
157
- for (i = 0; i < A->n; ++i) {
158
- for (j = A->p[i]; j < A->p[i + 1]; ++j) {
159
- A->x[j] /= D[A->i[j]];
160
- }
161
- }
162
-
163
- /* scale the cols with E */
164
- for (i = 0; i < A->n; ++i) {
165
- SCS(scale_array)(&(A->x[A->p[i]]), 1.0 / E[i], A->p[i + 1] - A->p[i]);
166
- }
167
-
168
- /* Accumulate scaling */
169
- for (i = 0; i < A->m; ++i) {
170
- Dt[i] = (l == 0) ? D[i] : Dt[i] * D[i];
171
- }
172
- for (i = 0; i < A->n; ++i) {
173
- Et[i] = (l == 0) ? E[i] : Et[i] * E[i];
174
- }
175
- }
176
- scs_free(boundaries);
177
- scs_free(D);
178
- scs_free(E);
179
-
180
- /* calculate mean of row norms of A */
181
- for (i = 0; i < A->n; ++i) {
182
- for (j = A->p[i]; j < A->p[i + 1]; ++j) {
183
- wrk = A->x[j];
184
- nms[A->i[j]] += wrk * wrk;
185
- }
186
- }
187
- scal->mean_norm_row_a = 0.0;
188
- for (i = 0; i < A->m; ++i) {
189
- scal->mean_norm_row_a += SQRTF(nms[i]) / A->m;
190
- }
191
- scs_free(nms);
192
-
193
- /* calculate mean of col norms of A */
194
- scal->mean_norm_col_a = 0.0;
195
- for (i = 0; i < A->n; ++i) {
196
- scal->mean_norm_col_a +=
197
- SCS(norm)(&(A->x[A->p[i]]), A->p[i + 1] - A->p[i]) / A->n;
198
- }
199
-
200
- /* scale up by d->SCALE if not equal to 1 */
201
- if (stgs->scale != 1) {
202
- SCS(scale_array)(A->x, stgs->scale, A->p[A->n]);
203
- }
204
-
205
- scal->D = Dt;
206
- scal->E = Et;
207
-
208
- #if EXTRA_VERBOSE > 0
209
- scs_printf("finished normalizing A, time: %1.2es\n",
210
- SCS(tocq)(&normalize_timer) / 1e3);
211
- print_a_matrix(A);
212
- #endif
213
- }
214
-
215
- void SCS(_un_normalize_a)(ScsMatrix *A, const ScsSettings *stgs,
216
- const ScsScaling *scal) {
217
- scs_int i, j;
218
- scs_float *D = scal->D;
219
- scs_float *E = scal->E;
220
- for (i = 0; i < A->n; ++i) {
221
- SCS(scale_array)
222
- (&(A->x[A->p[i]]), E[i] / stgs->scale, A->p[i + 1] - A->p[i]);
223
- }
224
- for (i = 0; i < A->n; ++i) {
225
- for (j = A->p[i]; j < A->p[i + 1]; ++j) {
226
- A->x[j] *= D[A->i[j]];
227
- }
228
- }
229
- }
230
-
231
- void SCS(_accum_by_atrans)(scs_int n, scs_float *Ax, scs_int *Ai, scs_int *Ap,
232
- const scs_float *x, scs_float *y) {
233
- /* y += A'*x
234
- A in column compressed format
235
- parallelizes over columns (rows of A')
236
- */
237
- scs_int p, j;
238
- scs_int c1, c2;
239
- scs_float yj;
240
- #if EXTRA_VERBOSE > 0
241
- SCS(timer) mult_by_atrans_timer;
242
- SCS(tic)(&mult_by_atrans_timer);
243
- #endif
244
- #ifdef _OPENMP
245
- #pragma omp parallel for private(p, c1, c2, yj)
246
- #endif
247
- for (j = 0; j < n; j++) {
248
- yj = y[j];
249
- c1 = Ap[j];
250
- c2 = Ap[j + 1];
251
- for (p = c1; p < c2; p++) {
252
- yj += Ax[p] * x[Ai[p]];
253
- }
254
- y[j] = yj;
255
- }
256
- #if EXTRA_VERBOSE > 0
257
- scs_printf("mult By A trans time: %1.2es\n",
258
- SCS(tocq)(&mult_by_atrans_timer) / 1e3);
259
- #endif
260
- }
261
-
262
- scs_float SCS(cumsum)(scs_int *p, scs_int *c, scs_int n) {
263
- scs_int i, nz = 0;
264
- scs_float nz2 = 0;
265
- if (!p || !c) {
266
- return (-1);
267
- } /* check inputs */
268
- for (i = 0; i < n; i++) {
269
- p[i] = nz;
270
- nz += c[i];
271
- nz2 += c[i]; /* also in scs_float to avoid scs_int overflow */
272
- c[i] = p[i]; /* also copy p[0..n-1] back into c[0..n-1]*/
273
- }
274
- p[n] = nz;
275
- return nz2; /* return sum (c [0..n-1]) */
276
- }
277
-
278
- void SCS(_accum_by_a)(scs_int n, scs_float *Ax, scs_int *Ai, scs_int *Ap,
279
- const scs_float *x, scs_float *y) {
280
- /*y += A*x
281
- A in column compressed format
282
- this parallelizes over columns and uses
283
- pragma atomic to prevent concurrent writes to y
284
- */
285
- scs_int p, j;
286
- scs_int c1, c2;
287
- scs_float xj;
288
- #if EXTRA_VERBOSE > 0
289
- SCS(timer) mult_by_a_timer;
290
- SCS(tic)(&mult_by_a_timer);
291
- #endif
292
- /*#pragma omp parallel for private(p,c1,c2,xj) */
293
- for (j = 0; j < n; j++) {
294
- xj = x[j];
295
- c1 = Ap[j];
296
- c2 = Ap[j + 1];
297
- for (p = c1; p < c2; p++) {
298
- /*#pragma omp atomic */
299
- y[Ai[p]] += Ax[p] * xj;
300
- }
301
- }
302
- #if EXTRA_VERBOSE > 0
303
- scs_printf("mult By A time: %1.2es\n", SCS(tocq)(&mult_by_a_timer) / 1e3);
304
- #endif
305
- }
@@ -1,36 +0,0 @@
1
- #ifndef AMATRIX_H_GUARD
2
- #define AMATRIX_H_GUARD
3
-
4
- #ifdef __cplusplus
5
- extern "C" {
6
- #endif
7
-
8
- #include "glbopts.h"
9
- #include "linalg.h"
10
- #include "linsys.h"
11
- #include "scs.h"
12
- #include "util.h"
13
-
14
- /* this struct defines the data matrix A */
15
- struct SCS_A_DATA_MATRIX {
16
- /* A is supplied in column compressed format */
17
- scs_float *x; /* A values, size: NNZ A */
18
- scs_int *i; /* A row index, size: NNZ A */
19
- scs_int *p; /* A column pointer, size: n+1 */
20
- scs_int m, n; /* m rows, n cols */
21
- };
22
-
23
- void SCS(_accum_by_atrans)(scs_int n, scs_float *Ax, scs_int *Ai, scs_int *Ap,
24
- const scs_float *x, scs_float *y);
25
- void SCS(_accum_by_a)(scs_int n, scs_float *Ax, scs_int *Ai, scs_int *Ap,
26
- const scs_float *x, scs_float *y);
27
- void SCS(_normalize_a)(ScsMatrix *A, const ScsSettings *stgs, const ScsCone *k,
28
- ScsScaling *scal);
29
- void SCS(_un_normalize_a)(ScsMatrix *A, const ScsSettings *stgs,
30
- const ScsScaling *scal);
31
- scs_float SCS(cumsum)(scs_int *p, scs_int *c, scs_int n);
32
-
33
- #ifdef __cplusplus
34
- }
35
- #endif
36
- #endif
Binary file
Binary file
Binary file
Binary file
data/vendor/scs/src/aa.o DELETED
Binary file
Binary file
Binary file
Binary file
Binary file
data/vendor/scs/src/rw.o DELETED
Binary file
data/vendor/scs/src/scs.o DELETED
Binary file
Binary file
Binary file
Binary file
@@ -1,33 +0,0 @@
1
- #include "rw.h"
2
- #include "scs.h"
3
- #include "util.h"
4
-
5
- #define OPT (1.530897)
6
-
7
- static const char *small_random_socp(void) {
8
- ScsData *d;
9
- ScsCone *k;
10
- ScsSolution *sol;
11
- ScsInfo info = {0};
12
- scs_int exitflag, success;
13
- scs_float perr, derr;
14
- const char *filename = "test/data/small_random_socp";
15
-
16
- SCS(read_data)(filename, &d, &k);
17
- sol = scs_calloc(1, sizeof(ScsSolution));
18
- exitflag = scs(d, k, sol, &info);
19
-
20
- perr = SCS(dot)(d->c, sol->x, d->n) - OPT;
21
- derr = -SCS(dot)(d->b, sol->y, d->m) - OPT;
22
-
23
- scs_printf("primal obj error %4e\n", perr);
24
- scs_printf("dual obj error %4e\n", derr);
25
-
26
- success = ABS(perr) < 1e-4 && ABS(derr) < 1e-4 && exitflag == SCS_SOLVED;
27
-
28
- SCS(free_data)(d, k);
29
- SCS(free_sol)(sol);
30
- mu_assert("small_random_socp: SCS failed to produce outputflag SCS_SOLVED",
31
- success);
32
- return 0;
33
- }
@@ -1,2 +0,0 @@
1
- out/run_tests_indirect
2
- out/run_tests_direct