octave-ruby 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
+ == 1.0.4 / 2008-05-14
2
+
3
+ * 1 minor enhancement
4
+ * Added support for boolean matrices
5
+
1
6
  == 1.0.3 / 2008-02-29
2
7
 
3
8
  * 1 major bug fix
@@ -13,6 +13,8 @@ ext/octave_api/octave_api.c
13
13
  ext/octave_api/octave_api.h
14
14
  ext/octave_api/or-array.cpp
15
15
  ext/octave_api/or-array.h
16
+ ext/octave_api/or-boolean_matrix.cpp
17
+ ext/octave_api/or-boolean_matrix.h
16
18
  ext/octave_api/or-cell_matrix.cpp
17
19
  ext/octave_api/or-cell_matrix.h
18
20
  ext/octave_api/or-hash.cpp
@@ -43,7 +43,7 @@ LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)
43
43
  RUBY_EXTCONF_H =
44
44
  CFLAGS = -fno-common -arch i386 -Os -pipe -fno-common
45
45
  INCFLAGS = -I. -I. -I/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin9.0 -I.
46
- CPPFLAGS = -DHAVE_OCTAVE_H -I/Applications/Octave.app/Contents/Resources/include -I/Applications/Octave.app/Contents/Resources/lib -I/Applications/Octave.app/Contents/Resources/include/octave-3.0.0/octave -I/Applications/Octave.app/Contents/Resources/lib/octave-3.0.0 -I/Applications/Octave.app/Contents/Resources/include/octave-3.0.0
46
+ CPPFLAGS = -DHAVE_OCTAVE_H -I/Applications/Octave.app/Contents/Resources/include -I/Applications/Octave.app/Contents/Resources/lib -I/Applications/Octave.app/Contents/Resources/include/octave-3.0.1/octave -I/Applications/Octave.app/Contents/Resources/lib/octave-3.0.1 -I/Applications/Octave.app/Contents/Resources/include/octave-3.0.1
47
47
  CXXFLAGS = $(CFLAGS)
48
48
  DLDFLAGS = -L. -arch i386
49
49
  LDSHARED = g++ -pipe -bundle
@@ -68,8 +68,8 @@ COPY = cp
68
68
 
69
69
  preload =
70
70
 
71
- libpath = . $(libdir) /Applications/Octave.app/Contents/Resources/lib /Applications/Octave.app/Contents/Resources/lib/octave-3.0.0
72
- LIBPATH = -L"." -L"$(libdir)" -L"/Applications/Octave.app/Contents/Resources/lib" -L"/Applications/Octave.app/Contents/Resources/lib/octave-3.0.0"
71
+ libpath = . $(libdir) /Applications/Octave.app/Contents/Resources/lib /Applications/Octave.app/Contents/Resources/lib/octave-3.0.1
72
+ LIBPATH = -L"." -L"$(libdir)" -L"/Applications/Octave.app/Contents/Resources/lib" -L"/Applications/Octave.app/Contents/Resources/lib/octave-3.0.1"
73
73
  DEFFILE =
74
74
 
75
75
  CLEANFILES = mkmf.log
@@ -79,9 +79,9 @@ extout =
79
79
  extout_prefix =
80
80
  target_prefix =
81
81
  LOCAL_LIBS =
82
- LIBS = $(LIBRUBYARG_SHARED) -lz -lcruft -loctave -loctinterp -lpthread -ldl -lm
83
- SRCS = octave_api.c octave-ruby.cpp or-array.cpp or-cell_matrix.cpp or-hash.cpp or-matrix.cpp or-string.cpp or-struct_matrix.cpp or-variable.cpp
84
- OBJS = octave_api.o octave-ruby.o or-array.o or-cell_matrix.o or-hash.o or-matrix.o or-string.o or-struct_matrix.o or-variable.o
82
+ LIBS = $(LIBRUBYARG_SHARED) -lcruft -loctave -loctinterp -lpthread -ldl -lm
83
+ SRCS = octave_api.c octave-ruby.cpp or-array.cpp or-boolean_matrix.cpp or-cell_matrix.cpp or-hash.cpp or-matrix.cpp or-string.cpp or-struct_matrix.cpp or-variable.cpp
84
+ OBJS = octave_api.o octave-ruby.o or-array.o or-boolean_matrix.o or-cell_matrix.o or-hash.o or-matrix.o or-string.o or-struct_matrix.o or-variable.o
85
85
  TARGET = octave_api
86
86
  DLLIB = $(TARGET).bundle
87
87
  EXTSTATIC =
@@ -0,0 +1,61 @@
1
+ #include "or-boolean_matrix.h"
2
+
3
+ OR_BooleanMatrix::~OR_BooleanMatrix() {}
4
+
5
+ VALUE OR_BooleanMatrix::to_ruby()
6
+ {
7
+ Matrix matrix;
8
+ MArray<double> values;
9
+ double cell;
10
+ int i, number_of_values;
11
+ VALUE argv[2];
12
+
13
+ matrix = octave_val.matrix_value();
14
+ int number_of_rows = matrix.rows();
15
+ int number_of_columns = matrix.columns();
16
+
17
+ if (number_of_rows == 1) {
18
+ values = matrix.row(0);
19
+ } else if (number_of_columns == 1) {
20
+ values = matrix.column(0);
21
+ } else {
22
+ argv[0] = INT2FIX(number_of_rows);
23
+ argv[1] = INT2FIX(number_of_columns);
24
+ ruby_val = rb_class_new_instance(2, argv, rb_path2class("Octave::Matrix"));
25
+
26
+ int row_index, column_index = 0;
27
+ VALUE cells, row;
28
+ cells = rb_ary_new2(number_of_rows);
29
+ for (row_index = 0; row_index < number_of_rows; row_index++) {
30
+ row = rb_ary_new2(number_of_columns);
31
+ values = matrix.row(row_index);
32
+
33
+ for (column_index = 0; column_index < number_of_columns; column_index++) {
34
+ cell = values(column_index);
35
+ if (xisnan(cell) || octave_is_NA(cell)) {
36
+ rb_ary_push(row, Qnil);
37
+ } else {
38
+ rb_ary_push(row, (int(cell) == 1 ? Qtrue : Qfalse));
39
+ }
40
+ }
41
+
42
+ rb_ary_push(cells, row);
43
+ }
44
+
45
+ rb_iv_set(ruby_val, "@cells", cells);
46
+ return ruby_val;
47
+ }
48
+
49
+ number_of_values = values.length();
50
+ ruby_val = rb_ary_new2(number_of_values);
51
+ for (i = 0; i < number_of_values; i++) {
52
+ cell = values(i);
53
+ if (xisnan(cell) || octave_is_NA(cell)) {
54
+ rb_ary_push(ruby_val, Qnil);
55
+ } else {
56
+ rb_ary_push(ruby_val, (int(cell) == 1 ? Qtrue : Qfalse));
57
+ }
58
+ }
59
+
60
+ return ruby_val;
61
+ }
@@ -0,0 +1,20 @@
1
+ #ifndef OR_BOOLEAN_MATRIX_DEFINED_H_
2
+ #define OR_BOOLEAN_MATRIX_DEFINED_H_
3
+
4
+ #include "ruby.h"
5
+ #include "octave-includes.h"
6
+
7
+ class OR_BooleanMatrix
8
+ {
9
+ private:
10
+ VALUE ruby_val;
11
+ octave_value octave_val;
12
+
13
+ public:
14
+ OR_BooleanMatrix(octave_value o) : octave_val(o) { };
15
+ ~OR_BooleanMatrix();
16
+
17
+ VALUE to_ruby();
18
+ };
19
+
20
+ #endif /* OR_BOOLEAN_MATRIX_DEFINED_H_ */
@@ -1,6 +1,7 @@
1
1
  #include "or-variable.h"
2
2
  #include "or-string.h"
3
3
  #include "or-matrix.h"
4
+ #include "or-boolean_matrix.h"
4
5
  #include "or-struct_matrix.h"
5
6
  #include "or-cell_matrix.h"
6
7
  #include "or-array.h"
@@ -12,6 +13,8 @@ VALUE OR_Variable::to_ruby()
12
13
  {
13
14
  if (octave_val.is_string()) {
14
15
  return OR_String(octave_val).to_ruby();
16
+ } else if (octave_val.is_bool_matrix()) {
17
+ return OR_BooleanMatrix(octave_val).to_ruby();
15
18
  } else if (octave_val.is_bool_type()) {
16
19
  return (octave_val.bool_value() ? Qtrue : Qfalse);
17
20
  } else if (octave_val.is_cell()) {
@@ -4,7 +4,7 @@ module Octave
4
4
 
5
5
  MAJOR = 1
6
6
  MINOR = 0
7
- TINY = 3
7
+ TINY = 4
8
8
 
9
9
  STRING = [ MAJOR, MINOR, TINY ].join( "." )
10
10
  #:beta-tag:
@@ -155,27 +155,9 @@ class ConversionsTest < Test::Unit::TestCase
155
155
  assert_equal %w(foo bar baz), to_octave_to_ruby(cell_matrix)
156
156
  end
157
157
 
158
- def test_hmm
159
- struct_matrix = Octave::StructMatrix.new(17, 2, "name", "age", "married", "cats", "car")
160
- 17.times do |m|
161
- 2.times do |n|
162
- struct_matrix[m, n]["name"] = "Bob #{m}.#{n}"
163
- struct_matrix[m, n]["age"] = (rand * 100).to_i
164
- struct_matrix[m, n]["married"] = (rand > 0.5)
165
- struct_matrix[m, n]["cats"] = { "name" => "Kitty #{m}.#{n}" }
166
- struct_matrix[m, n]["car"] = nil
167
- end
168
- end
169
-
170
- data = {
171
- "foo" => struct_matrix,
172
- "bar" => [1,2,3,4],
173
- "baz" => struct_matrix
174
- }
175
-
176
- @driver.put_variable "data", data
177
- @driver.feval "save", "-V7", "/tmp/hmm.mat", "data"
178
- # assert_octave_and_ruby_equal data
179
-
158
+ def test_should_convert_boolean_matrix
159
+ assert_octave_and_ruby_equal [true, false, true]
160
+ boolean_matrix = @driver.feval "eval", "x = [1,2]; (x > 2 | x < 2)"
161
+ assert_equal [true, false], boolean_matrix
180
162
  end
181
163
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octave-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Younger
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-02-29 00:00:00 -07:00
12
+ date: 2008-05-14 00:00:00 -06:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 1.5.0
22
+ version: 1.5.1
23
23
  version:
24
24
  description: "== USAGE: require 'octave' engine = Octave::Engine.new engine.eval \"123.456 * 789.101112\" engine.rand(10) matrix = Octave::Matrix.new(20, 400) 20.times { |m| 400.times { |n| matrix[m, n] = rand } } engine.put_variable(\"m\", matrix) engine.save \"/tmp/20_x_400_matrix\" == REQUIREMENTS: * Octave * GCC or some other compiler to build the included extension * Mocha (For testing only)"
25
25
  email:
@@ -49,6 +49,8 @@ files:
49
49
  - ext/octave_api/octave_api.h
50
50
  - ext/octave_api/or-array.cpp
51
51
  - ext/octave_api/or-array.h
52
+ - ext/octave_api/or-boolean_matrix.cpp
53
+ - ext/octave_api/or-boolean_matrix.h
52
54
  - ext/octave_api/or-cell_matrix.cpp
53
55
  - ext/octave_api/or-cell_matrix.h
54
56
  - ext/octave_api/or-hash.cpp
@@ -94,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
96
  requirements: []
95
97
 
96
98
  rubyforge_project: octave-ruby
97
- rubygems_version: 1.0.1
99
+ rubygems_version: 1.1.1
98
100
  signing_key:
99
101
  specification_version: 2
100
102
  summary: A Ruby interface to the Octave interpreted language.