input: Write a python function to set up, compile, train, and predict stock prices using a TensorFlow model.
  assert round(predict_stock_price([100, 101, 102, 101, 100]), 2) == round(predicted_price, 2)
  assert round(predict_stock_price([101, 102, 103, 102, 101]), 2) == round(predicted_price, 2)
  assert round(predict_stock_price([102, 103, 104, 103, 102]), 2) == round(predicted_price, 2)
output: import numpy as np
  import tensorflow as tf
  from tensorflow import keras
  from tensorflow.keras.models import Sequential
  from tensorflow.keras.layers import Dense, LSTM
  from sklearn.preprocessing import MinMaxScaler
  
  def predict_stock_price(history):
      # Normalize the data
      scaler = MinMaxScaler(feature_range=(0, 1))
      history = np.array(history).reshape(-1, 1)
      history_scaled = scaler.fit_transform(history)
  
      # Prepare the data for LSTM
      X = []
      y = []
      for i in range(1, len(history_scaled)):
          X.append(history_scaled[i-1:i, 0])
          y.append(history_scaled[i, 0])
      X = np.array(X)
      y = np.array(y)
      X = np.reshape(X, (X.shape[0], 1, X.shape[1]))
  
      # Build the LSTM model
      model = Sequential()
      model.add(LSTM(50, return_sequences=True, input_shape=(1, 1)))
      model.add(LSTM(50))
      model.add(Dense(1))
  
      # Compile the model
      model.compile(optimizer='adam', loss='mean_squared_error')
  
      # Train the model
      model.fit(X, y, epochs=10, batch_size=1, verbose=0)
  
      # Predict the next value
      last_value_scaled = history_scaled[-1].reshape(1, 1, 1)
      predicted_scaled = model.predict(last_value_scaled)
      predicted_price = scaler.inverse_transform(predicted_scaled)[0][0]
  
      return predicted_price