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>
37 NumpyView( boost::python::object obj):allocFromCpp_(false){
38 boost::python::numeric::array array = boost::python::extract<boost::python::numeric::array > (obj);
39 void * voidDataPtr=PyArray_DATA(array.ptr());
40 CastPtrType dataPtr =
static_cast<CastPtrType
>(voidDataPtr);
41 size_t dimension =
static_cast<size_t>(PyArray_NDIM(array.ptr()));
43 npy_intp * shapePtr = PyArray_DIMS(array.ptr());
44 npy_intp * stridePtr = PyArray_STRIDES(array.ptr());
46 for(
size_t i=0;i<dimension;++i){
47 mystrides[i]=(stridePtr[i])/
sizeof(V);
53 NumpyView( boost::python::numeric::array array):allocFromCpp_(false){
54 void * voidDataPtr=PyArray_DATA(array.ptr());
55 CastPtrType dataPtr =
static_cast<CastPtrType
>(voidDataPtr);
56 size_t dimension =
static_cast<size_t>(PyArray_NDIM(array.ptr()));
57 npy_intp * shapePtr = PyArray_DIMS(array.ptr());
58 npy_intp * stridePtr = PyArray_STRIDES(array.ptr());
60 for(
size_t i=0;i<dimension;++i){
61 mystrides[i]=(stridePtr[i])/
sizeof(V);
67 size_t size()
const {
return view_.size();}
69 size_t shape(
const size_t i)
const{
return view_.shape(i);}
70 size_t const *
shapeBegin()
const{
return view_.shapeBegin();}
71 size_t const *
shapeEnd()
const{
return view_.shapeEnd();}
80 const ValueType &
operator()(
const size_t x0,
const size_t x1)
const{
83 const ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2)
const{
84 return view_(x0,x1,x2);
86 const ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2,
const size_t x3)
const{
87 return view_(x0,x1,x2,x3);
89 const ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2,
const size_t x3,
const size_t x4)
const{
90 return view_(x0,x1,x2,x3,x4);
109 template<
class ITERATOR>
111 return view_(iterator);
121 ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2){
122 return view_(x0,x1,x2);
124 ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2,
const size_t x3){
125 return view_(x0,x1,x2,x3);
127 ValueType &
operator()(
const size_t x0,
const size_t x1,
const size_t x2,
const size_t x3,
const size_t x4){
128 return view_(x0,x1,x2,x3,x4);
147 template<
class ITERATOR>
149 return view_(iterator);
153 return view_.begin();
159 return view_.begin();
166 return view_.begin();
168 ConstIteratorType
end()
const{
172 return view_.begin();
180 std::vector<size_t> baseIterator(view_.dimension(), 0);
181 baseIterator[dimension] = sliceIndex;
184 std::vector<size_t> shapeIterator(view_.shapeBegin(), view_.shapeEnd());
185 shapeIterator[dimension] = 1;
NumpyView(boost::python::numeric::array array)
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 const * shapeBegin() const
size_t const * shapeEnd() const
void view(BaseIterator, ShapeIterator, View< T, isConst, A > &) const
Get a sub-view with the same coordinate order.
const ValueType & operator()(const size_t x0, const size_t x1) const
marray::View< V, false > getSliceView(size_t dimension, size_t sliceIndex)
Vector that stores values on the stack if size is smaller than MAX_STACK.
marray::View< V,false > view() const
const ValueType & operator()(X0 x0) const
const ValueType & operator[](ITERATOR iterator) const
const ValueType & operator()(const size_t x0, const size_t x1, const size_t x2, const size_t x3) const
const ValueType & operator()(const size_t x0, const size_t x1, const size_t x2) const
void error(const std::string &reason=std::string(" ")) 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 * ShapeIteratorType
void squeeze()
Remove singleton dimensions by setting their coordinates to zero.
ConstIteratorType begin1d() const
marray::View< V,false >::iterator IteratorType
ConstIteratorType end() const
size_t shape(const size_t i) const
ConstIteratorType end1d() const
ValueType & operator[](ITERATOR iterator)
const ValueType & operator()(const size_t x0, const size_t x1, const size_t x2, const size_t x3, const size_t x4) const
ConstIteratorType begin() const