LSSTApplications  10.0+286,10.0+36,10.0+46,10.0-2-g4f67435,10.1+152,10.1+37,11.0,11.0+1,11.0-1-g47edd16,11.0-1-g60db491,11.0-1-g7418c06,11.0-2-g04d2804,11.0-2-g68503cd,11.0-2-g818369d,11.0-2-gb8b8ce7
LSSTDataManagementBasePackage
Static Public Member Functions | List of all members
ndarray::PyConverter< EigenView< T, N, C, XprKind_, Rows_, Cols_ > > Struct Template Reference

Specialization of PyConverter for EigenView. More...

#include <eigen.h>

Static Public Member Functions

static bool fromPythonStage1 (PyPtr &p)
 
static bool fromPythonStage2 (PyPtr const &input, EigenView< T, N, C, XprKind_, Rows_, Cols_ > &output)
 
static PyObject * toPython (EigenView< T, N, C, XprKind_, Rows_, Cols_ > const &m, PyObject *owner=NULL)
 

Detailed Description

template<typename T, int N, int C, typename XprKind_, int Rows_, int Cols_>
struct ndarray::PyConverter< EigenView< T, N, C, XprKind_, Rows_, Cols_ > >

Specialization of PyConverter for EigenView.

Definition at line 43 of file eigen.h.

Member Function Documentation

template<typename T , int N, int C, typename XprKind_ , int Rows_, int Cols_>
static bool ndarray::PyConverter< EigenView< T, N, C, XprKind_, Rows_, Cols_ > >::fromPythonStage1 ( PyPtr p)
inlinestatic

Definition at line 45 of file eigen.h.

45  {
46  // add or remove dimensions with size one so we have the right number of dimensions
47  if (PyArray_Check(p.get())) {
48  if ((Rows_ == 1 || Cols_ == 1) && N == 2) {
49  npy_intp shape[2] = { -1, -1 };
50  if (Rows_ == 1) {
51  shape[0] = 1;
52  } else {
53  shape[1] = 1;
54  }
55  PyArray_Dims dims = { shape, 2 };
56  PyPtr r(PyArray_Newshape(reinterpret_cast<PyArrayObject*>(p.get()), &dims, NPY_ANYORDER));
57  if (!r) return false;
58  p.swap(r);
59  } else if (N == 1) {
60  PyPtr r(PyArray_Squeeze(reinterpret_cast<PyArrayObject*>(p.get())));
61  if (!r) return false;
62  p.swap(r);
63  }
64  } // else let the Array converter raise the exception
65  if (!PyConverter< Array<T,N,C> >::fromPythonStage1(p)) return false;
66  // check whether the size is correct if it's static
67  if (N == 2) {
68  if (Rows_ != Eigen::Dynamic && PyArray_DIM(p.get(), 0) != Rows_) {
69  PyErr_SetString(PyExc_ValueError, "incorrect number of rows for matrix");
70  return false;
71  }
72  if (Cols_ != Eigen::Dynamic && PyArray_DIM(p.get(), 1) != Cols_) {
73  PyErr_SetString(PyExc_ValueError, "incorrect number of columns for matrix");
74  return false;
75  }
76  } else {
77  int requiredSize = Rows_ * Cols_;
78  if (requiredSize != Eigen::Dynamic && PyArray_SIZE(p.get()) != requiredSize) {
79  PyErr_SetString(PyExc_ValueError, "incorrect number of elements for vector");
80  return false;
81  }
82  }
83  return true;
84  }
boost::intrusive_ptr< PyObject > PyPtr
A reference-counting smart pointer for PyObject.
Definition: PyConverter.h:48
template<typename T , int N, int C, typename XprKind_ , int Rows_, int Cols_>
static bool ndarray::PyConverter< EigenView< T, N, C, XprKind_, Rows_, Cols_ > >::fromPythonStage2 ( PyPtr const &  input,
EigenView< T, N, C, XprKind_, Rows_, Cols_ > &  output 
)
inlinestatic

Definition at line 86 of file eigen.h.

89  {
90  Array<T,N,C> array;
91  if (!PyConverter< Array<T,N,C> >::fromPythonStage2(input, array)) return false;
92  output.reset(array);
93  return true;
94  }
static bool fromPythonStage2(PyPtr const &input, EigenView< T, N, C, XprKind_, Rows_, Cols_ > &output)
Definition: eigen.h:86
template<typename T , int N, int C, typename XprKind_ , int Rows_, int Cols_>
static PyObject* ndarray::PyConverter< EigenView< T, N, C, XprKind_, Rows_, Cols_ > >::toPython ( EigenView< T, N, C, XprKind_, Rows_, Cols_ > const &  m,
PyObject *  owner = NULL 
)
inlinestatic

Definition at line 96 of file eigen.h.

96  {
97  PyPtr r(PyConverter< Array<T,N,C> >::toPython(m.shallow(), owner));
98  if (!r) return NULL;
99  PyPtr p(PyArray_Squeeze(reinterpret_cast<PyArrayObject*>(r.get())));
100  Py_XINCREF(p.get());
101  return p.get();
102  }
boost::intrusive_ptr< PyObject > PyPtr
A reference-counting smart pointer for PyObject.
Definition: PyConverter.h:48
tuple m
Definition: lsstimport.py:48
static PyObject * toPython(EigenView< T, N, C, XprKind_, Rows_, Cols_ > const &m, PyObject *owner=NULL)
Definition: eigen.h:96

The documentation for this struct was generated from the following file: