| #pragma once |
| |
| #include <c10/util/Exception.h> |
| |
| namespace c10 { |
| |
| static inline int64_t maybe_wrap_dim( |
| int64_t dim, |
| int64_t dim_post_expr, |
| bool wrap_scalar = true) { |
| if (dim_post_expr <= 0) { |
| if (!wrap_scalar) { |
| TORCH_CHECK_INDEX( |
| false, |
| "dimension specified as ", |
| dim, |
| " but tensor has no dimensions"); |
| } |
| dim_post_expr = 1; // this will make range [-1, 0] |
| } |
| |
| int64_t min = -dim_post_expr; |
| int64_t max = dim_post_expr - 1; |
| if (dim < min || dim > max) { |
| TORCH_CHECK_INDEX( |
| false, |
| "Dimension out of range (expected to be in range of [", |
| min, |
| ", ", |
| max, |
| "], but got ", |
| dim, |
| ")"); |
| } |
| if (dim < 0) |
| dim += dim_post_expr; |
| return dim; |
| } |
| |
| } // namespace c10 |