code: def __init__(
      self,
      pos,
      mbs,
      g,
      nifm,
      ifmshape_nopad,
      fshape,
      nofm,
      strides,
      dtypeu,
      padding=0,
  ):
      assert g == identity
      self.ifmheight, self.ifmwidth = ifmshape_nopad
      self.ifmshape_nopad = ifmshape_nopad
      self.padding = padding
      self.ifmshape = (
          self.ifmheight + 2 * padding,
          self.ifmwidth + 2 * padding,
      )
      self.fshape = fshape
  
      self.stride = strides
      self.fheight, self.fwidth = fshape
      self.ofmheight = (self.ifmshape[0] - self.fheight) // strides + 1
      self.ofmwidth = (self.ifmshape[1] - self.fwidth) // strides + 1
      ofmshape = (self.ofmheight, self.ofmwidth)
      self.ifmsize = self.ifmshape[0] * self.ifmshape[1]
      self.ifmsize_nopad = (
          self.ifmshape_nopad[0] * self.ifmshape_nopad[1]
      )
      self.ofmsize = self.ofmheight * self.ofmwidth
      self.nout = self.ofmsize * nofm
  
      self.nifm = nifm
      self.nofm = nofm
      self.fsize = nifm * self.fheight * self.fwidth
      self.weights = np.zeros((nofm, self.fsize), dtype=dtypeu)
      self.g = g
      self.gprime = get_prime(g)
      self.z = np.zeros((mbs, self.nout), dtype=dtypeu)
      self.y = np.zeros((mbs, self.nout), dtype=dtypeu)
      ofmstarts = np.array(
          list(range(0, (self.ofmsize * nofm), self.ofmsize))
      )
      self.ofmlocs = np.zeros((self.ofmsize, nofm), dtype=np.int32)
      for dst in range(self.ofmsize):
          self.ofmlocs[dst, :] = ofmstarts + dst
      # Figure out the connections with the previous layer.
      # This is a list of lists.
      self.links = []
      # sfsize = self.fheight * self.fwidth  # not used
      self.makelinks(
          nifm, self.ifmsize, self.ifmshape, ofmshape, fshape, strides
      )
      self.updates = np.zeros(self.weights.shape, dtype=dtypeu)
      self.updateshards = np.zeros(
          (self.fheight * self.fwidth, nofm, self.fsize), dtype=dtypeu
      )
      self.updatebuf = np.zeros((nofm, self.fsize), dtype=dtypeu).copy()
      self.pos = pos
      if self.pos > 0:
          self.bpropbuf = np.zeros((mbs, self.fsize), dtype=dtypeu)
          self.berror = np.zeros(
              (mbs, self.ifmsize * nifm), dtype=dtypeu
          )
          self.berrorshards = np.zeros(
              (self.fheight * self.fwidth, mbs, self.ifmsize * nifm),
              dtype=dtypeu,
          )
  
imports: import itertools
  import numpy
  import pytest
  from neon import NervanaObject
  from neon.layers.layer import Convolution
  from neon.initializers.initializer import Uniform
  from utils import allclose_with_out
label_desc: Use image node_id 1 to create a new ConvLayerRef object from inherited base classes: object with example: obj = ConvLayerRef(pos, mbs, g, nifm, ifmshape_nopad, fshape, nofm, strides, dtypeu, padding)