input: Write a function to create a Deep Learning Program in Python that predicts stock prices using LSTM neural networks. The function should build and compile the model, prepare the data, and train the model with given parameters. The input should be a dataset file path, and the output should be the trained model.
  
  
  def predict_stock_price(dataset_path):
      from keras.models import Sequential
      from keras.layers import Dense, LSTM, Dropout
      import numpy as np
      
      # define constants
      time_steps = 60
      batch_size = 32
      
      # build the model
      model = Sequential()
      model.add(LSTM(units=50, return_sequences=True, input_shape=(time_steps, 1)))
      model.add(Dropout(0.2))
      
      model.add(LSTM(units=50, return_sequences=True))
      model.add(Dropout(0.2))
      
      model.add(LSTM(units=50))
      model.add(Dropout(0.2))
      
      model.add(Dense(units=1))
      
      model.compile(optimizer='adam', loss='mean_squared_error')
      
      # read the data 
      dataset = np.loadtxt(dataset_path, delimiter=',')
      
      data = dataset[:, 0:1]
      
      # create train and test data
      x_train = data[:int(len(data)*0.8)]
      x_test = data[int(len(data)*0.8):]
      
      # reshape the data for input format
      x_train = np.reshape(x_train, (x_train.shape[0], time_steps, 1))
      x_test = np.reshape(x_test, (x_test.shape[0], time_steps, 1))
      
      # train the model
      model.fit(x_train, x_train, epochs=50, batch_size=batch_size, validation_data=(x_test, x_test))
      
      return model
  
  # Test cases
  assert isinstance(predict_stock_price('data.csv'), Sequential)
  
output: def predict_stock_price(dataset_path):
      from keras.models import Sequential
      from keras.layers import Dense, LSTM, Dropout
      import numpy as np
      
      time_steps = 60
      batch_size = 32
      
      model = Sequential()
      model.add(LSTM(units=50, return_sequences=True, input_shape=(time_steps, 1)))
      model.add(Dropout(0.2))
      
      model.add(LSTM(units=50, return_sequences=True))
      model.add(Dropout(0.2))
      
      model.add(LSTM(units=50))
      model.add(Dropout(0.2))
      
      model.add(Dense(units=1))
      
      model.compile(optimizer='adam', loss='mean_squared_error')
      
      dataset = np.loadtxt(dataset_path, delimiter=',')
      
      data = dataset[:, 0:1]
      
      x_train = data[:int(len(data)*0.8)]
      x_test = data[int(len(data)*0.8):]
      
      x_train = np.reshape(x_train, (x_train.shape[0], time_steps, 1))
      x_test = np.reshape(x_test, (x_test.shape[0], time_steps, 1))
      
      model.fit(x_train, x_train, epochs=50, batch_size=batch_size, validation_data=(x_test, x_test))
      
      return model