#pragma once #ifdef USE_XNNPACK #include namespace at::native::xnnpack::internal::pooling { struct Parameters final { std::array kernel; std::array padding; std::array stride; std::array dilation; explicit Parameters( const IntArrayRef kernel_, const IntArrayRef padding_, const IntArrayRef stride_, const IntArrayRef dilation_) : kernel(normalize(kernel_)), padding(normalize(padding_)), stride(normalize(stride_)), dilation(normalize(dilation_)) { } private: static std::array normalize(const IntArrayRef parameter) { TORCH_INTERNAL_ASSERT( !parameter.empty(), "Invalid usage! Reason: normalize() was called on an empty parameter."); return std::array{ parameter[0], (2 == parameter.size()) ? parameter[1] : parameter[0], }; } }; } // namespace at::native::xnnpack::internal::pooling #endif /* USE_XNNPACK */