def gcd(a : int, b : int) -> int:
    """Computes the greatest common divisor of integers a and b using Euclid's Algorithm.
    gcd(a, b) = gcd(−a, b) = gcd(a, −b) = gcd(−a, −b)
    See proof: https://proofwiki.org/wiki/GCD_for_Negative_Integers
    """
    a_int : bool = isinstance(a, int)
    b_int : bool = isinstance(b, int)
    a = abs(a)
    b = abs(b)

    if not(a_int or b_int):
        raise ValueError("Input arguments are not integers")

    if (a == 0) or (b == 0) :
        raise ValueError("One or more input arguments equals zero")

    while b != 0:
        a, b = b, a % b
    return a