Repository: great-expectations/great_expectations

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


Discussion:
Done inline during improve_partitions push.

Resolving patch:
diff --git a/great_expectations/cli/suite.py b/great_expectations/cli/suite.py
--- a/great_expectations/cli/suite.py
+++ b/great_expectations/cli/suite.py
@@ -38,6 +38,13 @@
     SQLAlchemyError = ge_exceptions.ProfilerError
 
 
+MESSAGE_USER_CONFIGURABLE_PROFILER: str = "Since you did not supply a profiler name, defaulting to the UserConfigurableProfiler"
+MESSAGE_ONBOARDING_DATA_ASSISTANT: str = "Since you did not supply a profiler name, defaulting to the OnboardingDataAssistant"
+MESSAGE_RULE_BASED_PROFILER: str = (
+    "Since you supplied a profiler name, utilizing the RuleBasedProfiler"
+)
+
+
 @click.group()
 @click.pass_context
 def suite(ctx: click.Context) -> None:
@@ -157,9 +164,10 @@ def _determine_profile(profiler_name: Optional[str]) -> bool:
     profile: bool = profiler_name is not None
     if profile:
         if profiler_name:
-            msg = "Since you supplied a profiler name, utilizing the RuleBasedProfiler"
+            msg = MESSAGE_RULE_BASED_PROFILER
         else:
-            msg = "Since you did not supply a profiler name, defaulting to the OnboardingDataAssistant"
+            # TODO: <Alex>Update when RBP replaces UCP permanently.</Alex>
+            msg = MESSAGE_USER_CONFIGURABLE_PROFILER
         cli_message(string=f"<yellow>{msg}</yellow>")
 
     return profile
diff --git a/great_expectations/render/renderer/suite_scaffold_notebook_renderer.py b/great_expectations/render/renderer/suite_scaffold_notebook_renderer.py
--- a/great_expectations/render/renderer/suite_scaffold_notebook_renderer.py
+++ b/great_expectations/render/renderer/suite_scaffold_notebook_renderer.py
@@ -169,7 +169,7 @@ def _add_scaffold_cell(self) -> None:
     ignored_columns=ignored_columns,
     excluded_expectations=None,
     not_null_only=False,
-    primary_or_compound_key=False,
+    primary_or_compound_key=None,
     semantic_types_dict=None,
     table_expectations_only=False,
     value_set_threshold="MANY",
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
@@ -48,8 +48,12 @@ def render(self, **kwargs) -> nbformat.NotebookNode:
 
         self.add_header()
 
+        # TODO: <Alex>Update when RBP replaces UCP permanently.</Alex>
         if self._profiler_name:
-            self._add_rule_based_profiler_cells()
+            if self._profiler_name == "onboarding-data-assistant":
+                self._add_onboarding_data_assistant_cells()
+            else:
+                self._add_rule_based_profiler_cells()
         else:
             self._add_user_configurable_profiler_cells()
 
@@ -127,6 +131,112 @@ def _add_user_configurable_profiler_cells(self) -> None:
 
 import pandas as pd
 
+import great_expectations as ge
+import great_expectations.jupyter_ux
+from great_expectations.profile.user_configurable_profiler import (
+    UserConfigurableProfiler,
+)
+from great_expectations.core.batch import BatchRequest
+from great_expectations.checkpoint import SimpleCheckpoint
+from great_expectations.exceptions import DataContextError
+
+context = ge.data_context.DataContext()
+
+batch_request = {self._batch_request}
+
+expectation_suite_name = "{self._expectation_suite_name}"
+
+validator = context.get_validator(
+    batch_request=BatchRequest(**batch_request),
+    expectation_suite_name=expectation_suite_name
+)
+column_names = [f'"{{column_name}}"' for column_name in validator.columns()]
+print(f"Columns: {{', '.join(column_names)}}.")
+validator.head(n_rows=5, fetch_all=False)
+""",
+            lint=True,
+        )
+        self.add_markdown_cell(
+            markdown="""\
+# Select columns
+
+Select the columns on which you would like to set expectations and those which you would like to ignore.
+
+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.
+
+Simply comment out columns that are important and should be included. You can select multiple lines and use a Jupyter
+keyboard shortcut to toggle each line: **Linux/Windows**:
+`Ctrl-/`, **macOS**: `Cmd-/`
+        """
+        )
+        self._add_available_columns_list()
+        self._add_profiler_instructions()
+        self.add_code_cell(
+            code="""\
+profiler = UserConfigurableProfiler(
+    profile_dataset=validator,
+    excluded_expectations=None,
+    ignored_columns=exclude_column_names,
+    not_null_only=False,
+    primary_or_compound_key=None,
+    semantic_types_dict=None,
+    table_expectations_only=False,
+    value_set_threshold="MANY",
+)
+suite = profiler.build_suite()
+validator.expectation_suite = suite
+""",
+            lint=True,
+        )
+
+    def _add_rule_based_profiler_cells(self) -> None:
+        self.add_code_cell(
+            code=f"""\
+import datetime
+
+import pandas as pd
+
+import great_expectations as ge
+import great_expectations.jupyter_ux
+from great_expectations.core.batch import BatchRequest
+from great_expectations.checkpoint import SimpleCheckpoint
+from great_expectations.exceptions import DataContextError
+
+context = ge.data_context.DataContext()
+
+batch_request = {self._batch_request}
+
+expectation_suite_name = "{self._expectation_suite_name}"
+
+validator = context.get_validator(
+    batch_request=BatchRequest(**batch_request),
+    expectation_suite_name=expectation_suite_name
+)
+validator.head(n_rows=5, fetch_all=False)
+""",
+            lint=True,
+        )
+        self._add_profiler_instructions()
+        self.add_code_cell(
+            code=f"""\
+result = context.run_profiler_with_dynamic_arguments(
+    name="{self._profiler_name}",
+    batch_request=batch_request,
+)
+validator.expectation_suite = result.get_expectation_suite(
+    expectation_suite_name=expectation_suite_name
+)
+""",
+            lint=True,
+        )
+
+    def _add_onboarding_data_assistant_cells(self) -> None:
+        self.add_code_cell(
+            code=f"""\
+import datetime
+
+import pandas as pd
+
 import great_expectations as ge
 import great_expectations.jupyter_ux
 from great_expectations.core.batch import BatchRequest
@@ -168,7 +278,7 @@ def _add_user_configurable_profiler_cells(self) -> None:
 """
         )
         self._add_available_columns_list()
-        self._add_profiler_instructions()
+        self._add_onboarding_data_assistant_instructions()
         self.add_code_cell(
             code="""\
 data_assistant_result: DataAssistantResult = context.assistants.onboarding.run(
@@ -221,48 +331,24 @@ def _add_user_configurable_profiler_cells(self) -> None:
             lint=True,
         )
 
-    def _add_rule_based_profiler_cells(self) -> None:
-        self.add_code_cell(
-            code=f"""\
-import datetime
-
-import pandas as pd
-
-import great_expectations as ge
-import great_expectations.jupyter_ux
-from great_expectations.core.batch import BatchRequest
-from great_expectations.checkpoint import SimpleCheckpoint
-from great_expectations.exceptions import DataContextError
+    def _add_profiler_instructions(self) -> None:
+        self.add_markdown_cell(
+            markdown="""# Run the UserConfigurableProfiler
 
-context = ge.data_context.DataContext()
+The suites generated here are **not meant to be production suites** -- they are **a starting point to build upon**.
 
-batch_request = {self._batch_request}
+**To get to a production-grade suite, you will definitely want to [edit this
+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)
+after this initial step gets you started on the path towards what you want.**
 
-expectation_suite_name = "{self._expectation_suite_name}"
+This is highly configurable depending on your goals.
+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.
+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)
 
-validator = context.get_validator(
-    batch_request=BatchRequest(**batch_request),
-    expectation_suite_name=expectation_suite_name
-)
-validator.head(n_rows=5, fetch_all=False)
-""",
-            lint=True,
-        )
-        self._add_profiler_instructions()
-        self.add_code_cell(
-            code=f"""\
-result = context.run_profiler_with_dynamic_arguments(
-    name="{self._profiler_name}",
-    batch_request=batch_request,
-)
-validator.expectation_suite = result.get_expectation_suite(
-    expectation_suite_name=expectation_suite_name
-)
-""",
-            lint=True,
+"""
         )
 
-    def _add_profiler_instructions(self) -> None:
+    def _add_onboarding_data_assistant_instructions(self) -> None:
         self.add_markdown_cell(
             markdown="""# Run the OnboardingDataAssistant
 
@@ -276,7 +362,7 @@ def _add_profiler_instructions(self) -> None:
 You can ignore columns, specify cardinality of categorical columns, configure semantic types for columns, even adjust thresholds and/or different estimator parameters, etc.
 You can find more information about OnboardingDataAssistant and other DataAssistant components (please see documentation for the complete set of DataAssistant controls) [how to choose and control the behavior of the DataAssistant tailored to your goals](https://docs.greatexpectations.io/docs/guides/expectations/data_assistants/how_to_create_an_expectation_suite_with_the_onboarding_data_assistant).
 
-"""
+    """
         )
 
     def _add_available_columns_list(self) -> None:


Test patch:
diff --git a/tests/cli/test_suite.py b/tests/cli/test_suite.py
--- a/tests/cli/test_suite.py
+++ b/tests/cli/test_suite.py
@@ -24,12 +24,76 @@
 )
 from great_expectations.util import deep_filter_properties_iterable, lint_code
 from tests.cli.utils import assert_no_logging_messages_or_tracebacks
+from tests.render.renderer.v3.test_suite_profile_notebook_renderer import (
+    EXPECTED_EXPECTATION_CONFIGURATIONS_USER_CONFIGURABLE_PROFILER,
+)
 from tests.render.test_util import (
     find_code_in_notebook,
     load_notebook_from_path,
     run_notebook,
 )
 
+PROFILER_CODE_CELL_USER_CONFIGURABLE_PROFILER: str = """\
+profiler = UserConfigurableProfiler(
+    profile_dataset=validator,
+    excluded_expectations=None,
+    ignored_columns=exclude_column_names,
+    not_null_only=False,
+    primary_or_compound_key=None,
+    semantic_types_dict=None,
+    table_expectations_only=False,
+    value_set_threshold="MANY",
+)
+suite = profiler.build_suite()
+validator.expectation_suite = suite
+"""
+PROFILER_CODE_CELL_ONBOARDING_DATA_ASSISTANT: str = """\
+data_assistant_result: DataAssistantResult = context.assistants.onboarding.run(
+    batch_request=batch_request,
+    # include_column_names=include_column_names,
+    exclude_column_names=exclude_column_names,
+    # include_column_name_suffixes=include_column_name_suffixes,
+    # exclude_column_name_suffixes=exclude_column_name_suffixes,
+    # semantic_type_filter_module_name=semantic_type_filter_module_name,
+    # semantic_type_filter_class_name=semantic_type_filter_class_name,
+    # include_semantic_types=include_semantic_types,
+    # exclude_semantic_types=exclude_semantic_types,
+    # allowed_semantic_types_passthrough=allowed_semantic_types_passthrough,
+    cardinality_limit_mode="rel_100",  # case-insenstive (see documentaiton for other options)
+    # max_unique_values=max_unique_values,
+    # max_proportion_unique=max_proportion_unique,
+    # column_value_uniqueness_rule={
+    #     "success_ratio": 0.8,
+    # },
+    # column_value_nullity_rule={
+    # },
+    # column_value_nonnullity_rule={
+    # },
+    # numeric_columns_rule={
+    #     "round_decimals": 12,
+    #     "false_positive_rate": 0.1,
+    #     "random_seed": 43792,
+    # },
+    # datetime_columns_rule={
+    #     "truncate_values": {
+    #         "lower_bound": 0,
+    #         "upper_bound": 4481049600,  # Friday, January 1, 2112 0:00:00
+    #     },
+    #     "round_decimals": 0,
+    # },
+    # text_columns_rule={
+    #     "strict_min": True,
+    #     "strict_max": True,
+    #     "success_ratio": 0.8,
+    # },
+    # categorical_columns_rule={
+    #     "false_positive_rate": 0.1,
+    #     "round_decimals": 4,
+    # },
+)
+validator.expectation_suite = data_assistant_result.get_expectation_suite(expectation_suite_name=expectation_suite_name)
+"""
+
 
 def test_suite_help_output(caplog):
     runner: CliRunner = CliRunner(mix_stderr=False)
@@ -3113,53 +3177,9 @@ def test_suite_new_profile_runs_notebook_no_jupyter(
     )
     assert len(cells_of_interest_dict) == 1
 
-    profiler_code_cell: str = """\
-data_assistant_result: DataAssistantResult = context.assistants.onboarding.run(
-    batch_request=batch_request,
-    # include_column_names=include_column_names,
-    exclude_column_names=exclude_column_names,
-    # include_column_name_suffixes=include_column_name_suffixes,
-    # exclude_column_name_suffixes=exclude_column_name_suffixes,
-    # semantic_type_filter_module_name=semantic_type_filter_module_name,
-    # semantic_type_filter_class_name=semantic_type_filter_class_name,
-    # include_semantic_types=include_semantic_types,
-    # exclude_semantic_types=exclude_semantic_types,
-    # allowed_semantic_types_passthrough=allowed_semantic_types_passthrough,
-    cardinality_limit_mode="rel_100",  # case-insenstive (see documentaiton for other options)
-    # max_unique_values=max_unique_values,
-    # max_proportion_unique=max_proportion_unique,
-    # column_value_uniqueness_rule={
-    #     "success_ratio": 0.8,
-    # },
-    # column_value_nullity_rule={
-    # },
-    # column_value_nonnullity_rule={
-    # },
-    # numeric_columns_rule={
-    #     "round_decimals": 12,
-    #     "false_positive_rate": 0.1,
-    #     "random_seed": 43792,
-    # },
-    # datetime_columns_rule={
-    #     "truncate_values": {
-    #         "lower_bound": 0,
-    #         "upper_bound": 4481049600,  # Friday, January 1, 2112 0:00:00
-    #     },
-    #     "round_decimals": 0,
-    # },
-    # text_columns_rule={
-    #     "strict_min": True,
-    #     "strict_max": True,
-    #     "success_ratio": 0.8,
-    # },
-    # categorical_columns_rule={
-    #     "false_positive_rate": 0.1,
-    #     "round_decimals": 4,
-    # },
-)
-validator.expectation_suite = data_assistant_result.get_expectation_suite(expectation_suite_name=expectation_suite_name)
-"""
-    profiler_code_cell = lint_code(code=profiler_code_cell).rstrip("\n")
+    profiler_code_cell: str = lint_code(
+        code=PROFILER_CODE_CELL_USER_CONFIGURABLE_PROFILER
+    ).rstrip("\n")
 
     cells_of_interest_dict: Dict[int, dict] = find_code_in_notebook(
         nb=load_notebook_from_path(notebook_path=expected_notebook_path),
@@ -3177,43 +3197,10 @@ def test_suite_new_profile_runs_notebook_no_jupyter(
     context = DataContext(context_root_dir=project_dir)
     assert expectation_suite_name in context.list_expectation_suite_names()
 
-    expected_expectation_configurations: List[ExpectationConfiguration] = [
-        ExpectationConfiguration(
-            **{
-                "kwargs": {"max_value": 1313, "min_value": 1313},
-                "expectation_type": "expect_table_row_count_to_be_between",
-                "meta": {
-                    "profiler_details": {
-                        "metric_configuration": {
-                            "domain_kwargs": {},
-                            "metric_dependencies": None,
-                            "metric_name": "table.row_count",
-                            "metric_value_kwargs": None,
-                        },
-                        "num_batches": 1,
-                    }
-                },
-            }
-        ),
-        ExpectationConfiguration(
-            **{
-                "kwargs": {
-                    "column_set": [
-                        "Age",
-                        "Name",
-                        "PClass",
-                        "Sex",
-                        "SexCode",
-                        "Survived",
-                        "Unnamed: 0",
-                    ],
-                    "exact_match": None,
-                },
-                "expectation_type": "expect_table_columns_to_match_set",
-                "meta": {"profiler_details": {"success_ratio": 1.0}},
-            }
-        ),
-    ]
+    # TODO: <Alex>Update when RBP replaces UCP permanently.</Alex>
+    expected_expectation_configurations: List[
+        ExpectationConfiguration
+    ] = EXPECTED_EXPECTATION_CONFIGURATIONS_USER_CONFIGURABLE_PROFILER
 
     suite: ExpectationSuite = context.get_expectation_suite(
         expectation_suite_name=expectation_suite_name
@@ -3415,55 +3402,9 @@ def test_suite_new_profile_runs_notebook_opens_jupyter(
     )
     assert len(cells_of_interest_dict) == 1
 
-    profiler_code_cell: str = """\
-data_assistant_result: DataAssistantResult = context.assistants.onboarding.run(
-    batch_request=batch_request,
-    # include_column_names=include_column_names,
-    exclude_column_names=exclude_column_names,
-    # include_column_name_suffixes=include_column_name_suffixes,
-    # exclude_column_name_suffixes=exclude_column_name_suffixes,
-    # semantic_type_filter_module_name=semantic_type_filter_module_name,
-    # semantic_type_filter_class_name=semantic_type_filter_class_name,
-    # include_semantic_types=include_semantic_types,
-    # exclude_semantic_types=exclude_semantic_types,
-    # allowed_semantic_types_passthrough=allowed_semantic_types_passthrough,
-    cardinality_limit_mode="rel_100",  # case-insenstive (see documentaiton for other options)
-    # max_unique_values=max_unique_values,
-    # max_proportion_unique=max_proportion_unique,
-    # column_value_uniqueness_rule={
-    #     "success_ratio": 0.8,
-    # },
-    # column_value_nullity_rule={
-    # },
-    # column_value_nonnullity_rule={
-    # },
-    # numeric_columns_rule={
-    #     "round_decimals": 12,
-    #     "false_positive_rate": 0.1,
-    #     "random_seed": 43792,
-    # },
-    # datetime_columns_rule={
-    #     "truncate_values": {
-    #         "lower_bound": 0,
-    #         "upper_bound": 4481049600,  # Friday, January 1, 2112 0:00:00
-    #     },
-    #     "round_decimals": 0,
-    # },
-    # text_columns_rule={
-    #     "strict_min": True,
-    #     "strict_max": True,
-    #     "success_ratio": 0.8,
-    # },
-    # categorical_columns_rule={
-    #     "false_positive_rate": 0.1,
-    #     "round_decimals": 4,
-    # },
-)
-validator.expectation_suite = data_assistant_result.get_expectation_suite(
-    expectation_suite_name=expectation_suite_name
-)
-"""
-    profiler_code_cell = lint_code(code=profiler_code_cell).rstrip("\n")
+    profiler_code_cell: str = lint_code(
+        code=PROFILER_CODE_CELL_USER_CONFIGURABLE_PROFILER
+    ).rstrip("\n")
 
     cells_of_interest_dict: Dict[int, dict] = find_code_in_notebook(
         nb=load_notebook_from_path(notebook_path=expected_notebook_path),
@@ -3481,43 +3422,10 @@ def test_suite_new_profile_runs_notebook_opens_jupyter(
     context = DataContext(context_root_dir=project_dir)
     assert expectation_suite_name in context.list_expectation_suite_names()
 
-    expected_expectation_configurations: List[ExpectationConfiguration] = [
-        ExpectationConfiguration(
-            **{
-                "kwargs": {"max_value": 1313, "min_value": 1313},
-                "expectation_type": "expect_table_row_count_to_be_between",
-                "meta": {
-                    "profiler_details": {
-                        "metric_configuration": {
-                            "domain_kwargs": {},
-                            "metric_dependencies": None,
-                            "metric_name": "table.row_count",
-                            "metric_value_kwargs": None,
-                        },
-                        "num_batches": 1,
-                    }
-                },
-            }
-        ),
-        ExpectationConfiguration(
-            **{
-                "kwargs": {
-                    "column_set": [
-                        "Age",
-                        "Name",
-                        "PClass",
-                        "Sex",
-                        "SexCode",
-                        "Survived",
-                        "Unnamed: 0",
-                    ],
-                    "exact_match": None,
-                },
-                "expectation_type": "expect_table_columns_to_match_set",
-                "meta": {"profiler_details": {"success_ratio": 1.0}},
-            }
-        ),
-    ]
+    # TODO: <Alex>Update when RBP replaces UCP permanently.</Alex>
+    expected_expectation_configurations: List[
+        ExpectationConfiguration
+    ] = EXPECTED_EXPECTATION_CONFIGURATIONS_USER_CONFIGURABLE_PROFILER
 
     suite: ExpectationSuite = context.get_expectation_suite(
         expectation_suite_name=expectation_suite_name
diff --git a/tests/integration/docusaurus/tutorials/getting-started/getting_started.py b/tests/integration/docusaurus/tutorials/getting-started/getting_started.py
--- a/tests/integration/docusaurus/tutorials/getting-started/getting_started.py
+++ b/tests/integration/docusaurus/tutorials/getting-started/getting_started.py
@@ -3,8 +3,8 @@
 import great_expectations as ge
 from great_expectations.checkpoint import SimpleCheckpoint
 from great_expectations.core.batch import BatchRequest
-from great_expectations.rule_based_profiler.types.data_assistant_result import (
-    DataAssistantResult,
+from great_expectations.profile.user_configurable_profiler import (
+    UserConfigurableProfiler,
 )
 from great_expectations.validator.validator import Validator
 
@@ -82,7 +82,7 @@
 # NOTE: The following assertion is only for testing and can be ignored by users.
 assert isinstance(validator, Validator)
 
-# Profile the data with the OnboardingDataAssistant and save resulting ExpectationSuite
+# Profile the data with the UserConfigurableProfiler and save resulting ExpectationSuite
 # <snippet>
 exclude_column_names = [
     "vendor_id",
@@ -106,51 +106,18 @@
 ]
 # </snippet>
 
-data_assistant_result: DataAssistantResult = context.assistants.onboarding.run(
-    batch_request=batch_request,
-    # include_column_names=include_column_names,
-    exclude_column_names=exclude_column_names,
-    # include_column_name_suffixes=include_column_name_suffixes,
-    # exclude_column_name_suffixes=exclude_column_name_suffixes,
-    # semantic_type_filter_module_name=semantic_type_filter_module_name,
-    # semantic_type_filter_class_name=semantic_type_filter_class_name,
-    # include_semantic_types=include_semantic_types,
-    # exclude_semantic_types=exclude_semantic_types,
-    # allowed_semantic_types_passthrough=allowed_semantic_types_passthrough,
-    cardinality_limit_mode="rel_100",  # case-insenstive (see documentaiton for other options)
-    # max_unique_values=max_unique_values,
-    # max_proportion_unique=max_proportion_unique,
-    # column_value_uniqueness_rule={
-    #     "success_ratio": 0.8,
-    # },
-    # column_value_nullity_rule={
-    # },
-    # column_value_nonnullity_rule={
-    # },
-    # numeric_columns_rule={
-    #     "false_positive_rate": 0.1,
-    #     "random_seed": 43792,
-    # },
-    # datetime_columns_rule={
-    #     "truncate_values": {
-    #         "lower_bound": 0,
-    #         "upper_bound": 4481049600,  # Friday, January 1, 2112 0:00:00
-    #     },
-    #     "round_decimals": 0,
-    # },
-    # text_columns_rule={
-    #     "strict_min": True,
-    #     "strict_max": True,
-    #     "success_ratio": 0.8,
-    # },
-    # categorical_columns_rule={
-    #     "false_positive_rate": 0.1,
-    #     "round_decimals": 3,
-    # },
-)
-validator.expectation_suite = data_assistant_result.get_expectation_suite(
-    expectation_suite_name=expectation_suite_name
-)
+profiler = UserConfigurableProfiler(
+    profile_dataset=validator,
+    excluded_expectations=None,
+    ignored_columns=exclude_column_names,
+    not_null_only=False,
+    primary_or_compound_key=None,
+    semantic_types_dict=None,
+    table_expectations_only=False,
+    value_set_threshold="MANY",
+)
+suite = profiler.build_suite()
+validator.expectation_suite = suite
 validator.save_expectation_suite(discard_failed_expectations=False)
 
 # Create first checkpoint on yellow_tripdata_sample_2019-01.csv
diff --git a/tests/render/renderer/v3/test_suite_profile_notebook_renderer.py b/tests/render/renderer/v3/test_suite_profile_notebook_renderer.py
--- a/tests/render/renderer/v3/test_suite_profile_notebook_renderer.py
+++ b/tests/render/renderer/v3/test_suite_profile_notebook_renderer.py
@@ -29,25 +29,43 @@
 yaml = YAML()
 
 
-@mock.patch("great_expectations.data_context.DataContext")
-def test_suite_notebook_renderer_render_onboarding_data_assistant_configuration(
-    mock_data_context: mock.MagicMock,
-):
-    renderer = SuiteProfileNotebookRenderer(
-        context=mock_data_context,
-        expectation_suite_name="my_expectation_suite",
-        profiler_name="",  # No name should signal that OnboardingDataAssistant is invoked
-        batch_request={
-            "datasource_name": "my_datasource",
-            "data_connector_name": "my_basic_data_connector",
-            "data_asset_name": "Titanic_1912",
-        },
-    )
-    notebook = renderer.render()
+SNIPPETS_USER_CONFIGURABLE_PROFILER: List[str] = [
+    # Imports
+    """import datetime
+
+import pandas as pd
 
-    snippets = [
-        # Imports
-        """\
+import great_expectations as ge
+import great_expectations.jupyter_ux
+from great_expectations.profile.user_configurable_profiler import (
+    UserConfigurableProfiler,
+)
+from great_expectations.core.batch import BatchRequest
+from great_expectations.checkpoint import SimpleCheckpoint
+from great_expectations.exceptions import DataContextError""",
+    # Batch request
+    """batch_request = {
+    "datasource_name": "my_datasource",
+    "data_connector_name": "my_basic_data_connector",
+    "data_asset_name": "Titanic_1912",
+}""",
+    # Profiler instantiation/usage
+    """profiler = UserConfigurableProfiler(
+    profile_dataset=validator,
+    excluded_expectations=None,
+    ignored_columns=exclude_column_names,
+    not_null_only=False,
+    primary_or_compound_key=None,
+    semantic_types_dict=None,
+    table_expectations_only=False,
+    value_set_threshold="MANY",
+)
+suite = profiler.build_suite()
+validator.expectation_suite = suite""",
+]
+SNIPPETS_ONBOARDING_DATA_ASSISTANT: List[str] = [
+    # Imports
+    """\
 import datetime
 
 import pandas as pd
@@ -60,15 +78,15 @@ def test_suite_notebook_renderer_render_onboarding_data_assistant_configuration(
 )
 from great_expectations.checkpoint import SimpleCheckpoint
 from great_expectations.exceptions import DataContextError""",
-        # Batch request
-        """batch_request = {
-    "datasource_name": "my_datasource",
-    "data_connector_name": "my_basic_data_connector",
-    "data_asset_name": "Titanic_1912",
-}
+    # Batch request
+    """batch_request = {
+        "datasource_name": "my_datasource",
+        "data_connector_name": "my_basic_data_connector",
+        "data_asset_name": "Titanic_1912",
+    }
 """,
-        # OnboardingDataAssistant instantiation/usage
-        """\
+    # OnboardingDataAssistant instantiation/usage
+    """\
 data_assistant_result: DataAssistantResult = context.assistants.onboarding.run(
     batch_request=batch_request,
     # include_column_names=include_column_names,
@@ -115,7 +133,134 @@ def test_suite_notebook_renderer_render_onboarding_data_assistant_configuration(
 validator.expectation_suite = data_assistant_result.get_expectation_suite(
     expectation_suite_name=expectation_suite_name
 )""",
-    ]
+]
+SNIPPETS_RULE_BASED_PROFILER: List[str] = [
+    # Imports
+    """\
+import datetime
+
+import pandas as pd
+
+import great_expectations as ge
+import great_expectations.jupyter_ux
+from great_expectations.core.batch import BatchRequest
+from great_expectations.checkpoint import SimpleCheckpoint
+from great_expectations.exceptions import DataContextError
+""",
+    # Batch request
+    """\
+batch_request = {
+    "datasource_name": "my_datasource",
+    "data_connector_name": "my_basic_data_connector",
+    "data_asset_name": "Titanic_1912",
+}
+""",
+    # Profiler instantiation/usage
+    """\
+result = context.run_profiler_with_dynamic_arguments(
+    name="my_profiler",
+    batch_request=batch_request,
+)
+validator.expectation_suite = result.get_expectation_suite(
+    expectation_suite_name=expectation_suite_name
+)""",
+]
+
+EXPECTED_EXPECTATIONS_USER_CONFIGURABLE_PROFILER: Set[str] = {
+    "expect_table_row_count_to_be_between",
+    "expect_table_columns_to_match_ordered_list",
+}
+EXPECTED_EXPECTATIONS_ONBOARDING_DATA_ASSISTANT: Set[str] = {
+    "expect_table_row_count_to_be_between",
+    "expect_table_columns_to_match_set",
+}
+
+EXPECTED_EXPECTATION_CONFIGURATIONS_USER_CONFIGURABLE_PROFILER: List[
+    ExpectationConfiguration
+] = [
+    ExpectationConfiguration(
+        **{
+            "expectation_type": "expect_table_columns_to_match_ordered_list",
+            "kwargs": {
+                "column_list": [
+                    "Age",
+                    "Name",
+                    "PClass",
+                    "Sex",
+                    "SexCode",
+                    "Survived",
+                    "Unnamed: 0",
+                ]
+            },
+            "meta": {},
+        }
+    ),
+    ExpectationConfiguration(
+        **{
+            "expectation_type": "expect_table_row_count_to_be_between",
+            "kwargs": {"max_value": 1313, "min_value": 1313},
+            "meta": {},
+        }
+    ),
+]
+EXPECTED_EXPECTATION_CONFIGURATIONS_ONBOARDING_DATA_ASSISTANT: List[
+    ExpectationConfiguration
+] = [
+    ExpectationConfiguration(
+        **{
+            "kwargs": {"max_value": 1313, "min_value": 1313},
+            "expectation_type": "expect_table_row_count_to_be_between",
+            "meta": {
+                "profiler_details": {
+                    "metric_configuration": {
+                        "domain_kwargs": {},
+                        "metric_dependencies": None,
+                        "metric_name": "table.row_count",
+                        "metric_value_kwargs": None,
+                    },
+                    "num_batches": 1,
+                }
+            },
+        }
+    ),
+    ExpectationConfiguration(
+        **{
+            "kwargs": {
+                "column_set": [
+                    "Age",
+                    "Name",
+                    "PClass",
+                    "Sex",
+                    "SexCode",
+                    "Survived",
+                    "Unnamed: 0",
+                ],
+                "exact_match": None,
+            },
+            "expectation_type": "expect_table_columns_to_match_set",
+            "meta": {"profiler_details": {"success_ratio": 1.0}},
+        }
+    ),
+]
+
+
+@mock.patch("great_expectations.data_context.DataContext")
+def test_suite_notebook_renderer_render_onboarding_data_assistant_configuration(
+    mock_data_context: mock.MagicMock,
+):
+    renderer = SuiteProfileNotebookRenderer(
+        context=mock_data_context,
+        expectation_suite_name="my_expectation_suite",
+        profiler_name="",  # No name should signal that OnboardingDataAssistant is invoked
+        batch_request={
+            "datasource_name": "my_datasource",
+            "data_connector_name": "my_basic_data_connector",
+            "data_asset_name": "Titanic_1912",
+        },
+    )
+    notebook = renderer.render()
+
+    snippets = SNIPPETS_USER_CONFIGURABLE_PROFILER
 
     for snippet in snippets:
         assert find_code_in_notebook(
@@ -275,43 +420,10 @@ def test_notebook_execution_onboarding_data_assistant_pandas_backend(
         "success_percent": 100.0,
     }
 
-    expected_expectation_configurations: List[ExpectationConfiguration] = [
-        ExpectationConfiguration(
-            **{
-                "kwargs": {"max_value": 1313, "min_value": 1313},
-                "expectation_type": "expect_table_row_count_to_be_between",
-                "meta": {
-                    "profiler_details": {
-                        "metric_configuration": {
-                            "domain_kwargs": {},
-                            "metric_dependencies": None,
-                            "metric_name": "table.row_count",
-                            "metric_value_kwargs": None,
-                        },
-                        "num_batches": 1,
-                    }
-                },
-            }
-        ),
-        ExpectationConfiguration(
-            **{
-                "kwargs": {
-                    "column_set": [
-                        "Age",
-                        "Name",
-                        "PClass",
-                        "Sex",
-                        "SexCode",
-                        "Survived",
-                        "Unnamed: 0",
-                    ],
-                    "exact_match": None,
-                },
-                "expectation_type": "expect_table_columns_to_match_set",
-                "meta": {"profiler_details": {"success_ratio": 1.0}},
-            }
-        ),
-    ]
+    # TODO: <Alex>Update when RBP replaces UCP permanently.</Alex>
+    expected_expectation_configurations: List[
+        ExpectationConfiguration
+    ] = EXPECTED_EXPECTATION_CONFIGURATIONS_USER_CONFIGURABLE_PROFILER
 
     suite: ExpectationSuite = context.get_expectation_suite(
         expectation_suite_name=expectation_suite_name
@@ -339,10 +451,9 @@ def test_notebook_execution_onboarding_data_assistant_pandas_backend(
         expectations_from_suite,
     ) = get_set_of_columns_and_expectations_from_suite(suite=suite)
 
-    expected_expectations: Set[str] = {
-        "expect_table_row_count_to_be_between",
-        "expect_table_columns_to_match_set",
-    }
+    # TODO: <Alex>Update when RBP replaces UCP permanently.</Alex>
+    expected_expectations: Set[str] = EXPECTED_EXPECTATIONS_USER_CONFIGURABLE_PROFILER
+
     assert columns_with_expectations == set()
     assert expectations_from_suite == expected_expectations
 
@@ -363,37 +474,7 @@ def test_suite_notebook_renderer_render_rule_based_profiler_configuration(
     )
     notebook = renderer.render()
 
-    snippets = [
-        # Imports
-        """\
-import datetime
-
-import pandas as pd
-
-import great_expectations as ge
-import great_expectations.jupyter_ux
-from great_expectations.core.batch import BatchRequest
-from great_expectations.checkpoint import SimpleCheckpoint
-from great_expectations.exceptions import DataContextError
-""",
-        # Batch request
-        """\
-batch_request = {
-    "datasource_name": "my_datasource",
-    "data_connector_name": "my_basic_data_connector",
-    "data_asset_name": "Titanic_1912",
-}
-""",
-        # Profiler instantiation/usage
-        """\
-result = context.run_profiler_with_dynamic_arguments(
-    name="my_profiler",
-    batch_request=batch_request,
-)
-validator.expectation_suite = result.get_expectation_suite(
-    expectation_suite_name=expectation_suite_name
-)""",
-    ]
+    snippets = SNIPPETS_RULE_BASED_PROFILER
 
     for snippet in snippets:
         assert find_code_in_notebook(