PyGlove language reference

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()