#pragma once #include #include #include #include #include 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_list_to_bitset( OptionalIntArrayRef opt_dims, size_t ndims) { TORCH_CHECK( ndims <= dim_bitset_size, "only tensors with up to ", dim_bitset_size, " dims are supported"); std::bitset seen; if (opt_dims.has_value()) { auto dims = opt_dims.value(); for (const auto i : c10::irange(dims.size())) { size_t dim = maybe_wrap_dim(dims[i], static_cast(ndims)); TORCH_CHECK( !seen[dim], "dim ", dim, " appears multiple times in the list of dims"); seen[dim] = true; } } else { for (size_t dim = 0; dim < ndims; dim++) { seen[dim] = true; } } return seen; } } // namespace at