class_docstr: Gradient wrt. inputs for `Corr3dMM`.
  
  Notes
  -----
  You will not want to use this directly, but rely on
  Theano's automatic differentiation or graph optimization to
  use it as needed.
class_docstr_tok: ["Gradient","wrt",".","inputs","for","`","Corr3dMM","`",".","Notes","--","--","-","You","will","not","want","to","use","this","directly",",","but","rely","on","Theano","'s","automatic","differentiation","or","graph","optimization","to","use","it","as","needed","."]
code: def infer_shape(self, node, input_shape):
      if self.border_mode == "half":
          padH = padW = padD = -1
      elif self.border_mode == "full":
          padH = padW = padD = -2
      elif isinstance(self.border_mode, tuple):
          padH, padW, padD = self.border_mode
      else:
          assert self.border_mode == "valid"
          padH = padW = padD = 0
      dH, dW, dD = self.subsample
      kshp = input_shape[0]
      topshp = input_shape[1]
      ssize, kshp = kshp[1], list(kshp[2:])
      ssize = ssize * self.num_groups
      bsize, topshp = topshp[0], list(topshp[2:])
      height_width_depth = node.inputs[-3:]
      if padH == -1:
          padH = kshp[0] // 2
      elif padH == -2:
          padH = kshp[0] - 1
      elif padH < -2:
          raise ValueError(
              "Corr3dMM_gradInputs: border_mode must be >= 0."
          )
      if padW == -1:
          padW = kshp[1] // 2
      elif padW == -2:
          padW = kshp[1] - 1
      elif padW < -2:
          raise ValueError(
              "Corr3dMM_gradInputs: border_mode must be >= 0."
          )
      if padD == -1:
          padD = kshp[2] // 2
      elif padD == -2:
          padD = kshp[2] - 1
      elif padD < -2:
          raise ValueError(
              "Corr3dMM_gradInputs: border_mode must be >= 0."
          )
  
      if dH != 1:
          out_shp0 = height_width_depth[0]
      else:
          out_shp0 = (topshp[0] - 1) * dH + kshp[0] - 2 * padH
      if dW != 1:
          out_shp1 = height_width_depth[1]
      else:
          out_shp1 = (topshp[1] - 1) * dW + kshp[1] - 2 * padW
      if dD != 1:
          out_shp2 = height_width_depth[2]
      else:
          out_shp2 = (topshp[2] - 1) * dD + kshp[2] - 2 * padD
      out_shp = (out_shp0, out_shp1, out_shp2)
      return [(bsize, ssize) + out_shp]
  
imports: from __future__ import absolute_import, print_function, division
  import os
  import logging
  from six import integer_types
  import theano
  from theano import Apply
  from theano import gof
  from theano.gof import ParamsType, EnumList
  from theano.scalar import int64
  from theano.tensor import as_tensor_variable, TensorType
  from theano.tensor.nnet.abstract_conv import get_conv_output_shape
  from theano.tensor import blas_headers
  from theano.tensor.blas import ldflags, blas_header_version
label_desc: Use image node_id 2 for calling the Corr3dMM_gradInputs obj's underlying member method code with example usage: obj.infer_shape(node, input_shape) and returns: list