ruby-gsl-ng 0.2.2 → 0.2.3

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.
data/History.txt CHANGED
@@ -1,3 +1,24 @@
1
+ === 0.2.3
2
+ * FIXES:
3
+ * HUGE memory leak, no GSL object was ever freed.
4
+ * Remove -march flag for MAC
5
+ * LOTS of improvements:
6
+ * Added map_array: a map() version that actually returns an Array instead of a Vector/Matrix
7
+ * Now you use the & idiom for map methods and such (like map_array(&:to_s))
8
+ * Added Matrix#each_row / Matrix#each_column (which pass row and column matrices to the block)
9
+ * Added Matrix#row_vecview / Matrix#column_vecview (construct a row and column Matrix::View)
10
+ * Added Matrix#each_vec_row / Matrix#each_vec_column (same as the previous ones, but the block will receive a Vector::View instead)
11
+ * Added x, y, z and w accessors for Vector (this will probably go into Vector2, Vector3 and Vector4 in the future)
12
+ * "negate" operator
13
+ * Documentation is now YARD based. This will significantly improve the documentation readability.
14
+ * Added Vector#map_index! and Vector#wrap!
15
+ * Initial support for Random Number Generators (only Uniform and Gaussian distributions for the moment)
16
+ * Added Vector#<, #>, #<= and #>=
17
+ * Added Matrix#map_with_index!
18
+ * No more #fast_each and stuff. Now #each IS fast. This is accomplished by writing actual Ruby-C code instead of using FFI for
19
+ these functions.
20
+ * Initial support for GSL's special functions
21
+
1
22
  === 0.2.1
2
23
  * Fixed for FFI 0.6.0
3
24
 
data/Manifest CHANGED
@@ -8,15 +8,24 @@ lib/gslng.rb
8
8
  lib/gslng/backend.rb
9
9
  lib/gslng/backend_components/error_handling.rb
10
10
  lib/gslng/backend_components/matrix.rb
11
+ lib/gslng/backend_components/rng.rb
12
+ lib/gslng/backend_components/special.rb
11
13
  lib/gslng/backend_components/vector.rb
12
14
  lib/gslng/finalizer.rb
13
15
  lib/gslng/matrix.rb
14
16
  lib/gslng/matrix_view.rb
17
+ lib/gslng/rng/gaussian.rb
18
+ lib/gslng/rng/rng.rb
19
+ lib/gslng/rng/uniform.rb
20
+ lib/gslng/special.rb
15
21
  lib/gslng/vector.rb
16
22
  lib/gslng/vector_view.rb
17
23
  ruby-gsl-ng.gemspec
18
24
  test/benchmark.rb
25
+ test/benchmark_results
19
26
  test/matrix_test.rb
27
+ test/rng_test.rb
20
28
  test/test_gsl.rb
29
+ test/test_special.rb
21
30
  test/vector_test.rb
22
31
  Manifest
data/Rakefile CHANGED
@@ -7,14 +7,18 @@ require 'yard'
7
7
  Echoe.new('ruby-gsl-ng') do |p|
8
8
  p.author = 'v01d'
9
9
  p.summary = "Ruby Object Oriented Graph LIbrary"
10
- p.url = "http://github.com/v01d/roogli"
11
- p.version = "0.2.2"
10
+ p.url = "http://github.com/v01d/ruby-gsl-ng"
11
+ p.version = "0.2.3"
12
12
  p.dependencies = ['yard', 'ffi']
13
13
  # p.eval = proc { s.has_rdoc = 'yard' }
14
14
  end
15
15
 
16
- YARD::Rake::YardocTask.new do |t|
17
- t.files = ['lib/**/*.rb'] # optional
18
- t.options = ['--verbose','--no-private'] # optional
16
+ Rake::TaskManager.class_eval do
17
+ def remove_task(task)
18
+ @tasks.delete(task.to_s)
19
+ end
19
20
  end
20
21
 
22
+ Rake.application.remove_task(:docs)
23
+ YARD::Rake::YardocTask.new(:docs) {|t| t.options = ['--verbose','--no-private','--hide-void']}
24
+
data/ext/extconf.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/ruby
2
2
  require 'mkmf'
3
3
  gsl_vars = pkg_config('gsl') or raise 'GSL not found!'
4
- extra_flags='-O3 -march=native'
5
- with_cppflags("#{$CPPFLAGS} #{extra_flags}") { true }
4
+ extra_flags='-O4 -DHAVE_INLINE'
5
+ with_cppflags("#{extra_flags}") { true }
6
6
  create_makefile('gslng_extensions')
@@ -4,43 +4,66 @@
4
4
  * This could actually a standard C library (not a Ruby extension), but it's easier this way.
5
5
  */
6
6
 
7
+ #include <ruby.h>
7
8
  #include <gsl/gsl_vector.h>
8
9
  #include <gsl/gsl_matrix.h>
9
10
 
10
- extern "C" void Init_gslng_extensions(void) { }
11
+ /************************* Vector functions *****************************/
11
12
 
12
- /**** Vector *****/
13
-
14
- // For Vector::map!
15
- typedef double (*gsl_vector_callback_t)(double);
16
-
17
- extern "C" void gsl_vector_map(gsl_vector* v, gsl_vector_callback_t callback) {
13
+ static VALUE gsl_vector_map(VALUE self, VALUE ptr) {
14
+ gsl_vector* v = (gsl_vector*)FIX2ULONG(ptr);
18
15
  for (size_t i = 0; i < v->size; i++)
19
- *gsl_vector_ptr(v, i) = (*callback)(*gsl_vector_const_ptr(v, i));
16
+ gsl_vector_set(v, i, NUM2DBL(rb_yield(rb_float_new(gsl_vector_get(v, i)))));
17
+
18
+ return self;
20
19
  }
21
20
 
22
- // For Vector::map_index!
23
- typedef double (*gsl_vector_index_callback_t)(size_t);
24
-
25
- extern "C" void gsl_vector_map_index(gsl_vector* v, gsl_vector_index_callback_t callback) {
26
- for (size_t i = 0; i < v->size; i++)
27
- *gsl_vector_ptr(v, i) = (*callback)(i);
21
+ static VALUE gsl_vector_map_index(VALUE self, VALUE ptr) {
22
+ gsl_vector* v = (gsl_vector*)FIX2ULONG(ptr);
23
+ for (size_t i = 0; i < v->size; i++) {
24
+ VALUE vi = ULONG2NUM(i);
25
+ gsl_vector_set(v, i, NUM2DBL(rb_yield(vi)));
26
+ }
27
+
28
+ return self;
28
29
  }
29
30
 
30
- // A fast "each" for cases where there's no expected return value from the block
31
- typedef void (*gsl_vector_each_callback_t)(double);
31
+ static VALUE gsl_vector_each_with_index(VALUE self, VALUE ptr) {
32
+ gsl_vector* v = (gsl_vector*)FIX2ULONG(ptr);
33
+ for (size_t i = 0; i < v->size; i++) {
34
+ VALUE vi = ULONG2NUM(i);
35
+ rb_yield_values(2, rb_float_new(gsl_vector_get(v, i)), vi);
36
+ }
37
+
38
+ return self;
39
+ }
32
40
 
33
- extern "C" void gsl_vector_each(gsl_vector* v, gsl_vector_each_callback_t callback) {
41
+ static VALUE gsl_vector_each(VALUE self, VALUE ptr) {
42
+ gsl_vector* v = (gsl_vector*)FIX2ULONG(ptr);
34
43
  for (size_t i = 0; i < v->size; i++)
35
- (*callback)(*gsl_vector_const_ptr(v, i));
44
+ rb_yield(rb_float_new(gsl_vector_get(v, i)));
45
+
46
+ return self;
36
47
  }
37
48
 
38
- // A fast "each_with_index" for cases where there's no expected return value from the block
39
- typedef void (*gsl_vector_each_with_index_callback_t)(double, size_t);
49
+ static VALUE gsl_vector_to_a(VALUE self, VALUE ptr) {
50
+ gsl_vector* v = (gsl_vector*)FIX2ULONG(ptr);
51
+
52
+ VALUE array = rb_ary_new2(v->size);
53
+ for (size_t i = 0; i < v->size; i++)
54
+ rb_ary_store(array, i, rb_float_new(gsl_vector_get(v, i)));
55
+
56
+ return array;
57
+ }
40
58
 
41
- extern "C" void gsl_vector_each_with_index(gsl_vector* v, gsl_vector_each_with_index_callback_t callback) {
59
+ static VALUE gsl_vector_from_array(VALUE self, VALUE ptr, VALUE array) {
60
+ gsl_vector* v = (gsl_vector*)FIX2ULONG(ptr);
61
+ if (v->size != RARRAY_LEN(array)) rb_raise(rb_eRuntimeError, "Sizes differ!");
62
+
42
63
  for (size_t i = 0; i < v->size; i++)
43
- (*callback)(*gsl_vector_const_ptr(v, i), i);
64
+ gsl_vector_set(v, i, NUM2DBL(rb_ary_entry(array, i)));
65
+
66
+ return self;
44
67
  }
45
68
 
46
69
  // Hide the view in a new vector (gsl_vector_subvector)
@@ -59,41 +82,98 @@ extern "C" gsl_vector* gsl_vector_subvector2(gsl_vector* v, size_t offset, size_
59
82
  return vector_view;
60
83
  }
61
84
 
62
- /***** Matrix *****/
63
- // For Matrix::map!
64
- typedef double (*gsl_matrix_callback_t)(double);
85
+ /************************* Matrix functions *****************************/
65
86
 
66
- extern "C" void gsl_matrix_map(gsl_matrix* m, gsl_matrix_callback_t callback) {
87
+ static VALUE gsl_matrix_map(VALUE self, VALUE ptr) {
88
+ gsl_matrix* m = (gsl_matrix*)FIX2ULONG(ptr);
67
89
  size_t size1 = m->size1;
68
90
  size_t size2 = m->size2;
69
91
 
70
92
  for (size_t i = 0; i < size1; i++)
71
93
  for (size_t j = 0; j < size2; j++)
72
- *gsl_matrix_ptr(m, i, j) = (*callback)(*gsl_matrix_const_ptr(m, i, j));
73
- }
94
+ gsl_matrix_set(m, i, j, NUM2DBL(rb_yield(rb_float_new(gsl_matrix_get(m, i, j)))));
74
95
 
75
- // For Matrix::map_index!
76
- typedef double (*gsl_matrix_index_callback_t)(size_t, size_t);
96
+ return self;
97
+ }
77
98
 
78
- extern "C" void gsl_matrix_map_index(gsl_matrix* m, gsl_matrix_index_callback_t callback) {
99
+ static VALUE gsl_matrix_map_index(VALUE self, VALUE ptr) {
100
+ gsl_matrix* m = (gsl_matrix*)FIX2ULONG(ptr);
79
101
  size_t size1 = m->size1;
80
102
  size_t size2 = m->size2;
81
103
 
82
104
  for (size_t i = 0; i < size1; i++)
83
105
  for (size_t j = 0; j < size2; j++)
84
- *gsl_matrix_ptr(m, i, j) = (*callback)(i, j);
106
+ gsl_matrix_set(m, i, j, NUM2DBL(rb_yield_values(2, ULONG2NUM(i), ULONG2NUM(j))));
107
+
108
+ return self;
85
109
  }
86
110
 
87
- // A fast "each" for cases where there's no expected return value from the block
88
- typedef void (*gsl_matrix_each_callback_t)(double);
111
+ static VALUE gsl_matrix_map_with_index(VALUE self, VALUE ptr) {
112
+ gsl_matrix* m = (gsl_matrix*)FIX2ULONG(ptr);
113
+ size_t size1 = m->size1;
114
+ size_t size2 = m->size2;
89
115
 
90
- extern "C" void gsl_matrix_each(gsl_matrix* m, gsl_matrix_each_callback_t callback) {
116
+ for (size_t i = 0; i < size1; i++)
117
+ for (size_t j = 0; j < size2; j++)
118
+ gsl_matrix_set(m, i, j, NUM2DBL(rb_yield_values(3, rb_float_new(gsl_matrix_get(m, i, j)), ULONG2NUM(i), ULONG2NUM(j))));
119
+
120
+ return self;
121
+ }
122
+
123
+ static VALUE gsl_matrix_each(VALUE self, VALUE ptr) {
124
+ gsl_matrix* m = (gsl_matrix*)FIX2ULONG(ptr);
91
125
  size_t size1 = m->size1;
92
126
  size_t size2 = m->size2;
93
127
 
94
128
  for (size_t i = 0; i < size1; i++)
95
129
  for (size_t j = 0; j < size2; j++)
96
- (*callback)(*gsl_matrix_const_ptr(m, i, j));
130
+ rb_yield(rb_float_new(gsl_matrix_get(m, i, j)));
131
+
132
+ return self;
133
+ }
134
+
135
+ static VALUE gsl_matrix_each_with_index(VALUE self, VALUE ptr) {
136
+ gsl_matrix* m = (gsl_matrix*)FIX2ULONG(ptr);
137
+ size_t size1 = m->size1;
138
+ size_t size2 = m->size2;
139
+
140
+ for (size_t i = 0; i < size1; i++) {
141
+ VALUE vi = ULONG2NUM(i);
142
+ for (size_t j = 0; j < size2; j++)
143
+ rb_yield_values(3, rb_float_new(gsl_matrix_get(m, i, j)), vi, ULONG2NUM(j));
144
+ }
145
+
146
+ return self;
147
+ }
148
+
149
+ static VALUE gsl_matrix_to_a(VALUE self, VALUE ptr) {
150
+ gsl_matrix* m = (gsl_matrix*)FIX2ULONG(ptr);
151
+
152
+ VALUE array = rb_ary_new2(m->size1);
153
+ for (size_t i = 0; i < m->size1; i++) {
154
+ VALUE row = rb_ary_new2(m->size2);
155
+ for (size_t j = 0; j < m->size2; j++) {
156
+ rb_ary_store(row, j, rb_float_new(gsl_matrix_get(m, i, j)));
157
+ }
158
+ rb_ary_store(array, i, row);
159
+ }
160
+
161
+ return array;
162
+ }
163
+
164
+ static VALUE gsl_matrix_from_array(VALUE self, VALUE ptr, VALUE array) {
165
+ gsl_matrix* m = (gsl_matrix*)FIX2ULONG(ptr);
166
+ if (m->size1 != RARRAY_LEN(array)) rb_raise(rb_eRuntimeError, "Sizes differ!");
167
+
168
+ for (size_t i = 0; i < m->size1; i++) {
169
+ VALUE row = rb_ary_entry(array, i);
170
+ if (m->size2 != RARRAY_LEN(row)) rb_raise(rb_eRuntimeError, "Sizes differ!");
171
+
172
+ for (size_t j = 0; j < m->size2; j++)
173
+ gsl_matrix_set(m, i, j, NUM2DBL(rb_ary_entry(row, j)));
174
+ }
175
+
176
+ return self;
97
177
  }
98
178
 
99
179
  // Hide the view in a new matrix (gsl_matrix_submatrix)
@@ -116,4 +196,29 @@ extern "C" gsl_vector* gsl_matrix_column_view(gsl_matrix* m_ptr, size_t column,
116
196
  gsl_vector* vector_view = gsl_vector_alloc(view.vector.size);
117
197
  *vector_view = view.vector;
118
198
  return vector_view;
199
+ }
200
+
201
+
202
+ /************************* Module initialization *****************************/
203
+
204
+ extern "C" void Init_gslng_extensions(void) {
205
+ VALUE GSLng_module = rb_define_module("GSLng");
206
+ VALUE Backend_module = rb_funcall(GSLng_module, rb_intern("backend"), 0);
207
+
208
+ // vector
209
+ rb_define_module_function(Backend_module, "gsl_vector_map!", (VALUE(*)(ANYARGS))gsl_vector_map, 1);
210
+ rb_define_module_function(Backend_module, "gsl_vector_map_index!", (VALUE(*)(ANYARGS))gsl_vector_map_index, 1);
211
+ rb_define_module_function(Backend_module, "gsl_vector_each_with_index", (VALUE(*)(ANYARGS))gsl_vector_each_with_index, 1);
212
+ rb_define_module_function(Backend_module, "gsl_vector_each", (VALUE(*)(ANYARGS))gsl_vector_each, 1);
213
+ rb_define_module_function(Backend_module, "gsl_vector_to_a", (VALUE(*)(ANYARGS))gsl_vector_to_a, 1);
214
+ rb_define_module_function(Backend_module, "gsl_vector_from_array", (VALUE(*)(ANYARGS))gsl_vector_from_array, 2);
215
+
216
+ // matrix
217
+ rb_define_module_function(Backend_module, "gsl_matrix_map!", (VALUE(*)(ANYARGS))gsl_matrix_map, 1);
218
+ rb_define_module_function(Backend_module, "gsl_matrix_map_index!", (VALUE(*)(ANYARGS))gsl_matrix_map_index, 1);
219
+ rb_define_module_function(Backend_module, "gsl_matrix_map_with_index!", (VALUE(*)(ANYARGS))gsl_matrix_map_with_index, 1);
220
+ rb_define_module_function(Backend_module, "gsl_matrix_each_with_index", (VALUE(*)(ANYARGS))gsl_matrix_each_with_index, 1);
221
+ rb_define_module_function(Backend_module, "gsl_matrix_each", (VALUE(*)(ANYARGS))gsl_matrix_each, 1);
222
+ rb_define_module_function(Backend_module, "gsl_matrix_to_a", (VALUE(*)(ANYARGS))gsl_matrix_to_a, 1);
223
+ rb_define_module_function(Backend_module, "gsl_matrix_from_array", (VALUE(*)(ANYARGS))gsl_matrix_from_array, 2);
119
224
  }
data/lib/gslng.rb CHANGED
@@ -1,8 +1,9 @@
1
- require 'gslng/backend'
2
- require 'gslng/finalizer'
3
-
4
- require 'gslng/vector'
5
- require 'gslng/vector_view'
6
- require 'gslng/matrix'
7
- require 'gslng/matrix_view'
8
-
1
+ require 'gslng/backend'
2
+ require 'gslng/finalizer'
3
+
4
+ require 'gslng/vector'
5
+ require 'gslng/vector_view'
6
+ require 'gslng/matrix'
7
+ require 'gslng/matrix_view'
8
+ require 'gslng/rng/rng'
9
+ require 'gslng/special'
data/lib/gslng/backend.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  require 'ffi'
2
2
 
3
3
  module GSLng
4
- # Anonymous module: avoids exposing this internal module when doing "include GSLng" at the top-level.
5
- # If ruby had "private" modules I wouldn't have to do this.
4
+ # Anonymous module: avoids exposing this internal module when doing "include GSLng" at the top-level.
5
+ # If ruby had "private" modules I wouldn't have to do this.
6
6
  @backend = Module.new do
7
7
  extend FFI::Library
8
8
  ffi_lib(FFI::CURRENT_PROCESS)
9
9
  end
10
10
 
11
11
  # Returns the internal backend module
12
- def GSLng.backend # @private
12
+ def GSLng.backend # @private
13
13
  @backend
14
14
  end
15
15
  end
@@ -18,3 +18,5 @@ require 'gslng_extensions'
18
18
  require 'gslng/backend_components/vector'
19
19
  require 'gslng/backend_components/matrix'
20
20
  require 'gslng/backend_components/error_handling'
21
+ require 'gslng/backend_components/rng'
22
+ require 'gslng/backend_components/special'
@@ -1,12 +1,12 @@
1
- module GSLng
2
- backend.instance_eval do
3
- # All of this raises an exception when GSL registers an error
4
- callback :error_handler_callback, [ :string, :string, :int, :int ], :void
5
- attach_function :gsl_set_error_handler, [ :error_handler_callback ], :error_handler_callback
6
-
7
- ErrorHandlerCallback = Proc.new {|reason, file, line, errno|
8
- raise RuntimeError, "#{reason} (errno: #{errno})", caller[2..-1]
9
- }
10
- gsl_set_error_handler(ErrorHandlerCallback)
11
- end
1
+ module GSLng
2
+ backend.instance_eval do
3
+ # All of this raises an exception when GSL registers an error
4
+ callback :error_handler_callback, [ :string, :string, :int, :int ], :void
5
+ attach_function :gsl_set_error_handler, [ :error_handler_callback ], :error_handler_callback
6
+
7
+ ErrorHandlerCallback = Proc.new {|reason, file, line, errno|
8
+ raise RuntimeError, "#{reason} (errno: #{errno})", caller[2..-1]
9
+ }
10
+ gsl_set_error_handler(ErrorHandlerCallback)
11
+ end
12
12
  end
@@ -1,75 +1,66 @@
1
- module GSLng
2
- backend.instance_eval do
3
- # memory handling
4
- attach_function :gsl_matrix_alloc, [ :size_t, :size_t ], :pointer
5
- attach_function :gsl_matrix_calloc, [ :size_t, :size_t ], :pointer
6
- attach_function :gsl_matrix_free, [ :pointer ], :void
7
-
8
- # initializing
9
- attach_function :gsl_matrix_set_all, [ :pointer, :double ], :void
10
- attach_function :gsl_matrix_set_zero, [ :pointer ], :void
11
- attach_function :gsl_matrix_set_identity, [ :pointer ], :void
12
-
13
- # copying
14
- attach_function :gsl_matrix_memcpy, [ :pointer, :pointer ], :int
15
-
16
- # operations
17
- attach_function :gsl_matrix_add, [ :pointer, :pointer ], :int
18
- attach_function :gsl_matrix_sub, [ :pointer, :pointer ], :int
19
- attach_function :gsl_matrix_mul_elements, [ :pointer, :pointer ], :int
20
- attach_function :gsl_matrix_div_elements, [ :pointer, :pointer ], :int
21
- attach_function :gsl_matrix_scale, [ :pointer, :double ], :int
22
- attach_function :gsl_matrix_add_constant, [ :pointer, :double ], :int
23
-
24
- # copy rows/columns into
25
- attach_function :gsl_matrix_get_row, [ :pointer, :pointer, :size_t ], :int
26
- attach_function :gsl_matrix_get_col, [ :pointer, :pointer, :size_t ], :int
27
- attach_function :gsl_matrix_set_row, [ :pointer, :size_t, :pointer ], :int
28
- attach_function :gsl_matrix_set_col, [ :pointer, :size_t, :pointer ], :int
29
-
30
- # element access
31
- attach_function :gsl_matrix_get, [ :pointer, :size_t, :size_t ], :double
32
- attach_function :gsl_matrix_set, [ :pointer, :size_t, :size_t, :double ], :void
33
-
34
- # properties
35
- attach_function :gsl_matrix_isnull, [ :pointer ], :int
36
- attach_function :gsl_matrix_ispos, [ :pointer ], :int
37
- attach_function :gsl_matrix_isneg, [ :pointer ], :int
38
- attach_function :gsl_matrix_isnonneg, [ :pointer ], :int
39
-
40
- # max and min
41
- attach_function :gsl_matrix_max, [ :pointer ], :double
42
- attach_function :gsl_matrix_min, [ :pointer ], :double
43
- attach_function :gsl_matrix_minmax, [ :pointer, :buffer_out, :buffer_out ], :void
44
- attach_function :gsl_matrix_max_index, [ :pointer, :buffer_out, :buffer_out ], :void
45
- attach_function :gsl_matrix_min_index, [ :pointer, :buffer_out, :buffer_out ], :void
46
- attach_function :gsl_matrix_minmax_index, [ :pointer, :buffer_out, :buffer_out, :buffer_out, :buffer_out ], :void
47
-
48
- # exchange elements
49
- attach_function :gsl_matrix_swap_rows, [ :pointer, :size_t, :size_t ], :int
50
- attach_function :gsl_matrix_swap_columns, [ :pointer, :size_t, :size_t ], :int
51
- attach_function :gsl_matrix_swap_rowcol, [ :pointer, :size_t, :size_t ], :int
52
- attach_function :gsl_matrix_transpose_memcpy, [ :pointer, :pointer ], :int
53
- attach_function :gsl_matrix_transpose, [ :pointer ], :int
54
-
55
- # From local extension
56
- callback :gsl_matrix_callback, [ :double ], :double
57
- attach_function :gsl_matrix_map, [ :pointer, :gsl_matrix_callback ], :void
58
-
59
- callback :gsl_matrix_index_callback, [ :size_t, :size_t ], :double
60
- attach_function :gsl_matrix_map_index, [ :pointer, :gsl_matrix_index_callback ], :void
61
-
62
- callback :gsl_matrix_each_callback, [ :double ], :void
63
- attach_function :gsl_matrix_each, [ :pointer, :gsl_matrix_each_callback ], :void
64
-
65
- # views
66
- attach_function :gsl_matrix_submatrix2, [ :pointer, :size_t, :size_t, :size_t, :size_t ], :pointer
67
- attach_function :gsl_matrix_row_view, [ :pointer, :size_t, :size_t, :size_t ], :pointer
68
- attach_function :gsl_matrix_column_view, [ :pointer, :size_t, :size_t, :size_t ], :pointer
69
-
70
- # BLAS interface
71
- enum :cblas_transpose_t, [ :no_transpose, 111, :transpose, :conjugate_transpose ]
72
- attach_function :gsl_blas_dgemv, [ :cblas_transpose_t, :double, :pointer, :pointer, :double, :pointer ], :int
73
- attach_function :gsl_blas_dgemm, [ :cblas_transpose_t, :cblas_transpose_t, :double, :pointer, :pointer, :double, :pointer ], :int
74
- end
75
- end
1
+ module GSLng
2
+ backend.instance_eval do
3
+ # memory handling
4
+ attach_function :gsl_matrix_alloc, [ :size_t, :size_t ], :pointer
5
+ attach_function :gsl_matrix_calloc, [ :size_t, :size_t ], :pointer
6
+ attach_function :gsl_matrix_free, [ :pointer ], :void
7
+
8
+ # initializing
9
+ attach_function :gsl_matrix_set_all, [ :pointer, :double ], :void
10
+ attach_function :gsl_matrix_set_zero, [ :pointer ], :void
11
+ attach_function :gsl_matrix_set_identity, [ :pointer ], :void
12
+
13
+ # copying
14
+ attach_function :gsl_matrix_memcpy, [ :pointer, :pointer ], :int
15
+
16
+ # operations
17
+ attach_function :gsl_matrix_add, [ :pointer, :pointer ], :int
18
+ attach_function :gsl_matrix_sub, [ :pointer, :pointer ], :int
19
+ attach_function :gsl_matrix_mul_elements, [ :pointer, :pointer ], :int
20
+ attach_function :gsl_matrix_div_elements, [ :pointer, :pointer ], :int
21
+ attach_function :gsl_matrix_scale, [ :pointer, :double ], :int
22
+ attach_function :gsl_matrix_add_constant, [ :pointer, :double ], :int
23
+
24
+ # copy rows/columns into
25
+ attach_function :gsl_matrix_get_row, [ :pointer, :pointer, :size_t ], :int
26
+ attach_function :gsl_matrix_get_col, [ :pointer, :pointer, :size_t ], :int
27
+ attach_function :gsl_matrix_set_row, [ :pointer, :size_t, :pointer ], :int
28
+ attach_function :gsl_matrix_set_col, [ :pointer, :size_t, :pointer ], :int
29
+
30
+ # element access
31
+ attach_function :gsl_matrix_get, [ :pointer, :size_t, :size_t ], :double
32
+ attach_function :gsl_matrix_set, [ :pointer, :size_t, :size_t, :double ], :void
33
+
34
+ # properties
35
+ attach_function :gsl_matrix_isnull, [ :pointer ], :int
36
+ attach_function :gsl_matrix_ispos, [ :pointer ], :int
37
+ attach_function :gsl_matrix_isneg, [ :pointer ], :int
38
+ attach_function :gsl_matrix_isnonneg, [ :pointer ], :int
39
+
40
+ # max and min
41
+ attach_function :gsl_matrix_max, [ :pointer ], :double
42
+ attach_function :gsl_matrix_min, [ :pointer ], :double
43
+ attach_function :gsl_matrix_minmax, [ :pointer, :buffer_out, :buffer_out ], :void
44
+ attach_function :gsl_matrix_max_index, [ :pointer, :buffer_out, :buffer_out ], :void
45
+ attach_function :gsl_matrix_min_index, [ :pointer, :buffer_out, :buffer_out ], :void
46
+ attach_function :gsl_matrix_minmax_index, [ :pointer, :buffer_out, :buffer_out, :buffer_out, :buffer_out ], :void
47
+
48
+ # exchange elements
49
+ attach_function :gsl_matrix_swap_rows, [ :pointer, :size_t, :size_t ], :int
50
+ attach_function :gsl_matrix_swap_columns, [ :pointer, :size_t, :size_t ], :int
51
+ attach_function :gsl_matrix_swap_rowcol, [ :pointer, :size_t, :size_t ], :int
52
+ attach_function :gsl_matrix_transpose_memcpy, [ :pointer, :pointer ], :int
53
+ attach_function :gsl_matrix_transpose, [ :pointer ], :int
54
+
55
+ # From local extension
56
+ # views
57
+ attach_function :gsl_matrix_submatrix2, [ :pointer, :size_t, :size_t, :size_t, :size_t ], :pointer
58
+ attach_function :gsl_matrix_row_view, [ :pointer, :size_t, :size_t, :size_t ], :pointer
59
+ attach_function :gsl_matrix_column_view, [ :pointer, :size_t, :size_t, :size_t ], :pointer
60
+
61
+ # BLAS interface
62
+ enum :cblas_transpose_t, [ :no_transpose, 111, :transpose, :conjugate_transpose ]
63
+ attach_function :gsl_blas_dgemv, [ :cblas_transpose_t, :double, :pointer, :pointer, :double, :pointer ], :int
64
+ attach_function :gsl_blas_dgemm, [ :cblas_transpose_t, :cblas_transpose_t, :double, :pointer, :pointer, :double, :pointer ], :int
65
+ end
66
+ end