<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def upsampling_feature_passthrough(early_feat, late_feat, filters, name, kernel_size=(1, 1)):
 """ An upsampling feature passthrough layer inspired by yolo9000 and the tiling layer. It can be proven, that this layer does the same as conv(concat(early_feat, tile_2d(late_feat))). This layer has no activation function. :param early_feat: The early feature layer of shape [batch_size, h * s_x, w * s_y, _]. s_x and s_y are integers computed internally describing the scale between the layers. :param late_feat: The late feature layer of shape [batch_size, h, w, _]. :param filters: The number of convolution filters. :param name: The name of the layer. :param kernel_size: The size of the kernel. Default (1x1). :return: The output tensor of shape [batch_size, h * s_x, w * s_y, outputs] """

    _, h_early, w_early, c_early = early_feat.get_shape().as_list()
    _, h_late, w_late, c_late = late_feat.get_shape().as_list()

    s_x = int(w_early / w_late)
    s_y = int(h_early / h_late)

    assert h_late * s_y == h_early and w_late * s_x == w_early

    with tf.variable_scope(name) as scope:
        tiled = tile_2d(late_feat, s_x, s_y, "tile_2d", reorder_required=False)
        concated = tf.concat([early_feat, tiled], axis=-1)
        return tf.layers.conv2d(concated, filters=filters, kernel_size=kernel_size, strides=(1, 1), padding="same")