def __init__()

in blocksparse/conv.py [0:0]


    def __init__(self, y_shape, x_shape, w_shape, strides=None, padding="SAME", data_format="NHWC", dilations=None, deconv=False):

        if data_format in ("NCW","NCHW","NCDHW"):
            self.layout = 0
            sdim = slice(2,None) # NCHW
            #fdim = slice(2,None) # KCRS
            # tf keeps its own format for params and does transpose ops..
            fdim = slice(0,-2) # RSCK
            cdim = 1
        else:
            self.layout = 1
            sdim = slice(1,-1) # NHWC
            fdim = slice(0,-2) # RSCK
            cdim = -1

        C = x_shape[cdim]
        K = y_shape[cdim]
        MPQ = expand_dims(y_shape[sdim])
        DHW = expand_dims(x_shape[sdim])
        TRS = expand_dims(w_shape[fdim])

        strides = (1,1,1) if strides   is None else expand_dims(strides[sdim])
        dilates = (1,1,1) if dilations is None else expand_dims(dilations[sdim])

        if padding.upper() == "VALID":
            padding = (0,0,0)
        else:
            padding = list()
            for S, Q, W, stride, dilate in zip(TRS, MPQ, DHW, strides, dilates):
                # match padding formula used in tensorflow
                padding.append(max((Q - 1) * stride + S - W, 0) // 2)

        if deconv:
            lut_func = bprop_lut
            MPQ, DHW = DHW, MPQ
            C, K     = K, C
        else:
            lut_func = fprop_lut

        key = tuple(tuple(a) for a in (MPQ, DHW, TRS, padding, strides, dilates))

        entry = ConvEdgeBias.Cache.get(key, None)
        if entry is None:

            mpqLut = list()
            fdata  = list(zip(TRS, padding, strides, dilates))
            for i in range(3):
                mpqLut.append( [ lut_func( dim, DHW[i], *fdata[i]) for dim in range(MPQ[i]) ] )

            self._build_edge_lut(MPQ, mpqLut)

            ConvEdgeBias.Cache[key] = (self.edgeBiasMap, self.edgeBiasLut, self.edgeEntries)
        else:
            self.edgeBiasMap, self.edgeBiasLut, self.edgeEntries = entry
            self.edgeBiasDim = len(self.edgeBiasMap)

        self.shape = (self.edgeBiasDim, K) if self.layout else (K, self.edgeBiasDim)