internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: great-expectations/great_expectations

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`


Discussion:
Hi @mccalluc! Thank you for opening this issue. Would you be interested in contributing a PR for this minor change?
Done inline during improve_partitions push.

Resolving patch:
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 @@ def _add_available_columns_list(self):
         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)


Test patch:
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/expectations/metrics/multicolumn_map_metrics/select_column_values_unique_within_record.py b/great_expectations/expectations/metrics/multicolumn_map_metrics/select_column_values_unique_within_record.py
--- a/great_expectations/expectations/metrics/multicolumn_map_metrics/select_column_values_unique_within_record.py
+++ b/great_expectations/expectations/metrics/multicolumn_map_metrics/select_column_values_unique_within_record.py
@@ -62,7 +62,7 @@ def _sqlalchemy(cls, column_list, **kwargs):
                 for idx_dest in range(idx_src + 1, num_columns)
             )
         )
-        row_wise_cond = sa.not_(sa.or_(conditions))
+        row_wise_cond = sa.not_(conditions)
         return row_wise_cond
 
     @multicolumn_condition_partial(engine=SparkDFExecutionEngine)


Test patch:
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/project.py b/great_expectations/cli/project.py
--- a/great_expectations/cli/project.py
+++ b/great_expectations/cli/project.py
@@ -63,7 +63,7 @@ def do_config_check(target_directory):
         ge_config_version: int = context.get_config().config_version
         if int(ge_config_version) < CURRENT_GE_CONFIG_VERSION:
             upgrade_message: str = f"""The config_version of your great_expectations.yml -- {float(ge_config_version)} -- is outdated.
-Please consult the 0.13.x migration guide ttps://docs.greatexpectations.io/en/latest/guides/how_to_guides/migrating_versions.html and
+Please consult the 0.13.x migration guide https://docs.greatexpectations.io/en/latest/guides/how_to_guides/migrating_versions.html and
 upgrade your Great Expectations configuration to version {float(CURRENT_GE_CONFIG_VERSION)} in order to take advantage of the latest capabilities.
             """
             return (
diff --git a/great_expectations/cli/v012/project.py b/great_expectations/cli/v012/project.py
--- a/great_expectations/cli/v012/project.py
+++ b/great_expectations/cli/v012/project.py
@@ -67,7 +67,7 @@ def do_config_check(target_directory):
         ge_config_version: int = context.get_config().config_version
         if int(ge_config_version) < CURRENT_GE_CONFIG_VERSION:
             upgrade_message: str = f"""The config_version of your great_expectations.yml -- {float(ge_config_version)} -- is outdated.
-Please consult the 0.13.x migration guide ttps://docs.greatexpectations.io/en/latest/guides/how_to_guides/migrating_versions.html and
+Please consult the 0.13.x migration guide https://docs.greatexpectations.io/en/latest/guides/how_to_guides/migrating_versions.html and
 upgrade your Great Expectations configuration to version {float(CURRENT_GE_CONFIG_VERSION)} in order to take advantage of the latest capabilities.
             """
             return (


Test patch:
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/data_context/data_context.py b/great_expectations/data_context/data_context.py
--- a/great_expectations/data_context/data_context.py
+++ b/great_expectations/data_context/data_context.py
@@ -3311,15 +3311,6 @@ def run_checkpoint(
         """
         # TODO mark experimental
         batch_request = batch_request or {}
-        # NOTE: Chetan 20211027 - Adding batch_identifiers to the batch_request causes issues with GE Cloud due to BatchRequest __init__ not having such an arg
-        # Commenting out until investigated further
-
-        # batch_identifiers = batch_request.get("batch_identifiers", {})
-        # if self.ge_cloud_mode:
-        #     if len(batch_identifiers.keys()) == 0:
-        #         batch_identifiers["timestamp"] = str(datetime.datetime.now())
-        #         batch_request["batch_identifiers"] = batch_identifiers
-
         checkpoint: Union[Checkpoint, LegacyCheckpoint] = self.get_checkpoint(
             name=checkpoint_name, ge_cloud_id=ge_cloud_id
         )


Test patch:
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/util.py b/great_expectations/util.py
--- a/great_expectations/util.py
+++ b/great_expectations/util.py
@@ -907,6 +907,10 @@ def gen_directory_tree_str(startpath):
 
 def lint_code(code: str) -> str:
     """Lint strings of code passed in.  Optional dependency "black" must be installed."""
+
+    # NOTE: Chetan 20211111 - This import was failing in Azure with 20.8b1 so we bumped up the version to 21.8b0
+    # While this seems to resolve the issue, the root cause is yet to be determined.
+
     try:
         import black
 


Test patch:
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/expectations/core/expect_column_kl_divergence_to_be_less_than.py b/great_expectations/expectations/core/expect_column_kl_divergence_to_be_less_than.py
--- a/great_expectations/expectations/core/expect_column_kl_divergence_to_be_less_than.py
+++ b/great_expectations/expectations/core/expect_column_kl_divergence_to_be_less_than.py
@@ -7,13 +7,14 @@
 
 from great_expectations.core import ExpectationConfiguration
 from great_expectations.execution_engine import ExecutionEngine
+from great_expectations.execution_engine.execution_engine import MetricDomainTypes
 from great_expectations.execution_engine.util import (
     build_categorical_partition_object,
     build_continuous_partition_object,
     is_valid_categorical_partition_object,
     is_valid_partition_object,
 )
-from great_expectations.expectations.expectation import TableExpectation
+from great_expectations.expectations.expectation import ColumnExpectation
 from great_expectations.expectations.util import render_evaluation_parameter_string
 from great_expectations.render.renderer.renderer import renderer
 from great_expectations.render.types import (
@@ -33,7 +34,7 @@
 from great_expectations.validator.validator import Validator
 
 
-class ExpectColumnKlDivergenceToBeLessThan(TableExpectation):
+class ExpectColumnKlDivergenceToBeLessThan(ColumnExpectation):
     """Expect the Kulback-Leibler (KL) divergence (relative entropy) of the specified column with respect to the \
             partition object to be lower than the provided threshold.
 


Test patch:
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/data_context/data_context.py b/great_expectations/data_context/data_context.py
--- a/great_expectations/data_context/data_context.py
+++ b/great_expectations/data_context/data_context.py
@@ -102,7 +102,7 @@
 from great_expectations.dataset import Dataset
 from great_expectations.datasource import LegacyDatasource
 from great_expectations.datasource.new_datasource import BaseDatasource, Datasource
-from great_expectations.exceptions import DataContextError, InvalidKeyError
+from great_expectations.exceptions import DataContextError
 from great_expectations.marshmallow__shade import ValidationError
 from great_expectations.profile.basic_dataset_profiler import BasicDatasetProfiler
 from great_expectations.render.renderer.site_builder import SiteBuilder
diff --git a/great_expectations/data_context/types/base.py b/great_expectations/data_context/types/base.py
--- a/great_expectations/data_context/types/base.py
+++ b/great_expectations/data_context/types/base.py
@@ -2363,10 +2363,9 @@ def __deepcopy__(self, memo):
 
         memo[id(self)] = result
         for key, value in self.to_json_dict().items():
-            if value is not None:
-                # noinspection PyArgumentList
-                value_copy = copy.deepcopy(value, memo)
-                setattr(result, key, value_copy)
+            # noinspection PyArgumentList
+            value_copy = copy.deepcopy(value, memo)
+            setattr(result, key, value_copy)
 
         restore_runtime_parameters_batch_data_references_into_config(
             config=self, batch_data_references=batch_data_references


Test patch:
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/core/usage_statistics/anonymizers/anonymizer.py b/great_expectations/core/usage_statistics/anonymizers/anonymizer.py
--- a/great_expectations/core/usage_statistics/anonymizers/anonymizer.py
+++ b/great_expectations/core/usage_statistics/anonymizers/anonymizer.py
@@ -35,6 +35,7 @@ def anonymize(self, string_):
 "{str(type(string_))}", which is illegal.
             """
             )
+
         salted = self._salt + string_
         return md5(salted.encode("utf-8")).hexdigest()
 


Test patch:
diff --git a/tests/test_definitions/multi_table_expectations/expect_table_row_count_to_equal_other_table.json b/tests/test_definitions/multi_table_expectations/expect_table_row_count_to_equal_other_table.json
--- a/tests/test_definitions/multi_table_expectations/expect_table_row_count_to_equal_other_table.json
+++ b/tests/test_definitions/multi_table_expectations/expect_table_row_count_to_equal_other_table.json
@@ -4,6 +4,7 @@
     {
       "data": [
         {
+          "dataset_name": "expect_table_row_count_to_equal_other_table_data_1",
           "data": {
             "c1": [
               4,
@@ -29,18 +30,10 @@
               3.5,
               1.2
             ]
-          },
-          "dataset_name": "expect_table_row_count_to_equal_other_table_data_1",
-          "schemas": {
-            "spark": {
-              "c1": "IntegerType",
-              "c2": "StringType",
-              "c3": "StringType",
-              "c4": "FloatType"
-            }
           }
         },
         {
+          "dataset_name": "expect_table_row_count_to_equal_other_table_data_2",
           "data": {
             "c1": [
               4,
@@ -66,18 +59,10 @@
               3.5,
               1.2
             ]
-          },
-          "dataset_name": "expect_table_row_count_to_equal_other_table_data_2",
-          "schemas": {
-            "spark": {
-              "c1": "IntegerType",
-              "c2": "StringType",
-              "c3": "StringType",
-              "c4": "FloatType"
-            }
           }
         },
         {
+          "dataset_name": "expect_table_row_count_to_equal_other_table_data_3",
           "data": {
             "c1": [
               4,
@@ -99,15 +84,6 @@
               3.0,
               3.5
             ]
-          },
-          "dataset_name": "expect_table_row_count_to_equal_other_table_data_3",
-          "schemas": {
-            "spark": {
-              "c1": "IntegerType",
-              "c2": "StringType",
-              "c3": "StringType",
-              "c4": "FloatType"
-            }
           }
         }
       ],
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/data_context/store/configuration_store.py b/great_expectations/data_context/store/configuration_store.py
--- a/great_expectations/data_context/store/configuration_store.py
+++ b/great_expectations/data_context/store/configuration_store.py
@@ -63,8 +63,8 @@ def __init__(
             # Store Backend Class was loaded successfully; verify that it is of a correct subclass.
             if issubclass(store_backend_class, TupleStoreBackend):
                 # Provide defaults for this common case
-                store_backend["filepath_template"] = store_backend.get(
-                    "filepath_template", "{0}.yml"
+                store_backend["filepath_suffix"] = store_backend.get(
+                    "filepath_suffix", ".yml"
                 )
 
         super().__init__(


Test patch:
diff --git a/tests/data_context/store/test_checkpoint_store.py b/tests/data_context/store/test_checkpoint_store.py
--- a/tests/data_context/store/test_checkpoint_store.py
+++ b/tests/data_context/store/test_checkpoint_store.py
@@ -209,7 +209,7 @@ def test_checkpoint_store(empty_data_context):
                 "suppress_store_backend_id": False,
                 "module_name": "great_expectations.data_context.store.tuple_store_backend",
                 "class_name": "TupleFilesystemStoreBackend",
-                "filepath_template": "{0}.yml",
+                "filepath_suffix": ".yml",
             },
         },
     }
diff --git a/tests/data_context/test_data_context_test_yaml_config.py b/tests/data_context/test_data_context_test_yaml_config.py
--- a/tests/data_context/test_data_context_test_yaml_config.py
+++ b/tests/data_context/test_data_context_test_yaml_config.py
@@ -216,7 +216,7 @@ def test_checkpoint_store_with_filesystem_store_backend(
             "class_name": "TupleFilesystemStoreBackend",
             "base_directory": f"{tmp_dir}/checkpoints",
             "suppress_store_backend_id": True,
-            "filepath_template": "{0}.yml",
+            "filepath_suffix": ".yml",
         },
         "overwrite_existing": False,
         "runtime_environment": {
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/checkpoint/actions.py b/great_expectations/checkpoint/actions.py
--- a/great_expectations/checkpoint/actions.py
+++ b/great_expectations/checkpoint/actions.py
@@ -237,7 +237,10 @@ def _run(
 
             # this will actually send the POST request to the Slack webapp server
             slack_notif_result = send_slack_notification(
-                query, slack_webhook=self.slack_webhook
+                query,
+                slack_webhook=self.slack_webhook,
+                slack_token=self.slack_token,
+                slack_channel=self.slack_channel,
             )
             return {"slack_notification_result": slack_notif_result}
 


Test patch:
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/scripts/trace_docs_deps.py b/scripts/trace_docs_deps.py
--- a/scripts/trace_docs_deps.py
+++ b/scripts/trace_docs_deps.py
@@ -31,7 +31,7 @@
 import os
 import re
 import sys
-from typing import List, Set
+from typing import List, Set, Union
 
 
 def find_docusaurus_refs(dir: str) -> List[str]:
@@ -45,6 +45,8 @@ def find_docusaurus_refs(dir: str) -> List[str]:
         for line in open(doc):
             if re.search(pattern, line):
                 file: str = _parse_file_from_docusaurus_link(line)
+                if not file:
+                    continue
                 path: str = os.path.join(os.path.dirname(doc), file)
                 # only interested in looking at .py files for now (excludes .yml files)
                 if path[-3:] == ".py":
@@ -55,8 +57,10 @@ def find_docusaurus_refs(dir: str) -> List[str]:
 
 def _parse_file_from_docusaurus_link(line: str) -> str:
     pattern: str = "=(.+?)#"  # Parse just the path from the Docusaurus link
-    search: re.Match[str] = re.search(pattern, line)
-    return search.group(1)
+    search: Union[re.Match[str], None] = re.search(pattern, line)
+    if search:
+        return search.group(1)
+    return ""
 
 
 def get_local_imports(files: List[str]) -> List[str]:


Test patch:
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/render/renderer/site_builder.py b/great_expectations/render/renderer/site_builder.py
--- a/great_expectations/render/renderer/site_builder.py
+++ b/great_expectations/render/renderer/site_builder.py
@@ -674,7 +674,7 @@ def _get_call_to_action_buttons(self, usage_statistics):
         create_expectations = CallToActionButton(
             "How to Create Expectations",
             # TODO update this link to a proper tutorial
-            "https://docs.greatexpectations.io/en/latest/guides/how_to_guides/creating_and_editing_expectations.html",
+            "https://docs.greatexpectations.io/docs/guides/expectations/create_expectations_overview",
         )
         see_glossary = CallToActionButton(
             "See More Kinds of Expectations",
@@ -683,15 +683,15 @@ def _get_call_to_action_buttons(self, usage_statistics):
         validation_playground = CallToActionButton(
             "How to Validate Data",
             # TODO update this link to a proper tutorial
-            "https://docs.greatexpectations.io/en/latest/guides/how_to_guides/validation.html",
+            "https://docs.greatexpectations.io/docs/guides/validation/validate_data_overview",
         )
         customize_data_docs = CallToActionButton(
             "How to Customize Data Docs",
-            "https://docs.greatexpectations.io/en/latest/reference/core_concepts.html#data-docs",
+            "https://docs.greatexpectations.io/docs/reference/data_docs#customizing-html-documentation",
         )
         team_site = CallToActionButton(
             "How to Set Up a Team Site",
-            "https://docs.greatexpectations.io/en/latest/guides/how_to_guides/configuring_data_docs.html",
+            "https://docs.greatexpectations.io/docs/guides/setup/index#data-docs",
         )
         # TODO gallery does not yet exist
         # gallery = CallToActionButton(


Test patch:
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`
Option to suppress the output 
Please add an option to suppress the output of `context.add_checkpoint(**checkpoint_config)` in a notebook. A semicolon does not do the trick.

Beginners don't need to see this output and [other solutions](https://thesmithfam.org/blog/2012/10/25/temporarily-suppress-console-output-in-python/) are equally hard to read/intimidating.

Anything to reduce visual clutter may improve the onboarding experience.




Discussion:
Done inline during improve_partitions push.
Hey @Alcampopiano thanks for opening up this issue! We'll review this matter and get back to you.

Resolving patch:
diff --git a/great_expectations/checkpoint/configurator.py b/great_expectations/checkpoint/configurator.py
--- a/great_expectations/checkpoint/configurator.py
+++ b/great_expectations/checkpoint/configurator.py
@@ -165,7 +165,7 @@ def _build_checkpoint_config(self) -> CheckpointConfig:
 
         logger.debug(
             f"SimpleCheckpointConfigurator built this CheckpointConfig:"
-            f" {print(checkpoint_config)}"
+            f"{checkpoint_config}"
         )
         return CheckpointConfig(**config_kwargs)
 


Test patch: