#ifndef PYTHONIC_INCLUDE_NUMPY_MEAN_HPP #define PYTHONIC_INCLUDE_NUMPY_MEAN_HPP #include "pythonic/include/numpy/sum.hpp" #include "pythonic/include/numpy/expand_dims.hpp" #include "pythonic/include/builtins/None.hpp" #include "pythonic/include/types/immediate.hpp" PYTHONIC_NS_BEGIN namespace numpy { namespace details { template struct make_scalar_pshape : sutils::concat>, typename make_scalar_pshape::type> { }; template <> struct make_scalar_pshape<1> { using type = types::pshape>; }; template struct dtype_or_double_helper { using type = typename dtype::type; }; template <> struct dtype_or_double_helper { using type = double; }; template using dtype_or_double = typename dtype_or_double_helper::type; } template auto mean(E const &expr, types::none_type axis = {}, dtype d = {}, types::none_type out = {}, types::false_immediate keep_dims = {}) -> decltype(sum(expr, axis, d) / details::dtype_or_double(expr.flat_size())); template auto mean(E const &expr, long axis, dtype d = {}, types::none_type out = {}, types::false_immediate keep_dims = {}) -> decltype(sum(expr, axis, d)); template types::ndarray, typename details::make_scalar_pshape::type> mean(E const &expr, types::none_type axis, dtype d, types::none_type out, types::true_immediate keep_dims); template auto mean(E const &expr, long axis, dtype d, types::none_type out, types::true_immediate keep_dims) -> decltype(expand_dims(mean(expr, axis, d), axis)); DEFINE_FUNCTOR(pythonic::numpy, mean); } PYTHONIC_NS_END #endif