| #pragma once |
| |
| #include <c10/core/TensorImpl.h> |
| #include <ATen/WrapDimUtils.h> |
| #include <sstream> |
| #include <bitset> |
| |
| namespace at { |
| |
| // This is in an extra file to work around strange interaction of |
| // bitset on Windows with operator overloading |
| |
| constexpr size_t dim_bitset_size = 64; |
| |
| static inline std::bitset<dim_bitset_size> dim_list_to_bitset(IntArrayRef dims, int64_t ndims) { |
| TORCH_CHECK(ndims <= (int64_t) dim_bitset_size, "only tensors with up to ", dim_bitset_size, " dims are supported"); |
| std::bitset<dim_bitset_size> seen; |
| for (size_t i = 0; i < dims.size(); i++) { |
| size_t dim = maybe_wrap_dim(dims[i], ndims); |
| TORCH_CHECK(!seen[dim], "dim ", dim, " appears multiple times in the list of dims"); |
| seen[dim] = true; |
| } |
| return seen; |
| } |
| |
| } |