def get_checkerboard_matrix(kernel_width, kernel_type="default", gaussian_param=0.1):

    """
    example matrix for width = 2

    -1  -1    1   1
    -1  -1    1   1
     1   1   -1  -1
     1   1   -1  -1

    :param kernel_type:
    :param kernel_width:
    :return:
    """

    if kernel_type is "gaussian":
        return get_gaussian_kernel(kernel_width, gaussian_param)

    if kernel_type is "default":
        return np.vstack((
            np.hstack((
                -1 * np.ones((kernel_width, kernel_width)), np.ones((kernel_width, kernel_width))
            )),
            np.hstack((
                np.ones((kernel_width, kernel_width)), -1 * np.ones((kernel_width, kernel_width))
            ))
        ))

    elif kernel_type is "bottom_right":
        return np.vstack((
            np.hstack((
                np.ones((kernel_width, kernel_width)), np.ones((kernel_width, kernel_width))
            )),
            np.hstack((
                np.ones((kernel_width, kernel_width)), -1 * np.ones((kernel_width, kernel_width))
            ))
        ))

    elif kernel_type is "top_left":
        return np.vstack((
            np.hstack((
                -1 * np.ones((kernel_width, kernel_width)), np.ones((kernel_width, kernel_width))
            )),
            np.hstack((
                np.ones((kernel_width, kernel_width)), np.ones((kernel_width, kernel_width))
            ))
        ))