ppf build status update
Good results obtained on Windows 7 using
Microsoft SDK 7.1 (msvc-10.0, x64),
Boost-1.55.0,
Blitz++-0.10,
ActivePython-2.7.6 and
Numpy (MKL-1.8).
There were a few 'tweaks' necessary to obtain the build. One thing to watch out for is the absence of these declarations in blitz-0.10/blitz/ms/bzconfig.h:
/* Macro for declaring aligned variables */
#ifndef BZ_ALIGN_VARIABLE
# define BZ_ALIGN_VARIABLE(vartype,varname,alignment) \
vartype varname; \
/**/
#endif
/* Set SIMD instruction width in bytes */
#ifndef BZ_SIMD_WIDTH
# define BZ_SIMD_WIDTH 1
#endif
I built
ppf_date_time.pyd
and
ppf_math.pyd
with a command along the lines of
bjam toolset=msvc-10.0 link=shared threading=multi variant=release address-model=64
I think the presence of these features confuses the install commands. I had to move the files into final position by hand. My user-config.jam was this:
import toolset : using ;
using msvc
: 10.0
: "c:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/Bin/amd64/cl.exe"
;
using python
: 2.7
: "c:/python27/python.exe"
;
and my site-config.jam read like this
import project ;
project.initialize $(__name__) ;
project site-config ;
alias boost_headers : : : :
<include>c:/project/boost_1_55_0
;
alias python_headers : : : :
<include>c:/python27/include
;
alias numpy_headers : : : :
<include>c:/Python27/Lib/site-packages/numpy/core/include
;
alias blitz_headers : : : :
<include>c:/project/blitz-0.10
;
lib python
:
: <name>python27
: <search>c:/python27/libs
<link>shared
;
lib boostpython
:
: <name>boost_python-vc100-mt-1_55
<search>c:/project/boost_1_55_0/stage/lib
<link>shared <variant>release
<toolset-msvc:version>10.0
;
lib boostunittestframework
:
: <name>boost_unit_test_framework-vc100-mt-1_55
<search>c:/project/boost-1_55_0/stage/lib
<link>static <variant>release
<toolset-msvc:version>10.0
;
lib boostdatetime
:
: <name>boost_date_time-vc100-mt-1_55
<search>c:/project/boost-1_55_0/stage/lib
<link>static
<variant>release
<toolset-msvc:version>10.0
;
Lines 24-29 of ppf/ext/lib/date_time/src/register_date_more.cpp seem to trigger an ambiguous overload error - that needs looking at. I worked around it with the following for now.
std::string to_string() const
{
//return this->get_override("to_string")();
return "not implemented - fix me";
}
After build & installation (python setup.py install), as always, don't forget to configure your environment approiately.
set PATH="c:/project/boost-1_55_0/stage/lib;%PATH%"
set PYTHONPATH="c:/python27/lib/site-packages;%PYTHONPATH%"
(of course make sure that the files
c:/python27/lib/site-packages/ppf/date_time/ppf_date_time.pyd
,
c:/python27/lib/site-packages/ppf/math/ppf_math.pyd
and
c:/project/boost-1_55_0/stage/lib/boost_python-vc100-mt-1_55.dll
exist).
Testing goes like this.
c:\Python27\Lib\site-packages\ppf\test>python test_all.py --verbose
python test_all.py --verbose
test_call (test_core.black_scholes_tests) ... ok
test_put (test_core.black_scholes_tests) ... ok
test (test_core.libor_rate_tests) ... ok
test (test_core.swap_rate_tests) ... ok
test_nth_imm_of_year (test_date_time.imm_tests) ... ok
test_first_imm_after (test_date_time.imm_tests) ... ok
test_first_imm_before (test_date_time.imm_tests) ... ok
test (test_date_time.business_day_tests) ... ok
test_discount_factor (test_hull_white.requestor_tests) ... ok
test_term_vol (test_hull_white.requestor_tests) ... ok
test (test_hull_white.state_tests) ... ok
test_numeraire_rebased_bond (test_hull_white.fill_tests) ... ok
test_libor (test_hull_white.fill_tests) ... ok
test_discounted_libor_rollback (test_hull_white.rollback_tests) ... ok
test_bond_option (test_hull_white.rollback_tests) ... ok
test_constant (test_hull_white.rollback_tests) ... ok
test_mean_and_variance (test_hull_white.evolve_tests) ... ok
test_bond (test_hull_white.evolve_tests) ... ok
test_explanatory_variables (test_hull_white.exercise_tests) ... ok
test_value (test_lattice_pricer.swap_tests) ... ok
test_value (test_lattice_pricer.bermudan_tests) ... ok
deep_in_the_money_test (test_lattice_pricer.moneyness_tests) ... ok
deep_out_the_money_test (test_lattice_pricer.moneyness_tests) ... ok
test (test_market.surface_tests) ... ok
test (test_math.linear_interpolation_tests) ... ok
test_list (test_math.cubic_spline_interpolation_tests) ... ok
test_array (test_math.cubic_spline_interpolation_tests) ... ok
test (test_math.solve_tridiagonal_system_tests) ... ok
test (test_math.solve_upper_diagonal_system_tests) ... ok
test (test_math.singular_value_decomposition_back_substitution_tests) ... ok
test (test_math.generalised_least_squares_fit_tests) ... ok
test1 (test_math.bisect_tests) ... ok
test2 (test_math.bisect_tests) ... ok
test (test_math.newton_raphson_tests) ... ok
test (test_math.piecewise_cubic_fitting_tests) ... ok
test1 (test_math.normal_distribution_integral_tests) ... ok
test2 (test_math.normal_distribution_integral_tests) ... ok
lognormal_martingale_test (test_math.integrator_tests) ... ok
tower_law_test (test_math.integrator_tests) ... ok
atm_option_test (test_math.integrator_tests) ... ok
no_trigger_limit_test (test_monte_carlo_pricer.tarn_tests) ... ok
trigger_after_first_flow_test (test_monte_carlo_pricer.tarn_tests) ... ok
monotonic_with_target_test (test_monte_carlo_pricer.tarn_tests) ... ok
test_value (test_monte_carlo_pricer.bermudan_tests) ... ok
deep_in_the_money_test (test_monte_carlo_pricer.moneyness_tests) ... ok
deep_out_the_money_test (test_monte_carlo_pricer.moneyness_tests) ... ok
test_lower_bound (test_utility.bound_tests) ... ok
test_upper_bound (test_utility.bound_tests) ... ok
test_equal_range (test_utility.bound_tests) ... ok
test_bound (test_utility.bound_tests) ... ok
test_bound_ci (test_utility.bound_tests) ... ok
----------------------------------------------------------------------
Ran 51 tests in 8.090s
OK
It seems there are builds now for Python 3.3 Numpy here. With these, it should be possible to produce a Python 3.3, 64-bit Windows ppf
. This upgrade will require some minor changes to the ppf
Python code.