docs: def predict(self, peptides, allele_encoding=None, batch_size=4096):
          """
          Predict affinities.
  
          If peptides are specified as EncodableSequences, then the predictions
          will be cached for this predictor as long as the EncodableSequences object
          remains in memory. The cache is keyed in the object identity of the
          EncodableSequences, not the sequences themselves.
  
          Parameters
          ----------
          peptides : EncodableSequences or list of string
          
          allele_encoding : AlleleEncoding, optional
              Only required when this model is a pan-allele model
  
          batch_size : int
              batch_size passed to Keras
  
          Returns
          -------
          numpy.array of nM affinity predictions 
          """
          assert self.prediction_cache is not None
          use_cache = (
              allele_encoding is None and
              isinstance(peptides, EncodableSequences))
          if use_cache and peptides in self.prediction_cache:
              return self.prediction_cache[peptides].copy()
  
          x_dict = {
              'peptide': self.peptides_to_network_input(peptides)
          }
          if allele_encoding is not None:
              allele_input = self.allele_encoding_to_network_input(allele_encoding)
              x_dict['allele'] = allele_input
  
          network = self.network(borrow=True)
          raw_predictions = network.predict(x_dict, batch_size=batch_size)
          predictions = numpy.array(raw_predictions, dtype = "float64")[:,0]
          result = to_ic50(predictions)
          if use_cache:
              self.prediction_cache[peptides] = result
          return result