
P1: JYS
c03 JWBK378-Fletcher May 1, 2009 19:52 Printer: Yet to come
Extending Python from C++ 17
3.2 BOOST.MULTIARRAY AND SPECIAL FUNCTIONS
The use of multidimensional arrays in quantitative analysis programs is ubiquitous. Python,
or rather the Python libraries provide a variety of types that serve for their representa-
tion. Like the date types of the previous section, however, we prefer to emphasise in-
teroperability with C++ and so, to this end, might favour reflection of C++ array types
into Python. The ppf package exposes the Boost.MultiArray multidimensional array types
boost::multi
array<double,N> for N =1, 2, 3 to Python. To achieve this, advantage
was taken of a C++ template meta-program that facilitates reflection of the arrays, the code
for which is present in the source code accompanying this book (see ‘ext/boost/multi
array/
multi array.hpp’).
The array types are housed in the ppf
math module implemented in the C++ Python
extension ‘ppf
math.pyd’ and imported into the namespace of the ppf.math subpackage.
Usage of the array types is natural and intuitive. Here is an example taken from the ppf.math
unit tests:
class solve upper diagonal system tests(unittest.TestCase):
def test(self):
# Solve upper diagonal system of linear equations ax = b
# where
#
#a=3x3
# [ 1.75 1.5 -2.5
# 0 -0.5 0.65
# 0 0 0.25 ]
#
# and b = [0.5, -1.0, 3.5].
a = ppf.math.array2d([3,3])
a[0, 0], a[0, 1], a[0, 2] = (1.75, 1.5, ...