hornetseye-linalg 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.document +1 -0
- data/COPYING +679 -0
- data/README.md +23 -0
- data/Rakefile +184 -0
- data/ext/dmatrix.cc +60 -0
- data/ext/dmatrix.hh +36 -0
- data/ext/error.hh +50 -0
- data/ext/init.cc +44 -0
- data/ext/node.cc +103 -0
- data/ext/node.hh +29 -0
- data/ext/rubyinc.hh +54 -0
- data/ext/rubytools.hh +33 -0
- data/ext/rubytools.tcc +32 -0
- data/ext/smatrix.cc +60 -0
- data/ext/smatrix.hh +36 -0
- data/lib/hornetseye-linalg/dmatrix.rb +33 -0
- data/lib/hornetseye-linalg/node.rb +41 -0
- data/lib/hornetseye-linalg/smatrix.rb +34 -0
- data/lib/hornetseye_linalg_ext.rb +24 -0
- data/test/tc_hornetseye_linalg.rb +62 -0
- data/test/ts_hornetseye_linalg.rb +18 -0
- metadata +118 -0
data/ext/node.hh
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
/* HornetsEye - Computer Vision with Ruby
|
2
|
+
Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Jan Wedekind
|
3
|
+
|
4
|
+
This program is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
16
|
+
#ifndef HORNETSEYE_NODE_HH
|
17
|
+
#define HORNETSEYE_NODE_HH
|
18
|
+
#include "rubyinc.hh"
|
19
|
+
|
20
|
+
class Node {
|
21
|
+
public:
|
22
|
+
static VALUE cRubyClass;
|
23
|
+
static VALUE mModule;
|
24
|
+
static VALUE registerRubyClass(VALUE module);
|
25
|
+
static VALUE wrapToDMatrix(VALUE rbSelf);
|
26
|
+
static VALUE wrapToSMatrix(VALUE rbSelf);
|
27
|
+
};
|
28
|
+
|
29
|
+
#endif
|
data/ext/rubyinc.hh
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
/* HornetsEye - Computer Vision with Ruby
|
2
|
+
Copyright (C) 2006, 2007 Jan Wedekind
|
3
|
+
|
4
|
+
This program is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
16
|
+
#ifndef HORNETSEYE_RUBYINC_HH
|
17
|
+
#define HORNETSEYE_RUBYINC_HH
|
18
|
+
|
19
|
+
#ifdef RSHIFT
|
20
|
+
#undef RSHIFT
|
21
|
+
#endif
|
22
|
+
|
23
|
+
#define gettimeofday rubygettimeofday
|
24
|
+
#define timezone rubygettimezone
|
25
|
+
#include <ruby.h>
|
26
|
+
// #include <version.h>
|
27
|
+
#undef timezone
|
28
|
+
#undef gettimeofday
|
29
|
+
#ifdef read
|
30
|
+
#undef read
|
31
|
+
#endif
|
32
|
+
#ifdef write
|
33
|
+
#undef write
|
34
|
+
#endif
|
35
|
+
#ifdef RGB
|
36
|
+
#undef RGB
|
37
|
+
#endif
|
38
|
+
|
39
|
+
#ifndef RUBY_VERSION_NUMBER
|
40
|
+
#define RUBY_VERSION_NUMBER ( RUBY_VERSION_MAJOR * 10000 + \
|
41
|
+
RUBY_VERSION_MINOR * 100 + \
|
42
|
+
RUBY_VERSION_TEENY )
|
43
|
+
#endif
|
44
|
+
|
45
|
+
#ifndef RUBY_METHOD_FUNC
|
46
|
+
#define RUBY_METHOD_FUNC(func) ((VALUE (*)(ANYARGS))func)
|
47
|
+
#endif
|
48
|
+
|
49
|
+
#ifndef xfree
|
50
|
+
#define xfree free
|
51
|
+
#endif
|
52
|
+
|
53
|
+
#endif
|
54
|
+
|
data/ext/rubytools.hh
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
/* HornetsEye - Computer Vision with Ruby
|
2
|
+
Copyright (C) 2006, 2007 Jan Wedekind
|
3
|
+
|
4
|
+
This program is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
16
|
+
#ifndef HORNETSEYE_RUBYTOOLS_HH
|
17
|
+
#define HORNETSEYE_RUBYTOOLS_HH
|
18
|
+
|
19
|
+
#include <complex>
|
20
|
+
#include "rubyinc.hh"
|
21
|
+
|
22
|
+
void checkType( VALUE rbValue, VALUE rbClass );
|
23
|
+
|
24
|
+
void checkStruct( VALUE rbValue, VALUE rbClass );
|
25
|
+
|
26
|
+
#define dataGetStruct(obj,klass,type,sval) { \
|
27
|
+
checkStruct( obj, klass ); \
|
28
|
+
Data_Get_Struct( obj, type, sval ); \
|
29
|
+
}
|
30
|
+
|
31
|
+
#include "rubytools.tcc"
|
32
|
+
|
33
|
+
#endif
|
data/ext/rubytools.tcc
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
/* HornetsEye - Computer Vision with Ruby
|
2
|
+
Copyright (C) 2006, 2007 Jan Wedekind
|
3
|
+
|
4
|
+
This program is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
16
|
+
#include <cassert>
|
17
|
+
#include "error.hh"
|
18
|
+
|
19
|
+
inline void checkType( VALUE rbValue, VALUE rbClass )
|
20
|
+
{
|
21
|
+
ERRORMACRO( rb_funcall( rbValue, rb_intern( "kind_of?" ), 1, rbClass ) ==
|
22
|
+
Qtrue, Error, ,
|
23
|
+
"Argument must be of class \"" << rb_class2name( rbClass )
|
24
|
+
<< "\"." );
|
25
|
+
}
|
26
|
+
|
27
|
+
inline void checkStruct( VALUE rbValue, VALUE rbClass )
|
28
|
+
{
|
29
|
+
Check_Type( rbValue, T_DATA );
|
30
|
+
checkType( rbValue, rbClass );
|
31
|
+
}
|
32
|
+
|
data/ext/smatrix.cc
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
/* HornetsEye - Computer Vision with Ruby
|
2
|
+
Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Jan Wedekind
|
3
|
+
|
4
|
+
This program is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
16
|
+
#include <algorithm>
|
17
|
+
#include <boost/shared_array.hpp>
|
18
|
+
#include "error.hh"
|
19
|
+
#include "rubytools.hh"
|
20
|
+
#include "smatrix.hh"
|
21
|
+
|
22
|
+
using namespace std;
|
23
|
+
|
24
|
+
VALUE SMatrix::mModule = Qnil;
|
25
|
+
|
26
|
+
VALUE SMatrix::cRubyClass = Qnil;
|
27
|
+
|
28
|
+
VALUE SMatrix::registerRubyClass(VALUE module)
|
29
|
+
{
|
30
|
+
mModule = module;
|
31
|
+
cRubyClass = rb_define_class_under(module, "SMatrix", rb_cObject);
|
32
|
+
rb_define_method(cRubyClass, "to_multiarray", RUBY_METHOD_FUNC(wrapToMultiArray), 0);
|
33
|
+
return cRubyClass;
|
34
|
+
}
|
35
|
+
|
36
|
+
void SMatrix::deleteRubyObject(void *ptr)
|
37
|
+
{
|
38
|
+
free((SMatrix *)ptr);
|
39
|
+
}
|
40
|
+
|
41
|
+
VALUE SMatrix::wrapToMultiArray(VALUE rbSelf)
|
42
|
+
{
|
43
|
+
VALUE rbRetVal = Qnil;
|
44
|
+
try {
|
45
|
+
VALUE mHornetseye = rb_define_module( "Hornetseye" );
|
46
|
+
SMatrix_ *smatrix;
|
47
|
+
dataGetStruct(rbSelf, cRubyClass, SMatrix_, smatrix);
|
48
|
+
int width = smatrix->hsize;
|
49
|
+
int height = smatrix->vsize;
|
50
|
+
VALUE cMalloc = rb_define_class_under(mHornetseye, "Malloc", rb_cObject);
|
51
|
+
VALUE rbMemory = Data_Wrap_Struct(cMalloc, 0, 0, smatrix->data);
|
52
|
+
rb_ivar_set(rbMemory, rb_intern("@size"), INT2NUM(width * height * sizeof(float)));
|
53
|
+
VALUE rbTypecode = rb_const_get(mHornetseye, rb_intern("SFLOAT"));
|
54
|
+
rbRetVal = rb_funcall(rb_const_get(mHornetseye, rb_intern("MultiArray")),
|
55
|
+
rb_intern("import"), 4, rbTypecode, rbMemory, INT2NUM(height), INT2NUM(width));
|
56
|
+
} catch( std::exception &e ) {
|
57
|
+
rb_raise( rb_eRuntimeError, "%s", e.what() );
|
58
|
+
};
|
59
|
+
return rbRetVal;
|
60
|
+
}
|
data/ext/smatrix.hh
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
/* HornetsEye - Computer Vision with Ruby
|
2
|
+
Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Jan Wedekind
|
3
|
+
|
4
|
+
This program is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU General Public License as published by
|
6
|
+
the Free Software Foundation, either version 3 of the License, or
|
7
|
+
(at your option) any later version.
|
8
|
+
|
9
|
+
This program is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU General Public License
|
15
|
+
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
16
|
+
#ifndef HORNETSEYE_SMATRIX_HH
|
17
|
+
#define HORNETSEYE_SMATRIX_HH
|
18
|
+
#include "rubyinc.hh"
|
19
|
+
|
20
|
+
typedef struct {
|
21
|
+
int vsize;
|
22
|
+
int hsize;
|
23
|
+
float *data;
|
24
|
+
} SMatrix_;
|
25
|
+
|
26
|
+
class SMatrix {
|
27
|
+
public:
|
28
|
+
static VALUE cRubyClass;
|
29
|
+
static VALUE mModule;
|
30
|
+
static VALUE registerRubyClass(VALUE module);
|
31
|
+
static void deleteRubyObject(void *ptr);
|
32
|
+
static VALUE wrapToMultiArray(VALUE rbSelf);
|
33
|
+
};
|
34
|
+
|
35
|
+
#endif
|
36
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# hornetseye-linalg - Linalg integration for Hornetseye
|
2
|
+
# Copyright (C) 2011 Jan Wedekind
|
3
|
+
#
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
module Linalg
|
17
|
+
|
18
|
+
class DMatrix
|
19
|
+
|
20
|
+
alias_method :orig_to_multiarray, :to_multiarray
|
21
|
+
|
22
|
+
def to_multiarray
|
23
|
+
source = self
|
24
|
+
retval = orig_to_multiarray.roll
|
25
|
+
retval.instance_eval { @source = source }
|
26
|
+
retval
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# hornetseye-linalg - Linalg integration for Hornetseye
|
2
|
+
# Copyright (C) 2011 Jan Wedekind
|
3
|
+
#
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
module Hornetseye
|
17
|
+
|
18
|
+
class Node
|
19
|
+
|
20
|
+
alias_method :orig_to_dmatrix, :to_dmatrix
|
21
|
+
|
22
|
+
def to_dmatrix
|
23
|
+
source = roll.to_dfloat.memorise
|
24
|
+
retval = source.orig_to_dmatrix
|
25
|
+
retval.instance_eval { @source = source }
|
26
|
+
retval
|
27
|
+
end
|
28
|
+
|
29
|
+
alias_method :orig_to_smatrix, :to_smatrix
|
30
|
+
|
31
|
+
def to_smatrix
|
32
|
+
source = roll.to_sfloat.memorise
|
33
|
+
retval = source.orig_to_smatrix
|
34
|
+
retval.instance_eval { @source = source }
|
35
|
+
retval
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# hornetseye-linalg - Linalg integration for Hornetseye
|
2
|
+
# Copyright (C) 2011 Jan Wedekind
|
3
|
+
#
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
module Linalg
|
17
|
+
|
18
|
+
class SMatrix
|
19
|
+
|
20
|
+
alias_method :orig_to_multiarray, :to_multiarray
|
21
|
+
|
22
|
+
def to_multiarray
|
23
|
+
source = self
|
24
|
+
retval = orig_to_multiarray.roll
|
25
|
+
retval.instance_eval { @source = source }
|
26
|
+
retval
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# hornetseye-hypercomplex - Linalg integration for Hornetseye
|
2
|
+
# Copyright (C) 2011 Jan Wedekind
|
3
|
+
#
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
require 'malloc'
|
18
|
+
require 'multiarray'
|
19
|
+
require 'linalg'
|
20
|
+
|
21
|
+
require 'hornetseye-linalg/node'
|
22
|
+
require 'hornetseye-linalg/dmatrix'
|
23
|
+
require 'hornetseye-linalg/smatrix'
|
24
|
+
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# hornetseye-hypercomplex - Linalg integration for Hornetseye
|
2
|
+
# Copyright (C) 2011 Jan Wedekind
|
3
|
+
#
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
require 'test/unit'
|
18
|
+
begin
|
19
|
+
require 'rubygems'
|
20
|
+
rescue LoadError
|
21
|
+
end
|
22
|
+
Kernel::require 'hornetseye_linalg'
|
23
|
+
|
24
|
+
class TC_Hornetseye_Linalg < Test::Unit::TestCase
|
25
|
+
|
26
|
+
D = Hornetseye::DFLOAT
|
27
|
+
S = Hornetseye::SFLOAT
|
28
|
+
|
29
|
+
def M( *args )
|
30
|
+
Hornetseye::MultiArray *args
|
31
|
+
end
|
32
|
+
|
33
|
+
def setup
|
34
|
+
@m1 = M(D, 2)[[1, 2, 3], [4, 5, 6]]
|
35
|
+
@m2 = M(S, 2)[[1, 2, 3], [4, 5, 6]]
|
36
|
+
end
|
37
|
+
|
38
|
+
def teardown
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_to_dmatrix
|
42
|
+
d = @m1.to_dmatrix
|
43
|
+
for j in 0 ... @m1.shape[1]
|
44
|
+
for i in 0 ... @m1.shape[0]
|
45
|
+
assert_equal @m1[j][i], d[j, i]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
assert_equal @m1, d.to_multiarray
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_to_smatrix
|
52
|
+
s = @m2.to_smatrix
|
53
|
+
for j in 0 ... @m2.shape[1]
|
54
|
+
for i in 0 ... @m2.shape[0]
|
55
|
+
assert_equal @m2[j][i], s[j, i]
|
56
|
+
end
|
57
|
+
end
|
58
|
+
assert_equal @m2, s.to_multiarray
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|