mxnet
expr_scalar-inl.h
Go to the documentation of this file.
1 
10 // macro guard is harmful, used to pass the cpplint
11 #ifndef MSHADOW_EXPR_SCALAR_INL_H_
12 #define MSHADOW_EXPR_SCALAR_INL_H_
13 // undef the guard so it can be included multiple times
14 #undef MSHADOW_EXPR_SCALAR_INL_H_
15 
16 namespace mshadow {
17 namespace expr {
18 // DotExp
20 template<typename TA, typename TB, bool ltrans, bool rtrans>
21 inline DotExp<TA, TB, ltrans, rtrans, MSHADOW_SCALAR_>
23  MSHADOW_SCALAR_ rhs) {
24  return DotExp<TA, TB, ltrans, rtrans,
25  MSHADOW_SCALAR_>(lhs.lhs_, lhs.rhs_, lhs.scale_ * rhs);
26 }
28 template<typename TA, typename TB, bool ltrans, bool rtrans>
32  return DotExp<TA, TB, ltrans, rtrans,
33  MSHADOW_SCALAR_>(rhs.lhs_, rhs.rhs_, rhs.scale_ * lhs);
34 }
35 
37 template<typename E, typename DType, typename R, int d>
40  return ReduceTo1DExp<E, DType, R, d>(e.src_, e.scale_ * scale);
41 }
43 template<typename E, typename DType, typename R, int d>
46  return ReduceTo1DExp<E, DType, R, d>(e.src_, e.scale_ * scale);
47 }
48 
50 template<typename OP, typename TA, int ta>
54  return MakeExp<OP>(lhs, rhs);
55 }
57 template<typename OP, typename TB, int tb>
61  return MakeExp<OP>(lhs, rhs);
62 }
64 template<typename OP>
65 inline BinaryMapExp<OP, ScalarExp<MSHADOW_SCALAR_>, ScalarExp<MSHADOW_SCALAR_>,
67 F(const ScalarExp<MSHADOW_SCALAR_> &lhs, const ScalarExp<MSHADOW_SCALAR_> &rhs) {
68  return MakeExp<OP>(lhs, rhs);
69 }
70 // constant operators
72 template<typename TA, int ta>
75 operator+(const Exp<TA, MSHADOW_SCALAR_, ta> &lhs,
76  const ScalarExp<MSHADOW_SCALAR_> &rhs) {
77  return MakeExp<op::plus>(lhs, rhs);
78 }
80 template<typename TA, int ta>
83 operator-(const Exp<TA, MSHADOW_SCALAR_, ta> &lhs,
84  const ScalarExp<MSHADOW_SCALAR_> &rhs) {
85  return MakeExp<op::minus>(lhs, rhs);
86 }
88 template<typename TA, int ta>
91 operator*(const Exp<TA, MSHADOW_SCALAR_, ta> &lhs,
92  const ScalarExp<MSHADOW_SCALAR_> &rhs) {
93  return MakeExp<op::mul>(lhs, rhs);
94 }
96 template<typename TA, int ta>
99 operator/(const Exp<TA, MSHADOW_SCALAR_, ta> &lhs,
100  const ScalarExp<MSHADOW_SCALAR_> &rhs) {
101  return MakeExp<op::div>(lhs, rhs);
102 }
103 // constant operators 2
105 template<typename TB, int tb>
108 operator+(const ScalarExp<MSHADOW_SCALAR_> &lhs,
109  const Exp<TB, MSHADOW_SCALAR_, tb> &rhs) {
110  return MakeExp<op::plus>(lhs, rhs);
111 }
113 template<typename TB, int tb>
116 operator-(const ScalarExp<MSHADOW_SCALAR_> &lhs,
117  const Exp<TB, MSHADOW_SCALAR_, tb> &rhs) {
118  return MakeExp<op::minus>(lhs, rhs);
119 }
121 template<typename TB, int tb>
124 operator*(const ScalarExp<MSHADOW_SCALAR_> &lhs,
125  const Exp<TB, MSHADOW_SCALAR_, tb> &rhs) {
126  return MakeExp<op::mul>(lhs, rhs);
127 }
129 template<typename TB, int tb>
132 operator/(const ScalarExp<MSHADOW_SCALAR_> &lhs, const Exp<TB, MSHADOW_SCALAR_, tb> &rhs) {
133  return MakeExp<op::div>(lhs, rhs);
134 }
135 // constant operators 3
137 inline BinaryMapExp<op::plus, ScalarExp<MSHADOW_SCALAR_>, ScalarExp<MSHADOW_SCALAR_>,
139 operator+(const ScalarExp<MSHADOW_SCALAR_> &lhs,
140  const ScalarExp<MSHADOW_SCALAR_> &rhs) {
141  return MakeExp<op::plus>(lhs, rhs);
142 }
144 inline BinaryMapExp<op::minus, ScalarExp<MSHADOW_SCALAR_>, ScalarExp<MSHADOW_SCALAR_>,
146 operator-(const ScalarExp<MSHADOW_SCALAR_> &lhs,
147  const ScalarExp<MSHADOW_SCALAR_> &rhs) {
148  return MakeExp<op::minus>(lhs, rhs);
149 }
151 inline BinaryMapExp<op::mul, ScalarExp<MSHADOW_SCALAR_>, ScalarExp<MSHADOW_SCALAR_>,
153 operator*(const ScalarExp<MSHADOW_SCALAR_> &lhs,
154  const ScalarExp<MSHADOW_SCALAR_> &rhs) {
155  return MakeExp<op::mul>(lhs, rhs);
156 }
158 inline BinaryMapExp<op::div, ScalarExp<MSHADOW_SCALAR_>, ScalarExp<MSHADOW_SCALAR_>,
160 operator/(const ScalarExp<MSHADOW_SCALAR_> &lhs, const ScalarExp<MSHADOW_SCALAR_> &rhs) {
161  return MakeExp<op::div>(lhs, rhs);
162 }
163 } // namespace expr
164 } // namespace mshadow
165 #endif // MSHADOW_EXPR_SCALAR_INL_H_
const int kMapper
expression contains element-wise tensor operations, map a expression to same shape ...
Definition: expression.h:32
const SrcExp & src_
source operand
Definition: reduceto1d.h:27
binary map expression lhs [op] rhs
Definition: expression.h:316
DType scale_
source operand, scale of the
Definition: reduceto1d.h:29
#define MSHADOW_SCALAR_
Definition: tensor.h:1078
const TB & rhs_
right operand
Definition: expression.h:211
reduction to 1 dimension tensor input: Tensor<Device,k>: ishape output: Tensor<Device,1> shape[0] = ishape[dimkeep];
Definition: reduceto1d.h:23
BinaryMapExp< OP, TA, ScalarExp< MSHADOW_SCALAR_ >, MSHADOW_SCALAR_,(ta|type::kMapper)> F(const Exp< TA, MSHADOW_SCALAR_, ta > &lhs, const ScalarExp< MSHADOW_SCALAR_ > &rhs)
operator overload for const
Definition: expr_scalar-inl.h:53
DType scale_
scale over result
Definition: expression.h:213
matrix multiplication expression dot(lhs[.T], rhs[.T])
Definition: expression.h:206
scalar expression
Definition: expression.h:77
defines how expression exp can be evaluated and stored into dst
Definition: expression.h:61
const TA & lhs_
left operand
Definition: expression.h:209
namespace for mshadow
Definition: base.h:282
DotExp< TA, TB, ltrans, rtrans, MSHADOW_SCALAR_ > operator*(const DotExp< TA, TB, ltrans, rtrans, MSHADOW_SCALAR_ > &lhs, MSHADOW_SCALAR_ rhs)
dot operator def
Definition: expr_scalar-inl.h:22