code: def fprop(self, inputs, permute=False):
      if self.pos > 0:
          self.berror.fill(0.0)
          for dst in range(self.ofmsize):
              rflinks = self.links[dst]
              A = inputs[:, self.ofmlocs[dst]]
              B = self.weights
              if permute:
                  inds = np.random.permutation(A.shape[1])
                  np.dot(A[:, inds], B[inds, :], self.bpropbuf)
              else:
                  np.dot(A, B, self.bpropbuf)
              self.berror[:, rflinks] += self.bpropbuf
  
      self.updates.fill(0.0)
      for dst in range(self.ofmsize):
          # Accumulate weight updates, going over all
          # corresponding cells in the output feature maps.
          rflinks = self.links[dst]
          deltaslice = inputs[:, self.ofmlocs[dst]]
  
          A = deltaslice.T
          B = inputs[:, rflinks]
          if permute:
              inds = np.random.permutation(A.shape[1])
              np.dot(A[:, inds], B[inds, :], out=self.updatebuf)
          else:
              np.dot(A, B, out=self.updatebuf)
          self.updates += self.updatebuf
  
file_path: neon/tests/test_deconv_layer.py
imports: import itertools
  import numpy
  import pytest
  from neon import NervanaObject
  from neon.layers import Deconvolution
  from neon.initializers import Uniform
  from utils import allclose_with_out
label_desc: Use image node_id 4 for calling the DeconvRefLayer obj's underlying member method code with example usage: obj.fprop(inputs, permute) without return types