class_docstr: Check if identifiers (Index/Date) can be used to predict the label.
  
  Parameters
  ----------
  ppscore_params : any , default: None
      dictionary containing params to pass to ppscore predictor
  n_samples : int , default: 1_000_000
      number of samples to use for this check.
  random_state : int, default: 42
      random seed for all check internals.
docstr: 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.
docstr_tok: ["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","."]
code: def run_logic(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)
  
file_path: deepchecks/deepchecks/tabular/checks/data_integrity/identifier_label_correlation.py
imports: from typing import Dict
  import pandas
  import plotly.express
  import deepchecks.ppscore
  from deepchecks.core import CheckResult, ConditionCategory, ConditionResult
  from deepchecks.core.errors import DatasetValidationError
  from deepchecks.tabular import Context, SingleDatasetCheck
  from deepchecks.tabular.dataset import _get_dataset_docs_tag
  from deepchecks.tabular.utils.messages import get_condition_passed_message
  from deepchecks.tabular.utils.task_type import TaskType
  from deepchecks.utils.strings import format_number
label_desc: Use image node_id 2 for calling the IdentifierLabelCorrelation obj's underlying member method code with example usage: obj.run_logic(context, dataset_kind) and returns: CheckResult