72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
from spaces.basic_space import Space
|
|
from spaces.basic_space import VirtualNode
|
|
from spaces.basic_space import Integer
|
|
from spaces.basic_space import Continuous
|
|
from spaces.basic_space import Categorical
|
|
from spaces.basic_space import _EPS
|
|
|
|
|
|
def has_categorical(space_or_value, x):
|
|
if isinstance(space_or_value, Space):
|
|
return space_or_value.has(x)
|
|
else:
|
|
return space_or_value == x
|
|
|
|
|
|
def has_continuous(space_or_value, x):
|
|
if isinstance(space_or_value, Space):
|
|
return space_or_value.has(x)
|
|
else:
|
|
return abs(space_or_value - x) <= _EPS
|
|
|
|
|
|
def is_determined(space_or_value):
|
|
if isinstance(space_or_value, Space):
|
|
return space_or_value.determined
|
|
else:
|
|
return True
|
|
|
|
|
|
def get_determined_value(space_or_value):
|
|
if not is_determined(space_or_value):
|
|
raise ValueError("This input is not determined: {:}".format(space_or_value))
|
|
if isinstance(space_or_value, Space):
|
|
if isinstance(space_or_value, Continuous):
|
|
return space_or_value.lower
|
|
elif isinstance(space_or_value, Categorical):
|
|
return get_determined_value(space_or_value[0])
|
|
else: # VirtualNode
|
|
return space_or_value.value
|
|
else:
|
|
return space_or_value
|
|
|
|
|
|
def get_max(space_or_value):
|
|
if isinstance(space_or_value, Integer):
|
|
return max(space_or_value.candidates)
|
|
elif isinstance(space_or_value, Continuous):
|
|
return space_or_value.upper
|
|
elif isinstance(space_or_value, Categorical):
|
|
values = []
|
|
for index in range(len(space_or_value)):
|
|
max_value = get_max(space_or_value[index])
|
|
values.append(max_value)
|
|
return max(values)
|
|
else:
|
|
return space_or_value
|
|
|
|
|
|
def get_min(space_or_value):
|
|
if isinstance(space_or_value, Integer):
|
|
return min(space_or_value.candidates)
|
|
elif isinstance(space_or_value, Continuous):
|
|
return space_or_value.lower
|
|
elif isinstance(space_or_value, Categorical):
|
|
values = []
|
|
for index in range(len(space_or_value)):
|
|
min_value = get_min(space_or_value[index])
|
|
values.append(min_value)
|
|
return min(values)
|
|
else:
|
|
return space_or_value
|