Program Listing for File utils.h

Return to documentation for file (include/converter/include/mindapi/ir/utils.h)

#ifndef MINDSPORE_CORE_MINDAPI_IR_UTILS_H_
#define MINDSPORE_CORE_MINDAPI_IR_UTILS_H_

#include "mindapi/base/base.h"
#include "mindapi/base/shared_ptr.h"
#include "mindapi/base/type_traits.h"
#include "mindapi/ir/anf.h"
#include "mindapi/ir/value.h"
#include "mindapi/ir/func_graph.h"

namespace mindspore::api::utils {
template <typename T, typename = typename std::enable_if_t<std::is_base_of_v<Base, T> || is_wrapper_ptr<T>::value>>
inline bool isa(const BasePtr &ptr) {
  if (ptr == nullptr) {
    return false;
  }
  if constexpr (is_wrapper_ptr<T>::value) {
    return ptr->isa<typename T::element_type>();
  } else {
    return ptr->isa<T>();
  }
}

template <typename T, typename U = typename ImmTrait<T>::type::element_type>
inline bool isa(const ValuePtr &ptr) {
  if (ptr == nullptr) {
    return false;
  }
  return ptr->isa<U>();
}

template <typename T, typename = typename std::enable_if_t<is_wrapper_ptr<T>::value, T>>
inline T cast(const BasePtr &ptr) {
  if (ptr == nullptr) {
    return nullptr;
  }
  return ptr->cast<T>();
}

template <typename T, typename U = typename ImmTrait<T>::type>
inline T cast(const ValuePtr &ptr) {
  return GetValue<T>(ptr);
}

MIND_API FuncGraphPtr CloneGraph(const FuncGraphPtr &func_graph);

MIND_API int64_t GetPadMode(const ValuePtr &value, bool is_upper = false);
}  // namespace mindspore::api::utils

#endif  // MINDSPORE_CORE_MINDAPI_IR_UTILS_H_