dycw-utilities 0.166.24__tar.gz → 0.166.25__tar.gz

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.
Files changed (217) hide show
  1. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/PKG-INFO +3 -3
  2. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/pyproject.toml +6 -6
  3. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_aeventkit.py +1 -1
  4. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_atomicwrites.py +6 -6
  5. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_contextlib.py +1 -1
  6. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_cryptography.py +1 -1
  7. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_dataclasses.py +6 -6
  8. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_enum.py +2 -2
  9. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_functions.py +4 -4
  10. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_hypothesis.py +5 -5
  11. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_iterables.py +32 -32
  12. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_libcst.py +1 -1
  13. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_lightweight_charts.py +1 -1
  14. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_logging.py +1 -1
  15. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_math.py +4 -4
  16. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_modules.py +1 -1
  17. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_numpy.py +5 -5
  18. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_objects/objects.py +1 -1
  19. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_operator.py +1 -1
  20. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_orjson.py +5 -5
  21. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_parse.py +10 -9
  22. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pathlib.py +6 -6
  23. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_polars.py +38 -35
  24. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_postgres.py +1 -1
  25. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pytest.py +1 -1
  26. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_redis.py +1 -1
  27. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_sentinel.py +1 -1
  28. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_slack_sdk.py +2 -2
  29. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_sqlalchemy.py +11 -8
  30. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_sqlalchemy_polars.py +2 -1
  31. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_text.py +2 -2
  32. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_traceback.py +1 -1
  33. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_typed_settings.py +1 -1
  34. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_typing.py +5 -5
  35. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_version.py +8 -6
  36. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_whenever.py +116 -116
  37. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_zoneinfo.py +4 -4
  38. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/__init__.py +1 -1
  39. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/hypothesis.py +2 -2
  40. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/.gitignore +0 -0
  41. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/LICENSE +0 -0
  42. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/README.md +0 -0
  43. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/__init__.py +0 -0
  44. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/conftest.py +0 -0
  45. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/__init__.py +0 -0
  46. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_missing/__init__.py +0 -0
  47. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_missing/module.py +0 -0
  48. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_with/__init__.py +0 -0
  49. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_with/outer_1.py +0 -0
  50. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_with/outer_2.py +0 -0
  51. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  52. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  53. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  54. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  55. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_without/__init__.py +0 -0
  56. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_without/module_1.py +0 -0
  57. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/package_without/module_2.py +0 -0
  58. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/standalone.py +0 -0
  59. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/modules/with_imports.py +0 -0
  60. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  61. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  62. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  63. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  64. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  65. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  66. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  67. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  68. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_altair.py +0 -0
  69. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_asyncio.py +0 -0
  70. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_atools.py +0 -0
  71. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_cachetools.py +0 -0
  72. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_click.py +0 -0
  73. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_concurrent.py +0 -0
  74. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_contextvars.py +0 -0
  75. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_cvxpy.py +0 -0
  76. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_errors.py +0 -0
  77. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_fastapi.py +0 -0
  78. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_fpdf2.py +0 -0
  79. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_functools.py +0 -0
  80. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_getpass.py +0 -0
  81. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_git.py +0 -0
  82. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_gzip.py +0 -0
  83. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_hashlib.py +0 -0
  84. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_http.py +0 -0
  85. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_importlib.py +0 -0
  86. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_inflect.py +0 -0
  87. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_ipython.py +0 -0
  88. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_json.py +0 -0
  89. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_jupyter.py +0 -0
  90. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_memory_profiler.py +0 -0
  91. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_more_itertools.py +0 -0
  92. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_objects/__init__.py +0 -0
  93. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_optuna.py +0 -0
  94. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_os.py +0 -0
  95. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pickle.py +0 -0
  96. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_platform.py +0 -0
  97. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_polars_ols.py +0 -0
  98. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pottery.py +0 -0
  99. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pqdm.py +0 -0
  100. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_psutil.py +0 -0
  101. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pydantic_settings.py +0 -0
  102. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pydantic_settings_sops.py +0 -0
  103. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pyinstrument.py +0 -0
  104. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pytest_randomly.py +0 -0
  105. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_pytest_regressions.py +0 -0
  106. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_random.py +0 -0
  107. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_re.py +0 -0
  108. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_reprlib.py +0 -0
  109. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_scipy.py +0 -0
  110. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_shelve.py +0 -0
  111. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_socket.py +0 -0
  112. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_statsmodels.py +0 -0
  113. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_string.py +0 -0
  114. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_tempfile.py +0 -0
  115. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_testbook.py +0 -0
  116. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_threading.py +0 -0
  117. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_timer.py +0 -0
  118. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_types.py +0 -0
  119. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_typing_funcs/__init__.py +0 -0
  120. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_typing_funcs/no_future.py +0 -0
  121. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_typing_funcs/with_future.py +0 -0
  122. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_tzdata.py +0 -0
  123. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_tzlocal.py +0 -0
  124. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_uuid.py +0 -0
  125. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_warnings.py +0 -0
  126. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/tests/test_zipfile.py +0 -0
  127. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/aeventkit.py +0 -0
  128. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/altair.py +0 -0
  129. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/asyncio.py +0 -0
  130. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/atomicwrites.py +0 -0
  131. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/atools.py +0 -0
  132. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/cachetools.py +0 -0
  133. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/click.py +0 -0
  134. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/concurrent.py +0 -0
  135. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/contextlib.py +0 -0
  136. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/contextvars.py +0 -0
  137. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/cryptography.py +0 -0
  138. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/cvxpy.py +0 -0
  139. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/dataclasses.py +0 -0
  140. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/enum.py +0 -0
  141. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/errors.py +0 -0
  142. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/fastapi.py +0 -0
  143. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/fpdf2.py +0 -0
  144. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/functions.py +0 -0
  145. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/functools.py +0 -0
  146. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/getpass.py +0 -0
  147. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/git.py +0 -0
  148. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/gzip.py +0 -0
  149. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/hashlib.py +0 -0
  150. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/http.py +0 -0
  151. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/importlib.py +0 -0
  152. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/inflect.py +0 -0
  153. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/ipython.py +0 -0
  154. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/iterables.py +0 -0
  155. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/json.py +0 -0
  156. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/jupyter.py +0 -0
  157. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/libcst.py +0 -0
  158. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/lightweight_charts.py +0 -0
  159. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/logging.py +0 -0
  160. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/math.py +0 -0
  161. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/memory_profiler.py +0 -0
  162. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/modules.py +0 -0
  163. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/more_itertools.py +0 -0
  164. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/numpy.py +0 -0
  165. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/operator.py +0 -0
  166. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/optuna.py +0 -0
  167. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/orjson.py +0 -0
  168. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/os.py +0 -0
  169. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/parse.py +0 -0
  170. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pathlib.py +0 -0
  171. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pickle.py +0 -0
  172. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/platform.py +0 -0
  173. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/polars.py +0 -0
  174. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/polars_ols.py +0 -0
  175. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/postgres.py +0 -0
  176. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pottery.py +0 -0
  177. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pqdm.py +0 -0
  178. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/psutil.py +0 -0
  179. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/py.typed +0 -0
  180. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pydantic_settings.py +0 -0
  181. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pydantic_settings_sops.py +0 -0
  182. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pyinstrument.py +0 -0
  183. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pytest.py +0 -0
  184. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pytest_plugins/__init__.py +0 -0
  185. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pytest_plugins/pytest_randomly.py +0 -0
  186. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pytest_plugins/pytest_regressions.py +0 -0
  187. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/pytest_regressions.py +0 -0
  188. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/random.py +0 -0
  189. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/re.py +0 -0
  190. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/redis.py +0 -0
  191. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/reprlib.py +0 -0
  192. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/scipy.py +0 -0
  193. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/sentinel.py +0 -0
  194. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/shelve.py +0 -0
  195. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/slack_sdk.py +0 -0
  196. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/socket.py +0 -0
  197. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/sqlalchemy.py +0 -0
  198. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/sqlalchemy_polars.py +0 -0
  199. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/statsmodels.py +0 -0
  200. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/string.py +0 -0
  201. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/tempfile.py +0 -0
  202. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/testbook.py +0 -0
  203. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/text.py +0 -0
  204. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/threading.py +0 -0
  205. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/timer.py +0 -0
  206. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/traceback.py +0 -0
  207. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/typed_settings.py +0 -0
  208. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/types.py +0 -0
  209. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/typing.py +0 -0
  210. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/tzdata.py +0 -0
  211. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/tzlocal.py +0 -0
  212. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/uuid.py +0 -0
  213. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/version.py +0 -0
  214. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/warnings.py +0 -0
  215. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/whenever.py +0 -0
  216. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/zipfile.py +0 -0
  217. {dycw_utilities-0.166.24 → dycw_utilities-0.166.25}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.166.24
3
+ Version: 0.166.25
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -14,10 +14,10 @@ Provides-Extra: test
14
14
  Requires-Dist: dycw-pytest-only<2.2,>=2.1.1; extra == 'test'
15
15
  Requires-Dist: hypothesis<6.139,>=6.138.15; extra == 'test'
16
16
  Requires-Dist: pytest-asyncio<1.2,>=1.1.0; extra == 'test'
17
- Requires-Dist: pytest-cov<6.4,>=6.3.0; extra == 'test'
17
+ Requires-Dist: pytest-cov<7.1,>=7.0.0; extra == 'test'
18
18
  Requires-Dist: pytest-instafail<0.6,>=0.5.0; extra == 'test'
19
19
  Requires-Dist: pytest-lazy-fixtures<1.4,>=1.3.4; extra == 'test'
20
- Requires-Dist: pytest-randomly<3.17,>=3.16.0; extra == 'test'
20
+ Requires-Dist: pytest-randomly<4.1,>=4.0.0; extra == 'test'
21
21
  Requires-Dist: pytest-regressions<2.9,>=2.8.3; extra == 'test'
22
22
  Requires-Dist: pytest-repeat<0.10,>=0.9.4; extra == 'test'
23
23
  Requires-Dist: pytest-rerunfailures<16.1,>=16.0.1; extra == 'test'
@@ -48,7 +48,7 @@ dev = [
48
48
  "coverage-conditional-plugin >=0.9.0, <0.10",
49
49
  "dycw-pytest-only >=2.1.1, <2.2",
50
50
  "pyright[nodejs] >=1.1.401, <1.2",
51
- "pytest-cov >=6.3.0, <6.4",
51
+ "pytest-cov >=7.0.0, <7.1",
52
52
  "pytest-timeout >=2.4.0, <2.5",
53
53
  ]
54
54
  fastapi = [
@@ -162,7 +162,7 @@ pyinstrument = [
162
162
  pytest = [
163
163
  "pytest >=8.4.2, <8.5",
164
164
  "pytest-asyncio >=1.1.0, <1.2",
165
- "pytest-randomly >=3.16.0, <3.17",
165
+ "pytest-randomly >=4.0.0, <4.1",
166
166
  "pytest-timeout >=2.4.0, <2.5",
167
167
  "pytest-xdist >=3.8.0, <3.9",
168
168
  ]
@@ -246,7 +246,7 @@ dependencies = [
246
246
  name = "dycw-utilities"
247
247
  readme = "README.md"
248
248
  requires-python = ">= 3.12"
249
- version = "0.166.24"
249
+ version = "0.166.25"
250
250
 
251
251
  [project.entry-points.pytest11]
252
252
  pytest-randomly = "utilities.pytest_plugins.pytest_randomly"
@@ -261,10 +261,10 @@ test = [
261
261
  "hypothesis >=6.138.15, <6.139",
262
262
  "pytest >=8.4.2, <8.5",
263
263
  "pytest-asyncio >=1.1.0, <1.2",
264
- "pytest-cov >=6.3.0, <6.4",
264
+ "pytest-cov >=7.0.0, <7.1",
265
265
  "pytest-instafail >=0.5.0, <0.6",
266
266
  "pytest-lazy-fixtures >=1.3.4, <1.4",
267
- "pytest-randomly >=3.16.0, <3.17",
267
+ "pytest-randomly >=4.0.0, <4.1",
268
268
  "pytest-regressions >=2.8.3, <2.9",
269
269
  "pytest-repeat >=0.9.4, <0.10",
270
270
  "pytest-rerunfailures >=16.0.1, <16.1",
@@ -279,7 +279,7 @@ test = [
279
279
  # bump-my-version
280
280
  [tool.bumpversion]
281
281
  allow_dirty = true
282
- current_version = "0.166.24"
282
+ current_version = "0.166.25"
283
283
 
284
284
  [[tool.bumpversion.files]]
285
285
  filename = "src/utilities/__init__.py"
@@ -231,7 +231,7 @@ class TestLiftListener:
231
231
 
232
232
  with raises(
233
233
  LiftListenerError,
234
- match="Synchronous listener .* cannot be paired with an asynchronous error handler .*",
234
+ match=r"Synchronous listener .* cannot be paired with an asynchronous error handler .*",
235
235
  ):
236
236
  _ = lift_listener(listener, Event(), error=error)
237
237
 
@@ -89,7 +89,7 @@ class TestMove:
89
89
 
90
90
  @mark.parametrize("overwrite", [param(True), param(False)])
91
91
  def test_error_source_not_found(self, *, tmp_path: Path, overwrite: bool) -> None:
92
- with raises(_MoveSourceNotFoundError, match="Source '.*' does not exist"):
92
+ with raises(_MoveSourceNotFoundError, match=r"Source '.*' does not exist"):
93
93
  move(
94
94
  tmp_path.joinpath("source"),
95
95
  tmp_path.joinpath("destination"),
@@ -103,7 +103,7 @@ class TestMove:
103
103
  destination.touch()
104
104
  with raises(
105
105
  _MoveFileExistsError,
106
- match="Cannot move file '.*' as destination '.*' already exists",
106
+ match=r"Cannot move file '.*' as destination '.*' already exists",
107
107
  ):
108
108
  move(source, destination)
109
109
 
@@ -114,7 +114,7 @@ class TestMove:
114
114
  destination.touch()
115
115
  with raises(
116
116
  _MoveDirectoryExistsError,
117
- match="Cannot move directory '.*' as destination '.*' already exists",
117
+ match=r"Cannot move directory '.*' as destination '.*' already exists",
118
118
  ):
119
119
  move(source, destination)
120
120
 
@@ -149,7 +149,7 @@ class TestWriter:
149
149
  def test_error_temporary_path_empty(self, *, tmp_path: Path) -> None:
150
150
  with (
151
151
  raises(
152
- _WriterTemporaryPathEmptyError, match="Temporary path '.*' is empty"
152
+ _WriterTemporaryPathEmptyError, match=r"Temporary path '.*' is empty"
153
153
  ),
154
154
  writer(tmp_path),
155
155
  ):
@@ -161,7 +161,7 @@ class TestWriter:
161
161
  with (
162
162
  raises(
163
163
  _WriterFileExistsError,
164
- match="Cannot write to '.*' as file already exists",
164
+ match=r"Cannot write to '.*' as file already exists",
165
165
  ),
166
166
  writer(path) as temp,
167
167
  ):
@@ -173,7 +173,7 @@ class TestWriter:
173
173
  with (
174
174
  raises(
175
175
  _WriterDirectoryExistsError,
176
- match="Cannot write to '.*' as directory already exists",
176
+ match=r"Cannot write to '.*' as directory already exists",
177
177
  ),
178
178
  writer(path) as temp,
179
179
  ):
@@ -238,5 +238,5 @@ class TestSuppressSuperObjectAttributeError:
238
238
  def __post_init__(self) -> None:
239
239
  super().__post_init__()
240
240
 
241
- with raises(AttributeError, match="'Child' object has no attribute 'error'"):
241
+ with raises(AttributeError, match=r"'Child' object has no attribute 'error'"):
242
242
  _ = Child()
@@ -33,6 +33,6 @@ class TestGetFernet:
33
33
  def test_error(self) -> None:
34
34
  with (
35
35
  temp_environ({_ENV_VAR: None}),
36
- raises(GetFernetError, match="Environment variable 'FERNET_KEY' is None"),
36
+ raises(GetFernetError, match=r"Environment variable 'FERNET_KEY' is None"),
37
37
  ):
38
38
  _ = get_fernet()
@@ -412,7 +412,7 @@ class TestMappingToDataClass:
412
412
  def test_error_missing_values(self) -> None:
413
413
  with raises(
414
414
  _MappingToDataClassMissingValuesError,
415
- match="Unable to construct 'DataClassFutureInt'; missing values for 'int_'",
415
+ match=r"Unable to construct 'DataClassFutureInt'; missing values for 'int_'",
416
416
  ):
417
417
  _ = mapping_to_dataclass(DataClassFutureInt, {})
418
418
 
@@ -600,7 +600,7 @@ class TestSerializeAndParseDataClass:
600
600
  def test_parser_split_key_value_pairs_split(self) -> None:
601
601
  with raises(
602
602
  _ParseDataClassSplitKeyValuePairsSplitError,
603
- match="Unable to construct 'DataClassFutureInt'; failed to split key-value pair 'bbb'",
603
+ match=r"Unable to construct 'DataClassFutureInt'; failed to split key-value pair 'bbb'",
604
604
  ):
605
605
  _ = parse_dataclass("a=1,bbb,c=333", DataClassFutureInt)
606
606
 
@@ -614,14 +614,14 @@ class TestSerializeAndParseDataClass:
614
614
  def test_error_text_parse(self) -> None:
615
615
  with raises(
616
616
  _ParseDataClassTextParseError,
617
- match="Unable to construct 'DataClassFutureInt' since the field 'int_' of type <class 'int'> could not be parsed; got 'invalid'",
617
+ match=r"Unable to construct 'DataClassFutureInt' since the field 'int_' of type <class 'int'> could not be parsed; got 'invalid'",
618
618
  ):
619
619
  _ = parse_dataclass("int_=invalid", DataClassFutureInt)
620
620
 
621
621
  def test_error_text_extra_non_unique(self) -> None:
622
622
  with raises(
623
623
  _ParseDataClassTextExtraNonUniqueError,
624
- match="Unable to construct 'DataClassFutureInt' since the field 'int_' of type <class 'int'> must contain exactly one parent class in `extra`; got <class 'int'>, <class 'int'> and perhaps more",
624
+ match=r"Unable to construct 'DataClassFutureInt' since the field 'int_' of type <class 'int'> must contain exactly one parent class in `extra`; got <class 'int'>, <class 'int'> and perhaps more",
625
625
  ):
626
626
  _ = parse_dataclass(
627
627
  "int_=0",
@@ -699,7 +699,7 @@ class TestSerializeAndParseDataClass:
699
699
  def test_error_missing_values(self) -> None:
700
700
  with raises(
701
701
  _ParseDataClassMissingValuesError,
702
- match="Unable to construct 'DataClassFutureInt'; missing values for 'int_'",
702
+ match=r"Unable to construct 'DataClassFutureInt'; missing values for 'int_'",
703
703
  ):
704
704
  _ = parse_dataclass("", DataClassFutureInt)
705
705
 
@@ -1007,6 +1007,6 @@ class TestYieldFields:
1007
1007
  def test_error(self) -> None:
1008
1008
  with raises(
1009
1009
  YieldFieldsError,
1010
- match="Object must be a dataclass instance or class; got None",
1010
+ match=r"Object must be a dataclass instance or class; got None",
1011
1011
  ):
1012
1012
  _ = list(yield_fields(cast("Any", None)))
@@ -208,7 +208,7 @@ class TestParseEnum:
208
208
  false2 = auto()
209
209
 
210
210
  truth: Truth1 = data.draw(sampled_from(Truth1))
211
- with raises(_EnsureEnumTypeEnumError, match=".* is not an instance of .*"):
211
+ with raises(_EnsureEnumTypeEnumError, match=r".* is not an instance of .*"):
212
212
  _ = ensure_enum(truth, Truth2)
213
213
 
214
214
  def test_error_ensure_parse(self) -> None:
@@ -217,6 +217,6 @@ class TestParseEnum:
217
217
  false = auto()
218
218
 
219
219
  with raises(
220
- _EnsureEnumParseError, match="Unable to ensure enum; got 'invalid'"
220
+ _EnsureEnumParseError, match=r"Unable to ensure enum; got 'invalid'"
221
221
  ):
222
222
  _ = ensure_enum("invalid", Truth)
@@ -265,11 +265,11 @@ class TestEnsureNotNone:
265
265
  assert result == 0
266
266
 
267
267
  def test_error(self) -> None:
268
- with raises(EnsureNotNoneError, match="Object must not be None"):
268
+ with raises(EnsureNotNoneError, match=r"Object must not be None"):
269
269
  _ = ensure_not_none(None)
270
270
 
271
271
  def test_error_with_desc(self) -> None:
272
- with raises(EnsureNotNoneError, match="Name must not be None"):
272
+ with raises(EnsureNotNoneError, match=r"Name must not be None"):
273
273
  _ = ensure_not_none(None, desc="Name")
274
274
 
275
275
 
@@ -654,14 +654,14 @@ class TestMinMaxNullable:
654
654
  @given(nones=lists(none()))
655
655
  def test_error_min_nullable(self, *, nones: list[None]) -> None:
656
656
  with raises(
657
- MinNullableError, match="Minimum of an all-None iterable is undefined"
657
+ MinNullableError, match=r"Minimum of an all-None iterable is undefined"
658
658
  ):
659
659
  _ = min_nullable(nones)
660
660
 
661
661
  @given(nones=lists(none()))
662
662
  def test_error_max_nullable(self, *, nones: list[None]) -> None:
663
663
  with raises(
664
- MaxNullableError, match="Maximum of an all-None iterable is undefined"
664
+ MaxNullableError, match=r"Maximum of an all-None iterable is undefined"
665
665
  ):
666
666
  max_nullable(nones)
667
667
 
@@ -179,7 +179,7 @@ class TestAssumeDoesNotRaise:
179
179
  if x is True:
180
180
  with (
181
181
  raises(ValueError, match=msg),
182
- assume_does_not_raise(ValueError, match="wrong"),
182
+ assume_does_not_raise(ValueError, match=r"wrong"),
183
183
  ):
184
184
  raise ValueError(msg)
185
185
 
@@ -332,7 +332,7 @@ class TestDraw2:
332
332
 
333
333
  with raises(
334
334
  _Draw2InputResolvedToSentinelError,
335
- match="The input resolved to the sentinel value; a default strategy is needed",
335
+ match=r"The input resolved to the sentinel value; a default strategy is needed",
336
336
  ):
337
337
  _ = data.draw(strategy())
338
338
 
@@ -346,7 +346,7 @@ class TestDraw2:
346
346
 
347
347
  with raises(
348
348
  _Draw2InputResolvedToSentinelError,
349
- match="The input resolved to the sentinel value; a default strategy is needed",
349
+ match=r"The input resolved to the sentinel value; a default strategy is needed",
350
350
  ):
351
351
  _ = data.draw(strategy())
352
352
 
@@ -361,7 +361,7 @@ class TestDraw2:
361
361
 
362
362
  with raises(
363
363
  _Draw2DefaultGeneratedSentinelError,
364
- match="The default search strategy generated the sentinel value",
364
+ match=r"The default search strategy generated the sentinel value",
365
365
  ):
366
366
  _ = data.draw(strategy())
367
367
 
@@ -375,7 +375,7 @@ class TestDraw2:
375
375
 
376
376
  with raises(
377
377
  _Draw2DefaultGeneratedSentinelError,
378
- match="The default search strategy generated the sentinel value",
378
+ match=r"The default search strategy generated the sentinel value",
379
379
  ):
380
380
  _ = data.draw(strategy())
381
381
 
@@ -255,7 +255,7 @@ class TestCheckBijection:
255
255
  def test_error(self) -> None:
256
256
  with raises(
257
257
  CheckBijectionError,
258
- match="Mapping .* must be a bijection; got duplicates {None: 2}",
258
+ match=r"Mapping .* must be a bijection; got duplicates {None: 2}",
259
259
  ):
260
260
  check_bijection({True: None, False: None})
261
261
 
@@ -268,7 +268,7 @@ class TestCheckDuplicates:
268
268
  def test_error(self) -> None:
269
269
  with raises(
270
270
  CheckDuplicatesError,
271
- match="Iterable .* must not contain duplicates; got {None: 2}",
271
+ match=r"Iterable .* must not contain duplicates; got {None: 2}",
272
272
  ):
273
273
  check_duplicates([None, None])
274
274
 
@@ -280,35 +280,35 @@ class TestCheckIterablesEqual:
280
280
  def test_error_differing_items_and_left_longer(self) -> None:
281
281
  with raises(
282
282
  CheckIterablesEqualError,
283
- match="Iterables .* and .* must be equal; differing items were .* and left was longer",
283
+ match=r"Iterables .* and .* must be equal; differing items were .* and left was longer",
284
284
  ):
285
285
  check_iterables_equal([1, 2, 3], [9])
286
286
 
287
287
  def test_error_differing_items_and_right_longer(self) -> None:
288
288
  with raises(
289
289
  CheckIterablesEqualError,
290
- match="Iterables .* and .* must be equal; differing items were .* and right was longer",
290
+ match=r"Iterables .* and .* must be equal; differing items were .* and right was longer",
291
291
  ):
292
292
  check_iterables_equal([9], [1, 2, 3])
293
293
 
294
294
  def test_error_differing_items_and_same_length(self) -> None:
295
295
  with raises(
296
296
  CheckIterablesEqualError,
297
- match="Iterables .* and .* must be equal; differing items were .*",
297
+ match=r"Iterables .* and .* must be equal; differing items were .*",
298
298
  ):
299
299
  check_iterables_equal([1, 2, 3], [1, 2, 9])
300
300
 
301
301
  def test_error_no_differing_items_just_left_longer(self) -> None:
302
302
  with raises(
303
303
  CheckIterablesEqualError,
304
- match="Iterables .* and .* must be equal; left was longer",
304
+ match=r"Iterables .* and .* must be equal; left was longer",
305
305
  ):
306
306
  check_iterables_equal([1, 2, 3], [1])
307
307
 
308
308
  def test_error_no_differing_items_just_right_longer(self) -> None:
309
309
  with raises(
310
310
  CheckIterablesEqualError,
311
- match="Iterables .* and .* must be equal; right was longer",
311
+ match=r"Iterables .* and .* must be equal; right was longer",
312
312
  ):
313
313
  check_iterables_equal([1], [1, 2, 3])
314
314
 
@@ -348,7 +348,7 @@ class TestCheckLength:
348
348
 
349
349
  def test_min_error(self) -> None:
350
350
  with raises(
351
- CheckLengthError, match="Object .* must have minimum length .*; got .*"
351
+ CheckLengthError, match=r"Object .* must have minimum length .*; got .*"
352
352
  ):
353
353
  check_length([], min=1)
354
354
 
@@ -357,7 +357,7 @@ class TestCheckLength:
357
357
 
358
358
  def test_max_error(self) -> None:
359
359
  with raises(
360
- CheckLengthError, match="Object .* must have maximum length .*; got .*"
360
+ CheckLengthError, match=r"Object .* must have maximum length .*; got .*"
361
361
  ):
362
362
  check_length([1], max=0)
363
363
 
@@ -369,7 +369,7 @@ class TestCheckLengthsEqual:
369
369
  def test_error(self) -> None:
370
370
  with raises(
371
371
  CheckLengthsEqualError,
372
- match="Sized objects .* and .* must have the same length; got .* and .*",
372
+ match=r"Sized objects .* and .* must have the same length; got .* and .*",
373
373
  ):
374
374
  check_lengths_equal([], [1, 2, 3])
375
375
 
@@ -381,49 +381,49 @@ class TestCheckMappingsEqual:
381
381
  def test_error_extra_and_missing_and_differing_values(self) -> None:
382
382
  with raises(
383
383
  CheckMappingsEqualError,
384
- match="Mappings .* and .* must be equal; left had extra keys .*, right had extra keys .* and differing values were .*",
384
+ match=r"Mappings .* and .* must be equal; left had extra keys .*, right had extra keys .* and differing values were .*",
385
385
  ):
386
386
  check_mappings_equal({"a": 1, "b": 2, "c": 3}, {"b": 2, "c": 9, "d": 4})
387
387
 
388
388
  def test_error_extra_and_missing(self) -> None:
389
389
  with raises(
390
390
  CheckMappingsEqualError,
391
- match="Mappings .* and .* must be equal; left had extra keys .* and right had extra keys .*",
391
+ match=r"Mappings .* and .* must be equal; left had extra keys .* and right had extra keys .*",
392
392
  ):
393
393
  check_mappings_equal({"a": 1, "b": 2, "c": 3}, {"b": 2, "c": 3, "d": 4})
394
394
 
395
395
  def test_error_extra_and_differing_values(self) -> None:
396
396
  with raises(
397
397
  CheckMappingsEqualError,
398
- match="Mappings .* and .* must be equal; left had extra keys .* and differing values were .*",
398
+ match=r"Mappings .* and .* must be equal; left had extra keys .* and differing values were .*",
399
399
  ):
400
400
  check_mappings_equal({"a": 1, "b": 2, "c": 3}, {"a": 9})
401
401
 
402
402
  def test_error_missing_and_differing_values(self) -> None:
403
403
  with raises(
404
404
  CheckMappingsEqualError,
405
- match="Mappings .* and .* must be equal; right had extra keys .* and differing values were .*",
405
+ match=r"Mappings .* and .* must be equal; right had extra keys .* and differing values were .*",
406
406
  ):
407
407
  check_mappings_equal({"a": 1}, {"a": 9, "b": 2, "c": 3})
408
408
 
409
409
  def test_error_extra_only(self) -> None:
410
410
  with raises(
411
411
  CheckMappingsEqualError,
412
- match="Mappings .* and .* must be equal; left had extra keys .*",
412
+ match=r"Mappings .* and .* must be equal; left had extra keys .*",
413
413
  ):
414
414
  check_mappings_equal({"a": 1, "b": 2, "c": 3}, {"a": 1})
415
415
 
416
416
  def test_error_missing_only(self) -> None:
417
417
  with raises(
418
418
  CheckMappingsEqualError,
419
- match="Mappings .* and .* must be equal; right had extra keys .*",
419
+ match=r"Mappings .* and .* must be equal; right had extra keys .*",
420
420
  ):
421
421
  check_mappings_equal({"a": 1}, {"a": 1, "b": 2, "c": 3})
422
422
 
423
423
  def test_error_differing_values_only(self) -> None:
424
424
  with raises(
425
425
  CheckMappingsEqualError,
426
- match="Mappings .* and .* must be equal; differing values were .*",
426
+ match=r"Mappings .* and .* must be equal; differing values were .*",
427
427
  ):
428
428
  check_mappings_equal({"a": 1, "b": 2, "c": 3}, {"a": 1, "b": 2, "c": 9})
429
429
 
@@ -438,21 +438,21 @@ class TestCheckSetsEqual:
438
438
  def test_error_extra_and_missing(self) -> None:
439
439
  with raises(
440
440
  CheckSetsEqualError,
441
- match="Sets .* and .* must be equal; left had extra items .* and right had extra items .*",
441
+ match=r"Sets .* and .* must be equal; left had extra items .* and right had extra items .*",
442
442
  ):
443
443
  check_sets_equal({1, 2, 3}, {2, 3, 4})
444
444
 
445
445
  def test_error_extra(self) -> None:
446
446
  with raises(
447
447
  CheckSetsEqualError,
448
- match="Sets .* and .* must be equal; left had extra items .*",
448
+ match=r"Sets .* and .* must be equal; left had extra items .*",
449
449
  ):
450
450
  check_sets_equal({1, 2, 3}, set())
451
451
 
452
452
  def test_error_missing(self) -> None:
453
453
  with raises(
454
454
  CheckSetsEqualError,
455
- match="Sets .* and .* must be equal; right had extra items .*",
455
+ match=r"Sets .* and .* must be equal; right had extra items .*",
456
456
  ):
457
457
  check_sets_equal(set(), {1, 2, 3})
458
458
 
@@ -464,21 +464,21 @@ class TestCheckSubMapping:
464
464
  def test_error_extra_and_differing_values(self) -> None:
465
465
  with raises(
466
466
  CheckSubMappingError,
467
- match="Mapping .* must be a submapping of .*; left had extra keys .* and differing values were .*",
467
+ match=r"Mapping .* must be a submapping of .*; left had extra keys .* and differing values were .*",
468
468
  ):
469
469
  check_submapping({"a": 1, "b": 2, "c": 3}, {"a": 9})
470
470
 
471
471
  def test_error_extra_only(self) -> None:
472
472
  with raises(
473
473
  CheckSubMappingError,
474
- match="Mapping .* must be a submapping of .*; left had extra keys .*",
474
+ match=r"Mapping .* must be a submapping of .*; left had extra keys .*",
475
475
  ):
476
476
  check_submapping({"a": 1, "b": 2, "c": 3}, {"a": 1})
477
477
 
478
478
  def test_error_differing_values_only(self) -> None:
479
479
  with raises(
480
480
  CheckSubMappingError,
481
- match="Mapping .* must be a submapping of .*; differing values were .*",
481
+ match=r"Mapping .* must be a submapping of .*; differing values were .*",
482
482
  ):
483
483
  check_submapping({"a": 1, "b": 2, "c": 3}, {"a": 1, "b": 2, "c": 9})
484
484
 
@@ -493,7 +493,7 @@ class TestCheckSubSet:
493
493
  def test_error(self) -> None:
494
494
  with raises(
495
495
  CheckSubSetError,
496
- match="Set .* must be a subset of .*; left had extra items .*",
496
+ match=r"Set .* must be a subset of .*; left had extra items .*",
497
497
  ):
498
498
  check_subset({1, 2, 3}, {1})
499
499
 
@@ -505,21 +505,21 @@ class TestCheckSuperMapping:
505
505
  def test_error_missing_and_differing_values(self) -> None:
506
506
  with raises(
507
507
  CheckSuperMappingError,
508
- match="Mapping .* must be a supermapping of .*; right had extra keys .* and differing values were .*",
508
+ match=r"Mapping .* must be a supermapping of .*; right had extra keys .* and differing values were .*",
509
509
  ):
510
510
  check_supermapping({"a": 1}, {"a": 9, "b": 2, "c": 3})
511
511
 
512
512
  def test_error_extra_only(self) -> None:
513
513
  with raises(
514
514
  CheckSuperMappingError,
515
- match="Mapping .* must be a supermapping of .*; right had extra keys .*",
515
+ match=r"Mapping .* must be a supermapping of .*; right had extra keys .*",
516
516
  ):
517
517
  check_supermapping({"a": 1}, {"a": 1, "b": 2, "c": 3})
518
518
 
519
519
  def test_error_differing_values_only(self) -> None:
520
520
  with raises(
521
521
  CheckSuperMappingError,
522
- match="Mapping .* must be a supermapping of .*; differing values were .*",
522
+ match=r"Mapping .* must be a supermapping of .*; differing values were .*",
523
523
  ):
524
524
  check_supermapping({"a": 1, "b": 2, "c": 3}, {"a": 1, "b": 2, "c": 9})
525
525
 
@@ -614,7 +614,7 @@ class TestEnsureIterable:
614
614
  _ = ensure_iterable(obj)
615
615
 
616
616
  def test_error(self) -> None:
617
- with raises(EnsureIterableError, match="Object .* must be iterable"):
617
+ with raises(EnsureIterableError, match=r"Object .* must be iterable"):
618
618
  _ = ensure_iterable(None)
619
619
 
620
620
 
@@ -627,7 +627,7 @@ class TestEnsureIterableNotStr:
627
627
  def test_error(self, *, obj: Any) -> None:
628
628
  with raises(
629
629
  EnsureIterableNotStrError,
630
- match="Object .* must be iterable, but not a string",
630
+ match=r"Object .* must be iterable, but not a string",
631
631
  ):
632
632
  _ = ensure_iterable_not_str(obj)
633
633
 
@@ -1095,7 +1095,7 @@ class TestRangePartitions:
1095
1095
  assert result == expected
1096
1096
 
1097
1097
  def test_error_stop(self) -> None:
1098
- with raises(_RangePartitionsStopError, match="'stop' must be positive; got 0"):
1098
+ with raises(_RangePartitionsStopError, match=r"'stop' must be positive; got 0"):
1099
1099
  _ = range_partitions(0, 0, 0)
1100
1100
 
1101
1101
  def test_error_total_too_low(self) -> None:
@@ -1175,7 +1175,7 @@ class TestResolveIncludeAndExclude:
1175
1175
  def test_error(self) -> None:
1176
1176
  with raises(
1177
1177
  ResolveIncludeAndExcludeError,
1178
- match="Iterables .* and .* must not overlap; got .*",
1178
+ match=r"Iterables .* and .* must not overlap; got .*",
1179
1179
  ):
1180
1180
  _ = resolve_include_and_exclude(include=[1, 2, 3], exclude=[3, 4, 5])
1181
1181
 
@@ -1226,7 +1226,7 @@ class TestSortIterable:
1226
1226
  assert result1 == result2
1227
1227
 
1228
1228
  def test_error(self) -> None:
1229
- with raises(SortIterableError, match="Unable to sort .* and .*"):
1229
+ with raises(SortIterableError, match=r"Unable to sort .* and .*"):
1230
1230
  _ = sort_iterable([sentinel, sentinel])
1231
1231
 
1232
1232
 
@@ -135,7 +135,7 @@ class TestParseImport:
135
135
  alias = ImportAlias(name=Name("foo"))
136
136
  imp = ImportFrom(module=None, names=[alias], relative=[Dot()])
137
137
  with raises(
138
- _ParseImportEmptyModuleError, match="Module must not be None; got .*"
138
+ _ParseImportEmptyModuleError, match=r"Module must not be None; got .*"
139
139
  ):
140
140
  _ = parse_import(imp)
141
141
 
@@ -51,7 +51,7 @@ class TestSetDataFrame:
51
51
  df = df.drop("date")
52
52
  with raises(
53
53
  _SetDataFrameEmptyError,
54
- match="At least 1 column must be of date/datetime type; got 0",
54
+ match=r"At least 1 column must be of date/datetime type; got 0",
55
55
  ):
56
56
  set_dataframe(df, cast("Chart", None))
57
57
 
@@ -251,7 +251,7 @@ class TestGetLoggingLevelNumber:
251
251
 
252
252
  def test_error(self) -> None:
253
253
  with raises(
254
- GetLoggingLevelNumberError, match="Invalid logging level: 'invalid'"
254
+ GetLoggingLevelNumberError, match=r"Invalid logging level: 'invalid'"
255
255
  ):
256
256
  _ = get_logging_level_number(cast("Any", "invalid"))
257
257
 
@@ -112,7 +112,7 @@ class TestCheckInteger:
112
112
  check_integer(0, equal=0)
113
113
 
114
114
  def test_equal_fail(self) -> None:
115
- with raises(CheckIntegerError, match="Integer must be equal to .*; got .*"):
115
+ with raises(CheckIntegerError, match=r"Integer must be equal to .*; got .*"):
116
116
  check_integer(0, equal=1)
117
117
 
118
118
  @given(equal_or_approx=sampled_from([10, (11, 0.1)]))
@@ -141,14 +141,14 @@ class TestCheckInteger:
141
141
  check_integer(0, min=0)
142
142
 
143
143
  def test_min_error(self) -> None:
144
- with raises(CheckIntegerError, match="Integer must be at least .*; got .*"):
144
+ with raises(CheckIntegerError, match=r"Integer must be at least .*; got .*"):
145
145
  check_integer(0, min=1)
146
146
 
147
147
  def test_max_pass(self) -> None:
148
148
  check_integer(0, max=1)
149
149
 
150
150
  def test_max_error(self) -> None:
151
- with raises(CheckIntegerError, match="Integer must be at most .*; got .*"):
151
+ with raises(CheckIntegerError, match=r"Integer must be at most .*; got .*"):
152
152
  check_integer(1, max=0)
153
153
 
154
154
 
@@ -905,7 +905,7 @@ class TestParseNumber:
905
905
  assert result == number
906
906
 
907
907
  def test_error(self) -> None:
908
- with raises(ParseNumberError, match="Unable to parse number; got 'invalid'"):
908
+ with raises(ParseNumberError, match=r"Unable to parse number; got 'invalid'"):
909
909
  _ = parse_number("invalid")
910
910
 
911
911
 
@@ -63,7 +63,7 @@ class TestYieldModules:
63
63
  )
64
64
 
65
65
  def test_error(self) -> None:
66
- with raises(ModuleNotFoundError, match="No module named 'missing_package'"):
66
+ with raises(ModuleNotFoundError, match=r"No module named 'missing_package'"):
67
67
  _ = list(yield_modules(package_missing, recursive=True))
68
68
 
69
69