ruby-fann 1.0.3 → 1.1.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,7 @@
1
+ == 1.1.3 2010-03-08
2
+ * 1 major enhancement -
3
+ * ruby 1.9 compatibility:
4
+
1
5
  == 1.0.3 2009-12-24
2
6
  * 1 minor bug fix:
3
7
  * Fix segfaulting training in irb
data/Manifest.txt CHANGED
@@ -8,9 +8,11 @@ config/requirements.rb
8
8
  ext/ruby_fann/MANIFEST
9
9
  ext/ruby_fann/Makefile
10
10
  ext/ruby_fann/extconf.rb
11
+ ext/ruby_fann/ruby_compat.h
11
12
  ext/ruby_fann/fann_augment.h
12
13
  ext/ruby_fann/neural_network.c
13
14
  ext/ruby_fann/doublefann.h
15
+ ext/ruby_fann/config.h
14
16
  ext/ruby_fann/fann_error.h
15
17
  ext/ruby_fann/fann_activation.h
16
18
  ext/ruby_fann/fann_data.h
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- require 'config/requirements'
2
- require 'config/hoe' # setup Hoe + all gem configuration
3
-
1
+ require 'config/requirements'
2
+ require 'config/hoe' # setup Hoe + all gem configuration
3
+
4
4
  Dir['tasks/**/*.rake'].each { |rake| load rake }
data/config/hoe.rb CHANGED
@@ -58,7 +58,7 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
58
58
  p.clean_globs |= ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store'] #An array of file patterns to delete on clean.
59
59
 
60
60
  # == Optional
61
- p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
61
+ #p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
62
62
  #p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
63
63
 
64
64
  p.spec_extras = {:extensions => "ext/ruby_fann/extconf.rb"} # A hash of extra values to set in the gemspec.
@@ -4,67 +4,81 @@ SHELL = /bin/sh
4
4
  #### Start of system configuration section. ####
5
5
 
6
6
  srcdir = .
7
- topdir = /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/universal-darwin10.0
8
- hdrdir = $(topdir)
9
- VPATH = $(srcdir):$(topdir):$(hdrdir)
7
+ topdir = /usr/local/include/ruby-1.9.1
8
+ hdrdir = /usr/local/include/ruby-1.9.1
9
+ arch_hdrdir = /usr/local/include/ruby-1.9.1/$(arch)
10
+ VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
11
+ prefix = $(DESTDIR)/usr/local
10
12
  exec_prefix = $(prefix)
11
- prefix = $(DESTDIR)/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr
12
- sharedstatedir = $(prefix)/com
13
- mandir = $(DESTDIR)/usr/share/man
14
- psdir = $(docdir)
15
- oldincludedir = $(DESTDIR)/usr/include
13
+ vendorhdrdir = $(rubyhdrdir)/vendor_ruby
14
+ sitehdrdir = $(rubyhdrdir)/site_ruby
15
+ rubyhdrdir = $(includedir)/$(RUBY_INSTALL_NAME)-$(ruby_version)
16
+ vendordir = $(libdir)/$(RUBY_INSTALL_NAME)/vendor_ruby
17
+ sitedir = $(libdir)/$(RUBY_INSTALL_NAME)/site_ruby
18
+ mandir = $(datarootdir)/man
16
19
  localedir = $(datarootdir)/locale
17
- bindir = $(exec_prefix)/bin
18
- libexecdir = $(exec_prefix)/libexec
19
- sitedir = $(DESTDIR)/Library/Ruby/Site
20
+ libdir = $(exec_prefix)/lib
21
+ psdir = $(docdir)
22
+ pdfdir = $(docdir)
23
+ dvidir = $(docdir)
20
24
  htmldir = $(docdir)
21
- vendorarchdir = $(vendorlibdir)/$(sitearch)
25
+ infodir = $(datarootdir)/info
26
+ docdir = $(datarootdir)/doc/$(PACKAGE)
27
+ oldincludedir = $(DESTDIR)/usr/include
22
28
  includedir = $(prefix)/include
23
- infodir = $(DESTDIR)/usr/share/info
24
- vendorlibdir = $(vendordir)/$(ruby_version)
29
+ localstatedir = $(prefix)/var
30
+ sharedstatedir = $(prefix)/com
25
31
  sysconfdir = $(prefix)/etc
26
- libdir = $(exec_prefix)/lib
27
- sbindir = $(exec_prefix)/sbin
28
- rubylibdir = $(libdir)/ruby/$(ruby_version)
29
- docdir = $(datarootdir)/doc/$(PACKAGE)
30
- dvidir = $(docdir)
31
- vendordir = $(libdir)/ruby/vendor_ruby
32
+ datadir = $(datarootdir)
32
33
  datarootdir = $(prefix)/share
33
- pdfdir = $(docdir)
34
+ libexecdir = $(exec_prefix)/libexec
35
+ sbindir = $(exec_prefix)/sbin
36
+ bindir = $(exec_prefix)/bin
37
+ rubylibdir = $(libdir)/$(ruby_install_name)/$(ruby_version)
34
38
  archdir = $(rubylibdir)/$(arch)
35
- sitearchdir = $(sitelibdir)/$(sitearch)
36
- datadir = $(datarootdir)
37
- localstatedir = $(prefix)/var
38
39
  sitelibdir = $(sitedir)/$(ruby_version)
40
+ sitearchdir = $(sitelibdir)/$(sitearch)
41
+ vendorlibdir = $(vendordir)/$(ruby_version)
42
+ vendorarchdir = $(vendorlibdir)/$(sitearch)
39
43
 
40
44
  CC = gcc
41
- LIBRUBY = $(LIBRUBY_SO)
45
+ CXX = g++
46
+ LIBRUBY = $(LIBRUBY_A)
42
47
  LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
43
48
  LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME)
44
- LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)
49
+ LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
50
+ OUTFLAG = -o
51
+ COUTFLAG = -o
45
52
 
46
53
  RUBY_EXTCONF_H =
47
- CFLAGS = -fno-common -arch i386 -arch x86_64 -g -Os -pipe -fno-common -DENABLE_DTRACE -fno-common -pipe -fno-common $(cflags)
48
- INCFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
54
+ cflags = $(optflags) $(debugflags) $(warnflags)
55
+ optflags = -O2
56
+ debugflags = -g
57
+ warnflags = -Wall -Wno-parentheses
58
+ CFLAGS = -fno-common $(cflags) -pipe -fno-common
59
+ INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir)
49
60
  DEFS =
50
61
  CPPFLAGS = -DHAVE_DOUBLEFANN_H -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE $(DEFS) $(cppflags)
51
- CXXFLAGS = $(CFLAGS)
52
- ldflags = -L. -arch i386 -arch x86_64
62
+ CXXFLAGS = $(CFLAGS) $(cxxflags)
63
+ ldflags = -L. -L/usr/local/lib
53
64
  dldflags =
54
65
  archflag =
55
66
  DLDFLAGS = $(ldflags) $(dldflags) $(archflag)
56
- LDSHARED = cc -arch i386 -arch x86_64 -pipe -bundle -undefined dynamic_lookup
67
+ LDSHARED = cc -dynamic -bundle -undefined suppress -flat_namespace
68
+ LDSHAREDXX = $(LDSHARED)
57
69
  AR = ar
58
70
  EXEEXT =
59
71
 
60
72
  RUBY_INSTALL_NAME = ruby
61
73
  RUBY_SO_NAME = ruby
62
- arch = universal-darwin10.0
63
- sitearch = universal-darwin10.0
64
- ruby_version = 1.8
65
- ruby = /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
74
+ arch = i386-darwin10.2.0
75
+ sitearch = i386-darwin10.2.0
76
+ ruby_version = 1.9.1
77
+ ruby = /usr/local/bin/ruby
66
78
  RUBY = $(ruby)
67
79
  RM = rm -f
80
+ RM_RF = $(RUBY) -run -e rm -- -rf
81
+ RMDIRS = $(RUBY) -run -e rmdir -- -p
68
82
  MAKEDIRS = mkdir -p
69
83
  INSTALL = /usr/bin/install -c
70
84
  INSTALL_PROG = $(INSTALL) -m 0755
@@ -81,14 +95,15 @@ DEFFILE =
81
95
 
82
96
  CLEANFILES = mkmf.log
83
97
  DISTCLEANFILES =
98
+ DISTCLEANDIRS =
84
99
 
85
100
  extout =
86
101
  extout_prefix =
87
102
  target_prefix =
88
103
  LOCAL_LIBS =
89
- LIBS = $(LIBRUBYARG_SHARED) -lpthread -ldl
90
- SRCS = neural_network.c
91
- OBJS = neural_network.o
104
+ LIBS = -lpthread -ldl -lobjc
105
+ SRCS = neural_network.c doublefann.c
106
+ OBJS = neural_network.o doublefann.o
92
107
  TARGET = neural_network
93
108
  DLLIB = $(TARGET).bundle
94
109
  EXTSTATIC =
@@ -98,22 +113,31 @@ BINDIR = $(bindir)
98
113
  RUBYCOMMONDIR = $(sitedir)$(target_prefix)
99
114
  RUBYLIBDIR = $(sitelibdir)$(target_prefix)
100
115
  RUBYARCHDIR = $(sitearchdir)$(target_prefix)
116
+ HDRDIR = $(rubyhdrdir)/ruby$(target_prefix)
117
+ ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix)
101
118
 
102
119
  TARGET_SO = $(DLLIB)
103
- CLEANLIBS = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map
104
- CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
120
+ CLEANLIBS = $(TARGET).bundle
121
+ CLEANOBJS = *.o *.bak
105
122
 
106
- all: $(DLLIB)
107
- static: $(STATIC_LIB)
123
+ all: $(DLLIB)
124
+ static: $(STATIC_LIB)
108
125
 
109
- clean:
126
+ clean-rb-default::
127
+ clean-rb::
128
+ clean-so::
129
+ clean: clean-so clean-rb-default clean-rb
110
130
  @-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
111
131
 
112
- distclean: clean
132
+ distclean-rb-default::
133
+ distclean-rb::
134
+ distclean-so::
135
+ distclean: clean distclean-so distclean-rb-default distclean-rb
113
136
  @-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
114
137
  @-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
138
+ @-$(RMDIRS) $(DISTCLEANDIRS)
115
139
 
116
- realclean: distclean
140
+ realclean: distclean
117
141
  install: install-so install-rb
118
142
 
119
143
  install-so: $(RUBYARCHDIR)
@@ -134,24 +158,24 @@ site-install-rb: install-rb
134
158
  .SUFFIXES: .c .m .cc .cxx .cpp .C .o
135
159
 
136
160
  .cc.o:
137
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
161
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
138
162
 
139
163
  .cxx.o:
140
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
164
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
141
165
 
142
166
  .cpp.o:
143
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
167
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
144
168
 
145
169
  .C.o:
146
- $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
170
+ $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $<
147
171
 
148
172
  .c.o:
149
- $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
173
+ $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
150
174
 
151
- $(DLLIB): $(OBJS)
152
- @-$(RM) $@
175
+ $(DLLIB): $(OBJS) Makefile
176
+ @-$(RM) $(@)
153
177
  $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
154
178
 
155
179
 
156
180
 
157
- $(OBJS): ruby.h defines.h
181
+ $(OBJS): $(hdrdir)/ruby.h $(hdrdir)/ruby/defines.h $(arch_hdrdir)/ruby/config.h
@@ -0,0 +1,65 @@
1
+ /* src/include/config.h. Generated by configure. */
2
+ /* config.in. Generated from configure.in by autoheader. */
3
+
4
+ /* Define to 1 if you have the <dlfcn.h> header file. */
5
+ #define HAVE_DLFCN_H 1
6
+
7
+ /* Define to 1 if you have the `gettimeofday' function. */
8
+ #define HAVE_GETTIMEOFDAY 1
9
+
10
+ /* Define to 1 if you have the <inttypes.h> header file. */
11
+ #define HAVE_INTTYPES_H 1
12
+
13
+ /* Define to 1 if you have the <memory.h> header file. */
14
+ #define HAVE_MEMORY_H 1
15
+
16
+ /* Define to 1 if you have the <stdint.h> header file. */
17
+ #define HAVE_STDINT_H 1
18
+
19
+ /* Define to 1 if you have the <stdlib.h> header file. */
20
+ #define HAVE_STDLIB_H 1
21
+
22
+ /* Define to 1 if you have the <strings.h> header file. */
23
+ #define HAVE_STRINGS_H 1
24
+
25
+ /* Define to 1 if you have the <string.h> header file. */
26
+ #define HAVE_STRING_H 1
27
+
28
+ /* Define to 1 if you have the <sys/stat.h> header file. */
29
+ #define HAVE_SYS_STAT_H 1
30
+
31
+ /* Define to 1 if you have the <sys/types.h> header file. */
32
+ #define HAVE_SYS_TYPES_H 1
33
+
34
+ /* Define to 1 if you have the <unistd.h> header file. */
35
+ #define HAVE_UNISTD_H 1
36
+
37
+ /* Name of package */
38
+ #define PACKAGE "fann"
39
+
40
+ /* Define to the address where bug reports for this package should be sent. */
41
+ #define PACKAGE_BUGREPORT ""
42
+
43
+ /* Define to the full name of this package. */
44
+ #define PACKAGE_NAME ""
45
+
46
+ /* Define to the full name and version of this package. */
47
+ #define PACKAGE_STRING ""
48
+
49
+ /* Define to the one symbol short name of this package. */
50
+ #define PACKAGE_TARNAME ""
51
+
52
+ /* Define to the version of this package. */
53
+ #define PACKAGE_VERSION ""
54
+
55
+ /* Define to 1 if you have the ANSI C header files. */
56
+ #define STDC_HEADERS 1
57
+
58
+ /* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
59
+ #define TIME_WITH_SYS_TIME 1
60
+
61
+ /* Version number of package */
62
+ #define VERSION "2.1.0"
63
+
64
+ /* Define to empty if `const' does not conform to ANSI C. */
65
+ /* #undef const */
@@ -1,3 +1,5 @@
1
+ #include "ruby.h"
2
+ #include "ruby_compat.h"
1
3
 
2
4
  FANN_EXTERNAL struct fann_train_data * FANN_API fann_create_train_from_rb_ary2(
3
5
  unsigned int num_data,
@@ -19,9 +21,9 @@ FANN_EXTERNAL struct fann_train_data * FANN_API fann_create_train_from_rb_ary(
19
21
  unsigned int i, j;
20
22
  fann_type *data_input, *data_output;
21
23
  struct fann_train_data *data = (struct fann_train_data *)malloc(sizeof(struct fann_train_data));
22
- unsigned int num_input = RARRAY(RARRAY(inputs)->ptr[0])->len;
23
- unsigned int num_output =RARRAY(RARRAY(outputs)->ptr[0])->len;
24
- unsigned int num_data = RARRAY(inputs)->len;
24
+ unsigned int num_input = RARRAY_LEN(RARRAY_PTR(inputs)[0]);
25
+ unsigned int num_output =RARRAY_LEN(RARRAY_PTR(outputs)[0]);
26
+ unsigned int num_data = RARRAY_LEN(inputs);
25
27
 
26
28
  if(data == NULL) {
27
29
  fann_error(NULL, FANN_E_CANT_ALLOCATE_MEM);
@@ -72,29 +74,29 @@ FANN_EXTERNAL struct fann_train_data * FANN_API fann_create_train_from_rb_ary(
72
74
  data->input[i] = data_input;
73
75
  data_input += num_input;
74
76
 
75
- inputs_i = RARRAY(inputs)->ptr[i];
76
- outputs_i = RARRAY(outputs)->ptr[i];
77
+ inputs_i = RARRAY_PTR(inputs)[i];
78
+ outputs_i = RARRAY_PTR(outputs)[i];
77
79
 
78
- if(RARRAY(inputs_i)->len != num_input)
80
+ if(RARRAY_LEN(inputs_i) != num_input)
79
81
  {
80
82
  rb_raise (
81
83
  rb_eRuntimeError,
82
84
  "Number of inputs at [%d] is inconsistent: (%d != %d)",
83
- i, RARRAY(inputs_i)->len, num_input);
85
+ i, RARRAY_LEN(inputs_i), num_input);
84
86
  }
85
87
 
86
- if(RARRAY(outputs_i)->len != num_output)
88
+ if(RARRAY_LEN(outputs_i) != num_output)
87
89
  {
88
90
  rb_raise (
89
91
  rb_eRuntimeError,
90
92
  "Number of outputs at [%d] is inconsistent: (%d != %d)",
91
- i, RARRAY(outputs_i)->len, num_output);
93
+ i, RARRAY_LEN(outputs_i), num_output);
92
94
  }
93
95
 
94
96
 
95
97
  for(j = 0; j != num_input; j++)
96
98
  {
97
- data->input[i][j]=NUM2DBL(RARRAY(inputs_i)->ptr[j]);
99
+ data->input[i][j]=NUM2DBL(RARRAY_PTR(inputs_i)[j]);
98
100
  }
99
101
 
100
102
  data->output[i] = data_output;
@@ -102,7 +104,7 @@ FANN_EXTERNAL struct fann_train_data * FANN_API fann_create_train_from_rb_ary(
102
104
 
103
105
  for(j = 0; j != num_output; j++)
104
106
  {
105
- data->output[i][j]=NUM2DBL(RARRAY(outputs_i)->ptr[j]);
107
+ data->output[i][j]=NUM2DBL(RARRAY_PTR(outputs_i)[j]);
106
108
  }
107
109
  }
108
110
 
@@ -1,4 +1,5 @@
1
1
  #include "ruby.h"
2
+ #include "ruby_compat.h"
2
3
  #include "doublefann.h"
3
4
  #include "fann_data.h"
4
5
  #include "fann_augment.h"
@@ -18,6 +19,7 @@ Check_Type(attr_name, T_FIXNUM); \
18
19
  struct fann* f; \
19
20
  Data_Get_Struct(self, struct fann, f); \
20
21
  fann_fn(f, NUM2INT(attr_name)); \
22
+ return 0;
21
23
 
22
24
  #define RETURN_FANN_UINT(fn) \
23
25
  struct fann* f; \
@@ -29,6 +31,7 @@ Check_Type(attr_name, T_FIXNUM); \
29
31
  struct fann* f; \
30
32
  Data_Get_Struct(self, struct fann, f); \
31
33
  fann_fn(f, NUM2UINT(attr_name)); \
34
+ return 0;
32
35
 
33
36
  // Converts float return values to a double with same precision, avoids floating point errors.
34
37
  #define RETURN_FANN_FLT(fn) \
@@ -275,7 +278,7 @@ static VALUE fann_initialize(VALUE self, VALUE hash)
275
278
  Check_Type(num_outputs, T_FIXNUM);
276
279
 
277
280
  // Initialize layers:
278
- unsigned int num_layers=RARRAY(hidden_neurons)->len + 2; // NUM2INT(num_inputs) + NUM2INT(num_outputs) + RARRAY(hidden_neurons)->len;
281
+ unsigned int num_layers=RARRAY_LEN(hidden_neurons) + 2;
279
282
  unsigned int layers[num_layers];
280
283
 
281
284
  // Input:
@@ -285,7 +288,7 @@ static VALUE fann_initialize(VALUE self, VALUE hash)
285
288
  // Hidden:
286
289
  int i;
287
290
  for (i=1; i<=num_layers-2; i++) {
288
- layers[i]=NUM2UINT(RARRAY(hidden_neurons)->ptr[i-1]);
291
+ layers[i]=NUM2UINT(RARRAY_PTR(hidden_neurons)[i-1]);
289
292
  }
290
293
 
291
294
  ann = fann_create_standard_array(num_layers, layers);
@@ -347,19 +350,19 @@ static VALUE fann_train_data_initialize(VALUE self, VALUE hash)
347
350
  rb_raise (rb_eRuntimeError, "[desired_outputs] must be present when [inputs] used.");
348
351
  }
349
352
 
350
- if (RARRAY(inputs)->len < 1)
353
+ if (RARRAY_LEN(inputs) < 1)
351
354
  {
352
355
  rb_raise (rb_eRuntimeError, "[inputs/desired_outputs] must contain at least one value.");
353
356
  }
354
357
 
355
358
  // The data is here, start constructing:
356
- if(RARRAY(inputs)->len != RARRAY(desired_outputs)->len)
359
+ if(RARRAY_LEN(inputs) != RARRAY_LEN(desired_outputs))
357
360
  {
358
361
  rb_raise (
359
362
  rb_eRuntimeError,
360
363
  "Number of inputs must match number of outputs: (%d != %d)",
361
- RARRAY(inputs)->len,
362
- RARRAY(desired_outputs)->len);
364
+ (int)RARRAY_LEN(inputs),
365
+ (int)RARRAY_LEN(desired_outputs));
363
366
  }
364
367
 
365
368
  train_data = fann_create_train_from_rb_ary(inputs, desired_outputs);
@@ -1067,11 +1070,11 @@ static VALUE run (VALUE self, VALUE inputs)
1067
1070
  fann_type* outputs;
1068
1071
 
1069
1072
  // Convert inputs to type needed for NN:
1070
- unsigned int len = RARRAY(inputs)->len;
1073
+ unsigned int len = RARRAY_LEN(inputs);
1071
1074
  fann_type fann_inputs[len];
1072
1075
  for (i=0; i<len; i++)
1073
1076
  {
1074
- fann_inputs[i] = NUM2DBL(RARRAY(inputs)->ptr[i]);
1077
+ fann_inputs[i] = NUM2DBL(RARRAY_PTR(inputs)[i]);
1075
1078
  }
1076
1079
 
1077
1080
 
@@ -1391,12 +1394,12 @@ static VALUE set_cascade_activation_functions(VALUE self, VALUE cascade_activati
1391
1394
  struct fann* f;
1392
1395
  Data_Get_Struct (self, struct fann, f);
1393
1396
 
1394
- unsigned int cnt = RARRAY(cascade_activation_functions)->len;
1397
+ unsigned int cnt = RARRAY_LEN(cascade_activation_functions);
1395
1398
  enum fann_activationfunc_enum fann_activation_functions[cnt];
1396
1399
  int i;
1397
1400
  for (i=0; i<cnt; i++)
1398
1401
  {
1399
- fann_activation_functions[i] = sym_to_activation_function(RARRAY(cascade_activation_functions)->ptr[i]);
1402
+ fann_activation_functions[i] = sym_to_activation_function(RARRAY_PTR(cascade_activation_functions)[i]);
1400
1403
  }
1401
1404
 
1402
1405
  fann_set_cascade_activation_functions(f, fann_activation_functions, cnt);
@@ -1444,6 +1447,7 @@ static VALUE get_cascade_num_candidate_groups(VALUE self)
1444
1447
  static VALUE set_cascade_num_candidate_groups(VALUE self, VALUE cascade_num_candidate_groups)
1445
1448
  {
1446
1449
  SET_FANN_UINT(cascade_num_candidate_groups, fann_set_cascade_num_candidate_groups);
1450
+ return 0;
1447
1451
  }
1448
1452
 
1449
1453
  /** The cascade activation steepnesses array is an array of the different activation functions used by
@@ -1454,12 +1458,12 @@ static VALUE set_cascade_activation_steepnesses(VALUE self, VALUE cascade_activa
1454
1458
  struct fann* f;
1455
1459
  Data_Get_Struct (self, struct fann, f);
1456
1460
 
1457
- unsigned int cnt = RARRAY(cascade_activation_steepnesses)->len;
1461
+ unsigned int cnt = RARRAY_LEN(cascade_activation_steepnesses);
1458
1462
  fann_type fann_activation_steepnesses[cnt];
1459
1463
  int i;
1460
1464
  for (i=0; i<cnt; i++)
1461
1465
  {
1462
- fann_activation_steepnesses[i] = NUM2DBL(RARRAY(cascade_activation_steepnesses)->ptr[i]);
1466
+ fann_activation_steepnesses[i] = NUM2DBL(RARRAY_PTR(cascade_activation_steepnesses)[i]);
1463
1467
  }
1464
1468
 
1465
1469
  fann_set_cascade_activation_steepnesses(f, fann_activation_steepnesses, cnt);
@@ -1549,8 +1553,8 @@ void Init_neural_network ()
1549
1553
  rb_define_method(m_rb_fann_standard_class, "get_num_output", get_num_output, 0);
1550
1554
  rb_define_method(m_rb_fann_standard_class, "get_total_connections", get_total_connections, 0);
1551
1555
  rb_define_method(m_rb_fann_standard_class, "get_total_neurons", get_total_neurons, 0);
1552
- rb_define_method(m_rb_fann_standard_class, "get_train_error_function", get_train_error_function, 0);
1553
- rb_define_method(m_rb_fann_standard_class, "set_train_error_function", set_train_error_function, 1);
1556
+ // rb_define_method(m_rb_fann_standard_class, "get_train_error_function", get_train_error_function, 0);
1557
+ // rb_define_method(m_rb_fann_standard_class, "set_train_error_function", set_train_error_function, 1);
1554
1558
  rb_define_method(m_rb_fann_standard_class, "print_connections", print_connections, 0);
1555
1559
  rb_define_method(m_rb_fann_standard_class, "print_parameters", print_parameters, 0);
1556
1560
  rb_define_method(m_rb_fann_standard_class, "randomize_weights", randomize_weights, 2);
@@ -1611,7 +1615,7 @@ void Init_neural_network ()
1611
1615
  rb_define_method(m_rb_fann_shortcut_class, "set_activation_function", set_activation_function, 3);
1612
1616
  rb_define_method(m_rb_fann_shortcut_class, "set_activation_function_hidden", set_activation_function_hidden, 1);
1613
1617
  rb_define_method(m_rb_fann_shortcut_class, "set_activation_function_layer", set_activation_function_layer, 2);
1614
- rb_define_method(m_rb_fann_standard_class, "get_activation_function", get_activation_function, 2);
1618
+ rb_define_method(m_rb_fann_shortcut_class, "get_activation_function", get_activation_function, 2);
1615
1619
  rb_define_method(m_rb_fann_shortcut_class, "set_activation_function_output", set_activation_function_output, 1);
1616
1620
  rb_define_method(m_rb_fann_shortcut_class, "get_activation_steepness", get_activation_steepness, 2);
1617
1621
  rb_define_method(m_rb_fann_shortcut_class, "set_activation_steepness", set_activation_steepness, 3);
@@ -1648,8 +1652,8 @@ void Init_neural_network ()
1648
1652
  rb_define_method(m_rb_fann_shortcut_class, "get_num_output", get_num_output, 0);
1649
1653
  rb_define_method(m_rb_fann_shortcut_class, "get_total_connections", get_total_connections, 0);
1650
1654
  rb_define_method(m_rb_fann_shortcut_class, "get_total_neurons", get_total_neurons, 0);
1651
- rb_define_method(m_rb_fann_shortcut_class, "get_train_error_function", get_train_error_function, 0);
1652
- rb_define_method(m_rb_fann_shortcut_class, "set_train_error_function", set_train_error_function, 1);
1655
+ // rb_define_method(m_rb_fann_shortcut_class, "get_train_error_function", get_train_error_function, 0);
1656
+ // rb_define_method(m_rb_fann_shortcut_class, "set_train_error_function", set_train_error_function, 1);
1653
1657
  rb_define_method(m_rb_fann_shortcut_class, "print_connections", print_connections, 0);
1654
1658
  rb_define_method(m_rb_fann_shortcut_class, "print_parameters", print_parameters, 0);
1655
1659
  rb_define_method(m_rb_fann_shortcut_class, "randomize_weights", randomize_weights, 2);
@@ -0,0 +1,12 @@
1
+ // For Pre-1.9 ruby:
2
+ #ifndef RUBY_19
3
+ #ifndef RFLOAT_VALUE
4
+ #define RFLOAT_VALUE(v) (RFLOAT(v)->value)
5
+ #endif
6
+ #ifndef RARRAY_LEN
7
+ #define RARRAY_LEN(v) (RARRAY(v)->len)
8
+ #endif
9
+ #ifndef RARRAY_PTR
10
+ #define RARRAY_PTR(v) (RARRAY(v)->ptr)
11
+ #endif
12
+ #endif
@@ -48,8 +48,8 @@ module RubyFann
48
48
  fillcolor = "transparent" # : "khaki3"
49
49
  layer = neuron[:layer]
50
50
  fillcolor = case layer
51
- when 0: @input_layer_color
52
- when max_layer: @output_layer_color
51
+ when 0 then @input_layer_color
52
+ when max_layer then @output_layer_color
53
53
  else; @hidden_layer_colors[(layer-1) % @hidden_layer_colors.length]
54
54
  end
55
55
 
@@ -1,7 +1,7 @@
1
1
  module RubyFann #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
- MINOR = 0
4
+ MINOR = 1
5
5
  TINY = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
data/neurotica1.png CHANGED
Binary file
data/neurotica2.vrml CHANGED
@@ -4,7 +4,7 @@ Group { children [
4
4
  scale 0.028 0.028 0.028
5
5
  children [
6
6
  Background { skyColor 1.000 1.000 1.000 }
7
- # node 2159389060
7
+ # node 2152233720
8
8
  Transform {
9
9
  translation 6.000 47.000 0.000
10
10
  scale 1.800 1.800 1.800
@@ -24,7 +24,7 @@ Transform {
24
24
  }
25
25
  ]
26
26
  }
27
- # node 2159388180
27
+ # node 2152233020
28
28
  Transform {
29
29
  translation 50.000 7.000 0.000
30
30
  scale 1.800 1.800 1.800
@@ -44,7 +44,7 @@ Transform {
44
44
  }
45
45
  ]
46
46
  }
47
- # edge 2159389060 -> 2159388180
47
+ # edge 2152233720 -> 2152233020
48
48
  Group { children [
49
49
  Transform {
50
50
  children [
@@ -79,7 +79,7 @@ Transform {
79
79
  translation 24.000 17.000 0.000
80
80
  }
81
81
  ] }
82
- # node 2159388580
82
+ # node 2152233580
83
83
  Transform {
84
84
  translation 28.000 47.000 0.000
85
85
  scale 1.800 1.800 1.800
@@ -99,7 +99,7 @@ Transform {
99
99
  }
100
100
  ]
101
101
  }
102
- # edge 2159388580 -> 2159388180
102
+ # edge 2152233580 -> 2152233020
103
103
  Group { children [
104
104
  Transform {
105
105
  children [
@@ -134,7 +134,7 @@ Transform {
134
134
  translation 35.000 17.000 0.000
135
135
  }
136
136
  ] }
137
- # node 2159388480
137
+ # node 2152233440
138
138
  Transform {
139
139
  translation 50.000 47.000 0.000
140
140
  scale 1.800 1.800 1.800
@@ -154,7 +154,7 @@ Transform {
154
154
  }
155
155
  ]
156
156
  }
157
- # edge 2159388480 -> 2159388180
157
+ # edge 2152233440 -> 2152233020
158
158
  Group { children [
159
159
  Transform {
160
160
  children [
@@ -189,7 +189,7 @@ Transform {
189
189
  translation 46.000 17.000 0.000
190
190
  }
191
191
  ] }
192
- # node 2159388380
192
+ # node 2152233300
193
193
  Transform {
194
194
  translation 72.000 47.000 0.000
195
195
  scale 1.800 1.800 1.800
@@ -209,7 +209,7 @@ Transform {
209
209
  }
210
210
  ]
211
211
  }
212
- # edge 2159388380 -> 2159388180
212
+ # edge 2152233300 -> 2152233020
213
213
  Group { children [
214
214
  Transform {
215
215
  children [
@@ -244,7 +244,7 @@ Transform {
244
244
  translation 57.000 17.000 0.000
245
245
  }
246
246
  ] }
247
- # node 2159388280
247
+ # node 2152233160
248
248
  Transform {
249
249
  translation 94.000 47.000 0.000
250
250
  scale 1.800 1.800 1.800
@@ -264,7 +264,7 @@ Transform {
264
264
  }
265
265
  ]
266
266
  }
267
- # edge 2159388280 -> 2159388180
267
+ # edge 2152233160 -> 2152233020
268
268
  Group { children [
269
269
  Transform {
270
270
  children [
data/script/txt2html CHANGED
@@ -22,9 +22,9 @@ class Fixnum
22
22
  return 'th' if (10..19).include?(self % 100)
23
23
  # others
24
24
  case self % 10
25
- when 1: return 'st'
26
- when 2: return 'nd'
27
- when 3: return 'rd'
25
+ when 1 then return 'st'
26
+ when 2 then return 'nd'
27
+ when 3 then return 'rd'
28
28
  else return 'th'
29
29
  end
30
30
  end
@@ -317,39 +317,39 @@ class RubyFannTest < Test::Unit::TestCase
317
317
  end
318
318
 
319
319
  def test_cascade_output_change_fraction
320
- verify_fann_attribute(:cascade_output_change_fraction, 0.222)
320
+ verify_fann_attribute(:cascade_output_change_fraction, 0.222, true)
321
321
  end
322
322
 
323
323
  def test_cascade_output_stagnation_epochs
324
- verify_fann_attribute(:cascade_output_stagnation_epochs, 4)
324
+ verify_fann_attribute(:cascade_output_stagnation_epochs, 4, true)
325
325
  end
326
326
 
327
327
  def test_cascade_candidate_change_fraction
328
- verify_fann_attribute(:cascade_candidate_change_fraction, 0.987)
328
+ verify_fann_attribute(:cascade_candidate_change_fraction, 0.987, true)
329
329
  end
330
330
 
331
331
  def test_cascade_candidate_stagnation_epochs
332
- verify_fann_attribute(:cascade_candidate_stagnation_epochs, 5)
332
+ verify_fann_attribute(:cascade_candidate_stagnation_epochs, 5, true)
333
333
  end
334
334
 
335
335
  def test_cascade_weight_multiplier
336
- verify_fann_attribute(:cascade_weight_multiplier, 0.754)
336
+ verify_fann_attribute(:cascade_weight_multiplier, 0.754, true)
337
337
  end
338
338
 
339
339
  def test_cascade_candidate_limit
340
- verify_fann_attribute(:cascade_candidate_limit, 0.222)
340
+ verify_fann_attribute(:cascade_candidate_limit, 0.222, true)
341
341
  end
342
342
 
343
343
  def test_cascade_cascade_max_out_epochs
344
- verify_fann_attribute(:cascade_max_out_epochs, 77)
344
+ verify_fann_attribute(:cascade_max_out_epochs, 77, true)
345
345
  end
346
346
 
347
347
  def test_cascade_max_cand_epochs
348
- verify_fann_attribute(:cascade_max_cand_epochs, 66)
348
+ verify_fann_attribute(:cascade_max_cand_epochs, 66, true)
349
349
  end
350
350
 
351
351
  def test_cascade_num_candidate_groups
352
- verify_fann_attribute(:cascade_num_candidate_groups, 6)
352
+ verify_fann_attribute(:cascade_num_candidate_groups, 6, true)
353
353
  end
354
354
 
355
355
  def test_cascade_num_candidates
@@ -428,10 +428,16 @@ class RubyFannTest < Test::Unit::TestCase
428
428
 
429
429
  private
430
430
  # Set & get fann attribute & verify:
431
- def verify_fann_attribute(attr, val)
432
- fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
433
- fann.send("set_#{attr}", val)
434
- assert_equal(val, fann.send("get_#{attr}"))
431
+ def verify_fann_attribute(attr, val, shortcut=false)
432
+ fann = nil
433
+ if shortcut
434
+ fann = RubyFann::Shortcut.new(:num_inputs=>1, :num_outputs=>1)
435
+ else
436
+ fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 4, 3, 4], :num_outputs=>1)
437
+ end
438
+ fann.send("set_#{attr}", val)
439
+ retrieved_val = fann.send("get_#{attr}")
440
+ assert_equal(val, retrieved_val)
435
441
  end
436
442
 
437
443
  end
data/website/index.html CHANGED
@@ -33,7 +33,7 @@
33
33
  <h1>ruby-fann</h1>
34
34
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/ruby-fann"; return false'>
35
35
  <p>Get Version</p>
36
- <a href="http://rubyforge.org/projects/ruby-fann" class="numbers">1.0.2</a>
36
+ <a href="http://rubyforge.org/projects/ruby-fann" class="numbers">1.1.3</a>
37
37
  </div>
38
38
  <p><em>Bindings to use <a href="http://leenissen.dk/fann/"><span class="caps">FANN</span></a> (Fast Artificial Neural Network) from within ruby/rails environment.</em></p>
39
39
  <h2>Documentation</h2>
@@ -59,6 +59,7 @@
59
59
  <h2>Unit Tests:</h2>
60
60
  <p>ruby-fann Gem has full complement of unit tests that are executed before the gem is deployed/redeployed to RubyForge.</p>
61
61
  <h2>Demonstration of usage</h2>
62
+ <p><em>Note: this example was segfaulting in <span class="caps">IRB</span>, but not when run as a regular ruby program. It has been fixed in the 1.0.3 version.</em></p>
62
63
  <p><pre class='syntax'>
63
64
  <span class="ident">require</span> <span class="punct">'</span><span class="string">rubygems</span><span class="punct">'</span>
64
65
  <span class="ident">require</span> <span class="punct">'</span><span class="string">ruby_fann/neural_network</span><span class="punct">'</span>
@@ -103,7 +104,7 @@ end
103
104
  <h2>Contact</h2>
104
105
  <p>Comments are welcome. Send an email to <a href="mailto:steven@7bpeople.com">Steven Miers</a> email via the <a href="http://groups.google.com/group/ruby_fann">forum</a></p>
105
106
  <p class="coda">
106
- <a href="steven@7bpeople.com">Steven Miers</a>, 23rd December 2009<br>
107
+ <a href="steven@7bpeople.com">Steven Miers</a>, 24th December 2009<br>
107
108
  </p>
108
109
  </div>
109
110
 
data/website/index.txt CHANGED
@@ -29,7 +29,8 @@ h2. Unit Tests:
29
29
  ruby-fann Gem has full complement of unit tests that are executed before the gem is deployed/redeployed to RubyForge.
30
30
 
31
31
  h2. Demonstration of usage
32
- _Note: this example was segfaulting in IRB, but not when run as a regular ruby program. That has been fixed._
32
+
33
+ _Note: this example was segfaulting in IRB, but not when run as a regular ruby program. It has been fixed in the 1.0.3 version._
33
34
 
34
35
  <pre syntax="ruby">
35
36
  require 'rubygems'
data/xor_cascade.net CHANGED
@@ -30,5 +30,5 @@ cascade_activation_steepnesses_count=4
30
30
  cascade_activation_steepnesses=2.50000000000000000000e-01 5.00000000000000000000e-01 7.50000000000000000000e-01 1.00000000000000000000e+00
31
31
  layer_sizes=3 1 1 1
32
32
  scale_included=0
33
- neurons (num_inputs, activation_function, activation_steepness)=(0, 0, 0.00000000000000000000e+00) (0, 0, 0.00000000000000000000e+00) (0, 0, 0.00000000000000000000e+00) (3, 8, 5.00000000000000000000e-01) (4, 7, 7.50000000000000000000e-01) (5, 5, 5.00000000000000000000e-01)
34
- connections (connected_to_neuron, weight)=(0, 2.03369093040802306760e+00) (1, 1.91930347509465915046e+00) (2, 2.68446253873775353416e-01) (0, -5.26866552139089794338e+00) (1, 4.23321787395280768607e+00) (2, -4.54275397511101708403e+00) (3, 4.56107898673613831875e+00) (0, 1.16525213056803722544e+00) (1, 2.54353376362498828644e-01) (2, -1.71142298268632808700e-01) (3, 4.01179525668330754229e+01) (4, -1.40854438232682288579e-01)
33
+ neurons (num_inputs, activation_function, activation_steepness)=(0, 0, 0.00000000000000000000e+00) (0, 0, 0.00000000000000000000e+00) (0, 0, 0.00000000000000000000e+00) (3, 15, 5.00000000000000000000e-01) (4, 3, 5.00000000000000000000e-01) (5, 5, 5.00000000000000000000e-01)
34
+ connections (connected_to_neuron, weight)=(0, 3.10708883886891351622e+00) (1, 3.10338071470814691466e+00) (2, 7.65357121957630642806e-02) (0, -1.09105405579982245312e-01) (1, 1.38516815257072739564e-01) (2, -5.57924056685979294912e+01) (3, 4.27822468842962849722e-02) (0, 2.60853981357382913586e-01) (1, 2.64955208099198424865e-01) (2, 2.30283002889318688666e-01) (3, 3.95939688330888941437e+01) (4, 2.43605282094651487412e-01)
data/xor_float.net CHANGED
@@ -31,4 +31,4 @@ cascade_activation_steepnesses=2.50000000000000000000e-01 5.00000000000000000000
31
31
  layer_sizes=3 4 2
32
32
  scale_included=0
33
33
  neurons (num_inputs, activation_function, activation_steepness)=(0, 0, 0.00000000000000000000e+00) (0, 0, 0.00000000000000000000e+00) (0, 0, 0.00000000000000000000e+00) (3, 5, 1.00000000000000000000e+00) (3, 5, 1.00000000000000000000e+00) (3, 5, 1.00000000000000000000e+00) (0, 5, 1.00000000000000000000e+00) (4, 5, 1.00000000000000000000e+00) (0, 5, 1.00000000000000000000e+00)
34
- connections (connected_to_neuron, weight)=(0, 2.17194810071245480998e+00) (1, 2.19810309367494838284e+00) (2, 2.07433761000328864554e+00) (0, 1.95411305220244946312e+00) (1, 1.94975822360003725464e+00) (2, -1.79330464954490631513e+00) (0, 4.23026595247278647260e-02) (1, 6.06086565778331601284e-03) (2, -9.86690112483247450115e-01) (3, 4.20699256351337425031e+00) (4, -4.34365507923527793821e+00) (5, 3.03271554955518274355e+00) (6, -1.68677741705357742141e+00)
34
+ connections (connected_to_neuron, weight)=(0, -2.73488929137393732560e+00) (1, 2.62393843594422904175e+00) (2, -1.89478715786915508090e+00) (0, 1.95305696104393855528e+00) (1, -1.84806794977636967836e+00) (2, -1.61445312371210136781e+00) (0, 1.75384548885381619243e+00) (1, -1.73045722542488666917e+00) (2, -1.31898702062678485625e+00) (3, 4.47716800493138489259e+00) (4, 1.34492352041529561468e+00) (5, 3.05774558646827809838e+00) (6, 3.68831561498669424637e+00)
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-fann
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 1
8
+ - 3
9
+ version: 1.1.3
5
10
  platform: ruby
6
11
  authors:
7
12
  - Steven Miers
@@ -9,19 +14,51 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-12-24 00:00:00 -06:00
17
+ date: 2010-03-15 00:00:00 -05:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
- name: hoe
21
+ name: rubyforge
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 2
29
+ - 0
30
+ - 4
31
+ version: 2.0.4
32
+ type: :development
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: gemcutter
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 5
44
+ - 0
45
+ version: 0.5.0
17
46
  type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: hoe
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
20
52
  requirements:
21
53
  - - ">="
22
54
  - !ruby/object:Gem::Version
23
- version: 2.4.0
24
- version:
55
+ segments:
56
+ - 2
57
+ - 5
58
+ - 0
59
+ version: 2.5.0
60
+ type: :development
61
+ version_requirements: *id003
25
62
  description: Bindings to use FANN from within ruby/rails environment.
26
63
  email: steven@7bpeople.com
27
64
  executables: []
@@ -45,9 +82,11 @@ files:
45
82
  - ext/ruby_fann/MANIFEST
46
83
  - ext/ruby_fann/Makefile
47
84
  - ext/ruby_fann/extconf.rb
85
+ - ext/ruby_fann/ruby_compat.h
48
86
  - ext/ruby_fann/fann_augment.h
49
87
  - ext/ruby_fann/neural_network.c
50
88
  - ext/ruby_fann/doublefann.h
89
+ - ext/ruby_fann/config.h
51
90
  - ext/ruby_fann/fann_error.h
52
91
  - ext/ruby_fann/fann_activation.h
53
92
  - ext/ruby_fann/fann_data.h
@@ -104,18 +143,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
104
143
  requirements:
105
144
  - - ">="
106
145
  - !ruby/object:Gem::Version
146
+ segments:
147
+ - 0
107
148
  version: "0"
108
- version:
109
149
  required_rubygems_version: !ruby/object:Gem::Requirement
110
150
  requirements:
111
151
  - - ">="
112
152
  - !ruby/object:Gem::Version
153
+ segments:
154
+ - 0
113
155
  version: "0"
114
- version:
115
156
  requirements: []
116
157
 
117
158
  rubyforge_project: ruby-fann
118
- rubygems_version: 1.3.5
159
+ rubygems_version: 1.3.6
119
160
  signing_key:
120
161
  specification_version: 3
121
162
  summary: Bindings to use FANN from within ruby/rails environment.