code: def roc_curve(input:Tensor, targ:Tensor):
      "Returns the false positive and true positive rates"
      targ = (targ == 1)
      desc_score_indices = torch.flip(input.argsort(-1), [-1])
      input = input[desc_score_indices]
      targ = targ[desc_score_indices]
      d = input[1:] - input[:-1]
      distinct_value_indices = torch.nonzero(d).transpose(0,1)[0]
      threshold_idxs = torch.cat((distinct_value_indices, LongTensor([len(targ) - 1]).to(targ.device)))
      tps = torch.cumsum(targ * 1, dim=-1)[threshold_idxs]
      fps = (1 + threshold_idxs - tps)
      if tps[0] != 0 or fps[0] != 0:
          fps = torch.cat((LongTensor([0]), fps))
          tps = torch.cat((LongTensor([0]), tps))
      fpr, tpr = fps.float() / fps[-1], tps.float() / tps[-1]
      return fpr, tpf roc_curve(input:Tensor, targ:Tensor):
      "Returns the false positive and true positive rates"
      targ = (targ == 1)
      desc_score_indices = torch.flip(input.argsort(-1), [-1])
      input = input[desc_score_indices]
      targ = targ[desc_score_indices]
      d = input[1:] - input[:-1]
      distinct_value_indices = torch.nonzero(d).transpose(0,1)[0]
      threshold_idxs = torch.cat((distinct_value_indices, LongTensor([len(targ) - 1]).to(targ.device)))
      tps = torch.cumsum(targ * 1, dim=-1)[threshold_idxs]
      fps = (1 + threshold_idxs - tps)
      if tps[0] != 0 or fps[0] != 0:
          fps = torch.cat((LongTensor([0]), fps))
          tps = torch.cat((LongTensor([0]), tps))
      fpr, tpr = fps.float() / fps[-1], tps.float() / tps[-1]
      return fpr, tpr
docs: Returns the false positive and true positive rates