input: def solve_linear_programming_problem_simplex_method(objective_function: List[float], constraints: List[List[float]], right_hand_side: List[float]) -> Tuple[float, List[float]]:
      """Solve a linear programming problem using the Simplex Method. This method involves finding the maximum or minimum value of a linear function by defining a polytope that contains the solution and iteratively moving from vertex to vertex in the polytope until the optimal solution is found.
      
      The function requires the objective function coefficients, the constraints (which are inequalities requiring to zero all slack variables), and the right-hand side values of the constraints.
      
      >>> solve_linear_programming_problem_simplex_method([3.0, 2.0], [[1.0, 1.0], [2.0, 1.0]], [4.0, 5.0])
      (13.0, [3.0, 1.0])
      >>> solve_linear_programming_problem_simplex_method([2.0, 3.0, 5.0], [[1.0, -2.0, 1.0], [2.0, 0.0, 1.0]], [11.0, 3.0])
      (19.0, [5.0, 1.0, 0.0])
      """
output:     from scipy.optimize import linprog
  
      # Convert the problem to a minimization problem for linprog
      objective_function = [-x for x in objective_function]
  
      # Convert constraints to the form required by linprog
      num_constraints = len(constraints)
      num_variables = len(objective_function)
      A = constraints
      b = right_hand_side
  
      # Add slack variables to convert inequalities to equalities
      for i in range(num_constraints):
          A[i] += [0] * i + [1] + [0] * (num_constraints - i - 1)
  
      # Add slack variables to the objective function
      objective_function += [0] * num_constraints
  
      # Solve the linear programming problem using linprog
      result = linprog(objective_function, A_ub=A, b_ub=b, method='simplex')
  
      # Extract the solution
      optimal_value = -result.fun
      optimal_solution = result.x[:num_variables]
  
      return optimal_value, optimal_solution