parameters: (self, data, bucket_id)
return_statement: return batch_encoder_inputs, batch_decoder_inputs, batch_weights
docstring: Get a random batch of data from the specified bucket, prepare for step.
  
      To feed data in step(..) it must be a list of batch-major vectors, while
      data here contains single length-major cases. So the main logic of this
      function is to re-index data cases to be in the proper format for feeding.
  
      Args:
        data: a tuple of size len(self.buckets) in which each element contains
          lists of pairs of input and output data that we use to create a batch.
        bucket_id: integer, which bucket to get the batch for.
  
      Returns:
        The triple (encoder_inputs, decoder_inputs, target_weights) for
        the constructed batch that has the proper format to call step(...) later.
docstring_summary: Get a random batch of data from the specified bucket, prepare for step.
docstring_tokens: Get a random batch of data from the specified bucket prepare for step .
function: def get_batch(self, data, bucket_id):
      """Get a random batch of data from the specified bucket, prepare for step.
  
      To feed data in step(..) it must be a list of batch-major vectors, while
      data here contains single length-major cases. So the main logic of this
      function is to re-index data cases to be in the proper format for feeding.
  
      Args:
        data: a tuple of size len(self.buckets) in which each element contains
          lists of pairs of input and output data that we use to create a batch.
        bucket_id: integer, which bucket to get the batch for.
  
      Returns:
        The triple (encoder_inputs, decoder_inputs, target_weights) for
        the constructed batch that has the proper format to call step(...) later.
      """
      encoder_size, decoder_size = self.buckets[bucket_id]
      encoder_inputs, decoder_inputs = [], []
  
      # Get a random batch of encoder and decoder inputs from data,
      # pad them if needed, reverse encoder inputs and add GO to decoder.
      for _ in xrange(self.batch_size):
        encoder_input, decoder_input = random.choice(data[bucket_id])
  
        # Encoder inputs are padded and then reversed.
        encoder_pad = [data_utils.PAD_ID] * (encoder_size - len(encoder_input))
        encoder_inputs.append(list(reversed(encoder_input + encoder_pad)))
  
        # Decoder inputs get an extra "GO" symbol, and are padded then.
        decoder_pad_size = decoder_size - len(decoder_input) - 1
        decoder_inputs.append([data_utils.GO_ID] + decoder_input +
                              [data_utils.PAD_ID] * decoder_pad_size)
  
      # Now we create batch-major vectors from the data selected above.
      batch_encoder_inputs, batch_decoder_inputs, batch_weights = [], [], []
  
      # Batch encoder inputs are just re-indexed encoder_inputs.
      for length_idx in xrange(encoder_size):
        batch_encoder_inputs.append(
            np.array([encoder_inputs[batch_idx][length_idx]
                      for batch_idx in xrange(self.batch_size)], dtype=np.int32))
  
      # Batch decoder inputs are re-indexed decoder_inputs, we create weights.
      for length_idx in xrange(decoder_size):
        batch_decoder_inputs.append(
            np.array([decoder_inputs[batch_idx][length_idx]
                      for batch_idx in xrange(self.batch_size)], dtype=np.int32))
  
        # Create target_weights to be 0 for targets that are padding.
        batch_weight = np.ones(self.batch_size, dtype=np.float32)
        for batch_idx in xrange(self.batch_size):
          # We set weight to 0 if the corresponding target is a PAD symbol.
          # The corresponding target is decoder_input shifted by 1 forward.
          if length_idx < decoder_size - 1:
            target = decoder_inputs[batch_idx][length_idx + 1]
          if length_idx == decoder_size - 1 or target == data_utils.PAD_ID:
            batch_weight[batch_idx] = 0.0
        batch_weights.append(batch_weight)
      return batch_encoder_inputs, batch_decoder_inputs, batch_weights
function_tokens: def get_batch ( self , data , bucket_id ) : encoder_size , decoder_size = self . buckets [ bucket_id ] encoder_inputs , decoder_inputs = [ ] , [ ] # Get a random batch of encoder and decoder inputs from data, # pad them if needed, reverse encoder inputs and add GO to decoder. for _ in xrange ( self . batch_size ) : encoder_input , decoder_input = random . choice ( data [ bucket_id ] ) # Encoder inputs are padded and then reversed. encoder_pad = [ data_utils . PAD_ID ] * ( encoder_size - len ( encoder_input ) ) encoder_inputs . append ( list ( reversed ( encoder_input + encoder_pad ) ) ) # Decoder inputs get an extra "GO" symbol, and are padded then. decoder_pad_size = decoder_size - len ( decoder_input ) - 1 decoder_inputs . append ( [ data_utils . GO_ID ] + decoder_input + [ data_utils . PAD_ID ] * decoder_pad_size ) # Now we create batch-major vectors from the data selected above. batch_encoder_inputs , batch_decoder_inputs , batch_weights = [ ] , [ ] , [ ] # Batch encoder inputs are just re-indexed encoder_inputs. for length_idx in xrange ( encoder_size ) : batch_encoder_inputs . append ( np . array ( [ encoder_inputs [ batch_idx ] [ length_idx ] for batch_idx in xrange ( self . batch_size ) ] , dtype = np . int32 ) ) # Batch decoder inputs are re-indexed decoder_inputs, we create weights. for length_idx in xrange ( decoder_size ) : batch_decoder_inputs . append ( np . array ( [ decoder_inputs [ batch_idx ] [ length_idx ] for batch_idx in xrange ( self . batch_size ) ] , dtype = np . int32 ) ) # Create target_weights to be 0 for targets that are padding. batch_weight = np . ones ( self . batch_size , dtype = np . float32 ) for batch_idx in xrange ( self . batch_size ) : # We set weight to 0 if the corresponding target is a PAD symbol. # The corresponding target is decoder_input shifted by 1 forward. if length_idx < decoder_size - 1 : target = decoder_inputs [ batch_idx ] [ length_idx + 1 ] if length_idx == decoder_size - 1 or target == data_utils . PAD_ID : batch_weight [ batch_idx ] = 0.0 batch_weights . append ( batch_weight ) return batch_encoder_inputs , batch_decoder_inputs , batch_weights