Compare two paths.

    :param left: The left side or "before" entity.
    :param right: The right side or "after" entity.
    :return: A comparison details what has changed from the left side to the
             right side.

def compare(left: Union[str, pathlib.Path, _Entity],
            right: Union[str, pathlib.Path, _Entity]) -> Comparison:
    """
    Compare two paths.

    :param left: The left side or "before" entity.
    :param right: The right side or "after" entity.
    :return: A comparison details what has changed from the left side to the
             right side.
    """

    def normalise(param: Union[str, pathlib.Path, _Entity]) -> _Entity:
        """
        Turns any one of a number of types of input into an entity.

        :param param: The input - either a path string, a path object, or a
                      full blown entity.
        :return: The input param as an entity.
        """
        if isinstance(param, str):
            param = pathlib.Path(param)
        if isinstance(param, pathlib.Path):
            param = _Entity.from_path(param)
        return param

    return Comparison.compare(normalise(left), normalise(right))