ConfigSpace icon indicating copy to clipboard operation
ConfigSpace copied to clipboard

Correct reference to hyperparameter for InactiveHyperparameterSetError

Open jbussemaker opened this issue 1 year ago • 0 comments

Found a bug where InactiveHyperparameterSetError refers to the wrong hyperparameter when using config.is_valid_configuration().

Reproduce (ConfigSpace 0.7.1):

from math import nan
from ConfigSpace import ConfigurationSpace, CategoricalHyperparameter, UniformFloatHyperparameter, \
    EqualsCondition, Configuration, InactiveHyperparameterSetError

cs = ConfigurationSpace(space={
    'x0': CategoricalHyperparameter('x0', choices=['A', 'B', 'C']),
    'x1': CategoricalHyperparameter('x1', choices=['D', 'E']),
    'x2': UniformFloatHyperparameter('x2', lower=0, upper=1),
})
cs.add_condition(EqualsCondition(cs['x2'], cs['x0'], 'A'))

# x2 is active: config is valid
config = Configuration(cs, vector=[0, 0, .5])
config.is_valid_configuration()

# x2 is inactive and is NaN: config is valid
config_x2_inactive = Configuration(cs, vector=[1, 0, nan])
config_x2_inactive.is_valid_configuration()

# x2 is inactive and has value: config is invalid and raised exception should refer to x2
config_x2_inactive = Configuration(cs, vector=[1, 0, .5])
try:
    config_x2_inactive.is_valid_configuration()
    raise RuntimeError('Should not be here')

except InactiveHyperparameterSetError as e:
    # Inactive hyperparameter should be x2
    # Not true in ConfigSpace 0.7.1!
    assert e.hyperparameter is cs['x2']

This pull request should fix this bug.

jbussemaker avatar Dec 21 '23 06:12 jbussemaker