prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Suite output text - fix first part
  1. Add explanation for the “!” (warning) 2. add link to docs where written (or remove wording), where it says:"Suites, checks and conditions can all be modified (see tutorial [link])."
  
  --- 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/base/display_suite.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 """Handle display of suite result."""
  12 from typing import List, Union
  13 
  14 # pylint: disable=protected-access
  15 import sys
  16 import tqdm
  17 import pandas as pd
  18 from IPython.core.display import display_html
  19 from IPython import get_ipython
  20 
  21 from deepchecks import errors
  22 from deepchecks.utils.ipython import is_widgets_enabled
  23 from deepchecks.utils.strings import get_random_string
  24 from deepchecks.base.check import CheckResult, CheckFailure
  25 from deepchecks.base.display_pandas import dataframe_to_html, display_conditions_table
  26 
  27 
  28 __all__ = ['display_suite_result', 'ProgressBar']
  29 
  30 
  31 class ProgressBar:
  32     """Progress bar for display while running suite."""
  33 
  34     def __init__(self, name, length):
  35         """Initialize progress bar."""
  36         shared_args = {'total': length, 'desc': name, 'unit': ' Check', 'leave': False, 'file': sys.stdout}
  37         if is_widgets_enabled():
  38             self.pbar = tqdm.tqdm_notebook(**shared_args, colour='#9d60fb')
  39         else:
  40             # Normal tqdm with colour in notebooks produce bug that the cleanup doesn't remove all characters. so
  41             # until bug fixed, doesn't add the colour to regular tqdm
  42             self.pbar = tqdm.tqdm(**shared_args, bar_format=f'{{l_bar}}{{bar:{length}}}{{r_bar}}')
  43 
  44     def set_text(self, text):
  45         """Set current running check."""
  46         self.pbar.set_postfix(Check=text)
  47 
  48     def close(self):
  49         """Close the progress bar."""
  50         self.pbar.close()
  51 
  52     def inc_progress(self):
  53         """Increase progress bar value by 1."""
  54         self.pbar.update(1)
  55 
  56 
  57 def get_display_exists_icon(exists: bool):
  58     if exists:
  59         return '<div style="text-align: center">Yes</div>'
  60     return '<div style="text-align: center">No</div>'
  61 
  62 
  63 def display_suite_result(suite_name: str, results: List[Union[CheckResult, CheckFailure]]):
  64     """Display results of suite in IPython."""
  65     if len(results) == 0:
  66         display_html(f"""<h1>{suite_name}</h1><p>Suite is empty.</p>""", raw=True)
  67         return
  68     if 'google.colab' in str(get_ipython()):
  69         unique_id = ''
  70     else:
  71         unique_id = get_random_string()
  72     checks_with_conditions = []
  73     display_table: List[CheckResult] = []
  74     others_table = []
  75 
  76     for result in results:
  77         if isinstance(result, CheckResult):
  78             if result.have_conditions():
  79                 checks_with_conditions.append(result)
  80             if result.have_display():
  81                 display_table.append(result)
  82             else:
  83                 others_table.append([result.get_header(), 'Nothing found', 2])
  84         elif isinstance(result, CheckFailure):
  85             msg = result.exception.__class__.__name__ + ': ' + str(result.exception)
  86             name = result.check.name()
  87             others_table.append([name, msg, 1])
  88         else:
  89             # Should never reach here!
  90             raise errors.DeepchecksValueError(
  91                 f"Expecting list of 'CheckResult'|'CheckFailure', but got {type(result)}."
  92             )
  93 
  94     display_table = sorted(display_table, key=lambda it: it.priority)
  95 
  96     light_hr = '<hr style="background-color: #eee;border: 0 none;color: #eee;height: 1px;">'
  97     bold_hr = '<hr style="background-color: black;border: 0 none;color: black;height: 1px;">'
  98 
  99     icons = """
  100     <span style="color: green;display:inline-block">\U00002713</span> /
  101     <span style="color: red;display:inline-block">\U00002716</span> /
  102     <span style="color: orange;font-weight:bold;display:inline-block">\U00000021</span>
  103     """
  104 
  105     check_names = list(set(it.check.name() for it in results))
  106     prologue = (
  107         f"The suite is composed of various checks such as: {', '.join(check_names[:3])}, etc..."
  108         if len(check_names) > 3
  109         else f"The suite is composed of the following checks: {', '.join(check_names)}."
  110     )
  111 
  112     display_html(
  113         f"""
  114         <h1 id="summary_{unique_id}">{suite_name}</h1>
  115         <p>{prologue}<br>
  116         Each check may contain conditions (which results in {icons}),
  117         as well as other outputs such as plots or tables.<br>
  118         Suites, checks and conditions can all be modified (see tutorial [link]).</p>
  119         {bold_hr}<h2>Conditions Summary</h2>
  120         """,
  121         raw=True
  122     )
  123 
  124     if checks_with_conditions:
  125         display_conditions_table(checks_with_conditions, unique_id)
  126     else:
  127         display_html('<p>No conditions defined on checks in the suite.</p>', raw=True)
  128 
  129     display_html(f'{bold_hr}<h2>Additional Outputs</h2>', raw=True)
  130     if display_table:
  131         for i, r in enumerate(display_table):
  132             r.show(show_conditions=False, unique_id=unique_id)
  133             if i < len(display_table) - 1:
  134                 display_html(light_hr, raw=True)
  135     else:
  136         display_html('<p>No outputs to show.</p>', raw=True)
  137 
  138     if others_table:
  139         others_table = pd.DataFrame(data=others_table, columns=['Check', 'Reason', 'sort'])
  140         others_table.sort_values(by=['sort'], inplace=True)
  141         others_table.drop('sort', axis=1, inplace=True)
  142         html = f"""{bold_hr}
  143         <h2>Other Checks That Weren't Displayed</h2>
  144         {dataframe_to_html(others_table.style.hide_index())}
  145         """
  146         display_html(html, raw=True)
  147 
  148     display_html(f'<br><a href="#summary_{unique_id}" style="font-size: 14px">Go to top</a>', raw=True)
  149
  ```
  --- 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/base/display_suite.py b/deepchecks/base/display_suite.py
  --- a/deepchecks/base/display_suite.py
  +++ b/deepchecks/base/display_suite.py
  @@ -109,14 +109,20 @@
           else f"The suite is composed of the following checks: {', '.join(check_names)}."
       )
   
  +    suite_creation_example_link = 'https://docs.deepchecks.com/en/stable/examples/guides/create_a_custom_suite.html'
  +
       display_html(
           f"""
           <h1 id="summary_{unique_id}">{suite_name}</h1>
  -        <p>{prologue}<br>
  -        Each check may contain conditions (which results in {icons}),
  -        as well as other outputs such as plots or tables.<br>
  -        Suites, checks and conditions can all be modified (see tutorial [link]).</p>
  -        {bold_hr}<h2>Conditions Summary</h2>
  +        <p>
  +            {prologue}<br>
  +            Each check may contain conditions (which will result in pass / fail / warning, represented by {icons})
  +            as well as other outputs such as plots or tables.<br>
  +            Suites, checks and conditions can all be modified (see the
  +            <a href={suite_creation_example_link}>Create a Custom Suite</a> tutorial).
  +        </p>
  +        {bold_hr}
  +        <h2>Conditions Summary</h2>
           """,
           raw=True
       )
  
verification_info: {"golden_diff": "diff --git a/deepchecks/base/display_suite.py b/deepchecks/base/display_suite.py\n--- a/deepchecks/base/display_suite.py\n+++ b/deepchecks/base/display_suite.py\n@@ -109,14 +109,20 @@\n         else f\"The suite is composed of the following checks: {', '.join(check_names)}.\"\n     )\n \n+    suite_creation_example_link = 'https://docs.deepchecks.com/en/stable/examples/guides/create_a_custom_suite.html'\n+\n     display_html(\n         f\"\"\"\n         <h1 id=\"summary_{unique_id}\">{suite_name}</h1>\n-        <p>{prologue}<br>\n-        Each check may contain conditions (which results in {icons}),\n-        as well as other outputs such as plots or tables.<br>\n-        Suites, checks and conditions can all be modified (see tutorial [link]).</p>\n-        {bold_hr}<h2>Conditions Summary</h2>\n+        <p>\n+            {prologue}<br>\n+            Each check may contain conditions (which will result in pass / fail / warning, represented by {icons})\n+            as well as other outputs such as plots or tables.<br>\n+            Suites, checks and conditions can all be modified (see the\n+            <a href={suite_creation_example_link}>Create a Custom Suite</a> tutorial).\n+        </p>\n+        {bold_hr}\n+        <h2>Conditions Summary</h2>\n         \"\"\",\n         raw=True\n     )\n", "issue": "Suite output text - fix first part\n1. Add explanation for the \u201c!\u201d (warning) 2. add link to docs where written (or remove wording), where it says:\"Suites, checks and conditions can all be modified (see tutorial [link]).\"\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\"\"\"Handle display of suite result.\"\"\"\nfrom typing import List, Union\n\n# pylint: disable=protected-access\nimport sys\nimport tqdm\nimport pandas as pd\nfrom IPython.core.display import display_html\nfrom IPython import get_ipython\n\nfrom deepchecks import errors\nfrom deepchecks.utils.ipython import is_widgets_enabled\nfrom deepchecks.utils.strings import get_random_string\nfrom deepchecks.base.check import CheckResult, CheckFailure\nfrom deepchecks.base.display_pandas import dataframe_to_html, display_conditions_table\n\n\n__all__ = ['display_suite_result', 'ProgressBar']\n\n\nclass ProgressBar:\n    \"\"\"Progress bar for display while running suite.\"\"\"\n\n    def __init__(self, name, length):\n        \"\"\"Initialize progress bar.\"\"\"\n        shared_args = {'total': length, 'desc': name, 'unit': ' Check', 'leave': False, 'file': sys.stdout}\n        if is_widgets_enabled():\n            self.pbar = tqdm.tqdm_notebook(**shared_args, colour='#9d60fb')\n        else:\n            # Normal tqdm with colour in notebooks produce bug that the cleanup doesn't remove all characters. so\n            # until bug fixed, doesn't add the colour to regular tqdm\n            self.pbar = tqdm.tqdm(**shared_args, bar_format=f'{{l_bar}}{{bar:{length}}}{{r_bar}}')\n\n    def set_text(self, text):\n        \"\"\"Set current running check.\"\"\"\n        self.pbar.set_postfix(Check=text)\n\n    def close(self):\n        \"\"\"Close the progress bar.\"\"\"\n        self.pbar.close()\n\n    def inc_progress(self):\n        \"\"\"Increase progress bar value by 1.\"\"\"\n        self.pbar.update(1)\n\n\ndef get_display_exists_icon(exists: bool):\n    if exists:\n        return '<div style=\"text-align: center\">Yes</div>'\n    return '<div style=\"text-align: center\">No</div>'\n\n\ndef display_suite_result(suite_name: str, results: List[Union[CheckResult, CheckFailure]]):\n    \"\"\"Display results of suite in IPython.\"\"\"\n    if len(results) == 0:\n        display_html(f\"\"\"<h1>{suite_name}</h1><p>Suite is empty.</p>\"\"\", raw=True)\n        return\n    if 'google.colab' in str(get_ipython()):\n        unique_id = ''\n    else:\n        unique_id = get_random_string()\n    checks_with_conditions = []\n    display_table: List[CheckResult] = []\n    others_table = []\n\n    for result in results:\n        if isinstance(result, CheckResult):\n            if result.have_conditions():\n                checks_with_conditions.append(result)\n            if result.have_display():\n                display_table.append(result)\n            else:\n                others_table.append([result.get_header(), 'Nothing found', 2])\n        elif isinstance(result, CheckFailure):\n            msg = result.exception.__class__.__name__ + ': ' + str(result.exception)\n            name = result.check.name()\n            others_table.append([name, msg, 1])\n        else:\n            # Should never reach here!\n            raise errors.DeepchecksValueError(\n                f\"Expecting list of 'CheckResult'|'CheckFailure', but got {type(result)}.\"\n            )\n\n    display_table = sorted(display_table, key=lambda it: it.priority)\n\n    light_hr = '<hr style=\"background-color: #eee;border: 0 none;color: #eee;height: 1px;\">'\n    bold_hr = '<hr style=\"background-color: black;border: 0 none;color: black;height: 1px;\">'\n\n    icons = \"\"\"\n    <span style=\"color: green;display:inline-block\">\\U00002713</span> /\n    <span style=\"color: red;display:inline-block\">\\U00002716</span> /\n    <span style=\"color: orange;font-weight:bold;display:inline-block\">\\U00000021</span>\n    \"\"\"\n\n    check_names = list(set(it.check.name() for it in results))\n    prologue = (\n        f\"The suite is composed of various checks such as: {', '.join(check_names[:3])}, etc...\"\n        if len(check_names) > 3\n        else f\"The suite is composed of the following checks: {', '.join(check_names)}.\"\n    )\n\n    display_html(\n        f\"\"\"\n        <h1 id=\"summary_{unique_id}\">{suite_name}</h1>\n        <p>{prologue}<br>\n        Each check may contain conditions (which results in {icons}),\n        as well as other outputs such as plots or tables.<br>\n        Suites, checks and conditions can all be modified (see tutorial [link]).</p>\n        {bold_hr}<h2>Conditions Summary</h2>\n        \"\"\",\n        raw=True\n    )\n\n    if checks_with_conditions:\n        display_conditions_table(checks_with_conditions, unique_id)\n    else:\n        display_html('<p>No conditions defined on checks in the suite.</p>', raw=True)\n\n    display_html(f'{bold_hr}<h2>Additional Outputs</h2>', raw=True)\n    if display_table:\n        for i, r in enumerate(display_table):\n            r.show(show_conditions=False, unique_id=unique_id)\n            if i < len(display_table) - 1:\n                display_html(light_hr, raw=True)\n    else:\n        display_html('<p>No outputs to show.</p>', raw=True)\n\n    if others_table:\n        others_table = pd.DataFrame(data=others_table, columns=['Check', 'Reason', 'sort'])\n        others_table.sort_values(by=['sort'], inplace=True)\n        others_table.drop('sort', axis=1, inplace=True)\n        html = f\"\"\"{bold_hr}\n        <h2>Other Checks That Weren't Displayed</h2>\n        {dataframe_to_html(others_table.style.hide_index())}\n        \"\"\"\n        display_html(html, raw=True)\n\n    display_html(f'<br><a href=\"#summary_{unique_id}\" style=\"font-size: 14px\">Go to top</a>', raw=True)\n", "path": "deepchecks/base/display_suite.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\"\"\"Handle display of suite result.\"\"\"\nfrom typing import List, Union\n\n# pylint: disable=protected-access\nimport sys\nimport tqdm\nimport pandas as pd\nfrom IPython.core.display import display_html\nfrom IPython import get_ipython\n\nfrom deepchecks import errors\nfrom deepchecks.utils.ipython import is_widgets_enabled\nfrom deepchecks.utils.strings import get_random_string\nfrom deepchecks.base.check import CheckResult, CheckFailure\nfrom deepchecks.base.display_pandas import dataframe_to_html, display_conditions_table\n\n\n__all__ = ['display_suite_result', 'ProgressBar']\n\n\nclass ProgressBar:\n    \"\"\"Progress bar for display while running suite.\"\"\"\n\n    def __init__(self, name, length):\n        \"\"\"Initialize progress bar.\"\"\"\n        shared_args = {'total': length, 'desc': name, 'unit': ' Check', 'leave': False, 'file': sys.stdout}\n        if is_widgets_enabled():\n            self.pbar = tqdm.tqdm_notebook(**shared_args, colour='#9d60fb')\n        else:\n            # Normal tqdm with colour in notebooks produce bug that the cleanup doesn't remove all characters. so\n            # until bug fixed, doesn't add the colour to regular tqdm\n            self.pbar = tqdm.tqdm(**shared_args, bar_format=f'{{l_bar}}{{bar:{length}}}{{r_bar}}')\n\n    def set_text(self, text):\n        \"\"\"Set current running check.\"\"\"\n        self.pbar.set_postfix(Check=text)\n\n    def close(self):\n        \"\"\"Close the progress bar.\"\"\"\n        self.pbar.close()\n\n    def inc_progress(self):\n        \"\"\"Increase progress bar value by 1.\"\"\"\n        self.pbar.update(1)\n\n\ndef get_display_exists_icon(exists: bool):\n    if exists:\n        return '<div style=\"text-align: center\">Yes</div>'\n    return '<div style=\"text-align: center\">No</div>'\n\n\ndef display_suite_result(suite_name: str, results: List[Union[CheckResult, CheckFailure]]):\n    \"\"\"Display results of suite in IPython.\"\"\"\n    if len(results) == 0:\n        display_html(f\"\"\"<h1>{suite_name}</h1><p>Suite is empty.</p>\"\"\", raw=True)\n        return\n    if 'google.colab' in str(get_ipython()):\n        unique_id = ''\n    else:\n        unique_id = get_random_string()\n    checks_with_conditions = []\n    display_table: List[CheckResult] = []\n    others_table = []\n\n    for result in results:\n        if isinstance(result, CheckResult):\n            if result.have_conditions():\n                checks_with_conditions.append(result)\n            if result.have_display():\n                display_table.append(result)\n            else:\n                others_table.append([result.get_header(), 'Nothing found', 2])\n        elif isinstance(result, CheckFailure):\n            msg = result.exception.__class__.__name__ + ': ' + str(result.exception)\n            name = result.check.name()\n            others_table.append([name, msg, 1])\n        else:\n            # Should never reach here!\n            raise errors.DeepchecksValueError(\n                f\"Expecting list of 'CheckResult'|'CheckFailure', but got {type(result)}.\"\n            )\n\n    display_table = sorted(display_table, key=lambda it: it.priority)\n\n    light_hr = '<hr style=\"background-color: #eee;border: 0 none;color: #eee;height: 1px;\">'\n    bold_hr = '<hr style=\"background-color: black;border: 0 none;color: black;height: 1px;\">'\n\n    icons = \"\"\"\n    <span style=\"color: green;display:inline-block\">\\U00002713</span> /\n    <span style=\"color: red;display:inline-block\">\\U00002716</span> /\n    <span style=\"color: orange;font-weight:bold;display:inline-block\">\\U00000021</span>\n    \"\"\"\n\n    check_names = list(set(it.check.name() for it in results))\n    prologue = (\n        f\"The suite is composed of various checks such as: {', '.join(check_names[:3])}, etc...\"\n        if len(check_names) > 3\n        else f\"The suite is composed of the following checks: {', '.join(check_names)}.\"\n    )\n\n    suite_creation_example_link = 'https://docs.deepchecks.com/en/stable/examples/guides/create_a_custom_suite.html'\n\n    display_html(\n        f\"\"\"\n        <h1 id=\"summary_{unique_id}\">{suite_name}</h1>\n        <p>\n            {prologue}<br>\n            Each check may contain conditions (which will result in pass / fail / warning, represented by {icons})\n            as well as other outputs such as plots or tables.<br>\n            Suites, checks and conditions can all be modified (see the\n            <a href={suite_creation_example_link}>Create a Custom Suite</a> tutorial).\n        </p>\n        {bold_hr}\n        <h2>Conditions Summary</h2>\n        \"\"\",\n        raw=True\n    )\n\n    if checks_with_conditions:\n        display_conditions_table(checks_with_conditions, unique_id)\n    else:\n        display_html('<p>No conditions defined on checks in the suite.</p>', raw=True)\n\n    display_html(f'{bold_hr}<h2>Additional Outputs</h2>', raw=True)\n    if display_table:\n        for i, r in enumerate(display_table):\n            r.show(show_conditions=False, unique_id=unique_id)\n            if i < len(display_table) - 1:\n                display_html(light_hr, raw=True)\n    else:\n        display_html('<p>No outputs to show.</p>', raw=True)\n\n    if others_table:\n        others_table = pd.DataFrame(data=others_table, columns=['Check', 'Reason', 'sort'])\n        others_table.sort_values(by=['sort'], inplace=True)\n        others_table.drop('sort', axis=1, inplace=True)\n        html = f\"\"\"{bold_hr}\n        <h2>Other Checks That Weren't Displayed</h2>\n        {dataframe_to_html(others_table.style.hide_index())}\n        \"\"\"\n        display_html(html, raw=True)\n\n    display_html(f'<br><a href=\"#summary_{unique_id}\" style=\"font-size: 14px\">Go to top</a>', raw=True)\n", "path": "deepchecks/base/display_suite.py"}]}