input: Write a python function to maximize the given objective function with provided constraints using scipy.optimize.minimize.
  assert max_objective([1, 5, 5, 1]) == [1.0, 5.0, 5.0, 1.0]
  assert max_objective([2, 2, 2, 2]) == [2.0, 2.0, 2.0, 2.0]
  assert max_objective([3, 3, 3, 3]) == [1.42857143, 5.0, 5.0, 1.42857143]
output: from scipy.optimize import minimize
  import numpy as np
  
  def max_objective(x0):
      # Objective function to maximize (negative of the function to minimize)
      def objective(x):
          return -(x[0] * x[1] + x[2] * x[3])
      
      # Constraints: sum(x) == sum(x0)
      def constraint_sum(x):
          return np.sum(x) - np.sum(x0)
      
      # Initial guess (same as initial input)
      x_init = x0
      
      # Bounds for each variable
      bounds = [(0, None), (0, None), (0, None), (0, None)]
      
      # Constraints dictionary
      constraints = {'type': 'eq', 'fun': constraint_sum}
      
      # Perform the optimization
      result = minimize(objective, x_init, method='SLSQP', bounds=bounds, constraints=constraints)
      
      return result.x
  
  # Example usage to verify the function
  print(max_objective([1, 5, 5, 1]))  # Expected: [1.0, 5.0, 5.0, 1.0]
  print(max_objective([2, 2, 2, 2]))  # Expected: [2.0, 2.0, 2.0, 2.0]
  print(max_objective([3, 3, 3, 3]))  # Expected: [1.42857143, 5.0, 5.0, 1.42857143]