text: from tensorflow.keras.models import Sequential
  from tensorflow.keras.layers import LSTM
  from tensorflow.keras.layers import Dense
  from tensorflow.keras.layers import RepeatVector
  from tensorflow.keras.layers import TimeDistributed
  from tensorflow.keras.layers import Dropout
  from tensorflow.keras.layers import Bidirectional
  from tensorflow.keras.models import load_model
  
  
  def build_model(hidden_layers=0, bidirectional=False, units=200, n_steps_in=5, n_steps_out=90):
      model = Sequential()
      # assemble model
      # start with input layer
      # first, check if hidden layers are >= 1
      # then add the input layer
      if hidden_layers >= 1:
          if bidirectional == True:
              model.add(Bidirectional(LSTM(units, activation='tanh', return_sequences=True, input_shape=(n_steps_in, 1))))
          else:
              model.add(LSTM(units, activation='tanh', return_sequences=True, input_shape=(n_steps_in, 1)))
          for i in range(0, hidden_layers):
              if (i + 1) == hidden_layers:
                  model.add(LSTM(round(units * 0.67 + n_steps_out)))
                  model.add(Dropout(0.2))
              else:
                  model.add(LSTM(round(units * 0.67 + n_steps_out), return_sequences=True))
                  model.add(Dropout(0.2))
      else:
          if bidirectional == True:
              model.add(Bidirectional(LSTM(units, activation='tanh', input_shape=(n_steps_in, 1))))
          else:
              model.add(LSTM(units, activation='tanh', input_shape=(n_steps_in, 1)))
      
      # output layer
      model.add(Dense(n_steps_out))
  
      # compile model
      model.compile(optimizer='adam', loss='mse', metrics=['mse'])
      return model
  