blob: cb2ba3626be2f96d02cac14adb81318471e1f0ac (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#ifndef PYTHONIC_NUMPY_NDARRAY_ITEM_HPP
#define PYTHONIC_NUMPY_NDARRAY_ITEM_HPP
#include "pythonic/include/numpy/ndarray/item.hpp"
#include "pythonic/utils/functor.hpp"
#include "pythonic/types/ndarray.hpp"
#include "pythonic/numpy/asarray.hpp"
PYTHONIC_NS_BEGIN
namespace numpy
{
namespace ndarray
{
template <class T, class pS>
T item(types::ndarray<T, pS> const &expr, long i)
{
if (i < 0)
i += expr.flat_size();
return *(expr.fbegin() + i);
}
template <class E, size_t N>
auto item(E &&expr, types::array<long, N> const &i) -> decltype(expr[i])
{
return expr[i];
}
// only for compatibility purpose, very bad impl
template <class E>
typename std::decay<E>::type::dtype item(E &&expr, long i)
{
if (i < 0)
i += expr.flat_size();
return asarray(std::forward<E>(expr)).flat()[i];
}
}
}
PYTHONIC_NS_END
#endif
|