void _nanmax(E begin, E end, F& max, utils::int_<N>) { for(; begin != end; ++begin) _nanmax((*begin).begin(), (*begin).end(), max, utils::int_<N - 1>()); }
typename types::numpy_expr_to_ndarray<E>::T nanmax(E const& expr) { typename types::numpy_expr_to_ndarray<E>::T max = std::numeric_limits<typename types::numpy_expr_to_ndarray<E>::T>::lowest(); _nanmax(expr.begin(), expr.end(), max, utils::int_<types::numpy_expr_to_ndarray<E>::N>()); return max; }
typename E::dtype nanmax(E const &expr) { typename E::dtype max = std::numeric_limits<typename E::dtype>::lowest(); _nanmax(expr.begin(), expr.end(), max, utils::int_<E::value>()); return max; }