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 Variables

constexpr auto inf_bound = -1

Infinite bound value for dimension.

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

ov::Dimension::value_type

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

Dimension::value_type.

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

Dimension.

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

Dimension.

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.