converting a binary string into hexadecimal using grouping method bintohexadecimal 101011111 0x15f bintohexadecimal 1010 0x0a bintohexadecimal 11101 0x1d bintohexadecimal a traceback most recent call last valueerror nonbinary value was passed to the function bintohexadecimal traceback most recent call last valueerror empty string was passed to the function sanitising parameter exceptions converting a binary string into hexadecimal using grouping method bin_to_hexadecimal 101011111 0x15f bin_to_hexadecimal 1010 0x0a bin_to_hexadecimal 11101 0x1d bin_to_hexadecimal a traceback most recent call last valueerror non binary value was passed to the function bin_to_hexadecimal traceback most recent call last valueerror empty string was passed to the function sanitising parameter exceptions
BITS_TO_HEX = {
    "0000": "0",
    "0001": "1",
    "0010": "2",
    "0011": "3",
    "0100": "4",
    "0101": "5",
    "0110": "6",
    "0111": "7",
    "1000": "8",
    "1001": "9",
    "1010": "a",
    "1011": "b",
    "1100": "c",
    "1101": "d",
    "1110": "e",
    "1111": "f",
}


def bin_to_hexadecimal(binary_str: str) -> str:
    
    
    binary_str = str(binary_str).strip()

    
    if not binary_str:
        raise ValueError("Empty string was passed to the function")
    is_negative = binary_str[0] == "-"
    binary_str = binary_str[1:] if is_negative else binary_str
    if not all(char in "01" for char in binary_str):
        raise ValueError("Non-binary value was passed to the function")

    binary_str = (
        "0" * (4 * (divmod(len(binary_str), 4)[0] + 1) - len(binary_str)) + binary_str
    )

    hexadecimal = []
    for x in range(0, len(binary_str), 4):
        hexadecimal.append(BITS_TO_HEX[binary_str[x : x + 4]])
    hexadecimal_str = "0x" + "".join(hexadecimal)

    return "-" + hexadecimal_str if is_negative else hexadecimal_str


if __name__ == "__main__":
    from doctest import testmod

    testmod()