Run the Vertex AI Neural Architecture Search tutorial: Create search spaces to get familiar with the PyGlove language.
Constraints for PyGlove types
Value specification (for example, pg.typing.Int()
) can be
provided when users declare members for a class using @pg.members
or arguments for a functor using @pg.functor
.
Value specification will validate the values
during construction and member assignment.
pg.typing.Bool
# Declare a required Bool type.
pg.typing.Bool()
# Declare a Bool type with default value set to True.
pg.typing.Bool(default=True)
# Declare a Bool type that can accept None.
pg.typing.Bool().noneable()
pg.typing.Str
# Declare a required Str type.
pg.typing.Str()
# Declare a required Str type that matches a regular expression.
pg.typing.Str(regex='.*foo')
# Declare a Str type with default value set to 'x'.
pg.typing.Str(default='x')
# Declare a Str type that can accept None.
pg.typing.Str().noneable()
pg.typing.Int
# Declare a required Int type.
pg.typing.Int()
# Declare a required Int type with minimum and maximum value.
pg.typing.Int(min_value=1, max_value=10)
# Declare an Int type with default value set to 10.
pg.typing.Int(default=10)
# Declare an Int type that can accept None.
pg.typing.Int().noneable()
pg.typing.Float
# Declare a required Float type.
pg.typing.Float()
# Declare a required Float type with minimum and maximum value.
pg.typing.Float(min_value=0.0, max_value=1.0)
# Declare a Float type with default value set to 0.0.
pg.typing.Float(default=0.0)
# Declare a Float type that can accept None.
pg.typing.Float().noneable()
pg.typing.Enum
# Declare a required Enum type with default value set to 1.
pg.typing.Enum(1, [1, 'a', 'b'])
# Declare a Enum type that can accept None with default value set to 1.
pg.typing.Enum(1, [1, 'a', 'b']).noneable()
pg.typing.List
# Declare a required list of any type.
pg.typing.List(pg.typing.Any())
# Declare a required Int type (or None) list with at least two elements.
pg.typing.List(pg.typing.Int().noneable(), min_size=2)
# Declare a Float type list of fixed size (10) that can be None.
pg.typing.List(pg.typing.Float(), size=10).noneable()
# Declare a Str type list with a default value.
pg.typing.List(pg.typing.Str(), default=['foo'])
pg.typing.Tuple
# Declare a required Int type tuple of size 2.
pg.typing.Tuple([pg.typing.Int(), pg.typing.Int()])
# Declare a tuple of (Int, Str) types, which can also be None.
pg.typing.Tuple([pg.typing.Int(), pg.typing.Str()]).noneable()
# Declare an Int type tuple of size 2 with a default value.
pg.typing.Tuple([pg.typing.Int(), pg.typing.Int()], default=(1, 1))
pg.typing.Dict
# Declare a required dictionary of any key-value pairs.
pg.typing.Dict()
# Declare a dictionary that can accept None with field 'a' and 'b'.
pg.typing.Dict([
('a', pg.typing.Int()),
('b', pg.typing.Str()),
]).noneable()
# Declare a dictionary that can accept None with field 'a' and 'b'.
pg.typing.Dict([
('a', pg.typing.Int(default=1)),
('b', pg.typing.Str()),
]).noneable()
# Declare a dictionary with keys that match regular expression.
pg.typing.Dict([
(pg.typing.StrKey('.*foo'), pg.typing.Int()),
])
pg.typing.Object
# Declare a required instance of class A.
pg.typing.Object(A)
# Declare an instance of class A that can accept None.
pg.typing.Object(B)
pg.typing.Union
# Declare a required union of Int and Str types.
pg.typing.Union([pg.typing.Int(), pg.typing.Str])
# Declare a union of Int and Str types that can accept None.
pg.typing.Union([pg.typing.Int(), pg.typing.Str]).noneable()
pg.typing.Any
# Declare a required value of any type (except None) with a default value.
pg.typing.Any(default=1)
# Declare a value of any type that can accept None.
pg.typing.Any().noneable()