Skip to content

Commit d516931

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
fix: Vizier - Fixed field existence checks for child params in to_proto().
PiperOrigin-RevId: 563770971
1 parent 4256361 commit d516931

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

google/cloud/aiplatform/vizier/pyvizier/proto_converters.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -222,15 +222,15 @@ def _set_child_parameter_configs(
222222
)
223223
)
224224

225-
if parent_proto.HasField("discrete_value_spec"):
225+
if "discrete_value_spec" in parent_proto:
226226
conditional_parameter_spec.parent_discrete_values.values[
227227
:
228228
] = parent_values
229-
elif parent_proto.HasField("categorical_value_spec"):
229+
elif "categorical_value_spec" in parent_proto:
230230
conditional_parameter_spec.parent_categorical_values.values[
231231
:
232232
] = parent_values
233-
elif parent_proto.HasField("integer_value_spec"):
233+
elif "integer_value_spec" in parent_proto:
234234
conditional_parameter_spec.parent_int_values.values[:] = parent_values
235235
else:
236236
raise ValueError("DOUBLE type cannot have child parameters")

tests/unit/aiplatform/test_vizier.py

+41
Original file line numberDiff line numberDiff line change
@@ -987,11 +987,15 @@ def test_measurement_back_to_back_conversion(self):
987987
class TestParameterConfigConverterToProto:
988988
def test_discrete_config_to_proto(self):
989989
feasible_values = (-1, 3, 2)
990+
child_parameter_config = pyvizier.ParameterConfig.factory(
991+
"child", bounds=(-1.0, 1.0)
992+
)
990993
parameter_config = pyvizier.ParameterConfig.factory(
991994
"name",
992995
feasible_values=feasible_values,
993996
scale_type=pyvizier.ScaleType.LOG,
994997
default_value=2,
998+
children=[([-1], child_parameter_config)],
995999
)
9961000

9971001
proto = proto_converters.ParameterConfigConverter.to_proto(parameter_config)
@@ -1002,6 +1006,43 @@ def test_discrete_config_to_proto(self):
10021006
proto.scale_type
10031007
== study_pb2.StudySpec.ParameterSpec.ScaleType.UNIT_LOG_SCALE
10041008
)
1009+
assert len(proto.conditional_parameter_specs) == 1
1010+
1011+
spec = proto.conditional_parameter_specs[0]
1012+
assert spec.parameter_spec.parameter_id == "child"
1013+
assert spec.parameter_spec.double_value_spec.min_value == -1.0
1014+
assert spec.parameter_spec.double_value_spec.max_value == 1.0
1015+
assert len(spec.parent_discrete_values.values) == 1
1016+
assert spec.parent_discrete_values.values[0] == -1
1017+
1018+
def test_categorical_config_to_proto_with_children(self):
1019+
feasible_values = ("option_a", "option_b")
1020+
child_parameter_config = pyvizier.ParameterConfig.factory(
1021+
"child", bounds=(-1.0, 1.0)
1022+
)
1023+
parameter_config = pyvizier.ParameterConfig.factory(
1024+
"name",
1025+
feasible_values=feasible_values,
1026+
children=[(["option_a"], child_parameter_config)],
1027+
)
1028+
proto = proto_converters.ParameterConfigConverter.to_proto(parameter_config)
1029+
assert len(proto.conditional_parameter_specs) == 1
1030+
spec = proto.conditional_parameter_specs[0]
1031+
assert len(spec.parent_categorical_values.values) == 1
1032+
assert spec.parent_categorical_values.values[0] == "option_a"
1033+
1034+
def test_integer_config_to_proto_with_children(self):
1035+
child_parameter_config = pyvizier.ParameterConfig.factory(
1036+
"child", bounds=(-1.0, 1.0)
1037+
)
1038+
parameter_config = pyvizier.ParameterConfig.factory(
1039+
"name", bounds=(1, 10), children=[([6], child_parameter_config)]
1040+
)
1041+
proto = proto_converters.ParameterConfigConverter.to_proto(parameter_config)
1042+
assert len(proto.conditional_parameter_specs) == 1
1043+
spec = proto.conditional_parameter_specs[0]
1044+
assert len(spec.parent_int_values.values) == 1
1045+
assert spec.parent_int_values.values[0] == 6
10051046

10061047

10071048
class TestParameterConfigConverterFromProto:

0 commit comments

Comments
 (0)