def break_tensor(tensor):
    """
    Given a tensor, break it into a tuple of four tensors:
    the floor of the tensor, the ceiling of the tensor,
    the rounded tensor, and the fractional part of the tensor

    :param tensor: the tensor to be broken down
    :return: 4 tensors:
        - floors: tensor of integer values that are the largest integer less than or equal to the
    corresponding element in the input tensor
        - ceils: tensor of integer values that are the smallest integer greater than or equal to the
    corresponding element in the input tensor
        - rounds: tensor of integer values that are the nearest integer
    """
    floors = tensor.floor().long()
    ceils = tensor.ceil().long()
    rounds = tensor.round().long()
    fracs = tensor - floors
    return floors, ceils, rounds, fracs