def METHOD_NAME(weight_tensor: np.array, rank: int,
                        in_channels: int, out_channels: int, height: int, width: int) -> Tuple[np.array, np.array]:
    """
    Splits a weight tensor using spatial svd
    :param weight_tensor: Weight tensor in numpy format (shape: out_chan, in_chan, height, width)
    :param rank: Rank to use for svd split
    :param in_channels: Number of in-channels
    :param out_channels: Number of out-channels
    :param height: Kernel height
    :param width: Kernel width
    :return: Tuple of split tensors in numpy format (shape: out_chan, in_chan, height, width)
    """
    assert rank <= in_channels * height
    # Reshape into a 2D matrix - because that's what numpy needs
    weight_tensor = np.transpose(weight_tensor, [1, 2, 0, 3])  # in_channels height out_channels width
    weight_tensor = weight_tensor.reshape(in_channels * height, out_channels * width)
    v, s, h = np.linalg.svd(weight_tensor, full_matrices=False)
    v = v[:, :rank]
    s = s[:rank]
    h = h[:rank, :]
    sqrt_s = np.sqrt(s)
    v = v * sqrt_s
    h = sqrt_s.reshape(sqrt_s.shape[0], 1) * h
    # rank nw -> rank out_channels weight_tensor 1
    h = h.reshape([rank, out_channels, width, 1])
    # rank out_channels weight_tensor 1 -> out_channels rank 1 weight_tensor
    h = np.transpose(h, [1, 0, 3, 2])
    # ch rank -> in_channels 1 h rank  -> rank in_channels h 1
    v = v.reshape((in_channels, 1, height, rank))
    v = np.transpose(v, [3, 0, 2, 1])
    return h, v