📄 numeric.hpp
字号:
// Copyright David Abrahams 2002.// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)#ifndef NUMARRAY_DWA2002922_HPP# define NUMARRAY_DWA2002922_HPP# include <boost/python/detail/prefix.hpp># include <boost/python/tuple.hpp># include <boost/python/str.hpp># include <boost/preprocessor/iteration/local.hpp># include <boost/preprocessor/cat.hpp># include <boost/preprocessor/repetition/enum.hpp># include <boost/preprocessor/repetition/enum_params.hpp># include <boost/preprocessor/repetition/enum_binary_params.hpp>namespace boost { namespace python { namespace numeric {namespace aux{ struct BOOST_PYTHON_DECL array_base : object {# define BOOST_PP_LOCAL_MACRO(n) \ array_base(BOOST_PP_ENUM_PARAMS_Z(1, n, object const& x));# define BOOST_PP_LOCAL_LIMITS (1, 7)# include BOOST_PP_LOCAL_ITERATE() object argmax(long axis=-1); object argmin(long axis=-1); object argsort(long axis=-1); object astype(object const& type = object()); void byteswap(); object copy() const; object diagonal(long offset = 0, long axis1 = 0, long axis2 = 1) const; void info() const; bool is_c_array() const; bool isbyteswapped() const; object new_(object type) const; void sort(); object trace(long offset = 0, long axis1 = 0, long axis2 = 1) const; object type() const; char typecode() const; object factory(object const& buffer=object() , object const& type=object() , object const& shape=object() , bool copy = true , bool savespace = false , object typecode = object()); object getflat() const; long getrank() const; object getshape() const; bool isaligned() const; bool iscontiguous() const; long itemsize() const; long nelements() const; object nonzero() const; void put(object const& indices, object const& values); void ravel(); object repeat(object const& repeats, long axis=0); void resize(object const& shape); void setflat(object const& flat); void setshape(object const& shape); void swapaxes(long axis1, long axis2); object take(object const& sequence, long axis = 0) const; void tofile(object const& file) const; str tostring() const; void transpose(object const& axes = object()); object view() const; public: // implementation detail - do not touch. BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(array_base, object); }; struct BOOST_PYTHON_DECL array_object_manager_traits { static bool check(PyObject* obj); static detail::new_non_null_reference adopt(PyObject* obj); };} // namespace auxclass array : public aux::array_base{ typedef aux::array_base base; public: object astype() { return base::astype(); } template <class Type> object astype(Type const& type_) { return base::astype(object(type_)); } template <class Type> object new_(Type const& type_) const { return base::new_(object(type_)); } template <class Sequence> void resize(Sequence const& x) { base::resize(object(x)); } # define BOOST_PP_LOCAL_MACRO(n) \ void resize(BOOST_PP_ENUM_PARAMS_Z(1, n, long x)) \ { \ resize(make_tuple(BOOST_PP_ENUM_PARAMS_Z(1, n, x))); \ }# define BOOST_PP_LOCAL_LIMITS (1, BOOST_PYTHON_MAX_ARITY)# include BOOST_PP_LOCAL_ITERATE() template <class Sequence> void setshape(Sequence const& x) { base::setshape(object(x)); } # define BOOST_PP_LOCAL_MACRO(n) \ void setshape(BOOST_PP_ENUM_PARAMS_Z(1, n, long x)) \ { \ setshape(make_tuple(BOOST_PP_ENUM_PARAMS_Z(1, n, x))); \ }# define BOOST_PP_LOCAL_LIMITS (1, BOOST_PYTHON_MAX_ARITY)# include BOOST_PP_LOCAL_ITERATE() template <class Indices, class Values> void put(Indices const& indices, Values const& values) { base::put(object(indices), object(values)); } template <class Sequence> object take(Sequence const& sequence, long axis = 0) { return base::take(object(sequence), axis); } template <class File> void tofile(File const& f) const { base::tofile(object(f)); } object factory() { return base::factory(); } template <class Buffer> object factory(Buffer const& buffer) { return base::factory(object(buffer)); } template <class Buffer, class Type> object factory( Buffer const& buffer , Type const& type_) { return base::factory(object(buffer), object(type_)); } template <class Buffer, class Type, class Shape> object factory( Buffer const& buffer , Type const& type_ , Shape const& shape , bool copy = true , bool savespace = false) { return base::factory(object(buffer), object(type_), object(shape), copy, savespace); } template <class Buffer, class Type, class Shape> object factory( Buffer const& buffer , Type const& type_ , Shape const& shape , bool copy , bool savespace , char typecode) { return base::factory(object(buffer), object(type_), object(shape), copy, savespace, object(typecode)); }# define BOOST_PYTHON_ENUM_AS_OBJECT(z, n, x) object(BOOST_PP_CAT(x,n))# define BOOST_PP_LOCAL_MACRO(n) \ template <BOOST_PP_ENUM_PARAMS_Z(1, n, class T)> \ explicit array(BOOST_PP_ENUM_BINARY_PARAMS_Z(1, n, T, const& x)) \ : base(BOOST_PP_ENUM_1(n, BOOST_PYTHON_ENUM_AS_OBJECT, x)) \ {}# define BOOST_PP_LOCAL_LIMITS (1, 7)# include BOOST_PP_LOCAL_ITERATE()# undef BOOST_PYTHON_AS_OBJECT static BOOST_PYTHON_DECL void set_module_and_type(char const* package_name = 0, char const* type_attribute_name = 0); public: // implementation detail -- for internal use only BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(array, base);};} // namespace boost::python::numericnamespace converter{ template <> struct object_manager_traits< numeric::array > : numeric::aux::array_object_manager_traits { BOOST_STATIC_CONSTANT(bool, is_specialized = true); };}}} // namespace boost::python#endif // NUMARRAY_DWA2002922_HPP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -