def get_suggestions(self, params: Dict = None) -> List[Dict]: if not self.config.num_runs: raise ValueError("This search strategy requires `num_runs`.") suggestions = [] params = params or {} rand_generator = get_random_generator(seed=self.config.seed) # Validate number of suggestions and total space all_discrete = True for v in self.config.params.values(): if v.is_continuous: all_discrete = False break num_runs = self.config.num_runs if all_discrete: space = reduce( mul, [get_length(v) for v in self.config.params.values()]) num_runs = self.config.num_runs if self.config.num_runs <= space else space while num_runs > 0: suggestion_params = copy.deepcopy(params) suggestion_params.update({ k: sample(v, rand_generator=rand_generator) for k, v in self.config.params.items() }) suggestion = SuggestionSpec(params=suggestion_params) if suggestion not in suggestions: suggestions.append(suggestion) num_runs -= 1 return [suggestion.params for suggestion in suggestions]
def test_matrix_pchoice_option(self): config_dict = {"kind": "pchoice", "value": [(1, 0.1), (2, 0.3), (3, 6)]} with self.assertRaises(ValidationError): V1HpPChoice.from_dict(config_dict) config_dict["value"] = [(1, 0.1), (2, 0.3), (3, 0.8)] with self.assertRaises(ValidationError): V1HpPChoice.from_dict(config_dict) config_dict["value"] = [(1, 0.1), (2, 0.3), (3, -0.6)] with self.assertRaises(ValidationError): V1HpPChoice.from_dict(config_dict) config_dict["value"] = ["ok", "nook"] with self.assertRaises(ValidationError): V1HpPChoice.from_dict(config_dict) # Pass for correct config config_dict["value"] = [(1, 0.1), (2, 0.1), (3, 0.8)] config = V1HpPChoice.from_dict(config_dict) assert config.to_dict() == config_dict with self.assertRaises(ValidationError): to_numpy(config) assert sample(config) in [1, 2, 3] assert get_length(config) == 3 assert config.is_categorical is False assert config.is_distribution is True assert config.is_range is False assert config.is_uniform is False assert config.is_discrete is True assert config.is_continuous is False assert get_min(config) is None assert get_max(config) is None
def test_matrix_values_option(self): config_dict = {"kind": "choice", "value": [1, 2, 3]} config = V1HpChoice.from_dict(config_dict) assert config.to_dict() == config_dict assert to_numpy(config) == config_dict["value"] assert sample(config) in [1, 2, 3] assert get_length(config) == 3 assert config.is_categorical is False assert config.is_distribution is False assert config.is_range is False assert config.is_uniform is False assert config.is_discrete is True assert config.is_continuous is False assert get_min(config) == 1 assert get_max(config) == 3 config_dict["value"] = ["ok", "nook"] config = V1HpChoice.from_dict(config_dict) assert config.to_dict() == config_dict assert to_numpy(config) == config_dict["value"] assert sample(config) in ["ok", "nook"] assert get_length(config) == 2 assert config.is_categorical is True assert config.is_distribution is False assert config.is_range is False assert config.is_uniform is False assert config.is_discrete is True assert config.is_continuous is False assert get_min(config) is None assert get_max(config) is None config_dict["value"] = [[1, 2], [2, 4]] config = V1HpChoice.from_dict(config_dict) assert config.to_dict() == config_dict assert to_numpy(config) == config_dict["value"] assert sample(config) in [[1, 2], [2, 4]] assert get_length(config) == 2 assert config.is_categorical is True assert config.is_distribution is False assert config.is_range is False assert config.is_uniform is False assert config.is_discrete is True assert config.is_continuous is False assert get_min(config) is None assert get_max(config) is None
def assert_equal(config, v1, v2, q, v3=None): result = {"loc": v1, "scale": v2, "q": q} if v3: result["size"] = v3 assert config.to_dict()["value"] == result with self.assertRaises(ValidationError): to_numpy(config) with self.assertRaises(ValidationError): get_length(config) assert isinstance(sample(config), float) assert config.is_categorical is False assert config.is_distribution is True assert config.is_range is False assert config.is_uniform is False assert config.is_discrete is False assert config.is_continuous is True assert get_min(config) is None assert get_max(config) is None
def assert_equal(config, v1, v2, v3=None): result = {"low": v1, "high": v2} if v3: result["size"] = v3 assert config.to_dict()["value"] == result with self.assertRaises(ValidationError): to_numpy(config) with self.assertRaises(ValidationError): to_numpy(config) with self.assertRaises(ValidationError): get_length(config) assert v1 <= sample(config) <= v2 assert config.is_categorical is False assert config.is_distribution is True assert config.is_range is False assert config.is_uniform is True assert config.is_discrete is False assert config.is_continuous is True assert get_min(config) == v1 assert get_max(config) == v2
def assert_equal(config, v1, v2, v3): result = {"start": v1, "stop": v2, "num": v3} assert config.to_dict()["value"] == result np.testing.assert_array_equal(to_numpy(config), np.geomspace(**result)) assert get_length(config) == len(np.geomspace(**result)) assert sample(config) in np.geomspace(**result) assert config.is_categorical is False assert config.is_distribution is False assert config.is_range is True assert config.is_uniform is False assert config.is_discrete is True assert config.is_continuous is False assert get_min(config) == v1 assert get_max(config) == v2