code: def local_inplace_sparse_block_outer(node):
      """
      SparseBlockOuter(inplace=False) -> SparseBlockOuter(inplace=True)
      """
      if isinstance(node.op, SparseBlockOuter) and not node.op.inplace:
          new_node = sparse_block_outer_inplace(*node.inputs)
          copy_stack_trace(node.outputs[0], new_node)
          return [new_node]
      return False
  
imports: from __future__ import absolute_import, print_function, division
  import theano
  from theano import compile, gof
  from theano.compile import optdb
  from theano.gof import local_optimizer
  from theano.gof.opt import copy_stack_trace
  from theano.tensor.nnet.corr import CorrMM, CorrMM_gradInputs, CorrMM_gradWeights
  from theano.tensor.nnet.corr3d import Corr3dMM, Corr3dMM_gradInputs, Corr3dMM_gradWeights
  from theano.tensor.nnet.blocksparse import SparseBlockGemv, SparseBlockOuter, sparse_block_gemv_inplace, sparse_block_outer_inplace
  from theano.tensor.nnet.abstract_conv import AbstractConv2d, AbstractConv2d_gradWeights, AbstractConv2d_gradInputs
  from theano.tensor.nnet.abstract_conv import AbstractConv3d, AbstractConv3d_gradWeights, AbstractConv3d_gradInputs
  from theano.tensor.nnet.abstract_conv import get_conv_output_shape
  from theano.tensor.opt import register_specialize_device
  from theano.tensor import TensorType
  from theano.tensor import opt
  from theano.tensor.nnet.conv import conv2d, ConvOp
label_desc: Use image node_id 2 for calling a global function with example usage: local_inplace_sparse_block_outer(node) and returns: False, list