Skip to content

Commit 8847b07

Browse files
committed
move item lookup into if statement to reduce number of calls
1 parent 7827ad0 commit 8847b07

2 files changed

Lines changed: 23 additions & 19 deletions

File tree

ConfigSpace/configuration_space.py

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -652,7 +652,6 @@ def _check_configuration(self, vector: np.ndarray,
652652
for ch in unconditional_hyperparameters:
653653
active[self._hyperparameter_idx[ch]] = 1
654654

655-
#for hp_name, hyperparameter in self._hyperparameters.items():
656655
while len(to_visit) > 0:
657656
hp_name = to_visit.pop()
658657
hp_idx = self._hyperparameter_idx[hp_name]
@@ -669,7 +668,6 @@ def _check_configuration(self, vector: np.ndarray,
669668
for child in children:
670669
if child.name not in inactive:
671670
parents = self._parents_of[child.name]
672-
hyperparameter_idx = self._hyperparameter_idx[child.name]
673671
if len(parents) == 1:
674672
conditions = self._parent_conditions_of[child.name]
675673
add = True
@@ -678,7 +676,9 @@ def _check_configuration(self, vector: np.ndarray,
678676
add = False
679677
inactive.add(child.name)
680678
break
681-
if add == True:
679+
if add:
680+
hyperparameter_idx = self._hyperparameter_idx[
681+
child.name]
682682
active[hyperparameter_idx] = 1
683683
to_visit.appendleft(child.name)
684684

@@ -693,7 +693,9 @@ def _check_configuration(self, vector: np.ndarray,
693693
inactive.add(child.name)
694694
break
695695

696-
if add == True:
696+
if add:
697+
hyperparameter_idx = self._hyperparameter_idx[
698+
child.name]
697699
active[hyperparameter_idx] = 1
698700
to_visit.appendleft(child.name)
699701

@@ -886,47 +888,43 @@ def sample_configuration(self, size: int = 1) -> Union['Configuration', List['Co
886888
visited.add(hp)
887889
children = self._children_of[hp]
888890
for child in children:
889-
if child.name not in inactive:
890-
parents = self._parents_of[child.name]
891-
hyperparameter_idx = self._hyperparameter_idx[child.name]
891+
child_name = child.name
892+
if child_name not in inactive:
893+
parents = self._parents_of[child_name]
894+
hyperparameter_idx = self._hyperparameter_idx[child_name]
892895
if len(parents) == 1:
893-
conditions = self._parent_conditions_of[child.name]
896+
conditions = self._parent_conditions_of[child_name]
894897
add = True
895898
for condition in conditions:
896899
if not condition.evaluate_vector(vector[i]):
897900
add = False
898901
vector[i][hyperparameter_idx] = np.NaN
899-
inactive.add(child.name)
902+
inactive.add(child_name)
900903
break
901904
if add == True:
902905
active[hyperparameter_idx] = 1
903-
hps.appendleft(child.name)
906+
hps.appendleft(child_name)
904907

905908
else:
906909
parent_names = set(p.name for p in parents)
907-
# if not parent_names <= set(hps): # make sure no parents are still unvisited
908910
if parent_names.issubset(visited): # make sure no parents are still unvisited
909-
conditions = self._parent_conditions_of[child.name]
911+
conditions = self._parent_conditions_of[child_name]
910912
add = True
911913
for condition in conditions:
912914
if not condition.evaluate_vector(vector[i]):
913915
add = False
914916
vector[i][hyperparameter_idx] = np.NaN
915-
inactive.add(child.name)
917+
inactive.add(child_name)
916918
break
917919

918920
if add == True:
919921
active[hyperparameter_idx] = 1
920-
hps.appendleft(child.name)
922+
hps.appendleft(child_name)
921923

922924
else:
923925
continue
924926

925-
# Surprisingly, the vector update wasn't faster
926-
# vector[i][~active] = np.NaN
927-
for j in range(num_hyperparameters):
928-
if not active[j]:
929-
vector[i][j] = np.NaN
927+
vector[i][~active] = np.NaN
930928

931929
for clause in forbidden_clauses_conditionals:
932930
if clause.is_forbidden_vector(vector[i], strict=False):

test/converters_and_test_searchspaces/test_sample_configuration_spaces.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,9 @@ def run_test(self):
7878
full_path = os.path.join(configuration_space_path, pcs_file)
7979
setattr(ExampleSearchSpacesTest, 'test_%s' % pcs_file.replace('.', '_'),
8080
generate(full_path))
81+
82+
if __name__ == '__main__':
83+
suite = unittest.TestSuite()
84+
suite.addTest(ExampleSearchSpacesTest(
85+
methodName='test_auto-sklearn_2017_04_pcs'))
86+
runner = unittest.TextTestRunner().run(suite)

0 commit comments

Comments
 (0)