import tensorflow as tf

                mask_ratio = slide_window / (update_mask + 1e-8)
                update_mask = tf.clip_by_value(update_mask, 0.0, 1.0)
                mask_ratio = mask_ratio * update_mask

            with tf.variable_scope('parconv'):
                x = tf.nn.conv2d(input, filters, strides=[1, stride, stride, 1], padding="SAME", name='zero-conv_' + id,
                                dilations=(1, dilation, dilation, 1))
                x = x * mask_ratio
                if use_bias:
                    bias = tf.get_variable("bias" + id, [channels], initializer=tf.constant_initializer(0.0))
                    x = tf.nn.bias_add(x, bias)
                return x * update_mask

        x = tf.nn.conv2d(input, filters, strides=[1, stride, stride, 1], padding=padding, name='zero-conv_' + id,
                        dilations=(1, dilation, dilation, 1))
        if use_bias:
            bias = tf.get_variable("bias", [channels], initializer=tf.constant_initializer(0.0))
            x = tf.nn.bias_add(x, bias)
        return x
        
    def t_conv(self, id, input, channels, size=3, stride=1, use_bias=True, padding="SAME", init_stddev=-1.0):
            # good old t-conv. I love it!

            assert padding in ["SAME", "VALID"], 'valid paddings are "SAME", "VALID"'
            if type(size) == int:
                size = [size, size]
