docs: def _sample_action(self,
              constraints: Dict[str, Constraints],
              default: Sequence[tf.Tensor],
              prob: float = 0.3) -> Sequence[tf.Tensor]:
          '''Samples action fluents respecting the given bound `constraints`.
  
          With probability `prob` it chooses the action fluent default value,
          with probability 1-`prob` it samples the fluent w.r.t. its bounds.
  
          Args:
              constraints (Dict[str, Tuple[Optional[TensorFluent], Optional[TensorFluent]]]): The bounds for each action fluent.
              default (Sequence[tf.Tensor]): The default action fluents.
              prob (float): A probability measure.
  
          Returns:
              Sequence[tf.Tensor]: A tuple of action fluents.
          '''
          ordering = self.compiler.rddl.domain.action_fluent_ordering
          dtypes = map(rddl2tf.utils.range_type_to_dtype, self.compiler.rddl.action_range_type)
          size = self.compiler.rddl.action_size
  
          action = []
          for name, dtype, size, default_value in zip(ordering, dtypes, size, default):
              action_fluent = self._sample_action_fluent(name, dtype, size, constraints, default_value, prob)
              action.append(action_fluent)
  
          return tuple(action)