annotate DEPENDENCIES/generic/include/boost/python/numeric.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // Copyright David Abrahams 2002.
Chris@16 2 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 3 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 4 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 5 #ifndef NUMARRAY_DWA2002922_HPP
Chris@16 6 # define NUMARRAY_DWA2002922_HPP
Chris@16 7
Chris@16 8 # include <boost/python/detail/prefix.hpp>
Chris@16 9
Chris@16 10 # include <boost/python/tuple.hpp>
Chris@16 11 # include <boost/python/str.hpp>
Chris@16 12 # include <boost/preprocessor/iteration/local.hpp>
Chris@16 13 # include <boost/preprocessor/cat.hpp>
Chris@16 14 # include <boost/preprocessor/repetition/enum.hpp>
Chris@16 15 # include <boost/preprocessor/repetition/enum_params.hpp>
Chris@16 16 # include <boost/preprocessor/repetition/enum_binary_params.hpp>
Chris@16 17
Chris@16 18 namespace boost { namespace python { namespace numeric {
Chris@16 19
Chris@16 20 class array;
Chris@16 21
Chris@16 22 namespace aux
Chris@16 23 {
Chris@16 24 struct BOOST_PYTHON_DECL array_base : object
Chris@16 25 {
Chris@16 26 # define BOOST_PP_LOCAL_MACRO(n) \
Chris@16 27 array_base(BOOST_PP_ENUM_PARAMS_Z(1, n, object const& x));
Chris@16 28 # define BOOST_PP_LOCAL_LIMITS (1, 7)
Chris@16 29 # include BOOST_PP_LOCAL_ITERATE()
Chris@16 30
Chris@16 31 object argmax(long axis=-1);
Chris@16 32 object argmin(long axis=-1);
Chris@16 33 object argsort(long axis=-1);
Chris@16 34 object astype(object const& type = object());
Chris@16 35 void byteswap();
Chris@16 36 object copy() const;
Chris@16 37 object diagonal(long offset = 0, long axis1 = 0, long axis2 = 1) const;
Chris@16 38 void info() const;
Chris@16 39 bool is_c_array() const;
Chris@16 40 bool isbyteswapped() const;
Chris@16 41 array new_(object type) const;
Chris@16 42 void sort();
Chris@16 43 object trace(long offset = 0, long axis1 = 0, long axis2 = 1) const;
Chris@16 44 object type() const;
Chris@16 45 char typecode() const;
Chris@16 46
Chris@16 47 object factory(
Chris@16 48 object const& sequence = object()
Chris@16 49 , object const& typecode = object()
Chris@16 50 , bool copy = true
Chris@16 51 , bool savespace = false
Chris@16 52 , object type = object()
Chris@16 53 , object shape = object());
Chris@16 54
Chris@16 55 object getflat() const;
Chris@16 56 long getrank() const;
Chris@16 57 object getshape() const;
Chris@16 58 bool isaligned() const;
Chris@16 59 bool iscontiguous() const;
Chris@16 60 long itemsize() const;
Chris@16 61 long nelements() const;
Chris@16 62 object nonzero() const;
Chris@16 63
Chris@16 64 void put(object const& indices, object const& values);
Chris@16 65
Chris@16 66 void ravel();
Chris@16 67
Chris@16 68 object repeat(object const& repeats, long axis=0);
Chris@16 69
Chris@16 70 void resize(object const& shape);
Chris@16 71
Chris@16 72 void setflat(object const& flat);
Chris@16 73 void setshape(object const& shape);
Chris@16 74
Chris@16 75 void swapaxes(long axis1, long axis2);
Chris@16 76
Chris@16 77 object take(object const& sequence, long axis = 0) const;
Chris@16 78
Chris@16 79 void tofile(object const& file) const;
Chris@16 80
Chris@16 81 str tostring() const;
Chris@16 82
Chris@16 83 void transpose(object const& axes = object());
Chris@16 84
Chris@16 85 object view() const;
Chris@16 86
Chris@16 87 public: // implementation detail - do not touch.
Chris@16 88 BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(array_base, object);
Chris@16 89 };
Chris@16 90
Chris@16 91 struct BOOST_PYTHON_DECL array_object_manager_traits
Chris@16 92 {
Chris@16 93 static bool check(PyObject* obj);
Chris@16 94 static detail::new_non_null_reference adopt(PyObject* obj);
Chris@16 95 static PyTypeObject const* get_pytype() ;
Chris@16 96 };
Chris@16 97 } // namespace aux
Chris@16 98
Chris@16 99 class array : public aux::array_base
Chris@16 100 {
Chris@16 101 typedef aux::array_base base;
Chris@16 102 public:
Chris@16 103
Chris@16 104 object astype() { return base::astype(); }
Chris@16 105
Chris@16 106 template <class Type>
Chris@16 107 object astype(Type const& type_)
Chris@16 108 {
Chris@16 109 return base::astype(object(type_));
Chris@16 110 }
Chris@16 111
Chris@16 112 template <class Type>
Chris@16 113 array new_(Type const& type_) const
Chris@16 114 {
Chris@16 115 return base::new_(object(type_));
Chris@16 116 }
Chris@16 117
Chris@16 118 template <class Sequence>
Chris@16 119 void resize(Sequence const& x)
Chris@16 120 {
Chris@16 121 base::resize(object(x));
Chris@16 122 }
Chris@16 123
Chris@16 124 # define BOOST_PP_LOCAL_MACRO(n) \
Chris@16 125 void resize(BOOST_PP_ENUM_PARAMS_Z(1, n, long x)) \
Chris@16 126 { \
Chris@16 127 resize(make_tuple(BOOST_PP_ENUM_PARAMS_Z(1, n, x))); \
Chris@16 128 }
Chris@16 129 # define BOOST_PP_LOCAL_LIMITS (1, BOOST_PYTHON_MAX_ARITY)
Chris@16 130 # include BOOST_PP_LOCAL_ITERATE()
Chris@16 131
Chris@16 132 template <class Sequence>
Chris@16 133 void setshape(Sequence const& x)
Chris@16 134 {
Chris@16 135 base::setshape(object(x));
Chris@16 136 }
Chris@16 137
Chris@16 138 # define BOOST_PP_LOCAL_MACRO(n) \
Chris@16 139 void setshape(BOOST_PP_ENUM_PARAMS_Z(1, n, long x)) \
Chris@16 140 { \
Chris@16 141 setshape(make_tuple(BOOST_PP_ENUM_PARAMS_Z(1, n, x))); \
Chris@16 142 }
Chris@16 143 # define BOOST_PP_LOCAL_LIMITS (1, BOOST_PYTHON_MAX_ARITY)
Chris@16 144 # include BOOST_PP_LOCAL_ITERATE()
Chris@16 145
Chris@16 146 template <class Indices, class Values>
Chris@16 147 void put(Indices const& indices, Values const& values)
Chris@16 148 {
Chris@16 149 base::put(object(indices), object(values));
Chris@16 150 }
Chris@16 151
Chris@16 152 template <class Sequence>
Chris@16 153 object take(Sequence const& sequence, long axis = 0)
Chris@16 154 {
Chris@16 155 return base::take(object(sequence), axis);
Chris@16 156 }
Chris@16 157
Chris@16 158 template <class File>
Chris@16 159 void tofile(File const& f) const
Chris@16 160 {
Chris@16 161 base::tofile(object(f));
Chris@16 162 }
Chris@16 163
Chris@16 164 object factory()
Chris@16 165 {
Chris@16 166 return base::factory();
Chris@16 167 }
Chris@16 168
Chris@16 169 template <class Sequence>
Chris@16 170 object factory(Sequence const& sequence)
Chris@16 171 {
Chris@16 172 return base::factory(object(sequence));
Chris@16 173 }
Chris@16 174
Chris@16 175 template <class Sequence, class Typecode>
Chris@16 176 object factory(
Chris@16 177 Sequence const& sequence
Chris@16 178 , Typecode const& typecode_
Chris@16 179 , bool copy = true
Chris@16 180 , bool savespace = false
Chris@16 181 )
Chris@16 182 {
Chris@16 183 return base::factory(object(sequence), object(typecode_), copy, savespace);
Chris@16 184 }
Chris@16 185
Chris@16 186 template <class Sequence, class Typecode, class Type>
Chris@16 187 object factory(
Chris@16 188 Sequence const& sequence
Chris@16 189 , Typecode const& typecode_
Chris@16 190 , bool copy
Chris@16 191 , bool savespace
Chris@16 192 , Type const& type
Chris@16 193 )
Chris@16 194 {
Chris@16 195 return base::factory(object(sequence), object(typecode_), copy, savespace, object(type));
Chris@16 196 }
Chris@16 197
Chris@16 198 template <class Sequence, class Typecode, class Type, class Shape>
Chris@16 199 object factory(
Chris@16 200 Sequence const& sequence
Chris@16 201 , Typecode const& typecode_
Chris@16 202 , bool copy
Chris@16 203 , bool savespace
Chris@16 204 , Type const& type
Chris@16 205 , Shape const& shape
Chris@16 206 )
Chris@16 207 {
Chris@16 208 return base::factory(object(sequence), object(typecode_), copy, savespace, object(type), object(shape));
Chris@16 209 }
Chris@16 210
Chris@16 211 # define BOOST_PYTHON_ENUM_AS_OBJECT(z, n, x) object(BOOST_PP_CAT(x,n))
Chris@16 212 # define BOOST_PP_LOCAL_MACRO(n) \
Chris@16 213 template <BOOST_PP_ENUM_PARAMS_Z(1, n, class T)> \
Chris@16 214 explicit array(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, n, T, const& x)) \
Chris@16 215 : base(BOOST_PP_ENUM_1(n, BOOST_PYTHON_ENUM_AS_OBJECT, x)) \
Chris@16 216 {}
Chris@16 217 # define BOOST_PP_LOCAL_LIMITS (1, 7)
Chris@16 218 # include BOOST_PP_LOCAL_ITERATE()
Chris@16 219 # undef BOOST_PYTHON_AS_OBJECT
Chris@16 220
Chris@16 221 static BOOST_PYTHON_DECL void set_module_and_type(char const* package_name = 0, char const* type_attribute_name = 0);
Chris@16 222 static BOOST_PYTHON_DECL std::string get_module_name();
Chris@16 223
Chris@16 224 public: // implementation detail -- for internal use only
Chris@16 225 BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(array, base);
Chris@16 226 };
Chris@16 227
Chris@16 228 } // namespace boost::python::numeric
Chris@16 229
Chris@16 230 namespace converter
Chris@16 231 {
Chris@16 232 template <>
Chris@16 233 struct object_manager_traits< numeric::array >
Chris@16 234 : numeric::aux::array_object_manager_traits
Chris@16 235 {
Chris@16 236 BOOST_STATIC_CONSTANT(bool, is_specialized = true);
Chris@16 237 };
Chris@16 238 }
Chris@16 239
Chris@16 240 }} // namespace boost::python
Chris@16 241
Chris@16 242 #endif // NUMARRAY_DWA2002922_HPP