code: def perform(self, node, inputs, output_storage):
          
          x = inputs[0]
          z = output_storage[0]
          z[0] = np.asarray(self.operator(x))
docs: Evaluate this node's computation.
  
          Parameters
          ----------
          node : `theano.gof.graph.Apply`
              The node of this Op in the computation graph.
          inputs : 1-element list of arrays
              Contains an array (usually `numpy.ndarray`) of concrete values
              supplied for the symbolic input variable ``x``.
          output_storage : 1-element list of 1-element lists
              The single 1-element list contained in ``output_storage``
              by default contains only ``None``. This value must be replaced
              by the result of the application of `odl_op`.
  
          Examples
          --------
          Perform a matrix multiplication:
  
          >>> space = odl.rn(3)
          >>> matrix = np.array([[1, 0, 1],
          ...                    [0, 1, 1]], dtype=float)
          >>> op = odl.MatrixOperator(matrix, domain=space)
          >>> matrix_op = TheanoOperator(op)
          >>> x = theano.tensor.dvector()
          >>> op_x = matrix_op(x)
          >>> op_func = theano.function([x], op_x)
          >>> op_func([1, 2, 3])
          array([ 4.,  5.])
  
          Evaluate a functional, i.e., an operator with scalar output:
  
          >>> space = odl.rn(3)
          >>> functional = odl.solvers.L2NormSquared(space)
          >>> func_op = TheanoOperator(functional)
          >>> x = theano.tensor.dvector()
          >>> op_x = func_op(x)
          >>> op_func = theano.function([x], op_x)
          >>> op_func([1, 2, 3])
          array(14.0)