Skip to content

Commit

Permalink
Merge pull request #7 from wkerzendorf/fix_line_search
Browse files Browse the repository at this point in the history
Fix line search
  • Loading branch information
ssim committed Apr 15, 2014
2 parents 37db1e9 + fdcd350 commit 1cbaf81
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 0 deletions.
24 changes: 24 additions & 0 deletions tardis/montecarlo.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,25 @@ cdef extern from "randomkit/randomkit.h":
float_type_t rk_double(rk_state *state)
cdef rk_state mt_state

########### Test wrapper section #################
# This should be moved to an external file
def binary_search_wrapper(np.ndarray x, float_type_t x_insert, int_type_t imin, int_type_t imax):
cdef float_type_t* x_pointer
x_pointer = <float_type_t*> x.data
return binary_search(x_pointer, x_insert, imin, imax)

def line_search_wrapper(np.ndarray nu, float_type_t nu_insert,
int_type_t number_of_lines):
cdef float_type_t* nu_pointer
nu_pointer = <float_type_t*> nu.data
return line_search(nu_pointer, nu_insert, number_of_lines)


##################################################




cdef np.ndarray x
cdef class StorageModel:
"""
Expand Down Expand Up @@ -403,6 +422,11 @@ cdef int_type_t binary_search(float_type_t*x, float_type_t x_insert, int_type_t
else:
imin = imid
#print imin, imax, imid, imax - imin

if imax - imin == 2:
if x_insert < x[imin + 1]:
return imin + 1

return imin


Expand Down
51 changes: 51 additions & 0 deletions tardis/tests/test_montecarlo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import numpy as np
from tardis import montecarlo
import pytest


test_line_list = np.array([10, 9, 8, 7, 6, 5, 5, 4, 3, 2, 1]).astype(np.float64)


@pytest.mark.parametrize(("insert_value", "expected_insert_position"), [
(9.5, 0),
(8.5, 1),
(7.5, 2),
(6.5, 3),
(5.5, 4),
(5.2, 4),
(4.5, 6),
(3.5, 7),
(2.5, 8),
(1.5, 9)])
def test_binary_search(insert_value, expected_insert_position):
insert_position = montecarlo.binary_search_wrapper(test_line_list,
insert_value, 0, len(test_line_list)-1)
assert insert_position == expected_insert_position


@pytest.mark.parametrize(("insert_value"), [
(10.5),
(0.5)])
def test_binary_search_out_of_bounds(insert_value, capsys):
insert_position = montecarlo.binary_search_wrapper(test_line_list,
insert_value, 0, len(test_line_list)-1)

expected_exception = ("Exception ValueError: ValueError('Binary Search "
"called but not inside domain. Abort!',) in "
"'tardis.montecarlo.binary_search' ignored\n")
stdout, stderr = capsys.readouterr()

assert stderr == expected_exception

@pytest.mark.parametrize(("insert_value", "expected_insert_position"), [
(10.5, 0),
(0.5, len(test_line_list))])
def test_line_search_out_of_bounds(insert_value, expected_insert_position):
insert_position = montecarlo.line_search_wrapper(test_line_list,
insert_value, len(test_line_list))

assert insert_position == expected_insert_position




0 comments on commit 1cbaf81

Please sign in to comment.