def assumed_metric(y_true, y_pred, metric, assume_unlabeled=0, **kwargs):
    """
    This will wrap a metric so that you can pass it in and it will compute it on labeled
    and unlabeled instances converting unlabeled to assume_unlabeled

    Assumption: label -1 == unlabled, 0 == negative, 1 == positive
    """
    unlabeled_mask = y_true == -1
    y_true_assume = y_true.copy()
    y_true_assume[unlabeled_mask] = assume_unlabeled
    # check if a probability, then take the last column and use it (probability of the positive class)
    if (len(y_pred.shape) > 1):
        y_pred = y_pred[:,-1]
    return metric(y_true_assume, y_pred, **kwargs)