input: def solve_linear_programming_problem_using_simplex(decision_variables: List[str], objective_function: List[float], constraints: List[List[float]], right_hand_sides: List[float]) -> Tuple[List[float], float]:
      """
      This function solves a linear programming problem using the Simplex method. It finds the maximum or minimum value of a linear function defined by decision variables, objective function, and constraints.
      The approach involves converting the problem into standard form if needed, setting up the tableau, and iteratively moving from one vertex to another in the polytope to find the optimal solution.
  
      Example:
      >>> solve_linear_programming_problem_using_simplex(['x', 'y'], [3, 4], [[2, 3], [3, 2]], [12, 12])
      ([5.0, 0.0], 15.0)
      >>> solve_linear_programming_problem_using_simplex(['p', 'q'], [2, 1], [[1, 1], [1, 2]], [4, 5])
      ([4.0, 0.0], 8.0)
      """
output:     from scipy.optimize import linprog
  
      # Convert the problem to a minimization problem for linprog
      c = [-x for x in objective_function]
      A = constraints
      b = right_hand_sides
  
      # Solve the linear programming problem using scipy's linprog
      result = linprog(c, A_ub=A, b_ub=b, method='simplex')
  
      # Extract the optimal values of the decision variables and the objective function
      optimal_values = result.x
      optimal_objective = -result.fun
  
      return optimal_values, optimal_objective