scs 0.3.0 → 0.4.0

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 (92) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/README.md +42 -13
  4. data/lib/scs/ffi.rb +1 -7
  5. data/lib/scs/matrix.rb +72 -0
  6. data/lib/scs/solver.rb +19 -26
  7. data/lib/scs/version.rb +1 -1
  8. data/lib/scs.rb +1 -0
  9. data/vendor/scs/CITATION.cff +1 -1
  10. data/vendor/scs/CMakeLists.txt +55 -7
  11. data/vendor/scs/Makefile +9 -9
  12. data/vendor/scs/README.md +4 -1
  13. data/vendor/scs/include/aa.h +1 -1
  14. data/vendor/scs/include/cones.h +17 -12
  15. data/vendor/scs/include/glbopts.h +27 -66
  16. data/vendor/scs/include/linalg.h +2 -1
  17. data/vendor/scs/include/linsys.h +13 -13
  18. data/vendor/scs/include/normalize.h +7 -5
  19. data/vendor/scs/include/rw.h +3 -3
  20. data/vendor/scs/include/scs.h +85 -106
  21. data/vendor/scs/include/scs_types.h +34 -0
  22. data/vendor/scs/include/scs_work.h +80 -0
  23. data/vendor/scs/include/util.h +3 -1
  24. data/vendor/scs/linsys/cpu/direct/private.c +86 -73
  25. data/vendor/scs/linsys/cpu/direct/private.h +2 -2
  26. data/vendor/scs/linsys/cpu/indirect/private.c +42 -33
  27. data/vendor/scs/linsys/cpu/indirect/private.h +1 -2
  28. data/vendor/scs/linsys/csparse.c +3 -3
  29. data/vendor/scs/linsys/external/amd/LICENSE.txt +0 -897
  30. data/vendor/scs/linsys/external/amd/SuiteSparse_config.c +9 -7
  31. data/vendor/scs/linsys/external/amd/SuiteSparse_config.h +1 -1
  32. data/vendor/scs/linsys/external/amd/amd_order.c +5 -5
  33. data/vendor/scs/linsys/gpu/gpu.h +8 -11
  34. data/vendor/scs/linsys/gpu/indirect/private.c +72 -49
  35. data/vendor/scs/linsys/gpu/indirect/private.h +14 -13
  36. data/vendor/scs/linsys/scs_matrix.c +55 -104
  37. data/vendor/scs/linsys/scs_matrix.h +5 -4
  38. data/vendor/scs/scs.mk +1 -5
  39. data/vendor/scs/src/aa.c +13 -8
  40. data/vendor/scs/src/cones.c +197 -108
  41. data/vendor/scs/src/linalg.c +25 -0
  42. data/vendor/scs/src/normalize.c +75 -26
  43. data/vendor/scs/src/rw.c +74 -30
  44. data/vendor/scs/src/scs.c +300 -264
  45. data/vendor/scs/src/scs_version.c +8 -6
  46. data/vendor/scs/src/util.c +27 -13
  47. data/vendor/scs/test/minunit.h +6 -1
  48. data/vendor/scs/test/problem_utils.h +28 -35
  49. data/vendor/scs/test/problems/degenerate.h +2 -1
  50. data/vendor/scs/test/problems/hs21_tiny_qp.h +2 -1
  51. data/vendor/scs/test/problems/hs21_tiny_qp_rw.h +6 -2
  52. data/vendor/scs/test/problems/infeasible_tiny_qp.h +2 -1
  53. data/vendor/scs/test/problems/qafiro_tiny_qp.h +5 -4
  54. data/vendor/scs/test/problems/random_prob.h +6 -2
  55. data/vendor/scs/test/problems/rob_gauss_cov_est.h +9 -2
  56. data/vendor/scs/test/problems/small_lp.h +7 -2
  57. data/vendor/scs/test/problems/small_qp.h +387 -0
  58. data/vendor/scs/test/problems/{test_fails.h → test_validation.h} +7 -4
  59. data/vendor/scs/test/problems/unbounded_tiny_qp.h +4 -4
  60. data/vendor/scs/test/random_socp_prob.c +4 -2
  61. data/vendor/scs/test/run_from_file.c +16 -4
  62. data/vendor/scs/test/run_tests.c +23 -14
  63. metadata +10 -35
  64. data/vendor/scs/linsys/cpu/direct/private.o +0 -0
  65. data/vendor/scs/linsys/cpu/indirect/private.o +0 -0
  66. data/vendor/scs/linsys/csparse.o +0 -0
  67. data/vendor/scs/linsys/external/amd/SuiteSparse_config.o +0 -0
  68. data/vendor/scs/linsys/external/amd/amd_1.o +0 -0
  69. data/vendor/scs/linsys/external/amd/amd_2.o +0 -0
  70. data/vendor/scs/linsys/external/amd/amd_aat.o +0 -0
  71. data/vendor/scs/linsys/external/amd/amd_control.o +0 -0
  72. data/vendor/scs/linsys/external/amd/amd_defaults.o +0 -0
  73. data/vendor/scs/linsys/external/amd/amd_dump.o +0 -0
  74. data/vendor/scs/linsys/external/amd/amd_global.o +0 -0
  75. data/vendor/scs/linsys/external/amd/amd_info.o +0 -0
  76. data/vendor/scs/linsys/external/amd/amd_order.o +0 -0
  77. data/vendor/scs/linsys/external/amd/amd_post_tree.o +0 -0
  78. data/vendor/scs/linsys/external/amd/amd_postorder.o +0 -0
  79. data/vendor/scs/linsys/external/amd/amd_preprocess.o +0 -0
  80. data/vendor/scs/linsys/external/amd/amd_valid.o +0 -0
  81. data/vendor/scs/linsys/external/qdldl/qdldl.o +0 -0
  82. data/vendor/scs/linsys/scs_matrix.o +0 -0
  83. data/vendor/scs/src/aa.o +0 -0
  84. data/vendor/scs/src/cones.o +0 -0
  85. data/vendor/scs/src/ctrlc.o +0 -0
  86. data/vendor/scs/src/linalg.o +0 -0
  87. data/vendor/scs/src/normalize.o +0 -0
  88. data/vendor/scs/src/rw.o +0 -0
  89. data/vendor/scs/src/scs.o +0 -0
  90. data/vendor/scs/src/scs_indir.o +0 -0
  91. data/vendor/scs/src/scs_version.o +0 -0
  92. data/vendor/scs/src/util.o +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9f5ea6b779ddcbadb769df873b68fa590378cb01aa8770fe3e4efebf471f487
4
- data.tar.gz: 4e218fccbf2270d438d57f9d7efbd793838a250845d3aae09a1229ca250595bc
3
+ metadata.gz: 2afa78c52786f5325f64a76edb263b4d30dabab7b15a9415375ed57af861669c
4
+ data.tar.gz: ae105845b96b30fab4a24bdf3eb2c1f80db7b12d635716ac3c4acfdb17930783
5
5
  SHA512:
6
- metadata.gz: b58f4154cd9ab36ed7fc152bbe3ccaa9effc9c820b689503289ab31ccf5dbb3304eb6fb6254b5dbc254f621e40c14740297a5e5c30c33e821f905ec50f9ddf3c
7
- data.tar.gz: e4f8d67c93889ccdbd5008e97cf4e2875f52dd4209c504eb16bac41b90c942f25cd7312e523fffaed0b35e1c8c6187dd9f858f3c114c73a047ea8ab619525bb8
6
+ metadata.gz: b8bc74c496d1661b5f14e6da33c79987502d4c320c6789e4cd2d7a4bf118a8800978dc0cd0989f2f9d38978a9d27e14c37d47f8b6bb63ced36af97fee753f5e0
7
+ data.tar.gz: 5282b6cd3e7f7ed98423ef61eabb1275ce17bdb7b497fab9f7537c53cf7be154d3f1029a170c2c6562bb35780ebceca075e8ca12cd81af163bb7824bb2e91a27
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## 0.4.0 (2022-07-06)
2
+
3
+ - Updated SCS to 3.2.0
4
+ - Added `Matrix` class
5
+ - Dropped support for Ruby < 2.7
6
+
7
+ ## 0.3.2 (2022-01-17)
8
+
9
+ - Updated SCS to 3.1.1
10
+
11
+ ## 0.3.1 (2021-10-08)
12
+
13
+ - Fixed installation on Linux
14
+
1
15
  ## 0.3.0 (2021-10-05)
2
16
 
3
17
  - Updated SCS to 3.0.0
data/README.md CHANGED
@@ -1,28 +1,33 @@
1
- # SCS
1
+ # SCS Ruby
2
2
 
3
3
  [SCS](https://github.com/cvxgrp/scs) - the splitting conic solver - for Ruby
4
4
 
5
5
  :fire: Supports many different [problem types](https://www.cvxpy.org/tutorial/advanced/index.html#choosing-a-solver)
6
6
 
7
- [![Build Status](https://github.com/ankane/scs/workflows/build/badge.svg?branch=master)](https://github.com/ankane/scs/actions)
7
+ [![Build Status](https://github.com/ankane/scs-ruby/workflows/build/badge.svg?branch=master)](https://github.com/ankane/scs-ruby/actions)
8
8
 
9
9
  ## Installation
10
10
 
11
11
  Add this line to your application’s Gemfile:
12
12
 
13
13
  ```ruby
14
- gem 'scs'
14
+ gem "scs"
15
15
  ```
16
16
 
17
17
  If installation fails, you may need to install [dependencies](#dependencies).
18
18
 
19
19
  ## Getting Started
20
20
 
21
- Prep the problem
21
+ Prep the problem, like [this one](https://www.cvxgrp.org/scs/examples/python/basic_qp.html)
22
22
 
23
23
  ```ruby
24
- data = {a: [[1], [-1]], b: [1, 0], c: [-1]}
25
- cone = {q: [], l: 2}
24
+ data = {
25
+ p: SCS::Matrix.from_dense([[3, -1], [-1, 2]]),
26
+ a: SCS::Matrix.from_dense([[-1, 1], [1, 0], [0, 1]]),
27
+ b: [-1, 0.3, -0.5],
28
+ c: [-1, -1]
29
+ }
30
+ cone = {z: 1, l: 2}
26
31
  ```
27
32
 
28
33
  And solve it
@@ -32,12 +37,36 @@ solver = SCS::Solver.new
32
37
  solver.solve(data, cone)
33
38
  ```
34
39
 
40
+ ## Data
41
+
42
+ Matrices can be a sparse matrix
43
+
44
+ ```ruby
45
+ a = SCS::Matrix.new(3, 2)
46
+ a[0, 0] = 1
47
+ a[1, 0] = 2
48
+ # or
49
+ SCS::Matrix.from_dense([[1, 0], [2, 0], [0, 0]])
50
+ ```
51
+
52
+ Arrays can be Ruby arrays
53
+
54
+ ```ruby
55
+ [1, 2, 3]
56
+ ```
57
+
58
+ Or Numo arrays
59
+
60
+ ```ruby
61
+ Numo::NArray.cast([1, 2, 3])
62
+ ```
63
+
35
64
  ## Settings
36
65
 
37
66
  Default values shown
38
67
 
39
68
  ```ruby
40
- solver.solve(data, cone, {
69
+ solver.solve(data, cone,
41
70
  normalize: true, # heuristic data rescaling
42
71
  scale: 0.1, # if normalized, rescales by this factor
43
72
  adaptive_scale: true, # heuristically adapt dual scale through the solve
@@ -54,7 +83,7 @@ solver.solve(data, cone, {
54
83
  acceleration_interval: 10, # iterations to run Anderson acceleration
55
84
  write_data_filename: nil, # filename to write data if set
56
85
  log_csv_filename: nil # write csv logs of various quantities
57
- })
86
+ )
58
87
  ```
59
88
 
60
89
  ## Direct vs Indirect
@@ -81,22 +110,22 @@ On Heroku, use the [heroku-apt-buildpack](https://github.com/heroku/heroku-build
81
110
 
82
111
  ## History
83
112
 
84
- View the [changelog](https://github.com/ankane/scs/blob/master/CHANGELOG.md)
113
+ View the [changelog](https://github.com/ankane/scs-ruby/blob/master/CHANGELOG.md)
85
114
 
86
115
  ## Contributing
87
116
 
88
117
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
89
118
 
90
- - [Report bugs](https://github.com/ankane/scs/issues)
91
- - Fix bugs and [submit pull requests](https://github.com/ankane/scs/pulls)
119
+ - [Report bugs](https://github.com/ankane/scs-ruby/issues)
120
+ - Fix bugs and [submit pull requests](https://github.com/ankane/scs-ruby/pulls)
92
121
  - Write, clarify, or fix documentation
93
122
  - Suggest or add new features
94
123
 
95
124
  To get started with development:
96
125
 
97
126
  ```sh
98
- git clone --recursive https://github.com/ankane/scs.git
99
- cd scs
127
+ git clone --recursive https://github.com/ankane/scs-ruby.git
128
+ cd scs-ruby
100
129
  bundle install
101
130
  bundle exec rake compile
102
131
  bundle exec rake test
data/lib/scs/ffi.rb CHANGED
@@ -27,13 +27,6 @@ module SCS
27
27
 
28
28
  dlload File.expand_path("../../vendor/scs/out/#{lib_name}.#{ext}", __dir__)
29
29
 
30
- extern "size_t scs_sizeof_int(void)"
31
- extern "size_t scs_sizeof_float(void)"
32
-
33
- # TODO support other sizes
34
- raise Error, "Unsupported int size" if scs_sizeof_int != 4
35
- raise Error, "Unsupported float size" if scs_sizeof_float != 8
36
-
37
30
  typealias "scs_float", "double"
38
31
  typealias "scs_int", "int"
39
32
 
@@ -71,6 +64,7 @@ module SCS
71
64
  m::Info = struct [
72
65
  "scs_int iter",
73
66
  "char status[128]",
67
+ "char lin_sys_solver[128]",
74
68
  "scs_int status_val",
75
69
  "scs_int scale_updates",
76
70
  "scs_float pobj",
data/lib/scs/matrix.rb ADDED
@@ -0,0 +1,72 @@
1
+ module SCS
2
+ class Matrix
3
+ attr_reader :m, :n
4
+
5
+ def initialize(m, n)
6
+ @m = m
7
+ @n = n
8
+ @data = {}
9
+ end
10
+
11
+ def []=(row_index, column_index, value)
12
+ raise IndexError, "row index out of bounds" if row_index < 0 || row_index >= @m
13
+ raise IndexError, "column index out of bounds" if column_index < 0 || column_index >= @n
14
+ # dictionary of keys, optimized for converting to CSC
15
+ # TODO try COO for performance
16
+ if value == 0
17
+ (@data[column_index] ||= {}).delete(row_index)
18
+ else
19
+ (@data[column_index] ||= {})[row_index] = value
20
+ end
21
+ end
22
+
23
+ def to_csc
24
+ cx = []
25
+ ci = []
26
+ cp = []
27
+
28
+ # CSC format
29
+ # https://www.gormanalysis.com/blog/sparse-matrix-storage-formats/
30
+ cp << 0
31
+ n.times do |j|
32
+ (@data[j] || {}).sort_by { |k, v| k }.each do |k, v|
33
+ cx << v
34
+ ci << k
35
+ end
36
+ # cumulative column values
37
+ cp << cx.size
38
+ end
39
+
40
+ {
41
+ start: cp,
42
+ index: ci,
43
+ value: cx
44
+ }
45
+ end
46
+
47
+ # private, for tests
48
+ def nnz
49
+ @data.sum { |_, v| v.count }
50
+ end
51
+
52
+ def initialize_copy(other)
53
+ super
54
+ @data = @data.transform_values(&:dup)
55
+ end
56
+
57
+ def self.from_dense(data)
58
+ data = data.to_a
59
+ m = data.size
60
+ n = m > 0 ? data.first.size : 0
61
+
62
+ mtx = Matrix.new(m, n)
63
+ data.each_with_index do |row, i|
64
+ raise ArgumentError, "row has different number of columns" if row.size != n
65
+ row.each_with_index do |v, j|
66
+ mtx[i, j] = v if v != 0
67
+ end
68
+ end
69
+ mtx
70
+ end
71
+ end
72
+ end
data/lib/scs/solver.rb CHANGED
@@ -73,42 +73,35 @@ module SCS
73
73
  char_ptr[0, idx].map(&:chr).join
74
74
  end
75
75
 
76
- # TODO add support sparse matrices
77
76
  def csc_matrix(mtx, upper: false)
78
- mtx = mtx.to_a
79
-
80
- m, n = shape(mtx)
81
-
82
- cx = []
83
- ci = []
84
- cp = []
85
-
86
- # CSC format
87
- # https://www.gormanalysis.com/blog/sparse-matrix-storage-formats/
88
- cp << 0
89
- n.times do |j|
90
- mtx.each_with_index do |row, i|
91
- if row[j] != 0 && (!upper || i <= j)
92
- cx << row[j]
93
- ci << i
77
+ mtx = Matrix.from_dense(mtx) unless mtx.is_a?(Matrix)
78
+
79
+ if upper
80
+ # TODO improve performance
81
+ mtx = mtx.dup
82
+ mtx.m.times do |i|
83
+ mtx.n.times do |j|
84
+ mtx[i, j] = 0 if i > j
94
85
  end
95
86
  end
96
- # cumulative column values
97
- cp << cx.size
98
87
  end
99
88
 
89
+ csc = mtx.to_csc
90
+
100
91
  # construct matrix
101
92
  matrix = ffi::Matrix.malloc
102
- matrix.x = float_array(cx)
103
- matrix.i = int_array(ci)
104
- matrix.p = int_array(cp)
105
- matrix.m = m
106
- matrix.n = n
93
+ matrix.x = float_array(csc[:value])
94
+ matrix.i = int_array(csc[:index])
95
+ matrix.p = int_array(csc[:start])
96
+ matrix.m = mtx.m
97
+ matrix.n = mtx.n
107
98
  matrix
108
99
  end
109
100
 
110
101
  def shape(a)
111
- if defined?(Matrix) && a.is_a?(Matrix)
102
+ if a.is_a?(Matrix)
103
+ [a.m, a.n]
104
+ elsif defined?(::Matrix) && a.is_a?(::Matrix)
112
105
  [a.row_count, a.column_count]
113
106
  elsif defined?(Numo::NArray) && a.is_a?(Numo::NArray)
114
107
  a.shape
@@ -126,7 +119,7 @@ module SCS
126
119
 
127
120
  if data[:p]
128
121
  raise ArgumentError, "Bad p shape" if shape(data[:p]) != [n, n]
129
- cdata.p = csc_matrix(data[:p])
122
+ cdata.p = csc_matrix(data[:p], upper: true)
130
123
  end
131
124
 
132
125
  raise ArgumentError, "Bad b size" if data[:b].to_a.size != m
data/lib/scs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module SCS
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/scs.rb CHANGED
@@ -2,6 +2,7 @@
2
2
  require "fiddle/import"
3
3
 
4
4
  # modules
5
+ require "scs/matrix"
5
6
  require "scs/solver"
6
7
  require "scs/version"
7
8
 
@@ -10,7 +10,7 @@ authors:
10
10
  - family-names: "Boyd"
11
11
  given-names: "Stephen"
12
12
  title: "SCS: Spltting Conic Solver"
13
- version: 3.0.0
13
+ version: 3.2.0
14
14
  date-released: 2021
15
15
  url: "https://github.com/cvxgrp/scs"
16
16
 
@@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.5)
5
5
 
6
6
  project(scs
7
7
  LANGUAGES C
8
- VERSION 2.1.4)
8
+ VERSION 3.2.0)
9
9
 
10
10
  # Defines the CMAKE_INSTALL_LIBDIR, CMAKE_INSTALL_BINDIR and many other useful macros.
11
11
  # See https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html
@@ -88,6 +88,10 @@ if(BUILD_TESTING)
88
88
  enable_testing()
89
89
  endif()
90
90
 
91
+ # Add uninstall target
92
+ # After 'make install' can run 'make uninstall' to remove.
93
+ include(AddUninstallTarget)
94
+
91
95
  ### Some variables useful for sampling the building process
92
96
  # Note that the GPU profile is not compiled.
93
97
  set(LINSYS linsys)
@@ -95,6 +99,46 @@ set(DIRSRC ${LINSYS}/cpu/direct)
95
99
  set(INDIRSRC ${LINSYS}/cpu/indirect)
96
100
  set(EXTERNAL ${LINSYS}/external)
97
101
 
102
+ # Options
103
+ # ----------------------------------------------
104
+ # Use floats instead of doubles
105
+ option(SFLOAT "Use single precision floats rather than doubles" OFF)
106
+ message(STATUS "Single precision floats (32bit) are ${SFLOAT}")
107
+
108
+ # Use long integers for indexing
109
+ option(DLONG "Use long integers (64bit) for indexing" OFF)
110
+ message(STATUS "Long integers (64bit) are ${DLONG}")
111
+
112
+
113
+ set(COMPILER_OPTS "-DUSE_LAPACK -DCTRLC")
114
+
115
+ # Primitive types
116
+ if(SFLOAT)
117
+ set(SCS_FLOAT_TYPE "float")
118
+ set(COMPILER_OPTS "-DSFLOAT ${COMPILER_OPTS}")
119
+ else()
120
+ set(SCS_FLOAT_TYPE "double")
121
+ endif()
122
+
123
+ if(DLONG)
124
+ set(SCS_INT_TYPE "long long")
125
+ set(COMPILER_OPTS "-DDLONG ${COMPILER_OPTS}")
126
+ else()
127
+ set(SCS_INT_TYPE "int")
128
+ endif()
129
+
130
+ message(STATUS "COMPILER_OPTS = ${COMPILER_OPTS}")
131
+
132
+ # TODO this is a hack that overwrites the scs_types.h file, we should
133
+ # find a way to do this that doesn't pollute the master directory.
134
+ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/scs_types.h.in
135
+ ${CMAKE_CURRENT_SOURCE_DIR}/include/scs_types.h
136
+ NEWLINE_STYLE LF)
137
+
138
+ # Public headers
139
+ set(${PROJECT_NAME}_PUBLIC_HDR
140
+ include/scs_types.h
141
+ include/scs.h)
98
142
 
99
143
  # Common source files
100
144
  set(${PROJECT_NAME}_SRC
@@ -122,6 +166,8 @@ set(${PROJECT_NAME}_HDR
122
166
  include/rw.h
123
167
  include/scs.h
124
168
  include/scs_blas.h
169
+ include/scs_types.h
170
+ include/scs_work.h
125
171
  include/util.h
126
172
  ${LINSYS}/csparse.h
127
173
  ${LINSYS}/scs_matrix.h)
@@ -162,7 +208,7 @@ target_include_directories(${${PROJECT_NAME}_DIRECT} PUBLIC
162
208
  "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
163
209
 
164
210
  # Compiled with blas and lapack, can solve LPs, SOCPs, SDPs, ECPs, and PCPs
165
- target_compile_definitions(${${PROJECT_NAME}_DIRECT} PRIVATE -DUSE_LAPACK -DCOPYAMATRIX -DCTRLC)
211
+ target_compile_definitions(${${PROJECT_NAME}_DIRECT} PRIVATE ${COMPILER_OPTS})
166
212
 
167
213
  # The library depends on math (m) blas and lapack
168
214
  target_link_libraries(${${PROJECT_NAME}_DIRECT} PRIVATE
@@ -173,7 +219,7 @@ target_link_libraries(${${PROJECT_NAME}_DIRECT} PRIVATE
173
219
  # Set some properties
174
220
  set_target_properties(${${PROJECT_NAME}_DIRECT} PROPERTIES
175
221
  VERSION ${scs_VERSION}
176
- PUBLIC_HEADER "${${PROJECT_NAME}_HDR}")
222
+ PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HDR}")
177
223
 
178
224
  add_library(scs::${${PROJECT_NAME}_DIRECT} ALIAS ${${PROJECT_NAME}_DIRECT})
179
225
 
@@ -209,7 +255,7 @@ target_include_directories(${${PROJECT_NAME}_INDIRECT} PUBLIC
209
255
  "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/scs>")
210
256
 
211
257
  # Compiled with blas and lapack, can solve LPs, SOCPs, SDPs, ECPs, and PCPs
212
- target_compile_definitions(${${PROJECT_NAME}_INDIRECT} PRIVATE -DUSE_LAPACK -DCOPYAMATRIX -DCTRLC -DINDIRECT)
258
+ target_compile_definitions(${${PROJECT_NAME}_INDIRECT} PRIVATE ${COMPILER_OPTS} -DINDIRECT)
213
259
 
214
260
  # The library depends on math (m) blas and lapack
215
261
  target_link_libraries(${${PROJECT_NAME}_INDIRECT} PUBLIC
@@ -220,7 +266,7 @@ target_link_libraries(${${PROJECT_NAME}_INDIRECT} PUBLIC
220
266
  # Set some properties
221
267
  set_target_properties(${${PROJECT_NAME}_INDIRECT} PROPERTIES
222
268
  VERSION ${scs_VERSION}
223
- PUBLIC_HEADER "${${${PROJECT_NAME}_INDIRECT}_HDR}")
269
+ PUBLIC_HEADER "${${PROJECT_NAME}_PUBLIC_HDR}")
224
270
 
225
271
  add_library(scs::${${PROJECT_NAME}_INDIRECT} ALIAS ${${PROJECT_NAME}_INDIRECT})
226
272
 
@@ -250,20 +296,22 @@ install_basic_package_files(${PROJECT_NAME}
250
296
  ### Add the tests
251
297
  if(BUILD_TESTING)
252
298
  add_executable(run_tests_direct test/run_tests.c)
299
+ target_compile_definitions(run_tests_direct PRIVATE ${COMPILER_OPTS})
253
300
  target_link_libraries(run_tests_direct PRIVATE
254
301
  scs::scsdir)
255
302
  target_include_directories(run_tests_direct PRIVATE
256
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>")
303
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>" )
257
304
 
258
305
  add_test(NAME run_tests_direct
259
306
  COMMAND run_tests_direct
260
307
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
261
308
 
262
309
  add_executable(run_tests_indirect test/run_tests.c)
310
+ target_compile_definitions(run_tests_indirect PRIVATE ${COMPILER_OPTS})
263
311
  target_link_libraries(run_tests_indirect PRIVATE
264
312
  scs::scsindir)
265
313
  target_include_directories(run_tests_indirect PRIVATE
266
- "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>")
314
+ "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/test;${CMAKE_CURRENT_SOURCE_DIR}/include;${CMAKE_CURRENT_SOURCE_DIR}/${LINSYS}>" )
267
315
 
268
316
  add_test(NAME run_tests_indirect
269
317
  COMMAND run_tests_indirect
data/vendor/scs/Makefile CHANGED
@@ -39,13 +39,13 @@ $(SCS_INDIR_O): src/scs.c $(INC_FILES)
39
39
  %.o : src/%.c
40
40
  $(CC) $(CFLAGS) -c $< -o $@
41
41
 
42
- src/util.o : src/util.c include/util.h include/glbopts.h
43
- src/cones.o : src/cones.c include/cones.h include/scs_blas.h
44
- src/aa.o : src/aa.c include/aa.h include/scs_blas.h
45
- src/rw.o : src/rw.c include/rw.h
46
- src/linalg.o: src/linalg.c include/linalg.h
47
- src/ctrl.o : src/ctrl.c include/ctrl.h
48
- src/scs_version.o: src/scs_version.c include/glbopts.h
42
+ src/util.o : src/util.c $(INC_FILES)
43
+ src/cones.o : src/cones.c $(INC_FILES)
44
+ src/aa.o : src/aa.c $(INC_FILES)
45
+ src/rw.o : src/rw.c $(INC_FILES)
46
+ src/linalg.o: src/linalg.c $(INC_FILES)
47
+ src/ctrl.o : src/ctrl.c $(INC_FILES)
48
+ src/scs_version.o: src/scs_version.c $(INC_FILES)
49
49
 
50
50
  $(DIRSRC)/private.o: $(DIRSRC)/private.c $(DIRSRC)/private.h
51
51
  $(INDIRSRC)/indirect/private.o: $(INDIRSRC)/private.c $(INDIRSRC)/private.h
@@ -115,7 +115,7 @@ $(LINSYS)/gpu/gpu.o: $(LINSYS)/gpu/gpu.c
115
115
  # $(CUCC) -c -o $(GPUDIR)/private.o $^ $(CUDAFLAGS)
116
116
 
117
117
  $(GPUINDIR)/private.o: $(GPUINDIR)/private.c
118
- $(CUCC) -c -o $(GPUINDIR)/private.o $^ $(CUDAFLAGS)
118
+ $(CUCC) -c -o $@ $^ $(CUDAFLAGS)
119
119
 
120
120
  # $(OUT)/libscsgpudir.$(SHARED): $(SCS_O) $(SCS_OBJECTS) $(GPUDIR)/private.o $(AMD_OBJS) $(LINSYS)/scs_matrix.o $(LINSYS)/gpu/gpu.o
121
121
  # mkdir -p $(OUT)
@@ -143,7 +143,7 @@ $(OUT)/demo_socp_gpu_indirect: test/random_socp_prob.c $(OUT)/libscsgpuindir.a
143
143
 
144
144
  .PHONY: clean purge
145
145
  clean:
146
- @rm -rf $(TARGETS) $(SCS_O) $(SCS_INDIR_O) $(SCS_OBJECTS) $(AMD_OBJS) $(LDL_OBJS) $(LINSYS)/*.o $(DIRSRC)/*.o $(INDIRSRC)/*.o $(GPUDIR)/*.o $(GPUINDIR)/*.o
146
+ @rm -rf $(TARGETS) $(SCS_O) $(SCS_INDIR_O) $(SCS_OBJECTS) $(AMD_OBJS) $(LDL_OBJS) $(LINSYS)/*.o $(DIRSRC)/*.o $(INDIRSRC)/*.o $(GPUDIR)/*.o $(GPUINDIR)/*.o $(LINSYS)/gpu/*.o
147
147
  @rm -rf $(OUT)/*.dSYM
148
148
  @rm -rf matlab/*.mex*
149
149
  @rm -rf .idea
data/vendor/scs/README.md CHANGED
@@ -3,10 +3,13 @@
3
3
  </h1>
4
4
 
5
5
  [![Build Status](https://github.com/cvxgrp/scs/actions/workflows/build.yml/badge.svg)](https://github.com/cvxgrp/scs/actions/workflows/build.yml)
6
+ [![Documentation](https://img.shields.io/badge/docs-online-brightgreen?logo=read-the-docs&style=flat)](https://www.cvxgrp.org/scs/)
6
7
  [![Coverage Status](https://coveralls.io/repos/github/cvxgrp/scs/badge.svg?branch=master)](https://coveralls.io/github/cvxgrp/scs?branch=master)
7
8
 
8
9
 
9
10
  SCS (`splitting conic solver`) is a numerical optimization package for solving
10
- large-scale convex cone problems. The current version is `3.0.0`.
11
+ large-scale convex cone problems. The current version is `3.2.0`.
11
12
 
12
13
  The full documentation is available [here](https://www.cvxgrp.org/scs/).
14
+
15
+ If you wish to cite SCS please cite the papers listed [here](https://www.cvxgrp.org/scs/citing).
@@ -23,7 +23,7 @@ typedef struct ACCEL_WORK AaWork;
23
23
  * @param type1 if True use type 1 AA, otherwise use type 2
24
24
  * @param regularization type-I and type-II different, for type-I: 1e-8 works
25
25
  * well, type-II: more stable can use 1e-12 often
26
- * @param relaxation float \in [0,2], mixing parameter (1.0 is vanilla)
26
+ * @param relaxation float in [0,2], mixing parameter (1.0 is vanilla)
27
27
  * @param safeguard_factor factor that controls safeguarding checks
28
28
  * larger is more aggressive but less stable
29
29
  * @param max_weight_norm float, maximum norm of AA weights
@@ -8,6 +8,8 @@ extern "C" {
8
8
  #include "glbopts.h"
9
9
  #include "scs.h"
10
10
  #include "scs_blas.h"
11
+ #include "scs_work.h"
12
+ #include <string.h>
11
13
 
12
14
  /* private data to help cone projection step */
13
15
  struct SCS_CONE_WORK {
@@ -16,10 +18,14 @@ struct SCS_CONE_WORK {
16
18
  * cone boundaries, boundaries[0] is starting index for cones of size larger
17
19
  * than 1
18
20
  */
19
- scs_float *s; /* used for Moreau decomposition in projection */
20
- scs_int cone_len;
21
+ ScsCone *k; /* original cone information */
22
+ scs_int *cone_boundaries;
23
+ scs_int cone_boundaries_len;
24
+ scs_int scaled_cones; /* boolean, whether the cones have been scaled */
25
+ scs_float *s; /* used for Moreau decomposition in projection */
26
+ scs_int m; /* total length of cone */
21
27
  /* box cone quantities */
22
- scs_float *bl, *bu, box_t_warm_start;
28
+ scs_float box_t_warm_start;
23
29
  #ifdef USE_LAPACK
24
30
  /* workspace for eigenvector decompositions: */
25
31
  scs_float *Xs, *Z, *e, *work;
@@ -27,18 +33,17 @@ struct SCS_CONE_WORK {
27
33
  #endif
28
34
  };
29
35
 
30
- ScsConeWork *SCS(init_cone)(const ScsCone *k, const ScsScaling *scal,
31
- scs_int cone_len);
36
+ void SCS(free_cone)(ScsCone *k);
37
+ void SCS(deep_copy_cone)(ScsCone *dest, const ScsCone *src);
38
+ ScsConeWork *SCS(init_cone)(ScsCone *k, scs_int m);
32
39
  char *SCS(get_cone_header)(const ScsCone *k);
33
40
  scs_int SCS(validate_cones)(const ScsData *d, const ScsCone *k);
34
- scs_int SCS(set_cone_boundaries)(const ScsCone *k, scs_int **cone_boundaries);
35
-
36
- scs_int SCS(proj_dual_cone)(scs_float *x, const ScsCone *k, ScsConeWork *c,
37
- scs_int normalize);
41
+ scs_int SCS(proj_dual_cone)(scs_float *x, ScsConeWork *c, ScsScaling *scal,
42
+ scs_float *r_y);
38
43
  void SCS(finish_cone)(ScsConeWork *c);
39
-
40
- void SCS(set_rho_y_vec)(const ScsCone *k, scs_float scale, scs_float *rho_y_vec,
41
- scs_int m);
44
+ void SCS(set_r_y)(const ScsConeWork *c, scs_float scale, scs_float *r_y);
45
+ void SCS(enforce_cone_boundaries)(const ScsConeWork *c, scs_float *vec,
46
+ scs_float (*f)(const scs_float *, scs_int));
42
47
 
43
48
  #ifdef __cplusplus
44
49
  }