import numpy as np
from numpy.testing import *

from scikits.image.graph import trace_path

a = np.ones((8,8), dtype=np.float32)
a[1:-1, 1] = 0
a[1, 1:-1] = 0

## array([[ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.],
##        [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  1.],
##        [ 1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.],
##        [ 1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.],
##        [ 1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.],
##        [ 1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.],
##        [ 1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.],
##        [ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]], dtype=float32)

def test_basic():
    costs, return_path = trace_path(a, (1, 6), [(7, 2)])
    assert_array_equal(costs,
                       [[ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.],
                        [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  1.],
                        [ 1.,  0.,  1.,  1.,  1.,  1.,  1.,  1.],
                        [ 1.,  0.,  1.,  2.,  2.,  2.,  2.,  2.],
                        [ 1.,  0.,  1.,  2.,  3.,  3.,  3.,  3.],
                        [ 1.,  0.,  1.,  2.,  3.,  4.,  4.,  4.],
                        [ 1.,  0.,  1.,  2.,  3.,  4.,  5.,  5.],
                        [ 1.,  1.,  1.,  2.,  3.,  4.,  5.,  6.]])

    assert_array_equal(return_path,
                       [[(1, 6),
                         (1, 5),
                         (1, 4),
                         (1, 3),
                         (1, 2),
                         (2, 1),
                         (3, 1),
                         (4, 1),
                         (5, 1),
                         (6, 1),
                         (7, 2)]])

def test_no_diagonal():
    costs, path = trace_path(a, (1, 6), [(7, 2)], diagonal_steps=False)
    assert_array_equal(costs,
                       [[ 2.,  1.,  1.,  1.,  1.,  1.,  1.,  2.],
                        [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  1.],
                        [ 1.,  0.,  1.,  1.,  1.,  1.,  1.,  2.],
                        [ 1.,  0.,  1.,  2.,  2.,  2.,  2.,  3.],
                        [ 1.,  0.,  1.,  2.,  3.,  3.,  3.,  4.],
                        [ 1.,  0.,  1.,  2.,  3.,  4.,  4.,  5.],
                        [ 1.,  0.,  1.,  2.,  3.,  4.,  5.,  6.],
                        [ 2.,  1.,  2.,  3.,  4.,  5.,  6.,  7.]])
    assert_array_equal(path,
                       [[(1, 6),
                         (1, 5),
                         (1, 4),
                         (1, 3),
                         (1, 2),
                         (1, 1),
                         (2, 1),
                         (3, 1),
                         (4, 1),
                         (5, 1),
                         (6, 1),
                         (6, 2),
                         (7, 2)]])

if __name__ == "__main__":
    run_module_suite()

Add tests.