We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
`\n` and `,` transposed in notebook generation
**Describe the bug**
Following the tutorial, in the Jupyter notebook, the `ignored_columns` list has commas at the start of the line.
Probably just transpose [here](https://github.com/great-expectations/great_expectations/blob/c49e533c012c275a791fce09df207d2bd7126780/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py#L74-L77) to fix:

```diff
-            f'    "{column_name}"\n,' for column_name in self.validator.columns()
+            f'    "{column_name}",\n' for column_name in self.validator.columns()
```

**To Reproduce**
Steps to reproduce the behavior:
1. Follow the tutorial.
2. In the jupyter notebook, notice the formatting for the `ignored_columns`.

**Expected behavior**
Generated code in notebooks should follow normal formatting conventions.

**Environment (please complete the following information):**
 - Operating System: MacOS
 - Great Expectations Version: 
   - superconductive/ge_tutorials @ 5db831a92af51f77dde19723a81a2cea92e2a756
   - great-expectations==0.13.35

**Additional context**
Mentioned this when talking with Ortal on September 24: Might already be filed or handled somewhere else.


Use cleaner solution for non-truncating division in python 2
Prefer `from __future__ import division` to `1.*x/y`

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py`
Content:
```
1 from typing import Any, Dict, List, Union
2 
3 import nbformat
4 
5 from great_expectations import DataContext
6 from great_expectations.core.batch import BatchRequest
7 from great_expectations.render.renderer.suite_edit_notebook_renderer import (
8     SuiteEditNotebookRenderer,
9 )
10 
11 
12 class SuiteProfileNotebookRenderer(SuiteEditNotebookRenderer):
13     def __init__(
14         self,
15         context: DataContext,
16         expectation_suite_name: str,
17         batch_request: Union[str, Dict[str, Union[str, int, Dict[str, Any]]]],
18     ):
19         super().__init__(context=context)
20 
21         if batch_request is None:
22             batch_request = {}
23         self.batch_request = batch_request
24 
25         self.validator = context.get_validator(
26             batch_request=BatchRequest(**batch_request),
27             expectation_suite_name=expectation_suite_name,
28         )
29 
30         self.expectation_suite_name = self.validator.expectation_suite_name
31 
32     # noinspection PyMethodOverriding
33     def add_header(self):
34         self.add_markdown_cell(
35             markdown=f"""# Initialize a new Expectation Suite by profiling a batch of your data.
36 This process helps you avoid writing lots of boilerplate when authoring suites by allowing you to select columns and other factors that you care about and letting a profiler write some candidate expectations for you to adjust.
37 
38 **Expectation Suite Name**: `{self.expectation_suite_name}`
39 """
40         )
41         self.add_code_cell(
42             code=f"""\
43 import datetime
44 
45 import pandas as pd
46 
47 import great_expectations as ge
48 import great_expectations.jupyter_ux
49 from great_expectations.core.batch import BatchRequest
50 from great_expectations.profile.user_configurable_profiler import UserConfigurableProfiler
51 from great_expectations.checkpoint import SimpleCheckpoint
52 from great_expectations.exceptions import DataContextError
53 
54 context = ge.data_context.DataContext()
55 
56 batch_request = {self.batch_request}
57 
58 expectation_suite_name = "{self.expectation_suite_name}"
59 
60 validator = context.get_validator(
61     batch_request=BatchRequest(**batch_request),
62     expectation_suite_name=expectation_suite_name
63 )
64 column_names = [f'"{{column_name}}"' for column_name in validator.columns()]
65 print(f"Columns: {{', '.join(column_names)}}.")
66 validator.head(n_rows=5, fetch_all=False)
67 """,
68             lint=True,
69         )
70 
71     def _add_available_columns_list(self):
72         column_names: List[str]
73         column_name: str
74         column_names = [
75             f'    "{column_name}"\n,' for column_name in self.validator.columns()
76         ]
77         code: str = f'ignored_columns = [\n{"".join(column_names)}]'
78         self.add_code_cell(code=code, lint=True)
79 
80     def add_footer(self):
81         self.add_markdown_cell(
82             markdown="""# Save & review your new Expectation Suite
83 
84 Let's save the draft expectation suite as a JSON file in the
85 `great_expectations/expectations` directory of your project and rebuild the Data
86  Docs site to make it easy to review your new suite."""
87         )
88         code_cell: str = """\
89 print(validator.get_expectation_suite(discard_failed_expectations=False))
90 validator.save_expectation_suite(discard_failed_expectations=False)
91 
92 checkpoint_config = {
93     "class_name": "SimpleCheckpoint",
94     "validations": [
95         {
96             "batch_request": batch_request,
97             "expectation_suite_name": expectation_suite_name
98         }
99     ]
100 }
101 checkpoint = SimpleCheckpoint(
102     f"_tmp_checkpoint_{expectation_suite_name}",
103     context,
104     **checkpoint_config
105 )
106 checkpoint_result = checkpoint.run()
107 
108 context.build_data_docs()
109 
110 validation_result_identifier = checkpoint_result.list_validation_result_identifiers()[0]
111 context.open_data_docs(resource_identifier=validation_result_identifier)
112 """
113         self.add_code_cell(code=code_cell, lint=True)
114         self.add_markdown_cell(
115             markdown=f"""## Next steps
116 After you review this initial Expectation Suite in Data Docs you
117 should edit this suite to make finer grained adjustments to the expectations.
118 This can be done by running `great_expectations suite edit {self.expectation_suite_name}`."""
119         )
120 
121     # noinspection PyMethodOverriding
122     def render(self) -> nbformat.NotebookNode:
123         self._notebook = nbformat.v4.new_notebook()
124         self.add_header()
125         self.add_markdown_cell(
126             markdown="""# Select columns
127 
128 Select the columns on which you would like to set expectations and those which you would like to ignore.
129 
130 Great Expectations will choose which expectations might make sense for a column based on the **data type** and **cardinality** of the data in each selected column.
131 
132 Simply comment out columns that are important and should be included. You can select multiple lines and
133 use a jupyter keyboard shortcut to toggle each line: **Linux/Windows**:
134 `Ctrl-/`, **macOS**: `Cmd-/`"""
135         )
136         self._add_available_columns_list()
137         self.add_markdown_cell(
138             markdown="""# Run the data profiler
139 
140 The suites generated here are **not meant to be production suites** -- they are **a starting point to build upon**.
141 
142 **To get to a production-grade suite, you will definitely want to [edit this
143 suite](https://docs.greatexpectations.io/en/latest/guides/how_to_guides/creating_and_editing_expectations/how_to_edit_an_expectation_suite_using_a_disposable_notebook.html?utm_source=notebook&utm_medium=profile_based_expectations)
144 after this initial step gets you started on the path towards what you want.**
145 
146 This is highly configurable depending on your goals.
147 You can ignore columns or exclude certain expectations, specify a threshold for creating value set expectations, or even specify semantic types for a given column.
148 You can find more information about [how to configure this profiler, including a list of the expectations that it uses, here.](https://docs.greatexpectations.io/en/latest/guides/how_to_guides/creating_and_editing_expectations/how_to_create_an_expectation_suite_with_the_user_configurable_profiler.html)
149 
150 """
151         )
152         self._add_profiler_cell()
153         self.add_footer()
154         return self._notebook
155 
156     # noinspection PyMethodOverriding
157     def render_to_disk(self, notebook_file_path: str):
158         """
159         Render a notebook to disk from an expectation suite.
160         """
161         self.render()
162         self.write_notebook_to_disk(
163             notebook=self._notebook, notebook_file_path=notebook_file_path
164         )
165 
166     def _add_profiler_cell(self):
167         self.add_code_cell(
168             code=f"""\
169 profiler = UserConfigurableProfiler(
170     profile_dataset=validator,
171     excluded_expectations=None,
172     ignored_columns=ignored_columns,
173     not_null_only=False,
174     primary_or_compound_key=False,
175     semantic_types_dict=None,
176     table_expectations_only=False,
177     value_set_threshold="MANY",
178 )
179 suite = profiler.build_suite()""",
180             lint=True,
181         )
182
```
--- 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()

```

diff --git a/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py b/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py
--- a/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py
+++ b/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py
@@ -72,7 +72,7 @@
         column_names: List[str]
         column_name: str
         column_names = [
-            f'    "{column_name}"\n,' for column_name in self.validator.columns()
+            f'    "{column_name}",\n' for column_name in self.validator.columns()
         ]
         code: str = f'ignored_columns = [\n{"".join(column_names)}]'
         self.add_code_cell(code=code, lint=True)

{"golden_diff": "diff --git a/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py b/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py\n--- a/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py\n+++ b/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py\n@@ -72,7 +72,7 @@\n         column_names: List[str]\n         column_name: str\n         column_names = [\n-            f'    \"{column_name}\"\\n,' for column_name in self.validator.columns()\n+            f'    \"{column_name}\",\\n' for column_name in self.validator.columns()\n         ]\n         code: str = f'ignored_columns = [\\n{\"\".join(column_names)}]'\n         self.add_code_cell(code=code, lint=True)\n", "issue": "`\\n` and `,` transposed in notebook generation\n**Describe the bug**\r\nFollowing the tutorial, in the Jupyter notebook, the `ignored_columns` list has commas at the start of the line.\r\nProbably just transpose [here](https://github.com/great-expectations/great_expectations/blob/c49e533c012c275a791fce09df207d2bd7126780/great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py#L74-L77) to fix:\r\n\r\n```diff\r\n-            f'    \"{column_name}\"\\n,' for column_name in self.validator.columns()\r\n+            f'    \"{column_name}\",\\n' for column_name in self.validator.columns()\r\n```\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. Follow the tutorial.\r\n2. In the jupyter notebook, notice the formatting for the `ignored_columns`.\r\n\r\n**Expected behavior**\r\nGenerated code in notebooks should follow normal formatting conventions.\r\n\r\n**Environment (please complete the following information):**\r\n - Operating System: MacOS\r\n - Great Expectations Version: \r\n   - superconductive/ge_tutorials @ 5db831a92af51f77dde19723a81a2cea92e2a756\r\n   - great-expectations==0.13.35\r\n\r\n**Additional context**\r\nMentioned this when talking with Ortal on September 24: Might already be filed or handled somewhere else.\r\n\r\n\nUse cleaner solution for non-truncating division in python 2\nPrefer `from __future__ import division` to `1.*x/y`\n", "before_files": [{"content": "from typing import Any, Dict, List, Union\n\nimport nbformat\n\nfrom great_expectations import DataContext\nfrom great_expectations.core.batch import BatchRequest\nfrom great_expectations.render.renderer.suite_edit_notebook_renderer import (\n    SuiteEditNotebookRenderer,\n)\n\n\nclass SuiteProfileNotebookRenderer(SuiteEditNotebookRenderer):\n    def __init__(\n        self,\n        context: DataContext,\n        expectation_suite_name: str,\n        batch_request: Union[str, Dict[str, Union[str, int, Dict[str, Any]]]],\n    ):\n        super().__init__(context=context)\n\n        if batch_request is None:\n            batch_request = {}\n        self.batch_request = batch_request\n\n        self.validator = context.get_validator(\n            batch_request=BatchRequest(**batch_request),\n            expectation_suite_name=expectation_suite_name,\n        )\n\n        self.expectation_suite_name = self.validator.expectation_suite_name\n\n    # noinspection PyMethodOverriding\n    def add_header(self):\n        self.add_markdown_cell(\n            markdown=f\"\"\"# Initialize a new Expectation Suite by profiling a batch of your data.\nThis process helps you avoid writing lots of boilerplate when authoring suites by allowing you to select columns and other factors that you care about and letting a profiler write some candidate expectations for you to adjust.\n\n**Expectation Suite Name**: `{self.expectation_suite_name}`\n\"\"\"\n        )\n        self.add_code_cell(\n            code=f\"\"\"\\\nimport datetime\n\nimport pandas as pd\n\nimport great_expectations as ge\nimport great_expectations.jupyter_ux\nfrom great_expectations.core.batch import BatchRequest\nfrom great_expectations.profile.user_configurable_profiler import UserConfigurableProfiler\nfrom great_expectations.checkpoint import SimpleCheckpoint\nfrom great_expectations.exceptions import DataContextError\n\ncontext = ge.data_context.DataContext()\n\nbatch_request = {self.batch_request}\n\nexpectation_suite_name = \"{self.expectation_suite_name}\"\n\nvalidator = context.get_validator(\n    batch_request=BatchRequest(**batch_request),\n    expectation_suite_name=expectation_suite_name\n)\ncolumn_names = [f'\"{{column_name}}\"' for column_name in validator.columns()]\nprint(f\"Columns: {{', '.join(column_names)}}.\")\nvalidator.head(n_rows=5, fetch_all=False)\n\"\"\",\n            lint=True,\n        )\n\n    def _add_available_columns_list(self):\n        column_names: List[str]\n        column_name: str\n        column_names = [\n            f'    \"{column_name}\"\\n,' for column_name in self.validator.columns()\n        ]\n        code: str = f'ignored_columns = [\\n{\"\".join(column_names)}]'\n        self.add_code_cell(code=code, lint=True)\n\n    def add_footer(self):\n        self.add_markdown_cell(\n            markdown=\"\"\"# Save & review your new Expectation Suite\n\nLet's save the draft expectation suite as a JSON file in the\n`great_expectations/expectations` directory of your project and rebuild the Data\n Docs site to make it easy to review your new suite.\"\"\"\n        )\n        code_cell: str = \"\"\"\\\nprint(validator.get_expectation_suite(discard_failed_expectations=False))\nvalidator.save_expectation_suite(discard_failed_expectations=False)\n\ncheckpoint_config = {\n    \"class_name\": \"SimpleCheckpoint\",\n    \"validations\": [\n        {\n            \"batch_request\": batch_request,\n            \"expectation_suite_name\": expectation_suite_name\n        }\n    ]\n}\ncheckpoint = SimpleCheckpoint(\n    f\"_tmp_checkpoint_{expectation_suite_name}\",\n    context,\n    **checkpoint_config\n)\ncheckpoint_result = checkpoint.run()\n\ncontext.build_data_docs()\n\nvalidation_result_identifier = checkpoint_result.list_validation_result_identifiers()[0]\ncontext.open_data_docs(resource_identifier=validation_result_identifier)\n\"\"\"\n        self.add_code_cell(code=code_cell, lint=True)\n        self.add_markdown_cell(\n            markdown=f\"\"\"## Next steps\nAfter you review this initial Expectation Suite in Data Docs you\nshould edit this suite to make finer grained adjustments to the expectations.\nThis can be done by running `great_expectations suite edit {self.expectation_suite_name}`.\"\"\"\n        )\n\n    # noinspection PyMethodOverriding\n    def render(self) -> nbformat.NotebookNode:\n        self._notebook = nbformat.v4.new_notebook()\n        self.add_header()\n        self.add_markdown_cell(\n            markdown=\"\"\"# Select columns\n\nSelect the columns on which you would like to set expectations and those which you would like to ignore.\n\nGreat Expectations will choose which expectations might make sense for a column based on the **data type** and **cardinality** of the data in each selected column.\n\nSimply comment out columns that are important and should be included. You can select multiple lines and\nuse a jupyter keyboard shortcut to toggle each line: **Linux/Windows**:\n`Ctrl-/`, **macOS**: `Cmd-/`\"\"\"\n        )\n        self._add_available_columns_list()\n        self.add_markdown_cell(\n            markdown=\"\"\"# Run the data profiler\n\nThe suites generated here are **not meant to be production suites** -- they are **a starting point to build upon**.\n\n**To get to a production-grade suite, you will definitely want to [edit this\nsuite](https://docs.greatexpectations.io/en/latest/guides/how_to_guides/creating_and_editing_expectations/how_to_edit_an_expectation_suite_using_a_disposable_notebook.html?utm_source=notebook&utm_medium=profile_based_expectations)\nafter this initial step gets you started on the path towards what you want.**\n\nThis is highly configurable depending on your goals.\nYou can ignore columns or exclude certain expectations, specify a threshold for creating value set expectations, or even specify semantic types for a given column.\nYou can find more information about [how to configure this profiler, including a list of the expectations that it uses, here.](https://docs.greatexpectations.io/en/latest/guides/how_to_guides/creating_and_editing_expectations/how_to_create_an_expectation_suite_with_the_user_configurable_profiler.html)\n\n\"\"\"\n        )\n        self._add_profiler_cell()\n        self.add_footer()\n        return self._notebook\n\n    # noinspection PyMethodOverriding\n    def render_to_disk(self, notebook_file_path: str):\n        \"\"\"\n        Render a notebook to disk from an expectation suite.\n        \"\"\"\n        self.render()\n        self.write_notebook_to_disk(\n            notebook=self._notebook, notebook_file_path=notebook_file_path\n        )\n\n    def _add_profiler_cell(self):\n        self.add_code_cell(\n            code=f\"\"\"\\\nprofiler = UserConfigurableProfiler(\n    profile_dataset=validator,\n    excluded_expectations=None,\n    ignored_columns=ignored_columns,\n    not_null_only=False,\n    primary_or_compound_key=False,\n    semantic_types_dict=None,\n    table_expectations_only=False,\n    value_set_threshold=\"MANY\",\n)\nsuite = profiler.build_suite()\"\"\",\n            lint=True,\n        )\n", "path": "great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py"}], "after_files": [{"content": "from typing import Any, Dict, List, Union\n\nimport nbformat\n\nfrom great_expectations import DataContext\nfrom great_expectations.core.batch import BatchRequest\nfrom great_expectations.render.renderer.suite_edit_notebook_renderer import (\n    SuiteEditNotebookRenderer,\n)\n\n\nclass SuiteProfileNotebookRenderer(SuiteEditNotebookRenderer):\n    def __init__(\n        self,\n        context: DataContext,\n        expectation_suite_name: str,\n        batch_request: Union[str, Dict[str, Union[str, int, Dict[str, Any]]]],\n    ):\n        super().__init__(context=context)\n\n        if batch_request is None:\n            batch_request = {}\n        self.batch_request = batch_request\n\n        self.validator = context.get_validator(\n            batch_request=BatchRequest(**batch_request),\n            expectation_suite_name=expectation_suite_name,\n        )\n\n        self.expectation_suite_name = self.validator.expectation_suite_name\n\n    # noinspection PyMethodOverriding\n    def add_header(self):\n        self.add_markdown_cell(\n            markdown=f\"\"\"# Initialize a new Expectation Suite by profiling a batch of your data.\nThis process helps you avoid writing lots of boilerplate when authoring suites by allowing you to select columns and other factors that you care about and letting a profiler write some candidate expectations for you to adjust.\n\n**Expectation Suite Name**: `{self.expectation_suite_name}`\n\"\"\"\n        )\n        self.add_code_cell(\n            code=f\"\"\"\\\nimport datetime\n\nimport pandas as pd\n\nimport great_expectations as ge\nimport great_expectations.jupyter_ux\nfrom great_expectations.core.batch import BatchRequest\nfrom great_expectations.profile.user_configurable_profiler import UserConfigurableProfiler\nfrom great_expectations.checkpoint import SimpleCheckpoint\nfrom great_expectations.exceptions import DataContextError\n\ncontext = ge.data_context.DataContext()\n\nbatch_request = {self.batch_request}\n\nexpectation_suite_name = \"{self.expectation_suite_name}\"\n\nvalidator = context.get_validator(\n    batch_request=BatchRequest(**batch_request),\n    expectation_suite_name=expectation_suite_name\n)\ncolumn_names = [f'\"{{column_name}}\"' for column_name in validator.columns()]\nprint(f\"Columns: {{', '.join(column_names)}}.\")\nvalidator.head(n_rows=5, fetch_all=False)\n\"\"\",\n            lint=True,\n        )\n\n    def _add_available_columns_list(self):\n        column_names: List[str]\n        column_name: str\n        column_names = [\n            f'    \"{column_name}\",\\n' for column_name in self.validator.columns()\n        ]\n        code: str = f'ignored_columns = [\\n{\"\".join(column_names)}]'\n        self.add_code_cell(code=code, lint=True)\n\n    def add_footer(self):\n        self.add_markdown_cell(\n            markdown=\"\"\"# Save & review your new Expectation Suite\n\nLet's save the draft expectation suite as a JSON file in the\n`great_expectations/expectations` directory of your project and rebuild the Data\n Docs site to make it easy to review your new suite.\"\"\"\n        )\n        code_cell: str = \"\"\"\\\nprint(validator.get_expectation_suite(discard_failed_expectations=False))\nvalidator.save_expectation_suite(discard_failed_expectations=False)\n\ncheckpoint_config = {\n    \"class_name\": \"SimpleCheckpoint\",\n    \"validations\": [\n        {\n            \"batch_request\": batch_request,\n            \"expectation_suite_name\": expectation_suite_name\n        }\n    ]\n}\ncheckpoint = SimpleCheckpoint(\n    f\"_tmp_checkpoint_{expectation_suite_name}\",\n    context,\n    **checkpoint_config\n)\ncheckpoint_result = checkpoint.run()\n\ncontext.build_data_docs()\n\nvalidation_result_identifier = checkpoint_result.list_validation_result_identifiers()[0]\ncontext.open_data_docs(resource_identifier=validation_result_identifier)\n\"\"\"\n        self.add_code_cell(code=code_cell, lint=True)\n        self.add_markdown_cell(\n            markdown=f\"\"\"## Next steps\nAfter you review this initial Expectation Suite in Data Docs you\nshould edit this suite to make finer grained adjustments to the expectations.\nThis can be done by running `great_expectations suite edit {self.expectation_suite_name}`.\"\"\"\n        )\n\n    # noinspection PyMethodOverriding\n    def render(self) -> nbformat.NotebookNode:\n        self._notebook = nbformat.v4.new_notebook()\n        self.add_header()\n        self.add_markdown_cell(\n            markdown=\"\"\"# Select columns\n\nSelect the columns on which you would like to set expectations and those which you would like to ignore.\n\nGreat Expectations will choose which expectations might make sense for a column based on the **data type** and **cardinality** of the data in each selected column.\n\nSimply comment out columns that are important and should be included. You can select multiple lines and\nuse a jupyter keyboard shortcut to toggle each line: **Linux/Windows**:\n`Ctrl-/`, **macOS**: `Cmd-/`\"\"\"\n        )\n        self._add_available_columns_list()\n        self.add_markdown_cell(\n            markdown=\"\"\"# Run the data profiler\n\nThe suites generated here are **not meant to be production suites** -- they are **a starting point to build upon**.\n\n**To get to a production-grade suite, you will definitely want to [edit this\nsuite](https://docs.greatexpectations.io/en/latest/guides/how_to_guides/creating_and_editing_expectations/how_to_edit_an_expectation_suite_using_a_disposable_notebook.html?utm_source=notebook&utm_medium=profile_based_expectations)\nafter this initial step gets you started on the path towards what you want.**\n\nThis is highly configurable depending on your goals.\nYou can ignore columns or exclude certain expectations, specify a threshold for creating value set expectations, or even specify semantic types for a given column.\nYou can find more information about [how to configure this profiler, including a list of the expectations that it uses, here.](https://docs.greatexpectations.io/en/latest/guides/how_to_guides/creating_and_editing_expectations/how_to_create_an_expectation_suite_with_the_user_configurable_profiler.html)\n\n\"\"\"\n        )\n        self._add_profiler_cell()\n        self.add_footer()\n        return self._notebook\n\n    # noinspection PyMethodOverriding\n    def render_to_disk(self, notebook_file_path: str):\n        \"\"\"\n        Render a notebook to disk from an expectation suite.\n        \"\"\"\n        self.render()\n        self.write_notebook_to_disk(\n            notebook=self._notebook, notebook_file_path=notebook_file_path\n        )\n\n    def _add_profiler_cell(self):\n        self.add_code_cell(\n            code=f\"\"\"\\\nprofiler = UserConfigurableProfiler(\n    profile_dataset=validator,\n    excluded_expectations=None,\n    ignored_columns=ignored_columns,\n    not_null_only=False,\n    primary_or_compound_key=False,\n    semantic_types_dict=None,\n    table_expectations_only=False,\n    value_set_threshold=\"MANY\",\n)\nsuite = profiler.build_suite()\"\"\",\n            lint=True,\n        )\n", "path": "great_expectations/render/renderer/v3/suite_profile_notebook_renderer.py"}]}