1 #ifndef NUMPYVIEW_INCL_HXX
2 #define NUMPYVIEW_INCL_HXX
4 #include <boost/python.hpp>
5 #include <boost/python/suite/indexing/vector_indexing_suite.hpp>
6 #include <numpy/noprefix.h>
24 template<
class V,
size_t DIM=0>
36 NumpyView( boost::python::object obj):allocFromCpp_(false){
37 boost::python::numeric::array array = boost::python::extract<boost::python::numeric::array > (obj);
38 void * voidDataPtr=PyArray_DATA(array.ptr());
39 CastPtrType dataPtr =
static_cast<CastPtrType
>(voidDataPtr);
40 size_t dimension =
static_cast<size_t>(PyArray_NDIM(array.ptr()));
42 npy_intp * shapePtr = PyArray_DIMS(array.ptr());
43 npy_intp * stridePtr = PyArray_STRIDES(array.ptr());
45 for(
size_t i=0;i<dimension;++i){
46 mystrides[i]=(stridePtr[i])/
sizeof(V);
52 NumpyView( boost::python::numeric::array array):allocFromCpp_(false){
53 void * voidDataPtr=PyArray_DATA(array.ptr());
54 CastPtrType dataPtr =
static_cast<CastPtrType
>(voidDataPtr);
55 size_t dimension =
static_cast<size_t>(PyArray_NDIM(array.ptr()));
56 npy_intp * shapePtr = PyArray_DIMS(array.ptr());
57 npy_intp * stridePtr = PyArray_STRIDES(array.ptr());
59 for(
size_t i=0;i<dimension;++i){
60 mystrides[i]=(stridePtr[i])/
sizeof(V);
66 size_t size()
const {
return view_.size();}
68 size_t shape(
const size_t i)
const{
return view_.shape(i);}
69 size_t const *
shapeBegin()
const{
return view_.shapeBegin();}
70 size_t const *
shapeEnd()
const{
return view_.shapeEnd();}
79 const ValueType &
operator()(
const size_t x0,
const size_t x1)
const{
82 const ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2)
const{
83 return view_(x0,x1,x2);
85 const ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2,
const size_t x3)
const{
86 return view_(x0,x1,x2,x3);
88 const ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2,
const size_t x3,
const size_t x4)
const{
89 return view_(x0,x1,x2,x3,x4);
108 template<
class ITERATOR>
110 return view_(iterator);
120 ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2){
121 return view_(x0,x1,x2);
123 ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2,
const size_t x3){
124 return view_(x0,x1,x2,x3);
126 ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2,
const size_t x3,
const size_t x4){
127 return view_(x0,x1,x2,x3,x4);
146 template<
class ITERATOR>
148 return view_(iterator);
152 return view_.begin();
158 return view_.begin();
165 return view_.begin();
167 ConstIteratorType
end()
const{
171 return view_.begin();
NumpyView(boost::python::numeric::array array)
ConstIteratorType end1d() const
ValueType & operator()(const size_t x0, const size_t x1, const size_t x2, const size_t x3)
ValueType & operator()(const size_t x0, const size_t x1)
marray::View< V,false >::const_iterator ConstIteratorType
STL-compliant random access iterator for View and Marray.
ValueType & operator()(X0 x0)
size_t shape(const size_t i) const
Array-Interface to an interval of memory.
size_t const * shapeBegin() const
ConstIteratorType begin1d() const
Vector that stores values on the stack if size is smaller than MAX_STACK.
void error(const std::string &reason=std::string(" ")) const
ConstIteratorType end() const
const ValueType & operator()(const size_t x0, const size_t x1, const size_t x2, const size_t x3, const size_t x4) const
const ValueType & operator()(const size_t x0, const size_t x1, const size_t x2) const
NumpyView(boost::python::object obj)
ValueType & operator()(const size_t x0, const size_t x1, const size_t x2)
ValueType & operator()(const size_t x0, const size_t x1, const size_t x2, const size_t x3, const size_t x4)
size_t const * shapeEnd() const
const ValueType & operator()(X0 x0) const
size_t const * ShapeIteratorType
const ValueType & operator[](ITERATOR iterator) const
const ValueType & operator()(const size_t x0, const size_t x1) const
ConstIteratorType begin() const
marray::View< V,false >::iterator IteratorType
ValueType & operator[](ITERATOR iterator)
const ValueType & operator()(const size_t x0, const size_t x1, const size_t x2, const size_t x3) const