prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  [Refactor] Identifier Leakage Check should be plotted with plotly and not matplotlib
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `deepchecks/checks/methodology/identifier_leakage.py`
  Content:
  ```
  1 # ----------------------------------------------------------------------------
  2 # Copyright (C) 2021 Deepchecks (https://www.deepchecks.com)
  3 #
  4 # This file is part of Deepchecks.
  5 # Deepchecks is distributed under the terms of the GNU Affero General
  6 # Public License (version 3 or later).
  7 # You should have received a copy of the GNU Affero General Public License
  8 # along with Deepchecks.  If not, see <http://www.gnu.org/licenses/>.
  9 # ----------------------------------------------------------------------------
  10 #
  11 """module contains Identifier Leakage check."""
  12 from typing import Union, Dict
  13 
  14 import pandas as pd
  15 
  16 import deepchecks.ppscore as pps
  17 from deepchecks import Dataset
  18 from deepchecks.base.check import CheckResult, SingleDatasetBaseCheck, ConditionResult
  19 from deepchecks.utils.plot import create_colorbar_barchart_for_check
  20 from deepchecks.utils.strings import format_percent
  21 from deepchecks.errors import DeepchecksValueError
  22 
  23 
  24 __all__ = ['IdentifierLeakage']
  25 
  26 
  27 class IdentifierLeakage(SingleDatasetBaseCheck):
  28     """Check if identifiers (Index/Date) can be used to predict the label.
  29 
  30     Args:
  31         ppscore_params: dictionary containing params to pass to ppscore predictor
  32     """
  33 
  34     def __init__(self, ppscore_params=None):
  35         super().__init__()
  36         self.ppscore_params = ppscore_params
  37 
  38     def run(self, dataset: Dataset, model=None) -> CheckResult:
  39         """Run check.
  40 
  41         Args:
  42           dataset(Dataset): any dataset.
  43           model: ignored in check (default: None).
  44 
  45         Returns:
  46             (CheckResult):
  47                 value is a dictionary with PPS per feature column.
  48                 data is a bar graph of the PPS of each feature.
  49 
  50         Raises:
  51             DeepchecksValueError: If the object is not a Dataset instance with a label
  52         """
  53         return self._identifier_leakage(dataset)
  54 
  55     def _identifier_leakage(self, dataset: Union[pd.DataFrame, Dataset], ppscore_params=None) -> CheckResult:
  56         Dataset.validate_dataset(dataset)
  57         dataset.validate_label()
  58         ppscore_params = ppscore_params or {}
  59 
  60         relevant_columns = list(filter(None, [dataset.datetime_name, dataset.index_name, dataset.label_name]))
  61 
  62         if len(relevant_columns) == 1:
  63             raise DeepchecksValueError('Dataset needs to have a date or index column.')
  64 
  65         df_pps = pps.predictors(df=dataset.data[relevant_columns], y=dataset.label_name, random_seed=42,
  66                                 **ppscore_params)
  67         df_pps = df_pps.set_index('x', drop=True)
  68         s_ppscore = df_pps['ppscore']
  69 
  70         def plot():
  71             # Create graph:
  72             create_colorbar_barchart_for_check(x=s_ppscore.index, y=s_ppscore.values,
  73                                                ylabel='predictive power score (PPS)',
  74                                                xlabel='Identifiers', color_map='gist_heat_r', color_shift_midpoint=0.1,
  75                                                color_label='PPS', check_name=self.__class__.__name__)
  76 
  77         text = ['The PPS represents the ability of a feature to single-handedly predict another feature or label.',
  78                 'For Identifier columns (Index/Date) PPS should be nearly 0, otherwise date and index have some '
  79                 'predictive effect on the label.']
  80 
  81         return CheckResult(value=s_ppscore.to_dict(), display=[plot, *text])
  82 
  83     def add_condition_pps_not_greater_than(self, max_pps: float = 0):
  84         """Add condition - require columns not to have a greater pps than given max.
  85 
  86         Args:
  87             max_pps (int): Maximum allowed string length outliers ratio.
  88         """
  89         def compare_pps(result: Dict):
  90             not_passing_columns = []
  91             for column_name in result.keys():
  92                 score = result[column_name]
  93                 if score > max_pps:
  94                     not_passing_columns.append(column_name)
  95             if not_passing_columns:
  96                 not_passing_str = ', '.join(map(str, not_passing_columns))
  97                 return ConditionResult(False,
  98                                        f'Found columns with greater pps than {format_percent(max_pps)}: '
  99                                        f'{not_passing_str}')
  100             else:
  101                 return ConditionResult(True)
  102 
  103         return self.add_condition(
  104             f'Identifier columns do not have a greater pps than {format_percent(max_pps)}',
  105             compare_pps)
  106
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/deepchecks/checks/methodology/identifier_leakage.py b/deepchecks/checks/methodology/identifier_leakage.py
  --- a/deepchecks/checks/methodology/identifier_leakage.py
  +++ b/deepchecks/checks/methodology/identifier_leakage.py
  @@ -16,10 +16,9 @@
   import deepchecks.ppscore as pps
   from deepchecks import Dataset
   from deepchecks.base.check import CheckResult, SingleDatasetBaseCheck, ConditionResult
  -from deepchecks.utils.plot import create_colorbar_barchart_for_check
   from deepchecks.utils.strings import format_percent
   from deepchecks.errors import DeepchecksValueError
  -
  +import plotly.express as px
   
   __all__ = ['IdentifierLeakage']
   
  @@ -67,18 +66,38 @@
           df_pps = df_pps.set_index('x', drop=True)
           s_ppscore = df_pps['ppscore']
   
  -        def plot():
  -            # Create graph:
  -            create_colorbar_barchart_for_check(x=s_ppscore.index, y=s_ppscore.values,
  -                                               ylabel='predictive power score (PPS)',
  -                                               xlabel='Identifiers', color_map='gist_heat_r', color_shift_midpoint=0.1,
  -                                               color_label='PPS', check_name=self.__class__.__name__)
  +        xaxis_layout = dict(title='Identifiers', type='category')
  +        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(width=700, 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.']
   
  -        return CheckResult(value=s_ppscore.to_dict(), display=[plot, *text])
  +        return CheckResult(value=s_ppscore.to_dict(), display=[figure, *text])
   
       def add_condition_pps_not_greater_than(self, max_pps: float = 0):
           """Add condition - require columns not to have a greater pps than given max.
  
verification_info: {"golden_diff": "diff --git a/deepchecks/checks/methodology/identifier_leakage.py b/deepchecks/checks/methodology/identifier_leakage.py\n--- a/deepchecks/checks/methodology/identifier_leakage.py\n+++ b/deepchecks/checks/methodology/identifier_leakage.py\n@@ -16,10 +16,9 @@\n import deepchecks.ppscore as pps\n from deepchecks import Dataset\n from deepchecks.base.check import CheckResult, SingleDatasetBaseCheck, ConditionResult\n-from deepchecks.utils.plot import create_colorbar_barchart_for_check\n from deepchecks.utils.strings import format_percent\n from deepchecks.errors import DeepchecksValueError\n-\n+import plotly.express as px\n \n __all__ = ['IdentifierLeakage']\n \n@@ -67,18 +66,38 @@\n         df_pps = df_pps.set_index('x', drop=True)\n         s_ppscore = df_pps['ppscore']\n \n-        def plot():\n-            # Create graph:\n-            create_colorbar_barchart_for_check(x=s_ppscore.index, y=s_ppscore.values,\n-                                               ylabel='predictive power score (PPS)',\n-                                               xlabel='Identifiers', color_map='gist_heat_r', color_shift_midpoint=0.1,\n-                                               color_label='PPS', check_name=self.__class__.__name__)\n+        xaxis_layout = dict(title='Identifiers', type='category')\n+        yaxis_layout = dict(fixedrange=True,\n+                            range=(0, 1),\n+                            title='predictive power score (PPS)')\n+\n+        red_heavy_colorscale = [\n+            [0, 'rgb(255, 255, 255)'],  # jan\n+            [0.1, 'rgb(255,155,100)'],\n+            [0.2, 'rgb(255, 50, 50)'],\n+            [0.3, 'rgb(200, 0, 0)'],\n+            [1, 'rgb(55, 0, 0)']\n+        ]\n+\n+        figure = px.bar(s_ppscore, x=s_ppscore.index, y='ppscore', color='ppscore',\n+                        color_continuous_scale=red_heavy_colorscale)\n+        figure.update_layout(width=700, height=400)\n+        figure.update_layout(\n+            dict(\n+                xaxis=xaxis_layout,\n+                yaxis=yaxis_layout,\n+                coloraxis=dict(\n+                    cmin=0,\n+                    cmax=1\n+                )\n+            )\n+        )\n \n         text = ['The PPS represents the ability of a feature to single-handedly predict another feature or label.',\n                 'For Identifier columns (Index/Date) PPS should be nearly 0, otherwise date and index have some '\n                 'predictive effect on the label.']\n \n-        return CheckResult(value=s_ppscore.to_dict(), display=[plot, *text])\n+        return CheckResult(value=s_ppscore.to_dict(), display=[figure, *text])\n \n     def add_condition_pps_not_greater_than(self, max_pps: float = 0):\n         \"\"\"Add condition - require columns not to have a greater pps than given max.\n", "issue": "[Refactor] Identifier Leakage Check should be plotted with plotly and not matplotlib\n\n", "before_files": [{"content": "# ----------------------------------------------------------------------------\n# Copyright (C) 2021 Deepchecks (https://www.deepchecks.com)\n#\n# This file is part of Deepchecks.\n# Deepchecks is distributed under the terms of the GNU Affero General\n# Public License (version 3 or later).\n# You should have received a copy of the GNU Affero General Public License\n# along with Deepchecks.  If not, see <http://www.gnu.org/licenses/>.\n# ----------------------------------------------------------------------------\n#\n\"\"\"module contains Identifier Leakage check.\"\"\"\nfrom typing import Union, Dict\n\nimport pandas as pd\n\nimport deepchecks.ppscore as pps\nfrom deepchecks import Dataset\nfrom deepchecks.base.check import CheckResult, SingleDatasetBaseCheck, ConditionResult\nfrom deepchecks.utils.plot import create_colorbar_barchart_for_check\nfrom deepchecks.utils.strings import format_percent\nfrom deepchecks.errors import DeepchecksValueError\n\n\n__all__ = ['IdentifierLeakage']\n\n\nclass IdentifierLeakage(SingleDatasetBaseCheck):\n    \"\"\"Check if identifiers (Index/Date) can be used to predict the label.\n\n    Args:\n        ppscore_params: dictionary containing params to pass to ppscore predictor\n    \"\"\"\n\n    def __init__(self, ppscore_params=None):\n        super().__init__()\n        self.ppscore_params = ppscore_params\n\n    def run(self, dataset: Dataset, model=None) -> CheckResult:\n        \"\"\"Run check.\n\n        Args:\n          dataset(Dataset): any dataset.\n          model: ignored in check (default: None).\n\n        Returns:\n            (CheckResult):\n                value is a dictionary with PPS per feature column.\n                data is a bar graph of the PPS of each feature.\n\n        Raises:\n            DeepchecksValueError: If the object is not a Dataset instance with a label\n        \"\"\"\n        return self._identifier_leakage(dataset)\n\n    def _identifier_leakage(self, dataset: Union[pd.DataFrame, Dataset], ppscore_params=None) -> CheckResult:\n        Dataset.validate_dataset(dataset)\n        dataset.validate_label()\n        ppscore_params = ppscore_params or {}\n\n        relevant_columns = list(filter(None, [dataset.datetime_name, dataset.index_name, dataset.label_name]))\n\n        if len(relevant_columns) == 1:\n            raise DeepchecksValueError('Dataset needs to have a date or index column.')\n\n        df_pps = pps.predictors(df=dataset.data[relevant_columns], y=dataset.label_name, random_seed=42,\n                                **ppscore_params)\n        df_pps = df_pps.set_index('x', drop=True)\n        s_ppscore = df_pps['ppscore']\n\n        def plot():\n            # Create graph:\n            create_colorbar_barchart_for_check(x=s_ppscore.index, y=s_ppscore.values,\n                                               ylabel='predictive power score (PPS)',\n                                               xlabel='Identifiers', color_map='gist_heat_r', color_shift_midpoint=0.1,\n                                               color_label='PPS', check_name=self.__class__.__name__)\n\n        text = ['The PPS represents the ability of a feature to single-handedly predict another feature or label.',\n                'For Identifier columns (Index/Date) PPS should be nearly 0, otherwise date and index have some '\n                'predictive effect on the label.']\n\n        return CheckResult(value=s_ppscore.to_dict(), display=[plot, *text])\n\n    def add_condition_pps_not_greater_than(self, max_pps: float = 0):\n        \"\"\"Add condition - require columns not to have a greater pps than given max.\n\n        Args:\n            max_pps (int): Maximum allowed string length outliers ratio.\n        \"\"\"\n        def compare_pps(result: Dict):\n            not_passing_columns = []\n            for column_name in result.keys():\n                score = result[column_name]\n                if score > max_pps:\n                    not_passing_columns.append(column_name)\n            if not_passing_columns:\n                not_passing_str = ', '.join(map(str, not_passing_columns))\n                return ConditionResult(False,\n                                       f'Found columns with greater pps than {format_percent(max_pps)}: '\n                                       f'{not_passing_str}')\n            else:\n                return ConditionResult(True)\n\n        return self.add_condition(\n            f'Identifier columns do not have a greater pps than {format_percent(max_pps)}',\n            compare_pps)\n", "path": "deepchecks/checks/methodology/identifier_leakage.py"}], "after_files": [{"content": "# ----------------------------------------------------------------------------\n# Copyright (C) 2021 Deepchecks (https://www.deepchecks.com)\n#\n# This file is part of Deepchecks.\n# Deepchecks is distributed under the terms of the GNU Affero General\n# Public License (version 3 or later).\n# You should have received a copy of the GNU Affero General Public License\n# along with Deepchecks.  If not, see <http://www.gnu.org/licenses/>.\n# ----------------------------------------------------------------------------\n#\n\"\"\"module contains Identifier Leakage check.\"\"\"\nfrom typing import Union, Dict\n\nimport pandas as pd\n\nimport deepchecks.ppscore as pps\nfrom deepchecks import Dataset\nfrom deepchecks.base.check import CheckResult, SingleDatasetBaseCheck, ConditionResult\nfrom deepchecks.utils.strings import format_percent\nfrom deepchecks.errors import DeepchecksValueError\nimport plotly.express as px\n\n__all__ = ['IdentifierLeakage']\n\n\nclass IdentifierLeakage(SingleDatasetBaseCheck):\n    \"\"\"Check if identifiers (Index/Date) can be used to predict the label.\n\n    Args:\n        ppscore_params: dictionary containing params to pass to ppscore predictor\n    \"\"\"\n\n    def __init__(self, ppscore_params=None):\n        super().__init__()\n        self.ppscore_params = ppscore_params\n\n    def run(self, dataset: Dataset, model=None) -> CheckResult:\n        \"\"\"Run check.\n\n        Args:\n          dataset(Dataset): any dataset.\n          model: ignored in check (default: None).\n\n        Returns:\n            (CheckResult):\n                value is a dictionary with PPS per feature column.\n                data is a bar graph of the PPS of each feature.\n\n        Raises:\n            DeepchecksValueError: If the object is not a Dataset instance with a label\n        \"\"\"\n        return self._identifier_leakage(dataset)\n\n    def _identifier_leakage(self, dataset: Union[pd.DataFrame, Dataset], ppscore_params=None) -> CheckResult:\n        Dataset.validate_dataset(dataset)\n        dataset.validate_label()\n        ppscore_params = ppscore_params or {}\n\n        relevant_columns = list(filter(None, [dataset.datetime_name, dataset.index_name, dataset.label_name]))\n\n        if len(relevant_columns) == 1:\n            raise DeepchecksValueError('Dataset needs to have a date or index column.')\n\n        df_pps = pps.predictors(df=dataset.data[relevant_columns], y=dataset.label_name, random_seed=42,\n                                **ppscore_params)\n        df_pps = df_pps.set_index('x', drop=True)\n        s_ppscore = df_pps['ppscore']\n\n        xaxis_layout = dict(title='Identifiers', type='category')\n        yaxis_layout = dict(fixedrange=True,\n                            range=(0, 1),\n                            title='predictive power score (PPS)')\n\n        red_heavy_colorscale = [\n            [0, 'rgb(255, 255, 255)'],  # jan\n            [0.1, 'rgb(255,155,100)'],\n            [0.2, 'rgb(255, 50, 50)'],\n            [0.3, 'rgb(200, 0, 0)'],\n            [1, 'rgb(55, 0, 0)']\n        ]\n\n        figure = px.bar(s_ppscore, x=s_ppscore.index, y='ppscore', color='ppscore',\n                        color_continuous_scale=red_heavy_colorscale)\n        figure.update_layout(width=700, height=400)\n        figure.update_layout(\n            dict(\n                xaxis=xaxis_layout,\n                yaxis=yaxis_layout,\n                coloraxis=dict(\n                    cmin=0,\n                    cmax=1\n                )\n            )\n        )\n\n        text = ['The PPS represents the ability of a feature to single-handedly predict another feature or label.',\n                'For Identifier columns (Index/Date) PPS should be nearly 0, otherwise date and index have some '\n                'predictive effect on the label.']\n\n        return CheckResult(value=s_ppscore.to_dict(), display=[figure, *text])\n\n    def add_condition_pps_not_greater_than(self, max_pps: float = 0):\n        \"\"\"Add condition - require columns not to have a greater pps than given max.\n\n        Args:\n            max_pps (int): Maximum allowed string length outliers ratio.\n        \"\"\"\n        def compare_pps(result: Dict):\n            not_passing_columns = []\n            for column_name in result.keys():\n                score = result[column_name]\n                if score > max_pps:\n                    not_passing_columns.append(column_name)\n            if not_passing_columns:\n                not_passing_str = ', '.join(map(str, not_passing_columns))\n                return ConditionResult(False,\n                                       f'Found columns with greater pps than {format_percent(max_pps)}: '\n                                       f'{not_passing_str}')\n            else:\n                return ConditionResult(True)\n\n        return self.add_condition(\n            f'Identifier columns do not have a greater pps than {format_percent(max_pps)}',\n            compare_pps)\n", "path": "deepchecks/checks/methodology/identifier_leakage.py"}]}