human
Complete this python program:
def average_precision_score(y_true, y_score, average='macro', sample_weight=None):
assistant
#Here is the Python program you requested.

    """Compute average precision (AP) from prediction scores
    Note: this implementation is restricted to the binary classification task
    or multilabel classification task.
    Read more in the :ref:`User Guide <precision_recall_f_measure_metrics>`.
    Parameters
    y_true : array, shape = [n_samples] or [n_samples, n_classes]
    True binary labels in binary label indicators.
    y_score : array, shape = [n_samples] or [n_samples, n_classes]
    Target scores, can either be probability estimates of the positive
    class, confidence values, or non-thresholded measure of decisions
    (as returned by "decision_function" on some classifiers).
    average : string, [None, \micro\, \macro\ (default), \samples\, \weighted\]
    If ``None``, the scores for each class are returned. Otherwise,
    this determines the type of averaging performed on the data:
    ``\micro\``:
    Calculate metrics globally by considering each element of the label
    indicator matrix as a label.
    ``\macro\``:
    Calculate metrics for each label, and find their unweighted
    mean.  This does not take label imbalance into account.
    ``\weighted\``:
    Calculate metrics for each label, and find their average, weighted
    by support (the number of true instances for each label).
    ``\samples\``:
    Calculate metrics for each instance, and find their average.
    sample_weight : array-like of shape = [n_samples], optional
    Sample weights.
    Returns
    average_precision : float
    References
    .. [1] `Wikipedia entry for the Average precision
    <http://en.wikipedia.org/wiki/Average_precision>`_
    .. [2] `Stanford Information Retrieval book
    <http://nlp.stanford.edu/IR-book/html/htmledition/
    evaluation-of-ranked-retrieval-results-1.html>`_
    .. [3] `The PASCAL Visual Object Classes (VOC) Challenge
    <http://citeseerx.ist.psu.edu/viewdoc/
    download?doi=10.1.1.157.5766&rep=rep1&type=pdf>`_
    See also
    roc_auc_score : Area under the ROC curve
    precision_recall_curve :
    Compute precision-recall..."""
    def _binary_uninterpolated_average_precision(y_true, y_score, sample_weight=None):
        (precision, recall, thresholds) = precision_recall_curve(y_true, y_score, sample_weight=sample_weight)
        return (- np.sum((np.diff(recall) * np.array(precision)[:(-1)])))
    return _average_binary_score(_binary_uninterpolated_average_precision, y_true, y_score, average, sample_weight=sample_weight)