mirror of
https://github.com/boostorg/python.git
synced 2026-01-23 17:52:17 +00:00
https://svn.boost.org/svn/boost/trunk ........ r40889 | nikiml | 2007-11-07 08:06:55 -0800 (Wed, 07 Nov 2007) | 1 line added forgotten array_object_manager_traits::get_pytype ........ r40890 | bemandawes | 2007-11-07 08:08:09 -0800 (Wed, 07 Nov 2007) | 1 line Copyright and/or License cleanup ........ r40892 | nesotto | 2007-11-07 08:54:10 -0800 (Wed, 07 Nov 2007) | 1 line changed constants to inline function to avoid ODR problems ........ r40893 | garcia | 2007-11-07 09:06:19 -0800 (Wed, 07 Nov 2007) | 2 lines changed url to the right one. ........ r40894 | johnmaddock | 2007-11-07 09:17:39 -0800 (Wed, 07 Nov 2007) | 1 line Added support for VC9. ........ r40895 | johnmaddock | 2007-11-07 09:21:41 -0800 (Wed, 07 Nov 2007) | 1 line Regenerated docs to add license info. ........ r40896 | johnmaddock | 2007-11-07 09:38:19 -0800 (Wed, 07 Nov 2007) | 2 lines Removed PDF docs: we'll put these somewhere else. Fixed some license/copyright issues. ........ r40897 | igaztanaga | 2007-11-07 09:55:18 -0800 (Wed, 07 Nov 2007) | 1 line Increased shared memory size, since it was insufficient for 64 bit applications ........ r40898 | jhunold | 2007-11-07 10:06:31 -0800 (Wed, 07 Nov 2007) | 4 lines Fix: remove <user-interface>gui from usage-requirements of QtGui. Rationale: <user-interface>gui merely disables console output window on <target-os>windows. But users often need console debug output when running Gui apps. ........ r40900 | johnmaddock | 2007-11-07 10:26:11 -0800 (Wed, 07 Nov 2007) | 1 line Added license info. ........ r40901 | johnmaddock | 2007-11-07 10:27:08 -0800 (Wed, 07 Nov 2007) | 1 line Added license info. ........ r40902 | johnmaddock | 2007-11-07 10:29:00 -0800 (Wed, 07 Nov 2007) | 1 line Added copyright. ........ r40903 | johnmaddock | 2007-11-07 10:38:23 -0800 (Wed, 07 Nov 2007) | 1 line Added license info. ........ r40906 | guwi17 | 2007-11-07 11:34:03 -0800 (Wed, 07 Nov 2007) | 2 lines - io.hpp: added missing include ........ r40907 | danieljames | 2007-11-07 12:27:25 -0800 (Wed, 07 Nov 2007) | 1 line Copied Joel's license changes to the xhtml stylesheet. ........ r40912 | bemandawes | 2007-11-07 13:54:48 -0800 (Wed, 07 Nov 2007) | 1 line Initial commit. The starting point for the reference documentation is N1975, Filesystem Library Proposal for TR2 (Revision 3). ........ r40914 | pdimov | 2007-11-07 14:47:55 -0800 (Wed, 07 Nov 2007) | 1 line Attempt unspecified bool fix for Sun 5.7-5.9 ........ r40916 | bemandawes | 2007-11-07 17:47:36 -0800 (Wed, 07 Nov 2007) | 1 line Explicitly say 'no top-posting'. Add links to Wikipedia posting article ........ r40918 | bemandawes | 2007-11-07 18:55:21 -0800 (Wed, 07 Nov 2007) | 1 line Cope with larger errno on 64-bit systems ........ r40919 | chris_kohlhoff | 2007-11-07 20:10:14 -0800 (Wed, 07 Nov 2007) | 2 lines Eliminate the need for an extra thread to perform timer dispatching. ........ [SVN r40922]
140 lines
4.2 KiB
C++
140 lines
4.2 KiB
C++
// 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)
|
|
|
|
#include <boost/python/numeric.hpp>
|
|
#include <boost/python/tuple.hpp>
|
|
#include <boost/python/module.hpp>
|
|
#include <boost/python/def.hpp>
|
|
#include <boost/python/str.hpp>
|
|
|
|
using namespace boost::python;
|
|
|
|
#if BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x580))
|
|
# define make_tuple boost::python::make_tuple
|
|
#endif
|
|
|
|
// See if we can invoke array() from C++
|
|
numeric::array new_array()
|
|
{
|
|
return numeric::array(
|
|
make_tuple(
|
|
make_tuple(1,2,3)
|
|
, make_tuple(4,5,6)
|
|
, make_tuple(7,8,9)
|
|
)
|
|
);
|
|
}
|
|
|
|
// test argument conversion
|
|
void take_array(numeric::array /*x*/)
|
|
{
|
|
}
|
|
|
|
// A separate function to invoke the info() member. Must happen
|
|
// outside any doctests since this prints directly to stdout and the
|
|
// result text includes the address of the 'self' array.
|
|
void info(numeric::array const& z)
|
|
{
|
|
z.info();
|
|
}
|
|
|
|
namespace
|
|
{
|
|
object handle_error()
|
|
{
|
|
PyObject* type, *value, *traceback;
|
|
PyErr_Fetch(&type, &value, &traceback);
|
|
handle<> ty(type), v(value), tr(traceback);
|
|
return object("exception");
|
|
str format("exception type: %sn");
|
|
format += "exception value: %sn";
|
|
format += "traceback:n%s" ;
|
|
object ret = format % boost::python::make_tuple(ty, v, tr);
|
|
return ret;
|
|
}
|
|
}
|
|
#define CHECK(expr) \
|
|
{ \
|
|
object result; \
|
|
try { result = object(expr); } \
|
|
catch(error_already_set) \
|
|
{ \
|
|
result = handle_error(); \
|
|
} \
|
|
check(result); \
|
|
}
|
|
|
|
// Tests which work on both Numeric and numarray array objects. Of
|
|
// course all of the operators "just work" since numeric::array
|
|
// inherits that behavior from object.
|
|
void exercise(numeric::array& y, object check)
|
|
{
|
|
y[make_tuple(2,1)] = 3;
|
|
CHECK(y);
|
|
CHECK(y.astype('D'));
|
|
CHECK(y.copy());
|
|
CHECK(y.typecode());
|
|
}
|
|
|
|
// numarray-specific tests. check is a callable object which we can
|
|
// use to record intermediate results, which are later compared with
|
|
// the results of corresponding python operations.
|
|
void exercise_numarray(numeric::array& y, object check)
|
|
{
|
|
CHECK(str(y));
|
|
|
|
CHECK(y.argmax());
|
|
CHECK(y.argmax(0));
|
|
|
|
CHECK(y.argmin());
|
|
CHECK(y.argmin(0));
|
|
|
|
CHECK(y.argsort());
|
|
CHECK(y.argsort(1));
|
|
|
|
y.byteswap();
|
|
CHECK(y);
|
|
|
|
CHECK(y.diagonal());
|
|
CHECK(y.diagonal(1));
|
|
CHECK(y.diagonal(0, 0));
|
|
CHECK(y.diagonal(0, 1, 0));
|
|
|
|
CHECK(y.is_c_array());
|
|
CHECK(y.isbyteswapped());
|
|
|
|
CHECK(y.trace());
|
|
CHECK(y.trace(1));
|
|
CHECK(y.trace(0, 0));
|
|
CHECK(y.trace(0, 1, 0));
|
|
|
|
CHECK(y.new_("D").getshape());
|
|
CHECK(y.new_("D").type());
|
|
y.sort();
|
|
CHECK(y);
|
|
CHECK(y.type());
|
|
|
|
CHECK(y.factory(make_tuple(1.2, 3.4)));
|
|
CHECK(y.factory(make_tuple(1.2, 3.4), "f8"));
|
|
CHECK(y.factory(make_tuple(1.2, 3.4), "f8", true));
|
|
CHECK(y.factory(make_tuple(1.2, 3.4), "f8", true, false));
|
|
CHECK(y.factory(make_tuple(1.2, 3.4), "f8", true, false, object()));
|
|
CHECK (y.factory(make_tuple(1.2, 3.4), "f8", true, false, object(), make_tuple(1,2,1)));
|
|
|
|
}
|
|
|
|
BOOST_PYTHON_MODULE(numpy_ext)
|
|
{
|
|
def("new_array", new_array);
|
|
def("take_array", take_array);
|
|
def("exercise", exercise);
|
|
def("exercise_numarray", exercise_numarray);
|
|
def("set_module_and_type", &numeric::array::set_module_and_type);
|
|
def("get_module_name", &numeric::array::get_module_name);
|
|
def("info", info);
|
|
}
|
|
|
|
#include "module_tail.cpp"
|