17 #ifndef KOKKOS_CORE_EXP_INTEROP_HPP 
   18 #define KOKKOS_CORE_EXP_INTEROP_HPP 
   19 #ifndef KOKKOS_IMPL_PUBLIC_INCLUDE 
   20 #define KOKKOS_IMPL_PUBLIC_INCLUDE 
   21 #define KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_INTEROP 
   24 #include <Kokkos_Core_fwd.hpp> 
   26 #include <Kokkos_MemoryTraits.hpp> 
   27 #include <Kokkos_View.hpp> 
   28 #include <impl/Kokkos_Utilities.hpp> 
   29 #include <type_traits> 
   38 template <
typename Tp>
 
   39 struct device_memory_space {
 
   43 template <
typename ExecT, 
typename MemT>
 
   44 struct device_memory_space<Kokkos::Device<ExecT, MemT>> {
 
   48 template <
typename Tp>
 
   49 using device_memory_space_t = 
typename device_memory_space<Tp>::type;
 
   55 template <
typename, 
typename...>
 
   56 struct python_view_type_impl;
 
   58 template <
template <
typename...> 
class ViewT, 
typename ValueT,
 
   60 struct python_view_type_impl<ViewT<ValueT>, type_list<Types...>> {
 
   61   using type = ViewT<ValueT, device_memory_space_t<Types>...>;
 
   64 template <
template <
typename...> 
class ViewT, 
typename ValueT,
 
   66 struct python_view_type_impl<ViewT<ValueT, Types...>>
 
   67     : python_view_type_impl<ViewT<ValueT>,
 
   68                             filter_type_list_t<is_default_memory_trait,
 
   69                                                type_list<Types...>, false>> {};
 
   71 template <
typename... T>
 
   72 using python_view_type_impl_t = 
typename python_view_type_impl<T...>::type;
 
   78 namespace Experimental {
 
   83 template <
typename ViewT>
 
   84 struct python_view_type {
 
   85   static_assert(Kokkos::is_view<std::decay_t<ViewT>>::value);
 
   88       Kokkos::Impl::python_view_type_impl_t<typename ViewT::array_type>;
 
   91 template <
typename ViewT>
 
   92 using python_view_type_t = 
typename python_view_type<ViewT>::type;
 
   94 template <
typename Tp>
 
   95 auto as_python_type(Tp&& _v) {
 
   96   using cast_type = python_view_type_t<Tp>;
 
   97   return static_cast<cast_type
>(std::forward<Tp>(_v));
 
  102 #ifdef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_INTEROP 
  103 #undef KOKKOS_IMPL_PUBLIC_INCLUDE 
  104 #undef KOKKOS_IMPL_PUBLIC_INCLUDE_NOTDEFINED_INTEROP 
Declaration of various MemoryLayout options.