<s> from __future__ import division <EOL> from nose import with_setup <EOL> from nose . tools import raises <EOL> from numpy . testing import assert_equal , assert_array_equal , assert_almost_equal , assert_allclose <EOL> import numpy as np <EOL> from SALib . sample . morris_util import generate_P_star , compute_B_star , compute_delta , generate_trajectory , compute_distance , compute_distance_matrix , find_most_distant , find_maximum , make_index_list , check_input_sample , find_local_maximum , sum_distances , get_max_sum_ind , add_indices <EOL> def setup ( ) : <EOL> input_2 = [ [ <NUM_LIT:0> , <NUM_LIT:1> / <NUM_LIT> ] , [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:1> / <NUM_LIT> ] , [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:1.> ] ] <EOL> input_1 = [ [ <NUM_LIT:0> , <NUM_LIT:1> / <NUM_LIT> ] , [ <NUM_LIT:0> , <NUM_LIT:1.> ] , [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:1.> ] ] <EOL> input_3 = [ [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:0> ] , [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:2> / <NUM_LIT> ] , [ <NUM_LIT:0> , <NUM_LIT:2> / <NUM_LIT> ] ] <EOL> input_4 = [ [ <NUM_LIT:1> / <NUM_LIT> , <NUM_LIT:1.> ] , [ <NUM_LIT:1.> , <NUM_LIT:1.> ] , [ <NUM_LIT:1> , <NUM_LIT:1> / <NUM_LIT> ] ] <EOL> input_5 = [ [ <NUM_LIT:1> / <NUM_LIT> , <NUM_LIT:1.> ] , [ <NUM_LIT:1> / <NUM_LIT> , <NUM_LIT:1> / <NUM_LIT> ] , [ <NUM_LIT:1> , <NUM_LIT:1> / <NUM_LIT> ] ] <EOL> input_6 = [ [ <NUM_LIT:1> / <NUM_LIT> , <NUM_LIT:2> / <NUM_LIT> ] , [ <NUM_LIT:1> / <NUM_LIT> , <NUM_LIT:0> ] , [ <NUM_LIT:1.> , <NUM_LIT:0> ] ] <EOL> return np . concatenate ( [ input_1 , input_2 , input_3 , input_4 , input_5 , <EOL> input_6 ] ) <EOL> def test_generate_P_star ( ) : <EOL> '''<STR_LIT>''' <EOL> for i in range ( <NUM_LIT:1> , <NUM_LIT:100> ) : <EOL> output = generate_P_star ( i ) <EOL> if np . any ( np . sum ( output , <NUM_LIT:0> ) != np . ones ( i ) ) : <EOL> raise AssertionError ( "<STR_LIT>" ) <EOL> elif np . any ( np . sum ( output , <NUM_LIT:1> ) != np . ones ( i ) ) : <EOL> raise AssertionError ( "<STR_LIT>" ) <EOL> def test_compute_delta ( ) : <EOL> fixture = np . arange ( <NUM_LIT:2> , <NUM_LIT:10> ) <EOL> output = [ compute_delta ( f ) for f in fixture ] <EOL> desired = np . array ( [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ) <EOL> assert_almost_equal ( output , desired , decimal = <NUM_LIT:2> ) <EOL> def test_generate_trajectory ( ) : <EOL> G = np . array ( [ [ <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:0> , <NUM_LIT:1> ] ] ) <EOL> num_levels , grid_jump = <NUM_LIT:4> , <NUM_LIT:2> <EOL> output = generate_trajectory ( G , num_levels , grid_jump ) <EOL> if np . any ( ( output > <NUM_LIT:1> ) | ( output < <NUM_LIT:0> ) ) : <EOL> raise AssertionError ( "<STR_LIT>" ) <EOL> assert_equal ( output . shape [ <NUM_LIT:0> ] , <NUM_LIT:3> ) <EOL> assert_equal ( output . shape [ <NUM_LIT:1> ] , <NUM_LIT:3> ) <EOL> def test_compute_B_star ( ) : <EOL> '''<STR_LIT>''' <EOL> k = <NUM_LIT:3> <EOL> g = <NUM_LIT:2> <EOL> x_star = np . matrix ( np . array ( [ <NUM_LIT:1.> / <NUM_LIT:3> , <NUM_LIT:1.> / <NUM_LIT:3> , <NUM_LIT:0.> ] ) ) <EOL> J = np . matrix ( np . ones ( ( g + <NUM_LIT:1> , k ) ) ) <EOL> G = np . matrix ( '<STR_LIT>' ) <EOL> D_star = np . matrix ( '<STR_LIT>' ) <EOL> P_star = np . matrix ( '<STR_LIT>' ) <EOL> delta = <NUM_LIT> / <NUM_LIT:3> <EOL> B = np . matrix ( np . tril ( np . ones ( [ g + <NUM_LIT:1> , g ] , dtype = int ) , - <NUM_LIT:1> ) ) <EOL> desired = np . array ( [ [ <NUM_LIT:1.> / <NUM_LIT:3> , <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:1> , <NUM_LIT:1.> / <NUM_LIT:3> , <NUM_LIT> / <NUM_LIT:3> ] ] ) <EOL> output = compute_B_star ( J , x_star , delta , B , G , P_star , D_star ) <EOL> assert_array_equal ( output , desired ) <EOL> def test_distance ( ) : <EOL> '''<STR_LIT>''' <EOL> input_1 = np . matrix ( [ [ <NUM_LIT:0> , <NUM_LIT:1> / <NUM_LIT> ] , [ <NUM_LIT:0> , <NUM_LIT:1.> ] , [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:1.> ] ] , dtype = np . float32 ) <EOL> input_3 = np . matrix ( [ [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:0> ] , [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:2> / <NUM_LIT> ] , [ <NUM_LIT:0> , <NUM_LIT:2> / <NUM_LIT> ] ] , dtype = np . float32 ) <EOL> output = compute_distance ( input_1 , input_3 ) <EOL> assert_allclose ( output , <NUM_LIT> , atol = <NUM_LIT> ) <EOL> def test_distance_of_identical_matrices_is_min ( ) : <EOL> input_1 = np . matrix ( [ [ <NUM_LIT:1.> , <NUM_LIT:1.> ] , <EOL> [ <NUM_LIT:1.> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> ] ] ) <EOL> input_2 = input_1 . copy ( ) <EOL> actual = compute_distance ( input_1 , input_2 ) <EOL> desired = <NUM_LIT:0> <EOL> assert_allclose ( actual , desired , atol = <NUM_LIT> ) <EOL> def test_distance_fail_with_difference_size_ip ( ) : <EOL> input_1 = np . matrix ( [ [ <NUM_LIT:0> , <NUM_LIT:1> / <NUM_LIT> ] , [ <NUM_LIT:0> , <NUM_LIT:1.> ] ] , dtype = np . float32 ) <EOL> input_3 = np . matrix ( [ [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:0> ] , [ <NUM_LIT:2> / <NUM_LIT> , <NUM_LIT:2> / <NUM_LIT> ] , [ <NUM_LIT:0> , <NUM_LIT:2> / <NUM_LIT> ] ] , dtype = np . float32 ) <EOL> try : <EOL> compute_distance ( input_1 , input_3 , <NUM_LIT:2> ) <EOL> except : <EOL> pass <EOL> else : <EOL> raise AssertionError ( "<STR_LIT>" ) <EOL> def test_compute_distance_matrix ( ) : <EOL> '''<STR_LIT>''' <EOL> sample_inputs = setup ( ) <EOL> output = compute_distance_matrix ( sample_inputs , <NUM_LIT:6> , <NUM_LIT:2> ) <EOL> expected = np . zeros ( ( <NUM_LIT:6> , <NUM_LIT:6> ) , dtype = np . float32 ) <EOL> expected [ <NUM_LIT:1> , : ] = [ <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] <EOL> expected [ <NUM_LIT:2> , : ] = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] <EOL> expected [ <NUM_LIT:3> , : ] = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] <EOL> expected [ <NUM_LIT:4> , : ] = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT:0> ] <EOL> expected [ <NUM_LIT:5> , : ] = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> ] <EOL> assert_allclose ( output , expected , rtol = <NUM_LIT> ) <EOL> def test_compute_distance_matrix_local ( ) : <EOL> '''<STR_LIT>''' <EOL> sample_inputs = setup ( ) <EOL> output = compute_distance_matrix ( sample_inputs , <NUM_LIT:6> , <NUM_LIT:2> , local_optimization = True ) <EOL> expected = np . zeros ( ( <NUM_LIT:6> , <NUM_LIT:6> ) , dtype = np . float32 ) <EOL> expected [ <NUM_LIT:0> , : ] = [ <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] <EOL> expected [ <NUM_LIT:1> , : ] = [ <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] <EOL> expected [ <NUM_LIT:2> , : ] = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] <EOL> expected [ <NUM_LIT:3> , : ] = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> ] <EOL> expected [ <NUM_LIT:4> , : ] = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT> ] <EOL> expected [ <NUM_LIT:5> , : ] = [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> ] <EOL> assert_allclose ( output , expected , rtol = <NUM_LIT> ) <EOL> def test_sum_distances ( ) : <EOL> '''<STR_LIT>''' <EOL> sample_inputs = setup ( ) <EOL> dist_matr = compute_distance_matrix ( sample_inputs , <NUM_LIT:6> , <NUM_LIT:2> , local_optimization = True ) <EOL> indices = ( <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:2> ) <EOL> distance = sum_distances ( indices , dist_matr ) <EOL> expected = <NUM_LIT> <EOL> assert_allclose ( distance , expected , rtol = <NUM_LIT> ) <EOL> def test_get_max_sum_ind ( ) : <EOL> '''<STR_LIT>''' <EOL> indices = np . array ( [ ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:4> ) , ( <NUM_LIT:3> , <NUM_LIT:2> , <NUM_LIT:1> ) , ( <NUM_LIT:4> , <NUM_LIT:2> , <NUM_LIT:1> ) ] ) <EOL> distances = np . array ( [ <NUM_LIT:20> , <NUM_LIT> , <NUM_LIT:50> ] ) <EOL> output = get_max_sum_ind ( indices , distances , <NUM_LIT:0> , <NUM_LIT:0> ) <EOL> expected = ( <NUM_LIT:4> , <NUM_LIT:2> , <NUM_LIT:1> ) <EOL> assert_equal ( output , expected ) <EOL> def test_add_indices ( ) : <EOL> '''<STR_LIT>''' <EOL> indices = ( <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:4> ) <EOL> matr = np . zeros ( ( <NUM_LIT:6> , <NUM_LIT:6> ) , dtype = np . int16 ) <EOL> ind_extra = add_indices ( indices , matr ) <EOL> expected = [ ( <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:2> ) , ( <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> ) ] <EOL> assert_equal ( ind_extra , expected ) <EOL> def test_combo_from_find_most_distant ( ) : <EOL> '''<STR_LIT>''' <EOL> sample_inputs = setup ( ) <EOL> N = <NUM_LIT:6> <EOL> num_params = <NUM_LIT:2> <EOL> k_choices = <NUM_LIT:4> <EOL> scores = find_most_distant ( sample_inputs , N , num_params , k_choices ) <EOL> output = find_maximum ( scores , N , k_choices ) <EOL> expected = [ <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:5> ] <EOL> assert_equal ( output , expected ) <EOL> def test_find_local_maximum_distance ( ) : <EOL> '''<STR_LIT>''' <EOL> sample_inputs = setup ( ) <EOL> N = <NUM_LIT:6> <EOL> num_params = <NUM_LIT:2> <EOL> k_choices = <NUM_LIT:4> <EOL> scores_global = find_most_distant ( sample_inputs , N , num_params , k_choices ) <EOL> output_global = find_maximum ( scores_global , N , k_choices ) <EOL> output_local = find_local_maximum ( sample_inputs , N , num_params , k_choices ) <EOL> assert_equal ( output_global , output_local ) <EOL> def test_scores_from_find_most_distant ( ) : <EOL> '''<STR_LIT>''' <EOL> sample_inputs = setup ( ) <EOL> N = <NUM_LIT:6> <EOL> num_params = <NUM_LIT:2> <EOL> k_choices = <NUM_LIT:4> <EOL> output = find_most_distant ( sample_inputs , N , num_params , k_choices ) <EOL> expected = np . array ( [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> dtype = np . float32 ) <EOL> assert_allclose ( output , expected , rtol = <NUM_LIT> , atol = <NUM_LIT> ) <EOL> def test_find_maximum ( ) : <EOL> scores = np . array ( range ( <NUM_LIT:15> ) ) <EOL> k_choices = <NUM_LIT:4> <EOL> N = <NUM_LIT:6> <EOL> output = find_maximum ( scores , N , k_choices ) <EOL> expected = [ <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> ] <EOL> assert_equal ( output , expected ) <EOL> def test_catch_combos_too_large ( ) : <EOL> N = <NUM_LIT> <EOL> k_choices = <NUM_LIT:4> <EOL> num_params = <NUM_LIT:2> <EOL> input_sample = np . random . random_sample ( ( N , num_params ) ) <EOL> try : <EOL> find_most_distant ( input_sample , N , num_params , k_choices ) <EOL> except : <EOL> pass <EOL> else : <EOL> raise AssertionError ( "<STR_LIT>" ) <EOL> def test_make_index_list ( ) : <EOL> N = <NUM_LIT:4> <EOL> num_params = <NUM_LIT:2> <EOL> groups = None <EOL> actual = make_index_list ( N , num_params , groups ) <EOL> desired = [ np . array ( [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] ) , np . array ( [ <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> ] ) , np . array ( [ <NUM_LIT:6> , <NUM_LIT:7> , <NUM_LIT:8> ] ) , np . array ( [ <NUM_LIT:9> , <NUM_LIT:10> , <NUM_LIT:11> ] ) ] <EOL> assert_equal ( desired , actual ) <EOL> def test_make_index_list_with_groups ( ) : <EOL> N = <NUM_LIT:4> <EOL> num_params = <NUM_LIT:3> <EOL> groups = <NUM_LIT:2> <EOL> actual = make_index_list ( N , num_params , groups ) <EOL> desired = [ np . array ( [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] ) , np . array ( [ <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:5> ] ) , np . array ( [ <NUM_LIT:6> , <NUM_LIT:7> , <NUM_LIT:8> ] ) , np . array ( [ <NUM_LIT:9> , <NUM_LIT:10> , <NUM_LIT:11> ] ) ] <EOL> assert_equal ( desired , actual ) <EOL> @ raises ( ValueError ) <EOL> def test_get_max_sum_ind_Error ( ) : <EOL> indices = [ ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:4> ) , ( <NUM_LIT:3> , <NUM_LIT:2> , <NUM_LIT:1> ) , ( <NUM_LIT:4> , <NUM_LIT:2> , <NUM_LIT:1> ) ] <EOL> distances_wrong = [ <NUM_LIT:20> , <NUM_LIT> ] <EOL> get_max_sum_ind ( indices , distances_wrong , <NUM_LIT:0> , <NUM_LIT:0> ) <EOL> @ raises ( AssertionError ) <EOL> def test_check_input_sample_N ( ) : <EOL> input_sample = setup ( ) <EOL> num_params = <NUM_LIT:4> <EOL> N = <NUM_LIT:5> <EOL> check_input_sample ( input_sample , num_params , N ) <EOL> @ raises ( AssertionError ) <EOL> def test_check_input_sample_num_vars ( ) : <EOL> input_sample = setup ( ) <EOL> num_params = <NUM_LIT:3> <EOL> N = <NUM_LIT:6> <EOL> check_input_sample ( input_sample , num_params , N ) <EOL> @ raises ( AssertionError ) <EOL> def test_check_input_sample_range ( ) : <EOL> input_sample = setup ( ) <EOL> input_sample *= <NUM_LIT:100> <EOL> num_params = <NUM_LIT:4> <EOL> N = <NUM_LIT:6> <EOL> check_input_sample ( input_sample , num_params , N ) </s>
