'Requires |stride|; otherwise see base class.'

def create(self, fixed_embeddings, linked_embeddings, context_tensor_arrays, attention_tensor, during_training, stride=None):

    check.NotNone(stride, 'BulkBiLSTMNetwork    requires    "stride"    and    must    be    called    in    the    bulk    feature    extractor    component.')
    lengths = dragnn.lookup_named_tensor('lengths', linked_embeddings)
    lengths_s = tf.squeeze(lengths.tensor, [1])
    linked_embeddings = [named_tensor for named_tensor in linked_embeddings if (named_tensor.name != 'lengths')]
    inputs_sxnxd = dragnn.get_input_tensor_with_stride(fixed_embeddings, linked_embeddings, stride)
    inputs_sxnxd.set_shape([tf.Dimension(None), tf.Dimension(None), self._input_dim])
    (initial_states_forward, initial_states_backward) = self._create_initial_states(stride)
    if during_training:
        cells_forward = self._train_cells_forward
        cells_backward = self._train_cells_backward
    else:
        cells_forward = self._inference_cells_forward
        cells_backward = self._inference_cells_backward
    def _bilstm_closure(scope):
        'Applies    the    bi-LSTM    to    the    current    inputs.'
        (outputs_sxnxd, _, _) = tf.contrib.rnn.stack_bidirectional_dynamic_rnn(cells_forward, cells_backward, inputs_sxnxd, initial_states_fw=initial_states_forward, initial_states_bw=initial_states_backward, sequence_length=lengths_s, parallel_iterations=self._attrs['parallel_iterations'], scope=scope)
        return outputs_sxnxd
    outputs_sxnxd = self._apply_with_captured_variables(_bilstm_closure)
    outputs_snxd = tf.reshape(outputs_sxnxd, [(-1), self._output_dim])
    return self._append_base_layers([outputs_snxd])
