Class: FastBinaryOperator
- Inherits:
-
BinaryOperator
- Object
- Operator
- BinaryOperator
- FastBinaryOperator
- Defined in:
- lib/mdarray/fast_operators.rb
Instance Attribute Summary
Attributes inherited from Operator
#arity, #exec_type, #fmap, #force_type, #helper, #name, #other_args, #post_condition, #pre_condition, #type
Instance Method Summary collapse
-
#complex_reduce(*args) ⇒ Object
—————————————————————————————.
-
#default(*args) ⇒ Object
————————————————————————————— A default binary operator takes two arrays where one array can be degenerated (a number and loops through all elements of the arrays applying a given method to them. For instance, operator ‘+’ in a + b is a default binary operator. —————————————————————————————.
-
#fill(*args) ⇒ Object
————————————————————————————— A fill binary operator takes two arrays where one array can be degenerated (a number) and loops through all elements of the arrays, setting the value of the first array to the values of the second.
-
#get_args(*args) {|@op1.nc_array, arg2, @op1.shape, args| ... } ⇒ Object
—————————————————————————————.
-
#in_place(*args) ⇒ Object
—————————————————————————————.
-
#reduce(*args) ⇒ Object
—————————————————————————————.
Methods inherited from BinaryOperator
Methods inherited from Operator
Constructor Details
This class inherits a constructor from BinaryOperator
Instance Method Details
#complex_reduce(*args) ⇒ Object
149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/mdarray/fast_operators.rb', line 149 def complex_reduce(*args) calc = nil get_args(*args) do |op1, op2, shape, *other_args| # return nil if op2 == nil helper = @helper::ComplexReduceBinaryOperator calc = @pre_condition_result calc = helper.send("apply", calc, op1, op2, @do_func) end return calc end |
#default(*args) ⇒ Object
A default binary operator takes two arrays where one array can be degenerated (a number and loops through all elements of the arrays applying a given method to them.
For instance, operator ‘+’ in a + b is a default binary operator.
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/mdarray/fast_operators.rb', line 77 def default(*args) calc = nil get_args(*args) do |op1, op2, shape, *other_args| calc = MDArray.build(@type, shape) if (@coerced) helper = @helper::CoerceBinaryOperator helper.send("apply", calc.nc_array, op1, op2, @do_func) elsif (@op1.is_a? NumericalMDArray) helper = @helper::DefaultBinaryOperator helper.send("apply", calc.nc_array, op1, op2, @do_func) else helper = @helper::DefaultBinaryOperator helper.send("apply#{@op1.class}", calc.nc_array, op1, op2, @do_func) end end return calc end |
#fill(*args) ⇒ Object
A fill binary operator takes two arrays where one array can be degenerated (a number) and loops through all elements of the arrays, setting the value of the first array to the values of the second.
103 104 105 106 107 108 109 110 111 |
# File 'lib/mdarray/fast_operators.rb', line 103 def fill(*args) get_args(*args) do |op1, op2, shape, *other_args| helper = @helper::FillBinaryOperator helper.send("apply", op1, op2) end end |
#get_args(*args) {|@op1.nc_array, arg2, @op1.shape, args| ... } ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/mdarray/fast_operators.rb', line 33 def get_args(*args) parse_args(*args) if (@op1.is_a? NumericalMDArray) if (@op2.is_a? Numeric) arg2 = @op2 elsif (@op2.is_a? NumericalMDArray) if (!@op1.compatible(@op2)) raise "Invalid operation - arrays are incompatible" end arg2 = @op2.nc_array else # Operation with another user defined type false # *TODO: make it more general using coerce if other_val type is not recognized # if (arg is not recognized) # self_equiv, arg_equiv = arg.coerce(self) # self_equiv * arg_equiv # end end else # NonNumericalMDArray if (!@op1.compatible(@op2)) raise "Invalid operation - arrays are incompatible" end # Will not work if we have subclasses!!!! if (@op1.class != @op2.class) raise "Invalid operation - array are not of compatible types" end arg2 = @op2.nc_array end yield @op1.nc_array, arg2, @op1.shape, *args end |
#in_place(*args) ⇒ Object
117 118 119 120 121 122 123 124 |
# File 'lib/mdarray/fast_operators.rb', line 117 def in_place(*args) get_args(*args) do |op1, op2, shape, *other_args| helper = @helper::InplaceBinaryOperator helper.send("apply", op1, op2, @do_func) end end |
#reduce(*args) ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/mdarray/fast_operators.rb', line 130 def reduce(*args) calc = nil get_args(*args) do |op1, op2, shape, *other_args| # return nil if op2 == nil helper = @helper::ReduceBinaryOperator calc = @pre_condition_result calc = helper.send("apply", calc, op1, op2, @do_func) end return calc end |