code: 
  
  
  
  from __future__ import annotations
  
  
  
  
  def     UpperCAmelCase__ (							__snake_case							)   -> Optional[Any]:
    _A           =    [0] * len(__snake_case							)
    for i in range(1						,				len(__snake_case							)							):
      _A           =    duration_times[i - 1] + waiting_times[i - 1]
    return waiting_times
  
  
  
  
  def     UpperCAmelCase__ (							__snake_case						,				__snake_case							)   -> str:
    return [
        duration_time + waiting_times[i]
        for i, duration_time in enumerate(__snake_case							)
    ]
  
  
  
  
  def     UpperCAmelCase__ (							__snake_case							)   -> List[str]:
    return sum(__snake_case							) / len(__snake_case							)
  
  
  
  
  def     UpperCAmelCase__ (							__snake_case							)   -> Dict:
    return sum(__snake_case							) / len(__snake_case							)
  
  
  if __name__ == "__main__":
      # process id's
      __lowerCamelCase  				=					[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
      __lowerCamelCase  				=					[1_9, 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
      __lowerCamelCase  				=					calculate_waiting_times(duration_times)
      __lowerCamelCase  				=					calculate_turnaround_times(duration_times, waiting_times)
  
      # get the average times
      __lowerCamelCase  				=					calculate_average_waiting_time(waiting_times)
      __lowerCamelCase  				=					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}''')
style_context: 
  
  
  
  def     UpperCAmelCase__ (							__snake_case						,				__snake_case						,				__snake_case						,				__snake_case						,				__snake_case							)   -> None:
    if target == 0:
      answer.append(path.copy()							)
    else:
      for index in range(__snake_case						,				len(__snake_case							)							):
        if target >= candidates[index]:
          path.append(candidates[index]							)
          backtrack(__snake_case						,				__snake_case						,				__snake_case						,				target - candidates[index]						,				__snake_case							)
          path.pop(len(__snake_case							) - 1							)
  
  
  
  
  def     UpperCAmelCase__ (							__snake_case						,				__snake_case							)   -> list:
    _A           =    []  # type: list[int]
    _A           =    []  # type: list[int]
    backtrack(__snake_case						,				__snake_case						,				__snake_case						,				__snake_case						,				0							)
    return answer
  
  
  
  
  def     UpperCAmelCase__ (							)   -> None:
    print(combination_sum([-8, 2.3, 0]						,				1							)							)
  
  
  if __name__ == "__main__":
      import doctest
  
      doctest.testmod()
      main()