=
adding package
592bfb5
from typing import *
import numpy as np
import random
def get_random_sample(search_space: dict, p: Union[List[float], None] = None):
"""Recuperate a random sample
Args:
search_space (dict): A dictionary defining the search space
Raises:
ValueError: 'min' and 'max' can only be numbers
KeyError: Only the following keys can be provided {'min', 'max'}, {'value'}, {'values'} or {'values', 'p'}
Returns:
Union[int, float, str]: The random sample
"""
keys = set(search_space)
if keys == set(['min', 'max']):
assert search_space['min'] < search_space['max']
if isinstance(search_space['min'], int) and isinstance(search_space['max'], int):
return random.randint(search_space['min'], search_space['max'])
elif isinstance(search_space['min'], float) or isinstance(search_space, float):
return random.uniform(search_space['min'], search_space['max'])
else:
raise ValueError("You can only provide int or float values with min max!")
elif keys == set(['value']):
return search_space['value']
elif keys.issubset(set(['values'])):
p = None
if 'p' in keys: p = search_space['p']
return np.random.choice(search_space['values'], size = (1), p = p)[0]
else:
raise KeyError("You didn't provide right keys! Try between: {'min', 'max'}, {'value'}, {'values'} or {'values', 'p'}")
def get_random_samples(search_spaces: dict):
"""Recuperate random samples from a dictionary of search spaces
Args:
search_spaces (dict): A dictionary where the keys are the hyperparameter names and the values are the search spaces
Returns:
dict: A dictionary where the keys are the hyperparameter names and the values are the sampled values from the search spaces
"""
samples = {}
for search_space in search_spaces:
samples[search_space] = get_random_sample(search_spaces[search_space])
return samples