batch.
  Return type:
     *Tuple*[*Tensor*, *Optional*[*Tensor*]]

  Shape:
     * Inputs:

     * query: (L, N, E) where L is the target sequence length, N
       is the batch size, E is the embedding dimension. (N, L, E)
       if "batch_first" is "True".

     * key: (S, N, E), where S is the source sequence length, N is
       the batch size, E is the embedding dimension. (N, S, E) if
       "batch_first" is "True".

     * value: (S, N, E) where S is the source sequence length, N
       is the batch size, E is the embedding dimension. (N, S, E)
       if "batch_first" is "True".

     * key_padding_mask: (N, S) where N is the batch size, S is
       the source sequence length. If a ByteTensor is provided,
       the non-zero positions will be ignored while the position
       with the zero positions will be unchanged. If a BoolTensor
       is provided, the positions with the value of "True" will be
