in nestedtensor/csrc/python_functions.cpp [129:286]
void add_functions(pybind11::module m) {
m.def(
"interpolate",
[](at::Tensor input,
c10::optional<std::vector<std::vector<int64_t>>> size,
c10::optional<THPArrayRef<double>> scale_factor,
c10::optional<std::string> mode,
c10::optional<bool> align_corners,
c10::optional<bool> recompute_scale_factor,
bool antialias) {
if (scale_factor.has_value() && size.has_value()) {
throw std::runtime_error(
"only one of size or scale_factor should be defined");
}
if (antialias) {
throw std::runtime_error("Antialias is not yet supported");
}
if (size.has_value()) {
return interpolate(
input, size.value(), c10::nullopt, mode, align_corners);
}
if (scale_factor.has_value()) {
return interpolate(
input,
c10::nullopt,
scale_factor.value().extract<2>(),
mode,
align_corners);
}
throw std::runtime_error(
"Either size or scale factor have to be passed.");
},
py::arg("input"),
py::arg("size") = nullptr,
py::arg("scale_factor") = nullptr,
py::arg("mode") = "nearest",
py::arg("align_corners") = false,
py::arg("recompute_scale_factor") = false,
py::arg("antialias") = false);
m.def(
"interpolate",
[](at::Tensor input,
c10::optional<std::vector<int64_t>> size,
c10::optional<THPArrayRef<double>> scale_factor,
c10::optional<std::string> mode,
c10::optional<bool> align_corners,
c10::optional<bool> recompute_scale_factor,
bool antialias) {
if (scale_factor.has_value() && size.has_value()) {
throw std::runtime_error(
"only one of size or scale_factor should be defined");
}
if (antialias) {
throw std::runtime_error("Antialias is not yet supported");
}
if (size.has_value()) {
std::vector<std::vector<int64_t>> sizes{size.value()};
return interpolate(input, sizes, c10::nullopt, mode, align_corners);
}
if (scale_factor.has_value()) {
return interpolate(
input,
c10::nullopt,
scale_factor.value().extract<2>(),
mode,
align_corners);
}
throw std::runtime_error(
"Either size or scale factor have to be passed.");
},
py::arg("input"),
py::arg("size") = nullptr,
py::arg("scale_factor") = nullptr,
py::arg("mode") = "nearest",
py::arg("align_corners") = false,
py::arg("recompute_scale_factor") = false,
py::arg("antialias") = false);
m.def(
"interpolate",
[](at::Tensor input,
c10::optional<int64_t> size,
c10::optional<THPArrayRef<double>> scale_factor,
c10::optional<std::string> mode,
c10::optional<bool> align_corners,
c10::optional<bool> recompute_scale_factor,
bool antialias) {
if (scale_factor.has_value() && size.has_value()) {
throw std::runtime_error(
"only one of size or scale_factor should be defined");
}
if (antialias) {
throw std::runtime_error("Antialias is not yet supported");
}
if (size.has_value()) {
std::vector<std::vector<int64_t>> sizes{
std::vector<int64_t>{size.value(), size.value()}};
return interpolate(input, sizes, c10::nullopt, mode, align_corners);
}
if (scale_factor.has_value()) {
return interpolate(
input,
c10::nullopt,
scale_factor.value().extract<2>(),
mode,
align_corners);
}
throw std::runtime_error(
"Either size or scale factor have to be passed.");
},
py::arg("input"),
py::arg("size") = nullptr,
py::arg("scale_factor") = nullptr,
py::arg("mode") = "nearest",
py::arg("align_corners") = false,
py::arg("recompute_scale_factor") = false,
py::arg("antialias") = false);
m.def(
"cross_entropy",
[](at::Tensor input,
at::Tensor target,
c10::optional<at::Tensor> weight,
c10::optional<bool> size_average, // TODO: use
c10::optional<int64_t> ignore_index,
c10::optional<bool> reduce, // TODO: use
c10::optional<std::string> reduction,
c10::optional<double> label_smoothing) {
return cross_entropy(
input,
target,
weight,
size_average,
ignore_index,
reduce,
reduction,
label_smoothing);
},
py::arg("input"),
py::arg("target"),
py::arg("weight") = nullptr,
py::arg("size_average") = true,
py::arg("ignore_index") = -100,
py::arg("reduce") = true,
py::arg("reduction") = "mean",
py::arg("label_smoothing") = 0.0);
}