






__SCREAMING_SNAKE_CASE      =      {
    '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 					UpperCAmelCase			(				a__   ):





						'''simple docstring'''






						lowerCAmelCase      :Tuple				  = str(a__   ).strip()

						# Exceptions
						if not binary_str:
												raise ValueError('Empty string was passed to the function'   )
						lowerCAmelCase      :List[str]				  = binary_str[0] == '-'
						lowerCAmelCase      :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      :Tuple				  = (
						    '0' * (4 * (divmod(len(a__   )    ,			4   )[0] + 1) - len(a__   )) + binary_str
						)

						lowerCAmelCase      :Union[str, Any]				  = []
						for x in range(0    ,			len(a__   )    ,			4   ):
												hexadecimal.append(BITS_TO_HEX[binary_str[x : x + 4]]   )
						lowerCAmelCase      :Any				  = '0x' + ''.join(a__   )

						return "-" + hexadecimal_str if is_negative else hexadecimal_str


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

		testmod()







"""simple docstring"""


from __future__ import annotations


def 					UpperCAmelCase			(				a__   ):





						'''simple docstring'''






						lowerCAmelCase      :Union[str, Any]				  = [0] * len(a__   )
						for i in range(1    ,			len(a__   )   ):
												lowerCAmelCase      :Optional[int]				  = duration_times[i - 1] + waiting_times[i - 1]
						return waiting_times


def 					UpperCAmelCase			(				a__    ,			a__   ):





						'''simple docstring'''






						return [
						    duration_time + waiting_times[i]
						    for i, duration_time in enumerate(a__   )
						]


def 					UpperCAmelCase			(				a__   ):





						'''simple docstring'''






						return sum(a__   ) / len(a__   )


def 					UpperCAmelCase			(				a__   ):





						'''simple docstring'''






						return sum(a__   ) / len(a__   )


if __name__ == "__main__":
		# process id's
		__SCREAMING_SNAKE_CASE      =      [1, 2, 3]

		# ensure that we actually have processes
		if len(processes) == 0:
				print('Zero amount of processes')
				raise SystemExit(0)

		# duration time of all processes
		__SCREAMING_SNAKE_CASE      =      [19, 8, 9]

		# ensure we can match each id to a duration time
		if len(duration_times) != len(processes):
				print('Unable to match all id\'s with their duration time')
				raise SystemExit(0)

		# get the waiting times and the turnaround times
		__SCREAMING_SNAKE_CASE      =      calculate_waiting_times(duration_times)
		__SCREAMING_SNAKE_CASE      =      calculate_turnaround_times(duration_times, waiting_times)

		# get the average times
		__SCREAMING_SNAKE_CASE      =      calculate_average_waiting_time(waiting_times)
		__SCREAMING_SNAKE_CASE      =      calculate_average_turnaround_time(turnaround_times)

		# print all the results
		print('Process ID\tDuration Time\tWaiting Time\tTurnaround Time')
		for i, process in enumerate(processes):
				print(
				    F"""{process}\t\t{duration_times[i]}\t\t{waiting_times[i]}\t\t"""
				    F"""{turnaround_times[i]}"""
				)
		print(F"""Average waiting time = {average_waiting_time}""")
		print(F"""Average turn around time = {average_turnaround_time}""")