octave-ruby 1.0.3 → 1.0.4

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.
@@ -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.