We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
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/core/usage_statistics/anonymizers/anonymizer.py`
Content:
```
1 import logging
2 from hashlib import md5
3 from typing import Optional
4 
5 from great_expectations.util import load_class
6 
7 logger = logging.getLogger(__name__)
8 
9 
10 class Anonymizer:
11     """Anonymize string names in an optionally-consistent way."""
12 
13     def __init__(self, salt=None):
14         if salt is not None and not isinstance(salt, str):
15             logger.error("invalid salt: must provide a string. Setting a random salt.")
16             salt = None
17         if salt is None:
18             import secrets
19 
20             self._salt = secrets.token_hex(8)
21         else:
22             self._salt = salt
23 
24     @property
25     def salt(self):
26         return self._salt
27 
28     def anonymize(self, string_):
29         if string_ is None:
30             return None
31 
32         if not isinstance(string_, str):
33             raise TypeError(
34                 f"""The type of the "string_" argument must be a string (Python "str").  The type given is
35 "{str(type(string_))}", which is illegal.
36             """
37             )
38         salted = self._salt + string_
39         return md5(salted.encode("utf-8")).hexdigest()
40 
41     def anonymize_object_info(
42         self,
43         anonymized_info_dict,
44         ge_classes,
45         object_=None,
46         object_class=None,
47         object_config=None,
48         runtime_environment=None,
49     ) -> dict:
50         assert (
51             object_ or object_class or object_config
52         ), "Must pass either object_ or object_class or object_config."
53 
54         if runtime_environment is None:
55             runtime_environment = {}
56 
57         object_class_name: Optional[str] = None
58         try:
59             if object_class is None and object_ is not None:
60                 object_class = object_.__class__
61             elif object_class is None and object_config is not None:
62                 object_class_name = object_config.get("class_name")
63                 object_module_name = object_config.get(
64                     "module_name"
65                 ) or runtime_environment.get("module_name")
66                 object_class = load_class(object_class_name, object_module_name)
67             object_class_name = object_class.__name__
68 
69             for ge_class in ge_classes:
70                 if issubclass(object_class, ge_class):
71                     anonymized_info_dict["parent_class"] = ge_class.__name__
72                     if not object_class == ge_class:
73                         anonymized_info_dict["anonymized_class"] = self.anonymize(
74                             object_class_name
75                         )
76                     break
77 
78             if not anonymized_info_dict.get("parent_class"):
79                 anonymized_info_dict["parent_class"] = "__not_recognized__"
80                 anonymized_info_dict["anonymized_class"] = self.anonymize(
81                     object_class_name
82                 )
83         except AttributeError:
84             anonymized_info_dict["parent_class"] = "__not_recognized__"
85             anonymized_info_dict["anonymized_class"] = self.anonymize(object_class_name)
86 
87         return anonymized_info_dict
88 
89     @staticmethod
90     def _is_parent_class_recognized(
91         classes_to_check,
92         object_=None,
93         object_class=None,
94         object_config=None,
95     ) -> Optional[str]:
96         """
97         Check if the parent class is a subclass of any core GE class.
98         This private method is intended to be used by anonymizers in a public `is_parent_class_recognized()` method. These anonymizers define and provide the core GE classes_to_check.
99         Returns:
100             The name of the parent class found, or None if no parent class was found
101         """
102         assert (
103             object_ or object_class or object_config
104         ), "Must pass either object_ or object_class or object_config."
105         try:
106             if object_class is None and object_ is not None:
107                 object_class = object_.__class__
108             elif object_class is None and object_config is not None:
109                 object_class_name = object_config.get("class_name")
110                 object_module_name = object_config.get("module_name")
111                 object_class = load_class(object_class_name, object_module_name)
112 
113             for class_to_check in classes_to_check:
114                 if issubclass(object_class, class_to_check):
115                     return class_to_check.__name__
116 
117             return None
118 
119         except AttributeError:
120             return None
121
```
--- 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/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 @@
 "{str(type(string_))}", which is illegal.
             """
             )
+
         salted = self._salt + string_
         return md5(salted.encode("utf-8")).hexdigest()

{"golden_diff": "diff --git a/great_expectations/core/usage_statistics/anonymizers/anonymizer.py b/great_expectations/core/usage_statistics/anonymizers/anonymizer.py\n--- a/great_expectations/core/usage_statistics/anonymizers/anonymizer.py\n+++ b/great_expectations/core/usage_statistics/anonymizers/anonymizer.py\n@@ -35,6 +35,7 @@\n \"{str(type(string_))}\", which is illegal.\n             \"\"\"\n             )\n+\n         salted = self._salt + string_\n         return md5(salted.encode(\"utf-8\")).hexdigest()\n", "issue": "Use cleaner solution for non-truncating division in python 2\nPrefer `from __future__ import division` to `1.*x/y`\n", "before_files": [{"content": "import logging\nfrom hashlib import md5\nfrom typing import Optional\n\nfrom great_expectations.util import load_class\n\nlogger = logging.getLogger(__name__)\n\n\nclass Anonymizer:\n    \"\"\"Anonymize string names in an optionally-consistent way.\"\"\"\n\n    def __init__(self, salt=None):\n        if salt is not None and not isinstance(salt, str):\n            logger.error(\"invalid salt: must provide a string. Setting a random salt.\")\n            salt = None\n        if salt is None:\n            import secrets\n\n            self._salt = secrets.token_hex(8)\n        else:\n            self._salt = salt\n\n    @property\n    def salt(self):\n        return self._salt\n\n    def anonymize(self, string_):\n        if string_ is None:\n            return None\n\n        if not isinstance(string_, str):\n            raise TypeError(\n                f\"\"\"The type of the \"string_\" argument must be a string (Python \"str\").  The type given is\n\"{str(type(string_))}\", which is illegal.\n            \"\"\"\n            )\n        salted = self._salt + string_\n        return md5(salted.encode(\"utf-8\")).hexdigest()\n\n    def anonymize_object_info(\n        self,\n        anonymized_info_dict,\n        ge_classes,\n        object_=None,\n        object_class=None,\n        object_config=None,\n        runtime_environment=None,\n    ) -> dict:\n        assert (\n            object_ or object_class or object_config\n        ), \"Must pass either object_ or object_class or object_config.\"\n\n        if runtime_environment is None:\n            runtime_environment = {}\n\n        object_class_name: Optional[str] = None\n        try:\n            if object_class is None and object_ is not None:\n                object_class = object_.__class__\n            elif object_class is None and object_config is not None:\n                object_class_name = object_config.get(\"class_name\")\n                object_module_name = object_config.get(\n                    \"module_name\"\n                ) or runtime_environment.get(\"module_name\")\n                object_class = load_class(object_class_name, object_module_name)\n            object_class_name = object_class.__name__\n\n            for ge_class in ge_classes:\n                if issubclass(object_class, ge_class):\n                    anonymized_info_dict[\"parent_class\"] = ge_class.__name__\n                    if not object_class == ge_class:\n                        anonymized_info_dict[\"anonymized_class\"] = self.anonymize(\n                            object_class_name\n                        )\n                    break\n\n            if not anonymized_info_dict.get(\"parent_class\"):\n                anonymized_info_dict[\"parent_class\"] = \"__not_recognized__\"\n                anonymized_info_dict[\"anonymized_class\"] = self.anonymize(\n                    object_class_name\n                )\n        except AttributeError:\n            anonymized_info_dict[\"parent_class\"] = \"__not_recognized__\"\n            anonymized_info_dict[\"anonymized_class\"] = self.anonymize(object_class_name)\n\n        return anonymized_info_dict\n\n    @staticmethod\n    def _is_parent_class_recognized(\n        classes_to_check,\n        object_=None,\n        object_class=None,\n        object_config=None,\n    ) -> Optional[str]:\n        \"\"\"\n        Check if the parent class is a subclass of any core GE class.\n        This private method is intended to be used by anonymizers in a public `is_parent_class_recognized()` method. These anonymizers define and provide the core GE classes_to_check.\n        Returns:\n            The name of the parent class found, or None if no parent class was found\n        \"\"\"\n        assert (\n            object_ or object_class or object_config\n        ), \"Must pass either object_ or object_class or object_config.\"\n        try:\n            if object_class is None and object_ is not None:\n                object_class = object_.__class__\n            elif object_class is None and object_config is not None:\n                object_class_name = object_config.get(\"class_name\")\n                object_module_name = object_config.get(\"module_name\")\n                object_class = load_class(object_class_name, object_module_name)\n\n            for class_to_check in classes_to_check:\n                if issubclass(object_class, class_to_check):\n                    return class_to_check.__name__\n\n            return None\n\n        except AttributeError:\n            return None\n", "path": "great_expectations/core/usage_statistics/anonymizers/anonymizer.py"}], "after_files": [{"content": "import logging\nfrom hashlib import md5\nfrom typing import Optional\n\nfrom great_expectations.util import load_class\n\nlogger = logging.getLogger(__name__)\n\n\nclass Anonymizer:\n    \"\"\"Anonymize string names in an optionally-consistent way.\"\"\"\n\n    def __init__(self, salt=None):\n        if salt is not None and not isinstance(salt, str):\n            logger.error(\"invalid salt: must provide a string. Setting a random salt.\")\n            salt = None\n        if salt is None:\n            import secrets\n\n            self._salt = secrets.token_hex(8)\n        else:\n            self._salt = salt\n\n    @property\n    def salt(self):\n        return self._salt\n\n    def anonymize(self, string_):\n        if string_ is None:\n            return None\n\n        if not isinstance(string_, str):\n            raise TypeError(\n                f\"\"\"The type of the \"string_\" argument must be a string (Python \"str\").  The type given is\n\"{str(type(string_))}\", which is illegal.\n            \"\"\"\n            )\n\n        salted = self._salt + string_\n        return md5(salted.encode(\"utf-8\")).hexdigest()\n\n    def anonymize_object_info(\n        self,\n        anonymized_info_dict,\n        ge_classes,\n        object_=None,\n        object_class=None,\n        object_config=None,\n        runtime_environment=None,\n    ) -> dict:\n        assert (\n            object_ or object_class or object_config\n        ), \"Must pass either object_ or object_class or object_config.\"\n\n        if runtime_environment is None:\n            runtime_environment = {}\n\n        object_class_name: Optional[str] = None\n        try:\n            if object_class is None and object_ is not None:\n                object_class = object_.__class__\n            elif object_class is None and object_config is not None:\n                object_class_name = object_config.get(\"class_name\")\n                object_module_name = object_config.get(\n                    \"module_name\"\n                ) or runtime_environment.get(\"module_name\")\n                object_class = load_class(object_class_name, object_module_name)\n            object_class_name = object_class.__name__\n\n            for ge_class in ge_classes:\n                if issubclass(object_class, ge_class):\n                    anonymized_info_dict[\"parent_class\"] = ge_class.__name__\n                    if not object_class == ge_class:\n                        anonymized_info_dict[\"anonymized_class\"] = self.anonymize(\n                            object_class_name\n                        )\n                    break\n\n            if not anonymized_info_dict.get(\"parent_class\"):\n                anonymized_info_dict[\"parent_class\"] = \"__not_recognized__\"\n                anonymized_info_dict[\"anonymized_class\"] = self.anonymize(\n                    object_class_name\n                )\n        except AttributeError:\n            anonymized_info_dict[\"parent_class\"] = \"__not_recognized__\"\n            anonymized_info_dict[\"anonymized_class\"] = self.anonymize(object_class_name)\n\n        return anonymized_info_dict\n\n    @staticmethod\n    def _is_parent_class_recognized(\n        classes_to_check,\n        object_=None,\n        object_class=None,\n        object_config=None,\n    ) -> Optional[str]:\n        \"\"\"\n        Check if the parent class is a subclass of any core GE class.\n        This private method is intended to be used by anonymizers in a public `is_parent_class_recognized()` method. These anonymizers define and provide the core GE classes_to_check.\n        Returns:\n            The name of the parent class found, or None if no parent class was found\n        \"\"\"\n        assert (\n            object_ or object_class or object_config\n        ), \"Must pass either object_ or object_class or object_config.\"\n        try:\n            if object_class is None and object_ is not None:\n                object_class = object_.__class__\n            elif object_class is None and object_config is not None:\n                object_class_name = object_config.get(\"class_name\")\n                object_module_name = object_config.get(\"module_name\")\n                object_class = load_class(object_class_name, object_module_name)\n\n            for class_to_check in classes_to_check:\n                if issubclass(object_class, class_to_check):\n                    return class_to_check.__name__\n\n            return None\n\n        except AttributeError:\n            return None\n", "path": "great_expectations/core/usage_statistics/anonymizers/anonymizer.py"}]}