dycw-utilities 0.131.15__tar.gz → 0.131.16__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 (222) hide show
  1. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/PKG-INFO +1 -1
  2. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/pyproject.toml +2 -2
  3. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_click.py +37 -135
  4. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_hypothesis.py +35 -12
  5. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typed_settings.py +15 -1
  6. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_whenever.py +0 -123
  7. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_whenever2.py +91 -100
  8. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/__init__.py +1 -1
  9. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/click.py +128 -179
  10. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/hypothesis.py +57 -19
  11. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/whenever.py +1 -192
  12. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/whenever2.py +209 -8
  13. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/.gitignore +0 -0
  14. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/LICENSE +0 -0
  15. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/README.md +0 -0
  16. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/__init__.py +0 -0
  17. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/conftest.py +0 -0
  18. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/__init__.py +0 -0
  19. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_missing/__init__.py +0 -0
  20. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_missing/module.py +0 -0
  21. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/__init__.py +0 -0
  22. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/outer_1.py +0 -0
  23. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/outer_2.py +0 -0
  24. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/subpackage/__init__.py +0 -0
  25. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/subpackage/inner_1.py +0 -0
  26. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/subpackage/inner_2.py +0 -0
  27. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_with/subpackage/inner_3.py +0 -0
  28. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_without/__init__.py +0 -0
  29. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_without/module_1.py +0 -0
  30. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/package_without/module_2.py +0 -0
  31. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/standalone.py +0 -0
  32. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/modules/with_imports.py +0 -0
  33. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__obj.json +0 -0
  34. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestMultipleRegressionFixtures__test_main__series.json +0 -0
  35. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_int.json +0 -0
  36. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__false.json +0 -0
  37. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_literal__true.json +0 -0
  38. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestOrjsonRegressionFixture__test_dataclass_nested.json +0 -0
  39. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_dataframe.json +0 -0
  40. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/regressions/test_pytest_regressions/TestPolarsRegressionFixture__test_series.json +0 -0
  41. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_aiolimiter.py +0 -0
  42. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_altair.py +0 -0
  43. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_asyncio.py +0 -0
  44. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_asyncio_classes/__init__.py +0 -0
  45. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_asyncio_classes/loopers.py +0 -0
  46. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_asyncio_classes/redis.py +0 -0
  47. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_atomicwrites.py +0 -0
  48. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_atools.py +0 -0
  49. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_cachetools.py +0 -0
  50. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_concurrent.py +0 -0
  51. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_contextlib.py +0 -0
  52. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_contextvars.py +0 -0
  53. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_cryptography.py +0 -0
  54. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_cvxpy.py +0 -0
  55. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_dataclasses.py +0 -0
  56. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_datetime.py +0 -0
  57. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_enum.py +0 -0
  58. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_errors.py +0 -0
  59. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_eventkit.py +0 -0
  60. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_fastapi.py +0 -0
  61. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_fpdf2.py +0 -0
  62. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_functions.py +0 -0
  63. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_functools.py +0 -0
  64. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_getpass.py +0 -0
  65. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_git.py +0 -0
  66. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_hashlib.py +0 -0
  67. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_http.py +0 -0
  68. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_importlib.py +0 -0
  69. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_inflect.py +0 -0
  70. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_ipython.py +0 -0
  71. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_iterables.py +0 -0
  72. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_jupyter.py +0 -0
  73. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_libcst.py +0 -0
  74. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_lightweight_charts.py +0 -0
  75. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_logging.py +0 -0
  76. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_luigi.py +0 -0
  77. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_math.py +0 -0
  78. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_memory_profiler.py +0 -0
  79. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_modules.py +0 -0
  80. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_more_itertools.py +0 -0
  81. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_numpy.py +0 -0
  82. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_operator.py +0 -0
  83. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_optuna.py +0 -0
  84. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_orjson.py +0 -0
  85. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_os.py +0 -0
  86. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_parse.py +0 -0
  87. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pathlib.py +0 -0
  88. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_period.py +0 -0
  89. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pickle.py +0 -0
  90. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_platform.py +0 -0
  91. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_polars.py +0 -0
  92. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_polars_ols.py +0 -0
  93. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pottery.py +0 -0
  94. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pqdm.py +0 -0
  95. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_psutil.py +0 -0
  96. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pydantic.py +0 -0
  97. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pyinstrument.py +0 -0
  98. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pyrsistent.py +0 -0
  99. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pytest.py +0 -0
  100. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_pytest_regressions.py +0 -0
  101. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_python_dotenv.py +0 -0
  102. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_random.py +0 -0
  103. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_re.py +0 -0
  104. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_redis.py +0 -0
  105. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_reprlib.py +0 -0
  106. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_scipy.py +0 -0
  107. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_sentinel.py +0 -0
  108. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_shelve.py +0 -0
  109. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_slack_sdk.py +0 -0
  110. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_socket.py +0 -0
  111. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_sqlalchemy.py +0 -0
  112. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_sqlalchemy_polars.py +0 -0
  113. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_statsmodel.py +0 -0
  114. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_streamlit.py +0 -0
  115. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_string.py +0 -0
  116. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_tempfile.py +0 -0
  117. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_tenacity.py +0 -0
  118. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_text.py +0 -0
  119. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_threading.py +0 -0
  120. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_timer.py +0 -0
  121. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_traceback.py +0 -0
  122. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_types.py +0 -0
  123. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typing.py +0 -0
  124. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typing_funcs/__init__.py +0 -0
  125. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typing_funcs/no_future.py +0 -0
  126. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_typing_funcs/with_future.py +0 -0
  127. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_tzdata.py +0 -0
  128. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_tzlocal.py +0 -0
  129. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_uuid.py +0 -0
  130. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_version.py +0 -0
  131. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_warnings.py +0 -0
  132. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_zipfile.py +0 -0
  133. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/tests/test_zoneinfo.py +0 -0
  134. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/aiolimiter.py +0 -0
  135. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/altair.py +0 -0
  136. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/asyncio.py +0 -0
  137. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/atomicwrites.py +0 -0
  138. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/atools.py +0 -0
  139. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/cachetools.py +0 -0
  140. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/concurrent.py +0 -0
  141. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/contextlib.py +0 -0
  142. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/contextvars.py +0 -0
  143. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/cryptography.py +0 -0
  144. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/cvxpy.py +0 -0
  145. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/dataclasses.py +0 -0
  146. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/datetime.py +0 -0
  147. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/enum.py +0 -0
  148. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/errors.py +0 -0
  149. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/eventkit.py +0 -0
  150. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/fastapi.py +0 -0
  151. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/fpdf2.py +0 -0
  152. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/functions.py +0 -0
  153. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/functools.py +0 -0
  154. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/getpass.py +0 -0
  155. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/git.py +0 -0
  156. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/hashlib.py +0 -0
  157. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/http.py +0 -0
  158. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/importlib.py +0 -0
  159. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/inflect.py +0 -0
  160. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/ipython.py +0 -0
  161. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/iterables.py +0 -0
  162. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/jupyter.py +0 -0
  163. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/libcst.py +0 -0
  164. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/lightweight_charts.py +0 -0
  165. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/logging.py +0 -0
  166. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/luigi.py +0 -0
  167. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/math.py +0 -0
  168. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/memory_profiler.py +0 -0
  169. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/modules.py +0 -0
  170. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/more_itertools.py +0 -0
  171. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/numpy.py +0 -0
  172. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/operator.py +0 -0
  173. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/optuna.py +0 -0
  174. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/orjson.py +0 -0
  175. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/os.py +0 -0
  176. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/parse.py +0 -0
  177. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pathlib.py +0 -0
  178. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/period.py +0 -0
  179. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pickle.py +0 -0
  180. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/platform.py +0 -0
  181. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/polars.py +0 -0
  182. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/polars_ols.py +0 -0
  183. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pottery.py +0 -0
  184. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pqdm.py +0 -0
  185. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/psutil.py +0 -0
  186. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/py.typed +0 -0
  187. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pydantic.py +0 -0
  188. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pyinstrument.py +0 -0
  189. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pyrsistent.py +0 -0
  190. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pytest.py +0 -0
  191. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/pytest_regressions.py +0 -0
  192. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/python_dotenv.py +0 -0
  193. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/random.py +0 -0
  194. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/re.py +0 -0
  195. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/redis.py +0 -0
  196. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/reprlib.py +0 -0
  197. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/scipy.py +0 -0
  198. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/sentinel.py +0 -0
  199. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/shelve.py +0 -0
  200. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/slack_sdk.py +0 -0
  201. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/socket.py +0 -0
  202. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/sqlalchemy.py +0 -0
  203. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/sqlalchemy_polars.py +0 -0
  204. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/statsmodels.py +0 -0
  205. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/streamlit.py +0 -0
  206. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/string.py +0 -0
  207. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/tempfile.py +0 -0
  208. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/tenacity.py +0 -0
  209. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/text.py +0 -0
  210. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/threading.py +0 -0
  211. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/timer.py +0 -0
  212. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/traceback.py +0 -0
  213. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/typed_settings.py +0 -0
  214. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/types.py +0 -0
  215. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/typing.py +0 -0
  216. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/tzdata.py +0 -0
  217. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/tzlocal.py +0 -0
  218. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/uuid.py +0 -0
  219. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/version.py +0 -0
  220. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/warnings.py +0 -0
  221. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/zipfile.py +0 -0
  222. {dycw_utilities-0.131.15 → dycw_utilities-0.131.16}/src/utilities/zoneinfo.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dycw-utilities
3
- Version: 0.131.15
3
+ Version: 0.131.16
4
4
  Author-email: Derek Wan <d.wan@icloud.com>
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -95,7 +95,7 @@ dependencies = [
95
95
  name = "dycw-utilities"
96
96
  readme = "README.md"
97
97
  requires-python = ">= 3.12"
98
- version = "0.131.15"
98
+ version = "0.131.16"
99
99
 
100
100
  [project.optional-dependencies]
101
101
  logging = [
@@ -122,7 +122,7 @@ test = [
122
122
  # bump-my-version
123
123
  [tool.bumpversion]
124
124
  allow_dirty = true
125
- current_version = "0.131.15"
125
+ current_version = "0.131.16"
126
126
 
127
127
  [[tool.bumpversion.files]]
128
128
  filename = "src/utilities/__init__.py"
@@ -6,6 +6,7 @@ from operator import attrgetter
6
6
  from re import search
7
7
  from typing import TYPE_CHECKING, Any, TypeVar
8
8
 
9
+ import whenever
9
10
  from click import ParamType, argument, command, echo, option
10
11
  from click.testing import CliRunner
11
12
  from hypothesis import given
@@ -14,70 +15,47 @@ from hypothesis.strategies import (
14
15
  SearchStrategy,
15
16
  booleans,
16
17
  data,
17
- dates,
18
- datetimes,
19
- floats,
20
18
  frozensets,
21
- integers,
22
- just,
23
19
  lists,
24
20
  sampled_from,
25
- times,
26
- uuids,
27
21
  )
28
22
  from pytest import mark, param
29
23
 
30
- import utilities.click
31
- import utilities.datetime
32
- import utilities.types
33
24
  from utilities.click import (
34
25
  CONTEXT_SETTINGS_HELP_OPTION_NAMES,
35
26
  Date,
27
+ DateDelta,
28
+ DateTimeDelta,
36
29
  DirPath,
37
30
  Enum,
38
31
  ExistingDirPath,
39
32
  ExistingFilePath,
40
33
  FilePath,
41
- FrozenSetBools,
42
34
  FrozenSetChoices,
43
- FrozenSetDates,
44
35
  FrozenSetEnums,
45
- FrozenSetFloats,
46
- FrozenSetInts,
47
- FrozenSetMonths,
48
36
  FrozenSetStrs,
49
- FrozenSetUUIDs,
50
- ListBools,
51
- ListDates,
52
37
  ListEnums,
53
- ListFloats,
54
- ListInts,
55
- ListMonths,
56
38
  ListStrs,
57
- ListUUIDs,
39
+ Month,
58
40
  PlainDateTime,
59
41
  Time,
60
- Timedelta,
42
+ TimeDelta,
61
43
  ZonedDateTime,
62
44
  )
63
- from utilities.datetime import ZERO_TIME, serialize_month
45
+ from utilities.datetime import serialize_month
64
46
  from utilities.hypothesis import (
65
- datetime_durations,
47
+ date_deltas_whenever,
48
+ date_time_deltas_whenever,
49
+ dates_whenever,
66
50
  months,
67
51
  pairs,
52
+ plain_datetimes_whenever,
68
53
  text_ascii,
69
- timedeltas_2w,
54
+ time_deltas_whenever,
55
+ times_whenever,
56
+ zoned_datetimes_whenever,
70
57
  )
71
58
  from utilities.text import join_strs, strip_and_dedent
72
- from utilities.whenever import (
73
- serialize_date,
74
- serialize_duration,
75
- serialize_plain_datetime,
76
- serialize_time,
77
- serialize_timedelta,
78
- serialize_zoned_datetime,
79
- )
80
- from utilities.zoneinfo import UTC
81
59
 
82
60
  if TYPE_CHECKING:
83
61
  from collections.abc import Callable, Iterable
@@ -205,7 +183,9 @@ class TestParameters:
205
183
  @mark.parametrize(
206
184
  ("param", "exp_repr", "strategy", "serialize", "failable"),
207
185
  [
208
- param(Date(), "DATE", dates(), serialize_date, True),
186
+ param(
187
+ Date(), "DATE", dates_whenever(), whenever.Date.format_common_iso, True
188
+ ),
209
189
  param(
210
190
  Enum(_ExampleEnum),
211
191
  "ENUM[_ExampleEnum]",
@@ -214,24 +194,17 @@ class TestParameters:
214
194
  True,
215
195
  ),
216
196
  param(
217
- utilities.click.Duration(),
218
- "DURATION",
219
- datetime_durations(min_number=0, min_timedelta=ZERO_TIME, two_way=True),
220
- serialize_duration,
197
+ DateDelta(),
198
+ "DATE DELTA",
199
+ date_deltas_whenever(parsable=True),
200
+ whenever.DateDelta.format_common_iso,
221
201
  True,
222
202
  ),
223
203
  param(
224
- FrozenSetBools(),
225
- "FROZENSET[BOOL]",
226
- frozensets(booleans()),
227
- _lift_serializer(str, sort=True),
228
- True,
229
- ),
230
- param(
231
- FrozenSetDates(),
232
- "FROZENSET[DATE]",
233
- frozensets(dates()),
234
- _lift_serializer(serialize_date, sort=True),
204
+ DateTimeDelta(),
205
+ "DATE-TIME DELTA",
206
+ date_time_deltas_whenever(parsable=True),
207
+ whenever.DateTimeDelta.format_common_iso,
235
208
  True,
236
209
  ),
237
210
  param(
@@ -248,27 +221,6 @@ class TestParameters:
248
221
  _lift_serializer(attrgetter("name"), sort=True),
249
222
  True,
250
223
  ),
251
- param(
252
- FrozenSetFloats(),
253
- "FROZENSET[FLOAT]",
254
- frozensets(floats(0, 10)),
255
- _lift_serializer(str, sort=True),
256
- True,
257
- ),
258
- param(
259
- FrozenSetInts(),
260
- "FROZENSET[INT]",
261
- frozensets(integers(0, 10)),
262
- _lift_serializer(str, sort=True),
263
- True,
264
- ),
265
- param(
266
- FrozenSetMonths(),
267
- "FROZENSET[MONTH]",
268
- frozensets(months()),
269
- _lift_serializer(serialize_month, sort=True),
270
- True,
271
- ),
272
224
  param(
273
225
  FrozenSetStrs(),
274
226
  "FROZENSET[STRING]",
@@ -276,27 +228,6 @@ class TestParameters:
276
228
  _lift_serializer(str, sort=True),
277
229
  False,
278
230
  ),
279
- param(
280
- FrozenSetUUIDs(),
281
- "FROZENSET[UUID]",
282
- frozensets(uuids()),
283
- _lift_serializer(str, sort=True),
284
- True,
285
- ),
286
- param(
287
- ListBools(),
288
- "LIST[BOOL]",
289
- lists(booleans()),
290
- _lift_serializer(str),
291
- True,
292
- ),
293
- param(
294
- ListDates(),
295
- "LIST[DATE]",
296
- lists(dates()),
297
- _lift_serializer(serialize_date),
298
- True,
299
- ),
300
231
  param(
301
232
  ListEnums(_ExampleEnum),
302
233
  "LIST[ENUM[_ExampleEnum]]",
@@ -304,58 +235,29 @@ class TestParameters:
304
235
  _lift_serializer(attrgetter("name")),
305
236
  True,
306
237
  ),
238
+ param(Month(), "MONTH", months(), serialize_month, True),
307
239
  param(
308
- ListFloats(),
309
- "LIST[FLOAT]",
310
- lists(floats(0, 10)),
311
- _lift_serializer(str),
312
- True,
313
- ),
314
- param(
315
- ListInts(),
316
- "LIST[INT]",
317
- lists(integers(0, 10)),
318
- _lift_serializer(str),
319
- True,
320
- ),
321
- param(
322
- ListMonths(),
323
- "LIST[MONTH]",
324
- lists(months()),
325
- _lift_serializer(serialize_month),
240
+ PlainDateTime(),
241
+ "PLAIN DATE-TIME",
242
+ plain_datetimes_whenever(),
243
+ whenever.PlainDateTime.format_common_iso,
326
244
  True,
327
245
  ),
328
246
  param(
329
- ListStrs(),
330
- "LIST[STRING]",
331
- lists(text_ascii()),
332
- _lift_serializer(str),
333
- False,
334
- ),
335
- param(
336
- ListUUIDs(), "LIST[UUID]", lists(uuids()), _lift_serializer(str), True
337
- ),
338
- param(utilities.click.Month(), "MONTH", months(), serialize_month, True),
339
- param(
340
- PlainDateTime(),
341
- "PLAIN DATETIME",
342
- datetimes(),
343
- serialize_plain_datetime,
344
- True,
247
+ Time(), "TIME", times_whenever(), whenever.Time.format_common_iso, True
345
248
  ),
346
- param(Time(), "TIME", times(), serialize_time, True),
347
249
  param(
348
- Timedelta(),
349
- "TIMEDELTA",
350
- timedeltas_2w(min_value=ZERO_TIME),
351
- serialize_timedelta,
250
+ TimeDelta(),
251
+ "TIME-DELTA",
252
+ time_deltas_whenever(),
253
+ whenever.TimeDelta.format_common_iso,
352
254
  True,
353
255
  ),
354
256
  param(
355
257
  ZonedDateTime(),
356
- "ZONED DATETIME",
357
- datetimes(timezones=just(UTC)),
358
- serialize_zoned_datetime,
258
+ "ZONED DATE-TIME",
259
+ zoned_datetimes_whenever(),
260
+ whenever.ZonedDateTime.format_common_iso,
359
261
  True,
360
262
  ),
361
263
  ],
@@ -28,7 +28,15 @@ from luigi import Task
28
28
  from numpy import inf, int64, isfinite, isinf, isnan, ravel, rint
29
29
  from pathvalidate import validate_filepath
30
30
  from pytest import mark, raises
31
- from whenever import Date, DateDelta, PlainDateTime, Time, TimeDelta, ZonedDateTime
31
+ from whenever import (
32
+ Date,
33
+ DateDelta,
34
+ DateTimeDelta,
35
+ PlainDateTime,
36
+ Time,
37
+ TimeDelta,
38
+ ZonedDateTime,
39
+ )
32
40
 
33
41
  from tests.conftest import SKIPIF_CI_AND_WINDOWS
34
42
  from utilities.datetime import (
@@ -52,6 +60,7 @@ from utilities.hypothesis import (
52
60
  bool_arrays,
53
61
  date_deltas_whenever,
54
62
  date_durations,
63
+ date_time_deltas_whenever,
55
64
  dates_two_digit_year,
56
65
  dates_whenever,
57
66
  datetime_durations,
@@ -127,6 +136,7 @@ from utilities.whenever import (
127
136
  serialize_duration,
128
137
  serialize_timedelta,
129
138
  )
139
+ from utilities.whenever2 import to_days, to_nanos
130
140
 
131
141
  if TYPE_CHECKING:
132
142
  from collections.abc import Iterable
@@ -193,19 +203,11 @@ class TestDateDeltasWhenever:
193
203
  )
194
204
  )
195
205
  assert isinstance(delta, DateDelta)
196
- years, months, days = delta.in_years_months_days()
197
- assert years == 0
198
- assert months == 0
206
+ days = to_days(delta)
199
207
  if min_value is not None:
200
- min_years, min_months, min_days = min_value.in_years_months_days()
201
- assert min_years == 0
202
- assert min_months == 0
203
- assert days >= min_days
208
+ assert days >= to_days(min_value)
204
209
  if max_value is not None:
205
- max_years, max_months, max_days = max_value.in_years_months_days()
206
- assert max_years == 0
207
- assert max_months == 0
208
- assert days <= max_days
210
+ assert days <= to_days(max_value)
209
211
  if parsable:
210
212
  assert DateDelta.parse_common_iso(delta.format_common_iso()) == delta
211
213
 
@@ -274,6 +276,27 @@ class TestDateDurations:
274
276
  _ = parse_duration(ser)
275
277
 
276
278
 
279
+ class TestDateTimeDeltasWhenever:
280
+ @given(data=data(), parsable=booleans())
281
+ def test_main(self, *, data: DataObject, parsable: bool) -> None:
282
+ min_value = data.draw(date_time_deltas_whenever() | none())
283
+ max_value = data.draw(date_time_deltas_whenever() | none())
284
+ with assume_does_not_raise(InvalidArgument):
285
+ delta = data.draw(
286
+ date_time_deltas_whenever(
287
+ min_value=min_value, max_value=max_value, parsable=parsable
288
+ )
289
+ )
290
+ assert isinstance(delta, DateTimeDelta)
291
+ nanos = to_nanos(delta)
292
+ if min_value is not None:
293
+ assert nanos >= to_nanos(min_value)
294
+ if max_value is not None:
295
+ assert nanos <= to_nanos(max_value)
296
+ if parsable:
297
+ assert DateTimeDelta.parse_common_iso(delta.format_common_iso()) == delta
298
+
299
+
277
300
  class TestDatesTwoDigitYear:
278
301
  @given(data=data())
279
302
  def test_main(self, *, data: DataObject) -> None:
@@ -8,10 +8,19 @@ from hypothesis import given
8
8
  from hypothesis.strategies import DataObject, SearchStrategy, data, tuples
9
9
  from pytest import mark, param
10
10
  from typed_settings import FileLoader, TomlFormat, load_settings
11
- from whenever import Date, DateDelta, PlainDateTime, Time, TimeDelta, ZonedDateTime
11
+ from whenever import (
12
+ Date,
13
+ DateDelta,
14
+ DateTimeDelta,
15
+ PlainDateTime,
16
+ Time,
17
+ TimeDelta,
18
+ ZonedDateTime,
19
+ )
12
20
 
13
21
  from utilities.hypothesis import (
14
22
  date_deltas_whenever,
23
+ date_time_deltas_whenever,
15
24
  dates_whenever,
16
25
  plain_datetimes_whenever,
17
26
  temp_paths,
@@ -39,6 +48,11 @@ class TestExtendedTSConverter:
39
48
  date_deltas_whenever(parsable=True),
40
49
  DateDelta.format_common_iso,
41
50
  ),
51
+ param(
52
+ DateTimeDelta,
53
+ date_time_deltas_whenever(parsable=True),
54
+ DateTimeDelta.format_common_iso,
55
+ ),
42
56
  param(
43
57
  PlainDateTime,
44
58
  plain_datetimes_whenever(),
@@ -8,8 +8,6 @@ from zoneinfo import ZoneInfo
8
8
 
9
9
  from hypothesis import assume, example, given
10
10
  from hypothesis.strategies import (
11
- DataObject,
12
- data,
13
11
  dates,
14
12
  datetimes,
15
13
  integers,
@@ -37,19 +35,12 @@ from utilities.hypothesis import (
37
35
  assume_does_not_raise,
38
36
  datetime_durations,
39
37
  plain_datetimes,
40
- timedeltas_2w,
41
38
  zoned_datetimes,
42
39
  )
43
40
  from utilities.tzdata import HongKong
44
41
  from utilities.whenever import (
45
42
  MAX_SERIALIZABLE_TIMEDELTA,
46
43
  MIN_SERIALIZABLE_TIMEDELTA,
47
- EnsureDateError,
48
- EnsureDateTimeError,
49
- EnsureDurationError,
50
- EnsurePlainDateTimeError,
51
- EnsureTimeError,
52
- EnsureZonedDateTimeError,
53
44
  ParseDateError,
54
45
  ParseDateTimeError,
55
46
  ParseDurationError,
@@ -61,20 +52,11 @@ from utilities.whenever import (
61
52
  SerializeTimeDeltaError,
62
53
  SerializeZonedDateTimeError,
63
54
  _CheckValidZonedDateTimeUnequalError,
64
- _EnsureTimedeltaNanosecondError,
65
- _EnsureTimedeltaParseError,
66
55
  _ParseTimedeltaNanosecondError,
67
56
  _ParseTimedeltaParseError,
68
57
  _to_datetime_delta,
69
58
  _ToDateTimeDeltaError,
70
59
  check_valid_zoned_datetime,
71
- ensure_date,
72
- ensure_datetime,
73
- ensure_duration,
74
- ensure_plain_datetime,
75
- ensure_time,
76
- ensure_timedelta,
77
- ensure_zoned_datetime,
78
60
  parse_date,
79
61
  parse_datetime,
80
62
  parse_duration,
@@ -147,16 +129,6 @@ class TestSerializeAndParseDate:
147
129
  with raises(ParseDateError, match="Unable to parse date; got 'invalid'"):
148
130
  _ = parse_date("invalid")
149
131
 
150
- @given(data=data(), date=dates())
151
- def test_ensure(self, *, data: DataObject, date: dt.date) -> None:
152
- str_or_value = data.draw(sampled_from([date, serialize_date(date)]))
153
- result = ensure_date(str_or_value)
154
- assert result == date
155
-
156
- def test_error_ensure(self) -> None:
157
- with raises(EnsureDateError, match="Unable to ensure date; got 'invalid'"):
158
- _ = ensure_date("invalid")
159
-
160
132
 
161
133
  class TestSerializeAndParseDateTime:
162
134
  @given(
@@ -175,23 +147,6 @@ class TestSerializeAndParseDateTime:
175
147
  ):
176
148
  _ = parse_datetime("invalid")
177
149
 
178
- @given(
179
- data=data(),
180
- datetime=plain_datetimes()
181
- | zoned_datetimes(time_zone=timezones() | just(dt.UTC), valid=True),
182
- )
183
- @SKIPIF_CI_AND_WINDOWS
184
- def test_ensure(self, *, data: DataObject, datetime: dt.datetime) -> None:
185
- str_or_value = data.draw(sampled_from([datetime, serialize_datetime(datetime)]))
186
- result = ensure_datetime(str_or_value)
187
- assert result == datetime
188
-
189
- def test_error_ensure(self) -> None:
190
- with raises(
191
- EnsureDateTimeError, match="Unable to ensure datetime; got 'invalid'"
192
- ):
193
- _ = ensure_datetime("invalid")
194
-
195
150
 
196
151
  class TestSerializeAndParseDuration:
197
152
  @given(duration=datetime_durations())
@@ -215,18 +170,6 @@ class TestSerializeAndParseDuration:
215
170
  ):
216
171
  _ = serialize_duration(duration)
217
172
 
218
- @given(data=data(), duration=datetime_durations(two_way=True))
219
- def test_ensure(self, *, data: DataObject, duration: Duration) -> None:
220
- str_or_value = data.draw(sampled_from([duration, serialize_duration(duration)]))
221
- result = ensure_duration(str_or_value)
222
- assert result == duration
223
-
224
- def test_error_ensure(self) -> None:
225
- with raises(
226
- EnsureDurationError, match="Unable to ensure duration; got 'invalid'"
227
- ):
228
- _ = ensure_duration("invalid")
229
-
230
173
 
231
174
  class TestSerializeAndParsePlainDateTime:
232
175
  @given(datetime=datetimes())
@@ -264,21 +207,6 @@ class TestSerializeAndParsePlainDateTime:
264
207
  ):
265
208
  _ = serialize_plain_datetime(datetime)
266
209
 
267
- @given(data=data(), datetime=datetimes())
268
- def test_ensure(self, *, data: DataObject, datetime: dt.datetime) -> None:
269
- str_or_value = data.draw(
270
- sampled_from([datetime, serialize_plain_datetime(datetime)])
271
- )
272
- result = ensure_plain_datetime(str_or_value)
273
- assert result == datetime
274
-
275
- def test_error_ensure(self) -> None:
276
- with raises(
277
- EnsurePlainDateTimeError,
278
- match="Unable to ensure plain datetime; got 'invalid'",
279
- ):
280
- _ = ensure_plain_datetime("invalid")
281
-
282
210
 
283
211
  class TestSerializeAndParseTime:
284
212
  @given(time=times())
@@ -291,16 +219,6 @@ class TestSerializeAndParseTime:
291
219
  with raises(ParseTimeError, match="Unable to parse time; got 'invalid'"):
292
220
  _ = parse_time("invalid")
293
221
 
294
- @given(data=data(), time=times())
295
- def test_ensure(self, *, data: DataObject, time: dt.time) -> None:
296
- str_or_value = data.draw(sampled_from([time, serialize_time(time)]))
297
- result = ensure_time(str_or_value)
298
- assert result == time
299
-
300
- def test_error_ensure(self) -> None:
301
- with raises(EnsureTimeError, match="Unable to ensure time; got 'invalid'"):
302
- _ = ensure_time("invalid")
303
-
304
222
 
305
223
  class TestSerializeAndParseTimedelta:
306
224
  @given(
@@ -353,28 +271,6 @@ class TestSerializeAndParseTimedelta:
353
271
  ):
354
272
  _ = serialize_timedelta(timedelta)
355
273
 
356
- @given(data=data(), timedelta=timedeltas_2w())
357
- def test_ensure(self, *, data: DataObject, timedelta: dt.timedelta) -> None:
358
- str_or_value = data.draw(
359
- sampled_from([timedelta, serialize_timedelta(timedelta)])
360
- )
361
- result = ensure_timedelta(str_or_value)
362
- assert result == timedelta
363
-
364
- def test_error_ensure(self) -> None:
365
- with raises(
366
- _EnsureTimedeltaParseError,
367
- match="Unable to ensure timedelta; got 'invalid'",
368
- ):
369
- _ = ensure_timedelta("invalid")
370
-
371
- def test_error_ensure_nano_seconds(self) -> None:
372
- with raises(
373
- _EnsureTimedeltaNanosecondError,
374
- match="Unable to ensure timedelta; got 333 nanoseconds",
375
- ):
376
- _ = ensure_timedelta("PT0.111222333S")
377
-
378
274
 
379
275
  class TestSerializeAndParseZonedDateTime:
380
276
  @given(datetime=zoned_datetimes(valid=True))
@@ -436,25 +332,6 @@ class TestSerializeAndParseZonedDateTime:
436
332
  ):
437
333
  _ = serialize_zoned_datetime(datetime)
438
334
 
439
- @given(
440
- data=data(),
441
- datetime=zoned_datetimes(time_zone=timezones() | just(dt.UTC), valid=True),
442
- )
443
- @SKIPIF_CI_AND_WINDOWS
444
- def test_ensure(self, *, data: DataObject, datetime: dt.datetime) -> None:
445
- str_or_value = data.draw(
446
- sampled_from([datetime, serialize_zoned_datetime(datetime)])
447
- )
448
- result = ensure_zoned_datetime(str_or_value)
449
- assert result == datetime
450
-
451
- def test_error_ensure(self) -> None:
452
- with raises(
453
- EnsureZonedDateTimeError,
454
- match="Unable to ensure zoned datetime; got 'invalid'",
455
- ):
456
- _ = ensure_zoned_datetime("invalid")
457
-
458
335
 
459
336
  class TestToDateTimeDelta:
460
337
  @given(days=integers(), microseconds=integers())