namespace ov::util::dim¶
Overview¶
namespace dim {
// global variables
constexpr auto inf_bound = -1;
// global functions
template <class T>
constexpr bool is_inf_bound(const T dim);
template <class T, class U = typename Dimension::value_type>
constexpr std::enable_if<std::is_same<T, size_t>::value, U>::type value_convert(const T dim);
template <class T, class U = typename Dimension::value_type>
constexpr std::enable_if<std::is_same<T, U>::value, U>::type value_convert(const T dim);
template <class T>
constexpr auto dilated(const T dim, const T dilation);
template <class TDim>
constexpr auto dilated(
const TDim& dim,
const typename TDim::value_type dilation
);
template <class TDim>
constexpr std::enable_if<std::is_arithmetic<TDim>::value, TDim>::type padded(
const TDim dim,
const int64_t pad_num
);
template <class TDim>
std::enable_if<std::is_class<TDim>::value, TDim>::type padded(
const TDim& dim,
const int64_t pad_num
);
template <class TDim, class T = typename TDim::value_type>
std::pair<T, T> padding(
const TDim& dim,
const int64_t kernel_size,
const int64_t dilation,
int64_t stride
);
template <class TDim>
auto ceil_div(
const TDim& dim,
const typename TDim::value_type divisor
);
template <class TDim>
auto floor_div(
const TDim& dim,
const typename TDim::value_type divisor
);
template <class TDim>
bool is_divisible(
const TDim& quotient,
const typename TDim::value_type dividend
);
bool is_divisible< Dimension >(
const Dimension& quotient,
const typename Dimension::value_type dividend
);
} // namespace dim
Detailed Documentation¶
Global Functions¶
template <class T>
constexpr bool is_inf_bound(const T dim)
Checks if dimension length is infinite bound (undefined).
Parameters:
T |
Type of dimension length. |
dim |
Dimension length value. |
Returns:
True if dimension length has infinite bound, otherwise false.
template <class T, class U = typename Dimension::value_type>
constexpr std::enable_if<std::is_same<T, size_t>::value, U>::type value_convert(const T dim)
Convert static dimension length to ov::Dimension::value_type.
As static dimension length type is size_t (bit-length depends on architecture) the maximum value (undefined) is convert to ov::Dimension infinite bound.
Parameters:
T |
Static dimension type (size_t) |
U |
|
dim |
Dimension length to convert. |
Returns:
Converted input value to ov::Dimension::value_type.
template <class T, class U = typename Dimension::value_type>
constexpr std::enable_if<std::is_same<T, U>::value, U>::type value_convert(const T dim)
Conversion of dimension when input type is same as ov::Dimension::value_type.
Return value as it is.
Parameters:
T |
Dimension type same as ov::Dimension::value_type. |
U |
|
dim |
Dimension length to convert. |
Returns:
Same value as input.
template <class T>
constexpr auto dilated(const T dim, const T dilation)
Calculate dilated dimension value.
Parameters:
dim |
Dimension size value. |
dilation |
Dilation value |
Returns:
Dilated dimension value.
template <class TDim>
constexpr auto dilated(
const TDim& dim,
const typename TDim::value_type dilation
)
Calculate dilated dimension.
Parameters:
TDim |
Dimension type. |
dim |
|
dilation |
Dilation value. |
Returns:
Return dimension after dilation.
template <class TDim>
constexpr std::enable_if<std::is_arithmetic<TDim>::value, TDim>::type padded(
const TDim dim,
const int64_t pad_num
)
Calculate padded dimension size as dim size + padding size.
Parameters:
TDim |
Dimension type as dimension class value type or any arithmetic value. |
dim |
Dimension size value. |
pad_num |
Number of padding to add. |
Returns:
Padded dimension value or infinite bound.
template <class TDim>
std::enable_if<std::is_class<TDim>::value, TDim>::type padded(
const TDim& dim,
const int64_t pad_num
)
Calculate padded dimension size as dim + padding size.
the Dimension + operator cannot be used if padding is ‘-1’ which result add dynamic dimension.
Parameters:
TDim |
Dimension type as dimension class. |
dim |
|
pad_num |
Number padding to add. |
Returns:
Padded dimension.
template <class TDim, class T = typename TDim::value_type>
std::pair<T, T> padding(
const TDim& dim,
const int64_t kernel_size,
const int64_t dilation,
int64_t stride
)
Calculate dimension padding required by filter/kernel properties.
Provides pair of padding values as left padding is total value of required padding divided by 2 and right as total required padding minus left padding.
Parameters:
dim |
input dimension to calculate its padding. |
filter_size |
Kernel size for input dimension. |
dilation |
Kernel dilation. |
stride |
Kernel stride. |
Returns:
Pair of left, right padding values for input dimension.
template <class TDim>
auto ceil_div(
const TDim& dim,
const typename TDim::value_type divisor
)
Divide dimension using ceil rounding.
Parameters:
TDim |
Dimension type. |
T |
Dimension length value type. |
dim |
Input dimension. |
divisor |
Dimension division. |
Returns:
Divided dimension with bounds round up.
template <class TDim>
auto floor_div(
const TDim& dim,
const typename TDim::value_type divisor
)
Divide dimension using floor rounding.
Parameters:
TDim |
Dimension type. |
T |
Dimension length value type. |
dim |
Input dimension. |
divisor |
Dimension division. |
Returns:
Divided dimension with bound round down.
template <class TDim>
bool is_divisible(
const TDim& quotient,
const typename TDim::value_type dividend
)
Check if dimension is evenly divisible.
Parameters:
TDim |
Dimension type. |
quotient |
Dimension to check. |
dividend |
Dividend to check. |
Returns:
true if dimension is divisible other wise false.