def test_max(self) -> None: """Test max element in beam.""" beam = Beam(width=2) assert beam.width == 2 state1 = State(score=1.0) beam.add_state(state1) assert beam.max() is state1 state2 = State(score=2.0) beam.add_state(state2) assert beam.max() is state2 state3 = State(score=0.5) beam.add_state(state3) assert beam.max() is state2
def test_remove(self) -> None: """Test removal of a state from beam.""" beam = Beam(width=2) state1 = State(score=0.0) beam.add_state(state1) beam.remove(state1) state2 = State(score=1.0) beam.add_state(state2) beam.remove(state2) state3 = State(score=2.0) beam.add_state(state3) beam.remove(state3) assert beam.size == 0 beam.add_state(state1) beam.add_state(state2) beam.add_state(state3) assert state1 not in beam.iter_states() assert state2 in beam.iter_states() assert state3 in beam.iter_states() # TODO: uncomment once fixed https://github.com/thoth-station/adviser/issues/1541 # with pytest.raises(ValueError): # beam.remove(state1) assert beam.max() is state3 beam.remove(state2) assert beam.max() is state3 assert state2 not in beam.iter_states() assert state3 in beam.iter_states() assert beam.size == 1 beam.remove(state3) assert beam.size == 0 assert state3 not in beam.iter_states()
def test_remove(self) -> None: """Test removal of a state from beam.""" beam = Beam(width=2) state1 = State(score=0.0) beam.add_state(state1) beam.remove(state1) state2 = State(score=1.0) beam.add_state(state2) beam.remove(state2) state3 = State(score=2.0) beam.add_state(state3) beam.remove(state3) assert beam.size == 0 beam.add_state(state1) beam.add_state(state2) beam.add_state(state3) assert state1 not in beam.iter_states() assert state2 in beam.iter_states() assert state3 in beam.iter_states() with pytest.raises(ValueError): beam.remove(state1) assert beam.max() is state3 beam.remove(state2) assert beam.max() is state3 assert state2 not in beam.iter_states() assert state3 in beam.iter_states() assert beam.size == 1 beam.remove(state3) assert beam.size == 0 assert state3 not in beam.iter_states()
def test_run(self, state: State, state_count: int) -> None: """Test running the hill climbing method.""" beam = Beam() for _ in range(state_count): cloned_state = state.clone() cloned_state.iteration = state.iteration + 1 beam.add_state(cloned_state) predictor = HillClimbing() context = flexmock(accepted_final_states_count=33, beam=beam) with predictor.assigned_context(context): next_state, package_tuple = predictor.run() assert next_state is not None assert next_state is beam.max() assert package_tuple[0] in next_state.unresolved_dependencies assert package_tuple in next_state.unresolved_dependencies[package_tuple[0]].values()