mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Summary: Add cppcoreguidelines-avoid-magic-numbers exclusion to clang-tidy Remove existing nolint warnings using following script: ``` for file in `git ls-files | grep -v \.py`; do gsed '/^ *\/\/ NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers)/d' -i $file; done ``` Pull Request resolved: https://github.com/pytorch/pytorch/pull/57841 Reviewed By: samestep Differential Revision: D28295045 Pulled By: malfet fbshipit-source-id: 7c6e8d1213c9593f169ed3df6a916498f1a97163
79 lines
2.1 KiB
C++
79 lines
2.1 KiB
C++
#include "caffe2/operators/rsqrt_op.h"
|
|
|
|
#include "caffe2/utils/eigen_utils.h"
|
|
|
|
#include <algorithm>
|
|
#include <functional>
|
|
#include <string>
|
|
|
|
namespace caffe2 {
|
|
|
|
template <>
|
|
template <typename T>
|
|
bool RsqrtGradientFunctor<CPUContext>::Forward(
|
|
const std::vector<int>& dY_dims,
|
|
const std::vector<int>& /* Y_dims */,
|
|
const T* dY,
|
|
const T* Y,
|
|
T* dX,
|
|
CPUContext* /* context */) const {
|
|
const int size = std::accumulate(
|
|
// NOLINTNEXTLINE(modernize-use-transparent-functors)
|
|
dY_dims.cbegin(), dY_dims.cend(), 1, std::multiplies<int>());
|
|
EigenVectorMap<T>(dX, size) = ConstEigenVectorMap<T>(dY, size).array() *
|
|
ConstEigenVectorMap<T>(Y, size).array().cube() * static_cast<T>(-0.5);
|
|
return true;
|
|
}
|
|
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
REGISTER_CPU_OPERATOR(
|
|
Rsqrt,
|
|
UnaryElementwiseOp<
|
|
TensorTypes<float>,
|
|
CPUContext,
|
|
RsqrtFunctor<CPUContext>>);
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
REGISTER_CPU_OPERATOR(
|
|
RsqrtGradient,
|
|
BinaryElementwiseOp<
|
|
TensorTypes<float>,
|
|
CPUContext,
|
|
RsqrtGradientFunctor<CPUContext>>);
|
|
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
OPERATOR_SCHEMA(Rsqrt)
|
|
.NumInputs(1)
|
|
.NumOutputs(1)
|
|
.AllowInplace({{0, 0}})
|
|
.IdenticalTypeAndShape()
|
|
.SetDoc("Computes the element-wise rsqrt of the input.")
|
|
.Input(0, "X", "ND input tensor")
|
|
.Output(0, "Y", "ND output tensor");
|
|
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
OPERATOR_SCHEMA(RsqrtGradient)
|
|
.NumInputs(2)
|
|
.NumOutputs(1)
|
|
.AllowInplace({{0, 0}});
|
|
|
|
namespace {
|
|
|
|
class GetRsqrtGradient final : public GradientMakerBase {
|
|
using GradientMakerBase::GradientMakerBase;
|
|
|
|
std::vector<OperatorDef> GetGradientDefs() override {
|
|
return SingleGradientDef(
|
|
"RsqrtGradient",
|
|
"",
|
|
std::vector<std::string>{GO(0), O(0)},
|
|
std::vector<std::string>{GI(0)});
|
|
}
|
|
};
|
|
|
|
} // namespace
|
|
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
REGISTER_GRADIENT(Rsqrt, GetRsqrtGradient);
|
|
|
|
} // namespace caffe2
|