


"""simple docstring"""





__UpperCAmelCase    				=      {
    "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     lowercase__	(  lowerCamelCase     :  str				)					->     str:
  lowerCAmelCase__    :    List[Any]								=					str(lowerCamelCase				).strip()

  # Exceptions
  if not binary_str:
    raise ValueError("Empty string was passed to the function"				)
  lowerCAmelCase__    :    List[Any]								=					binary_str[0] == "-"
  lowerCAmelCase__    :    List[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"				)

  lowerCAmelCase__    :    List[Any]								=					(
      "0" * (4 * (divmod(len(lowerCamelCase				)				,	4				)[0] + 1) - len(lowerCamelCase				)) + binary_str
  )

  lowerCAmelCase__    :    List[str]								=					[]
  for x in range(0				,	len(lowerCamelCase				)				,	4				):
    hexadecimal.append(BITS_TO_HEX[binary_str[x : x + 4]]				)
  lowerCAmelCase__    :    Any								=					"0x" + "".join(lowerCamelCase				)

  return "-" + hexadecimal_str if is_negative else hexadecimal_str


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

     testmod()




"""simple docstring"""





from __future__ import annotations





def     lowercase__	(  lowerCamelCase     :  list				,	lowerCamelCase     :  list				)					->     list:
  lowerCAmelCase__    :    Dict								=					[None] * (len(lowerCamelCase				) + len(lowerCamelCase				))

  lowerCAmelCase__    :    Optional[Any]								=					0  # pointer to current index for left Half
  lowerCAmelCase__    :    Any								=					0  # pointer to current index for the right Half
  lowerCAmelCase__    :    Dict								=					0  # pointer to current index for the sorted array Half

  while pointera < len(lowerCamelCase				) and pointera < len(lowerCamelCase				):
    if left_half[pointera] < right_half[pointera]:
      lowerCAmelCase__    :    Tuple								=					left_half[pointera]
      pointera += 1
      index += 1
    else:
      lowerCAmelCase__    :    int								=					right_half[pointera]
      pointera += 1
      index += 1
  while pointera < len(lowerCamelCase				):
    lowerCAmelCase__    :    Tuple								=					left_half[pointera]
    pointera += 1
    index += 1

  while pointera < len(lowerCamelCase				):
    lowerCAmelCase__    :    Optional[int]								=					right_half[pointera]
    pointera += 1
    index += 1

  return sorted_array





def     lowercase__	(  lowerCamelCase     :  list				)					->     list:
  if len(lowerCamelCase				) <= 1:
    return array
  # the actual formula to calculate the middle element = left + (right - left) // 2
  # this avoids integer overflow in case of large N
  lowerCAmelCase__    :    Optional[int]								=					0 + (len(lowerCamelCase				) - 0) // 2

  # Split the array into halves till the array length becomes equal to One
  # merge the arrays of single length returned by mergeSort function and
  # pass them into the merge arrays function which merges the array
  lowerCAmelCase__    :    Union[str, Any]								=					array[:middle]
  lowerCAmelCase__    :    List[str]								=					array[middle:]

  return merge(merge_sort(lowerCamelCase				)				,	merge_sort(lowerCamelCase				)				)


if __name__ == "__main__":
   import doctest

   doctest.testmod()
