class_docstr: A constraint that is expressed as :class:`~nni.mutable.MutableExpression`.
  
  The expression must evaluate to be true to satisfy the constraint.
  
  Parameters
  ----------
  expression
      A :class:`~nni.mutable.MutableExpression` that evaluates to a boolean value.
  label
      The semantic name of the constraint.
  
  Examples
  --------
  >>> a = Categorical([1, 3])
  >>> b = Categorical([2, 4])
  >>> list(MutableList([a, b, ExpressionConstraint(a + b == 5)]).grid())
  [[1, 4, None], [3, 2, None]]
code: def leaf_mutables(
      self, is_leaf: Callable[[Mutable], bool]
  ) -> Iterable[LabeledMutable]:
      yield from self.expression.leaf_mutables(is_leaf)
      yield self
  
imports: from __future__ import annotations
  import logging
  from typing import Iterable, Callable
  from numpy.random import RandomState
  from .exception import ConstraintViolation, SampleValidationError
  from .mutable import LabeledMutable, Mutable, Sample, MutableExpression
  from .utils import auto_label
label_desc: Use image node_id 2 for calling the ExpressionConstraint obj's underlying member method code with example usage: obj.leaf_mutables(is_leaf) without return types