text: import math
  from numbers import Number
  
  import torch
  
  
  def logsumexp(value, dim=None, keepdim=False):
      """Numerically stable implementation of the operation
      value.exp().sum(dim, keepdim).log()
      """
      if dim is not None:
          m, _ = torch.max(value, dim=dim, keepdim=True)
          value0 = value - m
          if keepdim is False:
              m = m.squeeze(dim)
          return m + torch.log(torch.sum(torch.exp(value0),
                                         dim=dim, keepdim=keepdim))
      else:
          m = torch.max(value)
          sum_exp = torch.sum(torch.exp(value - m))
          if isinstance(sum_exp, Number):
              return m + math.log(sum_exp)
          else:
              return m + torch.log(sum_exp)
  