code: def get_mask_from_sequence_lengths(sequence_lengths: torch.Tensor, max_length: int) -> torch.Tensor:
      
      # (batch_size, max_length)
      ones = sequence_lengths.new_ones(sequence_lengths.size(0), max_length)
      range_tensor = ones.cumsum(dim=1)
      return (sequence_lengths.unsqueeze(1) >= range_tensor).long()
docs: Given a variable of shape ``(batch_size,)`` that represents the sequence lengths of each batch
      element, this function returns a ``(batch_size, max_length)`` mask variable.  For example, if
      our input was ``[2, 2, 3]``, with a ``max_length`` of 4, we'd return
      ``[[1, 1, 0, 0], [1, 1, 0, 0], [1, 1, 1, 0]]``.
  
      We require ``max_length`` here instead of just computing it from the input ``sequence_lengths``
      because it lets us avoid finding the max, then copying that value from the GPU to the CPU so
      that we can use it to construct a new tensor.