Esempio n. 1
0
def test_random_candidate_colour(tc):
    comp = cem_tuners.Cem_tuner('cemtest')
    config = default_config()
    config['candidate_colour'] = 'random'
    random.seed(1002)
    comp.initialise_from_control_file(config)
    comp.set_clean_status()

    job1 = comp.get_game()
    tc.assertIsInstance(job1, Game_job)
    tc.assertEqual(job1.player_b.code, 'g0#0')
    tc.assertEqual(job1.player_w.code, 'opp')

    job2 = comp.get_game()
    tc.assertIsInstance(job2, Game_job)
    tc.assertEqual(job2.player_b.code, 'g0#1')
    tc.assertEqual(job2.player_w.code, 'opp')

    result1 = Game_result.from_score('b', 8.5)
    result1.set_players({'b': 'g0#0', 'w': 'opp'})
    response1 = Game_job_result()
    response1.game_id = job1.game_id
    response1.game_result = result1
    response1.engine_descriptions = {
        'opp': Engine_description("opp engine", "v1.2.3", None),
        '#0': Engine_description("candidate engine", None, None),
    }
    response1.game_data = job1.game_data
    comp.process_game_result(response1)

    tc.assertEqual(comp.wins, [1, 0, 0, 0])
Esempio n. 2
0
def test_nonsense_parameter_config(tc):
    comp = cem_tuners.Cem_tuner('cemtest')
    config = default_config()
    config['parameters'].append(99)
    with tc.assertRaises(ControlFileError) as ar:
        comp.initialise_from_control_file(config)
    tc.assertMultiLineEqual(str(ar.exception), dedent("""\
    'parameters': item 2: not a Parameter"""))
def test_format_validation(tc):
    comp = cem_tuners.Cem_tuner('cemtest')
    config = default_config()
    config['parameters'][0] = Parameter_config('axisa',
                                               initial_mean=0.5,
                                               initial_variance=1.0,
                                               transform=str,
                                               format="axa %f")
    tc.assertRaisesRegexp(ControlFileError, "'format': invalid format string",
                          comp.initialise_from_control_file, config)
Esempio n. 4
0
def test_parameter_config(tc):
    comp = cem_tuners.Cem_tuner('cemtest')
    config = default_config()
    comp.initialise_from_control_file(config)

    tc.assertEqual(comp.initial_distribution.format(),
                   " 0.50~1.00 50.00~1000.00")
    tc.assertEqual(comp.format_engine_parameters((0.5, 23)),
                   "axa 0.500; axb 23.0")
    tc.assertEqual(comp.format_engine_parameters(('x', 23)),
                   "[axisa?x]; axb 23.0")
    tc.assertEqual(comp.format_optimiser_parameters((0.5, 500)),
                   "axa 0.500; axb 100.0")

    tc.assertEqual(comp.transform_parameters((0.5, 1e6)), (0.5, 100.0))
    with tc.assertRaises(CompetitionError) as ar:
        comp.transform_parameters((0.5, None))
    tc.assertTracebackStringEqual(
        str(ar.exception),
        dedent("""\
    error from transform for axisb
    TypeError: expected-float
    traceback (most recent call last):
    cem_tuner_tests|clip_axisb
    failing line:
    f = float(f)
    """),
        fixups=[
            ("float() argument must be a string or a number",
             "expected-float"),
            ("expected float, got NoneType object", "expected-float"),
            ("unsupported operand type for float(): 'NoneType'",
             "expected-float"),
        ])

    tc.assertRaisesRegexp(
        ValueError, "'initial_variance': must be nonnegative",
        comp.parameter_spec_from_config,
        Parameter_config('pa1',
                         initial_mean=0,
                         initial_variance=-1,
                         format="%s"))
    tc.assertRaisesRegexp(
        ControlFileError, "'format': invalid format string",
        comp.parameter_spec_from_config,
        Parameter_config('pa1',
                         initial_mean=0,
                         initial_variance=1,
                         format="nopct"))
Esempio n. 5
0
def test_make_candidate(tc):
    comp = cem_tuners.Cem_tuner('cemtest')
    config = default_config()
    comp.initialise_from_control_file(config)
    cand = comp.make_candidate('g0#1', (0.5, 23.0))
    tc.assertEqual(cand.code, 'g0#1')
    tc.assertListEqual(cand.cmd_args, ['cand', '0.5', '23.0'])
    with tc.assertRaises(CompetitionError) as ar:
        comp.make_candidate('g0#1', (-1, 23))
    tc.assertTracebackStringEqual(str(ar.exception), dedent("""\
    error from make_candidate()
    ValueError: oops
    traceback (most recent call last):
    cem_tuner_tests|simple_make_candidate
    failing line:
    raise ValueError("oops")
    """))
Esempio n. 6
0
def test_transform_check(tc):
    comp = cem_tuners.Cem_tuner('cemtest')
    config = default_config()
    config['parameters'][0] = Parameter_config(
        'axisa',
        initial_mean = 0.5,
        initial_variance = 1.0,
        transform = str.split)
    with tc.assertRaises(ControlFileError) as ar:
        comp.initialise_from_control_file(config)
    tc.assertTracebackStringEqual(str(ar.exception), dedent("""\
    parameter axisa: error from transform (applied to initial_mean)
    TypeError: split-wants-float-not-str
    traceback (most recent call last):
    """), fixups=[
     ("descriptor 'split' requires a 'str' object but received a 'float'",
      "split-wants-float-not-str"),
     ("unbound method split() must be called with str instance as "
      "first argument (got float instance instead)",
      "split-wants-float-not-str"),
     ])
Esempio n. 7
0
def test_play(tc):
    comp = cem_tuners.Cem_tuner('cemtest')
    comp.initialise_from_control_file(default_config())
    comp.set_clean_status()

    tc.assertEqual(comp.generation, 0)
    tc.assertEqual(comp.distribution.format(),
                   " 0.50~1.00 50.00~1000.00")

    job1 = comp.get_game()
    tc.assertIsInstance(job1, Game_job)
    tc.assertEqual(job1.game_id, 'g0#0r0')
    tc.assertEqual(job1.player_b.code, 'g0#0')
    tc.assertEqual(job1.player_w.code, 'opp')
    tc.assertEqual(job1.board_size, 13)
    tc.assertEqual(job1.komi, 7.5)
    tc.assertEqual(job1.move_limit, 1000)
    tc.assertIs(job1.use_internal_scorer, False)
    tc.assertEqual(job1.internal_scorer_handicap_compensation, 'full')
    tc.assertEqual(job1.game_data, (0, 'g0#0', 0))
    tc.assertEqual(job1.sgf_event, 'cemtest')
    tc.assertRegexpMatches(job1.sgf_note, '^Candidate parameters: axa ')

    job2 = comp.get_game()
    tc.assertIsInstance(job2, Game_job)
    tc.assertEqual(job2.game_id, 'g0#1r0')
    tc.assertEqual(job2.player_b.code, 'g0#1')
    tc.assertEqual(job2.player_w.code, 'opp')

    tc.assertEqual(comp.wins, [0, 0, 0, 0])

    result1 = Game_result.from_score('b', 8.5)
    result1.set_players({'b' : 'g0#0', 'w' : 'opp'})
    response1 = Game_job_result()
    response1.game_id = job1.game_id
    response1.game_result = result1
    response1.engine_descriptions = {
        'opp' : Engine_description("opp engine", "v1.2.3", None),
        '#0'  : Engine_description("candidate engine", None,
                                   'candidate engine description'),
        }
    response1.game_data = job1.game_data
    comp.process_game_result(response1)

    tc.assertEqual(comp.wins, [1, 0, 0, 0])

    comp2 = cem_tuners.Cem_tuner('cemtest')
    comp2.initialise_from_control_file(default_config())
    status = pickle.loads(pickle.dumps(comp.get_status()))
    comp2.set_status(status)
    tc.assertEqual(comp2.wins, [1, 0, 0, 0])

    result2 = Game_result.from_score(None, 0)
    result2.set_players({'b' : 'g0#1', 'w' : 'opp'})
    response2 = Game_job_result()
    response2.game_id = job2.game_id
    response2.game_result = result2
    response2.engine_descriptions = response1.engine_descriptions
    response2.game_data = job2.game_data
    comp.process_game_result(response2)

    tc.assertEqual(comp.wins, [1, 0.5, 0, 0])