mdarray 0.5.0.pre-java → 0.5.3-java
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/README.md +89 -90
- data/Rakefile +6 -1
- data/lib/colt/cern_double_functions.rb +193 -0
- data/lib/colt/cern_float_functions.rb +193 -0
- data/lib/colt/cern_int_functions.rb +152 -0
- data/lib/colt/cern_long_functions.rb +152 -0
- data/lib/colt/colt.rb +103 -1
- data/lib/mdarray.rb +71 -23
- data/lib/mdarray/access.rb +8 -0
- data/lib/mdarray/counter.rb +43 -1
- data/lib/mdarray/creation.rb +5 -10
- data/lib/mdarray/fast_operators.rb +17 -13
- data/lib/mdarray/function_creation.rb +11 -45
- data/lib/mdarray/function_map.rb +16 -8
- data/lib/mdarray/lazy_mdarray.rb +311 -0
- data/lib/mdarray/lazy_operators.rb +166 -0
- data/lib/mdarray/operators.rb +38 -9
- data/lib/mdarray/proc_util.rb +2 -0
- data/lib/mdarray/ruby_boolean_functions.rb +24 -0
- data/lib/mdarray/ruby_functions.rb +76 -2
- data/lib/mdarray/ruby_generic_functions.rb +12 -4
- data/lib/mdarray/ruby_math.rb +180 -2
- data/lib/mdarray/ruby_numeric_functions.rb +198 -7
- data/target/helper.jar +0 -0
- data/test/colt/ColtMethods.xlsx +0 -0
- data/test/colt/test_complete.rb +1 -0
- data/test/colt/test_math.rb +249 -0
- data/test/complete.rb +1 -0
- data/test/env.rb +17 -4
- data/test/mdarray/arithmetic_casting.rb +3 -0
- data/test/mdarray/test_boolean.rb +1 -1
- data/test/mdarray/test_complete.rb +1 -0
- data/test/mdarray/test_error.rb +13 -13
- data/test/mdarray/test_lazy.rb +306 -0
- data/test/mdarray/test_operator.rb +1 -1
- data/test/mdarray/test_performance.rb +57 -4
- data/test/mdarray/test_trigonometry.rb +5 -1
- data/vendor/commons-compiler.jar +0 -0
- data/vendor/janino.jar +0 -0
- data/version.rb +1 -1
- metadata +47 -10
- data/test/mdarray/test_statistics.rb +0 -80
@@ -0,0 +1,152 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
##########################################################################################
|
3
|
+
# Copyright © 2013 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
4
|
+
# and distribute this software and its documentation for educational, research, and
|
5
|
+
# not-for-profit purposes, without fee and without a signed licensing agreement, is hereby
|
6
|
+
# granted, provided that the above copyright notice, this paragraph and the following two
|
7
|
+
# paragraphs appear in all copies, modifications, and distributions. Contact Rodrigo
|
8
|
+
# Botafogo - rodrigo.a.botafogo@gmail.com for commercial licensing opportunities.
|
9
|
+
#
|
10
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
11
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
12
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
13
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
14
|
+
#
|
15
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
16
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
17
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
18
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
19
|
+
# OR MODIFICATIONS.
|
20
|
+
##########################################################################################
|
21
|
+
|
22
|
+
require 'java'
|
23
|
+
|
24
|
+
##########################################################################################
|
25
|
+
#
|
26
|
+
##########################################################################################
|
27
|
+
|
28
|
+
class Java::CernJetMathTint::IntFunctions
|
29
|
+
include_package "cern.jet.math.tint"
|
30
|
+
|
31
|
+
cern_methods = [:abs, :compare, :div, :divNeg, :equals, :isEqual, :isGreater, :isLess,
|
32
|
+
:max, :min, :minus, :mod, :mult, :multNeg, :multSquare, :neg, :plus,
|
33
|
+
:plusAbs, :pow, :sign, :square,
|
34
|
+
:and, :dec, :factorial, :inc, :not, :or, :shiftLeft,
|
35
|
+
:shiftRightSigned, :shiftRightUnsigned, :xor]
|
36
|
+
|
37
|
+
# methods that also exist for types double and float
|
38
|
+
java_alias :unary_compare, :compare, [Java::int]
|
39
|
+
java_alias :unary_div, :div, [Java::int]
|
40
|
+
java_alias :unary_equals, :equals, [Java::int]
|
41
|
+
java_alias :unary_isEqual, :isEqual, [Java::int]
|
42
|
+
java_alias :unary_isGreater, :isGreater, [Java::int]
|
43
|
+
java_alias :unary_isLess, :isLess, [Java::int]
|
44
|
+
java_alias :unary_max, :max, [Java::int]
|
45
|
+
java_alias :unary_min, :min, [Java::int]
|
46
|
+
java_alias :unary_minus, :minus, [Java::int]
|
47
|
+
java_alias :unary_mod, :mod, [Java::int]
|
48
|
+
java_alias :unary_mult, :mult, [Java::int]
|
49
|
+
java_alias :unary_plus, :plus, [Java::int]
|
50
|
+
java_alias :unary_pow, :pow, [Java::int]
|
51
|
+
|
52
|
+
# methods that only exist for types long and int
|
53
|
+
java_alias :unary_and, :and, [Java::int]
|
54
|
+
java_alias :unary_or, :or, [Java::int]
|
55
|
+
java_alias :unary_shiftLeft, :shiftLeft, [Java::int]
|
56
|
+
java_alias :unary_shiftRightSigned, :shiftRightSigned, [Java::int]
|
57
|
+
java_alias :unary_shiftRightUnsigned, :shiftRightUnsigned, [Java::int]
|
58
|
+
java_alias :unary_xor, :xor, [Java::int]
|
59
|
+
|
60
|
+
|
61
|
+
cern_methods.each do |method|
|
62
|
+
field_reader(method)
|
63
|
+
attr_reader(":#{method}")
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
##########################################################################################
|
69
|
+
#
|
70
|
+
##########################################################################################
|
71
|
+
|
72
|
+
module CernIntFunctions
|
73
|
+
include_package "cern.jet.math.tint"
|
74
|
+
extend FunctionCreation
|
75
|
+
extend CernFunctions
|
76
|
+
|
77
|
+
binary_methods = [:compare, :div, :divNeg, :equals, :minus, :mod, :mult, :multNeg,
|
78
|
+
:multSquare, :plus, :plusAbs, :pow,
|
79
|
+
:and, :or, :shiftLeft, :shiftRightSigned, :shiftRightUnsigned, :xor]
|
80
|
+
|
81
|
+
unary_methods = [:abs, :neg, :sign, :square, :dec, :factorial, :inc, :not]
|
82
|
+
|
83
|
+
comparison_methods = [:isEqual, :isGreater, :isLess]
|
84
|
+
|
85
|
+
binary_conflict_methods = [:max, :min]
|
86
|
+
|
87
|
+
binary_methods.each do |method|
|
88
|
+
make_binary_operators(method.to_s,
|
89
|
+
cern_binary_function(method.to_s, "#{method}_int",
|
90
|
+
Java::CernJetMathTint.IntFunctions,
|
91
|
+
"int"))
|
92
|
+
end
|
93
|
+
|
94
|
+
unary_methods.each do |method|
|
95
|
+
make_unary_operators(method.to_s,
|
96
|
+
cern_unary_function(method.to_s, "#{method}_int",
|
97
|
+
Java::CernJetMathTint.IntFunctions,
|
98
|
+
"int"))
|
99
|
+
end
|
100
|
+
|
101
|
+
comparison_methods.each do |method|
|
102
|
+
make_comparison_operator(method.to_s,
|
103
|
+
cern_comparison_function(method.to_s, "#{method}_double",
|
104
|
+
Java::CernJetMathTint.IntFunctions,
|
105
|
+
"int"))
|
106
|
+
end
|
107
|
+
|
108
|
+
binary_conflict_methods.each do |method|
|
109
|
+
make_binary_operators("cern_#{method}",
|
110
|
+
cern_binary_function(method.to_s, "cern_#{method}_double",
|
111
|
+
Java::CernJetMathTint.IntFunctions,
|
112
|
+
"int"))
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.register(als, name, int_name, type)
|
116
|
+
map = cern_binary_function(name, int_name, Java::CernJetMathTint.IntFunctions,
|
117
|
+
type)
|
118
|
+
MDArray.register_function(als, map, 2, CernFunctions.binary_helper)
|
119
|
+
end
|
120
|
+
|
121
|
+
alias :div_neg :divNeg
|
122
|
+
alias :is_equal :isEqual
|
123
|
+
alias :is_greater :isGreater
|
124
|
+
alias :is_less :isLess
|
125
|
+
alias :mult_neg :multNeg
|
126
|
+
alias :mult_square :multSquare
|
127
|
+
alias :plus_abs :plusAbs
|
128
|
+
alias :shift_left :shiftLeft
|
129
|
+
alias :shift_right_signed :shiftRightSigned
|
130
|
+
alias :shift_right_unsigned :shiftRightUnsigned
|
131
|
+
|
132
|
+
register(:add, :plus, :plus_int, "int")
|
133
|
+
register(:sub, :minus, :minus_int, "int")
|
134
|
+
register(:mul, :mult, :mult_int, "int")
|
135
|
+
register(:power, :pow, :pow_int, "int")
|
136
|
+
register(:eq, :equals, :equals_int, "int")
|
137
|
+
register(:gt, :isGreater, :is_greater_int, "int")
|
138
|
+
register(:lt, :isLess, :is_less_int, "int")
|
139
|
+
register(:binary_left_shift, :shiftLeft, :shift_left_int, "int")
|
140
|
+
register(:binary_right_shift, :shiftRightSigned, :shift_right_int, "int")
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
##########################################################################################
|
145
|
+
#
|
146
|
+
##########################################################################################
|
147
|
+
|
148
|
+
class IntMDArray
|
149
|
+
|
150
|
+
include CernIntFunctions
|
151
|
+
|
152
|
+
end # IntMDArray
|
@@ -0,0 +1,152 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
##########################################################################################
|
3
|
+
# Copyright © 2013 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
4
|
+
# and distribute this software and its documentation for educational, research, and
|
5
|
+
# not-for-profit purposes, without fee and without a signed licensing agreement, is hereby
|
6
|
+
# granted, provided that the above copyright notice, this paragraph and the following two
|
7
|
+
# paragraphs appear in all copies, modifications, and distributions. Contact Rodrigo
|
8
|
+
# Botafogo - rodrigo.a.botafogo@gmail.com for commercial licensing opportunities.
|
9
|
+
#
|
10
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
11
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
12
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
13
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
14
|
+
#
|
15
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
16
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
17
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
18
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
19
|
+
# OR MODIFICATIONS.
|
20
|
+
##########################################################################################
|
21
|
+
|
22
|
+
require 'java'
|
23
|
+
|
24
|
+
##########################################################################################
|
25
|
+
#
|
26
|
+
##########################################################################################
|
27
|
+
|
28
|
+
class Java::CernJetMathTlong::LongFunctions
|
29
|
+
include_package "cern.jet.math.tlong"
|
30
|
+
|
31
|
+
cern_methods = [:abs, :compare, :div, :divNeg, :equals, :isEqual, :isGreater, :isLess,
|
32
|
+
:max, :min, :minus, :mod, :mult, :multNeg, :multSquare, :neg, :plus,
|
33
|
+
:plusAbs, :pow, :sign, :square,
|
34
|
+
:and, :dec, :factorial, :inc, :not, :or, :shiftLeft,
|
35
|
+
:shiftRightSigned, :shiftRightUnsigned, :xor]
|
36
|
+
|
37
|
+
# methods that also exist for types double and float
|
38
|
+
java_alias :unary_compare, :compare, [Java::long]
|
39
|
+
java_alias :unary_div, :div, [Java::long]
|
40
|
+
java_alias :unary_equals, :equals, [Java::long]
|
41
|
+
java_alias :unary_isEqual, :isEqual, [Java::long]
|
42
|
+
java_alias :unary_isGreater, :isGreater, [Java::long]
|
43
|
+
java_alias :unary_isLess, :isLess, [Java::long]
|
44
|
+
java_alias :unary_max, :max, [Java::long]
|
45
|
+
java_alias :unary_min, :min, [Java::long]
|
46
|
+
java_alias :unary_minus, :minus, [Java::long]
|
47
|
+
java_alias :unary_mod, :mod, [Java::long]
|
48
|
+
java_alias :unary_mult, :mult, [Java::long]
|
49
|
+
java_alias :unary_plus, :plus, [Java::long]
|
50
|
+
java_alias :unary_pow, :pow, [Java::long]
|
51
|
+
|
52
|
+
# methods that only exist for types long and int
|
53
|
+
java_alias :unary_and, :and, [Java::long]
|
54
|
+
java_alias :unary_or, :or, [Java::long]
|
55
|
+
java_alias :unary_shiftLeft, :shiftLeft, [Java::long]
|
56
|
+
java_alias :unary_shiftRightSigned, :shiftRightSigned, [Java::long]
|
57
|
+
java_alias :unary_shiftRightUnsigned, :shiftRightUnsigned, [Java::long]
|
58
|
+
java_alias :unary_xor, :xor, [Java::long]
|
59
|
+
|
60
|
+
|
61
|
+
cern_methods.each do |method|
|
62
|
+
field_reader(method)
|
63
|
+
attr_reader(":#{method}")
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
##########################################################################################
|
69
|
+
#
|
70
|
+
##########################################################################################
|
71
|
+
|
72
|
+
module CernLongFunctions
|
73
|
+
include_package "cern.jet.math.tlong"
|
74
|
+
extend FunctionCreation
|
75
|
+
extend CernFunctions
|
76
|
+
|
77
|
+
binary_methods = [:compare, :div, :divNeg, :equals, :minus, :mod, :mult, :multNeg,
|
78
|
+
:multSquare, :plus, :plusAbs, :pow,
|
79
|
+
:and, :or, :shiftLeft, :shiftRightSigned, :shiftRightUnsigned, :xor]
|
80
|
+
|
81
|
+
unary_methods = [:abs, :neg, :sign, :square, :dec, :factorial, :inc, :not]
|
82
|
+
|
83
|
+
comparison_methods = [:isEqual, :isGreater, :isLess]
|
84
|
+
|
85
|
+
binary_conflict_methods = [:max, :min]
|
86
|
+
|
87
|
+
binary_methods.each do |method|
|
88
|
+
make_binary_operators(method.to_s,
|
89
|
+
cern_binary_function(method.to_s, "#{method}_long",
|
90
|
+
Java::CernJetMathTlong.LongFunctions,
|
91
|
+
"long"))
|
92
|
+
end
|
93
|
+
|
94
|
+
unary_methods.each do |method|
|
95
|
+
make_unary_operators(method.to_s,
|
96
|
+
cern_unary_function(method.to_s, "#{method}_long",
|
97
|
+
Java::CernJetMathTlong.LongFunctions,
|
98
|
+
"long"))
|
99
|
+
end
|
100
|
+
|
101
|
+
comparison_methods.each do |method|
|
102
|
+
make_comparison_operator(method.to_s,
|
103
|
+
cern_comparison_function(method.to_s, "#{method}_double",
|
104
|
+
Java::CernJetMathTlong.LongFunctions,
|
105
|
+
"long"))
|
106
|
+
end
|
107
|
+
|
108
|
+
binary_conflict_methods.each do |method|
|
109
|
+
make_binary_operators("cern_#{method}",
|
110
|
+
cern_binary_function(method.to_s, "cern_#{method}_double",
|
111
|
+
Java::CernJetMathTlong.LongFunctions,
|
112
|
+
"long"))
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.register(als, name, long_name, type)
|
116
|
+
map = cern_binary_function(name, long_name, Java::CernJetMathTlong.LongFunctions,
|
117
|
+
type)
|
118
|
+
MDArray.register_function(als, map, 2, CernFunctions.binary_helper)
|
119
|
+
end
|
120
|
+
|
121
|
+
alias :div_neg :divNeg
|
122
|
+
alias :is_equal :isEqual
|
123
|
+
alias :is_greater :isGreater
|
124
|
+
alias :is_less :isLess
|
125
|
+
alias :mult_neg :multNeg
|
126
|
+
alias :mult_square :multSquare
|
127
|
+
alias :plus_abs :plusAbs
|
128
|
+
alias :shift_left :shiftLeft
|
129
|
+
alias :shift_right_signed :shiftRightSigned
|
130
|
+
alias :shift_right_unsigned :shiftRightUnsigned
|
131
|
+
|
132
|
+
register(:add, :plus, :plus_long, "long")
|
133
|
+
register(:sub, :minus, :minus_long, "long")
|
134
|
+
register(:mul, :mult, :mult_long, "long")
|
135
|
+
register(:power, :pow, :pow_long, "long")
|
136
|
+
register(:eq, :equals, :equals_long, "long")
|
137
|
+
register(:gt, :isGreater, :is_greater_long, "long")
|
138
|
+
register(:lt, :isLess, :is_less_long, "long")
|
139
|
+
register(:binary_left_shift, :shiftLeft, :shift_left_long, "long")
|
140
|
+
register(:binary_right_shift, :shiftRightSigned, :shift_right_long, "long")
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
##########################################################################################
|
145
|
+
#
|
146
|
+
##########################################################################################
|
147
|
+
|
148
|
+
class LongMDArray
|
149
|
+
|
150
|
+
include CernLongFunctions
|
151
|
+
|
152
|
+
end # LongMDArray
|
data/lib/colt/colt.rb
CHANGED
@@ -49,8 +49,110 @@ class Colt
|
|
49
49
|
|
50
50
|
end # Colt
|
51
51
|
|
52
|
+
##########################################################################################
|
53
|
+
#
|
54
|
+
##########################################################################################
|
55
|
+
|
56
|
+
module CernFunctions
|
57
|
+
|
58
|
+
class << self
|
59
|
+
attr_reader :binary_helper
|
60
|
+
attr_reader :unary_helper
|
61
|
+
end
|
62
|
+
|
63
|
+
@binary_helper = Java::RbMdarrayLoopsBinops
|
64
|
+
@unary_helper = Java::RbMdarrayLoopsUnops
|
65
|
+
|
66
|
+
#------------------------------------------------------------------------------------
|
67
|
+
#
|
68
|
+
#------------------------------------------------------------------------------------
|
69
|
+
|
70
|
+
def make_binary_operators(name, func, default = true, in_place = true)
|
71
|
+
|
72
|
+
if (default)
|
73
|
+
make_binary_op(name, :default, func, CernFunctions.binary_helper)
|
74
|
+
end
|
75
|
+
if (in_place)
|
76
|
+
make_binary_op(name + "!", :in_place, func, CernFunctions.binary_helper)
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
#------------------------------------------------------------------------------------
|
82
|
+
#
|
83
|
+
#------------------------------------------------------------------------------------
|
84
|
+
|
85
|
+
def make_binary_operator(name, type, func)
|
86
|
+
make_binary_op(name, type, func, CernFunctions.binary_helper)
|
87
|
+
end
|
88
|
+
|
89
|
+
#------------------------------------------------------------------------------------
|
90
|
+
#
|
91
|
+
#------------------------------------------------------------------------------------
|
92
|
+
|
93
|
+
def make_unary_operators(name, func, default = true, in_place = true)
|
94
|
+
|
95
|
+
if (default)
|
96
|
+
make_unary_op(name, :default, func, CernFunctions.unary_helper)
|
97
|
+
end
|
98
|
+
if (in_place)
|
99
|
+
make_unary_op(name + "!", :in_place, func, CernFunctions.unary_helper)
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
#------------------------------------------------------------------------------------
|
105
|
+
#
|
106
|
+
#------------------------------------------------------------------------------------
|
107
|
+
|
108
|
+
def make_unary_operator(name, type, func)
|
109
|
+
make_unary_op(name, type, func, CernFunctions.unary_helper)
|
110
|
+
end
|
111
|
+
|
112
|
+
#------------------------------------------------------------------------------------
|
113
|
+
#
|
114
|
+
#------------------------------------------------------------------------------------
|
115
|
+
|
116
|
+
def make_comparison_operator(name, func)
|
117
|
+
make_binary_op(name, "default", func, CernFunctions.binary_helper, "boolean")
|
118
|
+
end
|
119
|
+
|
120
|
+
#------------------------------------------------------------------------------------
|
121
|
+
#
|
122
|
+
#------------------------------------------------------------------------------------
|
123
|
+
|
124
|
+
def cern_binary_function(short_name, long_name, module_name, type)
|
125
|
+
[long_name, "CernFunctions", module_name.send(short_name), type, type, type]
|
126
|
+
end
|
127
|
+
|
128
|
+
#------------------------------------------------------------------------------------
|
129
|
+
#
|
130
|
+
#------------------------------------------------------------------------------------
|
131
|
+
|
132
|
+
def cern_unary_function(short_name, long_name, module_name, type)
|
133
|
+
[long_name, "CernFunctions", module_name.send(short_name), type, type, "void"]
|
134
|
+
end
|
135
|
+
|
136
|
+
#------------------------------------------------------------------------------------
|
137
|
+
#
|
138
|
+
#------------------------------------------------------------------------------------
|
139
|
+
|
140
|
+
def cern_comparison_function(short_name, long_name, module_name, type)
|
141
|
+
[long_name, "CernFunctions", module_name.send(short_name), "boolean", type, type]
|
142
|
+
end
|
143
|
+
|
144
|
+
end # CernFunctions
|
145
|
+
|
146
|
+
##########################################################################################
|
147
|
+
#
|
148
|
+
##########################################################################################
|
149
|
+
|
52
150
|
require_relative 'stat_list'
|
53
151
|
require_relative 'colt_mdarray'
|
152
|
+
require_relative 'cern_double_functions'
|
153
|
+
require_relative 'cern_float_functions'
|
154
|
+
require_relative 'cern_long_functions'
|
155
|
+
require_relative 'cern_int_functions'
|
54
156
|
|
55
|
-
|
157
|
+
MDArray.functions = "CernFunctions"
|
56
158
|
|
data/lib/mdarray.rb
CHANGED
@@ -77,19 +77,22 @@ class MDArray
|
|
77
77
|
attr_accessor :unary_operator
|
78
78
|
attr_accessor :coerced
|
79
79
|
|
80
|
-
@numerical = ["byte", "short", "int", "long", "float", "double"]
|
80
|
+
@numerical = ["numeric", "byte", "short", "int", "long", "float", "double"]
|
81
81
|
@non_numerical = ["boolean", "char", "string", "sequence"]
|
82
82
|
|
83
83
|
class << self
|
84
84
|
|
85
85
|
attr_accessor :functions
|
86
86
|
attr_accessor :function_map
|
87
|
-
|
88
87
|
attr_reader :numerical
|
89
88
|
attr_reader :non_numerical
|
90
|
-
|
89
|
+
attr_accessor :binary_operator
|
90
|
+
attr_accessor :unary_operator
|
91
|
+
attr_accessor :previous_binary_operator
|
92
|
+
attr_accessor :previous_unary_operator
|
93
|
+
|
91
94
|
end
|
92
|
-
|
95
|
+
|
93
96
|
MDArray.function_map = Map.new
|
94
97
|
|
95
98
|
#------------------------------------------------------------------------------------
|
@@ -214,7 +217,7 @@ class MDArray
|
|
214
217
|
|
215
218
|
value.each do |func|
|
216
219
|
|
217
|
-
p "
|
220
|
+
p "package: #{func.package}, short name: #{key}, long name: #{func.long_name}, return type: #{func.return_type}, input1 type: #{func.input1_type}, input2 type: #{func.input2_type}"
|
218
221
|
|
219
222
|
end
|
220
223
|
|
@@ -255,16 +258,20 @@ class MDArray
|
|
255
258
|
# @param post_condition Proc to be executed after the operator's execution
|
256
259
|
#------------------------------------------------------------------------------------
|
257
260
|
|
258
|
-
def self.make_binary_op(name, exec_type, func, force_type = nil,
|
259
|
-
post_condition = nil)
|
261
|
+
def self.make_binary_op(name, exec_type, func, helper_class, force_type = nil,
|
262
|
+
pre_condition = nil, post_condition = nil)
|
260
263
|
|
261
264
|
define_method(name) do |op2, requested_type = nil, *args|
|
262
|
-
|
265
|
+
if (@type == "lazy" || ((op2.is_a? MDArray) && op2.type == "lazy"))
|
266
|
+
binary_op = LazyBinaryOperator
|
267
|
+
else
|
268
|
+
binary_op = get_binary_op
|
269
|
+
end
|
263
270
|
op = binary_op.new(name, exec_type, force_type, pre_condition, post_condition)
|
264
271
|
op.exec(self, op2, requested_type, *args)
|
265
272
|
end
|
266
273
|
|
267
|
-
MDArray.register_function(name, func)
|
274
|
+
MDArray.register_function(name, func, 2, helper_class)
|
268
275
|
|
269
276
|
end
|
270
277
|
|
@@ -284,8 +291,8 @@ class MDArray
|
|
284
291
|
# @param post_condition Proc to be executed after the operator's execution
|
285
292
|
#------------------------------------------------------------------------------------
|
286
293
|
|
287
|
-
def self.make_unary_op(name, exec_type, func, force_type = nil,
|
288
|
-
post_condition = nil)
|
294
|
+
def self.make_unary_op(name, exec_type, func, helper_class, force_type = nil,
|
295
|
+
pre_condition = nil, post_condition = nil)
|
289
296
|
|
290
297
|
define_method(name) do |requested_type = nil, *args|
|
291
298
|
unary_op = get_unary_op
|
@@ -293,7 +300,23 @@ class MDArray
|
|
293
300
|
op.exec(self, requested_type, *args)
|
294
301
|
end
|
295
302
|
|
296
|
-
MDArray.register_function(name, func)
|
303
|
+
MDArray.register_function(name, func, 1, helper_class)
|
304
|
+
|
305
|
+
end
|
306
|
+
|
307
|
+
#---------------------------------------------------------------------------------------
|
308
|
+
#
|
309
|
+
#---------------------------------------------------------------------------------------
|
310
|
+
|
311
|
+
def self.calc_value(given_type, function_type, match, partial_match, no_match)
|
312
|
+
|
313
|
+
if (given_type == function_type)
|
314
|
+
match
|
315
|
+
elsif ((function_type == "*") || (given_type == "*"))
|
316
|
+
partial_match
|
317
|
+
else
|
318
|
+
no_match
|
319
|
+
end
|
297
320
|
|
298
321
|
end
|
299
322
|
|
@@ -311,28 +334,52 @@ class MDArray
|
|
311
334
|
# @param input2_type the type of the second argument to the function
|
312
335
|
#---------------------------------------------------------------------------------------
|
313
336
|
|
314
|
-
def self.select_function(name,
|
337
|
+
def self.select_function(name, package = nil, return_type = nil, input1_type = nil,
|
315
338
|
input2_type = nil)
|
316
339
|
|
340
|
+
|
341
|
+
=begin
|
342
|
+
p "selecting function: #{name}"
|
343
|
+
p "return_type: #{return_type}"
|
344
|
+
p "input1_type: #{input1_type}"
|
345
|
+
p "input2_type: #{input2_type}"
|
346
|
+
=end
|
347
|
+
|
317
348
|
list = MDArray.function_map[name]
|
318
349
|
best_value = -1
|
319
350
|
func = nil
|
320
351
|
|
321
352
|
list.each do |function|
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
value
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
353
|
+
value = (package == function.package)? 2 : 1
|
354
|
+
# p "package: #{package}; function package: #{function.package}"
|
355
|
+
# p value
|
356
|
+
value *= calc_value(return_type, function.return_type, 32, 16, 0)
|
357
|
+
# p "return_type: #{return_type}; func_ret_type: #{function.return_type}"
|
358
|
+
# p value
|
359
|
+
value *= calc_value(input1_type, function.input1_type, 8, 4, 0)
|
360
|
+
# p "input1_type: #{input1_type}; func_input1_type: #{function.input1_type}"
|
361
|
+
# p value
|
362
|
+
value *= calc_value(input2_type, function.input2_type, 2, 1, 0)
|
363
|
+
# p "input2_type: #{input2_type}; func_input2_type: #{function.input2_type}"
|
364
|
+
# p value
|
365
|
+
if (value == 0)
|
366
|
+
next
|
367
|
+
elsif (value > best_value)
|
368
|
+
func = function
|
330
369
|
best_value = value
|
331
|
-
# p "best value: #{best_value}, func: #{func}"
|
332
370
|
end
|
333
371
|
end
|
334
372
|
|
335
|
-
|
373
|
+
=begin
|
374
|
+
p "MDArray.select_function"
|
375
|
+
p "selected function #{func.function}"
|
376
|
+
=end
|
377
|
+
|
378
|
+
if (best_value > 0)
|
379
|
+
func
|
380
|
+
else
|
381
|
+
raise "No method to process operator: #{name}"
|
382
|
+
end
|
336
383
|
|
337
384
|
end
|
338
385
|
|
@@ -385,5 +432,6 @@ require_relative 'mdarray/views'
|
|
385
432
|
require_relative 'mdarray/printing'
|
386
433
|
require_relative 'mdarray/counter'
|
387
434
|
require_relative 'mdarray/ruby_stats'
|
435
|
+
require_relative 'mdarray/lazy_mdarray'
|
388
436
|
require_relative 'mdarray/csv'
|
389
437
|
require_relative 'colt/colt'
|