def test_drop_profiles(players, strategies): game = gamegen.role_symmetric_game(players, strategies) # Since independent drops might drop nothing, we keep nothing dropped = gamegen.drop_profiles(game, 0) assert dropped.is_empty(), "didn't drop any profiles" # 40% mean even one profile games will be incomplete dropped = gamegen.drop_profiles(game, 0.4, independent=False) assert not dropped.is_complete(), "didn't drop any profiles" sgame = gamegen.add_noise(game, 3) dropped = gamegen.drop_profiles(sgame, 0) assert dropped.is_empty(), "didn't drop any profiles" # 40% mean even one profile games will be incomplete dropped = gamegen.drop_profiles(sgame, 0.4, independent=False) assert not dropped.is_complete(), "didn't drop any profiles"
def test_dpr(keep_prob, game_desc): """Simple test that dpr functions are consistent""" players, strategies, red_players = game_desc # Create game and reduction game = gamegen.role_symmetric_game(players, strategies) game = gamegen.drop_profiles(game, keep_prob) sgame = gamegen.add_noise(game, 1, 3) red = reduction.DeviationPreserving(strategies, players, red_players) # Try to reduce game assert rsgame.basegame_copy(game) == red.full_game assert red.reduce_game(rsgame.basegame_copy(game)) == red.red_game red_game = red.reduce_game(game) red_game2 = reduction.reduce_game_dpr(game, red_players) red_sgame = red.reduce_game(sgame) # Assert that reduce_game_dpr produces identical results reduced_profiles = utils.axis_to_elem(red_game.profiles) reduced_profiles2 = utils.axis_to_elem(red_game2.profiles) assert np.setxor1d(reduced_profiles, reduced_profiles2).size == 0, \ "different reduction functions didn't produce identical results" # Assert that reducing all profiles covers reduced game reduced_full_profiles = utils.axis_to_elem( red.reduce_profiles(game.profiles)) assert np.setdiff1d(reduced_profiles, reduced_full_profiles).size == 0, \ "reduced game contained profiles it shouldn't have" reduced_sample_profiles = utils.axis_to_elem(red_sgame.profiles) assert np.setdiff1d(reduced_sample_profiles, reduced_full_profiles).size == 0, \ "reduced sample game contained profiles it shouldn't have" assert np.setxor1d(reduced_sample_profiles, reduced_profiles).size == 0, \ "reduced sample game and reduced game had different profiles" # Assert that all contributing profiles are in the expansion of the reduced # game full_profiles = utils.axis_to_elem(game.profiles) full_reduced_profiles = utils.axis_to_elem( red.expand_profiles(red_game.profiles)) assert np.setdiff1d(full_reduced_profiles, full_profiles).size == 0, \ "full game did not have data for all profiles required of reduced" full_reduced_sample_profiles = utils.axis_to_elem( red.expand_profiles(red_sgame.profiles)) assert np.setdiff1d(full_reduced_sample_profiles, full_profiles).size == 0, \ ("full sample game did not have data for all profiles required of " "reduced") assert np.setxor1d(full_reduced_profiles, full_reduced_sample_profiles).size == 0, \ "sample game didn't produce identical results"
def test_hierarchical(keep_prob, game_desc): players, strategies, red_players = game_desc # Create game and reduction game = gamegen.role_symmetric_game(players, strategies) game = gamegen.drop_profiles(game, keep_prob) sgame = gamegen.add_noise(game, 1, 3) red = reduction.Hierarchical(strategies, players, red_players) # Try to reduce game assert rsgame.basegame_copy(game) == red.full_game assert red.reduce_game(rsgame.basegame_copy(game)) == red.red_game red_game = red.reduce_game(game) red_sgame = red.reduce_game(sgame) # Assert that reducing all profiles covers reduced game reduced_full_profiles = utils.axis_to_elem( red.reduce_profiles(game.profiles)) reduced_profiles = utils.axis_to_elem(red_game.profiles) assert np.setxor1d(reduced_profiles, reduced_full_profiles).size == 0, \ "reduced game contained profiles it shouldn't have" reduced_sample_profiles = utils.axis_to_elem(red_sgame.profiles) assert np.setxor1d(reduced_sample_profiles, reduced_full_profiles).size == 0, \ "reduced game contained profiles it shouldn't have" # Assert that all contributing profiles are in the expansion of the reduced # game full_profiles = utils.axis_to_elem(game.profiles) full_reduced_profiles = utils.axis_to_elem( red.expand_profiles(red_game.profiles)) assert np.setdiff1d(full_reduced_profiles, full_profiles).size == 0, \ "full game did not have data for all profiles required of reduced" full_reduced_sample_profiles = utils.axis_to_elem( red.expand_profiles(red_sgame.profiles)) assert np.setdiff1d(full_reduced_sample_profiles, full_profiles).size == 0, \ "full game did not have data for all profiles required of reduced" assert np.setxor1d(full_reduced_profiles, full_reduced_sample_profiles).size == 0, \ "sample game didn't produce identical results"
def test_identity(keep_prob, game_desc): players, strategies = game_desc # Create game and reduction game = gamegen.role_symmetric_game(players, strategies) game = gamegen.drop_profiles(game, keep_prob) red = reduction.Identity(strategies, players) # Try to reduce game red_game = red.reduce_game(game) # Assert that reducing all profiles covers reduced game reduced_full_profiles = utils.axis_to_elem( red.reduce_profiles(game.profiles)) reduced_profiles = utils.axis_to_elem(red_game.profiles) assert np.setxor1d(reduced_full_profiles, reduced_profiles).size == 0, \ "reduced game didn't match full game" full_profiles = utils.axis_to_elem(game.profiles) full_reduced_profiles = utils.axis_to_elem( red.expand_profiles(red_game.profiles)) assert np.setxor1d(full_profiles, full_reduced_profiles).size == 0, \ "full game did not match reduced game"
def test_twins(keep_prob, game_desc): players, strategies = game_desc # Create game and reduction game = gamegen.role_symmetric_game(players, strategies) game = gamegen.drop_profiles(game, keep_prob) red = reduction.Twins(strategies, players) # Try to reduce game red_game = red.reduce_game(game) # Assert that reducing all profiles covers reduced game reduced_full_profiles = utils.axis_to_elem( red.reduce_profiles(game.profiles)) reduced_profiles = utils.axis_to_elem(red_game.profiles) assert np.setdiff1d(reduced_profiles, reduced_full_profiles).size == 0, \ "reduced game contained profiles it shouldn't have" # Assert that all contributing profiles are in the expansion of the reduced # game full_profiles = utils.axis_to_elem(game.profiles) full_reduced_profiles = utils.axis_to_elem( red.expand_profiles(red_game.profiles)) assert np.setdiff1d(full_reduced_profiles, full_profiles).size == 0, \ "full game did not have data for all profiles required of reduced"