code: def infer_shape(self, node, input_shapes):
          
          if isinstance(self.operator, Functional):
              return [()]
          else:
              # Need to convert to native to avoid error in Theano from
              # future.int
              return [tuple(native(si) for si in self.operator.range.shape)]
docs: Return a list of output shapes based on ``input_shapes``.
  
          This method is optional. It allows to compute the shape of the
          output without having to evaluate.
  
          Parameters
          ----------
          node : `theano.gof.graph.Apply`
              The node of this Op in the computation graph.
          input_shapes : 1-element list of `theano.compile.ops.Shape`
              Symbolic shape of the input.
  
          Returns
          -------
          output_shapes : 1-element list of tuples
              Fixed shape of the output determined by `odl_op`.