def it_stops_sampling_when_the_new_equilibria_are_all_similar(self):
     Nash.replicator_dynamics = lambda g, mix, iters, converge_threshold: \
             array([0.110001, 0.899999]) if list(mix) == [0.11, 0.89] else array([0.9999, 0.0001])
     matrix = create_observation_matrix()
     evaluator = EquilibriumCompareEvaluator(0.05)
     evaluator.old_equilibria = [array([0.11, 0.89]), array([1.0, 0.0])]
     assert evaluator.continue_sampling(matrix) == False
 def it_requests_sampling_when_delta_is_in_interval(self):
     class FakeCI:
         def two_sided_interval(self, matrix, profile, alpha):
             return [0.0, 1.0]
         
     ci_calculator = FakeCI()
     matrix = create_observation_matrix()
     evaluator = ConfidenceIntervalEvaluator(matrix.toGame(), matrix.knownProfiles(), 0.5, 0.95, ci_calculator)
     assert evaluator.continue_sampling(matrix) == True
 def it_requests_further_sampling_when_new_equilibria_are_found(self):
     Nash.replicator_dynamics = lambda g, mix, iters, converge_threshold: \
             array([0.1, 0.9]) if mix is array([0.11, 0.89]) else array([0.999, 0.001])
     matrix = create_observation_matrix()
     evaluator = EquilibriumCompareEvaluator(0.05)
     evaluator.old_equilibria = [array([0.11, 0.89])]
     assert evaluator.continue_sampling(matrix) == True
     for eq in evaluator.old_equilibria:
         assert [[0.1, 0.9], [0.999, 0.001]].count(list(eq)) == 1
    def it_does_not_request_sampling_when_delta_is_outside_all_intervals(self):
        class FakeCI:
            def __init__(self):
                self.count = 0
                
            def two_sided_interval(self, matrix, profile, alpha):
                self.count += 1
                if self.count % 2 == 0:
                    return [0.6, 1.0]
                else:
                    return [0.0, 0.4]

        ci_calculator = FakeCI()        
        matrix = create_observation_matrix()
        evaluator = ConfidenceIntervalEvaluator(matrix.toGame(), matrix.knownProfiles(), 0.5, 0.95, ci_calculator)
        assert evaluator.continue_sampling(matrix) == False
 def it_tracks_whether_or_not_a_profile_is_a_delta_nash(self):
     class FakeCI:
         def __init__(self):
             self.count = 0
             
         def two_sided_interval(self, matrix, profile, alpha):
             self.count += 1
             if self.count % 2 == 0:
                 return [0.6, 1.0]
             else:
                 return [0.0, 0.4]
     
     ci_calculator = FakeCI()        
     matrix = create_observation_matrix()
     evaluator = ConfidenceIntervalEvaluator(matrix.toGame(), matrix.knownProfiles(), 0.5, 0.95, ci_calculator)
     evaluator.continue_sampling(matrix)
     count = 0
     print evaluator.target_hash.items()
     for result in evaluator.target_hash.values():
         count += 1
         if count % 2 == 0:
             assert result == "No"
         else:
             assert result == "Yes"
 def it_requests_further_sampling_when_the_new_equilibrium_is_distant(self):
     Nash.replicator_dynamics = lambda g, mix, iters, converge_threshold: array([0.1, 0.9])
     matrix = create_observation_matrix()
     evaluator = EquilibriumCompareEvaluator(0.01)
     evaluator.old_equilibria = [array([0.5, 0.5])]
     assert evaluator.continue_sampling(matrix) == True
 def it_requests_further_sampling_when_there_is_data_but_no_old_equilibria(self):
     Nash.replicator_dynamics = lambda g, mix, iters, converge_threshold: array([0.1, 0.9])
     matrix = create_observation_matrix()
     evaluator = EquilibriumCompareEvaluator(0.01)
     assert evaluator.continue_sampling(matrix) == True
     assert_array_almost_equal(evaluator.old_equilibria[0], array([0.1, 0.9]))