tensor_pow_scalar Class — pytorch Architecture
Architecture documentation for the tensor_pow_scalar class in pow_test.cpp from the pytorch codebase.
Entity Profile
Source Code
aten/src/ATen/test/pow_test.cpp lines 119–161
template<typename Vals, typename Pows>
void tensor_pow_scalar(const Vals vals, const Pows pows, const torch::ScalarType valsDtype, const torch::ScalarType dtype) {
const auto tensor = torch::tensor(vals, valsDtype);
for (const auto pow : pows) {
// NOLINTNEXTLINE(clang-diagnostic-implicit-const-int-float-conversion)
if ( dtype == kInt && pow > static_cast<float>(std::numeric_limits<int>::max())) {
// value cannot be converted to type int without overflow
// NOLINTNEXTLINE(hicpp-avoid-goto,cppcoreguidelines-avoid-goto)
EXPECT_THROW(tensor.pow(pow), std::runtime_error);
continue;
}
auto actual_pow = tensor.pow(pow);
auto actual_pow_ = torch::empty_like(actual_pow);
actual_pow_.copy_(tensor);
actual_pow_.pow_(pow);
auto actual_pow_out = torch::empty_like(actual_pow);
torch::pow_out(actual_pow_out, tensor, pow);
auto actual_torch_pow = torch::pow(tensor, pow);
int i = 0;
for (const auto val : vals) {
const auto exp = torch::pow(torch::tensor({val}, dtype), torch::tensor(pow, dtype)).template item<double>();
const auto act_pow = actual_pow[i].to(at::kDouble).template item<double>();
assert_eq<long double>(val, act_pow, exp);
const auto act_pow_ = actual_pow_[i].to(at::kDouble).template item<double>();
assert_eq<long double>(val, act_pow_, exp);
const auto act_pow_out = actual_pow_out[i].to(at::kDouble).template item<double>();
assert_eq<long double>(val, act_pow_out, exp);
const auto act_torch_pow = actual_torch_pow[i].to(at::kDouble).template item<double>();
assert_eq<long double>(val, act_torch_pow, exp);
i++;
}
}
}
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free