docs: def compile_intermediate_cpfs(self,
                                    scope: Dict[str, TensorFluent],
                                    batch_size: Optional[int] = None,
                                    noise: Optional[Noise] = None) -> List[CPFPair]:
          '''Compiles the intermediate fluent CPFs given the current `state` and `action` scope.
  
          Args:
              scope (Dict[str, :obj:`rddl2tf.fluent.TensorFluent`]): The fluent scope for CPF evaluation.
              batch_size (Optional[int]): The batch size.
  
          Returns:
              A list of intermediate fluent CPFs compiled to :obj:`rddl2tf.fluent.TensorFluent`.
          '''
          interm_fluents = []
  
          with self.graph.as_default():
              with tf.name_scope('intermediate_cpfs'):
  
                  for cpf in self.rddl.domain.intermediate_cpfs:
                      cpf_noise = noise.get(cpf.name, None) if noise is not None else None
  
                      name_scope = utils.identifier(cpf.name)
                      with tf.name_scope(name_scope):
                          t = self._compile_expression(cpf.expr, scope, batch_size, cpf_noise)
  
                      interm_fluents.append((cpf.name, t))
                      scope[cpf.name] = t
  
          return interm_fluents