| #ifndef CAFFE2_OPERATORS_ELEMENTWISE_MUL_OP_H_ | 
 | #define CAFFE2_OPERATORS_ELEMENTWISE_MUL_OP_H_ | 
 |  | 
 | #include <vector> | 
 |  | 
 | #include "caffe2/operators/elementwise_ops.h" | 
 | #include "caffe2/utils/math.h" | 
 |  | 
 | namespace caffe2 { | 
 |  | 
 | template <class Context> | 
 | struct MulFunctor { | 
 |   template <typename TIn, typename TOut> | 
 |   bool Forward( | 
 |       const std::vector<int>& A_dims, | 
 |       const std::vector<int>& B_dims, | 
 |       const TIn* A, | 
 |       const TIn* B, | 
 |       TOut* C, | 
 |       Context* context) const { | 
 |     math::Mul( | 
 |         A_dims.size(), | 
 |         A_dims.data(), | 
 |         B_dims.size(), | 
 |         B_dims.data(), | 
 |         A, | 
 |         B, | 
 |         C, | 
 |         context); | 
 |     return true; | 
 |   } | 
 |  | 
 |   template <typename TGrad, typename TIn, typename TOut> | 
 |   bool Backward( | 
 |       const std::vector<int>& A_dims, | 
 |       const std::vector<int>& B_dims, | 
 |       const TGrad* dC_data, | 
 |       const TIn* A_data, | 
 |       const TIn* B_data, | 
 |       const TOut* C_data, | 
 |       TGrad* dA_data, | 
 |       TGrad* dB_data, | 
 |       Context* context) const; | 
 | }; | 
 |  | 
 | } // namespace caffe2 | 
 |  | 
 | #endif // CAFFE2_OPERATORS_ELEMENTWISE_MUL_OP_H_ |