def METHOD_NAME(self, context: Context, dataset_kind) -> CheckResult:
    """Run check.
    Returns
    -------
    CheckResult
        value is a dictionary with PPS per feature column.
        data is a bar graph of the PPS of each feature.
    Raises
    ------
    DeepchecksValueError
        If the object is not a Dataset instance with a label.
    """
    dataset = context.get_data_by_kind(dataset_kind).sample(self.n_samples, random_state=self.random_state)
    label_name = dataset.label_name
    relevant_data = pd.DataFrame({
        it.name: it
        for it in (dataset.index_col, dataset.datetime_col, dataset.label_col)
        if it is not None
    })
    if len(relevant_data.columns) == 1:
        raise DatasetValidationError(
            'Dataset does not contain an index or a datetime',
            html=f'Dataset does not contain an index or a datetime. see {_get_dataset_docs_tag()}'
        )
    # ppscore infers the task type from the label dtype, so we need to convert it to object
    if context.task_type != TaskType.REGRESSION:
        relevant_data[dataset.label_name] = relevant_data[dataset.label_name].astype(object)
    df_pps = pps.predictors(
        df=relevant_data,
        y=label_name,
        random_seed=42,
        **self.ppscore_params
    )
    df_pps = df_pps.set_index('x', drop=True)
    s_ppscore = df_pps['ppscore']
    if context.with_display:
        xaxis_layout = dict(
            title='Identifiers',
            type='category',
            # NOTE:
            # the range, in this case, is needed to fix a problem with
            # too wide bars when there are only one or two of them`s on
            # the plot, plus it also centralizes them`s on the plot
            # The min value of the range (range(min. max)) is bigger because
            # otherwise bars will not be centralized on the plot, they will
            # appear on the left part of the plot (that is probably because of zero)
            range=(-3, len(s_ppscore.index) + 2)
        )
        yaxis_layout = dict(
            fixedrange=True,
            range=(0, 1),
            title='predictive power score (PPS)'
        )
        red_heavy_colorscale = [
            [0, 'rgb(255, 255, 255)'],  # jan
            [0.1, 'rgb(255,155,100)'],
            [0.2, 'rgb(255, 50, 50)'],
            [0.3, 'rgb(200, 0, 0)'],
            [1, 'rgb(55, 0, 0)']
        ]
        figure = px.bar(s_ppscore, x=s_ppscore.index, y='ppscore', color='ppscore',
                        color_continuous_scale=red_heavy_colorscale)
        figure.update_layout(
            height=400
        )
        figure.update_layout(
            dict(
                xaxis=xaxis_layout,
                yaxis=yaxis_layout,
                coloraxis=dict(
                    cmin=0,
                    cmax=1
                )
            )
        )
        text = ['The PPS represents the ability of a feature to single-handedly predict another feature or label.',
                'For Identifier columns (Index/Date) PPS should be nearly 0, otherwise date and index have some '
                'predictive effect on the label.']
        # display only if not all scores are 0
        display = [figure, *text] if s_ppscore.sum() else None
    else:
        display = None
    return CheckResult(value=s_ppscore.to_dict(), display=display)