#ifndef PYTHONIC_NUMPY_COPY_HPP #define PYTHONIC_NUMPY_COPY_HPP #include "pythonic/include/numpy/copy.hpp" #include "pythonic/utils/functor.hpp" #include "pythonic/utils/numpy_conversion.hpp" #include "pythonic/types/ndarray.hpp" PYTHONIC_NS_BEGIN namespace numpy { // list case template typename std::enable_if< !types::is_array::value && !types::is_dtype::value, types::ndarray>>::type copy(E const &v) { return {v}; } // scalar / complex case template auto copy(E const &v) -> typename std::enable_if::value, E>::type { return v; } // No copy is required for numpy_expr template auto copy(E &&v) -> typename std::enable_if::value, decltype(std::forward(v))>::type { return std::forward(v); } // ndarray case template types::ndarray copy(types::ndarray const &a) { return a.copy(); } // transposed ndarray case template types::numpy_texpr> copy(types::numpy_texpr> const &a) { return a.arg.copy(); } } PYTHONIC_NS_END #endif