code: def component_callbacks(self, app):
      @app.callback(
          Output("pdp-categories-sort-div-" + self.name, "style"),
          Input("pdp-col-" + self.name, "value"),
      )
      def update_pdp_sort_div(col):
          return (
              {}
              if col in self.explainer.cat_cols
              else dict(display="none")
          )
  
      if self.feature_input_component is None:
  
          @app.callback(
              Output("pdp-graph-" + self.name, "figure"),
              [
                  Input("pdp-index-" + self.name, "value"),
                  Input("pdp-col-" + self.name, "value"),
                  Input("pdp-dropna-" + self.name, "value"),
                  Input("pdp-sample-" + self.name, "value"),
                  Input("pdp-gridlines-" + self.name, "value"),
                  Input("pdp-gridpoints-" + self.name, "value"),
                  Input("pdp-categories-sort-" + self.name, "value"),
                  Input("pos-label-" + self.name, "value"),
              ],
          )
          def update_pdp_graph(
              index,
              col,
              drop_na,
              sample,
              gridlines,
              gridpoints,
              sort,
              pos_label,
          ):
              if index is None or not self.explainer.index_exists(
                  index
              ):
                  raise PreventUpdate
              return self.explainer.plot_pdp(
                  col,
                  index,
                  drop_na=bool(drop_na),
                  sample=sample,
                  gridlines=gridlines,
                  gridpoints=gridpoints,
                  sort=sort,
                  pos_label=pos_label,
              )
  
      else:
  
          @app.callback(
              Output("pdp-graph-" + self.name, "figure"),
              [
                  Input("pdp-col-" + self.name, "value"),
                  Input("pdp-dropna-" + self.name, "value"),
                  Input("pdp-sample-" + self.name, "value"),
                  Input("pdp-gridlines-" + self.name, "value"),
                  Input("pdp-gridpoints-" + self.name, "value"),
                  Input("pdp-categories-sort-" + self.name, "value"),
                  Input("pos-label-" + self.name, "value"),
                  *self.feature_input_component._feature_callback_inputs,
              ],
          )
          def update_pdp_graph(
              col,
              drop_na,
              sample,
              gridlines,
              gridpoints,
              sort,
              pos_label,
              *inputs,
          ):
              X_row = self.explainer.get_row_from_input(
                  inputs, ranked_by_shap=True
              )
              return self.explainer.plot_pdp(
                  col,
                  X_row=X_row,
                  drop_na=bool(drop_na),
                  sample=sample,
                  gridlines=gridlines,
                  gridpoints=gridpoints,
                  sort=sort,
                  pos_label=pos_label,
              )
  
imports: from math import ceil
  import numpy
  import pandas
  import dash
  from dash import html, dcc, Input, Output, State, dash_table
  from dash.exceptions import PreventUpdate
  import dash_bootstrap_components
  from ..dashboard_methods import *
  from ..None import to_html
label_desc: Use image node_id 5 for calling the PdpComponent obj's underlying member method code with example usage: obj.component_callbacks(app) and returns: unknown, self, self