polars-runtime-compat 1.34.0b3__cp39-abi3-macosx_11_0_arm64.whl → 1.34.0b4__cp39-abi3-macosx_11_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of polars-runtime-compat might be problematic. Click here for more details.

Files changed (203) hide show
  1. _polars_runtime_compat/_polars_runtime_compat.abi3.so +0 -0
  2. {polars_runtime_compat-1.34.0b3.dist-info → polars_runtime_compat-1.34.0b4.dist-info}/METADATA +1 -1
  3. polars_runtime_compat-1.34.0b4.dist-info/RECORD +6 -0
  4. polars/__init__.py +0 -528
  5. polars/_cpu_check.py +0 -265
  6. polars/_dependencies.py +0 -355
  7. polars/_plr.py +0 -99
  8. polars/_plr.pyi +0 -2496
  9. polars/_reexport.py +0 -23
  10. polars/_typing.py +0 -478
  11. polars/_utils/__init__.py +0 -37
  12. polars/_utils/async_.py +0 -102
  13. polars/_utils/cache.py +0 -176
  14. polars/_utils/cloud.py +0 -40
  15. polars/_utils/constants.py +0 -29
  16. polars/_utils/construction/__init__.py +0 -46
  17. polars/_utils/construction/dataframe.py +0 -1397
  18. polars/_utils/construction/other.py +0 -72
  19. polars/_utils/construction/series.py +0 -560
  20. polars/_utils/construction/utils.py +0 -118
  21. polars/_utils/convert.py +0 -224
  22. polars/_utils/deprecation.py +0 -406
  23. polars/_utils/getitem.py +0 -457
  24. polars/_utils/logging.py +0 -11
  25. polars/_utils/nest_asyncio.py +0 -264
  26. polars/_utils/parquet.py +0 -15
  27. polars/_utils/parse/__init__.py +0 -12
  28. polars/_utils/parse/expr.py +0 -242
  29. polars/_utils/polars_version.py +0 -19
  30. polars/_utils/pycapsule.py +0 -53
  31. polars/_utils/scan.py +0 -27
  32. polars/_utils/serde.py +0 -63
  33. polars/_utils/slice.py +0 -215
  34. polars/_utils/udfs.py +0 -1251
  35. polars/_utils/unstable.py +0 -63
  36. polars/_utils/various.py +0 -782
  37. polars/_utils/wrap.py +0 -25
  38. polars/api.py +0 -370
  39. polars/catalog/__init__.py +0 -0
  40. polars/catalog/unity/__init__.py +0 -19
  41. polars/catalog/unity/client.py +0 -733
  42. polars/catalog/unity/models.py +0 -152
  43. polars/config.py +0 -1571
  44. polars/convert/__init__.py +0 -25
  45. polars/convert/general.py +0 -1046
  46. polars/convert/normalize.py +0 -261
  47. polars/dataframe/__init__.py +0 -5
  48. polars/dataframe/_html.py +0 -186
  49. polars/dataframe/frame.py +0 -12582
  50. polars/dataframe/group_by.py +0 -1067
  51. polars/dataframe/plotting.py +0 -257
  52. polars/datatype_expr/__init__.py +0 -5
  53. polars/datatype_expr/array.py +0 -56
  54. polars/datatype_expr/datatype_expr.py +0 -304
  55. polars/datatype_expr/list.py +0 -18
  56. polars/datatype_expr/struct.py +0 -69
  57. polars/datatypes/__init__.py +0 -122
  58. polars/datatypes/_parse.py +0 -195
  59. polars/datatypes/_utils.py +0 -48
  60. polars/datatypes/classes.py +0 -1213
  61. polars/datatypes/constants.py +0 -11
  62. polars/datatypes/constructor.py +0 -172
  63. polars/datatypes/convert.py +0 -366
  64. polars/datatypes/group.py +0 -130
  65. polars/exceptions.py +0 -230
  66. polars/expr/__init__.py +0 -7
  67. polars/expr/array.py +0 -964
  68. polars/expr/binary.py +0 -346
  69. polars/expr/categorical.py +0 -306
  70. polars/expr/datetime.py +0 -2620
  71. polars/expr/expr.py +0 -11272
  72. polars/expr/list.py +0 -1408
  73. polars/expr/meta.py +0 -444
  74. polars/expr/name.py +0 -321
  75. polars/expr/string.py +0 -3045
  76. polars/expr/struct.py +0 -357
  77. polars/expr/whenthen.py +0 -185
  78. polars/functions/__init__.py +0 -193
  79. polars/functions/aggregation/__init__.py +0 -33
  80. polars/functions/aggregation/horizontal.py +0 -298
  81. polars/functions/aggregation/vertical.py +0 -341
  82. polars/functions/as_datatype.py +0 -848
  83. polars/functions/business.py +0 -138
  84. polars/functions/col.py +0 -384
  85. polars/functions/datatype.py +0 -121
  86. polars/functions/eager.py +0 -524
  87. polars/functions/escape_regex.py +0 -29
  88. polars/functions/lazy.py +0 -2751
  89. polars/functions/len.py +0 -68
  90. polars/functions/lit.py +0 -210
  91. polars/functions/random.py +0 -22
  92. polars/functions/range/__init__.py +0 -19
  93. polars/functions/range/_utils.py +0 -15
  94. polars/functions/range/date_range.py +0 -303
  95. polars/functions/range/datetime_range.py +0 -370
  96. polars/functions/range/int_range.py +0 -348
  97. polars/functions/range/linear_space.py +0 -311
  98. polars/functions/range/time_range.py +0 -287
  99. polars/functions/repeat.py +0 -301
  100. polars/functions/whenthen.py +0 -353
  101. polars/interchange/__init__.py +0 -10
  102. polars/interchange/buffer.py +0 -77
  103. polars/interchange/column.py +0 -190
  104. polars/interchange/dataframe.py +0 -230
  105. polars/interchange/from_dataframe.py +0 -328
  106. polars/interchange/protocol.py +0 -303
  107. polars/interchange/utils.py +0 -170
  108. polars/io/__init__.py +0 -64
  109. polars/io/_utils.py +0 -317
  110. polars/io/avro.py +0 -49
  111. polars/io/clipboard.py +0 -36
  112. polars/io/cloud/__init__.py +0 -17
  113. polars/io/cloud/_utils.py +0 -80
  114. polars/io/cloud/credential_provider/__init__.py +0 -17
  115. polars/io/cloud/credential_provider/_builder.py +0 -520
  116. polars/io/cloud/credential_provider/_providers.py +0 -618
  117. polars/io/csv/__init__.py +0 -9
  118. polars/io/csv/_utils.py +0 -38
  119. polars/io/csv/batched_reader.py +0 -142
  120. polars/io/csv/functions.py +0 -1495
  121. polars/io/database/__init__.py +0 -6
  122. polars/io/database/_arrow_registry.py +0 -70
  123. polars/io/database/_cursor_proxies.py +0 -147
  124. polars/io/database/_executor.py +0 -578
  125. polars/io/database/_inference.py +0 -314
  126. polars/io/database/_utils.py +0 -144
  127. polars/io/database/functions.py +0 -516
  128. polars/io/delta.py +0 -499
  129. polars/io/iceberg/__init__.py +0 -3
  130. polars/io/iceberg/_utils.py +0 -697
  131. polars/io/iceberg/dataset.py +0 -556
  132. polars/io/iceberg/functions.py +0 -151
  133. polars/io/ipc/__init__.py +0 -8
  134. polars/io/ipc/functions.py +0 -514
  135. polars/io/json/__init__.py +0 -3
  136. polars/io/json/read.py +0 -101
  137. polars/io/ndjson.py +0 -332
  138. polars/io/parquet/__init__.py +0 -17
  139. polars/io/parquet/field_overwrites.py +0 -140
  140. polars/io/parquet/functions.py +0 -722
  141. polars/io/partition.py +0 -491
  142. polars/io/plugins.py +0 -187
  143. polars/io/pyarrow_dataset/__init__.py +0 -5
  144. polars/io/pyarrow_dataset/anonymous_scan.py +0 -109
  145. polars/io/pyarrow_dataset/functions.py +0 -79
  146. polars/io/scan_options/__init__.py +0 -5
  147. polars/io/scan_options/_options.py +0 -59
  148. polars/io/scan_options/cast_options.py +0 -126
  149. polars/io/spreadsheet/__init__.py +0 -6
  150. polars/io/spreadsheet/_utils.py +0 -52
  151. polars/io/spreadsheet/_write_utils.py +0 -647
  152. polars/io/spreadsheet/functions.py +0 -1323
  153. polars/lazyframe/__init__.py +0 -9
  154. polars/lazyframe/engine_config.py +0 -61
  155. polars/lazyframe/frame.py +0 -8564
  156. polars/lazyframe/group_by.py +0 -669
  157. polars/lazyframe/in_process.py +0 -42
  158. polars/lazyframe/opt_flags.py +0 -333
  159. polars/meta/__init__.py +0 -14
  160. polars/meta/build.py +0 -33
  161. polars/meta/index_type.py +0 -27
  162. polars/meta/thread_pool.py +0 -50
  163. polars/meta/versions.py +0 -120
  164. polars/ml/__init__.py +0 -0
  165. polars/ml/torch.py +0 -213
  166. polars/ml/utilities.py +0 -30
  167. polars/plugins.py +0 -155
  168. polars/py.typed +0 -0
  169. polars/pyproject.toml +0 -103
  170. polars/schema.py +0 -265
  171. polars/selectors.py +0 -3117
  172. polars/series/__init__.py +0 -5
  173. polars/series/array.py +0 -776
  174. polars/series/binary.py +0 -254
  175. polars/series/categorical.py +0 -246
  176. polars/series/datetime.py +0 -2275
  177. polars/series/list.py +0 -1087
  178. polars/series/plotting.py +0 -191
  179. polars/series/series.py +0 -9197
  180. polars/series/string.py +0 -2367
  181. polars/series/struct.py +0 -154
  182. polars/series/utils.py +0 -191
  183. polars/sql/__init__.py +0 -7
  184. polars/sql/context.py +0 -677
  185. polars/sql/functions.py +0 -139
  186. polars/string_cache.py +0 -185
  187. polars/testing/__init__.py +0 -13
  188. polars/testing/asserts/__init__.py +0 -9
  189. polars/testing/asserts/frame.py +0 -231
  190. polars/testing/asserts/series.py +0 -219
  191. polars/testing/asserts/utils.py +0 -12
  192. polars/testing/parametric/__init__.py +0 -33
  193. polars/testing/parametric/profiles.py +0 -107
  194. polars/testing/parametric/strategies/__init__.py +0 -22
  195. polars/testing/parametric/strategies/_utils.py +0 -14
  196. polars/testing/parametric/strategies/core.py +0 -615
  197. polars/testing/parametric/strategies/data.py +0 -452
  198. polars/testing/parametric/strategies/dtype.py +0 -436
  199. polars/testing/parametric/strategies/legacy.py +0 -169
  200. polars/type_aliases.py +0 -24
  201. polars_runtime_compat-1.34.0b3.dist-info/RECORD +0 -203
  202. {polars_runtime_compat-1.34.0b3.dist-info → polars_runtime_compat-1.34.0b4.dist-info}/WHEEL +0 -0
  203. {polars_runtime_compat-1.34.0b3.dist-info → polars_runtime_compat-1.34.0b4.dist-info}/licenses/LICENSE +0 -0
@@ -1,219 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import contextlib
4
- from typing import Any
5
-
6
- from polars._utils.deprecation import deprecate_renamed_parameter
7
- from polars.series import Series
8
- from polars.testing.asserts.utils import raise_assertion_error
9
-
10
- with contextlib.suppress(ImportError): # Module not available when building docs
11
- from polars._plr import assert_series_equal_py
12
-
13
-
14
- def _assert_correct_input_type(left: Any, right: Any) -> bool:
15
- __tracebackhide__ = True
16
-
17
- if not (isinstance(left, Series) and isinstance(right, Series)):
18
- raise_assertion_error(
19
- "inputs",
20
- "unexpected input types",
21
- type(left).__name__,
22
- type(right).__name__,
23
- )
24
- return True
25
-
26
-
27
- @deprecate_renamed_parameter("check_dtype", "check_dtypes", version="0.20.31")
28
- @deprecate_renamed_parameter("rtol", "rel_tol", version="1.32.3")
29
- @deprecate_renamed_parameter("atol", "abs_tol", version="1.32.3")
30
- def assert_series_equal(
31
- left: Series,
32
- right: Series,
33
- *,
34
- check_dtypes: bool = True,
35
- check_names: bool = True,
36
- check_order: bool = True,
37
- check_exact: bool = False,
38
- rel_tol: float = 1e-5,
39
- abs_tol: float = 1e-8,
40
- categorical_as_str: bool = False,
41
- ) -> None:
42
- """
43
- Assert that the left and right Series are equal.
44
-
45
- Raises a detailed `AssertionError` if the Series differ.
46
- This function is intended for use in unit tests.
47
-
48
- .. versionchanged:: 0.20.31
49
- The `check_dtype` parameter was renamed `check_dtypes`.
50
-
51
- .. versionchanged:: 1.32.3
52
- The `rtol` and `atol` parameters were renamed to `rel_tol` and `abs_tol`,
53
- respectively.
54
-
55
- Parameters
56
- ----------
57
- left
58
- The first Series to compare.
59
- right
60
- The second Series to compare.
61
- check_dtypes
62
- Requires data types to match.
63
- check_names
64
- Requires names to match.
65
- check_order
66
- Requires elements to appear in the same order.
67
- check_exact
68
- Requires float values to match exactly. If set to `False`, values are considered
69
- equal when within tolerance of each other (see `rel_tol` and `abs_tol`).
70
- Only affects columns with a Float data type.
71
- rel_tol
72
- Relative tolerance for inexact checking, given as a fraction of the values in
73
- `right`.
74
- abs_tol
75
- Absolute tolerance for inexact checking.
76
- categorical_as_str
77
- Cast categorical columns to string before comparing. Enabling this helps
78
- compare columns that do not share the same string cache.
79
-
80
- See Also
81
- --------
82
- assert_frame_equal
83
- assert_series_not_equal
84
-
85
- Notes
86
- -----
87
- When using pytest, it may be worthwhile to shorten Python traceback printing
88
- by passing `--tb=short`. The default mode tends to be unhelpfully verbose.
89
- More information in the
90
- `pytest docs <https://docs.pytest.org/en/latest/how-to/output.html#modifying-python-traceback-printing>`_.
91
-
92
- Examples
93
- --------
94
- >>> from polars.testing import assert_series_equal
95
- >>> s1 = pl.Series([1, 2, 3])
96
- >>> s2 = pl.Series([1, 5, 3])
97
- >>> assert_series_equal(s1, s2)
98
- Traceback (most recent call last):
99
- ...
100
- AssertionError: Series are different (exact value mismatch)
101
- [left]: shape: (3,)
102
- Series: '' [i64]
103
- [
104
- 1
105
- 2
106
- 3
107
- ]
108
- [right]: shape: (3,)
109
- Series: '' [i64]
110
- [
111
- 1
112
- 5
113
- 3
114
- ]
115
- """
116
- __tracebackhide__ = True
117
-
118
- _assert_correct_input_type(left, right)
119
-
120
- assert_series_equal_py(
121
- left._s,
122
- right._s,
123
- check_dtypes=check_dtypes,
124
- check_names=check_names,
125
- check_order=check_order,
126
- check_exact=check_exact,
127
- rel_tol=rel_tol,
128
- abs_tol=abs_tol,
129
- categorical_as_str=categorical_as_str,
130
- )
131
-
132
-
133
- @deprecate_renamed_parameter("check_dtype", "check_dtypes", version="0.20.31")
134
- @deprecate_renamed_parameter("rtol", "rel_tol", version="1.32.3")
135
- @deprecate_renamed_parameter("atol", "abs_tol", version="1.32.3")
136
- def assert_series_not_equal(
137
- left: Series,
138
- right: Series,
139
- *,
140
- check_dtypes: bool = True,
141
- check_names: bool = True,
142
- check_order: bool = True,
143
- check_exact: bool = False,
144
- rel_tol: float = 1e-5,
145
- abs_tol: float = 1e-8,
146
- categorical_as_str: bool = False,
147
- ) -> None:
148
- """
149
- Assert that the left and right Series are **not** equal.
150
-
151
- This function is intended for use in unit tests.
152
-
153
- .. versionchanged:: 0.20.31
154
- The `check_dtype` parameter was renamed `check_dtypes`.
155
-
156
- .. versionchanged:: 1.32.3
157
- The `rtol` and `atol` parameters were renamed to `rel_tol` and `abs_tol`,
158
- respectively.
159
-
160
- Parameters
161
- ----------
162
- left
163
- The first Series to compare.
164
- right
165
- The second Series to compare.
166
- check_dtypes
167
- Requires data types to match.
168
- check_names
169
- Requires names to match.
170
- check_order
171
- Requires elements to appear in the same order.
172
- check_exact
173
- Requires float values to match exactly. If set to `False`, values are considered
174
- equal when within tolerance of each other (see `rel_tol` and `abs_tol`).
175
- Only affects columns with a Float data type.
176
- rel_tol
177
- Relative tolerance for inexact checking, given as a fraction of the values in
178
- `right`.
179
- abs_tol
180
- Absolute tolerance for inexact checking.
181
- categorical_as_str
182
- Cast categorical columns to string before comparing. Enabling this helps
183
- compare columns that do not share the same string cache.
184
-
185
- See Also
186
- --------
187
- assert_series_equal
188
- assert_frame_not_equal
189
-
190
- Examples
191
- --------
192
- >>> from polars.testing import assert_series_not_equal
193
- >>> s1 = pl.Series([1, 2, 3])
194
- >>> s2 = pl.Series([1, 2, 3])
195
- >>> assert_series_not_equal(s1, s2)
196
- Traceback (most recent call last):
197
- ...
198
- AssertionError: Series are equal (but are expected not to be)
199
- """
200
- __tracebackhide__ = True
201
-
202
- _assert_correct_input_type(left, right)
203
- try:
204
- assert_series_equal(
205
- left=left,
206
- right=right,
207
- check_dtypes=check_dtypes,
208
- check_names=check_names,
209
- check_order=check_order,
210
- check_exact=check_exact,
211
- rel_tol=rel_tol,
212
- abs_tol=abs_tol,
213
- categorical_as_str=categorical_as_str,
214
- )
215
- except AssertionError:
216
- return
217
- else:
218
- msg = "Series are equal (but are expected not to be)"
219
- raise AssertionError(msg)
@@ -1,12 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from typing import Any, NoReturn
4
-
5
-
6
- def raise_assertion_error(
7
- objects: str, detail: str, left: Any, right: Any, *, cause: Exception | None = None
8
- ) -> NoReturn:
9
- """Raise a detailed assertion error."""
10
- __tracebackhide__ = True
11
- msg = f"{objects} are different ({detail})\n[left]: {left}\n[right]: {right}"
12
- raise AssertionError(msg) from cause
@@ -1,33 +0,0 @@
1
- from polars._dependencies import _HYPOTHESIS_AVAILABLE
2
-
3
- if not _HYPOTHESIS_AVAILABLE:
4
- msg = (
5
- "polars.testing.parametric requires the 'hypothesis' module\n"
6
- "Please install it using the command: pip install hypothesis"
7
- )
8
- raise ModuleNotFoundError(msg)
9
-
10
- from polars.testing.parametric.profiles import load_profile, set_profile
11
- from polars.testing.parametric.strategies import (
12
- column,
13
- columns,
14
- create_list_strategy,
15
- dataframes,
16
- dtypes,
17
- lists,
18
- series,
19
- )
20
-
21
- __all__ = [
22
- # strategies
23
- "dataframes",
24
- "series",
25
- "column",
26
- "columns",
27
- "dtypes",
28
- "lists",
29
- "create_list_strategy",
30
- # profiles
31
- "load_profile",
32
- "set_profile",
33
- ]
@@ -1,107 +0,0 @@
1
- from __future__ import annotations
2
-
3
- import os
4
- import re
5
-
6
- from hypothesis import settings
7
-
8
- from polars._typing import ParametricProfileNames
9
-
10
-
11
- def load_profile(
12
- profile: ParametricProfileNames | int = "fast", *, set_environment: bool = False
13
- ) -> None:
14
- """
15
- Load a named (or custom) hypothesis profile for use with the parametric tests.
16
-
17
- .. warning::
18
- This functionality is currently considered **unstable**. It may be
19
- changed at any point without it being considered a breaking change.
20
-
21
- Parameters
22
- ----------
23
- profile : {str, int}, optional
24
- Name of the profile to load; one of "fast", "balanced", "expensive", or
25
- the integer number of iterations to run (which will create and register
26
- a custom profile with that value).
27
-
28
- set_environment : bool, default False
29
- If True, also set the environment variable `POLARS_HYPOTHESIS_PROFILE`
30
- to the given profile name/value.
31
-
32
- Examples
33
- --------
34
- >>> # load a custom profile that will run with 1500 iterations
35
- >>> from polars.testing.parametric import load_profile
36
- >>> load_profile(1500)
37
- """
38
- common_settings = {"print_blob": True, "deadline": None}
39
- profile_name = str(profile)
40
-
41
- # Register standard/named profiles
42
- # --------------------------------
43
- for name, iterations in (
44
- ("fast", 100),
45
- ("balanced", 1_000),
46
- ("expensive", 10_000),
47
- ):
48
- settings.register_profile(
49
- name=f"polars.{name}",
50
- max_examples=iterations,
51
- **common_settings, # type: ignore[arg-type]
52
- )
53
-
54
- # Register a custom profile with 'n' iterations.
55
- # ----------------------------------------------
56
- # (Set the ideal number to balance time-vs-coverage for your machine).
57
- if profile_name.isdigit() or re.match(r"polars\.custom\.[\d_]+$", profile_name):
58
- n_iterations = int(profile_name.replace("polars.custom.", ""))
59
- profile_name = f"polars.custom.{profile_name}"
60
- settings.register_profile(
61
- name=profile_name,
62
- max_examples=n_iterations,
63
- **common_settings, # type: ignore[arg-type]
64
- )
65
-
66
- # Load the chosen profile
67
- profile_name = f"polars.{profile_name.replace('polars.', '')}"
68
- settings.load_profile(profile_name)
69
-
70
- if set_environment:
71
- set_profile(profile_name) # type: ignore[arg-type]
72
-
73
-
74
- def set_profile(profile: ParametricProfileNames | int) -> None:
75
- """
76
- Set the env var `POLARS_HYPOTHESIS_PROFILE` to the given profile name/value.
77
-
78
- .. warning::
79
- This functionality is currently considered **unstable**. It may be
80
- changed at any point without it being considered a breaking change.
81
-
82
- Parameters
83
- ----------
84
- profile : {str, int}, optional
85
- Name of the profile to load; one of "fast", "balanced", "expensive", or
86
- the integer number of iterations to run (which will create and register
87
- a custom profile with that value).
88
-
89
- Examples
90
- --------
91
- >>> # prefer the 'balanced' profile for running parametric tests
92
- >>> from polars.testing.parametric import set_profile
93
- >>> set_profile("balanced")
94
- """
95
- profile_name = str(profile).split(".")[-1]
96
- if profile_name.replace("_", "").isdigit():
97
- profile_name = str(int(profile_name))
98
-
99
- else:
100
- from typing import get_args
101
-
102
- valid_profile_names = get_args(ParametricProfileNames)
103
- if profile_name not in valid_profile_names:
104
- msg = f"invalid profile name {profile_name!r}; expected one of {valid_profile_names!r}"
105
- raise ValueError(msg)
106
-
107
- os.environ["POLARS_HYPOTHESIS_PROFILE"] = profile_name
@@ -1,22 +0,0 @@
1
- from polars.testing.parametric.strategies.core import (
2
- column,
3
- dataframes,
4
- series,
5
- )
6
- from polars.testing.parametric.strategies.data import lists
7
- from polars.testing.parametric.strategies.dtype import dtypes
8
- from polars.testing.parametric.strategies.legacy import columns, create_list_strategy
9
-
10
- __all__ = [
11
- # core
12
- "dataframes",
13
- "series",
14
- "column",
15
- # dtype
16
- "dtypes",
17
- # data
18
- "lists",
19
- # legacy
20
- "columns",
21
- "create_list_strategy",
22
- ]
@@ -1,14 +0,0 @@
1
- from typing import Any
2
-
3
-
4
- def flexhash(elem: Any) -> int:
5
- """
6
- Hashing function that also handles lists and dictionaries.
7
-
8
- Used for `unique` check in nested strategies.
9
- """
10
- if isinstance(elem, list):
11
- return hash(tuple(flexhash(e) for e in elem))
12
- elif isinstance(elem, dict):
13
- return hash(tuple((k, flexhash(v)) for k, v in elem.items()))
14
- return hash(elem)