docs: def _aggregation_op(cls,
              op: Callable[[tf.Tensor, Optional[Sequence[int]]], tf.Tensor],
              x: 'TensorFluent',
              vars_list: List[str]) -> 'TensorFluent':
          '''Returns a TensorFluent for the aggregation `op` applied to fluent `x`.
  
          Args:
              op: The aggregation operation.
              x: The input fluent.
              vars_list: The list of variables to be aggregated over.
  
          Returns:
              A TensorFluent wrapping the aggregation operator's output.
          '''
          axis = cls._varslist2axis(x, vars_list)
          t = op(x.tensor, axis)
  
          scope = []
          for var in x.scope.as_list():
              if var not in vars_list:
                  scope.append(var)
  
          batch = x.batch
  
          return TensorFluent(t, scope, batch=batch)