numo-narray 0.9.0.1-x86-mingw32

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.
Files changed (124) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/README.md +47 -0
  4. data/Rakefile +41 -0
  5. data/ext/numo/narray/SFMT-params.h +97 -0
  6. data/ext/numo/narray/SFMT-params19937.h +46 -0
  7. data/ext/numo/narray/SFMT.c +620 -0
  8. data/ext/numo/narray/SFMT.h +157 -0
  9. data/ext/numo/narray/array.c +525 -0
  10. data/ext/numo/narray/data.c +901 -0
  11. data/ext/numo/narray/depend.erb +33 -0
  12. data/ext/numo/narray/extconf.rb +117 -0
  13. data/ext/numo/narray/gen/bit.erb.c +811 -0
  14. data/ext/numo/narray/gen/cogen.rb +18 -0
  15. data/ext/numo/narray/gen/def/dcomplex.rb +32 -0
  16. data/ext/numo/narray/gen/def/dfloat.rb +30 -0
  17. data/ext/numo/narray/gen/def/int16.rb +29 -0
  18. data/ext/numo/narray/gen/def/int32.rb +29 -0
  19. data/ext/numo/narray/gen/def/int64.rb +29 -0
  20. data/ext/numo/narray/gen/def/int8.rb +29 -0
  21. data/ext/numo/narray/gen/def/robject.rb +30 -0
  22. data/ext/numo/narray/gen/def/scomplex.rb +32 -0
  23. data/ext/numo/narray/gen/def/sfloat.rb +30 -0
  24. data/ext/numo/narray/gen/def/uint16.rb +29 -0
  25. data/ext/numo/narray/gen/def/uint32.rb +29 -0
  26. data/ext/numo/narray/gen/def/uint64.rb +29 -0
  27. data/ext/numo/narray/gen/def/uint8.rb +29 -0
  28. data/ext/numo/narray/gen/dtype.erb.c +328 -0
  29. data/ext/numo/narray/gen/tmpl/accum.c +36 -0
  30. data/ext/numo/narray/gen/tmpl/accum_binary.c +75 -0
  31. data/ext/numo/narray/gen/tmpl/accum_index.c +58 -0
  32. data/ext/numo/narray/gen/tmpl/allocate.c +35 -0
  33. data/ext/numo/narray/gen/tmpl/aref.c +51 -0
  34. data/ext/numo/narray/gen/tmpl/aset.c +61 -0
  35. data/ext/numo/narray/gen/tmpl/binary.c +53 -0
  36. data/ext/numo/narray/gen/tmpl/binary2.c +55 -0
  37. data/ext/numo/narray/gen/tmpl/binary_s.c +34 -0
  38. data/ext/numo/narray/gen/tmpl/bit_binary.c +94 -0
  39. data/ext/numo/narray/gen/tmpl/bit_count.c +82 -0
  40. data/ext/numo/narray/gen/tmpl/bit_unary.c +77 -0
  41. data/ext/numo/narray/gen/tmpl/cast.c +37 -0
  42. data/ext/numo/narray/gen/tmpl/cast_array.c +79 -0
  43. data/ext/numo/narray/gen/tmpl/cast_numeric.c +22 -0
  44. data/ext/numo/narray/gen/tmpl/coerce_cast.c +8 -0
  45. data/ext/numo/narray/gen/tmpl/cond_binary.c +51 -0
  46. data/ext/numo/narray/gen/tmpl/cond_unary.c +45 -0
  47. data/ext/numo/narray/gen/tmpl/cum.c +42 -0
  48. data/ext/numo/narray/gen/tmpl/each.c +43 -0
  49. data/ext/numo/narray/gen/tmpl/each_with_index.c +64 -0
  50. data/ext/numo/narray/gen/tmpl/extract.c +23 -0
  51. data/ext/numo/narray/gen/tmpl/eye.c +91 -0
  52. data/ext/numo/narray/gen/tmpl/fill.c +38 -0
  53. data/ext/numo/narray/gen/tmpl/format.c +60 -0
  54. data/ext/numo/narray/gen/tmpl/format_to_a.c +47 -0
  55. data/ext/numo/narray/gen/tmpl/head.c +25 -0
  56. data/ext/numo/narray/gen/tmpl/inspect.c +16 -0
  57. data/ext/numo/narray/gen/tmpl/map_with_index.c +94 -0
  58. data/ext/numo/narray/gen/tmpl/median.c +44 -0
  59. data/ext/numo/narray/gen/tmpl/minmax.c +47 -0
  60. data/ext/numo/narray/gen/tmpl/poly.c +49 -0
  61. data/ext/numo/narray/gen/tmpl/pow.c +74 -0
  62. data/ext/numo/narray/gen/tmpl/powint.c +17 -0
  63. data/ext/numo/narray/gen/tmpl/qsort.c +149 -0
  64. data/ext/numo/narray/gen/tmpl/rand.c +33 -0
  65. data/ext/numo/narray/gen/tmpl/rand_norm.c +46 -0
  66. data/ext/numo/narray/gen/tmpl/robj_allocate.c +32 -0
  67. data/ext/numo/narray/gen/tmpl/seq.c +61 -0
  68. data/ext/numo/narray/gen/tmpl/set2.c +56 -0
  69. data/ext/numo/narray/gen/tmpl/sort.c +36 -0
  70. data/ext/numo/narray/gen/tmpl/sort_index.c +86 -0
  71. data/ext/numo/narray/gen/tmpl/store.c +31 -0
  72. data/ext/numo/narray/gen/tmpl/store_array.c +5 -0
  73. data/ext/numo/narray/gen/tmpl/store_from.c +53 -0
  74. data/ext/numo/narray/gen/tmpl/store_numeric.c +22 -0
  75. data/ext/numo/narray/gen/tmpl/to_a.c +41 -0
  76. data/ext/numo/narray/gen/tmpl/unary.c +58 -0
  77. data/ext/numo/narray/gen/tmpl/unary2.c +58 -0
  78. data/ext/numo/narray/gen/tmpl/unary_s.c +57 -0
  79. data/ext/numo/narray/index.c +822 -0
  80. data/ext/numo/narray/kwarg.c +79 -0
  81. data/ext/numo/narray/math.c +140 -0
  82. data/ext/numo/narray/narray.c +1539 -0
  83. data/ext/numo/narray/ndloop.c +1928 -0
  84. data/ext/numo/narray/numo/compat.h +23 -0
  85. data/ext/numo/narray/numo/intern.h +112 -0
  86. data/ext/numo/narray/numo/narray.h +411 -0
  87. data/ext/numo/narray/numo/ndloop.h +99 -0
  88. data/ext/numo/narray/numo/template.h +140 -0
  89. data/ext/numo/narray/numo/types/bit.h +19 -0
  90. data/ext/numo/narray/numo/types/complex.h +410 -0
  91. data/ext/numo/narray/numo/types/complex_macro.h +205 -0
  92. data/ext/numo/narray/numo/types/dcomplex.h +11 -0
  93. data/ext/numo/narray/numo/types/dfloat.h +12 -0
  94. data/ext/numo/narray/numo/types/float_def.h +34 -0
  95. data/ext/numo/narray/numo/types/float_macro.h +277 -0
  96. data/ext/numo/narray/numo/types/int16.h +12 -0
  97. data/ext/numo/narray/numo/types/int32.h +12 -0
  98. data/ext/numo/narray/numo/types/int64.h +12 -0
  99. data/ext/numo/narray/numo/types/int8.h +12 -0
  100. data/ext/numo/narray/numo/types/int_macro.h +34 -0
  101. data/ext/numo/narray/numo/types/robj_macro.h +218 -0
  102. data/ext/numo/narray/numo/types/robject.h +21 -0
  103. data/ext/numo/narray/numo/types/scomplex.h +11 -0
  104. data/ext/numo/narray/numo/types/sfloat.h +13 -0
  105. data/ext/numo/narray/numo/types/uint16.h +12 -0
  106. data/ext/numo/narray/numo/types/uint32.h +12 -0
  107. data/ext/numo/narray/numo/types/uint64.h +12 -0
  108. data/ext/numo/narray/numo/types/uint8.h +12 -0
  109. data/ext/numo/narray/numo/types/uint_macro.h +31 -0
  110. data/ext/numo/narray/numo/types/xint_macro.h +133 -0
  111. data/ext/numo/narray/rand.c +87 -0
  112. data/ext/numo/narray/step.c +506 -0
  113. data/ext/numo/narray/struct.c +872 -0
  114. data/lib/2.1/numo/narray.so +0 -0
  115. data/lib/2.2/numo/narray.so +0 -0
  116. data/lib/2.3/numo/narray.so +0 -0
  117. data/lib/erbpp/line_number.rb +126 -0
  118. data/lib/erbpp/narray_def.rb +338 -0
  119. data/lib/erbpp.rb +286 -0
  120. data/lib/numo/narray.rb +6 -0
  121. data/numo-narray.gemspec +35 -0
  122. data/spec/bit_spec.rb +93 -0
  123. data/spec/narray_spec.rb +249 -0
  124. metadata +238 -0
@@ -0,0 +1,79 @@
1
+ /*
2
+ kwarg.c : Process keyword arguments for Ruby
3
+
4
+ Copyright (c) 2001 Masahiro TANAKA <masa@ir.isas.ac.jp>
5
+
6
+ This program is free software.
7
+ You can distribute/modify this program
8
+ under the same terms as Ruby itself.
9
+ NO WARRANTY.
10
+ */
11
+ #include <ruby.h>
12
+ #include "numo/compat.h"
13
+
14
+ /* void rb_scan_kw_args __((VALUE, ...)); */
15
+
16
+ static VALUE
17
+ kw_hash_i(i, tmp)
18
+ VALUE i, tmp;
19
+ {
20
+ VALUE key;
21
+
22
+ key = RARRAY_AREF(i,0);
23
+ if (TYPE(key)==T_SYMBOL) {
24
+ key = rb_funcall(key, rb_intern("id2name"), 0);
25
+ } else
26
+ if (TYPE(key)!=T_STRING) {
27
+ rb_raise(rb_eArgError, "keywords must be String or Symbol");
28
+ }
29
+
30
+ rb_hash_aset(tmp, key, RARRAY_AREF(i,1));
31
+ return Qnil;
32
+ }
33
+
34
+ #ifdef HAVE_STDARG_PROTOTYPES
35
+ #include <stdarg.h>
36
+ #define va_init_list(a,b) va_start(a,b)
37
+ #else
38
+ #include <varargs.h>
39
+ #define va_init_list(a,b) va_start(a)
40
+ #endif
41
+
42
+ void
43
+ #ifdef HAVE_STDARG_PROTOTYPES
44
+ rb_scan_kw_args(VALUE hash, ...)
45
+ #else
46
+ rb_scan_kw_args(hash, va_alist)
47
+ VALUE hash;
48
+ va_dcl
49
+ #endif
50
+ {
51
+ va_list vargs;
52
+ va_init_list(vargs, hash);
53
+
54
+ char *key;
55
+ VALUE *var, val, str, tmp;
56
+
57
+ tmp = rb_hash_new();
58
+ if (TYPE(hash) == T_HASH)
59
+ rb_iterate(rb_each, hash, kw_hash_i, tmp);
60
+ else if (hash != Qnil)
61
+ rb_fatal("rb_san_kw_args: non-hash arg passed");
62
+
63
+ for (;;) {
64
+ key = va_arg(vargs, char*);
65
+ if (!key) break;
66
+ var = va_arg(vargs, VALUE*);
67
+ //printf("i=%d key=%x, val=%x\n",i,key,val);
68
+ str = rb_str_new2(key);
69
+ val = rb_funcall(tmp, rb_intern("delete"), 1, str);
70
+ if (var) *var = val;
71
+ }
72
+ va_end(vargs);
73
+
74
+ if (rb_funcall(tmp, rb_intern("empty?"), 0)==Qfalse) {
75
+ val = rb_funcall(tmp, rb_intern("keys"), 0);
76
+ val = rb_funcall(val, rb_intern("join"), 1, rb_str_new2(","));
77
+ rb_raise(rb_eArgError, "unknown keywords: %s",StringValueCStr(val));
78
+ }
79
+ }
@@ -0,0 +1,140 @@
1
+ /*
2
+ math.c
3
+ Numerical Array Extension for Ruby
4
+ (C) Copyright 1999-2011 by Masahiro TANAKA
5
+
6
+ This program is free software.
7
+ You can distribute/modify this program
8
+ under the same terms as Ruby itself.
9
+ NO WARRANTY.
10
+ */
11
+ #include <ruby.h>
12
+ #include "numo/narray.h"
13
+
14
+ VALUE numo_mNMath;
15
+ EXTERN VALUE numo_mDFloatMath, numo_mDComplexMath;
16
+ static ID id_send;
17
+
18
+ VALUE
19
+ nary_type_s_upcast(VALUE type1, VALUE type2)
20
+ {
21
+ VALUE upcast_hash;
22
+ VALUE result_type;
23
+
24
+ if (type1==type2) return type1;
25
+ upcast_hash = rb_const_get(type1, rb_intern("UPCAST"));
26
+ result_type = rb_hash_aref(upcast_hash, type2);
27
+ if (NIL_P(result_type)) {
28
+ if (TYPE(type2)==T_CLASS) {
29
+ if ( RTEST(rb_class_inherited_p(type2,cNArray)) ) {
30
+ upcast_hash = rb_const_get(type2, rb_intern("UPCAST"));
31
+ result_type = rb_hash_aref(upcast_hash, type1);
32
+ }
33
+ }
34
+ }
35
+ return result_type;
36
+ }
37
+
38
+
39
+ VALUE nary_math_cast2(VALUE type1, VALUE type2)
40
+ {
41
+ if ( RTEST(rb_class_inherited_p( type1, cNArray )) ){
42
+ return nary_type_s_upcast( type1, type2 );
43
+ }
44
+ if ( RTEST(rb_class_inherited_p( type2, cNArray )) ){
45
+ return nary_type_s_upcast( type2, type1 );
46
+ }
47
+ if ( RTEST(rb_class_inherited_p( type1, rb_cNumeric )) &&
48
+ RTEST(rb_class_inherited_p( type2, rb_cNumeric )) ){
49
+ if ( RTEST(rb_class_inherited_p( type1, rb_cComplex)) ||
50
+ RTEST(rb_class_inherited_p( type2, rb_cComplex )) ){
51
+ return rb_cComplex;
52
+ }
53
+ return rb_cFloat;
54
+ }
55
+ return type2;
56
+ }
57
+
58
+
59
+ VALUE na_ary_composition_dtype(VALUE);
60
+
61
+ VALUE nary_mathcast(int argc, VALUE *argv)
62
+ {
63
+ VALUE type, type2;
64
+ int i;
65
+ type = na_ary_composition_dtype(argv[0]);
66
+ for (i=1; i<argc; i++) {
67
+ type2 = na_ary_composition_dtype(argv[i]);
68
+ type = nary_math_cast2(type, type2);
69
+ if (NIL_P(type)) {
70
+ rb_raise(rb_eTypeError,"%s is unknown for Numo::NMath",
71
+ rb_class2name(argv[i]));
72
+ }
73
+ }
74
+ return type;
75
+ }
76
+
77
+
78
+ /*
79
+ Dispatches method to Math module of upcasted type,
80
+ eg, Numo::DFloat::Math.
81
+ @overload method_missing(name,x,...)
82
+ @param [Symbol] name method name.
83
+ @param [NArray,Numeric] x input array.
84
+ @return [NArray] result.
85
+ */
86
+ VALUE nary_math_method_missing(int argc, VALUE *argv, VALUE mod)
87
+ {
88
+ VALUE type, ans, typemod, hash;
89
+ if (argc>1) {
90
+ type = nary_mathcast(argc-1,argv+1);
91
+
92
+ hash = rb_const_get(mod, rb_intern("DISPATCH"));
93
+ typemod = rb_hash_aref( hash, type );
94
+ if (NIL_P(typemod)) {
95
+ rb_raise(rb_eTypeError,"%s is unknown for Numo::NMath",
96
+ rb_class2name(type));
97
+ }
98
+
99
+ ans = rb_funcall2(typemod,id_send,argc,argv);
100
+
101
+ if (!RTEST(rb_class_inherited_p(type,cNArray)) &&
102
+ IsNArray(ans) ) {
103
+ ans = rb_funcall(ans,rb_intern("extract"),0);
104
+ }
105
+ return ans;
106
+ }
107
+ rb_raise(rb_eArgError,"argument or method missing");
108
+ return Qnil;
109
+ }
110
+
111
+
112
+ void
113
+ Init_nary_math()
114
+ {
115
+ VALUE hCast;
116
+
117
+ numo_mNMath = rb_define_module_under(mNumo, "NMath");
118
+ rb_define_singleton_method(numo_mNMath, "method_missing", nary_math_method_missing, -1);
119
+
120
+ hCast = rb_hash_new();
121
+ rb_define_const(numo_mNMath, "DISPATCH", hCast);
122
+ rb_hash_aset(hCast, numo_cInt64, numo_mDFloatMath);
123
+ rb_hash_aset(hCast, numo_cInt32, numo_mDFloatMath);
124
+ rb_hash_aset(hCast, numo_cInt16, numo_mDFloatMath);
125
+ rb_hash_aset(hCast, numo_cInt8, numo_mDFloatMath);
126
+ rb_hash_aset(hCast, numo_cUInt64, numo_mDFloatMath);
127
+ rb_hash_aset(hCast, numo_cUInt32, numo_mDFloatMath);
128
+ rb_hash_aset(hCast, numo_cUInt16, numo_mDFloatMath);
129
+ rb_hash_aset(hCast, numo_cUInt8, numo_mDFloatMath);
130
+ rb_hash_aset(hCast, numo_cDFloat, numo_mDFloatMath);
131
+ rb_hash_aset(hCast, numo_cDFloat, numo_mDFloatMath);
132
+ rb_hash_aset(hCast, numo_cDComplex, numo_mDComplexMath);
133
+ rb_hash_aset(hCast, rb_cFixnum, rb_mMath);
134
+ rb_hash_aset(hCast, rb_cBignum, rb_mMath);
135
+ rb_hash_aset(hCast, rb_cInteger, rb_mMath);
136
+ rb_hash_aset(hCast, rb_cFloat, rb_mMath);
137
+ rb_hash_aset(hCast, rb_cComplex, numo_mDComplexMath);
138
+
139
+ id_send = rb_intern("send");
140
+ }